Bazel Eğitimi: iOS Uygulaması Oluşturma

Sorun bildirin Kaynağı göster

Bu eğiticide, Bazel kullanarak basit bir iOS uygulamasının nasıl oluşturulacağı ele alınmaktadır.

Neler öğreneceksiniz?

Bu eğitimde şunları öğreneceksiniz:

  • Bazel ve Xcode'u yükleyip örnek projeyi indirerek ortamı ayarlayın
  • Uygulamanın kaynak kodunu içeren bir Bazel çalışma alanı ve çalışma alanı dizininin en üst düzeyini tanımlayan bir WORKSPACE dosyası oluşturun
  • WORKSPACE dosyasını, gerekli dış bağımlılıkların referanslarını içerecek şekilde güncelleyin
  • BUILD dosyası oluşturun
  • Simülatör ve iOS cihaz için uygulama derlemek üzere Bazel'ı çalıştırın
  • Uygulamayı simülatörde ve iOS cihazda çalıştırma

Ortamınızı ayarlama

Başlamak için Bazel ve Xcode'u yükleyin ve örnek projeyi alın.

Bazel'i yükleme

Bazel'i ve bağımlılıklarını yüklemek için yükleme talimatlarını uygulayın.

Xcode'u yükle

Xcode'u indirip yükleyin. Xcode, Bazel'in Apple uygulamaları derlemesi için gereken derleyicileri, SDK'ları ve diğer araçları içerir.

Örnek projeyi alma

Ayrıca, GitHub'dan eğitim için örnek projeyi almanız gerekir. GitHub deposunun iki dalı vardır: source-only ve main. source-only dalı yalnızca projenin kaynak dosyalarını içerir. Bu eğiticide bu daldaki dosyaları kullanacaksınız. main dalı hem kaynak dosyaları hem de tamamlanmış Bazel WORKSPACE ve BUILD dosyalarını içerir. Eğitim adımlarını tamamladığınızda çalışmanızı kontrol etmek için bu daldaki dosyaları kullanabilirsiniz.

Dosyaları source-only dalındaki dosyaları almak için komut satırına aşağıdakini girin:

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

git clone komutu $HOME/examples/ adlı bir dizin oluşturur. Bu dizinde Bazel için birkaç örnek proje bulunmaktadır. Bu eğiticinin proje dosyaları $HOME/examples/tutorial/ios-app içindedir.

Çalışma alanı oluşturma

Çalışma alanı, bir veya daha fazla yazılım projesinin kaynak dosyalarının yanı sıra Bazel'in yazılımı derlemek için kullandığı talimatları içeren WORKSPACE dosyası ve BUILD dosyalarını içeren bir dizindir. Çalışma alanı, çıkış dizinlerine sembolik bağlantılar da içerebilir.

Çalışma alanı dizini, dosya sisteminizin herhangi bir yerinde bulunabilir ve kök dizininde WORKSPACE dosyasının bulunmasıyla belirtilir. Bu eğiticide, Workspace dizininiz $HOME/examples/tutorial/ şeklindedir. Bu dizin, önceki adımda GitHub deposundan klonladığınız örnek proje dosyalarını içerir.

Size kolaylık sağlaması için $WORKSPACE ortam değişkenini şimdi Workspace dizininize yönlendirecek şekilde ayarlayın. Komut satırına şu kodu girin:

export WORKSPACE=$HOME/examples/tutorial

WORKSPACE dosyası oluşturun

Her çalışma alanının, üst düzey çalışma alanı dizininde bulunan WORKSPACE adlı bir metin dosyası olmalıdır. Bu dosya boş olabilir veya yazılımı derlemek için gereken harici bağımlılıklara referanslar içerebilir.

Şimdilik yalnızca Workspace dizinini tanımlayan boş bir WORKSPACE dosyası oluşturacaksınız. Sonraki adımlarda dosyayı harici bağımlılık bilgileri ekleyerek güncelleyeceksiniz.

Komut satırına aşağıdakini girin:

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

Bu işlemle boş WORKSPACE dosyası oluşturulup açılır.

WORKSPACE dosyasını güncelleyin

Apple cihazlara yönelik uygulamalar derlemek için Bazel'in GitHub deposundan en yeni Apple derleme kurallarını çekmesi gerekiyor. Bunu etkinleştirmek için WORKSPACE dosyanıza aşağıdaki git_repository kurallarını ekleyin:

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",
)

Kaynak dosyaları inceleyin

$WORKSPACE/ios-app/UrlGet konumunda bulunan uygulamanın kaynak dosyalarına göz atın. Yine, uygulamanın yapısını tanımak için şu anda bu dosyalara yalnızca bakıyorsunuz. Bu eğiticiyi tamamlamak için kaynak dosyaların hiçbirini düzenlemeniz gerekmez.

BUILD dosyası oluşturun

Komut satırı isteminde, düzenlemek için yeni bir BUILD dosyası açın:

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

Kural yükü ifadesini ekleyin

iOS hedefleri oluşturmak için Bazel'in, derleme her çalıştığında GitHub deposundan derleme kurallarını yüklemesi gerekir. Bu kuralları projenizde kullanılabilir hale getirmek için aşağıdaki yük ifadesini BUILD dosyanızın başına ekleyin:

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

objc_library kuralı Bazel paketinde yerleşik olarak bulunduğundan yalnızca ios_application kuralını yüklemeniz gerekir.

