iOS
RenewExit
- App Store’da

Genel bakış
RenewExit, abonelikleri ve ücretsiz denemeleri manuel olarak takip etmeyi; yenileme, iptal ve kalan erişim sürecini tek bir akış içinde yönetmeyi amaçlayan bir iOS uygulaması.
Problem
Abonelikler yalnızca yenileme tarihlerini takip etmekten ibaret değil. Ücretsiz denemeler, farklı iptal yöntemleri, iptal sonrasında devam eden erişim süreleri ve sürecin gerçekten tamamlanıp tamamlanmadığı farklı yerlerde takip edilmek zorunda kalabiliyor.
RenewExit, bu süreci tek bir yerde daha anlaşılır ve takip edilebilir hale getirme fikriyle ortaya çıktı.
Yaklaşım
Uygulamayı otomatik abonelik algılayan bir servis yerine, kullanıcının kontrolünde çalışan manuel ve local-first bir takip aracı olarak tasarladım.
Abonelik kaydı yalnızca başlangıç noktası. Kullanıcı bir abonelikten ayrılmak istediğinde Çıkış Planı adı verilen stateful bir süreç başlıyor. İptal veya yönetim yönteminin seçilmesi, ilgili rotanın açılması, sonucun kaydedilmesi ve varsa kalan erişim süresinin takip edilmesi birbirinden ayrı adımlar olarak ele alınıyor.
Seçili özellikler
Abonelik ve Deneme Takibi
Aboneliklerin ve ücretsiz denemelerin yenileme bilgilerini manuel olarak kaydetmeyi ve takip etmeyi sağlar.
Çıkış Planları
Bir abonelikten ayrılma sürecini tek seferlik bir aksiyon yerine adım adım ilerleyen bir süreç olarak takip eder.
İptal / Yönetim Yöntemi Seçimi
Aboneliğin nasıl yönetileceğine veya iptal edileceğine uygun rotanın seçilmesini sağlar.
Sonuç ve Kalan Erişim Takibi
İptal işleminin sonucunu ve aboneliğin erişime açık kalacağı süreyi ayrıca kaydetmeye imkân verir.
Yerel Hatırlatıcılar
Yaklaşan yenilemeler veya takip edilmesi gereken abonelikler için cihaz üzerinde hatırlatıcılar oluşturur.
Teknolojiler
- Swift
- SwiftUI
- SwiftData
- StoreKit
- UserNotifications
- LocalAuthentication
Geliştirme kararları
Otomatik algılama yerine manuel giriş
Banka hesabı veya e-posta gibi harici kaynaklara erişmek yerine aboneliklerin kullanıcı tarafından girilmesini tercih ettim. Böylece ürünün kapsamını daha basit tutarken kişisel verilere gereksiz erişim ihtiyacını da ortadan kaldırmayı hedefledim.
İptal rotası ve iptal sonucu ayrı state’ler
Bir iptal sayfasının açılması, aboneliğin gerçekten iptal edildiği anlamına gelmiyor. Bu nedenle “iptal yöntemine ulaşıldı” ile “iptal sonucu kaydedildi” durumlarını birbirinden ayırdım.
Bu ayrım, uygulamanın gerçekleşmeyen bir işlemi yanlışlıkla tamamlanmış kabul etmesini önlüyor.
Çıkış Planı kalıcı bir lifecycle olarak tutuluyor
Çıkış Planlarını yalnızca iptal anında kullanılan geçici kayıtlar yerine kalıcı bir lifecycle ve timeline olarak ele aldım.
Böylece iptal sonrasında devam eden erişim süresi ve daha önce tamamlanan süreçler de uygulama içinde takip edilebiliyor.
Öğrendiklerim
RenewExit üzerinde çalışırken teknik olarak çalışan bir uygulamanın tek başına yeterli olmadığını daha net gördüm. App Store süreci, ürünün farklılaşmasının ve kullanıcıya sunduğu akışın teknik uygulama kadar açık olması gerektiğini gösterdi.
Ayrıca local-first veri modeli, lifecycle tabanlı state yönetimi ve App Store review süreci konusunda daha fazla deneyim kazandım.