Xcode'dan Bazel'e taşıma

Sorun bildir Kaynağı göster

Bu sayfada Bazel ile Xcode projesinin nasıl oluşturulacağı veya test edileceği açıklanmaktadır. Bu rehberde, Xcode ve Bazel arasındaki farkların yanı sıra Xcode projesini Bazel projesine dönüştürme adımları açıklanmıştır. Ayrıca yaygın hataları ele almak için sorun giderme çözümleri de sunar.

Xcode ve 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 bir şekilde belirtmenizi gerektirir.

  • Bazel, projenin çalışma alanı dizininde bulunmasını veya WORKSPACE dosyasında içe aktarma olarak belirtilmesini gerektirir.

  • Bazel ile Xcode projeleri oluştururken BUILD dosyaları bilgi kaynağı olur. Xcode'da proje üzerinde çalışıyorsanız BUILD dosyalarını her güncellediğinizde Xcode projesinin BUILD dosyalarıyla eşleşen yeni bir sürümünü rules_xcodeproj kullanarak oluşturmanız gerekir. BUILD dosyalarında bir hedefe bağımlılık eklemek gibi bazı 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 sunar.

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 uygulama eğitimini tamamlayın.) WORKSPACE ve BUILD dosyalarını da içeren 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 etme ve anlama

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

Xcode'dan farklı olarak Bazel, BUILD dosyasındaki her hedef için tüm bağımlılıkları açık bir şekilde tanımlamanızı gerektirir.

Dış bağımlılıklar hakkında daha fazla bilgi için Dış bağımlılıklarla çalışma bölümüne bakın.

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. WORKSPACE dosyasını oluşturma

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

  3. Bir 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ırın

  5. Derlemeyi çalıştırma

  6. Kurallar_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 çalışma alanı kökü olur. Proje hiçbir harici bağımlılık kullanmıyorsa bu dosya boş bırakılabilir. Proje, projenin dizinlerinden birinde bulunmayan dosyalara veya paketlere bağımlıysa bu harici bağımlılıkları WORKSPACE dosyasında belirtin.

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

SwiftPM bağımlılıklarını swift_bazel ile Bazel çalışma alanına entegre etmek için bunları aşağıdaki eğitimde açıklandığı gibi 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şturmanız gerekir. BUILD dosyasını Bazel çalışma alanının kök dizininde oluşturun ve projeyi ilk derlemesini yapmak için aşağıdaki gibi 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ından 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 (iOS cihaz cihazı için oluşturuyorsanız).

  • families (yalnızca iOS) - Uygulamanın iPhone, iPad veya her ikisi için mi geliştirileceğini belirtir.

  • 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, Bazel'ın uygulamayı doğru API düzeyleriyle derlemesini sağlar.

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 gibi ekleyin:

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

  • iOS'te kitaplığa dayalı birim testleri oluşturup çalıştırmak için ios_unit_test.

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

  • tvOS, watchOS ve visionOS için de 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 varsayılan olarak en sık kullanılan değerleri kullanır. Ancak bu varsayılan değerlerin projeyle uyumlu olduğundan emin olun ve gerekli şekilde düzenleyin. iOS simülatörünün kullanılmasını gerektiren testlerde, test_host özelliğinin değeri olarak ios_application hedef adını da belirtin.

3c Adımı: 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.

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

  • Üstbilgileri hdrs özelliğinde listeleyin.

Çeşitli uygulama türleri için mevcut örneklere doğrudan rules_apple örnek dizinine göz atabilirsiniz. Ö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 veya büyüdükçe, birden fazla Bazel paketine bölmeyi düşünün. Bu artırılmış ayrıntı düzeyi şunları sağlar:

  • Derlemelerin artımlılığı,

  • Derleme görevlerinin daha paralel 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ın genel API'lere sızması gibi sorunları önler.

Projeyi ayrıntılandırmak için ipuçları:

  • Her kitaplığı kendi Bazel paketine yerleştirin. En az bağımlılığa ihtiyaç duyanlarla başlayın ve bağımlılık ağacının üst sıralarına doğru ilerleyin.

  • BUILD dosyaları ekleyip hedefler belirttikçe, bu yeni hedefleri bunlara bağlı olan hedeflerin deps özelliklerine ekleyin.

  • glob() işlevi paket sınırlarını aşmaz. Bu nedenle, paket sayısı büyüdükçe glob() ile eşleşen dosyalar küçülü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ı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

Tamamen taşınan derlemeyi çalıştırarak hata veya uyarı olmadan tamamlandığından emin olun. Oluşabilecek hataların kaynaklarını daha kolay bulmak için her uygulamayı çalıştırın ve hedefi ayrı ayrı test 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ı derlemeyle ilgili doğru kaynak olur. Xcode'un bundan haberdar olması için rules_xcodeproj'u kullanarak Bazel uyumlu bir Xcode projesi oluşturmanız gerekir.

Sorun giderme

Seçilen Xcode sürümüyle senkronizasyonu bozulduğunda (ör. bir güncelleme uyguladığınızda), Bazel hataları ortaya çıkabilir. Xcode'da hatalarla karşılaşıyorsanız deneyebileceğiniz bazı adımlar şunlardır: "Apple CROSSTOOL kullanmak için Xcode sürümü belirtilmelidir".

  • Xcode'u manuel olarak çalıştırıp şartlar ve koşulları kabul edin.

  • Doğru sürümü belirtmek, lisansı kabul etmek ve Bazel'ın 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 çalıştırmayı da deneyebilirsiniz.