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



Beta baru ada di sini dan ini adalah beberapa hal terpenting yang telah saya pelajari tentang mereka.

Swift 5 untuk Xcode 10.2 beta


Cepat


Pertama, Xcode beta terbaru dibundel dengan versi Swift berikut:

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 

Mari kita mulai dengan berita paling menarik:
Aplikasi Swift tidak lagi menyertakan pustaka yang terhubung secara dinamis untuk pustaka standar Swift dan hamparan Swift SDK dalam varian build untuk perangkat yang menjalankan iOS 12.2, watchOS 5.2, dan tvOS 12.2. Akibatnya, aplikasi Swift bisa lebih kecil saat digunakan untuk pengujian menggunakan TestFlight, atau saat menipiskan arsip aplikasi untuk distribusi pengembangan lokal.
Stabilitas Antarmuka Biner Aplikasi akan datang! Dan ini adalah berita bagus. Saya pikir ini adalah salah satu masalah paling signifikan saat ini dengan Swift. Bukan karena efek samping tetapi karena kegagalan Swift untuk memenuhi janji sebelumnya. Lagi pula, saya bahkan tahu orang-orang yang menulis ulang ekstensi Apple Watch mereka ke Objective C untuk mengurangi ukuran biner (sekitar 15MB vs ~ 1MB di Objective C). Jika Anda ingin tahu lebih banyak tentang keadaan ABI, ikuti tautan: Swift - ABI Dashboard dan Swift ABI Stability Manifesto .

Atribut @dynamicCallable memungkinkan Anda memanggil tipe bernama seperti Anda memanggil fungsi menggunakan gula sintaksis sederhana. Kasus penggunaan utama adalah interoperabilitas 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]) 

Ini adalah topik yang sangat besar dan saya memiliki perasaan campur aduk tentang fitur tersebut. Jadi, baca tulisan "Apa yang baru di Swift 5.0" dari Paul Hudson jika Anda ingin tahu lebih banyak tentang apa yang akan terjadi.
Mode Swift 3 telah dihapus. Nilai yang didukung untuk flag -swift-version adalah 4, 4.2, dan 5.
Waktunya telah tiba. Kompatibilitas sumber dengan Swift 3 sudah tidak ada lagi. Itu diharapkan dan diumumkan dengan Peta Jalan Swift 5, tetapi tetap saja. Saya sangat menyarankan Anda menyegarkan memori Anda dengan "Proses Rilis 5.0 Swift" karena Swift 5 hampir tiba. Bersiaplah.
Dalam mode Swift 5, beralih atas enumerasi yang dideklarasikan dalam Objective-C atau yang berasal dari kerangka kerja sistem diperlukan untuk menangani kasus yang tidak diketahui - kasus yang mungkin ditambahkan di masa depan, atau yang dapat didefinisikan secara pribadi dalam file implementasi Objective-C . Secara formal, Objective-C memungkinkan menyimpan nilai apa pun dalam enumerasi asalkan sesuai dengan tipe yang mendasarinya.
@unknown default tidak dikenal ini dapat ditangani dengan menggunakan @unknown default baru, yang masih memberikan peringatan jika ada kasus yang diketahui dihilangkan dari sakelar. Mereka juga dapat ditangani menggunakan case default normal.

Jika Anda telah menetapkan enumerasi Anda sendiri di Objective-C dan Anda tidak perlu klien untuk menangani kasus yang tidak diketahui, Anda dapat menggunakan makro NS_CLOSED_ENUM bukan NS_ENUM . Kompiler Swift mengenali ini dan tidak memerlukan sakelar untuk memiliki case default.

Dalam mode Swift 4 dan 4.2, Anda masih dapat menggunakan @unknown default . Jika Anda menghilangkannya, dan nilai yang tidak diketahui dilewatkan ke sakelar, program terperangkap saat runtime, seperti halnya Swift 4.2 di Xcode 10.1. ( SE-0192 )
Itu, dan memang, menyakitkan terutama jika Anda tidak menggunakan pendekatan default dalam switch. Saya ingat solusi buruk untuk opsi UNAuthorizationOptions properti UNAuthorizationOptions yang diperkenalkan di iOS 12. Sekarang, dengan kasus yang tidak diketahui, jauh lebih mudah untuk menangani skenario seperti itu.

