Xcode'dan Bazel'e taşıma

Sorun bildirin Kaynağı göster

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

Xcode ve Bazel arasındaki farklar

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

  • Bazel, projenin bağlı olduğu tüm dosyaların çalışma alanı dizininde olmasını veya WORKSPACE dosyasında içe aktarma olarak belirtilmesini gerektirir.

  • Bazel ile Xcode projeleri oluştururken BUILD dosyaları bilgi kaynağı haline gelir. Proje üzerinde Xcode'da çalışıyorsanız BUILD dosyalarını her güncellediğinizde Xcode projesinin, rules_xcodeproj komutunu kullanarak BUILD dosyalarıyla eşleşen yeni bir sürümünü oluşturmanız gerekir. BUILD dosyalarında yapılan, 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 birlikte 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ına aşina değilseniz iOS uygulaması eğitimini tamamlayın. WORKSPACE ve BUILD dosyaları için Bazel çalışma alanını ve hedef, derleme kuralları ve Bazel paketleri kavramlarını öğrendiniz.

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

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

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

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

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 çalışma alanı kökü haline gelir. Projede harici bağımlılık kullanılmıyorsa bu dosya boş olabilir. Proje, projenin dizinlerinden birinde yer almayan dosyalara veya paketlere dayanıyorsa bu harici bağımlılıkları WORKSPACE 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 bunları aşağıdaki eğitimde açıklandığı şekilde 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 düzeyinde oluşturun ve aşağıdaki şekilde projeyi ilk derleme işlemini 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 bölümünü inceleyin.

Adım 3a: 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 - 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 için kullanılıyorsa).

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

  • infoplists - son Info .plist dosyasında 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 seviyeleriyle oluşturabilir.

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ı testleri çalıştırmayı destekler. Her iki platformdaki iOS veya kullanıcı arayüzü testlerinde yapılan uygulama tabanlı testler için Bazel, test çıkışlarını oluşturur ancak testlerin, rules_xcodeproj ile oluşturulan bir proje aracılığıyla Xcode içinde çalıştırılması gerekir. Test hedeflerini aşağıdaki gibi ekleyin:

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 bunları gerektiği ş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, uygulama 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.

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

Doğrudan rules_apple örnekler dizininde, çeşitli uygulama türleri için mevcut örneklere 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 projeyi birden fazla Bazel paketine bölmeyi düşünebilirsiniz. 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ı içeren kitaplıklar gibi sorunların herkese açık API'lere sızdırılmasını ö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ılara doğru ilerleyin.

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

  • glob() işlevi, paket sınırlarını geçmez. Bu nedenle, paket sayısı arttıkça glob() ile eşleşen dosyalar küçülür.

  • Bir main dizinine BUILD dosyası eklerken ilgili test dizinine bir BUILD dosyası da ekleyin.

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

  • BUILD dosyalarındaki 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

Hata veya uyarı olmadan 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ı çalıştırın ve hedefleri tek tek 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 kodunu kullanarak Bazel uyumlu bir Xcode projesi oluşturmanız gerekir.

Sorun giderme

Seçilen Xcode sürümüyle senkronize olmadığında (örneğin, bir güncellemeyi uyguladığınızda) Bazel hataları 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çme özelliğini 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.