Bazel Eğitimi: iOS Uygulaması Oluşturma

Bu eğiticide, 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 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 harici bağımlılıklara referansları içerecek şekilde güncelleyin
  • BUILD dosyası oluşturun
  • Simülatör uygulaması ve bir iOS cihaz için Bazel'ı çalıştırın
  • Uygulamayı simülatörde ve bir 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'ı yükle

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

Xcode'u yükleyin

Xcode'u indirip yükleyin. Xcode, Apple uygulamaları oluşturmak için Bazel'in ihtiyaç duyduğu 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.

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

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

git clone komutu, $HOME/examples/ adında bir dizin oluşturur. Bu dizin, Bazel için birkaç örnek proje içerir. Bu eğitimdeki proje dosyaları $HOME/examples/tutorial/ios-app dosyasındadır.

Çalışma alanı oluşturma

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

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

Size kolaylık olması için $WORKSPACE ortam değişkenini, Workspace dizininize referans verecek şekilde ayarlayın. Komut satırına şu komutu girin:

export WORKSPACE=$HOME/examples/tutorial

WORKSPACE dosyası oluşturma

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

Şimdilik, yalnızca çalışma alanı dizinini tanımlamaya yarayan boş bir WORKSPACE dosyası oluşturacaksınız. Sonraki adımlarda, dosyayı dış bağımlılık bilgilerini ekleyecek şekilde güncelleyeceksiniz.

Komut satırına aşağıdaki komutu girin:

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

Bu işlem, boş WORKSPACE dosyası oluşturur ve açar.

WORKSPACE dosyasını güncelleme

Apple cihazlara yönelik uygulamalar derlemek için Bazel'ın, GitHub deposundan en son Apple derleme kurallarını çekmesi 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

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

BUILD dosyası oluşturma

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 ifadesini ekleyin

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

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

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

objc_library kuralı ekle

Bazel, iOS platformuna yönelik uygulama derlemek için kullanabileceğiniz çeşitli derleme kuralları sağlar. Bu eğitimde, önce objc_library kuralını kullanarak Bazel'a uygulama kaynak kodundan ve Xib dosyalarından nasıl statik kitaplık oluşturacağını bildireceksiniz. Ardından uygulama ikili programını ve .ipa paketini nasıl oluşturacağınızı 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 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ıdaki BUILD dosyasına eklediğiniz UrlGetClasses kuralının çıkışını nasıl referans gösterdiğini unutmayın.

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

Uygulamayı derleme ve dağıtma

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

Yerleşik uygulama $WORKSPACE/bazel-bin dizininde bulunur.

Bu eğitim için tamamlanan WORKSPACE ve BUILD dosyaları, GitHub deposunun ana dalında bulunmaktadır. Ek 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ızın içinde 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ır ve oluşturur. Derleme işlemi sırasında uygulamanın çıkışı 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 çıktı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 uygulamayı iOS Simülatörü'nü kullanarak 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.

Bir cihaz için uygulama oluşturun

Uygulamanızı bir iOS cihaza yüklenecek ve 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ırlık profilini indirin. Daha fazla bilgi için Apple'ın belgelerine bakın.

  2. Profilinizi $WORKSPACE adlı kuruluşa 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 uygulamayı derleyin:

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

Bu, uygulamayı kalın bir ikili program yapar. Belirli bir cihaz mimarisi için 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ü için geliştirme yapmak istiyorsanız --ios_sdk_version seçeneğini kullanın. Çoğu senaryoda --xcode_version seçeneği yeterlidir.

Gereken 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"ın altındaki Ekle (artı işareti) düğmesini tıklayıp oluşturduğunuz .ipa dosyasını seçin.

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 4. adım).

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

Daha fazla bilgi

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