Ihr iOS-Build wurde abgelehnt. Beheben Sie es und laden Sie ohne Mac neu hoch
Apple hat eine E-Mail geschickt, oder Ihr Upload ist fehlgeschlagen, und Sie haben keinen Mac. Prüfen Sie zuerst, ob die Lösung überhaupt einen neuen Build braucht. Manche brauchen keinen. Für die anderen nennt diese Seite die Lösung und die Befehle, um an einem Tag erneut zu archivieren, zu exportieren und hochzuladen.
Braucht das einen neuen Build?
Nicht jedes Problem bedeutet einen neuen Build. Diese Korrekturen passieren in App Store Connect, in einem beliebigen Browser:
- Screenshots, die Beschreibung und andere Texte der Produktseite.
- Antworten zur Exportkonformität für einen Build mit dem Status Missing Compliance.
- Ihre Angaben zum App-Datenschutz in App Store Connect.
Andere Korrekturen brauchen einen neuen Build, also Xcode auf einem Mac. Dazu gehören ein altes Xcode oder SDK, ein Privacy Manifest, Texte in der Info.plist und Änderungen an Code oder SDKs. Jeder neue Upload braucht außerdem eine höhere Build-Nummer.
1. Mit einem zu alten Xcode gebaut
Seit dem 28. April 2026 nimmt Apple nur Uploads an, die mit Xcode 26 oder neuer und einem SDK für iOS 26 gebaut wurden. Ein Build aus Xcode 16 verstößt gegen diese Regel. Um zu sehen, womit ein Archiv gebaut wurde, lesen Sie zwei Schlüssel aus seiner App:
/usr/libexec/PlistBuddy -c 'Print :DTSDKName' -c 'Print :DTXcode' \ MyApp.xcarchive/Products/Applications/MyApp.app/Info.plist
Auf einem Runner macos-26 von GitHub gab das iphoneos26.5 und 2660 aus, also Xcode 26.6. Macs von MacRun haben Xcode 27.1 als Standard und zusätzlich Xcode 26.6. Beide erfüllen die Regel.
Ein Haken: Laut Apple brauchen Apps mit dem SDK für iOS 27.1 ab April 2027 Screenshots für das iPhone Duo. Unser Leitfaden zum iPhone Duo zeigt, wie Sie sie aufnehmen.
2. Privacy Manifest und Required Reason APIs
Manche APIs brauchen einen angegebenen Grund, etwa UserDefaults und Zeitstempel von Dateien. Die Gründe stehen in einer Datei namens PrivacyInfo.xcprivacy. Seit dem 1. Mai 2024 nimmt App Store Connect keine Apps an, die das auslassen. Apple lehnt außerdem Manifeste mit unerwarteten Schlüsseln ab. Die E-Mail nennt den Pfad jeder fehlerhaften Datei.
Hier ist ein minimales Manifest für eine App, die ihre eigenen UserDefaults liest. CA92.1 ist der Grundcode von Apple für diese Nutzung:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>Fügen Sie es Ihrem App-Target hinzu. Dann prüfen Sie, ob es gültig ist. Wir haben das an einer guten und an einer kaputten Datei ausgeführt:
$ plutil -lint MyApp/PrivacyInfo.xcprivacy MyApp/PrivacyInfo.xcprivacy: OK $ plutil -lint bad.xcprivacy bad.xcprivacy: (Value missing for key inside <dict> at line 1)
Nach dem Archivieren sollte die Datei im Hauptordner der .app liegen. Bei uns war das so. Wenn die E-Mail ein SDK eines Drittanbieters nennt, aktualisieren Sie dieses SDK. Sein eigenes Manifest muss seine eigene API-Nutzung abdecken.
3. Fehlende Texte zur Nutzungsbeschreibung
Wenn Ihre App die Kamera, Fotos oder den Standort nutzt, braucht die Info.plist dafür einen Zwecktext. Laut Apple schlägt der Zugriff ohne ihn fehl, und die App kann abstürzen. Die Richtlinie 5.1.1(ii) der App Review verlangt außerdem, dass der Text Ihre Nutzung der Daten klar beschreibt.
<key>NSCameraUsageDescription</key> <string>Scan receipts to add them to your expenses.</string>
Prüfen Sie die gebaute App, nicht nur die Quelldatei:
plutil -extract NSCameraUsageDescription raw \ MyApp.xcarchive/Products/Applications/MyApp.app/Info.plist
4. Exportkonformität
Ein Build ohne Antwort zur Verschlüsselung zeigt in TestFlight Missing Compliance. Dafür brauchen Sie keinen neuen Build. Öffnen Sie den Build in App Store Connect, klicken Sie auf Manage und beantworten Sie die Fragen. Um sie beim nächsten Mal zu überspringen, fügen Sie diesen Schlüssel in die Info.plist ein. Nutzen Sie false nur, wenn Ihre Verschlüsselung ausgenommen ist, etwa einfaches HTTPS:
<key>ITSAppUsesNonExemptEncryption</key> <false/>
5. Falsche oder fehlende Screenshots
Screenshots brauchen keinen neuen Build, aber die richtige Größe. Apple verlangt mindestens einen iPhone-Screenshot in der mittleren Größe mit Dynamic Island. Das sind 1179 x 2556 oder 1206 x 2622 Pixel im Hochformat. Ohne iPhone in der Nähe erstellt der Simulator sie:
xcrun simctl boot "iPhone 17 Pro" xcrun simctl install "iPhone 17 Pro" MyApp.app xcrun simctl launch "iPhone 17 Pro" com.example.myapp xcrun simctl io "iPhone 17 Pro" screenshot shot.png sips -g pixelWidth -g pixelHeight shot.png
Unser Screenshot vom iPhone 17 Pro hatte 1206 x 2622, die verlangte Größe. Das iPhone 17 Pro Max lieferte 1320 x 2868, was zum großen Satz passt. Führen Sie xcrun simctl list devices available aus, um zu sehen, was installiert ist.
Neu bauen und hochladen
Erhöhen Sie die Build-Nummer, dann archivieren Sie. Auf unserem Test-Runner dauerte dieser Schritt für eine kleine SwiftUI-App 12 Sekunden:
xcodebuild archive -project MyApp.xcodeproj -scheme MyApp \ -destination 'generic/platform=iOS' \ -archivePath build/MyApp.xcarchive \ MARKETING_VERSION=1.0.1 CURRENT_PROJECT_VERSION=3
Als Nächstes exportieren Sie eine signierte .ipa. Schreiben Sie das in die ExportOptions.plist, mit Ihrer eigenen Team ID. Die Schlüssel stammen aus xcodebuild -help:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>method</key> <string>app-store-connect</string> <key>teamID</key> <string>ABCDE12345</string> <key>signingStyle</key> <string>automatic</string> </dict> </plist>
xcodebuild -exportArchive -archivePath build/MyApp.xcarchive \ -exportOptionsPlist ExportOptions.plist -exportPath build/export \ -allowProvisioningUpdates
Melden Sie sich vorher in Xcode mit Ihrem Apple Account an. Unser unsigniertes Testarchiv hatte kein Team, und der Export brach mit "error: exportArchive No Team Found in Archive" ab.
Die Upload-Seite von Apple nennt Xcode, Transporter und altool. Mit altool speichern Sie einmal ein app-spezifisches Passwort im Schlüsselbund. Dann prüfen und hochladen:
xcrun altool --store-password-in-keychain-item altool -u you@example.com -p xxxx-xxxx-xxxx-xxxx xcrun altool --validate-app -f build/export/MyApp.ipa -t ios -u you@example.com -p @keychain:altool xcrun altool --upload-app -f build/export/MyApp.ipa -t ios -u you@example.com -p @keychain:altool
Oder Sie setzen destination in der ExportOptions.plist auf upload. Dann schickt -exportArchive den Build selbst an App Store Connect. Unser Leitfaden zum Veröffentlichen erklärt API-Schlüssel und TestFlight.
An einem Tag beheben
Ein Tagespass von MacRun kostet $15, einmal bezahlt und ohne Verlängerung. Er ist ein dedizierter M6 Mac mini, in weniger als 5 Minuten bereit. Xcode 27.1 und Xcode 26.6 sind installiert, mit dem Simulator für iOS 27.1. Sie erreichen ihn über Tailscale per SSH oder mit einem VNC-Viewer. Wenn die Prüfung ihn erneut zurückschickt, kostet eine Woche $59. Der Mac wird am Ende gelöscht, also pushen Sie vorher Ihren Code.
Wer dafür keinen Mac mieten sollte
- Wenn die Korrektur Screenshots, Texte oder Antworten zum Export betrifft, nutzen Sie App Store Connect im Browser.
- Expo-Apps lassen sich mit EAS Build auf den macOS-Maschinen von Expo neu bauen. Siehe iOS-Apps unter Windows bauen.
- Wenn Sie schon auf Codemagic oder GitHub Actions bauen, pushen Sie die Korrektur und lassen Sie CI neu bauen.
Häufige Fragen
Kann ich eine Ablehnung im App Store ohne Mac beheben?
+
Manchmal. Screenshots, Texte und Antworten zur Exportkonformität korrigieren Sie in App Store Connect in einem beliebigen Browser. Ein neues Xcode, ein Privacy Manifest oder eine Änderung an der Info.plist braucht einen neuen Build, und der braucht macOS.
Welche Xcode-Version verlangt App Store Connect 2026?
+
Seit dem 28. April 2026 verlangt Apple Uploads, die mit Xcode 26 oder neuer und einem SDK für iOS 26 gebaut wurden. Macs von MacRun haben Xcode 27.1 als Standard, und Xcode 26.6 ist installiert.
Wie füge ich meiner iOS-App ein Privacy Manifest hinzu?
+
Fügen Sie Ihrem App-Target eine Datei namens PrivacyInfo.xcprivacy hinzu. Nennen Sie jede Kategorie der Required Reason APIs mit dem Grundcode von Apple, etwa CA92.1 für die eigenen UserDefaults einer App. Prüfen Sie sie mit plutil -lint, dann bauen Sie neu.
Mein TestFlight-Build zeigt Missing Compliance. Muss ich neu bauen?
+
Nein. Öffnen Sie den Build in App Store Connect, klicken Sie auf Manage und beantworten Sie die Fragen zur Verschlüsselung. Fügen Sie im nächsten Build ITSAppUsesNonExemptEncryption in die Info.plist ein, um sie zu überspringen.
Welche Screenshot-Größe verlangt der App Store für das iPhone?
+
Apple verlangt mindestens einen Screenshot für ein iPhone mit Dynamic Island und mittlerem Display: 1179 x 2556 oder 1206 x 2622 Pixel im Hochformat. Unser Screenshot aus dem Simulator des iPhone 17 Pro hatte 1206 x 2622.
Wie lade ich den neuen Build ohne das Xcode-Fenster hoch?
+
Exportieren Sie eine .ipa mit xcodebuild -exportArchive und führen Sie dann xcrun altool --upload-app aus. Transporter geht auch. Apple nennt beides auf seiner Upload-Seite.