Vue.js, Quasar ve Capacitor ile iOS Uygulama Yayınladım: Ağladım, Güldüm, Çözdüm

Görsel yazar tarafından Canva’da hazırlanmıştır.

Bir orta düzey yönetici olarak çalışmaya başlayalı bir yılı geçti, biliyorsundur. Bu yazının hikâyesini daha önce anlattım aslında, canım okurum. Tanıyanlar beni ezberledi hatta. Örnek yazılar yayınlandıkça buraya linkleyeceğim.

Mobil uygulamamıza verilen öneme yukarıda bahsettiğim yazılarda çok değindim. Devletimizin 10 milyondan fazla belgesinin tutulduğu bir veritabanımız var. Böyle büyük bir veri gücümüz varken neden mobil uygulamamızda bunu abonelerimize sunmayalım? Daha önce Android için buna çok benzer bir yazı yazmıştım.


Bu yazıda aslında Vue.js 3 ve Quasar kullanarak Capacitor aracılığıyla iOS uygulamamızı uçtan uca test sürecinden App Store’a gönderim aşamasına kadar nasıl taşıdığımızı, bu süreçte karşılaştığımız hataları ve bulduğumuz çözümleri anlatacağım.

Şu notu düşmeden de geçemeyeceğim: Capacitor kullandığımız ve Capacitor framework’tenbağımsız bir native köprü olduğu için bu hatalar ve öneriler, Capacitor kullanan diğer JavaScript framework’leri için de çalışacaktır. Native ile iletişime geçen ara katman Capacitor olduğu sürece, ön yüz tarafında Angular, React, Next.js… olması çok büyük bir fark yaratmaz.

Tabii ki her framework’ün kendine özel kütüphaneleri ve adaptasyonları olabilir. Örneğin React için @capacitor/react, Angular için @capacitor/angular gibi. Ancak temel hata türleri ve çözümler büyük ölçüde aynı kalacaktır. Ben, karşılaştığım hatalara çözüm ararken bazı React Native geliştiricilerin de aynı hataları aldığını görmüştüm.



Özet: Uzun uzun okumak istemeyenler için hızlı rehber:


1. Gerekli yazılımları kur

  • Mac’e Xcode, VSCode ve Git’i yükle.

  • Projeyi Git üzerinden çek ve VSCode ile aç.

2. Proje bağımlılıklarını yükle

code
npm i
  • Bu komutu proje kök dizininde çalıştırarak Vue.js ve Quasar bağımlılıklarını yükle.

3. Capacitor CLI’yı yükle ve güncelle

code
npm install -g @capacitor/cli 

4. Daha önce eklenmediyse iOS platformunu ekle

code
npx cap add ios

5. Xcode’a geçmeden önce tarayıcıda test et

code
  • Geliştirici konsolunu aç: F12 / DevTools ve hataları kontrol et.

  • Mobil görünümde test etmek için Chrome’da Responsive Mode’u aç: Ctrl + Shift + M.

6. Capacitor değişikliklerini senkronize et

code
cd src-capacitor
npm i
npx cap sync ios

7. Xcode hatası almamak için CocoaPods bağımlılıklarını yükle

code
cd src-capacitor/ios
pod install --repo-update

8. iOS simülatöründe veya gerçek cihazda çalıştır

code
quasar dev -m capacitor -T ios --livereload --external
  • Gerçek cihazda test etmek için:

code
npx cap open ios 
  • Xcode’u aç, yukarıdan cihazını seç ve sol üstteki klasik “Play”, yani “Run” butonuna bas.

Bitti! Şimdi her bir adımı neden yaptığımızı anlattığım detaylara geçebilirsin. Özeti oku, işini hızlıca hallet ama detayları atlama. İş görüşmesinde sorarım. İnsan ne yaşadığını bilir… Hadi bakalım, devam.



1. Gerekli Yazılımları Kur

