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ızBUILD
dosyalarını her güncellediğinizde Xcode projesininBUILD
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ızbazel build
vebazel 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:
Henüz yapmadıysanız Bazel'i yükleyin.
Bazel ve kavramlarına aşina değilseniz iOS uygulama eğitimini tamamlayın.)
WORKSPACE
veBUILD
dosyalarını da içeren 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'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. 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:
- Adım 3a: Uygulama hedefini ekleyin
- 3b Adımı: (İsteğe bağlı) Test hedeflerini ekleyin
- 3c Adımı: 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 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 hedeflerindeps
özelliklerine ekleyin.glob()
işlevi paket sınırlarını aşmaz. Bu nedenle, paket sayısı büyüdükçeglob()
ile eşleşen dosyalar küçülür.main
dizinineBUILD
dosyası eklerken, ilgilitest
dizinine deBUILD
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.