Xcode'dan Bazel'e taşıma

Sorun bildirme Kaynağı görüntüleme Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bu sayfada, Bazel ile Xcode projesinin nasıl derleneceği veya test edileceği açıklanmaktadır. Xcode ile Bazel arasındaki farkları açıklar ve bir Xcode projesini Bazel projesine dönüştürme adımlarını sağlar. Ayrıca, sık karşılaşılan hataları gidermek için sorun giderme çözümleri de sağlanmaktadır.

Xcode ile Bazel arasındaki farklar

  • Bazel, her derleme hedefini ve bağımlılıklarını, ayrıca derleme kuralları aracılığıyla ilgili derleme ayarlarını açıkça belirtmenizi gerektirir.

  • Bazel, projenin bağlı olduğu tüm dosyaların Workspace dizininde bulunmasına veya WORKSPACE dosyasında içe aktarma olarak belirtilmesine ihtiyaç duyar.

  • Xcode projeleri Bazel ile derlenirken BUILD dosyaları doğru kaynak olur. Proje üzerinde Xcode'da çalışıyorsanız BUILD dosyalarını her güncellediğinizde rules_xcodeproj dosyasını kullanarak Xcode projesinin BUILD dosyalarıyla eşleşen yeni bir sürümünü oluşturmanız gerekir. Bir 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ılavuzun ilerleyen bölümlerinde 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. WORKSPACE ve BUILD dosyaları da dahil olmak üzere Bazel çalışma alanını ve 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, BUILD dosyasında her hedef için tüm bağımlılıkları açıkça belirtmenizi gerektirir.

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 derleme veya test etme

Bazel ile bir Xcode projesini derlemek veya test etmek için aşağıdakileri yapın:

  1. WORKSPACE dosyasını oluşturun

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

  3. BUILD dosyası oluşturun:

    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ılı hale getirme

  5. Derlemeyi çalıştırma

  6. rules_xcodeproj ile Xcode projesini oluşturma

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

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

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

SwiftPM bağımlılıkları 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 projenin ilk derlemesini yapacak ş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 macOS veya iOS uygulama paketi oluşturur. Hedefte en az aşağıdakileri belirtin:

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

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

  • families (yalnızca iOS) - Uygulamanın iPhone, iPad veya her ikisi için derlenip derlenmeyeceği.

  • infoplists: Nihai Info .plist dosyasıyla birleştirilecek.plist dosyalarının listesi.

  • minimum_os_version: Uygulamanın desteklediği macOS veya iOS'in minimum 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ı, iOS ve macOS'te kitaplık tabanlı birim testlerinin yanı sıra macOS'te uygulama tabanlı testlerin çalıştırılmasını destekler. iOS'teki uygulama tabanlı testler veya her iki platformdaki kullanıcı arayüzü testleri için Bazel, test çıkışlarını oluşturur ancak testlerin rules_xcodeproj ile oluşturulan bir proje aracılığıyla Xcode'da çalıştırılması gerekir. Test hedeflerini aşağıdaki gibi ekleyin:

  • macos_unit_test kullanarak macOS'te kitaplık tabanlı ve uygulama tabanlı birim testleri çalıştırabilirsiniz.

  • ios_unit_test: iOS'te kitaplık tabanlı birim testleri çalıştırmak için. iOS simülatörünü gerektiren testler için Bazel, test çıktılarını oluşturur ancak testleri çalıştırmaz. rules_xcodeproj ile bir Xcode projesi oluşturmanız ve testleri Xcode'dan çalıştırmanız gerekir.

  • ios_ui_test Xcode'u kullanarak iOS simülatöründe kullanıcı arayüzü testlerini çalıştırmak için gereken çıkışları oluşturmak. rules_xcodeproj ile bir Xcode projesi oluşturmanız ve testleri Xcode'dan çalıştırmanız gerekir. Bazel, kullanıcı arayüzü testlerini yerel olarak çalıştıramaz.

En azından, minimum_os_version özelliği için bir değer belirtin. bundle_identifier ve infoplists gibi diğer paketleme özellikleri varsayılan olarak en yaygın kullanılan değerlere sahip olsa da bu varsayılan değerlerin projeyle uyumlu olduğundan emin olun ve gerektiğinde bunları ayarlayın. iOS simülasyon cihazı gerektiren testler için test_host özelliğinin değeri olarak ios_application hedef adını da belirtin.

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

Her Objective-C kitaplığı için bir objc_library hedefi ve uygulamanın ve/veya testlerin bağlı olduğu her Swift kitaplığı için 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.

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

  • hdrs özelliğindeki başlıkları listeleyin.

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

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

Bu aşamada derlemeyi test etmek iyi bir fikirdir:

bazel build //:<application_target>

4. Adım: (İsteğe bağlı) Derlemeyi ayrıntılı hale getirin

Proje büyükse veya büyüyorsa birden fazla Bazel paketine ayırabilirsiniz. Bu artan ayrıntı düzeyi şunları sağlar:

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

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

Projeyi ayrıntılı hale getirmeyle ilgili ipuçları:

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

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

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

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

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

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

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

Tamamen taşınmış derlemeyi çalıştırarak hata veya uyarı olmadan tamamlandığından emin olun. Ortaya çıkan 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: rules_xcodeproj ile Xcode projesini oluşturun

Bazel ile derleme yaparken WORKSPACE ve BUILD dosyaları, derlemeyle ilgili doğru bilgi kaynağı olur. Xcode'un bunu bilmesi için rules_xcodeproj kuralını kullanarak Bazel uyumlu bir Xcode projesi oluşturmanız gerekir.

Sorun giderme

Bazel hataları, seçili Xcode sürümüyle senkronizasyonu bozulduğunda (ör. güncelleme uyguladığınızda) ortaya çıkabilir. Xcode ile ilgili hata yaşıyorsanız deneyebileceğiniz bazı şeyler aşağıda verilmiştir. Örneğin, "Apple CROSSTOOL kullanmak için Xcode sürümü belirtilmelidir".

  • 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 seçiciyi 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.