هفت سال گذشت، SwiftUI هنوز بتاست
خلاصهٔ کاملتر
SwiftUI سال ۲۰۱۹ با وعدههای بزرگ معرفی شد: سینتکس دکلراتیو، منبع واحد حقیقت، انیمیشن داخلی، پرویو لحظهای و کد مشترک بین همهٔ پلتفرمهای اپل. نویسنده میگه هفت سال بعد، اون هیجان اولیه جاش رو به سرخوردگی حرفهای داده و بهانهٔ «فریمورک جوونه» دیگه جواب نمیده. به گفتهٔ اون، اپل هم بیشتر زیر فشار React Native و Flutter به این سمت رفت تا توسعهدهندهها رو توی اکوسیستم نیتیو نگه داره و پورت کردن اپها به مک رو راحتتر کنه.
اولین ایراد، جریان دادهٔ همیشهدرحالتغییره. از @State و @Binding و ObservedObject شروع شد، بعد اپل بهخاطر رندرهای بیمورد فریمورک Observation و ماکروی @Observable رو آورد، ولی نویسنده معتقده هنوز معلوم نیست یه ویو چند بار و چرا آپدیت میشه. حتی APIهای دیباگ مستندنشده هم تصویر کامل رو نشون نمیدن؛ برای اون، ریاکتیویتی SwiftUI یه جعبهٔ سیاهه که به تغییرات بیربط واکنش نشون میده و مهمها رو نادیده میگیره.
دومین ایراد، موتور چیدمانه که روی مذاکرهٔ اندازه بنا شده و توی رابطهای غیرساده غیرقابلپیشبینی میشه. شاهدش هم پروژهٔ دموی آموزش رسمی خود اپل (Landmarks) ـه که با جدیدترین Xcode و macOS هم سایدبار استانداردش درست رندر نمیشه و به گفتهٔ نویسنده بیش از دو ساله همینطور مونده. آخرش هم آدم همهچی رو میپیچه توی GeometryReader، که یعنی مزیت دکلراتیو بودن رو کامل از دست دادی و باید مختصاتها رو دستی حساب کنی.
سومی نبود ثبات API و برابری امکاناته: کدبیسهای SwiftUI پر از چکهای if #available هستن. بستن کیبورد موقع اسکرول به iOS 16 نیاز داره، AsyncImage تازه توی iOS 15 اومد و API کش کردن همون تصاویر تا امروز بتاست. NavigationView هم بهجای اینکه درست شه، با NavigationStack جایگزین شد. نویسنده مدل اندروید رو بهتر میدونه: Jetpack Compose یه پکیجه که با خود اپ بسته میشه، پس روی دستگاههای قدیمی هم دقیقاً همون UI رو تحویل میده.
توی تست شخصی نویسنده روی یه گالری تصویر، اسکرول نسخهٔ SwiftUI حتی با ترفندهایی مثل دیکد کردن تصاویر روی ترد پسزمینه هم به نرمی UIKit نبود. وعدهٔ کراسپلتفرم رو هم قبول نداره: مفاهیم پایه مشترکن، ولی کامپوننتها و نحوهٔ تنظیمشون بین iOS و مک فرق میکنن و طراحی برای یه گوشیِ ۶ اینچی با یه دسکتاپ ۲۷ اینچی یکی نیست.
جمعبندی نویسنده اینه که مشکل بزرگتر یه چرخش فرهنگی توی کوپرتینوئه: از وسواس دوران Cocoa و Aqua و Auto Layout به سمت محصولاتی که «بهقدر کافی خوب» هستن. به نظر اون SwiftUI بد نیست، متوسطه — و همین خیلی بدتره؛ برای همین فعلاً هنوز فریمورکهای «قدیمی» رو ترجیح میده.
نکات کلیدی:
- هفت سال بعد از معرفی، هنوز مشکلات چیدمان و پرفورمنس سر جاشونن
- جریان داده از @State تا ماکروی @Observable مدام عوض شده و رفتار ویوها قابل پیشبینی نیست
- پروژهٔ دموی آموزش رسمی اپل روی جدیدترین Xcode و macOS هم درست رندر نمیشه
- نبود back-deployment، کدبیسها رو پر از چک if #available و پیادهسازی موازی کرده
- در تست نویسنده، اسکرول گالری تصویر در UIKit نرمتر از SwiftUI بود
- ادعای اصلی: پذیرفتن استاندارد «بهقدر کافی خوب» یه انتخاب بوده، نه یه ضرورت