Manajer paket cepat


Paket sekarang dapat menyesuaikan pengaturan target penyebaran minimum untuk platform Apple saat menggunakan versi alat Swift 5 Package.swift. Membangun sebuah paket memunculkan kesalahan jika salah satu paket dependensi dari paket menentukan target penyebaran minimum lebih besar dari target penyebaran minimum paket itu sendiri. ( SE-0236 )
Berita paling penting bagi saya menyangkut Manajer Paket Swift. Secara teknis, perubahan ini dapat memecahkan banyak masalah yang mencegah SPM berguna di dunia iOS. Dalam artikel saya sebelumnya " Swift Package Manager membangun kerangka kerja iOS " Saya mencoba menganalisis keadaan SPM saat ini dalam konteks pengembangan iOS. Dan sekarang sepertinya saya harus mengevaluasi kembali pemikiran dan kesimpulan saya.

Ada beberapa masalah buruk juga:
Beberapa proyek mungkin mengalami regresi waktu kompilasi dari rilis sebelumnya;
Proyek baris perintah Swift mogok saat diluncurkan dengan kesalahan "dyld: Library not loaded".
Penanganan Masalah: Tambahkan pengaturan bangunan yang ditentukan pengguna

 SWIFT_FORCE_STATIC_LINK_STDLIB=YES 


Banyak masalah telah diselesaikan dan juga poin lain di changelog terkait dengan Swift 5, tetapi mereka khusus untuk apa yang Anda lakukan. Periksa mereka, mungkin Anda ingin menggunakan inisialisasi yang ditunjuk secara inheren dengan parameter variadic, atau Anda diblokir oleh masalah deadlock karena definisi tipe rekursif kompleks yang melibatkan kelas dan generik, atau Anda berjuang dengan alias tipe generik dalam metode @objc .

Xcode 10.2 beta


Apple Clang Compiler


Ada banyak peringatan baru untuk Apple Clang Compiler. Dan kebanyakan dari mereka terkait dengan kerangka kerja dan modul. Ini cukup menarik karena dapat dikaitkan dengan integrasi Swift Package Manager sebagai alat ketergantungan. Yang paling penting, menurut saya, adalah:
Diagnosis baru mengidentifikasi header kerangka kerja yang menggunakan penawaran termasuk alih-alih gaya kerangka menyertakan. Peringatan tidak aktif secara default tetapi Anda dapat mengaktifkannya dengan meneruskan -Wquoted-include-in-framework-header untuk berdentang;
Tajuk publik dalam suatu kerangka kerja mungkin salah #include #import atau #include
header pribadi, yang menyebabkan pelanggaran layering dan siklus modul potensial. Ada diagnostik baru yang melaporkan pelanggaran semacam itu. Ini MATI secara default di dentang dan dikendalikan oleh -Wframework-include-private-from-public flag;
Penggunaan @import dalam header kerangka mencegah header digunakan tanpa modul. Diagnosis baru mendeteksi penggunaan @import dalam header kerangka ketika Anda melewatkan flag - fmodules . Diagnostiknya MATI secara default di clang dan dikendalikan menggunakan Watimport-in-framework-header - Watimport-in-framework-header ;
Sebelumnya, menghilangkan kata kunci framework saat mendeklarasikan modul untuk framework tidak mempengaruhi kompilasi tetapi diam-diam melakukan hal yang salah. Diagnostik baru, - Wincomplete-framework-module-declaration , dan perbaikan-baru menyarankan penambahan kata kunci yang sesuai. Peringatan ini aktif secara default ketika Anda melewati flag -fmodules untuk -fmodules .
Pertama, cara menyalakannya: Goto to Build Settings untuk target aplikasi Anda, cari "Apple Clang - Custom Compiler Flags" dan letakkan bendera yang diinginkan ke "Other C Flags" .



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



Dan beberapa masalah dengan impor yang dikutip ganda dalam kerangka kerja:



Saya sarankan Anda menjalankan diagnostik seperti itu juga dan, setidaknya, membuat masalah untuk jaminan simpanan Anda. Suatu hari, semua masalah ini akan menyebabkan Anda benar-benar sakit kepala.

