Xcode 10.2 و macOS Mojave 10.14.4 و iOS 12.1 والإصدارات التجريبية الأخرى



تم إصدار رموز تجريبية جديدة لـ Xcode و macOS Mojave و iOS - وإليك النقاط الأساسية التي تعلمتها.

Swift 5 لـ Xcode 10.2 beta


سويفت


بادئ ذي بدء ، تأتي أحدث نسخة تجريبية من Xcode مرفقة مع الإصدار الجديد من Swift:

Apple Swift 5.0 (swiftlang-1001.0.45.7 clang-1001.0.37.7)
Target: x86_64-apple-darwin18.2.0
ABI version: 0.6


لنبدأ بالأخبار الأكثر إثارة:
لم تعد تطبيقات Swift تتضمن DLLs لمكتبة Swift القياسية وتراكب Swift SDK في إصدارات أجهزة iOS 12.2 و watchOS 5.2 و tvOS 12.2. نتيجة لذلك ، يتم تقليل حجم تطبيقات Swift عند نشرها للاختبار في TestFlight أو عند ضغط أرشيف للتوزيع.
ستصبح ABI مستقرة في النهاية ، وهذه أخبار رائعة. في رأيي ، هذه اليوم واحدة من المشاكل الرئيسية لـ Swift - ليس بسبب الآثار الجانبية ، ولكن بسبب الوعود التي لم يتم الوفاء بها. قام بعض أصدقائي بإعادة كتابة الملحقات لـ Apple Watch على Objective-C لتقليل حجم الملف الثنائي (من حوالي 15 ميغابايت إلى 1 ميجابايت). يمكنك معرفة المزيد عن حالة ABI على الروابط: Swift ABI Dashboard و Swift ABI Manifesto of Stability .

تسمح لك السمة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 ".
Swift 3 وضع التوافق مستبعد. القيم المدعومة -swift-version هي 4 و 4.2 و 5.

لقد انتهى العصر: لم يعد التوافق على مستوى المصدر مع Swift 3 أكثر. هذه الخطوة كانت متوقعة ، تم الإعلان عنها في Swift 5 Roadmap ، وحتى الآن. أوصي بشدة بتحديث ذاكرتك من خلال قراءة Swift 5.0 Release Process . سويفت 5 هنا - استعد.
في وضع Swift 5 ، يجب أن تقوم عبارات التبديل على التعدادات المعلنة في Objective-C أو القادمة من أطر عمل النظام بمعالجة قيم غير معروفة - أي تلك التي يمكن إضافتها في المستقبل أو التي قد يتم تحديدها بشكل منفصل في ملف تنفيذ Objective-C.

بشكل رسمي ، يسمح لك Object-C بتضمين أي قيمة في التعداد إذا كان يطابق نوع الأساس. يمكن التعامل مع هذه الحالات غير المعروفة بواسطة الحالة الجديدة @unknown default @ @unknown default ، والتي لا تزال تعطي تحذيرًا في حالة تفويت أي حالات معروفة في التبديل. يمكن أيضًا التحكم فيها باستخدام الإعداد default المعتاد. إذا حددت تعدادًا في Objective-C ولا تريد أن يضطر العملاء إلى معالجة قيم غير معروفة ، NS_CLOSED_ENUM الماكرو NS_CLOSED_ENUM بدلاً من NS_ENUM . المترجم Swift يتعرف عليه ولا يتطلب تحديد default في بيان التبديل.

في أوضاع Swift 4 و 4.2 ، يمكنك أيضًا استخدام @unknown default . إذا لم يتم ذلك وفقدت قيمة غير معروفة في المحول ، فسيتم مقاطعة البرنامج - تمامًا كما كان في Swift 4.2 و Xcode 10.1 ( SE-0192 )

هذه مشكلة طويلة الأمد لا تزال تسبب إزعاجًا ، خاصةً إذا كنت تفضل عدم تعيين رموز التبديل default في رموز التبديل. أتذكر مقدار العذاب الذي تلقيته من الخيار .provisional ظهر في iOS 12 في نوع UNAuthorizationOptions . الآن ، مع إدخال حالة unknown ، أصبح التعامل مع مثل هذه الحالات أسهل بكثير.

مدير الحزمة السريعة


