Tutorial Bazel: Mem-build Aplikasi iOS

Laporkan masalah Lihat sumber Nightly · 7.4 .

Tutorial ini membahas cara mem-build aplikasi iOS sederhana menggunakan Bazel.

Yang akan Anda pelajari

Dalam tutorial ini, Anda akan mempelajari cara:

  • Siapkan lingkungan dengan menginstal Bazel dan Xcode, serta mendownload project contoh
  • Siapkan ruang kerja Bazel yang berisi kode sumber untuk aplikasi dan file WORKSPACE yang mengidentifikasi tingkat teratas direktori ruang kerja
  • Perbarui file WORKSPACE agar berisi referensi ke dependensi eksternal yang diperlukan
  • Membuat file BUILD
  • Jalankan Bazel untuk membangun aplikasi bagi simulator dan perangkat iOS
  • Menjalankan aplikasi di simulator dan di perangkat iOS

Menyiapkan lingkungan Anda

Untuk memulai, instal Bazel dan Xcode, lalu dapatkan project contoh.

Menginstal Bazel

Ikuti petunjuk penginstalan untuk menginstal Bazel dan dependensinya.

Menginstal Xcode

Download dan instal Xcode. Xcode berisi compiler, SDK, dan alat lain yang diperlukan Bazel untuk membangun aplikasi Apple.

Mendapatkan project contoh

Anda juga perlu mendapatkan project contoh untuk tutorial dari GitHub. Repositori GitHub memiliki dua cabang: source-only dan main. Cabang source-only hanya berisi file sumber untuk project. Anda akan menggunakan file di cabang ini dalam tutorial ini. Cabang main berisi file sumber serta file WORKSPACE dan BUILD Bazel yang telah selesai. Anda dapat menggunakan file di cabang ini untuk memeriksa pekerjaan setelah menyelesaikan langkah-langkah tutorial.

Masukkan perintah berikut pada command line untuk mendapatkan file di cabang source-only:

cd $HOME
git clone -b source-only https://github.com/bazelbuild/examples

Perintah git clone membuat direktori bernama $HOME/examples/. Direktori ini berisi beberapa project contoh untuk Bazel. File project untuk tutorial ini berada di $HOME/examples/tutorial/ios-app.

Menyiapkan ruang kerja

Ruang kerja adalah direktori yang berisi file sumber untuk satu atau beberapa project software, serta file WORKSPACE dan file BUILD yang berisi petunjuk yang digunakan Bazel untuk mem-build software. Ruang kerja juga dapat berisi link simbolis ke direktori output.

Direktori ruang kerja dapat berada di mana saja di sistem file Anda dan ditunjukkan dengan keberadaan file WORKSPACE di root-nya. Dalam tutorial ini, direktori workspace Anda adalah $HOME/examples/tutorial/, yang berisi contoh file project yang di-clone dari repo GitHub di langkah sebelumnya.

Untuk memudahkan Anda, tetapkan variabel lingkungan $WORKSPACE sekarang untuk merujuk ke direktori ruang kerja Anda. Di command line, masukkan:

export WORKSPACE=$HOME/examples/tutorial

Membuat file WORKSPACE

Setiap ruang kerja harus memiliki file teks bernama WORKSPACE yang terletak di direktori ruang kerja level teratas. File ini mungkin kosong atau berisi referensi ke dependensi eksternal yang diperlukan untuk membangun software.

Untuk saat ini, Anda akan membuat file WORKSPACE kosong, yang hanya berfungsi untuk mengidentifikasi direktori ruang kerja. Pada langkah berikutnya, Anda akan memperbarui file untuk menambahkan informasi dependensi eksternal.

Masukkan perintah berikut di command line:

touch $WORKSPACE/WORKSPACE
open -a Xcode $WORKSPACE/WORKSPACE

Tindakan ini akan membuat dan membuka file WORKSPACE kosong.

