Xcode'dan Bazel'e taşıma

. Sorun bildirin Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Bu sayfada, Bazel ile bir Xcode projesinin nasıl oluşturulacağı veya test edileceği açıklanmaktadır. Google Xcode ve Bazel arasındaki farkları açıklamış ve Xcode projesini Bazel projesine dönüştürün. Ayrıca sorun giderme çözümlerini uygulayın.

Xcode ve Bazel arasındaki farklar

  • Bazel, her derleme hedefini ve derleme hedefini bağımlılıklarını ve derleme kuralları aracılığıyla ilgili derleme ayarlarını görebilirsiniz.

  • Bazel, projenin var olması gereken tüm dosyaları gerektirir veya WORKSPACE içinde içe aktarma işlemleri olarak belirtilir. dosyası olarak kaydedebilirsiniz.

  • Bazel ile Xcode projeleri oluştururken BUILD dosyaları veri kaynağıdır. Xcode'da proje üzerinde çalışıyorsanız BUILD dosyalarıyla eşleşen Xcode projesinin yeni sürümünü (ör. Xcode projesi için) rules_xcodeproj her BUILD dosyanızı güncellediğinizde kullanabilirsiniz. BUILD dosyalarında yapılan belirli değişiklikler bir hedefe bağımlılık eklemek gibi, tüm öğelerin yeniden oluşturulduğundan hızlandırabilecek bir projedir. Xcode kullanmıyorsanız bazel build ve bazel test komutları, derleme ve test özellikleri sunar belirli sınırlamalara tabi olması gerekir.

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ına aşina değilseniz iOS uygulaması eğitimi). Bazel'i doğru anlamalısınız. WORKSPACE ve BUILD dosyalarının yanı sıra Bazel paketleri ve hedefler, derleme kuralları ve Bazel paketleri hakkında bilgi edinin.

  3. Projenin bağımlılıklarını analiz etme ve anlama.

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

Xcode'dan farklı olarak, Bazel bir web sitesi için tüm bağımlılıkları BUILD dosyasındaki her hedef.

Dış bağımlılıklar hakkında daha fazla bilgi için Dış bağımlılıklarla çalışma.

Bazel ile Xcode projesi derleme veya test etme

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

  1. WORKSPACE dosyasını oluşturun

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

  3. BUILD dosyası oluşturun:

    a. Uygulama hedefini ekleme

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

    c. Kitaplık hedeflerini ekleme

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

  5. Derlemeyi çalıştırma

  6. rules_xcodeproj ile Xcode projesini oluşturma

1. Adım: WORKSPACE dosyasını oluşturun

Yeni bir dizinde bir WORKSPACE dosyası oluşturun. Bu dizin Bazel olur çalışma alanı kökü. Projede harici bağımlılık kullanılmıyorsa bu dosya boştur. Proje, projedeki harici bağımlılıkları WORKSPACE bölümünde belirtin. dosyası olarak kaydedebilirsiniz.

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

SwiftPM bağımlılıklarını Bazel çalışma alanına swift_bazel ile entegre etmek için: aşağıdaki eğitimde açıklandığı şekilde 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'a projenin nasıl yapılandırıldığını bildiren bir BUILD dosyası oluşturun. İçerik üretme Bazel çalışma alanının kök dizininde bulunan BUILD dosyasını yükleyin ve bunu bir şu şekilde açıklayabiliriz:

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

Adım 3a: Uygulama hedefini ekleyin

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

  • bundle_id - ikilik.

  • provisioning_profile - Apple Developer'ınızdan temel hazırlık profili hesabı (iOS cihaz için oluşturuyorsanız).

  • families (yalnızca iOS) - iPhone, iPad veya iPhone ya da iPad için uygulama veya her ikisini birden seçebilirsiniz.

  • infoplists - son Info .plist dosyasında birleştirilecek.plist dosyalarının listesi.

  • minimum_os_version - destekler. Bu sayede Bazel, uygulamayı ve doğru API düzeylerini belirlemenize yardımcı olur.

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

