Xcode 10.2, macOS Mojave 10.14.4, iOS 12.1 dan versi beta lainnya



Kode beta baru untuk Xcode, macOS Mojave, dan iOS telah dirilis - dan inilah poin-poin kunci yang saya pelajari.

Swift 5 untuk Xcode 10.2 beta


Cepat


Pertama-tama, versi beta terbaru Xcode dibundel dengan versi baru 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


Mari kita mulai dengan berita paling menarik:
Aplikasi Swift tidak lagi menyertakan DLL untuk perpustakaan standar Swift dan overlay Swift SDK dalam versi untuk iOS 12.2, watchOS 5.2, dan perangkat tvOS 12.2. Akibatnya, aplikasi Swift berkurang ukurannya saat digunakan untuk pengujian di TestFlight atau saat mengompresi arsip untuk distribusi.
ABI akhirnya akan menjadi stabil, dan ini adalah berita bagus. Menurut pendapat saya, hari ini ini adalah salah satu masalah utama Swift - bukan karena efek samping, tetapi karena janji yang tidak terpenuhi. Beberapa teman saya bahkan menulis ulang ekstensi untuk Apple Watch di Objective-C untuk mengurangi ukuran file biner (dari sekitar 15 MB hingga 1 MB). Anda dapat mempelajari lebih lanjut tentang status ABI di tautan: Swift ABI Dashboard dan Manifesto of Stability Swift ABI .

Atribut @dynamicCallable memungkinkan Anda untuk memanggil tipe bernama seperti fungsi dengan gula sintaksis sederhana. Tujuan utamanya adalah untuk memastikan kompatibilitas dengan bahasa dinamis. ( SE-0216 )

Contoh:

 @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]) 

Topik ini cukup luas, dan inovasi membuat saya perasaan campur aduk. Paul Hudson dapat membicarakan hal ini dari sudut pandang netral dalam artikel " What's New in Swift 5.0 ".
Mode kompatibilitas Swift 3 tidak termasuk. Nilai yang didukung untuk flag -swift-version adalah 4, 4.2, dan 5.

Era telah berlalu: kompatibilitas tingkat sumber dengan Swift 3 sudah tidak ada lagi. Langkah ini diharapkan, diumumkan dalam Peta Jalan Swift 5, dan belum. Saya sangat merekomendasikan menyegarkan ingatan Anda dengan membaca Proses Rilis 5.0 Swift . Swift 5 ada di sini - bersiap-siap.
Dalam mode Swift 5, beralih pernyataan pada enumerasi yang dinyatakan dalam Objective-C atau yang berasal dari kerangka kerja sistem harus memproses nilai yang tidak diketahui - yaitu, yang dapat ditambahkan di masa mendatang atau yang dapat didefinisikan secara terpisah dalam file implementasi Objective-C.

Secara formal, Objective-C memungkinkan Anda untuk memasukkan nilai apa pun dalam enumerasi jika cocok dengan tipe dasar. @unknown default yang tidak diketahui ini dapat ditangani oleh @unknown default baru @unknown default @ @unknown default , yang masih memberikan peringatan jika ada kasus yang diketahui dalam sakelar yang terlewatkan. Mereka juga dapat dikontrol menggunakan default biasa. Jika Anda menentukan enumerasi di Objective-C dan tidak ingin klien harus memproses nilai yang tidak diketahui, gunakan makro NS_CLOSED_ENUM alih-alih NS_ENUM . Kompiler Swift mengenalinya dan tidak memerlukan penetapan default dalam pernyataan sakelar.

Dalam mode Swift 4 dan 4.2, Anda juga dapat menggunakan @unknown default . Jika ini tidak dilakukan dan nilai yang tidak diketahui terlewat di sakelar, program akan terputus - sama seperti di Swift 4.2 dan Xcode 10.1 ( SE-0192 )

Ini adalah masalah lama yang masih menyebabkan ketidaknyamanan, terutama jika Anda memilih untuk tidak mengatur sakelar default di sakelar. Saya ingat berapa banyak siksaan yang saya terima dari opsi .provisional muncul di iOS 12 dalam jenis UNAuthorizationOptions . Sekarang, dengan perkenalan kasus yang unknown , menangani situasi seperti itu menjadi jauh lebih mudah.

