
توجد هنا إصدارات تجريبية جديدة ، وهذه بعض أهم الأشياء التي تعلمتها عنها.
سويفت
أولاً ، يتم تضمين أحدث إصدار تجريبي لـ Xcode مع إصدار Swift التالي:
Apple Swift version 5.0 (swiftlang-1001.0.45.7 clang-1001.0.37.7) Target: x86_64-apple-darwin18.2.0 ABI version: 0.6
لنبدأ بالأخبار الأكثر إثارة:
لم تعد تطبيقات Swift تتضمن مكتبات مرتبطة ديناميكيًا لمكتبة Swift القياسية وتراكبات Swift SDK في أشكال مختلفة للأجهزة التي تعمل بنظام iOS 12.2 و watchOS 5.2 و tvOS 12.2. نتيجة لذلك ، يمكن أن تكون تطبيقات Swift أصغر عند النشر للاختبار باستخدام TestFlight ، أو عند تخفيف أرشيف التطبيقات لتوزيع التطوير المحلي.
تطبيق الاستقرار واجهة ثنائية قادم! وهذه أخبار ممتازة. أعتقد أن هذه هي واحدة من أهم القضايا في الوقت الحالي مع Swift. ليس بسبب الآثار الجانبية ولكن بسبب فشل Swift في الوفاء بالوعود السابقة. على أي حال ، أنا أعرف حتى الأشخاص الذين قاموا بإعادة كتابة ملحقات Apple Watch الخاصة بهم إلى الهدف ج لتقليل حجم الثنائي (شيء مثل 15 ميغابايت مقابل ~ 1 ميجابايت في الهدف ج). إذا كنت تريد معرفة المزيد عن حالة ABI ، فاتبع الروابط:
Swift - ABI Dashboard و
Swift ABI Stability Manifesto .
تتيح لك السمة
@dynamicCallable
استدعاء الأنواع المسماة مثل استدعاء الوظائف باستخدام السكر النحوي البسيط. حالة الاستخدام الأساسي هي قابلية التشغيل الديناميكي للغة. (
SE-0216 )
مثال:
@dynamicCallable struct ToyCallable { func dynamicallyCall(withArguments: [Int]) {} func dynamicallyCall(withKeywordArguments: KeyValuePairs<String, Int>) {} } let x = ToyCallable() x(1, 2, 3) // Desugars to `x.dynamicallyCall(withArguments: [1, 2, 3])` x(label: 1, 2) // Desugars to `x.dynamicallyCall(withKeywordArguments: ["label": 1, "": 2])
هذا موضوع ضخم ولدي مشاعر مختلطة حول الميزة. لذا ، اقرأ مقالة
"ما الجديد في Swift 5.0" من Paul Hudson إذا كنت تريد معرفة المزيد حول ما سيحدث.
تمت إزالة وضع 3 السريع. القيم المدعومة -swift-version
هي 4 و 4.2 و 5.
لقد حان الوقت. توافق المصدر مع Swift 3 لم يعد أكثر. كان متوقعًا وأعلن مع Swift 5 Roadmap ، ولكن لا يزال. أوصي بشدة بتحديث ذاكرتك باستخدام
"Swift 5.0 Release Process" لأن Swift 5 هنا تقريبًا. احصل على استعداد.
في وضع Swift 5 ، يلزم تبديل مفاتيح التعداد التي تم إعلانها في الهدف- C أو التي تأتي من أطر عمل النظام للتعامل مع الحالات غير المعروفة - الحالات التي قد تتم إضافتها في المستقبل ، أو التي يمكن تعريفها بشكل خاص في ملف تنفيذ الهدف- C . بشكل رسمي ، يسمح Object-C بتخزين أي قيمة في تعداد شريطة أن يكون مناسبًا للنوع الأساسي.
يمكن معالجة هذه الحالات غير المعروفة باستخدام الحالة @unknown default
الجديدة غير @unknown default
، والتي ما زالت توفر تحذيرات إذا تم حذف أي حالات معروفة من المفتاح. يمكن معالجتها أيضًا باستخدام الحالة default
العادية.
إذا قمت بتحديد التعداد الخاص بك في Objective-C ولم تكن بحاجة إلى عملاء للتعامل مع الحالات غير المعروفة ، يمكنك استخدام الماكرو NS_CLOSED_ENUM
بدلاً من NS_ENUM
. يتعرف برنامج التحويل البرمجي لـ Swift على هذا ولا يتطلب وجود رموز تبديل لحالة افتراضية.
في أوضاع Swift 4 و 4.2 ، لا يزال بإمكانك استخدام @unknown default
. إذا حذفتها ، وتم تمرير قيمة غير معروفة إلى المحول ، فسيقوم البرنامج بفخاخ وقت التشغيل ، كما يفعل Swift 4.2 في Xcode 10.1. ( SE-0192 )
كان ولا يزال الألم خاصةً إذا كنت
لا تستخدم طريقة
افتراضية داخل المفاتيح. أتذكر الحلول القبيحة لخيار
.provisional
الجديد الخاص
.provisional
UNAuthorizationOptions
التي تم تقديمها في iOS 12. الآن ، مع حالة غير معروفة ، أصبح التعامل مع مثل هذه السيناريوهات أسهل بكثير.
مدير الحزمة السريعة
يمكن للحزم الآن تخصيص إعداد الحد الأدنى للنشر المستهدف لمنصات Apple عند استخدام إصدار أدوات Swift 5 Package.swift. يؤدي إنشاء حزمة إلى إرسال خطأ إذا حددت أي من تبعيات الحزمة الحزمة هدفًا للنشر الأدنى أكبر من هدف النشر الأدنى للحزمة. ( SE-0236 )
الأخبار الأكثر أهمية بالنسبة لي تتعلق بـ Swift Package Manager. من الناحية الفنية ، يمكن لهذا التغيير حل الكثير من المشكلات التي تمنع SPM من أن تكون مفيدة في عالم iOS. في مقالي السابق "
Swift Package Manager يبني أطر عمل iOS " حاولت تحليل الحالة الحالية لـ SPM في سياق تطوير iOS. والآن يبدو أنه سيتعين علي إعادة تقييم أفكاري واستنتاجاتي.
هناك بعض المشكلات السيئة أيضًا:
قد تواجه بعض المشاريع انحدارات وقت الترجمة من الإصدارات السابقة ؛
تعطل مشروعات سطر الأوامر السريع عند بدء التشغيل مع وجود أخطاء "dyld: Library لم يتم تحميلها".
الحل البديل: إضافة إعداد بناء المعرفة من قبل المستخدم
SWIFT_FORCE_STATIC_LINK_STDLIB=YES
تم حل الكثير من المشكلات بالإضافة إلى النقاط الأخرى في
سجل التغيير المتعلقة بـ Swift 5 ، لكنها خاصة بما تفعله. تحقق منها ، ربما تريد استخدام أدوات التهيئة الموروثة المعينة ذات المعلمات المتغيرة ، أو تم حظرك بسبب مشكلة توقف تام بسبب تعريفات النوع العودية المعقدة التي تتضمن فئات وعلمًا عامًا ، أو كنت تكافح مع الاسم المستعار للنوع العام ضمن طريقة
@objc
.
آبل كلانج مترجم
هناك الكثير من التحذيرات الجديدة لـ Apple Clang Compiler. ويتعلق معظمهم بالأطر والوحدات النمطية. إنه أمر مثير للاهتمام للغاية لأنه يمكن ربطه بتكامل Swift Package Manager كأداة تبعية. أهمها ، في رأيي ، هي:
يحدد التشخيص الجديد رؤوس إطار العمل التي تستخدم عرض الأسعار يتضمن بدلاً من تضمين نمط الإطار. يتم إيقاف التحذير افتراضيًا ولكن يمكنك تمكينه بتمرير -Wquoted-include-in-framework-header
to clang؛
قد تكون الرؤوس العامة في إطار ما خطأ #import
أو #include
رؤوس خاصة ، والتي تسبب انتهاكات الطبقات ودورات وحدة نمطية محتملة. هناك تشخيص جديد يبلغ عن مثل هذه الانتهاكات. يتم إيقاف -Wframework-include-private-from-public
بشكل افتراضي في -Wframework-include-private-from-public
فيه -Wframework-include-private-from-public
؛
يمنع استخدام @import
في رؤوس إطار العمل من استخدام رؤوس بدون وحدات نمطية. يكتشف تشخيص جديد استخدام @import
في رؤوس إطار العمل عندما تمر علامة fmodules
. يتم إيقاف تشغيل التشخيص افتراضيًا في clang
ويتم التحكم فيه باستخدام - علامة Watimport-in-framework-header
؛
في السابق ، لم يؤثر حذف الكلمة الأساسية framework
عند الإعلان عن وحدة نمطية للإطار على عملية التجميع ولكنها فعلت بصمت الشيء الخطأ. تشخيص جديد ، - Wincomplete-framework-module-declaration
، وإصلاح جديد يقترح إضافة الكلمة الأساسية المناسبة. يتم تشغيل هذا التحذير افتراضيًا عند تمرير علامة -fmodules
إلى -fmodules
.
أولاً ، كيفية تشغيلها: انتقل إلى
إعدادات لإنشاء هدف التطبيق الخاص بك ، ابحث عن
"Apple Clang - Custom Compiler Flags" ووضع العلامة المطلوبة على
"Other C Flags" .