Perbarui file WORKSPACE

Agar dapat mem-build aplikasi di perangkat Apple, Bazel harus mengambil aturan build Apple terbaru dari repositori GitHub-nya. Untuk mengaktifkannya, tambahkan aturan git_repository berikut ke file WORKSPACE:

load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")

git_repository(
    name = "build_bazel_rules_apple",
    remote = "https://github.com/bazelbuild/rules_apple.git",
    tag = "0.19.0",
)

git_repository(
    name = "build_bazel_rules_swift",
    remote = "https://github.com/bazelbuild/rules_swift.git",
    tag = "0.13.0",
)

git_repository(
    name = "build_bazel_apple_support",
    remote = "https://github.com/bazelbuild/apple_support.git",
    tag = "0.7.2",
)

git_repository(
    name = "bazel_skylib",
    remote = "https://github.com/bazelbuild/bazel-skylib.git",
    tag = "0.9.0",
)

Meninjau file sumber

Lihat file sumber untuk aplikasi yang terletak di $WORKSPACE/ios-app/UrlGet. Sekali lagi, Anda hanya perlu melihat file ini sekarang untuk memahami struktur aplikasi. Anda tidak perlu mengedit file sumber apa pun untuk menyelesaikan tutorial ini.

Membuat file BUILD

Pada command prompt, buka file BUILD baru untuk diedit:

touch $WORKSPACE/ios-app/BUILD
open -a Xcode $WORKSPACE/ios-app/BUILD

Menambahkan pernyataan pemuatan aturan

Untuk mem-build target iOS, Bazel perlu memuat aturan build dari repositori GitHub-nya setiap kali build berjalan. Agar aturan ini tersedia untuk project Anda, tambahkan pernyataan pemuatan berikut ke awal file BUILD:

load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application")

Anda hanya perlu memuat aturan ios_application karena aturan objc_library di-build ke dalam paket Bazel.

Menambahkan aturan objc_library

Bazel menyediakan beberapa aturan build yang dapat Anda gunakan untuk mem-build aplikasi untuk platform iOS. Untuk tutorial ini, pertama-tama Anda akan menggunakan aturan objc_library untuk memberi tahu Bazel cara membuat library statis dari kode sumber aplikasi dan file Xib. Kemudian, Anda akan menggunakan aturan ios_application untuk memberi tahu cara mem-build biner aplikasi dan app bundle .ipa.

Tambahkan baris berikut ke file BUILD Anda:

objc_library(
    name = "UrlGetClasses",
    srcs = [
         "UrlGet/AppDelegate.m",
         "UrlGet/UrlGetViewController.m",
         "UrlGet/main.m",
    ],
    hdrs = glob(["UrlGet/*.h"]),
    data = ["UrlGet/UrlGetViewController.xib"],
)

Perhatikan nama aturan, UrlGetClasses.

Menambahkan aturan ios_application

Aturan ios_application mem-build biner aplikasi dan membuat file paket .ipa.

Tambahkan baris berikut ke file BUILD Anda:

ios_application(
    name = "ios-app",
    bundle_id = "Google.UrlGet",
    families = [
        "iphone",
        "ipad",
    ],
    minimum_os_version = "9.0",
    infoplists = [":UrlGet/UrlGet-Info.plist"],
    visibility = ["//visibility:public"],
    deps = [":UrlGetClasses"],
)

Perhatikan cara atribut deps mereferensikan output aturan UrlGetClasses yang Anda tambahkan ke file BUILD di atas.

Sekarang, simpan dan tutup {i>file<i}. Anda dapat membandingkan file BUILD dengan contoh yang sudah selesai di cabang main dari repo GitHub.

Mem-build dan men-deploy aplikasi

Sekarang Anda siap mem-build aplikasi dan men-deploynya ke simulator dan ke perangkat iOS.

Aplikasi yang dibangun terletak di direktori $WORKSPACE/bazel-bin.