يمكن الآن للحزم اختيار الحد الأدنى للإصدار المطلوب لنظام Apple الأساسي (macOS ، iOS) عند استخدام ملف التكوين Package.swift من Swift 5. لا يمكن تجميع الحزمة إذا كان لدى واحدة على الأقل من التبعيات إصدار أدنى من النظام الأساسي أكبر من الإصدار المحدد للحزمة نفسها. ( SE-0236 )

في رأيي ، هذا هو أهم الأخبار فيما يتعلق بـ SPM. في الواقع ، يمكن لهذه الميزة حل العديد من المشاكل التي تحول دون أن تصبح SPM مفيدة في عالم iOS. في مقالتي الأخيرة ، حاولت تحليل الحالة الحالية لـ SPM في سياق تطوير iOS. يبدو أنني الآن يجب أن استعرض النتائج التي تم التوصل إليها.

ولكن هناك مشاكل:

  • تظهر بعض المشاريع انحدار وقت التحويل البرمجي مقارنة بالإصدارات السابقة ؛
  • مشاريع لتحطم سطر الأوامر عند بدء التشغيل ، dyld: Library not loaded خطأ dyld: Library not loaded
    (مكتبة غير محملة). عكاز: SWIFT_FORCE_STATIC_LINK_STDLIB=YES التجميع المخصص بناء SWIFT_FORCE_STATIC_LINK_STDLIB=YES .

يسرد سجل التغيير عددًا من الأخطاء الثابتة وغيرها من المعلومات حول Swift 5 والتي قد تكون مهمة لصناعتك. التحقق من ذلك: قد تقرر استخدام أدوات التهيئة الموروثة والمعينة مع عدد متغير من الوسائط. أو ربما تواجه مشكلة في حالة توقف تام بسبب تعريفات النوع العودية المعقدة مع الفئات والأدوية. أو الأسماء المستعارة العامة في طريقة @objc تمنحك إزعاجًا.

Xcode 10.2 beta


كلانج مترجم


هناك العديد من التنبيهات الجديدة لبرنامج التحويل البرمجي Clang ، ويتعلق معظمها بالأطر والوحدات النمطية. هذه الحقيقة مثيرة للاهتمام للغاية لأنها (من المفترض ) تتحدث عن تكامل Swift Package Manager كأداة لإدارة التبعية. هنا ، في رأيي ، أهم النقاط:
  • تحدد التشخيصات الجديدة رؤوس إطار العمل التي تستخدم علامات اقتباس بدلاً من تضمينات نمط الإطار. افتراضيًا ، يتم إيقاف تشغيل الإشعار ، ولكن يمكنك تمكينه بتمرير خيار -Wquoted-include-in-framework-header ؛
  • قد تنفذ الرؤوس المفتوحة للإطار عن طريق الخطأ #import أو #include الرؤوس المغلقة ، مما يؤدي إلى تعطيل هيكلي ، وأحيانًا إلى استيراد دوري للوحدات النمطية. وسيتم الإبلاغ عن مثل هذه الانتهاكات عن طريق تشخيص جديد. يتم تعطيله بشكل افتراضي في -Wframework-include-private-from-public ويتم التحكم فيه بواسطة -Wframework-include-private-from-public ؛
  • @import استخدام @import في رؤوس إطار العمل من الاستخدام بدون وحدات نمطية. تبحث التشخيصات الجديدة عن @import في الرؤوس عند تمرير علامة —fmodules . بشكل افتراضي ، يتم تعطيله والتحكم فيه بواسطة علامة -Watimport-in-framework-header ؛
  • في وقت سابق ، لم يتداخل فقدان الكلمة الأساسية framework عند إعلان وحدة نمطية للإطار مع عملية التجميع ، ولكنه أدى بصمت إلى نتيجة خاطئة. سوف تقدم لك التشخيصات الجديدة -Wincomplete-framework-module-declaration وإصلاح جديد - إضافة المفتاح المطلوب. يتم تشغيل هذا التحذير تلقائيًا عند —fmodules علامة —fmodules .


بادئ ذي بدء: كيفية تشغيلها؟ انتقل إلى قائمة Build Settings الخاصة بمشروعك ، وحدد عنصر Apple Clang - Custom Compiler Flags وقم بتعيين العلامة المطلوبة أسفل Other C Flags .



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



كانت هناك أيضًا مشكلات في علامات الاقتباس للاستيراد داخل الإطار:



أنصحك بإجراء تشخيص مماثل ، أو على الأقل تقديم مذكرة للمستقبل. مرة واحدة هذه المشاكل يمكن أن يسبب الكثير من المتاعب.

