Otomasyon ve CI/CD
Onay isteyen komutların çoğu --yes / -y flag'ini destekler; bu sayede CI/CD pipeline'larında ve betiklerde rahatlıkla kullanılabilirler.
ascelerate apps build attach-latest <bundle-id> --yes
ascelerate apps review submit <bundle-id> --yes
Provisioning komutlarıyla --yes kullanırken, tüm gerekli argümanlar açıkça belirtilmelidir -- interaktif mod devre dışı bırakılır.
Deneme çalıştırması
--dry-run ekleyerek bir komutu veya bütün bir workflow'u App Store Connect'te hiçbir şeyi değiştirmeden deneyebilirsiniz. Bu flag komut satırının herhangi bir yerinde çalışır; ASCELERATE_DRY_RUN=1 ayarlamak da aynı etkiyi yaratır. Okuma istekleri her zamanki gibi gönderilir; bu sayede sorgular ve kontroller gerçek verilerinizle çalışır. Her yazma isteği ise gönderilmeden önce durdurulur; isteğin yöntemi, yolu ve JSON gövdesi stderr'e yazdırılır ve isteğin gönderilmediği bildirilir.
ascelerate apps localizations import <bundle-id> --file localizations.json --yes --dry-run
ascelerate run-workflow release.txt --yes --dry-run
ASCELERATE_DRY_RUN=1 ascelerate run-workflow release.txt --yes # aynı etki, örneğin bütün bir CI işi için
- Bir komut ilk durdurulan yazma isteğinde sona erer; öğeleri tek tek işleyen komutlar ise durdurulan her isteği başarısız olarak bildirir.
media upload, durdurulan yazma isteklerini tamamlanmış sayıp devam eder; böylece her dosyanın yazma isteklerini görebilirsiniz. Sonunda kaç dosyanın yükleneceğini bildirir.run-workflowiçinde, yazma istekleri durdurulan bir adım workflow'u sonlandırmaz; böylece tek bir çalıştırmada tüm adımların yazma isteklerini görebilirsiniz. Önceki bir adımın oluşturacağı bir şeye (yeni bir sürüm veya yüklenmiş bir build gibi) dayanan bir adım yine de başarısız olabilir.- Bir workflow dosyasında tek bir adıma eklenen
--dry-runyalnızca o adım için geçerlidir. builds uploadyüklemeyi atlar.builds archivevebuilds validate, App Store Connect'te hiçbir şeyi değiştirmedikleri için çalışmaya devam eder.
API istek sınırı
App Store Connect, API anahtarınız için saatte 3.600 API isteğine izin verir ve bunları kayan bir saat içinde sayar. Uzun bir komut (büyük bir medya yüklemesi, kitaplık temizliği, fiyat içe aktarma) bu sınırı doldurduğunda ascelerate, App Store Connect yeniden istek kabul edene kadar bekler, ne zaman devam edeceğini gösterir ve ardından kaldığı yerden sürdürür. Bunun yerine durdurmak için Ctrl-C'ye basın.
CI'da beklemek yerine başarısız olmak daha uygun olabilir: ASCELERATE_MAX_RATE_LIMIT_WAIT değişkenini bir çalıştırmanın toplamda en fazla bekleyebileceği saniyeye ayarlayın (0, sınıra takılan ilk istekte başarısız olur).
ASCELERATE_MAX_RATE_LIMIT_WAIT=600 ascelerate run-workflow release.txt --yes
ascelerate rate-limit kalan istek sayısını gösterir; bu komut hiçbir zaman beklemez.
Parça parça yükleme
App Store Connect yüklenen dosyaları (ekran görüntüleri, önizlemeler, builds upload --api ile gönderilen build'ler ve diğer medya) parçalar hâlinde alır. ascelerate parçaları tek tek gönderir; böylece bağlantıdaki diğer işler için de bant genişliği kalır. Hızlı ama Apple'ın depolama sunucularına gecikmesi yüksek bir bağlantıda birkaç parçayı aynı anda göndermek yüklemeyi kısaltabilir: ASCELERATE_PARALLEL_CHUNKS değişkenini aynı anda gönderilecek parça sayısına ayarlayın.
ASCELERATE_PARALLEL_CHUNKS=4 ascelerate apps media upload <bundle-id> media/
CI'da Xcode imzalama
Hem builds archive hem de arşivden IPA'ya dışa aktarma, xcodebuild'e -allowProvisioningUpdates geçirir. Bu olmadan xcodebuild yalnızca yerel olarak önbelleğe alınmış provisioning profillerini kullanır ve Developer Portal'dan güncellenmiş olanları almaz.
Xcode GUI girişi olmayan CI ortamları için kimlik doğrulama flag'lerini geçirin:
ascelerate builds archive \
--authentication-key-path /path/to/AuthKey.p8 \
--authentication-key-id YOUR_KEY_ID \
--authentication-key-issuer-id YOUR_ISSUER_ID
JSON çıktısı
Okuma komutları, makine tarafından okunabilir çıktı için --json seçeneğini destekler; çıktı jq ile işlemeye, betiklerde ve yapay zeka ajanlarında kullanmaya hazırdır:
ascelerate apps list --json
ascelerate apps info <bundle-id> --json
ascelerate apps versions <bundle-id> --json
ascelerate apps review preflight <bundle-id> --json
ascelerate apps review status <bundle-id> --json
ascelerate builds list --bundle-id <bundle-id> --json
ascelerate testflight builds <bundle-id> --json
ascelerate testflight status <bundle-id> --json
ascelerate reviews list <bundle-id> --json
ascelerate reviews info <review-id> --json
ascelerate iap list <bundle-id> --json
ascelerate iap info <bundle-id> <product-id> --json
ascelerate iap pricing show <bundle-id> <product-id> --json
ascelerate sub groups <bundle-id> --json
ascelerate sub list <bundle-id> --json
ascelerate sub info <bundle-id> <product-id> --json
ascelerate sub pricing show <bundle-id> <product-id> --json
ascelerate rate-limit --json
Çıktı kuralları:
- Liste komutları en üst düzeyde bir JSON dizisi, detay komutları tek bir nesne üretir.
- Enum değerleri ham API sabitleridir (
WAITING_FOR_REVIEW,IOS), tarihler ISO 8601 biçimindedir ve her kaynak kendiiddeğerini taşır. - Null alanlar atlanır; boş sonuçlarda açıklama metni değil, her zaman
[]üretilir. - Uyarılar boolean değerlere dönüşür:
iap infovesub info, uyarı mesajı yerine"hasPricing": falseraporlar. --jsonetkileşimsiz modu da etkinleştirir: Normalde soru soracak komutlar (örneğin platform seçimi gerektiğinde) bunun yerine hata verir; belirsizliği gidermek için--platformveya ilgili diğer seçenekleri verin.- Hatalar stderr'e yazılır, bu sayede stdout her zaman geçerli JSON'dur.
Örnek olarak, yanıtlanmamış değerlendirmeleri şöyle sayabilirsiniz:
ascelerate reviews list <bundle-id> --json | jq '[.[] | select(.response == null)] | length'
Çıkış kodları
Komutlar başarısızlıkta sıfır olmayan çıkış kodu döndürür, bu sayede set -e veya && zincirleme ile betiklerde güvenle kullanılabilirler. preflight komutu özellikle herhangi bir kontrol başarısız olduğunda sıfır olmayan çıkış kodu döndürür, böylece incelemeye göndermeyi buna bağlayabilirsiniz:
ascelerate apps review preflight <bundle-id> && ascelerate apps review submit <bundle-id>
--json ile preflight, çıkış kodu davranışını aynen korurken tablo yerine yapılandırılmış bir rapor üretir ({"passed": false, "checks": [{"group", "name", "passed", "detail", "skipped"}]}; skipped yalnızca satıştan kaldırdığınız ürünlerde bulunur ve bunlar başarılı sayılır); bu sayede tam olarak hangi kontrolün başarısız olduğunu raporlaması gereken CI kapıları için idealdir.