Xcode'dan Bazel'e taşıma

Sorun bildir Kaynağı görüntüle Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Bu sayfada, Bazel ile Xcode projesi oluşturma veya test etme açıklanmaktadır. Bu dokümanda, Xcode ile Bazel arasındaki farklar açıklanmakta ve Xcode projesini Bazel projesine dönüştürme adımları verilmektedir. Ayrıca, sık karşılaşılan hataları gidermeye yönelik sorun giderme çözümleri de sunar.

Xcode ile Bazel arasındaki farklar

  • Bazel, her derleme hedefinin ve bağımlılıklarının yanı sıra ilgili derleme ayarlarının derleme kuralları aracılığıyla açıkça belirtilmesini gerektirir.

  • Bazel, projenin bağlı olduğu tüm dosyaların çalışma alanı dizininde bulunmasını veya MODULE.bazel dosyasında bağımlılık olarak belirtilmesini gerektirir.

  • Bazel ile Xcode projeleri oluştururken BUILD dosyaları, doğruluk kaynağı haline gelir. Proje üzerinde Xcode'da çalışıyorsanız BUILD dosyalarını her güncellediğinizde rules_xcodeproj kullanarak BUILD dosyalarıyla eşleşen Xcode projesinin yeni bir sürümünü oluşturmanız gerekir. Hedefe bağımlılık ekleme gibi BUILD dosyalarında yapılan belirli değişiklikler, projenin yeniden oluşturulmasını gerektirmez. Bu da geliştirme sürecini hızlandırabilir. Xcode kullanmıyorsanız bazel build ve bazel test komutları, bu kılavuzda daha sonra açıklanan belirli sınırlamalarla derleme ve test özellikleri sağlar.

Başlamadan önce

Başlamadan önce aşağıdakileri yapın:

  1. Henüz yapmadıysanız Bazel'i yükleyin.

  2. Bazel ve kavramları hakkında bilginiz yoksa iOS uygulaması eğitimini tamamlayın. MODULE.bazel ve BUILD dosyaları dahil olmak üzere Bazel çalışma alanını, hedefler, derleme kuralları ve Bazel paketleri kavramlarını anlamanız gerekir.

  3. Projenin bağımlılıklarını analiz edin ve anlayın.

Proje bağımlılıklarını analiz etme

Xcode'un aksine, Bazel'da BUILD dosyasındaki her hedef için tüm bağımlılıkları açıkça belirtmeniz gerekir.

Harici bağımlılıklar hakkında daha fazla bilgi için Harici bağımlılıklarla çalışma başlıklı makaleyi inceleyin.

Bazel ile Xcode projesi oluşturma veya test etme

Bazel ile bir Xcode projesi oluşturmak veya test etmek için aşağıdakileri yapın:

  1. MODULE.bazel dosyasını oluşturma

  2. (Deneysel) SwiftPM bağımlılıklarını entegre etme

  3. BUILD dosyası oluşturma:

    a. Uygulama hedefini ekleme

    b. (İsteğe bağlı) Test hedeflerini ekleme

    c. Kitaplık hedeflerini ekleme

  4. (İsteğe bağlı) Derlemeyi ayrıntılandırın

  5. Derlemeyi çalıştırma

  6. rules_xcodeproj ile Xcode projesi oluşturma

1. adım: MODULE.bazel dosyasını oluşturun

Yeni bir dizinde MODULE.bazel dosyası oluşturun. Bu dizin, Bazel çalışma alanı kökü olur. Proje dış bağımlılık kullanmıyorsa bu dosya boş olabilir. Proje, proje dizinlerinden birinde bulunmayan dosyalara veya paketlere bağlıysa bu harici bağımlılıkları MODULE.bazel dosyasında belirtin.

2. adım: (Deneysel) SwiftPM bağımlılıklarını entegre edin

SwiftPM bağımlılıklarını swift_bazel ile Bazel çalışma alanına entegre etmek için aşağıdaki eğitimde açıklandığı gibi bunları Bazel paketlerine dönüştürmeniz gerekir .

3. adım: BUILD dosyası oluşturun

Çalışma alanını ve harici bağımlılıkları tanımladıktan sonra, Bazel'e projenin nasıl yapılandırıldığını bildiren bir BUILD dosyası oluşturmanız gerekir. Bazel çalışma alanının kökünde BUILD dosyasını oluşturun ve projeyi aşağıdaki şekilde ilk kez derleyecek şekilde yapılandırın:

İpucu: Paketler ve diğer Bazel kavramları hakkında daha fazla bilgi edinmek için Çalışma alanları, paketler ve hedefler başlıklı makaleyi inceleyin.

3a adımı: Uygulama hedefini ekleyin

macos_application veya ios_application kural hedefi ekleyin. Bu hedef, sırasıyla bir macOS veya iOS uygulama paketi oluşturur. Hedefte en azından aşağıdakileri belirtin:

  • bundle_id - İkili dosyanın paket kimliği (ters DNS yolu ve ardından uygulama adı).

  • provisioning_profile - Apple Developer hesabınızdaki sağlama profili (iOS cihaz için derleme yapılıyorsa).

  • families (Yalnızca iOS) - Uygulamanın iPhone, iPad veya her ikisi için de oluşturulup oluşturulmayacağı.

  • infoplists - Son Info .plist dosyasıyla birleştirilecek.plist dosyalarının listesi.

  • minimum_os_version: Uygulamanın desteklediği minimum macOS veya iOS sürümü. Bu sayede Bazel, uygulamayı doğru API düzeyleriyle oluşturur.

