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 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 derleme hedefini bağımlılıklarını ve derleme kuralları aracılığıyla ilgili derleme ayarlarını görebilirsiniz.
Bazel, projenin var olması gereken tüm dosyaları gerektirir veya
WORKSPACE
içinde içe aktarma işlemleri olarak belirtilir. 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ı eğitimi. Bazel'i doğru anlamalısınız.
WORKSPACE
veBUILD
dosyalarının yanı sıra Bazel paketleri ve hedefler, derleme kuralları ve Bazel paketleri hakkında bilgi edinin.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 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 olur
çalışma alanı kökü. Projede harici bağımlılık kullanılmıyorsa bu dosya
boştur. Proje,
projedeki harici bağımlılıkları WORKSPACE
bölümünde belirtin.
dosyası olarak kaydedebilirsiniz.
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. İçerik üretme
Bazel çalışma alanının kök dizininde bulunan BUILD
dosyasını yükleyin ve bunu bir
ş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ı, paketler ve hedefler.
Adım 3a: 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
- 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 ya da her ikisi de olabilir.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'in Apple oluşturma kuralları desteği iOS ve macOS'te kitaplık tabanlı birim testleri ve uygulama tabanlı üzerinde çalışıyoruz. platformunda, Bazel test çıkışlarını derler ancak testlerin Xcode'da çalıştırılması gerekir rules_xcodeproj ile oluşturulan bir proje aracılığıyla oluşturun. 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 testlerini çalıştırabilirsiniz. iOS gerektiren testler için yoksa Bazel test çıkışlarını derler ancak testleri çalıştırmaz. Şunu yapmalısınız: rules_xcodeproj ile bir Xcode projesi oluşturun ve testleri Xcode içinden ç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 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
objc_library
ekleyin
her bir Objective-C kitaplığı ve bir swift_library
için hedef
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 örnek dizini ile bağlantı kurun. Ö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 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 ve en aza indirilerek bağımlılık ağacında yükseltin.
BUILD
dosyaları ekleyip hedef belirlerken bu yeni hedefleri Kendilerine bağlı hedeflerindeps
özelliği.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şikliklerden sonra projeyi oluşturma ve düzeltme oluşturmak için bilgi edinin.
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 WORKSPACE
ve BUILD
dosyaları kaynak olur
emin olmanız gerekir. Xcode'un bundan haberdar olması için
rules_xcodeproj kullanan Bazel uyumlu Xcode projesi.
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.