@mmerterden/multi-agent-pipeline 20.7.0 → 20.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/LICENSE +0 -10
- package/docs/facts.json +1 -1
- package/manifest.json +266 -267
- package/package.json +2 -2
- package/pipeline/scripts/_notices.mjs +1 -1
- package/pipeline/skills/.skill-manifest.json +68 -68
- package/pipeline/skills/shared/README.md +70 -70
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +373 -381
- package/pipeline/skills/shared/external/alarmkit/evals/evals.json +23 -18
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +328 -378
- package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
- package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
- package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
- package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
- package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
- package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
- package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +339 -277
- package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
- package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +105 -122
- package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +143 -166
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +307 -326
- package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +333 -360
- package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
- package/pipeline/skills/shared/external/authentication/SKILL.md +265 -381
- package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +133 -178
- package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
- package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
- package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
- package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
- package/pipeline/skills/shared/external/background-processing/SKILL.md +270 -382
- package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +169 -317
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
- package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
- package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
- package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +226 -376
- package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
- package/pipeline/skills/shared/external/core-data/SKILL.md +292 -368
- package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
- package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
- package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
- package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
- package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
- package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
- package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
- package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
- package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
- package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +230 -353
- package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
- package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
- package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
- package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
- package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
- package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
- package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
- package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
- package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
- package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
- package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
- package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
- package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
- package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
- package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
- package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
- package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
- package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
- package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +295 -267
- package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
- package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
- package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
- package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
- package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
- package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
- package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
- package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
- package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
- package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
- package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
- package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
- package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
- package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
- package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
- package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
- package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
- package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
- package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
- package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
- package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
- package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
- package/pipeline/skills/shared/external/storekit/references/core-patterns.md +298 -242
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
- package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
- package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
- package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
- package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
- package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
- package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +303 -351
- package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
- package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
- package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
- package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
- package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
- package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
- package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
- package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
- package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
- package/pipeline/skills/shared/external/swift-security/SKILL.md +180 -161
- package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
- package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
- package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +408 -476
- package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
- package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
- package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
- package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
- package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +352 -472
- package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
- package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
- package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
- package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +396 -457
- package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +188 -175
- package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
- package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +80 -84
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +392 -256
- package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
- package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
- package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
- package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
- package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
- package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
- package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
- package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
- package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
- package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
- package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +193 -168
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +132 -133
- package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +106 -140
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
- package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
- package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
- package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
- package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
- package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
- package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
- package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +152 -310
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +216 -288
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +414 -719
- package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +0 -39
|
@@ -1,363 +1,344 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: app-store-review
|
|
3
|
-
description: "
|
|
3
|
+
description: "App Store submission readiness and rejection prevention: Review Guidelines 2.1, 2.3, 2.5.1, 3.1.1, 4.2 and 5.1.2, PrivacyInfo.xcprivacy manifests and required-reason codes, IAP and StoreKit rules, ATT consent, EU DMA distribution, entitlements and usage strings, metadata limits, screenshots, TestFlight, phased release, Resolution Center appeals, HIG review items, widget and Live Activity review rules. Use when preparing a submission, fixing a rejection, auditing a privacy manifest, implementing the ATT prompt or checking IAP compliance. Not for keyword research, ranking, conversion copy, screenshot order or A/B tests (app-store-optimization)."
|
|
4
4
|
metadata:
|
|
5
|
-
source:
|
|
5
|
+
source: multi-agent-pipeline
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# App Store Review
|
|
8
|
+
# App Store Review Readiness
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Most rejections are predictable. They come from a missing demo account, a
|
|
11
|
+
privacy declaration that disagrees with what the binary actually sends, a
|
|
12
|
+
purchase path that skips StoreKit, or metadata that promises something the app
|
|
13
|
+
does not do. This skill finds those before App Review does.
|
|
11
14
|
|
|
12
|
-
|
|
15
|
+
Apple's fraud-prevention report of May 2026 said App Review looked at more than
|
|
16
|
+
9.1 million submissions during 2025 and turned down over 2 million of them.
|
|
17
|
+
Numbers like these change every year, so confirm them against Apple's own
|
|
18
|
+
publication before quoting them.
|
|
13
19
|
|
|
14
|
-
|
|
15
|
-
- [Top Rejection Reasons and How to Avoid Them](#top-rejection-reasons-and-how-to-avoid-them)
|
|
16
|
-
- [PrivacyInfo.xcprivacy -- Privacy Manifest Requirements](#privacyinfoxcprivacy-privacy-manifest-requirements)
|
|
17
|
-
- [Data Use, Sharing, and Privacy Policy (Guideline 5.1.2)](#data-use-sharing-and-privacy-policy-guideline-512)
|
|
18
|
-
- [In-App Purchase and StoreKit Rules (Guideline 3.1.1)](#in-app-purchase-and-storekit-rules-guideline-311)
|
|
19
|
-
- [HIG Compliance Checklist](#hig-compliance-checklist)
|
|
20
|
-
- [App Tracking Transparency (ATT)](#app-tracking-transparency-att)
|
|
21
|
-
- [EU Digital Markets Act (DMA) Considerations](#eu-digital-markets-act-dma-considerations)
|
|
22
|
-
- [Entitlements and Capabilities](#entitlements-and-capabilities)
|
|
23
|
-
- [Submission Workflow](#submission-workflow)
|
|
24
|
-
- [Metadata Best Practices](#metadata-best-practices)
|
|
25
|
-
- [Appeal Process](#appeal-process)
|
|
26
|
-
- [Common Mistakes](#common-mistakes)
|
|
27
|
-
- [Review Checklist](#review-checklist)
|
|
28
|
-
- [References](#references)
|
|
20
|
+
## Scope and boundaries
|
|
29
21
|
|
|
30
|
-
|
|
22
|
+
- Metadata questions (name, subtitle, keywords, captions, product page) are
|
|
23
|
+
answered here only from the compliance side: accuracy, field limits,
|
|
24
|
+
misleading content and screenshot rules.
|
|
25
|
+
- Keyword research, ranking strategy, conversion copy, screenshot order and
|
|
26
|
+
A/B tests belong to `app-store-optimization`.
|
|
27
|
+
- Clean Swift 6 concurrency or a tidy StoreKit wrapper is not evidence of
|
|
28
|
+
compliance. Check the guideline, not the code quality.
|
|
31
29
|
|
|
32
|
-
|
|
30
|
+
Limits to state on every metadata answer:
|
|
33
31
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
-
|
|
78
|
-
|
|
79
|
-
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
###
|
|
95
|
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
|
|
100
|
-
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
32
|
+
| Field | Rule |
|
|
33
|
+
|---|---|
|
|
34
|
+
| App name | 30 characters |
|
|
35
|
+
| Subtitle | 30 characters |
|
|
36
|
+
| Keyword field | 100 characters, comma-separated, no space after a comma |
|
|
37
|
+
| iPhone screenshots | 6.9-inch set is the primary set |
|
|
38
|
+
| iPad screenshots | 13-inch set for any app that supports iPad |
|
|
39
|
+
| Screenshot content | the real app UI |
|
|
40
|
+
|
|
41
|
+
## Triage: blockers first
|
|
42
|
+
|
|
43
|
+
A full audit reports two lists: things that stop upload or review, and cleanup.
|
|
44
|
+
Treat these as blockers:
|
|
45
|
+
|
|
46
|
+
1. The build is uploaded after April 28, 2026 and was not produced with Xcode 26
|
|
47
|
+
or later against the platform's 26 SDK or later.
|
|
48
|
+
2. The privacy manifest, the nutrition label, the privacy policy, the ATT state,
|
|
49
|
+
what bundled SDKs transmit and what the app does on the network (audited at
|
|
50
|
+
runtime) do not tell the same story.
|
|
51
|
+
3. Digital goods or subscriptions are sold outside StoreKit IAP, or the app shows
|
|
52
|
+
an outside checkout (link, button, call to action or any other route) for
|
|
53
|
+
them, without a storefront rule or granted entitlement that allows it.
|
|
54
|
+
4. The 6.9-inch iPhone screenshot set is missing, or the 13-inch iPad set is
|
|
55
|
+
missing for an app that runs on iPad.
|
|
56
|
+
5. Features behind a login, or features a reviewer would not find alone, ship
|
|
57
|
+
with no demo credentials, no demo mode and no App Review notes.
|
|
58
|
+
|
|
59
|
+
Everything else (copy polish, an optional screenshot, a HIG nit) is cleanup.
|
|
60
|
+
|
|
61
|
+
## Guidelines that cause most rejections
|
|
62
|
+
|
|
63
|
+
### 2.1 App Completeness
|
|
64
|
+
|
|
65
|
+
Rejected: placeholder text, lorem ipsum or visible test records; broken links and
|
|
66
|
+
empty screens; login-gated features with no demo credentials in the review notes;
|
|
67
|
+
features that need hardware Apple does not have.
|
|
68
|
+
|
|
69
|
+
Prevent it: put working demo credentials in the notes field under App Review
|
|
70
|
+
Information in App Store Connect, walk every screen to confirm real content, and
|
|
71
|
+
run every flow from start to finish including its empty and error states.
|
|
72
|
+
|
|
73
|
+
### 2.3 Accurate Metadata
|
|
74
|
+
|
|
75
|
+
- The name reflects what the app does. Screenshots show the running app, not a
|
|
76
|
+
marketing render or device mockup of screens that do not exist.
|
|
77
|
+
- Leave prices out of the description; they differ per storefront.
|
|
78
|
+
- Do not mention other platforms (for example, "also on Android").
|
|
79
|
+
- Keywords describe the app itself; competitor names and off-topic terms do not
|
|
80
|
+
belong. The primary
|
|
81
|
+
category must match the main function.
|
|
82
|
+
|
|
83
|
+
### 4.2 Minimum Functionality
|
|
84
|
+
|
|
85
|
+
- A shell around `WKWebView` is rejected unless it adds meaningful native
|
|
86
|
+
features.
|
|
87
|
+
- A single-feature app can be rejected when it would fit better inside another
|
|
88
|
+
app.
|
|
89
|
+
- Recreating a built-in iOS feature without a significant improvement is
|
|
90
|
+
rejected.
|
|
91
|
+
|
|
92
|
+
### 2.5.1 Software Requirements
|
|
93
|
+
|
|
94
|
+
- Public APIs only. Private API use is rejected outright.
|
|
95
|
+
- From April 28, 2026, uploads need Xcode 26+ and the matching 26+ platform SDK.
|
|
96
|
+
- The minimum deployment target is a product and compatibility choice; App
|
|
97
|
+
Review does not set it.
|
|
98
|
+
- The app may not download or run code that adds or changes features after
|
|
99
|
+
review. The exception is interpreted code that Apple's guidelines and
|
|
100
|
+
agreements explicitly allow.
|
|
101
|
+
|
|
102
|
+
## Privacy manifest in brief
|
|
103
|
+
|
|
104
|
+
`PrivacyInfo.xcprivacy` is needed whenever code in the app, in an executable, in
|
|
105
|
+
a dylib or in a vendor SDK calls a required-reason API, or when that code
|
|
106
|
+
collects data or tracks. Five API categories carry this requirement (boot time,
|
|
107
|
+
`UserDefaults`, file timestamps, free disk space and the list of active
|
|
108
|
+
keyboards), and every use needs an approved reason code.
|
|
109
|
+
|
|
110
|
+
- Pick the code that describes the actual use. Never pick a broad or convenient
|
|
111
|
+
one, and never make one up. Re-read Apple's current list before each release.
|
|
112
|
+
- Declare the use inside whichever bundle ships the calling code: app target,
|
|
113
|
+
executable, dylib, framework or SDK bundle. An SDK cannot lean on the host
|
|
114
|
+
app's manifest for its own calls.
|
|
115
|
+
- The manifest has to agree with the nutrition label, with SDK behaviour and with
|
|
116
|
+
the features the app presents.
|
|
117
|
+
|
|
118
|
+
Codes, plist layout and SDK rules: [privacy manifest reference](references/privacy-manifest.md).
|
|
119
|
+
|
|
120
|
+
## 5.1.2 Privacy policy and data disclosure
|
|
121
|
+
|
|
122
|
+
- The policy URL appears in App Store Connect, and the app links to the same
|
|
123
|
+
policy from its own UI.
|
|
124
|
+
- The policy describes what is collected, why, and who receives it.
|
|
125
|
+
- Nutrition labels reflect real collection. Labels, manifests, SDK disclosures
|
|
126
|
+
and runtime behaviour must all agree.
|
|
127
|
+
|
|
128
|
+
## 3.1.1 Paying for digital things
|
|
129
|
+
|
|
130
|
+
When the app unlocks digital content, a feature, a subscription or a digital
|
|
131
|
+
service, the sale normally runs through Apple IAP, unless a guideline exception, a regional rule or
|
|
132
|
+
an approved entitlement says otherwise.
|
|
133
|
+
|
|
134
|
+
| Needs IAP | Does not need IAP |
|
|
135
|
+
|---|---|
|
|
136
|
+
| Unlocking premium features | Physical goods |
|
|
137
|
+
| Subscriptions to app functionality | Real-world services such as rides or food delivery |
|
|
138
|
+
| Virtual currency | Person-to-person services, for example a live tutor or consultant |
|
|
139
|
+
| Removing ads | Business apps for organizations, distributed as custom apps via Apple Business Manager |
|
|
140
|
+
| Digital tips to creators | Donations to approved nonprofits (see 3.2.1 and 3.2.2) |
|
|
141
|
+
|
|
142
|
+
Rules around the purchase:
|
|
143
|
+
|
|
144
|
+
- Before a subscription is bought, the paywall states what it costs, how long a
|
|
145
|
+
period lasts and that it renews on its own.
|
|
146
|
+
- For a free trial, show the trial length, the price after it, how often billing
|
|
147
|
+
happens, that it renews automatically, and how to cancel, all before purchase.
|
|
148
|
+
- Strip any route to an outside checkout for digital goods, whether a link, a
|
|
149
|
+
button or a nudge in copy, unless the storefront's current rule or a granted
|
|
150
|
+
entitlement permits it. These rules differ by region and have changed recently; read the
|
|
151
|
+
current 3.1.1(a) and 3.1.3 text for the target storefront.
|
|
152
|
+
- Reader apps may link out to account sign-up with the matching entitlement, but
|
|
153
|
+
may not offer a way around IAP for in-app purchases.
|
|
154
|
+
|
|
155
|
+
StoreKit checks:
|
|
156
|
+
|
|
157
|
+
- Products are typed correctly in App Store Connect (consumable, non-consumable,
|
|
158
|
+
subscription).
|
|
159
|
+
- A Restore Purchases control exists and works.
|
|
160
|
+
- Entitlements are verified with StoreKit 2 `Transaction.currentEntitlements` or
|
|
161
|
+
on the server.
|
|
162
|
+
- A purchase that is interrupted, or deferred while a parent approves it through
|
|
163
|
+
Ask to Buy, leaves the UI in a sane state.
|
|
164
|
+
|
|
165
|
+
## HIG items App Review looks at
|
|
166
|
+
|
|
167
|
+
Navigation, modals, system features and widgets are listed in the
|
|
168
|
+
[HIG section of the checklists](references/review-checklists.md#hig-compliance-checklist);
|
|
169
|
+
launch screen and empty-state rules sit in the Design block of the
|
|
170
|
+
[pre-submission list](references/review-checklists.md#pre-submission-checklist).
|
|
171
|
+
|
|
172
|
+
## App Tracking Transparency
|
|
173
|
+
|
|
174
|
+
- Tracking a user across other companies' apps or sites, SDK tracking included,
|
|
175
|
+
needs `ATTrackingManager.requestTrackingAuthorization` to return authorized
|
|
176
|
+
first.
|
|
177
|
+
- If the user says no, turn that tracking off.
|
|
178
|
+
- Never lock a feature behind tracking consent; that is rejected.
|
|
179
|
+
- Add an `NSUserTrackingUsageDescription` string.
|
|
180
|
+
- An app that does not track must not show the prompt. Apple rejects needless
|
|
181
|
+
prompts.
|
|
164
182
|
|
|
165
183
|
```swift
|
|
166
184
|
import AppTrackingTransparency
|
|
167
185
|
|
|
186
|
+
protocol AdServing {
|
|
187
|
+
func configure(personalized: Bool)
|
|
188
|
+
}
|
|
189
|
+
|
|
168
190
|
@MainActor
|
|
169
|
-
func
|
|
191
|
+
func resolveAdPersonalization(using ads: AdServing) async {
|
|
170
192
|
let status = await ATTrackingManager.requestTrackingAuthorization()
|
|
171
193
|
switch status {
|
|
172
194
|
case .authorized:
|
|
173
|
-
|
|
174
|
-
break
|
|
195
|
+
ads.configure(personalized: true)
|
|
175
196
|
case .denied, .restricted:
|
|
176
|
-
|
|
177
|
-
break
|
|
197
|
+
ads.configure(personalized: false)
|
|
178
198
|
case .notDetermined:
|
|
179
|
-
|
|
180
|
-
break
|
|
199
|
+
ads.configure(personalized: false)
|
|
181
200
|
@unknown default:
|
|
182
|
-
|
|
201
|
+
ads.configure(personalized: false)
|
|
183
202
|
}
|
|
184
203
|
}
|
|
185
204
|
```
|
|
186
205
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
206
|
+
`.notDetermined` can come back when the app was not active; keep the safe
|
|
207
|
+
default and ask again later. Ask only when the app is in the foreground
|
|
208
|
+
and the user can see why, never as the first thing on first launch, and never right
|
|
209
|
+
behind another system permission alert.
|
|
190
210
|
|
|
191
|
-
|
|
211
|
+
## EU Digital Markets Act
|
|
192
212
|
|
|
193
|
-
- Alternative browser engines are
|
|
194
|
-
- Alternative app marketplaces
|
|
195
|
-
|
|
196
|
-
-
|
|
197
|
-
|
|
213
|
+
- Alternative browser engines are allowed on iOS in the EU.
|
|
214
|
+
- Alternative app marketplaces and web distribution exist, so an app can ship
|
|
215
|
+
outside the App Store there.
|
|
216
|
+
- External payment links can be allowed, under conditions and with a different
|
|
217
|
+
commission.
|
|
218
|
+
- An app shipped through a marketplace or the web still goes through Apple's iOS
|
|
219
|
+
notarization and must meet its security requirements.
|
|
198
220
|
|
|
199
|
-
## Entitlements and
|
|
221
|
+
## Entitlements and usage strings
|
|
200
222
|
|
|
201
|
-
Every entitlement
|
|
223
|
+
Every entitlement needs a reason App Review can see in the product.
|
|
202
224
|
|
|
203
|
-
|
|
|
225
|
+
| Capability | What review expects |
|
|
204
226
|
|---|---|
|
|
205
|
-
| Camera |
|
|
206
|
-
| Location (Always) |
|
|
207
|
-
| Push
|
|
208
|
-
| HealthKit |
|
|
209
|
-
| Background Modes |
|
|
210
|
-
| App Groups |
|
|
211
|
-
| Associated Domains |
|
|
212
|
-
|
|
213
|
-
### Usage Description Strings
|
|
214
|
-
|
|
215
|
-
Usage descriptions in Info.plist must be specific about what data is accessed and why:
|
|
216
|
-
|
|
217
|
-
```xml
|
|
218
|
-
// REJECTED -- too vague
|
|
219
|
-
|
|
220
|
-
// APPROVED -- specific purpose
|
|
221
|
-
"Your location is used to show nearby restaurants on the map."
|
|
222
|
-
|
|
223
|
-
// REJECTED -- too vague
|
|
224
|
-
"This app needs access to your camera."
|
|
225
|
-
|
|
226
|
-
// APPROVED -- specific purpose
|
|
227
|
-
"The camera is used to scan barcodes for price comparison."
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
Apple rejects vague usage descriptions. Always state what the data is used for in user-facing terms.
|
|
231
|
-
|
|
232
|
-
## Submission Workflow
|
|
233
|
-
|
|
234
|
-
### Pre-Submission Steps
|
|
235
|
-
|
|
236
|
-
1. **Archive in Xcode.** Product > Archive (requires a Distribution signing identity). Verify the archive builds clean with zero warnings in Release configuration.
|
|
237
|
-
2. **Upload to App Store Connect.** Use the Organizer window (Distribute App > App Store Connect) or `xcodebuild -exportArchive`. Automated uploads via `altool` or Transporter also work.
|
|
238
|
-
3. **TestFlight internal testing.** The build is available to internal testers (your team) within minutes of processing. Walk through every screen and flow on at least two device sizes.
|
|
239
|
-
4. **TestFlight external testing.** External groups require Beta App Review before first external distribution. Use this to validate with real users before full submission.
|
|
240
|
-
5. **Submit for App Review.** In App Store Connect, select the build, fill in all metadata fields, attach screenshots, and click Submit for Review. Review timing varies; allow buffer for rejections, appeals, and metadata fixes.
|
|
241
|
-
|
|
242
|
-
### Expedited Review Requests
|
|
243
|
-
|
|
244
|
-
Apple grants expedited reviews for critical situations only:
|
|
245
|
-
|
|
246
|
-
- Critical bug fix affecting existing users
|
|
247
|
-
- Time-sensitive event (holiday launch, legal compliance deadline)
|
|
248
|
-
- Security vulnerability patch
|
|
249
|
-
|
|
250
|
-
Request via the Contact Us form in App Store Connect (App Review > Expedite Request). Provide a specific, factual justification. Do not request expedited review for initial launches or feature updates.
|
|
251
|
-
|
|
252
|
-
### Phased Release
|
|
253
|
-
|
|
254
|
-
After approval, you can enable phased release to gradually roll out the update:
|
|
255
|
-
|
|
256
|
-
| Day | Percentage of Users |
|
|
257
|
-
|-----|---------------------|
|
|
258
|
-
| 1 | 1% |
|
|
259
|
-
| 2 | 2% |
|
|
260
|
-
| 3 | 5% |
|
|
261
|
-
| 4 | 10% |
|
|
262
|
-
| 5 | 20% |
|
|
263
|
-
| 6 | 50% |
|
|
264
|
-
| 7 | 100% |
|
|
265
|
-
|
|
266
|
-
Users who manually check for updates in the App Store will receive the update immediately regardless of phased release stage. You can pause, resume, or complete the rollout at any time from App Store Connect.
|
|
267
|
-
|
|
268
|
-
## Metadata Best Practices
|
|
227
|
+
| Camera | a clear `NSCameraUsageDescription` |
|
|
228
|
+
| Location (Always) | a visible reason the user benefits from background location |
|
|
229
|
+
| Push notifications | no marketing pushes without the user's opt-in |
|
|
230
|
+
| HealthKit | health data used in a meaningful feature |
|
|
231
|
+
| Background Modes | every declared mode (audio, location, VoIP, fetch) has a feature that uses it |
|
|
232
|
+
| App Groups | the shared data is explained |
|
|
233
|
+
| Associated Domains | universal links resolve and open the app |
|
|
269
234
|
|
|
270
|
-
|
|
235
|
+
A usage string names the data and the user-facing reason:
|
|
271
236
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
-
|
|
330
|
-
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
237
|
+
| Verdict | String |
|
|
238
|
+
|---|---|
|
|
239
|
+
| Approved | "We use where you are to place the closest charging stations on the map." |
|
|
240
|
+
| Approved | "The camera scans a book's barcode so you can add it to your shelf." |
|
|
241
|
+
| Rejected | "This app requires camera access." |
|
|
242
|
+
| Rejected | "We use your photo library to improve your experience." |
|
|
243
|
+
| Fixed | "Pick a photo from your library to use as your profile picture. Only the photo you choose is uploaded." |
|
|
244
|
+
|
|
245
|
+
The second rejected string names a data type but gives no concrete purpose;
|
|
246
|
+
"improve your experience" is the phrase review flags. The fixed version says
|
|
247
|
+
which feature uses the data and what leaves the device.
|
|
248
|
+
|
|
249
|
+
## Submission workflow
|
|
250
|
+
|
|
251
|
+
1. Archive: Product > Archive with a Distribution signing identity, from a clean
|
|
252
|
+
Release build. Aim for zero warnings; it is good hygiene, not a review rule.
|
|
253
|
+
2. Upload: in Organizer choose Distribute App, then App Store Connect; or run
|
|
254
|
+
`xcodebuild -exportArchive`. `altool` and Transporter also work.
|
|
255
|
+
3. Internal TestFlight: internal testers see the build minutes after processing.
|
|
256
|
+
Try every flow on two or more screen sizes.
|
|
257
|
+
4. External TestFlight: the first build sent to an external group goes through
|
|
258
|
+
Beta App Review.
|
|
259
|
+
5. Submit: pick the build, complete metadata, attach screenshots, press Submit
|
|
260
|
+
for Review. Review time varies, so keep slack before a deadline.
|
|
261
|
+
|
|
262
|
+
Expedited review is for a critical fix for existing users, a date-bound event
|
|
263
|
+
(a holiday launch, a legal deadline) or a security patch. Ask through Contact
|
|
264
|
+
Us > App Review > Expedite Request with a specific, factual reason. It is not for
|
|
265
|
+
first launches or new features.
|
|
266
|
+
|
|
267
|
+
Phased release for automatic updates: day 1 1%, day 2 2%, day 3 5%, day 4 10%,
|
|
268
|
+
day 5 20%, day 6 50%, day 7 100%. Users who check for updates by hand get the
|
|
269
|
+
build immediately. The rollout can be paused, resumed or finished early at any
|
|
270
|
+
time.
|
|
271
|
+
|
|
272
|
+
## Metadata rules
|
|
273
|
+
|
|
274
|
+
- Name and subtitle: 30 characters each. The subtitle is a short value statement.
|
|
275
|
+
A bare category word such as "Photo Editor" is likely rejected; so are
|
|
276
|
+
competitor or trademarked terms and prices. The name must be unique.
|
|
277
|
+
- Screenshots: 1 to 10 per required platform and localization. As of May 2026,
|
|
278
|
+
the 6.9-inch iPhone set is the primary one; the 6.5-inch set is required only
|
|
279
|
+
when there is no 6.9-inch set, and smaller iPhones get scaled images. Apps that
|
|
280
|
+
run on iPad need 13-inch iPad screenshots; smaller iPads are scaled.
|
|
281
|
+
- Screenshot content: the real UI; never show a feature the build lacks. Captions and
|
|
282
|
+
frames are fine if they neither hide nor misstate the UI. Localized sets show
|
|
283
|
+
the localized UI.
|
|
284
|
+
- Keywords: 100 characters, comma-separated with no spaces. Words already in the
|
|
285
|
+
name or subtitle are indexed, so do not repeat them. Use singular or plural,
|
|
286
|
+
not both. No competitor, trademark or unrelated terms.
|
|
287
|
+
- App previews: up to 30 seconds, up to 3 per localization, captured from the app
|
|
288
|
+
on a device with the app's own audio (narration or music optional). No
|
|
289
|
+
misleading framing and no footage of hands holding a device. The first frame
|
|
290
|
+
is the poster frame.
|
|
291
|
+
|
|
292
|
+
## Rejections and appeals
|
|
293
|
+
|
|
294
|
+
- A rejection arrives in the Resolution Center with the guideline number.
|
|
295
|
+
- Reply in that thread with facts. If you fixed the issue, say what changed and
|
|
296
|
+
upload a new binary. If you disagree, show how the app complies, quoting the
|
|
297
|
+
guideline.
|
|
298
|
+
- Keep it professional, specific and short. Attach demo credentials, screenshots
|
|
299
|
+
or a screen recording. No emotional language, no threats.
|
|
300
|
+
- For a formal appeal, go to the App Review Board through the Resolution Center or
|
|
301
|
+
Contact Us > App Review > Appeal. A separate team reads the whole history. The
|
|
302
|
+
ruling is final for that build; a changed build can still be submitted.
|
|
303
|
+
|
|
304
|
+
What tends to work: a video walkthrough of the flagged feature, a point-by-point
|
|
305
|
+
answer against the guideline text, fresh demo credentials (the usual 2.1 cause),
|
|
306
|
+
a polite reference to comparable approved behaviour, and offering an alternative
|
|
307
|
+
implementation.
|
|
308
|
+
|
|
309
|
+
## Common mistakes
|
|
310
|
+
|
|
311
|
+
1. No demo credentials; this drives most 2.1 rejections.
|
|
312
|
+
2. The manifest disagrees with the nutrition label, an SDK, or the features.
|
|
313
|
+
3. An ATT prompt in an app that does not track.
|
|
314
|
+
4. Vague usage descriptions.
|
|
315
|
+
5. External purchase routes without an approved path. This depends on region and
|
|
316
|
+
entitlement, so read the current 3.1.1(a).
|
|
317
|
+
6. Treating good code (Swift 6 concurrency, careful StoreKit handling) as proof
|
|
318
|
+
of compliance.
|
|
319
|
+
|
|
320
|
+
## Review checklist
|
|
321
|
+
|
|
322
|
+
- [ ] No placeholder or test content; every feature works; demo credentials given
|
|
323
|
+
- [ ] Name matches function; real screenshots; no prices in the description;
|
|
324
|
+
6.9-inch iPhone set, plus 13-inch iPad set for iPad-capable apps
|
|
325
|
+
- [ ] Privacy manifest present wherever required-reason APIs, tracking, collected
|
|
326
|
+
data or SDK tracking domains apply; labels agree with it
|
|
327
|
+
- [ ] Privacy policy URL in App Store Connect and inside the app
|
|
328
|
+
- [ ] IAP for digital content; terms shown before purchase; restore works; no
|
|
329
|
+
external purchase CTAs unless allowed
|
|
330
|
+
- [ ] Standard navigation; the UI holds up in Dark Mode and at large Dynamic Type
|
|
331
|
+
- [ ] Toolchain is Xcode 26+ with a 26+ SDK (required from April 28, 2026); no
|
|
332
|
+
private APIs; every entitlement justified
|
|
333
|
+
- [ ] ATT prompt only if the app tracks
|
|
334
|
+
|
|
335
|
+
Full lists: [review checklists](references/review-checklists.md).
|
|
355
336
|
|
|
356
337
|
## References
|
|
357
338
|
|
|
358
|
-
-
|
|
359
|
-
-
|
|
360
|
-
-
|
|
361
|
-
-
|
|
362
|
-
-
|
|
363
|
-
-
|
|
339
|
+
- Guidelines text: https://developer.apple.com/app-store/review/guidelines/
|
|
340
|
+
- SDK and Xcode deadlines: https://developer.apple.com/news/upcoming-requirements/
|
|
341
|
+
- Screenshot sizes: https://developer.apple.com/help/app-store-connect/reference/screenshot-specifications/
|
|
342
|
+
- Reason-code documentation: https://developer.apple.com/documentation/bundleresources/describing-use-of-required-reason-api
|
|
343
|
+
- [Privacy manifest reference](references/privacy-manifest.md)
|
|
344
|
+
- [Review checklists](references/review-checklists.md)
|