Tgrt-FM iPhone/iPad uygulamasının yeni sürümü nihayet yolda..
Neredeyse bir ay kadar önce Tgrt-FM iPhone uygulamasında kullanılan sunucu adresinin değiştirildiğini, uygulamanın güncellenmesi gerektiğini haber verdiler ama hem Tgrt tarafından beklediğim bazı adreslerin (yayın akışı, frekans listesi ve streaming adresinin onların vereceği sabit adreslerde tutulmasını talep ettim, böylece hem kendi sunucumda parse etmeme gerek kalmayacak hem de olası streaming adres değişikliğinde uygulamayı güncellemek gerekmeyecek) gelmesi hem de fırsat bulup yeni bir tasarım yapmam biraz uzun sürdüğü için ancak bugün göndermek nasip oldu.
Sürekli istememe rağmen PHP’den başımı kaldıramadığım için unuttuğum Objective-C ve Xcode’un bana çıkartığı problemler de cabası tabi. Ama Tgrt-FM’in bu yeni sürümü sayesinde bir şeyi daha tecrübe etmiş oldum. iPhone ve iPad uygulamasını tek program altında kotarmak nasılmış onu öğrendim ve çok hoşuma gitti.
Ben tamamen tek bir arayüzle ve tek bir kod grubu ile işi halledeceğimi düşünüyordum ama tamamen öyle değilmiş. Evvela projeye başlarken Device Family seçeneğini “Universal” olarak işaretliyorsunuz. iPhone için ayrı, iPad için ayrı .xib dosyaları oluşuyor. Dolayısı ile iki uygulamanın görüntüsü tıpatıp aynı olmak zorunda değil. Mesela ekran daha büyük olduğundan iPad’de daha değişik bir arabirim sunabilirsiniz. Ama kod grubu tek parça olabiliyor. Şöyle ki: bizim örneğimize göre açıklayayım. Yanda gördüğünüz üzere TgrtFM klasörü altında TgrtFmAppDelegate dosyaları ile iPad ve iPhone klasörleri var. Bu klasörlerde de TgrtFMAppDelegate_iPad ve TgrtFMAppDelegate_iPhone dosyaları ve .xib dosyaları var.
Yani eğer iPhone ve iPad için farklı fonksiyonlar yazmayacaksanız hepsini ana klasördeki AppDelegate dosyalarına yazabiliyorsunuz. Eğer birbirinden ayrı işlemler olacaksa sadece onları kendi klasörlerindeki AppDelegate dosyasına yazabiliyorsunuz.
Uygulamanın bu sürümünde kullanıcılardan sık sık aldığımız bir şikayeti de düzelttik. Bir radyo uygulaması olduğundan arkaplana atıldığında da yayının devam etmesi beklenen bir davranıştır. Malesef önceki sürümde bu özellik yoktu. Audio Streaming konusunda zerre bilgim olmadığından internette bulduğum dökümanlardan ne anlıyorsam o kadar iş yapabiliyorum. Bu uygulamada kullandığımız ve http://cocoawithlove.com/ blogunun sahibi Matt Gallagher’ın yazdığı AudioStreamer classı için interneti tarumar ettim. Bir kaç örnek uygulama indirdim ve gerçekten arkaplanda yayının devam ettiğini gördüm. Ama bunu sağlamak için çok girift kodlar yazmışlardı. Bana daha transparan bir çözüm lazımdı. Ne bileyim, bir ayar dosyasına bir şey yazmak ya da bir konfigürasyon sayesinde bu işin olmasını bekliyordum.
Tam da aradığım çözümü şurada buldum. Örneği yazan kişi “böyle yapınca simülatörde çalışıyor, ama gerçek bir cihazda deneyemedim” diyordu. Korktuğum oldu, gerçek cihazda çalışmadı. Daha sonra şimdi adresini hatırlamadığım başka bir yerde de info.plist dosyasına arkaplanda çalışması için bir key eklemek gerektiğini okudum:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
Böylece mevzu tamamlanmış oldu. Ondan sonra bir saatimi de uygulamayı AppStore’a göndermeye harcadım. Kullandığım bilgisayar değişince keychain uygulamasında sertifikaları vs düzenlemem gerekiyordu. Nasıl yapılacağını hatırlamadığım gibi sürekli lazım olmadığından böyle son dakikalara kaldı. Uzun ama bildiğim yolu seçip Apple Developer Center sitesinden tekrar sertifika talep ettim, tekrar developer ve distribution profile’ları oluşturup indirdim. Xcode’a ekledim bütün hatalardan arındıkdan sonra “Archive” deyip uygulamayı gönderdim. Gönderme işleminde de hatalar çıkabiliyor, 7. denememde anca toparlayabildim.
İnşallah AudioStreamer class’ından kaynaklanan iki notice için Apple uygulamayı reddetmez. Çalışmasına engel olan hatalar değil. İnternette araştırdım ama nasıl çözüleceğini bulamadım. Matt Gallagher de class’ı güncellememiş.
Bekleyelim bakalım…