İlk iOS Uygulamamı Yayınlama Serüveni: Reddedilme ve Otomasyonla Gelen Çözüm
İlk iOS uygulamanızı App Store’a göndermek, bir geliştirici için hem heyecan verici hem de oldukça stresli bir süreç olabilir. Uzun uğraşlar sonucu ortaya çıkan ürününüzün milyonlarca kullanıcıya ulaşma potansiyeli düşüncesi bile başlı başına bir motivasyon kaynağıdır. Ancak bu yolculuk, genellikle App Store’un katı ve bazen de anlaşılması güç onay kurallarıyla kesintiye uğrar. Uygulamanızın reddedilmesi, geliştirme sürecindeki tüm yorgunluğunuzu bir anda üzerinize yıkar ve motivasyonunuzu ciddi şekilde düşürebilir. Benim de ilk iOS uygulamamı yayınlama maceram, tam da bu tür bir hayal kırıklığıyla başladı. Hatta bir değil, tam iki kez reddedilme yaşadım. Bu deneyimler, manuel kontrollerin yetersizliğini acı bir şekilde gösterdi ve beni, bu tür sorunları bir daha yaşamamak adına kendi otomasyon aracımı geliştirmeye itti. Peki, App Store onay sürecindeki bu engelleri nasıl aşabiliriz ve otomasyon bu noktada bize nasıl yardımcı olabilir?
App Store Onay Süreci Neden Bu Kadar Zorlayıcı ve Sıkça Reddedilme Nedenleri Nelerdir?
App Store, dünya genelinde milyarlarca kullanıcının güvendiği bir uygulama ekosistemi sunar. Bu güveni sağlamak adına Apple, uygulamaların belirli kalite, güvenlik ve kullanıcı deneyimi standartlarını karşılamasını bekler. Bu standartlar, “App Store Review Guidelines” (Uygulama İnceleme Kuralları) adı altında detaylı bir şekilde açıklanmıştır. Geliştiricilerin bu kurallara harfiyen uyması gerekir; aksi takdirde uygulama reddedilir. Bu durum, süreci yeni başlayanlar için oldukça göz korkutucu hale getirebilir, zira kurallar oldukça kapsamlıdır ve bazen yoruma açık olabilir.
App Store onay sürecinin zorlayıcı olmasının temel nedenlerinden biri, Apple’ın kullanıcı deneyimine verdiği aşırı önemdir. Her uygulama, sorunsuz çalışmalı, sezgisel bir arayüze sahip olmalı ve kullanıcının beklentilerini karşılamalıdır. Güvenlik de bir diğer kritik faktördür; uygulamaların kullanıcı verilerini koruması, gizlilik politikalarını açıkça belirtmesi ve kötü amaçlı yazılım içermemesi beklenir. Bu titizlik, elbette ki App Store’un genel kalitesini yükseltir ancak geliştiriciler için ek bir kontrol yükü oluşturur. Benim ilk reddedilme deneyimimde de bu kuralların detaylarını tam olarak kavrayamamış olmam ve manuel kontrollerin yetersiz kalması önemli rol oynamıştı. Süreç, sadece kod yazmaktan ibaret değildir; aynı zamanda Apple’ın beklentilerini anlamayı ve onlara uygun bir deneyim sunmayı da gerektirir.
Peki, uygulamaların App Store’dan en sık reddedilme nedenleri nelerdir? Bu nedenleri bilmek, geliştiricilerin önceden önlem almasına yardımcı olabilir:
- Performans ve Kararlılık (2.1 – App Completeness): Uygulama kilitleniyor, donuyor veya beklenmedik hatalar veriyorsa reddedilir. TestFlight ile kapsamlı testler yapılmalı, tüm senaryolar denenmelidir.
- Kullanıcı Arayüzü (UI) ve Kullanıcı Deneyimi (UX) (2.4 – Hardware Compatibility, 2.5 – Software Requirements): Apple’ın Human Interface Guidelines (İnsan Arayüzü Yönergeleri) standartlarına uymayan, eski görünen, cihazın özelliklerini kötü kullanan veya tutarsız bir arayüze sahip uygulamalar reddedilebilir. Örneğin, iPhone’da iyi çalışan bir uygulamanın iPad’de kötü görünmesi bir reddedilme sebebi olabilir.
- Eksik veya Yanlış Meta Veri (2.3 – Accurate Metadata): Uygulama adı, açıklaması, anahtar kelimeleri, ekran görüntüleri veya gizlilik politikası URL’si gibi App Store Connect’e girilen bilgiler yanlış, eksik veya yanıltıcı ise reddedilme yaşanabilir. Özellikle gizlilik politikası URL’sinin çalışır durumda olması hayati öneme sahiptir.
- Gizlilik ve Güvenlik (5.1 – Privacy, 5.2 – Security): Kullanıcı verilerini toplama, kullanma veya paylaşma şekliniz şeffaf değilse veya kullanıcıdan gerekli izinleri almadan işlem yapıyorsanız uygulama reddedilir. Ayrıca,
Info.plistdosyasında gerekli gizlilik açıklamalarının (örneğin,NSUserTrackingUsageDescription) bulunmaması da sık karşılaşılan bir hatadır. - Uygulama İçi Satın Almalar (IAP) (3.1 – Business): Uygulama içi satın almaların doğru yapılandırılmaması, Apple’ın ödeme sistemini atlamaya çalışmak veya yanlış fiyatlandırma modelleri kullanmak reddedilme sebebidir.
- Minimum İşlevsellik (4.2 – Minimum Functionality): Uygulama yeterli işlevsellik sunmuyorsa, sadece bir web sitesi görünümü sağlıyorsa veya “demo” gibi hissediliyorsa reddedilebilir.
- Telif Hakkı ve Fikri Mülkiyet (5.2 – Intellectual Property): Başka bir şirketin logosunu, markasını veya içeriğini izinsiz kullanmak ciddi bir reddedilme nedenidir.
Benim ilk uygulamamda, hem meta veri eksiklikleri hem de kullanıcı arayüzündeki bazı tutarsızlıklar nedeniyle reddedilme yaşadım. Özellikle gizlilik politikası URL’sinin doğru çalışmadığı ve uygulamanın belirli bir cihaz modelinde beklenmedik bir şekilde davrandığı belirtilmişti. Bu durum, hem zaman kaybetmeme hem de lansman planlarımın aksamasına neden oldu. Bu ilk reddedilme, App Store onay sürecinin sadece kod yazmakla bitmediğini, aynı zamanda titiz bir kontrol ve doğrulama gerektirdiğini acı bir şekilde öğretti.
İki Kez Reddedilmek: Hatalarımızdan Nasıl Ders Çıkardık?
İlk reddedilme, ekibimiz için büyük bir hayal kırıklığı oldu. Haftalar süren yoğun geliştirme sürecinin ardından gelen bu olumsuz yanıt, motivasyonumuzu ciddi şekilde düşürdü. Apple’dan gelen inceleme notları, uygulamanın gizlilik politikası URL’sinin çalışmadığını ve belirli bir senaryoda kullanıcı arayüzünde (UI) beklenmedik davranışlar sergilediğini belirtiyordu. Bu hataları düzeltmek için hemen kolları sıvadık. Gizlilik politikası URL’sini kontrol ettik, sunucudaki bir yapılandırma hatasını giderdik ve UI sorununu manuel olarak test ederek düzelttiğimize inandık. Bu düzeltmelerin ardından, uygulamayı yeniden incelemeye gönderdik. Her şeyin yolunda gideceğini umuyorduk; ne de olsa hataları tespit etmiş ve düzeltmiştik. Ancak, App Store onay süreci, bazen geliştiricilere “bir dakika, daha bitmedi” dercesine davranabiliyor.
Yaklaşık bir hafta sonra, ikinci reddedilme bildirimi geldi. Bu seferki nedenler daha da şaşırtıcıydı. İlk reddedilmede belirtilen gizlilik politikası URL’si sorunu çözülmüş olsa da, bu kez uygulamanın başka bir bölümündeki harici bir bağlantının (örneğin, bir destek sayfasının) çalışmadığı ve uygulamanın farklı bir cihazda (bu sefer bir iPad modelinde) arayüz elementlerinin üst üste bindiği belirtiliyordu. Bu, tam anlamıyla bir “déjà vu” (daha önce yaşanmışlık hissi) idi ve bizi çaresizliğe sürükledi. İlk hatadan ders çıkardığımızı düşünürken, aslında sadece buzdağının görünen kısmını düzeltmiş olduğumuzu fark ettik. Manuel kontrollerin ne kadar yetersiz kalabileceğini, her cihaz kombinasyonunu ve her bağlantıyı tek tek kontrol etmenin ne kadar zaman alıcı ve hataya açık olduğunu bir kez daha anladık.
Bu iki reddedilme, ekibimiz için sadece zaman kaybı ve moral bozukluğu anlamına gelmedi, aynı zamanda ciddi bir maliyeti de beraberinde getirdi. Uygulamanın lansman tarihi iki hafta gecikti, bu da pazarlama kampanyalarımızın yeniden düzenlenmesine ve potansiyel erken kullanıcıların kaybedilmesine neden oldu. Her reddedilme, ortalama 3-5 günlük bir inceleme süreci demekti ve bu süre zarfında geliştiriciler olarak başka işlere odaklanmakta zorlanıyorduk. Bu kısır döngüden çıkmak için radikal bir çözüm bulmamız gerektiğinin farkına vardık. İnsan faktörünün getirdiği hata payını en aza indirmeli ve App Store kurallarına uyumluluğu sistematik bir şekilde kontrol eden bir mekanizma geliştirmeliydik. İşte tam da bu noktada, otomasyon fikri zihnimizde şekillenmeye başladı. Artık sadece kod yazmak değil, aynı zamanda yazdığımız kodun ve uygulamanın dış etkenlerle nasıl etkileşime girdiğini de otomatik olarak kontrol edebilen bir sistemin gerekliliğine inanıyorduk. Bu, gelecekteki projelerimiz için de bir standart haline gelecekti.
Otomatik Kontrol Aracı Fikri Nasıl Doğdu ve Geliştirildi?
İki kez üst üste reddedilmenin ardından, ekibimizle birlikte kapsamlı bir retrospektif (geriye dönük değerlendirme) toplantısı yaptık. Temel sorun şuydu: Geliştirme sürecinin sonunda, App Store’un beklentilerini karşılayıp karşılamadığımızı tam olarak doğrulayamıyorduk. Manuel kontroller zaman alıcıydı, hataya açıktı ve her zaman tüm senaryoları kapsayamıyordu. Özellikle farklı cihaz modellerindeki UI/UX tutarsızlıkları ve harici bağlantıların kontrolü gibi konular, insan gözünün kaçırabileceği detaylardı. Bu durum, “Bir daha asla aynı hatayı yapmamalıyız!” felsefesiyle bizi bir çözüm arayışına itti.
İlk başta, mevcut araçları araştırdık. Statik kod analizi araçları (örneğin, SwiftLint), kod kalitesini artırabilir ancak App Store kurallarıyla ilgili tüm dış etkenleri kontrol edemezdi. Test otomasyon çerçeveleri (örneğin, XCUITest) UI testleri için harikaydı, ancak meta veri doğrulaması veya gizlilik politikası URL’sinin çalışıp çalışmadığını kontrol etmek için yeterli değildi. Bu nedenle, genel bir çözüm yerine, kendi ihtiyaçlarımıza özel, App Store onay sürecindeki kritik noktaları hedef alan bir araç geliştirmeye karar verdik. Amacımız, uygulamanın App Store’a gönderilmeden önce “kendi kendini denetlemesini” sağlayacak bir sistem kurmaktı.
Aracın temel hedefleri şunlardı:
- Meta Veri Doğrulaması: App Store Connect’e girilen uygulama adı, açıklama, anahtar kelimeler ve özellikle gizlilik politikası URL’si gibi bilgilerin doğruluğunu ve eksiksizliğini kontrol etmek.
- Bağlantı Kontrolü: Uygulama içindeki tüm harici ve dahili bağlantıların (API endpointleri, webview URL’leri, deep linkler) çalışır durumda olduğunu ve geçerli bir HTTP yanıtı döndürdüğünü doğrulamak.
- Temel Uygulama İçi Kontroller: Uygulamanın farklı simülatörlerde (iPhone, iPad, farklı iOS sürümleri) açılıp açılmadığını, temel navigasyonun çalışıp çalışmadığını ve belirgin UI/UX hataları olup olmadığını kontrol etmek.
- İzin Kontrolleri: Uygulamanın kullandığı tüm hassas izinlerin (kamera, konum, fotoğraflar vb.)
Info.plistdosyasında ilgili gizlilik açıklamalarıyla birlikte doğru şekilde belirtildiğinden emin olmak.
Bu hedeflere ulaşmak için, Python betikleri ve Swift tabanlı yardımcı araçları bir araya getiren bir mimari tasarladık. Python, ağ istekleri gönderme, dosya sistemini okuma ve metin işleme gibi görevler için esneklik sunarken, Swift betikleri doğrudan iOS projesiyle etkileşime geçerek Info.plist gibi dosya içeriklerini kontrol edebiliyordu. Bu araçların tümünü, Continuous Integration/Continuous Delivery (CI/CD) (Sürekli Entegrasyon/Sürekli Dağıtım) sürecimize entegre etmeyi planladık. Böylece, her kod değişikliğinde veya belirli aralıklarla bu kontroller otomatik olarak çalıştırılacak ve herhangi bir sorun tespit edildiğinde geliştiricilere anında geri bildirim sağlanacaktı.
Örneğin, Info.plist dosyasında bir gizlilik açıklamasının eksik olup olmadığını kontrol eden basit bir Swift betiği şöyle görünebilir:
// Örnek: Info.plist dosyasında gizlilik açıklamasını kontrol eden bir Swift betiği
import Foundation
func checkPrivacyDescription() {
guard let infoPlistPath = Bundle.main.path(forResource: "Info", ofType: "plist") else {
print("HATA: Info.plist dosyası bulunamadı.")
exit(1)
}
guard let infoPlist = NSDictionary(contentsOfFile: infoPlistPath) else {
print("HATA: Info.plist dosyası okunamadı.")
exit(1)
}
// NSUserTrackingUsageDescription (App Tracking Transparency için) kontrolü
if let trackingDescription = infoPlist["NSUserTrackingUsageDescription"] as? String, !trackingDescription.isEmpty {
print("✅ NSUserTrackingUsageDescription bulundu: '\(trackingDescription)'")
} else {
print("❌ HATA: NSUserTrackingUsageDescription Info.plist dosyasında eksik veya boş!")
print("Bu, App Tracking Transparency gereksinimleri için kritik olabilir.")
exit(1) // Hata durumunda betiği sonlandır
}
// Diğer gizlilik açıklamaları için benzer kontroller eklenebilir
// Örneğin, konum izni için:
if let locationWhenInUse = infoPlist["NSLocationWhenInUseUsageDescription"] as? String, !locationWhenInUse.isEmpty {
print("✅ NSLocationWhenInUseUsageDescription bulundu: '\(locationWhenInUse)'")
} else {
print("⚠️ UYARI: NSLocationWhenInUseUsageDescription eksik veya boş olabilir.")
}
}
checkPrivacyDescription()
Bu tür betikler, geliştirme sürecinin erken aşamalarında bile potansiyel reddedilme nedenlerini otomatik olarak tespit etmemizi sağladı. Artık manuel kontrollerle saatler harcamak yerine, birkaç saniye içinde kapsamlı bir ön kontrol raporu alabiliyorduk. Bu, hem geliştirme hızımızı artırdı hem de App Store’a gönderim öncesi stresi önemli ölçüde azalttı.
Geliştirdiğimiz Otomatik Onay Ön Kontrol Aracının Özellikleri ve Faydaları
Kendi ihtiyaçlarımız doğrultusunda geliştirdiğimiz otomatik onay ön kontrol aracı, App Store’un karmaşık kurallarını basitleştirmeyi ve geliştiricilerin bu kurallara uyumunu sistematik hale getirmeyi hedefliyordu. Bu araç, sadece bir betik koleksiyonundan ibaret değildi; zamanla olgunlaşan, modüler ve genişletilebilir bir yapıya dönüştü. Temel modülleri ve sağladığı faydaları şu şekilde özetleyebiliriz:
Aracın Ana Modülleri:
- Meta Veri Doğrulama Modülü:
- Uygulama Adı ve Açıklama Kontrolü: Belirli uzunluk kısıtlamalarına uyulup uyulmadığını ve anahtar kelime spam’i gibi App Store kurallarını ihlal edip etmediğini kontrol eder.
- Anahtar Kelime ve Kategori Kontrolü: İlgili anahtar kelimelerin kullanıldığından ve uygulamanın doğru kategoride olduğundan emin olur.
- Gizlilik Politikası URL’si Doğrulaması: App Store Connect’e girilen gizlilik politikası URL’sinin erişilebilirliğini ve geçerli bir HTTP 200 yanıtı döndürüp döndürmediğini kontrol eder. Bu, manuel olarak en sık gözden kaçan ve reddedilme sebebi olan noktalardan biridir.
- Ekran Görüntüsü ve Önizleme Videosu Kontrolü: Çözünürlük, format ve içerik tutarlılığı gibi temel kontrolleri gerçekleştirir (otomatik olarak içerik analizi yapmak zor olsa da, dosya boyutları ve tipleri kontrol edilebilir).
- Bağlantı Kontrol Modülü:
- Uygulama İçi Harici Bağlantılar: Uygulama içinde yer alan tüm web sitelerine, API endpointlerine veya derin bağlantılara (deep link) otomatik olarak istek gönderir ve erişilebilirliklerini doğrular. Örneğin, bir “Yardım” veya “İletişim” sayfasının URL’si çalışmıyorsa uyarı verir.
- API Endpoint Durum Kontrolü: Uygulamanın bağımlı olduğu kritik API servislerinin erişilebilirliğini test eder. Böylece, kullanıcıların uygulamayı açtığında “sunucuya bağlanılamıyor” gibi hatalarla karşılaşması engellenir.
- Temel Uygulama İçi Kontroller Modülü (Simülatör Tabanlı):
- Uygulama Başlatma Testi: Uygulamanın farklı iOS sürümlerine sahip çeşitli simülatörlerde (iPhone, iPad) sorunsuz bir şekilde başlatılıp başlatılmadığını kontrol eder.
- Kilitlenme Tespiti: Uygulama başlatıldıktan sonra belirli temel senaryoları (örneğin, ana ekranda gezinme) otomatik olarak çalıştırarak olası kilitlenmeleri veya beklenmedik kapanmaları tespit etmeye çalışır.
- Basit UI Uyumsuzluk Kontrolü: Otomatik UI testleri (XCUITest veya Appium gibi araçlarla entegre) kullanarak, belirli ekranlarda temel arayüz elementlerinin (düğmeler, metin alanları) doğru konumda olup olmadığını ve üst üste binip binmediğini kontrol eder.
- İzin ve Güvenlik Kontrolleri Modülü:
Info.plistAnalizi: Uygulamanın kullandığı tüm hassas izinler için (kamera, mikrofon, konum, bildirimler vb.)Info.plistdosyasında ilgili gizlilik açıklamalarının (örneğin,NSCameraUsageDescription) bulunup bulunmadığını doğrular. Eksik açıklamalar, doğrudan reddedilme sebebidir.- HTTP Güvenliği Kontrolü: Uygulamanın güvenli olmayan HTTP bağlantıları yerine HTTPS kullandığını doğrular (App Transport Security – ATS kurallarına uyumluluk).
Entegrasyon ve Faydaları:
Bu modüllerin tamamını Continuous Integration/Continuous Delivery (CI/CD) (Sürekli Entegrasyon/Sürekli Dağıtım) süreçlerimize entegre ettik. Her kod değişikliği push edildiğinde veya belirli bir zaman diliminde (örneğin, geceleri), bu otomatik kontrol aracı çalıştırılır. Jenkins, GitLab CI, GitHub Actions veya Xcode Cloud gibi platformlar aracılığıyla entegrasyon sağlanabilir. Kontrollerin sonunda, geliştiricilere detaylı bir rapor sunulur ve herhangi bir kritik hata bulunursa, build (derleme) süreci durdurularak geliştiriciler uyarılır.
Bu otomasyonun bize sağladığı faydalar paha biçilemezdi:
- Zaman ve Maliyet Tasarrufu: Manuel kontrol için harcanan saatler ortadan kalktı. Her reddedilme ile kaybedilen geliştirme süresi ve lansman gecikmeleri önlendi.
- Geliştirici Verimliliği ve Moral Artışı: Geliştiriciler, App Store onay sürecinin getirdiği belirsizlik ve stresten kurtuldu. Daha çok kod yazmaya ve yeni özellikler geliştirmeye odaklanabildiler.
- Erken Hata Tespiti: Potansiyel reddedilme nedenleri, geliştirme sürecinin çok daha erken aşamalarında tespit edildi. Bu, hataların düzeltilmesini çok daha kolay ve ucuz hale getirdi.
- Tutarlılık ve Güvenilirlik: İnsan hatası faktörü ortadan kalktı. Her gönderimde aynı titiz kontroller otomatik olarak uygulandı, bu da uygulamanın App Store kurallarına uyumluluğunu artırdı.
- Kalite Güvencesi: Uygulamanın genel kalitesi ve kararlılığı arttı, bu da daha iyi bir kullanıcı deneyimi sağladı.
Sonuç olarak, geliştirdiğimiz bu araç, App Store onay sürecini bir kabustan çıkarıp öngörülebilir ve yönetilebilir bir sürece dönüştürdü. Artık “Acaba reddedilir miyiz?” endişesi yerine, “Hangi kontrollerden geçtik?” sorusuna odaklanabiliyorduk. Bu, sadece bir uygulama yayınlama aracı değil, aynı zamanda geliştirme kültürümüzü dönüştüren bir adımdı.
Otomatik Kontrol Araçlarını Kendi Projenize Nasıl Entegre Edersiniz?
Kendi projenizde App Store onay sürecini otomatikleştirmek, başlangıçta karmaşık görünebilir ancak adım adım ilerleyerek ve doğru araçları seçerek bu süreci verimli hale getirebilirsiniz. Unutmayın, her şeyi bir anda otomatikleştirmek zorunda değilsiniz. En çok sorun yaşadığınız veya en çok zaman harcadığınız alanlardan başlayarak kademeli olarak ilerlemek en iyi yaklaşımdır.
Adım Adım Entegrasyon Kılavuzu:
- İhtiyaç Analizi ve Risk Belirleme:
Öncelikle, geçmiş deneyimlerinizi veya App Store Review Guidelines’ı inceleyerek projeniz için en riskli alanları belirleyin. Örneğin, sık sık gizlilik politikası URL’si sorunları yaşıyorsanız veya farklı cihazlarda UI hataları gözlemliyorsanız, otomasyona bu noktalardan başlamalısınız. Hangi kuralların sizin için en kritik olduğunu listeleyin.
- Mevcut Araçları Araştırma ve Seçim:
Piyasada birçok güçlü otomasyon aracı bulunmaktadır. Kendi özel betiklerinizi yazmak yerine, bu araçları entegre etmek genellikle daha hızlı ve sürdürülebilir bir çözümdür:
- Fastlane: iOS geliştiricileri için olmazsa olmaz bir araçtır. Uygulama derleme, test etme, ekran görüntüleri alma, App Store Connect’e yükleme ve hatta meta veri yönetimi gibi birçok görevi otomatikleştirebilir. Kendi özel betiklerinizi Fastlane “lane”leri (şeritleri) içine entegre edebilirsiniz.
- SwiftLint / RuboCop: Kod kalitesi ve stilini kontrol etmek için statik analiz araçlarıdır. App Store reddedilme nedenleriyle doğrudan ilgili olmasa da, daha temiz ve sürdürülebilir kod yazmanıza yardımcı olur.
- XCUITest / Appium: Kullanıcı arayüzü (UI) testleri yazmak için güçlü çerçevelerdir. Farklı cihazlarda uygulamanın UI’sının doğru görünüp görünmediğini, temel akışların çalışıp çalışmadığını otomatik olarak test etmenizi sağlar.
- Custom Scriptler (Python, Shell, Swift): Belirli ve niş kontroller için kendi betiklerinizi yazabilirsiniz. Örneğin,
Info.plistdosyasındaki belirli anahtarların varlığını kontrol etmek veya harici URL’lerin erişilebilirliğini test etmek gibi. - Danger: Pull Request (Çekme İsteği) inceleme sürecini otomatikleştirmek için kullanılır. Kod kalitesi, test kapsamı veya belirli App Store kurallarına uyum gibi konularda geliştiricilere geri bildirim sağlayabilir.
- Küçük Adımlarla Başlama: İlk Otomasyon Betiği:
Hemen tüm süreci otomatikleştirmeye çalışmayın. En kritik gördüğünüz bir App Store kuralını hedefleyen basit bir betik yazarak başlayın. Örneğin, gizlilik politikası URL’sinin çalışıp çalışmadığını kontrol eden bir Python betiği:
# check_privacy_url.py import requests def check_url(url): try: response = requests.head(url, timeout=5) if response.status_code == 200: print(f"✅ URL '{url}' erişilebilir ve 200 OK döndürdü.") return True else: print(f"❌ HATA: URL '{url}' erişilebilir değil veya hata kodu döndürdü: {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"❌ HATA: URL '{url}' kontrol edilirken bir sorun oluştu: {e}") return False privacy_policy_url = "https://uygulamaniz.com/gizlilik-politikasi" # Kendi URL'nizi buraya yazın if not check_url(privacy_policy_url): exit(1) # Hata durumunda scripti sonlandırBu betiği projenizin bir parçası olarak kaydedin (örneğin,
scripts/check_privacy_url.py). - CI/CD Entegrasyonu:
Geliştirdiğiniz betikleri veya seçtiğiniz araçları CI/CD sisteminize entegre edin. Fastlane, bu entegrasyon için harika bir köprü görevi görür. Örneğin, bir
Fastfileoluşturarak bu betiği bir “lane” içine ekleyebilirsiniz:# Fastfile örneği platform :ios do desc "Uygulamayı App Store'a göndermeden önce ön kontrolleri yapar" lane :pre_submission_checks do # Meta veri kontrolü (kendi Python betiğimiz) sh "python ./scripts/check_privacy_url.py" # UI testlerini çalıştır # run_tests(scheme: "MyAppUITests") # Eğer XCUITest'leriniz varsa # Uygulamayı derle ve arşivle build_app(scheme: "MyApp", configuration: "Release") # TestFlight'a yükle (isteğe bağlı, sadece test için) upload_to_testflight(skip_waiting_for_build_processing: true) notification(message: "App Store ön kontrolleri tamamlandı ve TestFlight'a yüklendi!") end endBu
Fastfile‘ı CI/CD sunucunuzda (Jenkins, GitLab CI, GitHub Actions vb.) çalışacak şekilde yapılandırın. Her yeni kod değişikliğinde veya belirli bir zaman çizelgesine göre bupre_submission_checkslane’ini çalıştırın. Eğer betiklerden biri hata kodu (exit(1)) döndürürse, CI/CD build’i başarısız olur ve geliştiricilere anında bildirim gönderilir. - Sürekli İyileştirme ve Geri Bildirim:
Otomasyon süreci dinamiktir. App Store kuralları değişebilir, uygulamanız yeni özellikler kazanabilir. Bu nedenle, otomasyon araçlarınızı düzenli olarak gözden geçirin ve güncelleyin. Geliştiricilerden gelen geri bildirimleri dikkate alın ve otomasyonu daha verimli hale getirmek için iyileştirmeler yapın. Yeni bir App Store reddedilme sebebiyle karşılaşırsanız, hemen bu sebebi otomasyon sisteminize eklemeyi düşünün. Bu sürekli iyileştirme döngüsü, uygulamanızın her zaman App Store’un en güncel beklentilerini karşılamasını sağlayacaktır.
İleri Düzey İpuçları ve Gelecek Perspektifleri:
- Makine Öğrenimi Destekli UI Testleri: Gelecekte, makine öğrenimi (ML) algoritmaları, UI’daki anormallikleri veya tutarsızlıkları insan gözünden daha hızlı ve doğru bir şekilde tespit edebilir. Örneğin, bir düğmenin yanlış konumda olması veya metnin taşması gibi durumlar ML modelleriyle otomatik olarak algılanabilir.
- Daha Akıllı Hata Tespiti: Geliştirdiğiniz otomasyon araçlarını, uygulamanızın kullanım verileriyle (crash logları, performans metrikleri) entegre ederek daha akıllı hale getirebilirsiniz. Bu sayede, potansiyel reddedilme nedenlerini sadece statik kontrollerle değil, gerçek kullanıcı davranışlarına dayalı olarak da öngörebilirsiniz.
- Topluluk Katkısıyla Geliştirme: Kendi aracınızı açık kaynak olarak paylaşmak veya topluluk tarafından geliştirilen araçlara katkıda bulunmak, otomasyon ekosistemini zenginleştirecektir. Başkalarının deneyimlerinden faydalanarak aracınızı daha kapsamlı hale getirebilirsiniz.
Otomasyon, sadece App Store onay sürecini kolaylaştırmakla kalmaz, aynı zamanda geliştirme ekibinizin genel verimliliğini ve ürün kalitesini de artırır. İlk başta biraz çaba gerektirse de, uzun vadede size büyük bir zaman ve emek tasarrufu sağlayacaktır.
Sonuç ve Sıkça Sorulan Sorular
İlk iOS uygulamamı yayınlama sürecinde yaşadığım iki kez reddedilme deneyimi, geliştirici olarak bana çok değerli dersler öğretti. Manuel kontrollerin yetersizliğini, insan hatasının maliyetini ve App Store onay sürecinin ne kadar titizlik gerektirdiğini acı bir şekilde tecrübe ettim. Ancak bu zorluklar, aynı zamanda bir fırsata dönüştü: Kendi otomatik kontrol aracımızı geliştirme ve bu sayede gelecekteki projelerimizde benzer sorunları bir daha yaşamama kararlılığına ulaştık. Otomasyon, App Store’un karmaşık kurallarını anlamamıza, uyumluluğu sistematik hale getirmemize ve geliştirme sürecimizi çok daha verimli kılmamıza yardımcı oldu.
Bu araç sayesinde, uygulamanın meta verilerinden harici bağlantıların erişilebilirliğine, temel UI kontrollerinden gizlilik açıklamalarına kadar birçok kritik noktayı otomatik olarak doğrulayabiliyoruz. CI/CD süreçlerine entegre edilen bu sistem, her kod değişikliğinde potansiyel reddedilme nedenlerini erken aşamada tespit ederek, hem zamandan hem de maliyetten tasarruf etmemizi sağlıyor. Geliştirici olarak, artık “Acaba reddedilir miyiz?” endişesiyle değil, “Uygulamamız ne kadar sağlam?” sorusuyla ilerleyebiliyoruz. Her geliştiricinin kendi projesinin dinamiklerine uygun bir otomasyon stratejisi benimsemesi, App Store yolculuğunu çok daha sorunsuz ve keyifli hale getirecektir.
Sıkça Sorulan Sorular:
-
Soru 1: Bu araç sadece iOS için mi kullanılabilir?
Cevap 1: Hayır, makalede bahsedilen genel prensipler ve otomasyon yaklaşımları (meta veri kontrolü, bağlantı doğrulaması, temel uygulama içi testler) Android uygulamaları için Google Play Store onay sürecinde de benzer şekilde uygulanabilir. Sadece kullanılan araçlar (örneğin, Fastlane yerine Gradle betikleri, XCUITest yerine Espresso) ve platforma özel kurallar farklılık gösterecektir. Temel mantık, manuel kontrolleri otomatikleştirmek üzerine kuruludur.
-
Soru 2: Kendi aracımı geliştirmek yerine hazır çözümler kullanabilir miyim?
Cevap 2: Kesinlikle! Makalede de belirtildiği gibi, Fastlane, SwiftLint, Danger gibi birçok hazır ve güçlü araç bulunmaktadır. Kendi aracınızı geliştirmek yerine, mevcut araçları kendi ihtiyaçlarınıza göre yapılandırmak ve entegre etmek genellikle daha hızlı ve sürdürülebilir bir çözümdür. Kendi aracınızı ancak çok niş veya mevcut araçların kapsamadığı özel ihtiyaçlarınız olduğunda geliştirmeyi düşünebilirsiniz.
-
Soru 3: Otomasyon App Store onayını garanti eder mi?
Cevap 3: Otomasyon, App Store reddedilme riskini büyük ölçüde azaltır ve en sık karşılaşılan hataları önler, ancak %100 onay garantisi vermez. Apple’ın inceleme süreci bazen sübjektif olabilir veya uygulamanızın benzersiz bir özelliği nedeniyle beklenmedik bir kural ihlali tespit edilebilir. Otomasyon, “bilinen” ve “tekrar eden” hataları elimine etmek için güçlü bir araçtır, ancak her zaman insan incelemesinin yerini tutmaz.
-
Soru 4: Küçük ekipler için otomasyonun maliyeti ne kadar?
Cevap 4: Otomasyonun başlangıç maliyeti (kurulum ve betik yazma için harcanan zaman) olabilir, ancak uzun vadede büyük bir yatırım getirisi sağlar. Küçük ekipler için özellikle kritik öneme sahiptir, çünkü kısıtlı kaynaklarla daha fazla iş yapma ve zaman kayıplarını minimize etme imkanı sunar. Birçok açık kaynaklı otomasyon aracı ücretsizdir ve CI/CD hizmetlerinin ücretsiz katmanları (örneğin, GitHub Actions) mevcuttur. Başlangıçta sadece en kritik 2-3 kontrolü otomatikleştirmek bile büyük fark yaratacaktır.
-
Soru 5: Hangi App Store kuralları otomatikleştirmesi en zor olanlardır?
Cevap 5: Sübjektif yorum gerektiren veya insan değerlendirmesine dayalı kuralları otomatikleştirmek zordur. Örneğin, “kullanıcı deneyimi iyi değil” (4.2), “uygulama bir demo gibi hissediliyor” (4.2) veya “telif hakkı ihlali var” (5.2) gibi durumlar genellikle otomatik araçlarla tam olarak tespit edilemez. Görsel tasarımın estetiği, uygulamanın genel “hissiyatı” veya karmaşık telif hakkı ihlalleri gibi konular hala insan incelemesi gerektirir. Otomasyon, daha çok teknik ve nicel kontrol noktalarına odaklanır.