لقد حاولت إنشاء تطبيق قديم يستند إلى C الهدف ووجدت الكثير من المشكلات مع الرؤوس الخاصة في رؤوس الإطارات العامة:

وبعض المشكلات المتعلقة بالواردات ذات علامات الاقتباس المزدوجة داخل الأطر:

أنصحك بتشغيل مثل هذه التشخيصات ، وعلى الأقل ، إنشاء مشاكل للتراكم الخاص بك. يوم واحد ، كل هذه المشاكل سوف تسبب لك صداع حقيقي.
بناء النظام
هناك أيضًا ميزة جديدة ونظام Build Build:
تعتمد التبعيات الضمنية الآن على العثور على التبعيات في إشارات Linker الأخرى للأطر والمكتبات المرتبطة المحددة مع -framework
و -weak_framework
و -reexport_framework
و -lazy_framework
و -weak-l,
-reexport-l
و -lazy-l
و -l
.
انها حقا مثيرة للاهتمام كذلك. بشكل عام ، فهذا يعني أنه يمكنك تحديد التبعيات الضمنية الخاصة بك عبر
.xcconfig
أو حتى مع خيارات
xcodebuild
وتجنب هذه الارتباط /
تضمين المراحل في Xcode.
تصحيح الأخطاء
يحتوي تصحيح الأخطاء على ميزات جديدة:
يتم عرض خصائص UIStackView الآن في عارض الكائنات مصحح أخطاء العرض؛
يعرض مصحح الأخطاء عرض تخطيط ثلاثي الأبعاد أكثر إحكاما.

