Bu sayfada, Bazel ile bir Xcode projesinin nasıl oluşturulacağı veya test edileceği açıklanmaktadır. Bu kılavuzda Xcode ve Bazel arasındaki fark açıklanmakta ve bir Xcode projesini Bazel projesine dönüştürme adımları açıklanmaktadır. Ayrıca, sık karşılaşılan hataları gidermek için sorun giderme çözümleri de sunar.
Xcode ve Bazel arasındaki farklar
Bazel, her derleme hedefini ve bağımlılıklarını ve derleme kuralları aracılığıyla ilgili derleme ayarlarını açıkça belirtmenizi gerektirir.
Bazel, projenin bağlı olduğu tüm dosyaların çalışma alanı dizininde olmasını veya
WORKSPACE
dosyasında içe aktarma olarak belirtilmesini gerektirir.Bazel ile Xcode projeleri oluştururken
BUILD
dosyaları bilgi kaynağı haline gelir. Proje üzerinde Xcode'da çalışıyorsanızBUILD
dosyalarını her güncellediğinizde Xcode projesinin, rules_xcodeproj komutunu kullanarakBUILD
dosyalarıyla eşleşen yeni bir sürümünü oluşturmanız gerekir.BUILD
dosyalarında yapılan, 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 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ğitimini tamamlayın.
WORKSPACE
veBUILD
dosyaları için Bazel çalışma alanını ve hedef, derleme kuralları ve Bazel paketleri kavramlarını öğrendiniz.Projenin bağımlılıklarını analiz etme ve anlama.
Proje bağımlılıklarını analiz etme
Xcode'un aksine Bazel, BUILD
dosyasındaki her hedef için tüm bağımlılıkları açıkça bildirmenizi gerektirir.
Dış bağımlılıklar hakkında daha fazla bilgi için Harici bağımlılıklarla çalışma bölümüne bakın.
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ü haline gelir. Projede harici bağımlılık kullanılmıyorsa bu dosya boş olabilir. Proje, projenin dizinlerinden birinde yer almayan dosyalara veya paketlere dayanıyorsa 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ı swift_bazel ile Bazel çalışma alanına entegre etmek için bunları aşağıdaki eğitimde açıklandığı şekilde 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 düzeyinde oluşturun ve aşağıdaki şekilde projeyi ilk derleme işlemini yapacak şekilde yapılandırın:
- 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 bölümünü inceleyin.
Adım 3a: 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
- 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 için kullanılıyorsa).families
(yalnızca iOS) - Uygulamanın iPhone, iPad veya her ikisi için mi geliştirileceğidir.infoplists
- son Info .plist dosyasında 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 seviyeleriyle oluşturabilir.
3b Adımı: (İsteğe bağlı) Test hedeflerini ekleyin
Bazel'in Apple derleme kuralları, iOS ve macOS'te kitaplık tabanlı birim testlerinin yanı sıra macOS'te uygulama tabanlı testleri çalıştırmayı destekler. Her iki platformdaki iOS veya kullanıcı arayüzü testlerinde yapılan uygulama tabanlı testler için Bazel, test çıkışlarını oluşturur ancak testlerin, rules_xcodeproj ile oluşturulan bir proje aracılığıyla Xcode içinde ç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
: iOS'te kitaplık tabanlı birim testleri çalıştırmak için. iOS simülatörü gerektiren testler için Bazel, test çıkışlarını oluşturur ancak testleri çalıştırmaz. guidelines_xcodeproj ile bir Xcode projesi oluşturmanız ve testleri Xcode içinden çalıştırmanız gerekir.ios_ui_test
kullanarak Xcode kullanarak iOS simülasyon aracında kullanıcı arayüzü testlerini çalıştırmak için gereken çıkışları derleyebilirsiniz. guidelines_xcodeproj ile bir Xcode projesi oluşturmanı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. 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ü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, uygulama 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.
Doğrudan rules_apple örnekler dizininde, çeşitli uygulama türleri için mevcut örneklere 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 projeyi birden fazla Bazel paketine bölmeyi düşünebilirsiniz. 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ı 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ık gerektirenlerle başlayın ve bağımlılık ağacında yukarılara doğru ilerleyin.
BUILD
dosyalarını ekleyip hedef belirlerken bu yeni hedefleri, onlara bağlı hedeflerindeps
özelliklerine ekleyin.glob()
işlevi, paket sınırlarını geçmez. Bu nedenle, paket sayısı arttıkçaglob()
ile eşleşen dosyalar küçülür.Bir
main
dizinineBUILD
dosyası eklerken ilgilitest
dizinine birBUILD
dosyası da ekleyin.Paketler genelinde sağlıklı görünürlük sınırları uygulayın.
BUILD
dosyalarındaki her büyük değişikliklerden sonra projeyi oluşturun ve bu hatalarla karşılaştığınızda 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. Oluşan hataların kaynaklarını daha kolay bulmak için her uygulamayı çalıştırın ve hedefleri tek tek 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 kodunu kullanarak Bazel uyumlu bir Xcode projesi oluşturmanız gerekir.
Sorun giderme
Seçilen Xcode sürümüyle senkronize olmadığında (örneğin, bir güncellemeyi uyguladığınızda) Bazel hataları ortaya çıkabilir. Xcode ile ilgili hata yaşıyorsanız deneyebileceğiniz bazı şeyler aşağıda verilmiştir. Örneğin, "Apple CROSSTOOL kullanmak için Xcode sürümü belirtilmelidir".
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çme özelliğini 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.