Membangun sistem


Ada juga fitur Build System baru yang bagus:
Dependensi implisit sekarang mendukung menemukan dependensi di Other Linker Flags untuk kerangka kerja terkait dan pustaka yang ditentukan dengan -framework , -weak_framework , -reexport_framework , -lazy_framework , -weak-l, -reexport-l , -lazy-l , dan -l .
Ini juga sangat menarik. Secara umum, ini berarti bahwa Anda dapat mendefinisikan dependensi implisit Anda melalui .xcconfig atau bahkan dengan opsi xcodebuild dan menghindari Tautan ini /
Sematkan fase dalam Xcode.

Debugging


Debugging punya fitur baru:
Properti UIStackView sekarang disajikan dalam inspektur objek tampilan debugger;
Tampilan debugger menyajikan tata letak 3D yang lebih ringkas.


Xcode sekarang dapat secara otomatis menangkap grafik memori, jika pengecualian sumber daya memori ditemukan saat debugging. Untuk mengaktifkan tangkapan grafik memori, buka tab Diagnostics dari pengaturan yang dijalankan skema;
Pada iOS dan watchOS, Xcode menunjukkan batas memori untuk menjalankan aplikasi di dalam Memory Report saat Anda mendekati batas;


Lihat garis merah? Watchdog mengirim applicationDidReceiveMemoryWarning(...)
ketika Anda mencapai tepi. Tapi saya pikir itu akan lebih bermanfaat daripada jujur. Untuk saat ini, itu hanya terlihat seperti perbaikan kecil yang menyenangkan.

Debugger LLDB


Dan LLDB Debugger juga mendapatkan cinta:

Anda sekarang dapat menggunakan $0, $1, ... singkatan dalam evaluasi ekspresi LLDB di dalam penutupan;
LLDB debugger memiliki alias perintah baru, v , untuk perintah "variabel bingkai" untuk mencetak variabel dalam bingkai tumpukan saat ini. Karena melewati pengevaluasi ekspresi, v bisa menjadi jauh lebih cepat dan harus lebih disukai daripada p atau po .
Saya belum melihat adanya peningkatan kinerja, tetapi v menghasilkan keluaran yang lebih baik dalam beberapa kasus meskipun ini bukan pengganti po secara umum, itu hanya untuk kerangka tumpukan saat ini dengan beberapa batasan. Lihat contoh di bawah ini.



Taman bermain


Bagian favorit saya? Taman bermain! Mari kita mulai dengan masalah yang diketahui:
Taman bermain mungkin tidak dieksekusi!
Sayangnya, ini adalah satu-satunya berita tentang Playgrounds dalam versi beta saat ini.

Simulator


Beberapa catatan tentang Simulator:
Siri tidak bekerja di simulator watchOS dan iOS;

Sinkronisasi papan tulis antara macOS dan perangkat iOS yang disimulasikan lebih andal;
Saya sangat berharap begitu.
Anda sekarang hanya diminta sekali untuk mengotorisasi akses mikrofon ke semua perangkat simulator.
Ini adalah peningkatan yang baik karena banyak orang mendapatkan masalah dengan CI dan membangun agen karena masalah ini. Sekarang solusinya dapat diotomatisasi atau, setidaknya, kami dapat memperbarui panduan kami untuk menyiapkan agen bangunan dengan langkah "Jalankan simulator sekali".

Pengujian


xccov mendukung penggabungan banyak laporan cakupan - dan arsipnya yang terkait - bersama-sama menjadi laporan agregat dan arsip. Saat menggabungkan laporan, laporan agregat mungkin tidak akurat untuk file sumber yang berubah sejak saat laporan asli dibuat. Jika tidak ada perubahan sumber, laporan agregat dan arsip akan akurat;
xccov sekarang mendukung laporan cakupan Xcode yang berbeda, yang dapat digunakan untuk menghitung perubahan cakupan dari waktu ke waktu. Sebagai contoh, untuk before.xccovreport laporan cakupan before.xccovreport dan after.xccovreport , aktifkan xccov sebagai berikut: xccov diff — json before.xccovreport after.xccovreport ;
Pustaka statis dan target kerangka kerja sekarang muncul dalam laporan cakupan sebagai entri tingkat atas, dengan nilai cakupan garis yang dikumpulkan di semua target yang mencakup pustaka atau kerangka statis. Ini juga menyelesaikan masalah di mana file sumber untuk pustaka statis atau target kerangka kerja akan dimasukkan dalam laporan cakupan bahkan jika target itu sendiri dikecualikan dari cakupan kode dalam skema.
Perubahan ini adalah berita bagus untuk Integrasi Berkelanjutan. Sangat berbeda. Biarkan tim pelepasliaran Anda tahu dan siapa pun yang bertanggung jawab untuk hal-hal seperti itu.

