Temukan file yang hilang di beberapa target Xcode

Hai, saya Sanya - pengembang iOS dan dalam artikel ini saya akan membagikan cara saya untuk mengatasi sakit kepala yang terjadi saat mengerjakan proyek dengan beberapa target.



Saya meramalkan pertanyaan "mengapa Anda perlu beberapa target dalam proyek ini, Sanya?" Saya menjawab: pada proyek tempat saya dulu bekerja, ada satu target yang terikat pada akun pelanggan, sehingga:


  • kami tidak memiliki akses ke akun ini;
  • tidak ada kemungkinan untuk menghasilkan profil penyediaan dan sertifikat distribusi;
  • bagian terburuknya adalah tidak mungkin menambahkan perangkat baru ke profil ketentuan.

Jadi, ketika membeli perangkat baru di studio, kami sedang menunggu serangkaian negosiasi dengan pihak pelanggan untuk menambahkannya ke akun Anda dan mendapatkan kesempatan untuk mengujinya.


Solusinya jelas - untuk membuat target kedua, yang akan mirip dengan yang utama, tetapi memiliki bundel id yang berbeda dan yang akan sepenuhnya dan sepenuhnya terikat pada akun studio kami. Tidak lebih cepat dikatakan daripada dilakukan! Target kedua memungkinkan kami untuk melakukan pengembangan penuh terlepas dari pengembang di sisi pelanggan, yang menyelamatkan proses pengembangan lebih dari sekali, misalnya, ketika pada profil penyediaan target utama pengembang pelanggan menghapus semua perangkat kami dan kami tidak dapat menjalankan aplikasi pada perangkat mereka.


Beberapa target masih dapat muncul di proyek Anda bila perlu, misalnya:


  • Kumpulkan beberapa aplikasi dari satu basis kode, tetapi dengan sumber daya yang berbeda;
  • Simpan beberapa instance aplikasi pada satu perangkat.

Tetapi bekerja pada beberapa target menyebabkan kekurangannya, hal utama adalah kebutuhan untuk secara ketat mengontrol proses penambahan file baru ke proyek. Mereka berdua identik satu sama lain, masing-masing, ketika menambahkan file baru ke proyek, perlu untuk memberi tanda centang di depan kedua target.



Ini sangat sulit ketika bekerja di tim multilevel besar, baik dalam keterampilan maupun dengan itikad baik.


Jika Anda tidak mengikuti aturan sederhana ini, setelah penggabungan berikutnya, Anda mungkin menemukan bahwa salah satu target telah berhenti mengumpulkan, dan Xcode bersumpah bahwa ia tidak dapat menemukan satu atau kelas lain. Tetapi hal yang paling menarik adalah, jika seseorang belum menambahkan file dari Copy Bundle Resources ke kedua target (misalnya, sel xib), Anda hanya dapat menemukan kesalahan seperti itu dalam runtime.


Setelah masalah lain dengan target Debug, kami memutuskan untuk memberikan kontrol atas konsistensi target skrip. Kami memilih bahasa Ruby sebagai alat, karena ia memiliki permata xcodeproj yang sangat baik, yang hampir merupakan standar untuk alat tulis untuk pengembangan iOS (lihat fastlane, generamba, dll.).


Sebagai hasilnya, kami mengembangkan skrip yang mengimplementasikan logika kerja berikut:


  • jalur ke file proyek dan nama target yang diuji diumpankan ke input;
  • dalam perjalanan ke proyek, skrip menemukan proyek itu sendiri;
  • memilih target yang diinginkan, mengumpulkan file dari mereka (Sumber Kompilasi, Salin Sumber Daya Bundel dan Kerangka Kerja);
  • mencari perbedaan antara daftar file;
  • kami membuang file dari daftar putih kami karena perbedaan ini. Misalnya, file dengan konstanta yang berbeda tergantung pada target (baseUrl, jika Anda memutuskan untuk mengatur proyek sehingga aplikasi dari target yang berbeda mengakses server yang berbeda), atau file GoogleService-Info.plist, yang akan berbeda untuk target yang berbeda.

Jika skrip menemukan perbedaan, kami memiliki masalah. Ini berarti bahwa ini / itu file / kerangka kerja ditambahkan ke satu target, tetapi tidak ditambahkan ke yang lain.


Dengan demikian, skrip memungkinkan Anda untuk:


  • pastikan bahwa semua file dari Sumber Kompilasi dan Salin Sumber Daya Bundel ditambahkan dengan benar ke kedua target;
  • identitas daftar kerangka kerja tambahan juga diperiksa, yang sangat penting jika proyek Anda memiliki arsitektur multi-modul;
  • integrasi skrip pada Build Phase akan memungkinkan Anda untuk mengidentifikasi masalah bahkan sebelum tahap build proyek;
  • dan jika sebelumnya Anda mengumpulkan kedua target pada CI untuk ini, sekarang Anda dapat membiarkan perakitan menjadi hanya satu, mengurangi waktu perakitan pada CI hingga setengahnya.

Jika terjadi kesalahan, dalam Xcode Anda dapat mengamati pesan berikut:



Jika berhasil, Anda akan menemukan unicorn:



Instruksi terperinci untuk menambahkan ke proyek, pengaturan, serta proyek-Contoh di repositori .


Utilitas yang dihasilkan sempurna menunjukkan bahwa bahkan sebagai pengembang iOS Anda dapat membuat sedikit kreativitas dalam pekerjaan sehari-hari Anda dan melakukan otomatisasi dan skrip yang akan menyederhanakan hidup Anda!


Terima kasih atas perhatian anda!

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


All Articles