Bu sayfada, Bazel ile Xcode projesi oluşturma veya test etme açıklanmaktadır. Bu dokümanda, Xcode ile Bazel arasındaki farklar açıklanmakta ve Xcode projesini Bazel projesine dönüştürme adımları verilmektedir. Ayrıca, sık karşılaşılan hataları gidermeye yönelik sorun giderme çözümleri de sunar.
Xcode ile Bazel arasındaki farklar
Bazel, her derleme hedefinin ve bağımlılıklarının yanı sıra ilgili derleme ayarlarının derleme kuralları aracılığıyla açıkça belirtilmesini gerektirir.
Bazel, projenin bağlı olduğu tüm dosyaların çalışma alanı dizininde bulunmasını veya
MODULE.bazel
dosyasında bağımlılık olarak belirtilmesini gerektirir.Bazel ile Xcode projeleri oluştururken
BUILD
dosyaları, doğruluk kaynağı haline gelir. Proje üzerinde Xcode'da çalışıyorsanızBUILD
dosyalarını her güncellediğinizde rules_xcodeproj kullanarakBUILD
dosyalarıyla eşleşen Xcode projesinin yeni bir sürümünü oluşturmanız gerekir. 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ılavuzda daha sonra 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ı hakkında bilginiz yoksa iOS uygulaması eğitimini tamamlayın.
MODULE.bazel
veBUILD
dosyaları dahil olmak üzere Bazel çalışma alanını, 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'da BUILD
dosyasındaki her hedef için tüm bağımlılıkları açıkça belirtmeniz gerekir.
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 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: MODULE.bazel
dosyasını oluşturun
Yeni bir dizinde MODULE.bazel
dosyası oluşturun. Bu dizin, Bazel çalışma alanı kökü olur. Proje dış bağımlılık kullanmıyorsa bu dosya boş olabilir. Proje, proje dizinlerinden birinde bulunmayan dosyalara veya paketlere bağlıysa bu harici bağımlılıkları MODULE.bazel
dosyasında belirtin.
2. adım: (Deneysel) SwiftPM bağımlılıklarını entegre edin
SwiftPM bağımlılıklarını swift_bazel ile 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 projeyi aşağıdaki şekilde ilk kez derleyecek şekilde yapılandırın:
- 3a adımı: 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 bir macOS veya iOS uygulama paketi oluşturur.
Hedefte en azından aşağıdakileri belirtin:
bundle_id
- İkili dosyanın paket kimliği (ters DNS yolu ve ardından uygulama adı).provisioning_profile
- Apple Developer hesabınızdaki sağlama profili (iOS cihaz için derleme yapılıyorsa).families
(Yalnızca iOS) - Uygulamanın iPhone, iPad veya her ikisi için de oluşturulup oluşturulmayacağı.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 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 şekilde ekleyin:
macos_unit_test
macOS'te kitaplık tabanlı ve uygulama tabanlı birim testleri çalıştırmak için kullanılır.ios_unit_test
iOS'te kitaplık tabanlı birim testleri oluşturmak ve çalıştırmak için kullanılır.ios_ui_test
iOS simülatöründe kullanıcı arayüzü testleri oluşturup çalıştırmak için kullanılır.tvOS, 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 en sık kullanılan değerlere ayarlanmış olsa da bu varsayılanların projeyle uyumlu olduğundan emin olun ve gerekirse bunları ayarlayın. iOS simülatörü gerektiren testler için ios_application
hedef adını da test_host
özelliğinin değeri olarak belirtin.
3c adımı: Kitaplık hedeflerini ekleyin
Uygulamanın ve/veya testlerin bağlı olduğu her Objective-C kitaplığı için bir objc_library
hedefi, her Swift kitaplığı için ise 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.Başlıkları
hdrs
özelliğinde 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 Apple Rules for Bazel başlıklı makaleyi inceleyin.
Bu aşamada derlemeyi test etmeniz önerilir:
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 projeyi birden fazla Bazel paketine bölmeyi düşünebilirsiniz. Bu artan ayrıntı düzeyi sayesinde:
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 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ı önler.
Projeyi ayrıntılandırmaya yönelik ipuçları:
Her kitaplığı kendi Bazel paketine yerleştirin. En az bağımlılık gerektirenlerle başlayın ve bağımlılık ağacında yukarı doğru ilerleyin.
BUILD
dosyaları ekleyip hedefleri belirlerken bu yeni hedefleri, kendilerine bağlı hedeflerinBUILD
özelliklerine ekleyin.deps
glob()
işlevi paket sınırlarını aşmaz. Bu nedenle, paket sayısı arttıkçaglob()
işleviyle eşleşen dosyalar azalır.BUILD
dosyasınımain
dizinine eklerkenBUILD
dosyasını ilgilitest
dizinine de ekleyin.Paketlerde 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
Hatasız veya uyarısız tamamlandığından emin olmak için tamamen taşınmış derlemeyi çalıştırın. Oluşan 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: Xcode projesini rules_xcodeproj ile oluşturun
Bazel ile derleme yaparken MODULE.bazel
ve BUILD
dosyaları, derlemeyle ilgili tek doğru kaynak haline gelir. Xcode'un bu durumdan haberdar olması için rules_xcodeproj kullanarak Bazel ile uyumlu bir Xcode projesi oluşturmanız gerekir.
Sorun giderme
Bazel, seçili Xcode sürümüyle senkronize olmadığında (ör. güncelleme uyguladığınızda) hatalar oluşabilir. Xcode ile ilgili hatalar (ör. "Apple CROSSTOOL kullanmak için Xcode sürümü belirtilmelidir") alıyorsanız deneyebileceğiniz bazı çözümler aşağıda verilmiştir.
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 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
komutunu çalıştırmayı da deneyebilirsiniz.