Manajer paket cepat


Sekarang paket dapat memilih versi minimum yang diperlukan untuk platform Apple (macOS, iOS) saat menggunakan file konfigurasi Package.swift dari Swift 5. Perakitan paket tidak dimungkinkan jika setidaknya salah satu dependensi memiliki versi minimum platform lebih besar dari versi yang ditentukan untuk paket itu sendiri. ( SE-0236 )

Menurut pendapat saya, ini adalah berita terpenting tentang SPM. Faktanya, fitur ini dapat memecahkan banyak masalah yang mencegah SPM menjadi berguna di dunia iOS. Dalam artikel terakhir saya , saya mencoba menganalisis keadaan SPM saat ini dalam konteks pengembangan iOS. Tampaknya sekarang saya harus meninjau kembali kesimpulan yang dibuat.

Tetapi ada beberapa masalah:

  • beberapa proyek menunjukkan regresi waktu kompilasi dibandingkan dengan rilis sebelumnya;
  • proyek untuk crash baris perintah saat startup, dyld: Library not loaded kesalahan dyld: Library not loaded
    (perpustakaan tidak dimuat). Crutch: SWIFT_FORCE_STATIC_LINK_STDLIB=YES build perakitan khusus SWIFT_FORCE_STATIC_LINK_STDLIB=YES .

Log perubahan mencantumkan sejumlah bug tetap dan informasi lainnya tentang Swift 5 yang mungkin penting bagi industri Anda. Lihat mereka: Anda mungkin memutuskan untuk menggunakan inisialisasi yang ditunjuk yang diwariskan dengan sejumlah variabel argumen. Atau mungkin Anda dihadapkan dengan masalah kebuntuan karena definisi tipe rekursif yang kompleks dengan kelas dan generik. Atau alias umum dalam metode @objc memberi Anda ketidaknyamanan.

Xcode 10.2 beta


Compiler Dentang


Ada banyak peringatan baru untuk kompiler Dentang, dan kebanyakan dari mereka berhubungan dengan kerangka kerja dan modul. Fakta ini cukup menarik karena ( mungkin ) berbicara tentang integrasi Manajer Paket Swift sebagai alat manajemen ketergantungan. Di sini, menurut saya, poin paling penting:
  • diagnostik baru mengidentifikasi header kerangka kerja yang menggunakan tanda kutip alih-alih inklusi gaya kerangka kerja. Secara default, notifikasi dimatikan, tetapi Anda dapat mengaktifkannya dengan melewati opsi clang -Wquoted-include-in-framework-header ;
  • header terbuka dari kerangka kerja dapat mengeksekusi #import atau #include header secara keliru, yang mengarah pada gangguan struktural, dan kadang-kadang untuk mengimpor modul secara berulang. Pelanggaran semacam itu akan dilaporkan oleh diagnosis baru. Ini dinonaktifkan secara default di clang dan dikendalikan oleh -Wframework-include-private-from-public flag;
  • penggunaan @import pada header kerangka kerja @import digunakan tanpa modul. Diagnosis baru mencari @import dalam header ketika melewati flag —fmodules . Secara default, ini dinonaktifkan dan dikendalikan oleh -Watimport-in-framework-header ;
  • Sebelumnya, hilangnya kata kunci framework ketika mendeklarasikan modul untuk kerangka kerja tidak mengganggu kompilasi, tetapi diam-diam menyebabkan hasil yang salah. Diagnostik baru -Wincomplete-framework-module-declaration dan perbaikan baru akan menawarkan Anda untuk menambahkan kunci yang diinginkan. Peringatan ini dipicu secara otomatis ketika clang —fmodules flag —fmodules .


Pertama-tama: cara menyalakannya? Buka menu Bangun Pengaturan untuk proyek Anda, pilih item Apple Clang - Custom Compiler Flags dan atur bendera yang diinginkan di bawah C Flags Lainnya .



Saya mencoba membangun aplikasi Objective-C lama dan menemukan banyak masalah dengan header pribadi di header terbuka kerangka kerja:



Ada juga masalah dengan tanda kutip untuk impor di dalam kerangka kerja:



