Bu sayfada, Bazel ile Xcode projesinin nasıl derleneceği 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 bağımlılıklarını, ayrıca derleme kuralları aracılığıyla ilgili derleme ayarlarını açıkça belirtmenizi gerektirir.
Bazel, projenin var olması gereken tüm dosyaları gerektirir veya
WORKSPACE
içinde içe aktarma işlemleri olarak belirtilir. dosyası olarak kaydedebilirsiniz.Xcode projeleri Bazel ile derlenirken
BUILD
dosyaları doğru kaynak olur. Proje üzerinde Xcode'da çalışıyorsanızBUILD
dosyalarını her güncellediğinizde rules_xcodeproj dosyasını kullanarak Xcode projesininBUILD
dosyalarıyla eşleşen yeni bir sürümünü oluşturmanız gerekir. Bir hedefe bağımlılık ekleme gibiBUILD
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ızbazel build
vebazel 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:
Henüz yapmadıysanız Bazel'i yükleyin.
Bazel ve kavramlarına aşina değilseniz iOS uygulaması eğitimi.
WORKSPACE
veBUILD
dosyaları da dahil olmak üzere Bazel çalışma alanını ve hedefler, derleme kuralları ve Bazel paketleri kavramlarını anlamanız gerekir.Projenin bağımlılıklarını analiz etme ve anlama.
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.
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. Adım: WORKSPACE
dosyasını oluşturun
Yeni bir dizinde bir 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ı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. Bazel çalışma alanının kökünde BUILD
dosyasını oluşturun ve projenin ilk derlemesini yapacak şekilde yapılandırın:
- 3a. adım: 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ı, paketler ve hedefler.
3a. adım: 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
: İkilinin paket kimliği (tersini alınmış DNS yolu ve ardından uygulama adı).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
: Nihai Info.plist dosyasıyla 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 iOS ve macOS'te kitaplık tabanlı birim testleri ve uygulama tabanlı üzerinde çalışıyoruz. 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'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 çalıştırabilirsiniz. iOS gerektiren testler için Bazel, test çıkış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
iOS simülatöründe kullanıcı arayüzü testlerini çalıştırmak için gereken çıkışları derlemek (Xcode kullanarak). rules_xcodeproj ile bir Xcode projesi oluşturmalısınız. ve testleri Xcode içinden ç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. 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 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.Başlıkları,
hdrs
özelliğinde 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 edinmek için Bazel için Apple Kuralları'na bakın.
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ığı,
Derleme görevlerinin paralelleştirilmesi artırıldı.
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 herkese açık API'lere sızması gibi sorunların önüne geçer.
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 hedefleri belirtirken bu yeni hedefleri, kendilerine bağlı hedeflerindeps
özelliklerine ekleyin.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
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şiklikten sonra projeyi derleyin ve karşılaştığınız 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. 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 bundan haberdar olması için
rules_xcodeproj kullanan Bazel uyumlu Xcode projesi.
Sorun giderme
Bazel hataları, seçili Xcode sürümüyle senkronizasyonu bozulduğunda (ör. güncelleme uyguladığınızda) ortaya çıkabilir. 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, 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.