Evet, hepimizin en sevdiği kısım: kurulum süreci! Ama merak etme, adım adım gittiğimiz sürece her şey çok rahat ilerleyecek. Yemek tarifi gibi olacak ama idare et artık. 😊

  • Mac’imizi aldık.

  • Gerekli programları kurduk: Visual Studio Code (VSCode), Xcode, Git…

  • Kaynak kodumuzu Git üzerinden VSCode’a clone yaptık.

  • Vue, Gradle ve VSCode’un önerdiği diğer ek paketleri/plugin’leri kurduk.


2. Proje Bağımlılıklarını Yükle

Öncelikle tüm proje bağımlılıklarını kurmadan bir adım bile ilerleyemeyiz. O yüzden terminale şu komutu gönder:

code
npm i

Bu komut, proje dizininde ihtiyaç duyulan bağımlılıkları indirir ve node_modules klasörünü oluşturur. Eğer node_modules klasörün varsa ama hâlâ eksik bağımlılıklar görünüyorsa npm install --force veya npm ci gibi komutlar da iş görebilir.


3. Capacitor CLI’yı Yükle ve Güncelle

Mobil uygulamamıza kod yazmaya başlamadan önce arka planda her şeyin düzgün çalıştığını görmek istiyoruz. Bir nevi sahne arkasını hazırlamak gibi!

İleride pek çok defa terminalde quasar ... komutlarını kullanacağız. Bunun için Capacitor CLI’nın global olarak yüklü olması lazım.

code
npm install -g @capacitor/cli 

Zaten kuruluysa sürümünü kontrol etmek için:

code
npx cap --version

Eski bir sürüm çıkarsa güncellemek için tekrar şu komutu kullanabilirsin:

code
npm install -g @capacitor/cli

Biraz daha derine dalarsak:

Capacitor, Vue.js ve Quasar ile geliştirdiğimiz uygulamayı native bir uygulama gibi çalıştırırken aslında arka planda WebView kullanır. Bu yüzden Xcode veya Android Studio, Vue.js kaynak kodlarını doğrudan görmez. Alttaki ekran görüntüsünde gördüğünüz üzere XCode, src-capacitor/ios dizinini açabilir ancak src altındaki asıl Vue.js ve Javascript dosyalarını açamaz, göremez.


Yazar tarafından ekran görüntüsü

Yazar tarafından ekran görüntüsü

Neden?

  • Vue.js kodları native ortamda çalışmaz, WebView içinde render edilir.

  • iOS tarafında WKWebView, Android tarafında ise WebView bileşenleri kullanılarak Vue.js arayüzü çalıştırılır.

  • Quasar’ın derlediği index.html, js ve css dosyaları native projeye kopyalanır ve WebView üzerinden açılır.

  • Bu konu teknik olarak çok derin, başka bir yazıda detaylandırmak istiyorum. Resmen cross-platform uygulamaların çalışma mantığını anlatacağım.


4. Daha Önce Eklenmediyse iOS Platformunu Ekle

Artık iOS tarafına giriş yapıyoruz. Projeye ilk defa iOS desteği ekleyeceksen:

code
npx cap add ios

Bu komut, iOS için gerekli dosyaları oluşturur ve src-capacitor/ios klasörünü ekler. Zaten eklendiyse hata almamak için tekrar çalıştırmana gerek yok.


5. Xcode’a Geçmeden Önce Tarayıcıda Test Et

Şimdi, hemen iOS tarafına geçmeden önce tarayıcıda bir test edelim. Çünkü Vue.js veya Quasar kaynaklı bir hata varsa boşu boşuna iOS tarafında sorun aramayalım. Burada amaç, iOS tarafına gereksiz yük bindirmeden önce her şeyi sağlama almak ve test süremizi kısaltmak. Küçük bir ara

Terminale şu komutu gir:

code

Tarayıcıda testini yap ve geliştirici konsolunu (F12 / DevTools) kontrol et.

  • Tarayıcıda çalışıyorsa ve hatasızsa iOS tarafına geçebiliriz.

  • Mobil görünümde test etmek için Chrome’da Responsive Mode’u açmayı unutma.

  • Hata alıyorsan önce burada çözmeye çalış. Çoğu hata Vue.js veya API kaynaklı olabilir; bunları bu aşamada çözmek ve debug yapmak çok daha kolaydır.