Namun, ada beberapa batasan terkait dengan pengujian paralelisasi:
Rekaman tidak berfungsi dari Klon saat Parallelisation aktif;
Tes profil tidak berlaku dengan benar saat paralelisasi uji diaktifkan;
Ada juga beberapa perbaikan bug yang menjanjikan:
Jika pengujian gagal karena pelari uji mogok pada saat peluncuran, Xcode mencoba untuk menghasilkan pesan kesalahan kaya yang menggambarkan kegagalan. Kegagalan ini ada dalam log aktivitas pengujian dan muncul di stdout jika Anda menggunakan xcodebuild . Kesalahan juga ada di log terstruktur yang terkandung dalam bundel hasil.
Kami mendapatkan banyak masalah seperti itu, dan biasanya, tidak jelas sama sekali apa yang terjadi. Kadang-kadang, ini terkait dengan penautan yang salah, kadang-kadang sistem kelebihan beban. Ini akan membantu mengurangi kulit yang mengelupas.
Laporan kerusakan yang dikumpulkan selama pengujian tidak lagi menghilangkan bidang penting seperti alasan penghentian dan deskripsi.
Tidak ada komentar cinta saja.


Dan poin terakhir tentang Xcode, berguna untuk perusahaan dengan banyak pengembang, Xcode sekarang mendukung layanan caching konten macOS . Ini berarti bahwa Anda dapat memiliki server caching dengan aplikasi Xcode di jaringan lokal Anda.

Masalah


Saya menemui beberapa masalah dengan beta. Sebagian besar dengan alat pihak ketiga: Carthage, misalnya, yang tidak berfungsi, dengan kesalahan berikut:

 Could not find any available simulators for iOS 

Saya memeriksa simulator yang tersedia, dan tampaknya ada sesuatu yang rusak dalam beta saat ini; itu juga mustahil untuk mengunduh runtime lain dari Xcode, daftar simulator yang tersedia kosong (sebuah radar diisi):

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

Itu adalah beta, tentu saja. Dan changelog sangat besar. Sabar dan masuk akal :)

PS Carthage sudah memiliki perbaikan ( # 2691 ).

iOS 12.2 beta


Baiklah Sepertinya mereka sedang memoles utang teknologi dan menerapkan patch keamanan. Dua hal rusak:
Anda mungkin tidak dapat mengautentikasi dalam Wallet setelah memilih kartu;

Anda mungkin tidak dapat membeli paket data prabayar menggunakan data seluler.
Dan Apple News akan tersedia di Kanada . Tetap disini.

macOS Mojave 10.14.4 beta


Satu-satunya hal baru di sini adalah masalah potensial dengan Safari 12.1. Setelah meningkatkan dari Safari 10.1.2:
Setelah memperbarui ke Safari 12.1 dari Safari 10.1.2, halaman web mungkin tidak ditampilkan.
Penanganan masalah: Jalankan perintah berikut di Terminal:

 defaults delete com.apple.Safari 
Dengan konsekuensi sebagai berikut:
Peringatan: Anda akan kehilangan pengaturan Safari sebelumnya setelah menjalankan perintah di atas.

Potongan terakhir


Artikel ini ternyata jauh lebih lama dari yang saya kira. Yah, saya memang memberikan semua pemikiran saya pada semua bagian di atas. Versi singkat dari keseluruhan artikel adalah, 'Swift 5 telah tiba!'

Tetap disini dan terhidrasi! Dan terima kasih sudah membaca.

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


All Articles