Saya menyarankan Anda untuk melakukan diagnosis serupa, atau setidaknya membuat catatan untuk masa depan. Setelah masalah ini dapat menyebabkan banyak masalah.

Membangun sistem


Ada juga pembaruan yang bagus untuk sistem pembuatan kode.
Pencarian untuk dependensi implisit sekarang berfungsi di bagian "flag penghubung lain" dari kerangka kerja dan perpustakaan terkait yang ditandai dengan -framework, -weak_framework, -reexport_framework, -lazy_framework, -weak-l, -reexport-l, -lazy-l —l.

Inovasi ini juga sangat menarik. Pada intinya, itu berarti bahwa Anda sekarang dapat mendefinisikan dependensi implisit menggunakan opsi .xcconfig atau bahkan xcodebuild , menghindari tahapan Link / Embed di Xcode itu sendiri.

Debugging


Inovasi Debugger:
Properti UIStackView sekarang ditampilkan di inspektur debugger visual. Visual debugger mendapatkan tampilan tiga dimensi yang lebih kompak.




Sekarang, jika terjadi kesalahan karena kekurangan memori, Xcode dapat secara otomatis membuat grafik penggunaan memori. Anda dapat mengaktifkan pembuatan grafik di jendela diagnostik dalam pengaturan untuk pelaksanaan skema.

Saat mendekati batas penggunaan memori di iOS dan watchOS, Xcode menampilkan batas dalam laporan penggunaan memori.




Lihat garis merah? Ketika tercapai, Watchdog akan menerima applicationDidReceiveMemoryWarning notifikasiDidReceiveMemoryWarning. Saya pikir pembaruan akan lebih bermanfaat, tetapi untuk saat ini hanya plus kecil.

Debugger LLDB


Roti baru muncul di LLDB:
  • Sekarang Anda dapat menggunakan $ 0, $ 1 dan singkatan lainnya ketika mengevaluasi ekspresi di dalam penutupan.
  • LLDB sekarang memiliki alias v untuk perintah variabel bingkai, yang digunakan untuk menampilkan variabel dalam tumpukan frame saat ini. Karena ini tidak melibatkan alat untuk mengevaluasi ekspresi, v bisa jauh lebih cepat daripada p atau po , dan karena itu lebih disukai.


Saya tidak menemukan peningkatan kinerja, namun dalam beberapa kasus v memberikan output yang lebih baik - tetapi ini bukan pengganti langsung untuk po dan hanya bekerja dengan tumpukan frame saat ini dengan batasan tertentu. Contoh:



Taman bermain


Bagian favorit saya! Mari kita mulai dengan bug:
Aplikasi taman bermain mungkin tidak dimulai

Sayangnya, tidak ada berita lain tentang Playgrounds dalam versi beta baru.

Simulator


Beberapa kata tentang simulator:
Siri tidak berfungsi di simulator watchOS dan iOS.

Sinkronisasi papan tulis antara macOS dan perangkat iOS yang disimulasikan menjadi lebih andal.


Saya harap ini benar.

Permintaan akses mikrofon pada semua perangkat yang disimulasikan tidak akan diulang.


Ini adalah kabar baik karena banyak orang mengalami kesulitan dengan CI dan membangun agen karena masalah ini. Sekarang Anda dapat membuat tongkat penyangga, atau setidaknya melengkapi panduan Anda tentang cara bekerja dengan agen perakitan dengan memasukkan opsi "Jalankan simulator satu kali".

Pengujian


  • xccov mendukung penggabungan beberapa laporan cakupan kode (dan arsip terkait) menjadi satu laporan dan arsip umum. Laporan yang dihasilkan mungkin mengandung ketidakakuratan, karena di antara saat-saat membuat laporan, perubahan dapat terjadi pada file sumber. Jika tidak ada perubahan yang terjadi, laporan akan benar.
  • xccov sekarang mencerminkan perbedaan antara berbagai laporan cakupan Xcode, yang dapat digunakan untuk menghitung perubahan cakupan. Misalnya, untuk menyorot perbedaan antara before.xccovreport dan after.xccovreport , panggil perintah xccov sebagai berikut: xccov diff --json before.xccovreport after.xccovreport .
  • pustaka statis dan target kerangka kerja sekarang muncul dalam laporan cakupan dalam bentuk entri tingkat atas - grafik indikator cakupan dikumpulkan untuk semua target yang menyertakan pustaka atau kerangka kerja statis. Ini juga memecahkan masalah ketika file sumber pustaka statis atau target kerangka kerja dimasukkan ke dalam laporan, bahkan jika target itu sendiri dihapus dari cakupan kode dalam diagram.