6. Capacitor Değişikliklerini Senkronize Et

iOS dosyaları eklendi ama projemizdeki Vue.js/Quasar değişikliklerini Capacitor tarafına aktarmamız gerekiyor.

Yanlış: Proje kök dizininde bu komutu çalıştırmak hata verecektir:

code
npx cap sync ios

Bu durumda şu hatayı alırsın: [error] ios platform has not been added yet.


Doğru: Önce src-capacitor dizinine gir, sonra senkronize et:

code
cd src-capacitor
npm i
npx cap sync ios

📌 Bu neden önemli?

npm i komutu, proje kök dizininde Vue.js ve Quasar bağımlılıklarını yüklerken src-capacitor içinde Capacitor’un native bağımlılıklarını yükler. Aşağıdaki ekran görüntüsünde src-capacitor dizinindeki node_modules klasörünü de görme sebebin budur.

Yazar tarafından ekran görüntüsü

Yazar tarafından ekran görüntüsü

  • npx cap sync ios, Vue.js build dosyalarını src-capacitor/ios/App/public içine kopyalar ve iOS uygulamasına dâhil eder.

  • npm i çalıştırılmazsa bazı Capacitor plugin bağımlılıkları eksik olabilir ve sync sırasında hata alabilirsin.

Yeni bir plugin eklediysen (@capacitor/camera, @capacitor/push-notifications gibi) veya Vue.js tarafında bir değişiklik yaptıysan bu adımı kesinlikle atlamamalısın.

Hâlâ hata alıyorsan şunları kontrol et:

  • Node.js bağımlılıkları eksik olabilir, npm install çalıştır.

  • Capacitor sürümün eski olabilir; npm install -g @capacitor/cli ile güncelle.

  • macOS’te Xcode CLI araçları eksik olabilir; xcode-select --install ile kur.

7. Xcode Hatası Almamak için CocoaPods Bağımlılıklarını Yükle

Şimdi, iOS bağımlılıklarını yüklemek için Xcode’un kullandığı CocoaPods sistemini çalıştırmalıyız. Bu adımı atlarsak şu yazıda bahsettiğim gibi Device plugin is not implemented on iOS hatası alırız. (Device yerine Vue.js tarafında yeni eklediğin başka bir Capacitor ek paketi de olabilir: @capacitor/camera, @capacitor/push-notifications gibi.)

İlk olarak iOS dizinine geç:

code
cd src-capacitor/ios

Capacitor, native iOS özelliklerine erişmek için bazı bağımlılıklar kullanır ve bu bağımlılıklar CocoaPods aracılığıyla yönetilir. iOS tarafında Firebase, anlık bildirim (push notification), kamera, depolama gibi native özellikleri kullanıyorsan CocoaPods bu bağımlılıkları otomatik olarak projeye dâhil eder.

Bu adımı atlar veya eksik yaparsan:

  • Xcode build sırasında “library not found” hatası verebilir.

  • Native özellikler çalışmayabilir.

  • iOS tarafında eksik framework’ler nedeniyle uygulama açılmayabilir, beyaz ekranda kalabilir veya hata verebilir.

Şimdi CocoaPods bağımlılıklarını yükle:

code
pod install --repo-update

CocoaPods yüklü değilse şu hatayı alabilirsin: pod: command not found Böyle bir durumda CocoaPods’u şu komutla yükleyebilirsin:

code
sudo gem install cocoapods 

Ardından pod install --repo-update komutunu tekrar çalıştır.

CocoaPods yükleme işlemi bittikten sonra iOS tarafında çalıştırmaya hazırız.


8. iOS simülatöründe veya gerçek cihazda çalıştır

Vue.js Quasar uygulamamızı iOS ortamında çalıştırmak için şu komutu kullanacağız:

code
quasar dev -m capacitor -T ios –livereload –external

Bu komut, Vue.js ve Quasar projemizi Capacitor üzerinden bir iOS uygulaması olarak başlatır. Şimdi komutun her bir kısmını tek tek açıklayalım:

Tablo,  Datawrapper  altyapısıyla yazarın verisiyle hazırlanmıştır.

Tablo, Datawrapper altyapısıyla yazarın verisiyle hazırlanmıştır.

Simülatör veya Gerçek Cihazda Çalıştırma: Hangisi Daha İyi?

iOS uygulamanı test etmek için iki seçeneğin var: simülatör ve gerçek cihaz. Peki hangisi daha iyi? Cevap, neyi test etmek istediğine bağlı. Hadi avantaj ve dezavantajları inceleyelim.


iOS Simülatör Kullanmanın Avantajları & Dezavantajları

Avantajları:

  • Hızlıdır : Uygulamayı derleyip çalıştırmak, Mac’in donanımını kullandığı için fiziksel cihaza göre çok daha hızlıdır.

  • Kolay debugging sağlar: Safari’nin Web Inspector’ı ile Vue.js kodlarını ve ağ isteklerini rahatça inceleyebilirsin.

  • Farklı iPhone modellerini simüle edebilir : iPhone 14, iPhone SE, iPad gibi farklı cihazları test etmek mümkündür.

Dezavantajları:

  • Gerçekçi performans vermez : Simülatör, gerçek cihazlardaki yavaşlamaları birebir simüle edemez.

  • Kamera, Touch ID, Face ID gibi donanımlara erişemez: Donanım bazlı testler yapmak mümkün değildir.

  • Anlık bildirim gibi özellikler çalışmayabilir: APNs üzerinden bildirim almak istiyorsan gerçek cihaz kullanmalısın. Testlerim esnasında simülatörde de bildirim geldiğini gördüm ancak bu simülatörü nasıl oluşturduğumu hatırlamıyorum. Normalde gelmemesi lazım. :)

  • Gerçek iOS UI davranışlarını tam olarak göstermeyebilir: Özellikle animasyonlar ve safe area ile ilgili testlerde simülatör bazen hatalı görüntü verebilir.



Gerçek Cihaz Kullanmanın Avantajları & Dezavantajları

✅ Avantajları:

  • Gerçek dünya performansı: Uygulamanın gerçek hızını ve takılmaları tespit edebilirsin.

  • Gerçek dokunmatik ve gesture testleri yapılabilir: Swipe, uzun basma gibi hareketler test edilebilir.

  • Donanım özellikleri test edilebilir: Kamera, Face ID, GPS, pusula gibi donanım gerektiren özellikleri deneyebilirsin.

  • Anlık bildirim, Firebase ve APNs testleri mümkündür: Bildirim sistemlerinin gerçekten çalışıp çalışmadığını görebilirsin.

Dezavantajları:

  • Xcode ayarları ile uğraşmak gerekir: Developer hesabı, provisioning profile ve sertifikalar gibi ayarlamaları yapman şart.

  • Her cihazda test etmek zor: Elinde farklı iPhone modelleri yoksa farklı ekran boyutlarını test edemezsin.

  • Derleme süresi daha uzundur: Gerçek cihaza yükleme süresi simülatöre göre daha uzun olabilir.



Sonuç: Simülatör mü Gerçek Cihaz mı Kullanmalısın?


🛠 Geliştirme aşamasında: Simülatör kullan, çünkü daha hızlıdır ve debug işlemleri daha kolaydır.

📲 Son testlerde ve performans kontrollerinde: Gerçek cihaz kullan, çünkü uygulamanın gerçekten nasıl çalıştığını ancak böyle anlayabilirsin.

Pro tip: En iyi yöntem ikisini de kullanmaktır. Kod değişikliklerini hızlıca simülatörde test edip final testleri gerçek cihazda yaparsan en iyi sonucu alırsın.


  1. USB ile iPhone’u Mac’e bağla.

  2. npx cap open ios komutunu çalıştır.

  3. Xcode’da cihazını seç ve “Play”, yani “Run” butonuna bas.

Komut nasıl çalışır?

