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 bir Xcode projesini Bazel projesine dönüştürmek istedik. Ayrıca, sorun giderme adımları da ve yaygın hataları ele almak için çözümler.
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 içinde bulunduğu tüm dosyaların olmasını zorunlu kılar çalışma alanı diziniyle birlikte veya
MODULE.bazel
dosyası olarak kaydedebilirsiniz.Bazel ile Xcode projeleri oluştururken
BUILD
dosyaları veri kaynağıdır. Xcode'da proje üzerinde çalışıyorsanızBUILD
dosyalarıyla eşleşen Xcode projesinin yeni sürümünü (ör. Xcode projesi için) rules_xcodeproj herBUILD
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ızbazel build
vebazel 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:
Henüz yapmadıysanız Bazel'i yükleyin.
Bazel ve kavramlarına aşina değilseniz iOS uygulamasını eğiticisi) inceleyin. Bazel çalışma alanını bilmeniz gerekir.
MODULE.bazel
veBUILD
dosyalarını ve Bazel paketlerini kullanabilirsiniz.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 bkz. Harici bağımlılıklarla çalışma bağımlılıklarını görebilirsiniz.
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. Adım: MODULE.bazel
dosyasını oluşturun
Yeni bir dizinde bir MODULE.bazel
dosyası oluşturun. Bu dizin
Bazel çalışma alanı kökü. Projede harici bağımlılık kullanılmıyorsa bu dosya
boş olabilir. Proje,
bu harici bağımlılıkları
MODULE.bazel
dosyası yükleyin.
2. Adım: (Deneysel) SwiftPM bağımlılıklarını entegre edin
SwiftPM bağımlılarını Bazel çalışma alanına entegre etmek için swift_bazel ise aşağıda açıklandığı şekilde Bazel paketlerine dönüştürebilirsiniz: eğitici içerik ,
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. Şunu oluşturun:
BUILD
dosyasını kullanarak Bazel çalışma alanının kök düzeyinde
şu şekilde açıklayabiliriz:
- Adım 3a: Uygulama hedefini ekleyin
- Adım 3b: (İsteğe bağlı) Test hedeflerini ekleyin
- Adım 3c: Kitaplık hedeflerini ekleyin
İpucu: Paketler ve diğer Bazel kavramları hakkında daha fazla bilgi edinmek için Çalışma alanları, ve hedefleri de kapsamaktadır.
Adım 3a: Uygulama hedefini ekleyin
Bir
macos_application
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'ın Apple yapısı kuralları, kullanıcı arayüzü testlerini izleyebilirsiniz. Test hedeflerini aşağıdaki gibi ekleyin:
macos_unit_test
kullanarak macOS'te kitaplık tabanlı ve uygulama tabanlı birim testleri gerçekleştirebilirsiniz.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.Şunun için benzer test kuralları vardır: tvOS, watchOS ve visionOS olarak belirleyin.
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
Her biri için bir objc_library
hedefi ekle
Objective-C kitaplığı ve bir
swift_library
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.
Çeşitli uygulama türleri için mevcut örneklere doğrudan göz atabilirsiniz. rules_apple örnekleri dizinine gidin. Örneğin:
Derleme kuralları hakkında daha fazla bilgi edinmek için Bazel.
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ı hedeflerindeps
özelliği.glob()
işlevi, paket sınırlarını geçmez ve bu nedenle, paketleri büyütürseglob()
ile eşleşen dosyalar küçülür.main
dizinineBUILD
dosyası eklerken, şurayaBUILD
dosyasını da ekleyin: ilgilitest
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 derlemeyi düzeltme gözden geçirmeniz gerekir.
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 MODULE.bazel
ve BUILD
dosyaları kaynak olur
emin olmanız gerekir. Xcode'un bundan haberdar olması için
Kullanılan Bazel uyumlu Xcode projesi:
rules_xcodeproj
,
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.