بناء النظام


يوجد أيضًا تحديث لطيف لنظام إنشاء الكود.
يعمل البحث عن التبعيات الضمنية الآن في قسم "علامات رابط أخرى" من الأُطُر والمكتبات ذات الصلة التي تحمل علامة -framework, -weak_framework, -reexport_framework, -lazy_framework, -weak-l, -reexport-l, -lazy-l —l.

هذا الابتكار هو أيضا مثيرة للاهتمام للغاية. في الجوهر ، هذا يعني أنه يمكنك الآن تحديد التبعيات الضمنية باستخدام خيار .xcconfig أو حتى xcodebuild ، مع تجنب مراحل الارتباط / التضمين في Xcode نفسها.

تصحيح الأخطاء


الابتكارات المصحح:
UIStackView عرض خصائص UIStackView الآن في مفتش المصحح المرئي. حصل المصحح المرئي على مظهر ثلاثي الأبعاد أكثر إحكاما.




الآن في حالة حدوث خطأ بسبب نقص الذاكرة ، يمكن لـ Xcode إنشاء رسم بياني لاستخدام الذاكرة تلقائيًا. يمكنك تمكين إنشاء الرسوم البيانية في نافذة التشخيص في الإعدادات لتنفيذ المخطط.

عند الاقتراب من حد استخدام الذاكرة في iOS و watchOS ، يعرض Xcode الحد في تقرير استخدام الذاكرة.




رؤية الخط الأحمر؟ عندما يتم الوصول إليه ، ستتلقى الوكالة الدولية للطاقة applicationDidReceiveMemoryWarning الإخطار applicationDidReceiveMemoryWarning . اعتقدت أن التحديث سيكون أكثر فائدة ، لكنه في الوقت الحالي مجرد إضافة صغيرة.

مصحح LLDB


ظهرت الكعك جديدة في LLDB:
  • يمكنك الآن استخدام $ 0 و $ 1 واختصارات أخرى عند تقييم التعبيرات داخل عمليات الإغلاق.
  • لدى LLDB الآن اسم مستعار جديد v لأمر frame frame ، والذي يستخدم لعرض المتغيرات في رصة الإطار الحالية. نظرًا لأن هذا لا يشتمل على أداة لتقييم التعبيرات ، يمكن أن تكون v أسرع بكثير من p أو po ، وبالتالي فمن الأفضل.


لم أجد تحسنًا في الأداء ، ولكن في بعض الحالات ، يوفر v إخراجًا أفضل - ولكنه ليس بديلاً مباشرًا لـ po ويعمل فقط مع رصة الإطار الحالية مع بعض القيود. أمثلة:



ملاعب


القسم المفضل لدي! لنبدأ مع الخلل:
قد لا يبدأ تطبيق الملاعب

لسوء الحظ ، لم تكن هناك أخبار أخرى حول Playgrounds في النسخة التجريبية الجديدة.

محاكي


بضع كلمات عن المحاكي:
سيري لا يعمل في watchOS ومحاكاة iOS.

أصبح التزامن اللوح بين macOS وأجهزة iOS المحاكاة أكثر موثوقية.


آمل أن يكون هذا صحيحا.

لن يتم تكرار طلب الوصول إلى الميكروفون على جميع الأجهزة التي تمت محاكاتها.


هذه أخبار جيدة لأن العديد من الأشخاص واجهوا صعوبة في استخدام CI وبناء عملاء بسبب هذه المشكلة. يمكنك الآن إنشاء عكاز ، أو على الأقل استكمال أدلةك بشأن العمل مع وكلاء التجميع من خلال تضمين خيار "تشغيل جهاز المحاكاة مرة واحدة".

اختبار


  • يدعم xccov دمج العديد من تقارير تغطية الأكواد (والأرشيفات ذات الصلة) في تقرير واحد مشترك وأرشيف. قد يحتوي التقرير الناتج على معلومات غير دقيقة ، لأنه قد تحدث تغييرات في الملفات المصدر بين لحظات إنشاء التقارير. إذا لم تحدث أي تغييرات ، فسيكون التقرير صحيحًا.
  • يعكس xccov الآن الفرق بين مختلف تقارير تغطية Xcode ، والتي يمكن استخدامها لحساب تغييرات التغطية. على سبيل المثال ، لتمييز الفرق بين before.xccovreport و after.xccovreport ، قم باستدعاء الأمر xccov كما يلي: xccov diff --json before.xccovreport after.xccovreport .
  • تظهر الآن المكتبة الثابتة وأهداف الإطار في تقرير التغطية في شكل إدخالات المستوى الأعلى - يتم جمع الرسوم البيانية لمؤشرات التغطية لجميع الأهداف التي تشمل مكتبة ثابتة أو إطار عمل. يؤدي هذا أيضًا إلى حل المشكلة عند إدخال الملفات المصدر لمكتبة ثابتة أو هدف إطار في التقرير ، حتى إذا تمت إزالة الهدف نفسه من تغطية التعليمات البرمجية في الرسم التخطيطي.