Berita bagus untuk integrasi berkelanjutan, terutama demonstrasi perbedaannya. Beri tahu insinyur pelepasliaran Anda atau mereka yang melakukan hal serupa.

Namun, ada beberapa batasan mengenai paralelisasi tes:

  • rekaman pada klon tidak berfungsi ketika paralelisasi diaktifkan;
  • profil proyek dari Xcode berperilaku salah dengan uji paralelisasi diaktifkan.


Sisanya senang dengan koreksi beberapa bug:
Jika pengujian gagal karena crash runner tes saat startup, Xcode akan mencoba untuk menghasilkan pesan rinci yang menjelaskan kesalahan. Anda dapat memeriksa kesalahan ini di log pengujian, dan jika Anda menggunakan xcodebuild , ia juga akan muncul di stdout . Itu juga terkandung dalam log terstruktur dari paket yang dihasilkan.

Kami sering memiliki masalah yang sama - dan kami bingung dengan apa yang terjadi. Terkadang masalahnya adalah tata letak yang salah, terkadang sistem kelebihan beban. Sekarang, keandalan aplikasi akan meningkat.
Dalam laporan kerusakan yang dikumpulkan selama pengujian, bagian penting seperti alasan kerusakan atau deskripsi tidak lagi hilang.

Tidak ada komentar di sini, sangat senang.
Berita terbaru, berguna bagi banyak pengembang: Xcode sekarang mendukung layanan caching konten macOS . Ini berarti bahwa dengan Anda dapat membuat server caching di jaringan lokal, yang akan menghemat waktu dan uang saat mengunduh versi Xcode baru dan lama di jaringan lokal.

Masalahnya


Dalam versi beta ini, saya mengalami beberapa masalah. Mereka terutama memperhatikan alat dari pengembang pihak ketiga. Misalnya, carthage menghasilkan kesalahan "Tidak ada simulator yang tersedia untuk iOS ditemukan."

Saya memeriksa simulator yang tersedia dan tampaknya bug beta yang harus disalahkan. Selain itu, mengunduh runtime lain dari Xcode tidak tersedia - daftar simulator yang tersedia kosong:

 $ 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"     }, -- 

Tapi ini hanya beta, dan daftar perubahannya sangat besar. Kami akan bersabar. Carthage sudah mempelajari situasinya, semua tebakan diuraikan dalam bug ini.

iOS 12.2 beta


Begitu-begitu. Tampaknya Apple sibuk memoles utang teknis dan menerapkan tambalan keamanan, jadi tidak ada berita serius, tetapi ada dua masalah:
  • ada kemungkinan bahwa Anda tidak akan dapat mengautentikasi dengan Wallet setelah memilih kartu;
  • ada kemungkinan Anda tidak akan dapat membeli paket tarif prabayar menggunakan jaringan seluler.


Dan Apple News sekarang tersedia di Kanada.

Jangan beralih.

macOS Mojave 10.14.4 beta


Satu-satunya pembaruan di sini adalah masalah yang mungkin terjadi dengan Safari 12.1 setelah memutakhirkan dari Safari 10.1.2.
Setelah memutakhirkan ke Safari 12.1 dari Safari 10.1.2, halaman web mungkin tidak ditampilkan dengan benar. (47335741)

Penanganan Masalah: Ketik defaults delete com.apple.Safari di terminal. Harap dicatat bahwa dengan ini, Anda akan kehilangan semua pengaturan Safari sebelumnya.

Kesimpulannya


Artikel itu keluar jauh lebih besar dari yang saya harapkan. Anda akan menemukan semua temuan saya di atas. Dan singkatnya - Swift 5 telah datang!

Terima kasih atas perhatian anda

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


All Articles