Halaman ini menjelaskan cara membangun atau menguji project Xcode dengan Bazel. Ini menjelaskan perbedaan antara Xcode dan Bazel, dan memberikan langkah-langkahnya untuk mengonversi project Xcode ke project Bazel. {i>Software<i} ini juga menyediakan solusi pemecahan masalah untuk mengatasi kesalahan yang umum.
Perbedaan antara Xcode dan Bazel
Bazel mengharuskan Anda untuk menentukan setiap target versi dan setiap target dependensi, ditambah setelan build yang sesuai melalui aturan build.
Bazel memerlukan semua file yang menjadi dependensi project dalam direktori Workspace atau ditetapkan sebagai impor di
WORKSPACE
.Saat membangun project Xcode dengan Bazel, file
BUILD
akan menjadi yang tepercaya. Jika Anda mengerjakan proyek di Xcode, Anda harus membuat versi baru project Xcode yang cocok dengan fileBUILD
menggunakan Tulsi setiap kali Anda mengupdate fileBUILD
. Jika Anda tidak menggunakan Xcode, perintahbazel build
danbazel test
memberikan membangun dan menguji kemampuan Anda dengan batasan tertentu yang akan dijelaskan nanti dalam kami.Karena perbedaan dalam skema konfigurasi build, seperti tata letak direktori atau penanda build, Xcode mungkin tidak sepenuhnya menyadari "gambaran besar"-nya dari sehingga beberapa fitur Xcode mungkin tidak berfungsi. Yaitu:
Bergantung pada target yang Anda pilih untuk konversi di Tulsi, Xcode mungkin tidak dapat mengindeks sumber proyek dengan benar. Hal ini memengaruhi kode dan navigasi aplikasi di Xcode, karena Xcode tidak akan dapat melihat semua dari kode sumber proyek.
Analisis statis, pembersih alamat, dan pembersih benang mungkin tidak karena Bazel tidak menghasilkan {i>output<i} yang diharapkan Xcode untuk fitur-fitur tersebut.
Jika Anda membuat project Xcode dengan Tulsi dan menggunakan project tersebut dari dalam Xcode, Xcode akan menjalankan tes, bukan Bazel. Untuk menjalankan pengujian dengan Bazel, jalankan perintah
bazel test
secara manual.
Sebelum memulai
Sebelum memulai, lakukan hal berikut:
Instal Bazel jika Anda belum melakukannya.
Jika Anda tidak terbiasa dengan Bazel dan konsepnya, selesaikan Tutorial aplikasi iOS). Kamu harus paham Bazel ruang kerja Anda, termasuk file
WORKSPACE
danBUILD
, serta konsep target, aturan build, dan paket Bazel.Menganalisis dan memahami dependensi proyek.
Menganalisis dependensi project
Tidak seperti Xcode, Bazel mengharuskan Anda
untuk secara eksplisit mendeklarasikan semua dependensi untuk
setiap target dalam file BUILD
.
Untuk informasi selengkapnya tentang dependensi eksternal, lihat Menangani dependensi eksternal.
Membangun atau menguji project Xcode dengan Bazel
Untuk membangun atau menguji project Xcode dengan Bazel, lakukan hal berikut:
Langkah 1: Buat file WORKSPACE
Buat file WORKSPACE
di direktori baru. Direktori ini menjadi Bazel
root workspace. Jika proyek tidak menggunakan dependensi eksternal, file ini dapat
kosong. Jika proyek bergantung pada file atau paket yang tidak ada di salah satu
pada direktori project, tentukan dependensi eksternal ini di WORKSPACE
.
Langkah 2: (Eksperimental) Integrasikan dependensi CocoaPods
Untuk mengintegrasikan dependensi CocoaPods ke ruang kerja Bazel, Anda harus mengonversi ke dalam paket Bazel seperti yang dijelaskan dalam Mengonversi dependensi CocoaPods.
Langkah 3: Buat file BUILD
Setelah menentukan ruang kerja dan dependensi eksternal, Anda harus
membuat file BUILD
yang memberi tahu Bazel cara menyusun project. Berkreasi
file BUILD
di root ruang kerja Bazel dan konfigurasikan untuk melakukan
pembuatan awal project sebagai berikut:
- Langkah 3a: Tambahkan target aplikasi
- Langkah 3b: (Opsional) Tambahkan target pengujian
- Langkah 3c: Tambahkan target library
Tips: Untuk mempelajari lebih lanjut paket dan konsep Bazel lainnya, lihat Ruang kerja, paket, dan target.
Langkah 3a: Tambahkan target aplikasi
Menambahkan macos_application
atau ios_application
target aturan. Target ini masing-masing mem-build paket aplikasi macOS atau iOS.
Pada target, tentukan minimal hal berikut:
bundle_id
- ID paket (jalur Reverse-DNS diikuti nama aplikasi) biner.provisioning_profile
- profil penyediaan dari Apple Developer Anda (jika membuat aplikasi untuk perangkat iOS).families
(khusus iOS) - apakah akan membuat aplikasi untuk iPhone, iPad, atau keduanya.infoplists
- daftar file .plist untuk digabungkan ke dalam file Info.plist akhir.minimum_os_version
- versi minimum macOS atau iOS yang yang didukung aplikasi Google. Hal ini memastikan Bazel membangun aplikasi dengan level API yang benar.
Langkah 3b: (Opsional) Tambahkan target pengujian
Dukungan aturan build Apple Bazel menjalankan pengujian unit berbasis library di iOS dan macOS, serta pengujian pengujian di macOS. Untuk pengujian berbasis aplikasi pada iOS atau pengujian UI pada khusus, Bazel akan membangun output pengujian tetapi pengujian harus berjalan dalam Xcode melalui project yang dibuat dengan Tulsi. Tambahkan target pengujian sebagai berikut:
macos_unit_test
untuk menjalankan pengujian unit berbasis library dan berbasis aplikasi di macOS.ios_unit_test
untuk menjalankan pengujian unit berbasis library di iOS. Untuk pengujian yang memerlukan iOS Bazel akan membuat output pengujian tetapi tidak menjalankan pengujian. Anda harus membuat project Xcode dengan Tulsi dan menjalankan pengujian dari dalam Xcode.ios_ui_test
untuk membangun output yang diperlukan untuk menjalankan pengujian antarmuka pengguna di simulator iOS menggunakan Xcode. Anda harus membuat project Xcode dengan Tulsi dan menjalankan pengujian dari dalam Xcode. Bazel tidak dapat menjalankan pengujian UI secara native.
Setidaknya, tentukan nilai untuk atribut minimum_os_version
. Meskipun
atribut paket lainnya, seperti bundle_identifier
dan infoplists
,
secara default ke nilai yang paling umum digunakan, pastikan nilai default tersebut kompatibel
dengan proyek dan menyesuaikannya bila diperlukan. Untuk pengujian yang memerlukan iOS
khusus, tentukan juga nama target ios_application
sebagai nilai
Atribut test_host
.
Langkah 3c: Menambahkan target library
Menambahkan objc_library
target untuk setiap library Objective C dan swift_library
target untuk setiap library Swift yang menjadi dependensi aplikasi dan/atau pengujian.
Tambahkan target library sebagai berikut:
Menambahkan target library aplikasi sebagai dependensi ke aplikasi target.
Tambahkan target library pengujian sebagai dependensi ke target pengujian.
Cantumkan sumber penerapan dalam atribut
srcs
.Cantumkan header dalam atribut
hdrs
.
Untuk mengetahui informasi selengkapnya tentang aturan build, lihat Apple Rules untuk Bazel.
Pada tahap ini, sebaiknya uji build:
bazel build //:<application_target>
Langkah 4: (Opsional) Memerinci build
Jika proyek tersebut besar, atau seiring pertumbuhannya, pertimbangkan untuk membaginya menjadi beberapa Paket Bazel. Peningkatan perincian ini memberikan:
Peningkatan inkrementalitas build,
Peningkatan paralelisasi tugas build,
Pengelolaan yang lebih baik untuk pengguna di masa depan,
Kontrol yang lebih baik atas visibilitas kode sumber di seluruh target dan paket. Ini mencegah masalah seperti library yang berisi detail implementasi yang bocor menjadi API publik.
Kiat untuk merinci proyek:
Masukkan setiap library ke dalam paket Bazel-nya sendiri. Mulailah dengan yang membutuhkan dependensi paling sedikit dan naik ke atas dalam hierarki dependensi.
Saat Anda menambahkan file
BUILD
dan menentukan target, tambahkan target baru ini kedeps
atribut target yang bergantung padanya.Fungsi
glob()
tidak melewati batas paket, sehingga jumlah paket meningkatkan jumlah file yang cocok denganglob()
akan menyusut.Saat menambahkan file
BUILD
ke direktorimain
, tambahkan juga fileBUILD
ke direktoritest
yang sesuai.Terapkan batas visibilitas yang baik di seluruh paket.
Buat project setelah setiap perubahan besar pada file
BUILD
dan perbaiki {i>build error<i} saat Anda menemuinya.
Langkah 5: Jalankan build
Jalankan build yang dimigrasikan sepenuhnya untuk memastikan build selesai tanpa error atau peringatan. Menjalankan setiap aplikasi dan target pengujian satu per satu untuk menemukan sumber dengan lebih mudah setiap error yang terjadi.
Contoh:
bazel build //:my-target
Langkah 6: Buat project Xcode dengan Tulsi
Saat mem-build dengan Bazel, file WORKSPACE
dan BUILD
menjadi sumber
yang tepercaya tentang build tersebut. Agar Xcode mengetahui hal ini, Anda harus membuat
Project Xcode yang kompatibel dengan Bazel menggunakan Tulsi.
Pemecahan masalah
{i>Error<i} Bazel bisa muncul ketika tidak sinkron dengan versi Xcode yang dipilih, seperti ketika Anda menerapkan pembaruan. Berikut adalah beberapa hal yang perlu Anda coba jika mengalami kesalahan dengan Xcode, misalnya "Versi Xcode harus ditentukan untuk menggunakan Apple CROSSTOOL".
Jalankan Xcode secara manual dan setujui semua persyaratan dan ketentuan.
Gunakan opsi Xcode untuk menunjukkan versi yang benar, menerima lisensi, dan kondisi Bazel.
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -license
bazel sync --configure
- Jika tidak berhasil, Anda juga dapat mencoba menjalankan
bazel clean --expunge
.