objc_library kuralı ekleme

Bazel, iOS platformuna yönelik uygulama oluştururken kullanabileceğiniz çeşitli derleme kuralları sağlar. Bu eğitimde ilk olarak Bazel'a uygulama kaynak kodundan ve Xib dosyalarından statik kitaplık oluşturmayı bildirmek için objc_library kuralını kullanacaksınız. Ardından, uygulama ikili programının ve .ipa paketinin nasıl oluşturulacağını belirtmek için ios_application kuralını kullanacaksınız.

BUILD dosyanıza aşağıdakileri ekleyin:

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

Kuralın adını (UrlGetClasses) not edin.

ios_application kuralı ekle

ios_application kuralı, uygulama ikili programını ve .ipa paket dosyasını oluşturur.

BUILD dosyanıza aşağıdakileri ekleyin:

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"],
)

deps özelliğinin, yukarıda BUILD dosyasına eklediğiniz UrlGetClasses kuralının çıkışına nasıl başvurduğunu unutmayın.

Şimdi dosyayı kaydedin ve kapatın. BUILD dosyanızı, GitHub deposunun main dalındaki tamamlanan örnekle karşılaştırabilirsiniz.

Uygulamayı derleme ve dağıtma

Artık uygulamanızı derlemeye ve bir simülatöre ve iOS cihaza dağıtmaya hazırsınız.

Derlenen uygulama, $WORKSPACE/bazel-bin dizininde bulunuyor.

Bu eğitim için tamamlanan WORKSPACE ve BUILD dosyaları GitHub deposunun ana dalında bulunmaktadır. Daha fazla yardım veya sorun giderme için çalışmanızı tamamlanan dosyalarla karşılaştırabilirsiniz.

Simülatör için uygulama oluşturma

Geçerli çalışma dizininizin Bazel çalışma alanınızda olduğundan emin olun:

cd $WORKSPACE

Şimdi, örnek uygulamayı derlemek için aşağıdakini girin:

bazel build //ios-app:ios-app

Bazel örnek uygulamayı başlatıp oluşturur. Derleme işlemi sırasında, çıktısı aşağıdakine benzer görünür:

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

Derleme çıkışlarını bulma

.ipa dosyası ve diğer çıkışlar $WORKSPACE/bazel-bin/ios-app dizininde bulunur.

Simülatörde uygulamayı çalıştırma ve hata ayıklama

Artık iOS Simülatörü'nü kullanarak uygulamayı Xcode'dan çalıştırabilirsiniz. Öncelikle Tulsi kullanarak bir Xcode projesi oluşturun.

Ardından, projeyi Xcode'da açın, çalışma zamanı şeması olarak bir iOS Simülatörü seçin ve Çalıştır'ı tıklayın.

Uygulamayı bir cihaz için geliştirme

Uygulamanızı bir iOS cihaza yüklenecek ve çalıştırılacak şekilde oluşturmak için Bazel'in söz konusu cihaz modeline uygun temel hazırlık profiline ihtiyacı vardır. Aşağıdakileri yapın:

  1. Apple Geliştirici Hesabınıza gidin ve cihazınız için uygun temel hazırlık profilini indirin. Daha fazla bilgi için Apple'ın belgelerini inceleyin.

  2. Profilinizi $WORKSPACE hizmetine taşıyın.

  3. (İsteğe bağlı) Profilinizi .gitignore dosyanıza ekleyin.

  4. Aşağıdaki satırı BUILD dosyanızdaki ios_application hedefine ekleyin:

    provisioning_profile = "<your_profile_name>.mobileprovision",
    

Şimdi cihazınız için bir uygulama derleyin:

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

Bu şekilde uygulama, yağ ikili programı olarak derlenir. Belirli bir cihaz mimarisine göre derleme yapmak için, derleme seçeneklerinde bunu belirtin.

Belirli bir Xcode sürümü için derleme yapmak istiyorsanız --xcode_version seçeneğini kullanın. Belirli bir SDK sürümü oluşturmak için --ios_sdk_version seçeneğini kullanın. Çoğu durumda --xcode_version seçeneği yeterlidir.

Gerekli minimum iOS sürümünü belirtmek için minimum_os_version parametresini BUILD dosyanızdaki ios_application derleme kuralına ekleyin.

Uygulamanızı komut satırı yerine GUI kullanarak oluşturmak için Tulsi'yi de kullanabilirsiniz.

Uygulamayı bir cihaza yükleme

Uygulamayı cihaza yüklemenin en kolay yolu Xcode'u başlatmak ve Windows > Devices komutunu kullanmaktır. Soldaki listeden takılı cihazınızı seçin, sonra "Yüklü Uygulamalar" altındaki Ekle (artı işareti) düğmesini tıklayıp oluşturduğunuz .ipa dosyasını seçerek uygulamayı ekleyin.

Uygulamanız cihazınıza yüklenemezse BUILD dosyanızda doğru temel hazırlık profilini belirttiğinizden emin olun (önceki bölümde belirtilen 4. adım).

Uygulamanız başlatılamadıysa cihazınızın temel hazırlık profilinizin bir parçası olduğundan emin olun. Xcode'da Devices ekranında bulunan View Device Logs düğmesi, sorunun ne olduğuyla ilgili başka bilgiler sağlayabilir.

Daha fazla bilgi

Daha fazla bilgi için GitHub deposunun ana dalına göz atın.