يمكن لـ Xcode الآن التقاط رسم بياني للذاكرة تلقائيًا ، في حالة مواجهة استثناء مورد ذاكرة أثناء تصحيح الأخطاء. لتمكين التقاطات الرسم البياني للذاكرة ، انتقل إلى علامة التبويب تشخيص من إعدادات تشغيل المخطط ؛
في نظامي iOS و watchOS ، يعرض Xcode حد الذاكرة لتشغيل التطبيقات في تقرير الذاكرة أثناء اقترابك من الحد ؛

رؤية الخط الأحمر؟ الوكالة الدولية للطاقة يرسل
applicationDidReceiveMemoryWarning(...)
عندما تصل إلى الحافة. لكنني اعتقدت أنه سيكون أكثر فائدة مما هو عليه ، أن نكون صادقين. في الوقت الحالي ، يبدو الأمر وكأنه تحسين بسيط لطيف.
مصحح LLDB
وحصل LLDB Debugger على بعض الحب أيضًا:
يمكنك الآن استخدام $0, $1,
... اختصارات في تقييم تعبير LLDB داخل عمليات الإغلاق ؛
يحتوي مصحح أخطاء LLDB على اسم مستعار للأمر جديد ، v
، للأمر "frame variable" لطباعة المتغيرات في إطار المكدس الحالي. نظرًا لأنه يتجاوز مقيم التعبير ، يمكن أن يكون v
أسرع كثيرًا ويجب تفضيله على p
أو po
.
لم ألاحظ أي تحسينات في الأداء ، لكن
v
ينتج مخرجات أفضل في بعض الحالات على الرغم من أنه ليس بديلاً عن
po
بشكل عام ، إنه فقط لإطار المكدس الحالي مع بعض القيود. انظر الأمثلة أدناه.