3b adımı: (İsteğe bağlı) Test hedeflerini ekleyin

Bazel'in Apple derleme kuralları, tüm Apple platformlarında birim ve kullanıcı arayüzü testlerinin çalıştırılmasını destekler. Test hedeflerini aşağıdaki şekilde ekleyin:

  • macos_unit_test macOS'te kitaplık tabanlı ve uygulama tabanlı birim testleri çalıştırmak için kullanılır.

  • ios_unit_test iOS'te kitaplık tabanlı birim testleri oluşturmak ve çalıştırmak için kullanılır.

  • ios_ui_test iOS simülatöründe kullanıcı arayüzü testleri oluşturup çalıştırmak için kullanılır.

  • tvOS, watchOS ve visionOS için benzer test kuralları vardır.

En azından minimum_os_version özelliği için bir değer belirtin. bundle_identifier ve infoplists gibi diğer paketleme özellikleri en sık kullanılan değerlere ayarlanmış olsa da bu varsayılanların projeyle uyumlu olduğundan emin olun ve gerekirse bunları ayarlayın. iOS simülatörü gerektiren testler için ios_application hedef adını da test_host özelliğinin değeri olarak belirtin.

3c adımı: Kitaplık hedeflerini ekleyin

Uygulamanın ve/veya testlerin bağlı olduğu her Objective-C kitaplığı için bir objc_library hedefi, her Swift kitaplığı için ise bir swift_library hedefi ekleyin.

Kitaplık hedeflerini aşağıdaki gibi ekleyin:

  • Uygulama kitaplığı hedeflerini, uygulama hedeflerine bağımlılık olarak ekleyin.

  • Test kitaplığı hedeflerini, test hedeflerine bağımlılık olarak ekleyin.

  • Uygulama kaynaklarını srcs özelliğinde listeleyin.

  • Başlıkları hdrs özelliğinde listeleyin.

Çeşitli uygulama türleriyle ilgili mevcut örneklere doğrudan rules_apple examples dizininden göz atabilirsiniz. Örneğin:

Derleme kuralları hakkında daha fazla bilgi için Apple Rules for Bazel başlıklı makaleyi inceleyin.

Bu aşamada derlemeyi test etmeniz önerilir:

bazel build //:<application_target>

4. adım: (İsteğe bağlı) Derlemeyi ayrıntılandırın

Proje büyükse veya büyüdükçe projeyi birden fazla Bazel paketine bölmeyi düşünebilirsiniz. Bu artan ayrıntı düzeyi sayesinde:

  • Derlemelerin artımlılığını artırma,

  • Derleme görevlerinin paralelleştirilmesi artırıldı.

  • Gelecekteki kullanıcılar için daha iyi sürdürülebilirlik,

  • Hedefler ve paketler genelinde kaynak kodu görünürlüğü üzerinde daha iyi kontrol. Bu, uygulama ayrıntılarını içeren kitaplıkların herkese açık API'lere sızması gibi sorunları önler.

Projeyi ayrıntılandırmaya yönelik ipuçları:

  • Her kitaplığı kendi Bazel paketine yerleştirin. En az bağımlılık gerektirenlerle başlayın ve bağımlılık ağacında yukarı doğru ilerleyin.

  • BUILD dosyaları ekleyip hedefleri belirlerken bu yeni hedefleri, kendilerine bağlı hedeflerin BUILD özelliklerine ekleyin.deps

  • glob() işlevi paket sınırlarını aşmaz. Bu nedenle, paket sayısı arttıkça glob() işleviyle eşleşen dosyalar azalır.

  • BUILD dosyasını main dizinine eklerken BUILD dosyasını ilgili test dizinine de ekleyin.

  • Paketlerde sağlıklı görünürlük sınırları uygulayın.

  • BUILD dosyalarında yapılan her büyük değişiklikten sonra projeyi oluşturun ve karşılaştığınız derleme hatalarını düzeltin.

5. adım: Derlemeyi çalıştırın

Hatasız veya uyarısız tamamlandığından emin olmak için tamamen taşınmış derlemeyi çalıştırın. Oluşan hataların kaynaklarını daha kolay bulmak için her uygulamayı ve test hedefini ayrı ayrı çalıştırın.

Örneğin:

bazel build //:my-target

6. adım: Xcode projesini rules_xcodeproj ile oluşturun

Bazel ile derleme yaparken MODULE.bazel ve BUILD dosyaları, derlemeyle ilgili tek doğru kaynak haline gelir. Xcode'un bu durumdan haberdar olması için rules_xcodeproj kullanarak Bazel ile uyumlu bir Xcode projesi oluşturmanız gerekir.

Sorun giderme

Bazel, seçili Xcode sürümüyle senkronize olmadığında (ör. güncelleme uyguladığınızda) hatalar oluşabilir. Xcode ile ilgili hatalar (ör. "Apple CROSSTOOL kullanmak için Xcode sürümü belirtilmelidir") alıyorsanız deneyebileceğiniz bazı çözümler aşağıda verilmiştir.

  • Xcode'u manuel olarak çalıştırın ve tüm hükümler ve koşulları kabul edin.

  • Doğru sürümü belirtmek, lisansı kabul etmek ve Bazel'in durumunu temizlemek için Xcode select'i kullanın.

  sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
  sudo xcodebuild -license
  bazel sync --configure
  • Bu işe yaramazsa bazel clean --expunge komutunu çalıştırmayı da deneyebilirsiniz.