Bu komut, Xcode veya simülatörü manuel olarak açmadan Quasar uygulamasını doğrudan iOS ortamında başlatır.

  • Mac’te bir iPhone simülatörü açıksa doğrudan simülatör üzerinde çalıştırır. Tam burada herkesin aklında şu soru beliriyor: Simülatör mü, gerçek cihaz mı? Haklısın, biz de düşündük kanka.😊

  • USB ile bağladığın bir iPhone varsa bunu kullanarak gerçek cihazda test edebilirsin.

  • Kod değişikliklerinde otomatik yenileme yapar; böylece her seferinde npx cap sync ios çalıştırmana gerek kalmaz.



Test Geribildirimleri ve Çözümleri

Bu bölüme kadar geldiysen demek ki gerçek dünya senaryolarında başımıza gelen şeyleri konuşuyoruz. Endişelenme, her hatanın bir çözümü var. Beraber çözüyoruz! En kötü oturup birlikte ağlarız. 😊

Bu bölümde Vue.js, Quasar ve Capacitor kullanarak iOS uygulaması geliştirirken karşılaşabileceğin hatalardan ve bunların çözümlerinden bahsedeceğim. Biz ekibimizle bu sorunları yaşadık, sen de benzer şeylerle uğraşabilirsin. Neyse ki çözümleriyle birlikte buradayım!


1. Bazı Butonların Çalışmaması

Vue.js ile geliştirdiğimiz uygulamamızda bazı butonların tıklanmadığını fark ettik. iOS, özellikle dokunma dinleyicilerini (click listener) farklı işleyebildiği için sadece @click kullanmak yeterli olmayabiliyor.

Çözüm: @touchend ekleyerek dokunmatik olaylarını yakala

code
<q-btn label="Tıkla" @click="handleClick" @touchend="handleClick" />

Neden?

  • @click, masaüstü ve Android cihazlarda genellikle sorunsuz çalışır.

  • @click ve @touchend birlikte kullanılırsa tarayıcı bazen aynı işlemi iki kez çağırabilir. Bunu önlemek için aşağıdaki yöntemi kullanabilirsin:

code
<q-btn label="Tıkla" @click="handleClick" @touchend.prevent="handleClick" /> 


2. Çentik Altında Kalan Butonlar ve Safe Area Sorunu

Bazı butonların iPhone X ve üzeri cihazlarda ekranın üst kısmındaki çentik (notch) tarafından kapatıldığını fark ettik. Bu, safe area kurallarına dikkat etmediğimiz için oldu.

Çözüm: CSS ile safe area tanımla

Aşağıdaki CSS değişkenleriyle içeriğin çentiğin altında kalmasını engelleyebilirsin.

code
.safe-area {
  padding-top: env(safe-area-inset-top);
  padding-bottom: env(safe-area-inset-bottom);
}

Vue.js / Quasar İçin:

code
<q-header class="bg-primary text-white safe-area">
  <q-toolbar>
    <q-btn flat icon="menu" @click="toggleDrawer" />
  </q-toolbar>
</q-header>


3. Responsive Olmayan Bileşenler: Uzayıp Giden Metinler, Ovalar, Platolar

Bazı metinler mobil ekranlarda çok uzun olduğu için sayfa taşmaları yaşadık. Responsive tasarım düzgün yapılmadığında metinler ve kutular büyük ekranlarda düzgün görünse de mobilde felaket gibi görünebilir. Dikkatli olmalısın.

Çözüm: word-break ve max-width kullanımı

Uzun metinlerin taşmasını engellemek için:

code
.text-container {
  max-width: 100%;
  word-break: break-word;
}


4. iOS’a Özel Anlık Bildirim (Push Notification) Hatası: Failed to Get Instance FirebaseID

iOS’ta anlık bildirimleri test ederken Failed to get instance FirebaseID hatası aldık. Çünkü iOS, bildirimleri almak için özel izinler gerektiriyor ve Firebase'in iOS tarafındaki delegate yönetimi bazen sorun çıkarabiliyor.

Bu konuda aldığımız hatalardan biri de şuydu:

APNS device token not set before retrieving FCM Token for Sender ID ‘’. Notifications to this FCM Token will not be delivered over APNS. Be sure to re-retrieve the FCM token once the APNS token is set.

Bu hata, iOS cihazın Firebase Cloud Messaging (FCM) sunucusuna bağlanamaması nedeniyle oluşuyor. iOS, APNS token alınmadan FCM token vermez ve bu yüzden push bildirimler çalışmaz.


Çözüm 1: Anlık bildirim izinlerini manuel olarak iste

Quasar + Capacitor ile Firebase anlık bildirim için:

code
import { PushNotifications } from '@capacitor/push-notifications';

async function registerPush() {
  const permission = await PushNotifications.requestPermissions();
  if (permission.receive === 'granted') {
    PushNotifications.register();
  } else {
    console.error('Push Notification izni reddedildi!');
  }
}

Neden?

  • iOS tarafında anlık bildirimler için kullanıcıdan manuel izin istemek gerekir.

  • Bu adımı atlarsan bildirimleri alamazsın.

Çözüm 2: FirebaseAppDelegateProxyEnabled ayarını değiştir

Bazı durumlarda, Firebase’in kendi AppDelegate yönetimi ile Capacitor’ün yönetimi çakışabiliyor. Bunun sonucunda push token alınamıyor ve Failed to get instance FirebaseID hatası çıkıyor. Bunu düzeltmek için Info.plist dosyanı güncelle: ios/App/App/Info.plist içine şunu ekle:

code
<key>FirebaseAppDelegateProxyEnabled</key>
<string>NO</string>

Neden?

  • Firebase, iOS için kendi proxy delegate sistemini kullanıyor ve bazen Capacitor’ün anlık bildirim yönetimiyle çakışıyor.

  • Bu ayarı NO yaparak Firebase'in kendi delegate yönetimini kapatıyoruz ve anlık bildirimlerin düzgün çalışmasını sağlıyoruz.



Simülatör vs Gerçek Cihaz Testleri: Simülatörde Çalışıp Gerçek Cihazda Hata Veren Durumlar

Simülatörde her şey gayet güzel çalışırken, gerçek cihazda bazı API çağrılarının başarısız olduğunu fark ettik.

Çözüm: HTTPS gerekliliğini kontrol et:

iOS, güvenli olmayan HTTP isteklerine izin vermez. Eğer bir API çağrısı başarısız oluyorsa büyük ihtimalle NSAppTransportSecurity ayarlarını düzenlemen gerekiyor.

Info.plist dosyasına şunları ekle:

code
<key>BGTaskSchedulerPermittedIdentifiers</key>
    <array>
        <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    </array>
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
</dict>


“Fronentdciler” için iOS Uygulamalarda Xcode ve Apple Developer Hesabı Ayarları

iOS uygulamanı App Store’a göndermek için Apple Developer Programı’na kayıtlı bir hesabının olması gerekiyor. Eğer bireysel veya kurumsal bir Apple Developer hesabın yoksa https://developer.apple.com/programs/ adresinden kayıt olabilirsin. Ücretli bir üyelik gerektiriyor ve onay süreci birkaç gün sürebilir.

Apple Developer hesabı ile Xcode bağlantısını kur

  1. Xcode’u aç ve üst menüden Xcode → Settings sekmesine gir.

  2. “Accounts” sekmesine geç ve burada Apple ID ile giriş yap.

  3. Giriş yaptıktan sonra “Team” altında Apple Developer hesabının göründüğünden emin ol.


Xcode’da proje imzasını ayarla

  1. Xcode’da projenin iOS kısmını aç: npx cap open ios

  2. Xcode sol paneldeApp” ana dosyasına tıkla.

  3. “Signing & Capabilities” sekmesine geç.

  4. “Automatically manage signing” kutucuğunu işaretle.

  5. “Team” alanından Apple Developer hesabını seç.

  6. Bundle ID’nin benzersiz olduğuna emin ol. Örneğin: com.sirketadi.uygulamaadi

App Store gereksinimleri & TestFlight