ملاعب
القسم المفضل لدي؟ ملاعب لنبدأ بالمشكلات المعروفة:
قد لا تنفذ الملاعب!
لسوء الحظ ، هذا هو الخبر الوحيد بخصوص Playgrounds في النسخة التجريبية الحالية.
محاكي
بعض الملاحظات حول محاكي:
لا يعمل Siri في أجهزة محاكاة watchOS و iOS ؛
تزامن اللوح بين macOS وأجهزة iOS المحاكاة أكثر موثوقية ؛
آمل حقا هو عليه.
تتم مطالبتك الآن مرة واحدة فقط بالسماح بوصول الميكروفون إلى جميع أجهزة المحاكاة.
يعد هذا تحسينًا جيدًا لأن العديد من الأشخاص يواجهون مشكلات مع CI ويقومون ببناء وكلاء بسبب هذه المشكلة. يمكن الآن تشغيل الحل تلقائيًا ، أو على الأقل ، يمكننا تحديث أدلةنا لإعداد وكلاء الإنشاء بخطوة "تشغيل جهاز محاكاة مرة واحدة".
اختبار
يدعم xccov
دمج تقارير التغطية المتعددة - والأرشيفات المرتبطة بها - معًا في تقرير وأرشيف xccov
. عند دمج التقارير ، قد يكون التقرير الكلي غير دقيق للملفات المصدر التي تغيرت منذ وقت إنشاء التقارير الأصلية. إذا لم تكن هناك تغييرات في المصدر ، فسيكون التقرير الكلي والأرشيف دقيقين ؛
يدعم xccov
الآن تقارير تغطية Xcode المختلفة ، والتي يمكن استخدامها لحساب تغييرات التغطية بمرور الوقت. على سبيل المثال ، before.xccovreport
تقارير التغطية قبل before.xccovreport
و after.xccovreport
، قم باستدعاء xccov
كما يلي: xccov diff — json before.xccovreport after.xccovreport
؛
تظهر أهداف المكتبة والإطار الثابت الآن في تقرير التغطية كإدخالات من المستوى الأعلى ، مع قيم تغطية خط يتم تجميعها عبر جميع الأهداف التي تشمل المكتبة الثابتة أو الإطار. يؤدي هذا أيضًا إلى حل مشكلة حيث يتم إدراج الملفات المصدر لمكتبة ثابتة أو هدف إطار عمل في تقرير التغطية حتى إذا كان الهدف نفسه مستبعدًا من تغطية التعليمات البرمجية في المخطط.
هذه التغييرات هي أخبار ممتازة للتكامل المستمر. تختلف بشكل خاص. أخبر فريق الهندسة المفرج عنهم وأي شخص آخر مسؤول عن مثل هذه الأشياء.
ومع ذلك ، هناك بعض القيود المتعلقة باختبار التوازي:
لا يعمل التسجيل من Clones عند تشغيل Parallelisation ؛
لا تتصرف اختبارات ملفات التعريف بشكل صحيح عند تمكين موازنة الاختبار ؛
هناك أيضًا بعض إصلاحات الأخطاء الواعدة:
إذا فشل الاختبار بسبب تعطل الاختبار أثناء الإطلاق ، يحاول Xcode إنشاء رسالة خطأ غنية تصف الفشل. هذا الفشل موجود في سجل نشاط الاختبار ويظهر في stdout
إذا كنت تستخدم xcodebuild
. الخطأ موجود أيضًا في السجلات المهيكلة الموجودة في حزمة النتائج.
لدينا الكثير من هذه القضايا ، وعادة ، ليس من الواضح على الإطلاق ما يحدث. في بعض الأحيان ، يتعلق الأمر بالارتباط غير الصحيح ، وفي بعض الأحيان إلى التحميل الزائد للنظام. ينبغي أن تساعد في الحد من التقلب.
تقارير الأعطال التي تم جمعها أثناء الاختبار لم تعد تحذف الحقول المهمة مثل سبب الإنهاء والوصف.
لا تعليق الحب فقط.
والنقطة الأخيرة حول Xcode ، مفيدة للشركات التي لديها الكثير من المطورين ، Xcode الآن يدعم
خدمة التخزين المؤقت لمحتوى macOS . هذا يعني أنه يمكنك الحصول على خادم تخزين مؤقت مع تطبيق Xcode في شبكتك المحلية.
القضايا
لقد واجهت بعض المشاكل مع الإصدار التجريبي. غالبًا مع أدوات الجهات الخارجية: قرطاج ، على سبيل المثال ، لا يعمل ، مع الخطأ التالي:
Could not find any available simulators for iOS
لقد راجعت المحاكي المتاح ، ويبدو أن هناك شيئًا ما مكسورًا في الإصدار التجريبي الحالي ؛ من المستحيل أيضًا تنزيل أوقات التشغيل الأخرى من Xcode ، قائمة أجهزة المحاكاة المتوفرة فارغة (تم ملء الرادار):
$ xcrun simctl list devices --json | grep -A16 12.1 "com.apple.CoreSimulator.SimRuntime.iOS-12-1" : [ { "availability" : "(unavailable, runtime profile not found)", "state" : "Shutdown", "isAvailable" : false, "name" : "iPhone 5s", "udid" : "DDD36346-A76F-42E8-80F4-6F11E1EE4BEB", "availabilityError" : "runtime profile not found" }, { "availability" : "(unavailable, runtime profile not found)", "state" : "Shutdown", "isAvailable" : false, "name" : "iPhone 6", "udid" : "21794717-BC89-45E4-9F57-8CF9D14A87D1", "availabilityError" : "runtime profile not found" }, --
إنها نسخة تجريبية ، بالطبع. و سجل التغيير هائل. كن صبورا ومعقولة :)
PS قرطاج لديه بالفعل إصلاح (
# 2691 ).
حسنا يبدو أنهم يقومون بتلميع ديونهم الفنية وتطبيق تصحيحات الأمان. شيئان مكسوران:
قد لا تتمكن من المصادقة داخل Wallet بعد اختيار بطاقة ؛
قد لا تتمكن من شراء خطة بيانات مسبقة الدفع باستخدام البيانات الخلوية.
وستكون أخبار Apple متاحة في كندا . ترقبوا.
الشيء الجديد الوحيد هنا هو مشكلة محتملة في Safari 12.1. بعد الترقية من Safari 10.1.2:
بعد التحديث إلى Safari 12.1 من Safari 10.1.2 ، قد لا يتم عرض صفحات الويب.
الحل البديل: قم بتشغيل الأمر التالي في المحطة الطرفية:
defaults delete com.apple.Safari
مع العواقب التالية:
تحذير: ستفقد إعدادات Safari السابقة بعد تشغيل الأمر أعلاه.
قطع النهائي
تبين أن هذه المقالة أطول بكثير مما كنت أعتقد. حسنًا ، أعطيتك كل أفكاري في جميع الأقسام أعلاه. هناك نسخة قصيرة من المقال بأكمله ببساطة ، "لقد وصل Swift 5!"
ترقبوا رطب! وشكرا للقراءة.