Bazel'in Apple oluşturma kuralları desteği tüm Apple platformlarında birim ve kullanıcı arayüzü testleri çalıştırma. Test hedeflerini aşağıdaki gibi ekleyin:

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

  • ios_unit_test kullanarak iOS'te kitaplık tabanlı birim testleri oluşturup çalıştırabilirsiniz.

  • ios_ui_test iOS simülatöründe kullanıcı arayüzü testleri derleyip çalıştırın.

  • tvOS, watchOS ve visionOS için benzer test kuralları geçerlidir.

En azından, minimum_os_version özelliği için bir değer belirtin. Bu sırada bundle_identifier ve infoplists gibi diğer paketleme özelliklerini en yaygın şekilde kullanılan değerlere varsayılan olarak ayarlayın ve bu varsayılan değerlerin uyumlu olduğundan emin olun. ve gerektiğinde bu değişiklikleri de düzenleyebilirsiniz. iOS gerektiren testler için simülatörü için aynı zamanda ios_application hedef adını da test_host özelliği için de geçerlidir.

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

objc_library ekleyin her bir Objective-C kitaplığı ve bir swift_library için hedef her Swift kitaplığı için hedef belirleyebilirsiniz.

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

  • Uygulama kitaplığı hedeflerini uygulamaya bağımlılık olarak ekleme belirler.

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

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

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

ziyaret edin.

Çeşitli uygulama türleri için mevcut örneklere doğrudan göz atabilirsiniz. rules_apple örnek dizini için de geçerlidir. Örneğin:

Derleme kuralları hakkında daha fazla bilgi edinmek için Bazel için Apple Kuralları'na bakın.

Bu noktada, derlemeyi test etmek iyi bir fikirdir:

bazel build //:<application_target>

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

Proje büyükse ya da büyüdükçe birden fazla projeye bölebilirsiniz. Bazel paketleri Bu artan ayrıntı düzeyi şunları sağlar:

  • Derlemelerin artımlılığı,

  • Derleme görevlerinde daha fazla paralellik yapılması,

  • 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ın sızdırılmasını içeren kitaplıklar gibi sorunları önler herkese açık API'lere dönüştürebilirsiniz.

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

  • Her kitaplığı kendi Bazel paketine yerleştirin. Birincisi, ikincisi web sitesi en az sayıda bağımlılıkla çalışın ve bağımlılık ağacında yukarılara doğru ilerleyin.

  • BUILD dosyaları ekleyip hedef belirlerken bu yeni hedefleri Kendilerine bağlı hedeflerin deps özelliği.

  • glob() işlevi, paket sınırlarını geçmediğinden sayı oranında paket büyür, glob() ile eşleşen dosyalar küçülür.

  • main dizinine BUILD dosyası eklerken, şuraya BUILD dosyasını da ekleyin: ilgili test dizinini oluşturur.

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

  • BUILD dosyalarında yapılan her büyük değişikliklerden sonra projeyi oluşturma ve düzeltme oluşturmak için bilgi edinin.

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

Hata veya uyarı olmadan tamamlandığından emin olmak için tamamen taşınmış derlemeyi çalıştırın. Kaynakları daha kolay bulmak için her uygulamayı çalıştırın ve hedefleri tek tek test edin olup olmadığını kontrol edin.

Örneğin:

bazel build //:my-target

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

Bazel ile derleme yaparken WORKSPACE ve BUILD dosyaları kaynak olur emin olmanız gerekir. Xcode'un bundan haberdar olması için rules_xcodeproj kullanan Bazel uyumlu Xcode projesi.

Sorun giderme

Seçilen Xcode sürümüyle senkronize olmadığında Bazel hataları ortaya çıkabilir. Örneğin bir güncelleme uygulayabilirsiniz. Aşağıda, Xcode ile ilgili hata oluştu, örneğin "Xcode sürümü Apple CROSSTOOL kullanın".

  • 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 için Xcode seçme özelliğini kullanın, lisansı kabul edin ve Bazel'in durumunu netleştirmek.

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