File WORKSPACE dan BUILD yang telah selesai untuk tutorial ini terletak di cabang utama repo GitHub. Anda dapat membandingkan pekerjaan Anda dengan file yang sudah selesai untuk mendapatkan bantuan atau pemecahan masalah tambahan.

Mem-build aplikasi untuk simulator

Pastikan direktori kerja Anda saat ini berada di dalam ruang kerja Bazel Anda:

cd $WORKSPACE

Sekarang, masukkan kode berikut untuk membangun aplikasi contoh:

bazel build //ios-app:ios-app

Bazel meluncurkan dan mem-build aplikasi contoh. Selama proses build, output-nya akan terlihat mirip dengan berikut:

INFO: Found 1 target...
Target //ios-app:ios-app up-to-date:
  bazel-bin/ios-app/ios-app.ipa
INFO: Elapsed time: 0.565s, Critical Path: 0.44s

Menemukan output build

File .ipa dan output lainnya berada di direktori $WORKSPACE/bazel-bin/ios-app.

Menjalankan dan men-debug aplikasi di simulator

Kini Anda dapat menjalankan aplikasi dari Xcode menggunakan Simulator iOS. Pertama, buat project Xcode menggunakan Tulsi.

Kemudian, buka project di Xcode, pilih Simulator iOS sebagai skema runtime, lalu klik Run.

Mem-build aplikasi untuk perangkat

Untuk mem-build aplikasi agar dapat diinstal dan diluncurkan di perangkat iOS, Bazel memerlukan profil penyediaan yang sesuai untuk model perangkat tersebut. Lakukan hal berikut:

  1. Buka Akun Developer Apple dan download profil penyediaan yang sesuai untuk perangkat Anda. Lihat dokumentasi Apple untuk mengetahui informasi selengkapnya.

  2. Pindahkan profil Anda ke $WORKSPACE.

  3. (Opsional) Tambahkan profil Anda ke file .gitignore.

  4. Tambahkan baris berikut ke target ios_application di file BUILD Anda:

    provisioning_profile = "<your_profile_name>.mobileprovision",
    

Sekarang, bangun aplikasi untuk perangkat Anda:

bazel build //ios-app:ios-app --ios_multi_cpus=armv7,arm64

Tindakan ini akan membuat aplikasi sebagai biner lemak. Untuk mem-build untuk arsitektur perangkat tertentu, tentukan arsitektur tersebut di opsi build.

Untuk membangun versi Xcode tertentu, gunakan opsi --xcode_version. Untuk mem-build versi SDK tertentu, gunakan opsi --ios_sdk_version. Opsi --xcode_version sudah cukup dalam sebagian besar skenario.

Untuk menentukan versi iOS minimum yang diperlukan, tambahkan parameter minimum_os_version ke aturan build ios_application di file BUILD Anda.

Anda juga dapat menggunakan Tulsi untuk membangun aplikasi menggunakan GUI, bukan command line.

Menginstal aplikasi di perangkat

Cara termudah untuk menginstal aplikasi di perangkat adalah dengan meluncurkan Xcode dan menggunakan perintah Windows > Devices. Pilih perangkat yang terhubung dari daftar di sebelah kiri, lalu tambahkan aplikasi dengan mengklik tombol Add (tanda plus) di bagian "Installed Apps" dan memilih file .ipa yang Anda build.

Jika aplikasi gagal diinstal di perangkat, pastikan Anda menentukan profil penyediaan yang benar di file BUILD (langkah 4 di bagian sebelumnya).

Jika aplikasi gagal diluncurkan, pastikan perangkat Anda adalah bagian dari profil penyediaan. Tombol View Device Logs di layar Devices di Xcode dapat memberikan informasi lain tentang masalah yang terjadi.

Bacaan lebih lanjut

Untuk mengetahui detail selengkapnya, lihat cabang utama repo GitHub.