# Guideline 2.3.1: gizli özellikler ve OTA güncellemeleri

> Guideline 2.3.1: Apple gizli, uykuda ya da inceleme notlarında olmayan her özelliği reddeder. Uzaktan neyi değiştirebilirsin, ne için yeni build gerekir?

Orijinal sayfa: [Guideline 2.3.1: gizli özellikler ve OTA güncellemeleri](https://devoria.fr/tr/blog/guideline-2-3-1-gizli-ozellikler-ota-guncellemeleri)
Yazar: [Mehdi Azizi](https://devoria.fr/tr/mehdi-azizi)
Yayın: 2026-11-04
İçeriğin son gözden geçirilmesi: 2026-11-04


Guideline 2.3.1 gizli, uykuda bekleyen ya da belgelenmemiş özellikleri yasaklar: uygulamanın yaptığı her şey kullanıcıya ve reviewer'a görünür olmalı. Her yenilik inceleme notlarında net bir şekilde anlatılır. **Uzaktan güncelleme Apple'ın gördüğünü düzeltebilir, Apple'ın görmediğini asla ekleyemez.**

iOS uygulamalarımı Expo ile yayınlıyorum ve hepsinde, düzeltme gönderebilmek için ilk build'den itibaren EAS Update var. Kuralım şu: bir sürüm incelemedeyken hiçbir uzaktan güncelleme yok. Bu rehber Apple'ın metnine, lisans sözleşmesine, Expo dokümantasyonuna ve yayınlanmış ret örneklerine dayanıyor.

## Guideline 2.3.1 ne diyor?

2.3.1, [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#2.3.1) içinde 2. bölüm "Performance" altındaki 2.3 "Accurate Metadata" kısmını açar. Metin şöyle başlar: "Don't include any hidden, dormant, or undocumented features in your app; your app's functionality should be clear to end users and App Review." Kısacası: gizli, uyuyan ya da belgelenmemiş hiçbir şey olmayacak.

Devamı her gönderimi ilgilendirir: "All new features, functionality, and product changes must be described with specificity in the Notes for Review section of App Store Connect (generic descriptions will be rejected) and accessible for review." **Her yenilik inceleme notlarında net bir şekilde anlatılmalı ve reviewer tarafından erişilebilir olmalı.** Yani "Hata düzeltmeleri ve iyileştirmeler" yetmez.

Aynı paragraf yanıltıcı pazarlamayı da hedefler: App Store'da ya da başka bir yerde, olmayan bir içerik veya hizmet vaat etmek ya da sahte bir fiyat göstermek.

Bu kısım Nolera'da işime yaradı. Çıkıştan önce sayfasını tekrar okurken doğrulanamayan iki cümle buldum: artık yanlış olan "yalnızca Fransızca arayüz" ve hiç yayınlanmamış bir uygulama için "en çok tercih edilen paket". Reviewer notları da ürünün eskimiş bir halini anlatıyordu. Bu kısmın hedeflediği tam olarak bu. [2.3.10](https://devoria.fr/tr/blog/guideline-2-3-10-meta-veri-uygulama-reddedildi) ise daha çok sayfanın kendisini hedefler.

## 2.3.1 ret mesajı ne anlama geliyor?

Ret "Guideline 2.3.1 - Performance" başlığını taşır, bazen ardından "Hidden Features" gelir. React Native geliştiricilerinin paylaştığı iki mesaj:

- **Mart 2024**, bir [CodePush GitHub ticket'ında](https://github.com/microsoft/react-native-code-push/issues/2680): "The app contains hidden features.", başka açıklama yok. Geliştirici açıklama ister ve 2.5.2 kapsamında bir ek alır: "Your app, extension, or linked framework appears to contain code designed explicitly with the capability to change the app's behavior or functionality after App Review approval." Ticket, uygulamanın sonra geçip geçmediğini söylemiyor.
- **Şubat 2023**, [başka bir ticket'ta](https://github.com/microsoft/react-native-code-push/issues/2434) Apple, binary'deki "CodePush-related remote code downloading/updating support" kısmını hedef alıyor.

Benim yorumum: **reviewer güncellemelerini görmez, onları alabilen kodu görür.** Bu iki vaka CodePush'u hedefliyor. EAS Update'i hedefleyen yakın tarihli, herkese açık bir ret bulamadım, ama bu hiçbir şey kanıtlamaz.

## Uzaktan güncellemeler: 2.5.2 ve lisans neye izin veriyor?

[2.5.2 kuralı](https://developer.apple.com/app-store/review/guidelines/#2.5.2), ki [arka plan modları](https://devoria.fr/tr/blog/guideline-2-5-4-arka-plan-modu-apple-reddi) rehberinde de değiniyorum, uygulamanın "download, install, or execute code which introduces or changes features or functionality of the app" yapmasını yasaklar.

[Apple Developer Program License Agreement](https://developer.apple.com/support/terms/apple-developer-program-license-agreement/#b331) madde 3.3.1(B) indirilen çalıştırılabilir kodu yasaklar ama şunu belirtir: "Interpreted code may be downloaded to an Application". Üç şartla: bu kod uygulamanın ana amacını değiştirmez, ne imzayı ne sandbox'ı ne de sistem güvenliğini atlatır, ve başka uygulamalar için bir mağaza oluşturmaz.

Bir Expo uygulamasının JavaScript'i yorumlanan koddur: bence EAS Update bu çerçeveye girer. [Dokümantasyonu](https://docs.expo.dev/eas-update/introduction/) güncellemelerin App Store kurallarına uyduğunu ve "changes to your app's behavior need to be reviewed" olduğunu hatırlatır. Kritik bir hata için Expo uzaktan düzeltmeyi, ardından bu düzeltmeyi içeren yeni bir gönderimi önerir.

**Benim çizgim: var olanı düzeltmek ve ayarlamak, evet. Uygulamanın ne olduğunu ya da ne sattığını değiştirmek, hayır.**

## Uzaktan neyi değiştirebilirsin, ne için yeni build gerekir?

Uyguladığım tablo, burada alıntılanan Apple ve Expo sayfalarından çıkarıldı. "Ücretsizken ücretli olan" satırı ve son iki satır benim yorumum.

| Değişiklik                      | Yol                            | Neden                         |
| ------------------------------- | ------------------------------ | ----------------------------- |
| JavaScript hatası               | Uzaktan güncelleme             | Expo'nun öngördüğü kullanım   |
| Metin, çeviri, stil             | Uzaktan güncelleme             | Expo'nun öngördüğü kullanım   |
| Abonelik fiyatı                 | App Store Connect              | Kod değişmiyor                |
| Promosyon metni                 | App Store Connect              | Yeni gönderim gerekmez        |
| Onaylanmış türde bir satın alma | Yalnızca satın alma incelemesi | App Store Connect kuralı      |
| Bir türün ilk satın alması      | Yeni sürüm                     | App Store Connect kuralı      |
| Yeni özellik                    | Yeni sürüm                     | 2.3.1 ve 2.5.2                |
| Ücretsizken ücretli olan        | Yeni sürüm                     | Sayfa ve notlar güncellenmeli |
| İzin, Info.plist                | Yeni build                     | Binary'deki dosya             |
| Native modül, Expo SDK          | Yeni build                     | Native kod değişti            |
| Kapatan anahtar                 | Uzaktan yapılandırma           | Geçiciyse tolere edilir       |
| Açığa çıkaran anahtar           | Yasak                          | Hiç incelenmemiş özellik      |

Promosyon metni, Apple'ın [sürüm bilgileri](https://developer.apple.com/help/app-store-connect/reference/app-information/platform-version-information) sayfasına göre "without requiring an updated submission" değiştirilebilir. [Satın almaların gönderimi](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-in-app-purchase) yardım sayfasına göre her türün ilk satın alması yeni bir sürümle gider, sonrakiler tek başına. Expo native kodu, izinleri ve SDK sürümünü yeni binary gerektirenler arasında sayar, tıpkı [ITMS-90683](https://devoria.fr/tr/blog/itms-90683-missing-purpose-string-expo) örneğindeki gibi. Bozuk bir özelliği kapatan anahtar yeni bir şey eklemez, yeter ki abonelerin parasını ödediği şeyi elinden almasın.

## Ret almadan uzaktan anahtarlar

Uzaktan anahtar, yani feature flag, kendi başına yasak değil: her şey neyi gizlediğine bağlı. Kurallarım:

- **Bir anahtarın gösterebileceği her şey reviewer için mevcut ve açık olmalı**, ve inceleme notlarında adı geçmeli.
- Bir A/B testi reviewer'ın görebileceği iki varyantı karşılaştırır, asla incelenmiş bir varyantla hiç görülmemiş birini değil.
- **Hiçbir kod incelemeyi algılayıp farklı davranmaz.** Gizli özelliğin tanımı tam olarak budur.
- Uzaktan yönetilen bir paywall yalnızca onaylanmış ürünleri gösterir ve her varyant [3.1.2 kuralına](https://devoria.fr/tr/blog/guideline-3-1-2-abonelik-uygulama-reddedildi) uyar.

## Demo modu ve test hesapları

[Guideline 2.1](https://devoria.fr/tr/blog/guideline-2-1-app-store-ret-duzeltme), uygulamanda giriş varsa sunucu açıkken bir demo hesabı ister. Yasal ya da güvenlik yükümlülükleri hesap vermeni engelliyorsa, uygulamaya gömülü bir demo modu bunun yerine geçebilir, ama yalnızca "with prior approval by Apple", ve tüm özellikleri göstermelidir. Apple'ın sürüm bilgileri sayfası şunu da ekler: hesabın süresi dolmaz, ek hesaplar da 4.000 baytla sınırlı olan notlara yazılır.

2.3.1 ile bağlantısı: **başka türlü görünmeyen ekranları açan bir demo modu ya da test hesabı anlatılmalı.** Bildirilmemiş gizli bir hareket, kod ya da özel hesap gizli özelliktir. Her özel erişimi, neyi açtığıyla birlikte notlarda belirt.

## Kuralım: inceleme sırasında hiçbir uzaktan güncelleme yok

EAS Update neden bütün uygulamalarımda var: alarm uygulamam Solys'te, bir ses efekti bir kez başarısız olunca uygulamayı tamamen sessiz bırakan bir JavaScript hatası vardı. Düzeltme üç satırdı, ama göndermek için tam bir build ve inceleme gerekiyordu. O zamandan beri bütün uygulamalarım ilk build'den itibaren expo-updates içeriyor: bu native bir modül, onsuz derlenmiş bir binary hiçbir zaman güncelleme almaz. `app.json` içindeki yapılandırmam:

```json
{
  "expo": {
    "runtimeVersion": { "policy": "fingerprint" },
    "updates": { "fallbackToCacheTimeout": 0, "checkAutomatically": "ON_LOAD" }
  }
}
```

`fingerprint` ile bir güncelleme yalnızca native kodu eşleşen binary'lere ulaşır ([çalışma zamanı sürümleri](https://docs.expo.dev/eas-update/runtime-versions/)). Ama bir sürüm incelemeyi beklerken ya da incelemedeyken hiçbir şey yayınlamam. İki sebebi var.

1. **Reviewer düzeltmeyi görmez.** `fallbackToCacheTimeout` 0 olduğunda yeni bir kurulum gömülü kodla açılır ve güncellemeyi bir sonraki açılışta uygular ([expo-updates dokümantasyonu](https://docs.expo.dev/versions/latest/sdk/updates/)). Reviewer kurar, bir kez açar ve binary'yi test eder. Nolera, uzaktan çoktan gönderilmiş bir düzeltmeye rağmen reddedildi: bunu 2.1 rehberinde anlatıyorum.
2. **Reviewer'ın test ettiği şey kullanıcıların aldığı şeyle aynı kalmalı.** İnceleme sırasında davranışı değiştirmek, görülen sürümle gönderilen sürüm arasında fark yaratır.

## Net inceleme notları

2.3.1 genel açıklamaları reddeder. Kullanacağım şablon, İngilizce:

```text
What's new in this version:
- [Feature]: [where to find it, how to test it].

Remote configuration:
- "[flag]" controls [feature]. It is ON for review.

Over-the-air updates:
- The app uses expo-updates for bug fixes only.
  No update will be published during this review.

Demo account: see Sign-in information. It never expires.
```

## 2.3.1 reddine nasıl yanıt verilir?

App Store Connect'ten yanıt ver, orada [App Review mesajını yanıtlarsın](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/).

- **Mesaj belirsiz kalıyorsa**: 2024 ticket'ındaki geliştirici gibi hangi özelliğin kastedildiğini sor.
- **Gerçek bir özellik kötü anlatılmışsa**: tam yolu ve kısa bir video ver, sonra notları tamamla.
- **Bir anahtar hiç görülmemiş bir şeyi açığa çıkarıyorsa**: kaldır ya da açıp anlat, sonra yeni bir build al.
- **Sorun güncelleme koduysa**: madde 3.3.1(B) çerçevesinde düzeltmeler için kullanıldığını açıkla. 2023 ticket'ında Apple kaldırılmasını istiyordu.

## Gönderimden önce 2.3.1 kontrol listesi

- Sürümdeki her yenilik, yoluyla birlikte notlarda anlatılmış.
- Her uzaktan anahtar inceleme için açık ve notlarda adı geçiyor.
- Hiçbir kod reviewer için davranış değiştirmiyor.
- Özel erişimler anlatılmış: demo modu, test hesabı, hareket.
- Sayfa ve paywall, build'in yapmadığı hiçbir şeyi vaat etmiyor.
- İnceleme sırasında hiçbir uzaktan güncelleme yayınlanmıyor.

## Göndermeden önce dosyanı kontrol et

[Review Kit](https://devoria.fr/tr/kits/app-review), gönderim öncesi kontrol listemi, test eden kişi için not şablonlarını ve projeni okuyan Claude Code skill'lerini bir araya getiriyor. İnsan gözüyle bakılmasını istiyorsan [benimle bir saat ayır](https://devoria.fr/tr/coaching): inceleme notlarını ve güncelleme yapılandırmanı görüntülü görüşmede birlikte gözden geçirelim. Tüm süreç [Apple tarafından reddedilen uygulama](https://devoria.fr/tr/expertise/apple-tarafindan-reddedilen-uygulama) sayfasında.

İlk çıkışına mı hazırlanıyorsun? [Ücretsiz teşhisini yap](https://devoria.fr/tr/diagnostic): adımları sıraya koyar ve sana Apple ret önleme kontrol listemi gönderir.

## Sık sorulan sorular

### "Guideline 2.3.1 - Performance - Hidden Features" ne anlama geliyor?

Apple, uygulamanda gizli, uykuda ya da inceleme notlarında olmayan bir özellik olduğunu düşünüyor. Mesaj, incelemeden sonra uygulamayı değiştirebilen bir kodu da hedefleyebilir, bazen bir 2.5.2 reddiyle birlikte.

### EAS Update'e Apple izin veriyor mu?

Lisans, uygulamanın ana amacını değiştirmediği sürece indirilen yorumlanan koda izin veriyor. Düzeltmek, evet. İncelenmemiş bir özellik eklemek, hayır.

### Bir iOS uygulamasında feature flag kullanılabilir mi?

Evet, gösterebilecekleri her şey incelenmişse. Her anahtarı inceleme için aç ve notlarda anlat.

### Demo modunu reviewer'a bildirmek gerekir mi?

Evet. Uygulamaya gömülü bir demo modu Apple'ın önceden onayını gerektirir ve tüm özellikleri göstermelidir.

### İnceleme sırasında uzaktan güncelleme yayınlanabilir mi?

Bunu açıkça yasaklayan bir şey yok. Ama reviewer onu ilk açılışta görmez ve incelenen sürümle arada fark yaratır. Ben her zaman bundan kaçınıyorum.


## Projen

[Review Kit](https://devoria.fr/tr/kits/app-review): App Store inceleme kontrol listem, düzelttiğim Apple retlerim, Google Play kontrol listesi ve üç Claude Code skill'i. ₺2.699.

[iOS & Android Kit](https://devoria.fr/tr/kits/ios): Claude Code ile iPhone ve Android uygulamanı yap: uygulamalarımın başlangıç kodu, mağazalara kadar giden yol ve tüm kitler. ₺5.499.

[Analiz: Seni iPhone uygulamandan ayıran ne?](https://devoria.fr/tr/diagnostic): 7 soru, 60 saniye: iPhone uygulamanı yayınlamanı asıl neyin engellediğini, 4 adımlık yolunu ve sana uygun kiti öğren.