نبأ عظيم للتكامل المستمر ، ولا سيما دليل على الفرق. أخبر مهندسي الإصدار الخاص بك أو أولئك الذين يقومون بأشياء مماثلة.

ومع ذلك ، هناك العديد من القيود المتعلقة بموازنة الاختبارات:

  • لا يعمل التسجيل على النسخ عند تمكين التوازي ؛
  • مشروع التنميط من Xcode يتصرف بشكل غير صحيح مع تمكين اختبار التوازي.


الباقي سعيد بتصحيح بعض الخلل:
إذا فشل الاختبار بسبب تعطل عداء الاختبار عند بدء التشغيل ، سيحاول Xcode إنشاء رسالة مفصلة تصف الخطأ. يمكنك فحص هذا الخطأ في سجل الاختبار ، وإذا كنت تستخدم xcodebuild ، فسيظهر في stdout . وهو موجود أيضًا في السجلات المنظمة للحزمة الناتجة.

لدينا في كثير من الأحيان مشاكل مماثلة - ونحن في حيرة بسبب ما حدث. في بعض الأحيان تكون المسألة هي التخطيط الخاطئ ، وأحيانًا يكون التحميل الزائد للنظام. الآن ، ستزداد موثوقية التطبيق.
في تقارير التعطل التي تم جمعها أثناء الاختبار ، لم تعد الأقسام المهمة مثل سبب التعطل أو الوصف مفقودة.

لا تعليق هنا ، مجرد فرحة.
آخر الأخبار المفيدة للعديد من المطورين: يدعم Xcode الآن خدمة التخزين المؤقت لمحتوى macOS . هذا يعني أنه يمكنك إنشاء خادم تخزين مؤقت على الشبكة المحلية ، مما سيوفر الوقت والمال عند تنزيل إصدارات جديدة وقديمة من Xcode على الشبكة المحلية.

المشاكل


في هذا الإصدار التجريبي ، واجهت العديد من المشكلات. أنها تتعلق أساسا أدوات من مطوري الطرف الثالث. على سبيل المثال ، تنشئ carthage الخطأ "لم يتم العثور على أجهزة محاكاة متوفرة لنظام 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"     }, -- 

لكن هذا مجرد إصدار تجريبي ، وقائمة التغييرات ضخمة. سنكون صبور. قرطاج تدرس الوضع بالفعل ، كل التخمينات موضحة في هذا الخطأ .

iOS 12.2 beta


كذا يبدو أن Apple مشغولة بتلميع الديون الفنية وتطبيق تصحيحات الأمان ، لذلك لا توجد أخبار خطيرة ، ولكن هناك مشكلتان:
  • هناك احتمال ألا تتمكن من المصادقة مع Wallet بعد اختيار البطاقة ؛
  • هناك احتمال ألا تتمكن من شراء خطة تعرفة مدفوعة مسبقًا باستخدام شبكة الهاتف المحمول.


أخبار Apple متاحة الآن في كندا.

لا تبديل.

macOS Mojave 10.14.4 beta


التحديث الوحيد هنا هو مشكلة محتملة في Safari 12.1 بعد الترقية من Safari 10.1.2.
بعد الترقية إلى Safari 12.1 من Safari 10.1.2 ، قد لا يتم عرض صفحات الويب بشكل صحيح. (47335741)

الحل البديل: اكتب defaults delete com.apple.Safari في المحطة. يرجى ملاحظة أنه مع هذا ، ستفقد جميع إعدادات Safari السابقة.

في الختام


جاء المقال أكبر بكثير مما كنت أتوقع. سوف تجد كل ما توصلت إليه أعلاه. وباختصار - لقد حان سويفت 5!

شكرا لاهتمامكم

Source: https://habr.com/ru/post/ar437814/


All Articles