Bu sayfada, Bazel ile bir Xcode projesinin nasıl oluşturulacağı 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
WORKSPACE
dosyasında içe aktarma olarak belirtilmesine ihtiyaç duyar.Xcode projeleri Bazel ile derlenirken
BUILD
dosyaları doğru kaynak olur. Proje üzerinde Xcode'ta çalışıyorsanızBUILD
dosyalarını her güncellediğinizde Tulsi'yi kullanarak Xcode projesininBUILD
dosyalarıyla eşleşen yeni bir sürümünü oluşturmanız gerekir. 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 sağlar.Derleme yapılandırması şemalarındaki dizin düzenleri veya derleme işaretleri gibi farklılıklar nedeniyle, Xcode derlemenin "büyük resmi"nden tam olarak haberdar olmayabilir ve bu nedenle bazı Xcode özellikleri çalışmayabilir. Örneğin:
Tulsi'de dönüşüm için seçtiğiniz hedeflere bağlı olarak Xcode, proje kaynağını düzgün şekilde dizine ekleyemeyebilir. Xcode, projenin kaynak kodunun tamamını göremeyeceğinden bu durum, Xcode'da kod tamamlama ve gezinmeyi etkiler.
Bazel, Xcode'un bu özellikler için beklediği çıktıları üretmediğinden statik analiz, adres dezenfektanları ve iş parçacığı temizleyiciler çalışmayabilir.
Tulsi ile bir Xcode projesi oluşturur ve bu projeyi Xcode içinden test çalıştırmak için kullanırsanız testleri Bazel yerine Xcode çalıştırır. Bazel ile test çalıştırmak için
bazel test
komutunu manuel olarak çalıştırın.
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ğitimlerini tamamlayın.
WORKSPACE
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ındaki her hedef için tüm bağımlılıkları açıkça bildirmenizi 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: WORKSPACE
dosyasını oluşturun
Yeni bir dizinde WORKSPACE
dosyası oluşturun. Bu dizin, Bazel çalışma alanı kökü olur. Projede harici bağımlılık yoksa 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) CocoaPods bağımlılarını entegre edin
CocoaPods bağımlılarını Bazel çalışma alanına entegre etmek için CocoaPods bağımlılarını dönüştürme bölümünde 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'e 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:
- 3a. adım: Uygulama hedefini ekleyin
- Adım 3b: (İ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 bölümünü 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 aşağıdakileri belirtin:
bundle_id
- ikili programın paket kimliği (ters DNS yolu ve ardından uygulama adı).provisioning_profile
: Apple Geliştirici hesabınızdaki temel hazırlama profili (iOS cihaz için derleme yapılıyorsa).families
(yalnızca iOS) - Uygulamanın iPhone, iPad veya her ikisi için derlenip derlenmeyeceği.infoplists
- son Info .plist dosyasında birleştirilecek.plist dosyalarının listesi.minimum_os_version
: Uygulamanın desteklediği macOS veya iOS'in minimum sürümü. Böylece Bazel'in uygulamayı doğru API seviyeleriyle derlemesi sağlanır.
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. iOS'teki uygulama tabanlı testler veya her iki platformdaki kullanıcı arayüzü testleri için Bazel, test çıkışlarını oluşturur ancak testlerin Tulsi ile oluşturulan bir proje aracılığıyla Xcode'da çalıştırılması gerekir. Test hedeflerini aşağıdaki gibi ekleyin:
macos_unit_test
kullanarak macOS'te kitaplık tabanlı ve uygulama tabanlı birim testleri çalıştırabilirsiniz.ios_unit_test
iOS'te kitaplığa dayalı 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. Tulsi ile bir Xcode projesi oluşturmanız ve testleri Xcode'dan ç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. Tulsi 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 yaygın kullanılan değerlere sahip olsa da bu varsayılan değerlerin projeyle uyumlu olduğundan emin olun ve gerektiğinde bunları ayarlayın. 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, 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.hdrs
özelliğindeki başlıkları listeleyin.
Derleme kuralları hakkında daha fazla bilgi için Bazel için Apple Kuralları başlıklı makaleyi inceleyin.
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üyorsa birden fazla Bazel paketine ayırabilirsiniz. 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 koyun. En az bağımlılığı gerektirenlerden başlayıp bağımlılık ağacında yukarı 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.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ında yapılan 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
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: Tulsi ile Xcode projesini oluşturun
Bazel ile derleme yaparken WORKSPACE
ve BUILD
dosyaları, derlemeyle ilgili doğru kaynak olur. Xcode'un bunu bilmesi için Tulsi'yi 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 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ç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
komutunu çalıştırmayı da deneyebilirsiniz.