Bermigrasi dari Cocoapods ke Manajer Paket Swift



Cocoapods dianggap sebagai pengelola ketergantungan paling populer untuk iOS. Dalam beberapa tahun terakhir, Apple telah bekerja pada pengembangan manajer dependensi Swift Package Manager (SPM) aslinya.

Awalnya, penggunaannya hanya dimungkinkan untuk Swift sisi-server atau aplikasi terminal. SPM dijalankan dan dimodifikasi pada aplikasi semacam itu, komunitas berkenalan dengan pekerjaannya, dan tim Apple menerima penguji beta.

Dengan dirilisnya Xcode 11, SPM mulai memasuki dunia pengembangan untuk iOS. Sekarang ini sudah menjadi alat lengkap yang dapat digunakan, tetapi sejauh ini dengan keterbatasan.

Dalam versi saat ini, SPM tidak mendukung sumber daya (kami menunggu SE-0271 ). Di negara kami, setiap modul merupakan ketergantungan mandiri atom yang dapat dihubungkan ke proyek, sehingga diperlukan sumber daya (lokalisasi, aset).

Sementara itu, kami dapat mempersiapkan migrasi: untuk memahami betapa sulitnya, apakah itu dapat diotomatisasi dan masalah apa yang mungkin Anda temui.

Mengapa bermigrasi dari Cocoapods ke SPM?


  • Keseragaman dan integrasi ke dalam ekosistem. Sudah, Xcode mengusulkan untuk membuat atau menambahkan Paket SPM.
  • Tidak seperti Cocoapods, tidak perlu lagi memiliki ruang kerja untuk mengerjakan proyek ketergantungan.
  • Setelah menambahkan ketergantungan baru, Anda tidak perlu melakukan pemasangan pod dan membangun kembali seluruh proyek.
  • Lebih mudah menggunakan dependensi lokal: struktur folder tidak berubah, dibangun kembali lebih cepat.
  • SPM , Cocoapods, Ruby ( iOS-).
  • Cocoapods Xcode Swift.
  • Example : Xcode Package.swift .
  • abstract_target: SPM .
  • blame , .
  • Ruby, .

?


Jika proyek Anda memiliki banyak dependensi, maka proses migrasi tidak dapat diselesaikan dalam satu hari. Jumlah dependensi di Podfile tidak sama dengan jumlah total dependensi, karena satu dependensi dapat datang dengan sepuluh dependensi lagi. Bahkan jika Anda tidak memiliki banyak dependensi, tetapi Anda mengembangkan dependensi Anda, adalah mungkin, bahkan di repositori pribadi, untuk tidak bermigrasi dengan cepat. Untungnya, SPM rukun dengan Cocoapods, dan proses migrasi dapat diulang. Yang terpenting adalah memperhitungkan nuansa:

  • Seharusnya tidak ada persimpangan antara dependensi SPM dan Cocoapods.
  • Migrasi harus diintegrasikan ke dalam proses pengembangan komponen. Jika komponen berkembang, peningkatan versi harus dilakukan untuk Cocoapods dan SPM.
  • Seharusnya tidak ada kesulitan untuk tim, yang berarti bahwa Anda perlu mengimplementasikan instalasi semua dependensi melalui satu perintah-cli.
  • Migrasi harus dimasukkan ke dalam CD CI. Proyek harus dibangun baik secara lokal maupun dengan agen CI, dalam semua konfigurasi.

Di mana untuk memulai?


Pertama-tama, kami mengumpulkan daftar dependensi Anda - itu disajikan di Podfile.lock. Anda dapat menggunakan utilitas seperti SPMReady .



Selanjutnya, kami mengelompokkannya berdasarkan hubungan. Misalnya, hampir semua komponen bergantung pada SMENetwork, yang berarti bahwa kami tidak akan dapat memigrasikannya ke SPM sampai SMENetwork sendiri bermigrasi.

Kemudian kami memilih satu modul, di mana sebagian besar modul bergantung - SMENetwork.
Terakhir, buka repositori modul ini, periksa di folder dan buat modul di root folder ini.

git clone ssh://.../smenetwork.git Developer/SMENetwork
cd Developer/SMENetwork
swift package init
Creating library package: SMENetwork
Creating Package.swift
Creating Sources/
Creating Sources/SMENetwork/SMENetwork.swift
Creating Tests/
Creating Tests/LinuxMain.swift
Creating Tests/SMENetworkTests/
Creating Tests/SMENetworkTests/SMENetworkTests.swift
Creating Tests/SMENetworkTests/XCTestManifests.swift

Akibatnya, kami mendapatkan file Package.swift utama dan folder Sumber dan Tes. Jika Anda sudah memilikinya, mereka tidak akan menggiling. File-file SMENetwork.swift, SMENetworkTests.swift, XCTestManifests.swift, LinuxMain.swift dibuat untuk contoh operasi Paket, mereka dapat dihapus.

File Package.swift terlihat seperti ini:



Sekarang mari kita lihat file SMENetwork.podspec:



Seperti yang Anda lihat, Sumber dan Tes ada di folder lain. Transfer file dan uji proyek Contoh Cocoapods.



Kami menambahkan platform pengembangan ke Package.swift dan mentransfer dependensi dari file podspec di sini. Kami memastikan bahwa mereka mendukung SPM: cukup periksa bahwa ada file Package.swift di Github. Jika dia tidak ada di sana dan bahkan tidak ada PR dengan dia, kami akan melakukan PR dan membantu komunitas Open-Source.





Untuk SPM, Anda tidak perlu membuat proyek Contoh: cukup buka Package.swift dalam Xcode dan itu akan mengunduh dan menghubungkan dependensi, membuat target sesuai dengan spesifikasi kami. Kami hanya bisa lari.



Dalam kasus kami, hampir semuanya berjalan di luar kotak, kecuali satu tempat di mana impor Foundation lupa: pengembang iOS terbiasa dengan fakta bahwa UIKit dan Foundation adalah opsional, karena berfungsi tanpa mereka. Sudah waktunya untuk melupakan kebiasaan ini.



Paket kompilasi, tes kompilasi, tetapi gagal.



Dan di sini kita mengalami keterbatasan sumber daya dalam Paket, tes didasarkan pada moks yang terletak di json, kami menunggu SE-0271 ...

Total


Beralih dari Cocoapods ke SPM itu mudah. Langkah-langkahnya jelas, tetapi flownya monoton dan membutuhkan otomatisasi.

Tanpa banyak usaha, Anda dapat membuat Paket dari file .podspec dan mengkomitnya ke repositori. Dan yang paling penting - Anda dapat bergerak dengan satu proyek, dan yang lainnya akan tetap menggunakan Cocoapods. Jika dia mau, tentu saja.

All Articles