Bazel Eğitimi: iOS Uygulaması Oluşturma

Bu eğitimde, Bazel kullanılarak basit bir iOS uygulamasının nasıl oluşturulacağı açıklanmaktadır.

Neler öğreneceksiniz?

Bu eğitimde şunları öğreneceksiniz:

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

Eğitimin örnek projesini de GitHub'dan 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ğitimde 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 dizin, Bazel için çeşitli örnek projeler içerir. Bu eğitimdeki proje dosyaları $HOME/examples/tutorial/ios-app adresindedir.

Ç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 yönelik sembolik bağlantılar da içerebilir.

Çalışma alanı dizini, dosya sisteminizin herhangi bir yerinde bulunabilir ve kökünde WORKSPACE dosyasının bulunmasıyla gösterilir. 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şturma

Her çalışma alanında, en üst düzey çalışma alanı dizininde WORKSPACE adlı bir metin dosyası bulunmalı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ğıdakileri girin:

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

Bu işlem, boş WORKSPACE dosyasını oluşturup açar.

WORKSPACE dosyasını güncelleyin

Bazel'in Apple cihazlar için uygulama derleyebilmesi amacıyla GitHub deposundan en son Apple derleme kurallarını alması gerekir. 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ükleme beyanını ekleme

Bazel'in iOS hedeflerini derleyebilmesi için derleme her çalıştırıldığı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 ikilisini ve .ipa paketini nasıl derleyeceğini belirtmek için ios_application kuralını kullanırsı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 ikilisini oluşturur 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ıdaki BUILD dosyasına eklediğiniz UrlGetClasses kuralının çıkışını nasıl referans aldığını unutmayın.

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

Uygulamayı derleme ve dağıtma

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

Oluşturulan uygulama $WORKSPACE/bazel-bin dizininde bulunur.

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

Uygulamayı simülatör için derleme

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ülasyon Aracı'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ülasyon cihazı seçin ve Çalıştır'ı tıklayın.

Uygulamayı bir cihaz için geliştirme

Uygulamanızı bir iOS cihaza yüklenip başlatı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ırlama profilini indirin. Daha fazla bilgi için Apple'ın belgelerine bakın.

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

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

  4. BUILD dosyanızdaki ios_application hedefine aşağıdaki satırı 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 mimarisi için derlemek istiyorsanız derleme seçeneklerinde bu mimariyi belirtin.

Belirli bir Xcode sürümü için derlemek istiyorsanız --xcode_version seçeneğini kullanın. Belirli bir SDK sürümü için derlemek istiyorsanız --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 BUILD dosyanızdaki ios_application derleme kuralına minimum_os_version parametresini 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şlatıp Windows > Devices komutunu kullanmaktır. Soldaki listeden takılı cihazınızı seçin, ardından "Yüklü Uygulamalar" bölümündeki 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ümdeki 4. adım).

Uygulamanız başlatılamazsa cihazınızın temel hazırlama profilinizin 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.