Bu sayfada, Bazel ile Xcode projesinin nasıl derleneceği veya test edileceği açıklanmaktadır. Xcode ile Bazel arasındaki farkları açıklar ve bir Xcode projesini Bazel projesine dönüştürme adımlarını sağlar. Ayrıca, sık karşılaşılan hataları gidermek için sorun giderme çözümleri de sağlanmaktadır.
Xcode ile 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 bağlı olduğu tüm dosyaların Workspace dizininde bulunmasına veya
MODULE.bazel
dosyasında bağımlılık olarak belirtilmesine ihtiyaç duyar.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 birlikte 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ğiticisini tamamlayın).
MODULE.bazel
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 edin ve anlayın.
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.
Harici bağımlılıklar hakkında daha fazla bilgi için Harici bağımlılıklarla çalışma başlıklı makaleyi inceleyin.
Bazel ile Xcode projesi derleme veya test etme
Bazel ile bir Xcode projesini derlemek veya test etmek için aşağıdakileri yapın:
1. Adım: MODULE.bazel
dosyasını oluşturun
Yeni bir dizinde MODULE.bazel
dosyası oluşturun. Bu dizin, Bazel çalışma alanı kökü haline gelir. Projede harici bağımlılık yoksa bu dosya boş olabilir. Proje, projenin dizinlerinde yer almayan dosyalara veya paketlere dayanıyorsa bu harici bağımlılıkları MODULE.bazel
dosyasında belirtin.
2. adım: (Deneysel) SwiftPM bağımlılarını entegre edin
swift_bazel ile SwiftPM bağımlılıkları Bazel çalışma alanına entegre etmek için aşağıdaki eğitimde açıklandığı gibi 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'e projenin nasıl yapılandırıldığını bildiren bir BUILD
dosyası oluşturmanız gerekir. Bazel çalışma alanının kökünde BUILD
dosyasını oluşturun ve projenin ilk derlemesini yapacak şekilde 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
Bir macos_application
veya ios_application
kural hedefi ekleyin. Bu hedef, sırasıyla macOS veya iOS uygulama paketi oluşturur.
Hedefte en az 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 (bir iOS cihaz cihazı için oluşturuluyorsa).families
(yalnızca iOS) - Uygulamanın iPhone, iPad veya her ikisi için mi geliştirileceğidir.infoplists
: Nihai 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 sayede Bazel, uygulamayı doğru API düzeyleriyle oluşturur.
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_unit_test
MacOS'te kitaplık tabanlı ve uygulama tabanlı birim testleri çalıştırmak için.ios_unit_test
iOS'te kitaplığa dayalı birim testleri oluşturmak ve çalıştırmak içinios_ui_test
iOS simülatöründe kullanıcı arayüzü testleri oluşturmak ve çalıştırmak içintvOS, watchOS ve visionOS için 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 bunları gerektiği şekilde düzenleyin. 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.hdrs
özelliğindeki başlıkları listeleyin.
Çeşitli uygulama türleriyle ilgili mevcut örneklere doğrudan rules_apple examples dizininden göz atabilirsiniz. Örneğin:
Derleme kuralları hakkında daha fazla bilgi için Bazel için Apple Kuralları başlıklı makaleyi inceleyin.
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ü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ığını artırma,
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 kod 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ığı gerektirenlerden başlayıp bağımlılık ağacında yukarı 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ı aşmaz. Bu nedenle, paket sayısı arttıkçaglob()
ile eşleşen dosya sayısı azalır.main
dizinineBUILD
dosyası eklerken ilgilitest
dizinine deBUILD
dosyası ekleyin.Paketler genelinde sağlıklı görünürlük sınırlamaları uygulayın.
BUILD
dosyalarındaki her büyük değişikliklerden sonra projeyi derleyin ve bunlarla karşılaştığınız derleme hatalarını düzeltin.
5. adım: Derlemeyi çalıştırın
Tamamen taşınmış derlemeyi çalıştırarak hata veya uyarı olmadan tamamlandığından emin olun. 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 MODULE.bazel
ve BUILD
dosyaları, derlemeyle ilgili doğru bilgi kaynağı olur. Xcode'un bundan haberdar olması için rules_xcodeproj kodunu kullanarak Bazel uyumlu bir Xcode projesi oluşturmanız gerekir.
Sorun giderme
Bazel hataları, seçili Xcode sürümüyle senkronizasyonu bozulduğunda (ör. güncelleme uyguladığınızda) ortaya çıkabilir. Xcode ile ilgili hatalarla (ör. "Apple CROSSTOOL kullanmak için Xcode sürümü belirtilmelidir") karşılaşıyorsanız deneyebileceğiniz bazı işlemleri aşağıda bulabilirsiniz.
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
çalıştırmayı da deneyebilirsiniz.