iOS uygulamanı TestFlight üzerinden test etmek ve App Store’a göndermek için aşağıdaki adımları takip edebilirsin.


1. TestFlight ile test süreci

Yazar tarafından ekran görüntüsü

Yazar tarafından ekran görüntüsü

  • Ekran görüntüsünde gördüğün gibi yukarıda fiziksel bir cihaz seçili olmamalı; bunu yerine iOS ARM64 gibi genel bir hedef seçilmeli.

  • Aşağıdaki ekran görüntüsünde gördüğün gibi Xcode → Product → Archive yolunu takip ederek uygulama için “Archive” işlemini başlat.


Yazar tarafından ekran görüntüsü

Yazar tarafından ekran görüntüsü

  • Açılan pencerede “Distribute App” seçeneğini seç ve TestFlight üzerinden yükleme yap.
    Not: “Distribute” işleminden önce “Validate” işlemi yaparak çıkardığın dosyada bir sorun olup olmadığını test edebilirsin.

  • Uygulama yüklendikten sonra App Store Connect üzerinden TestFlight’a girip beta testini başlatabilirsin.



App Store gereksinimleri & TestFlight

App Store için uygun bir ikon ve splash screen eklediğinden emin ol.

  • Uygulama gizlilik politikası ve kullanım şartlarını içeren bir sayfa oluştur.

  • App Store Connect’te gerekli ekran görüntülerini ve açıklamaları gir.

  • Apple’ın App Store inceleme sürecine uygun olup olmadığını kontrol et.

Sonuç: Amacın sadece uygulamayı çalıştırıp test etmekse TestFlight ile ilerleyebilirsin. Ancak App Store’a göndermek için Apple’ın gereksinimlerini dikkatlice takip etmelisin.

App Store ve TestFlight süreçlerini ayrı bir yazıda daha detaylı anlatabilirim.



Caaanım Ekibim ❤️

Lebib Yalkın’da Birlikte çalıştığımız süre boyunca ekibimle o kadar güzel şeyler yaşadık ki… İnsan ancak birlikte çalışırken anlar, ekip ruhunun ne demek olduğunu. Hani bazı anlar vardır; o hatayı çözmek için sabahlara kadar uğraşırsın, ekranın başında gözlerini ovuşturup “Tek yol devrim!” veya “Kankaaaa” dersin, a harflerini uzatarak tizleşen bir sesle… Sonra biri gelir, tek satır kodla seni o çukurdan çıkarır. İşte o an, ekip olmanın büyüsüdür.

Bizim hep birlikte sırt sırta verip de… çözemeyeceğimiz problem yok…

Bizi asıl değerli yapan şey, birlikte çözmemizdir. 💪 Çünkü bir ekip sadece kod yazmaz; destek olur, öğretir, öğrenir, motive eder ve bazen “Sen bunu yaparsın!” der ve seni ateşler! İşte benim ekibim de tam olarak böyle.

Elinize sağlık, yüreği tertemiz güzel insanlar. Sizlerle gurur duyuyorum.

Şimdi biraz özeleştiri yapayım: Yukarıda, “Test Geribildirimleri ve Çözümleri” başlığında okuduğunuz bazı hatalar developer testleriyle bulunabilir miydi? Evet, tabii ki. 😅 Her ne kadar Mac’imiz geç geldiyse de önden biz simülatörde çalıştırıp uygulamada gezerek bu eksikleri saptayabilirdik. Ama önemli olan bu hatalardan öğrenmek ve bir sonraki projede daha iyisini yapmak. Çünkü gelişmek, deneyim kazanmak, daha iyi bir ekip olmak tam da böyle bir süreçtir. Ekibime bu konuda güvenim tam.

Bu projede, hatalar yüzünden birlikte hem kafayı yediğimiz hem kahkahalar attığımız, yeni şeyler öğrendiğimiz günleri asla unutmayacağım. Ekibime laf ettirmem! Biz kod yazarız, sorun çözeriz ama en önemlisi “birlikte” çözeriz.

Teşekkürler canlarım.