ITMS-91053 "Missing API declaration": ein Privacy Manifest für deine Web-Wrapper-App unter iOS
ITMS-91053 ist kein Urteil von App Review. App Store Connect teilt dir damit mit, dass nativer Code in deinem Build eine API nutzt, die Apple in einem Privacy Manifest (PrivacyInfo.xcprivacy) erklärt haben will. Die Lösung ist eine kleine Property List mit ehrlichen Reason Codes oder eine neuere SDK-Version; an deiner Web-App ändert sich gar nichts.
Ab $109 einmalig pro Plattform, oder unser Team erledigt alles ab $698.
Genehmigungsgarantie – oder Geld zurück innerhalb von 14 Tagen
Kein Programmieren nötig
Einmalzahlung, kostenlose Updates
24/7 Support von echten Menschen
Made in Germany seit 2014 · ISO 27001
9:41
Deine App
Deine AppJetzt auf dem Smartphone
App Store · Google Play Freigegeben
Was die E-Mail bedeutet
Apple führt eine Liste von "Required Reason APIs": Systemaufrufe, die für normale App-Funktionen nützlich sind, sich aber auch missbrauchen ließen, um ein Gerät per Fingerprinting wiederzuerkennen. Es gibt fünf Kategorien: Datei-Zeitstempel, Systemstartzeit, Speicherplatz, aktive Tastaturen und User Defaults. Jede App und jedes SDK, das sie nutzt, muss in einem Privacy Manifest angeben, warum, und dafür aus einer festen Liste genehmigter Gründe wählen.
Die E-Mail nennt zwei Dinge: die Datei, deren Code die API nutzt (die Haupt-Executable deiner App oder ein Framework im Ordner Frameworks), und die API-Kategorien, geschrieben wie NSPrivacyAccessedAPICategoryUserDefaults. Anfang 2024 waren diese E-Mails noch Erinnerungen; laut Apples Dokumentation zu Required Reason APIs werden Uploads ohne die Deklarationen seit dem 1. Mai 2024 nicht mehr angenommen. Deshalb nennen alte Forenthreads es "nur eine Warnung", und bei dir ist es keine.
Eine Web-Wrapper-App löst den Fehler über die native Hülle aus, nie über dein JavaScript. Jede iOS-App speichert Einstellungen in den User Defaults, legt Dateien im Cache ab und misst Zeit, und die SDKs für Push, Werbung und Analytics tun dasselbe. Typische Momente, in denen er auftaucht: Du hast ein SDK hinzugefügt, du hast Cursor oder Claude Code eigenen Swift-Code schreiben lassen, oder du hast ein älteres Projekt mit einem aktuellen Xcode neu gebaut.
Vier Upload-Fehler, die oft zusammen auftreten
Code
Was App Store Connect sagt (sinngemäß)
Lösung
ITMS-91053 Missing API declaration
Code in der genannten Datei nutzt eine Required Reason API, und kein Privacy Manifest in diesem Bundle deklariert einen Grund dafür.
Ergänze die Kategorie und einen genehmigten Grund im Manifest des Bundles, das den Code enthält. Ist die Datei ein Framework eines Drittanbieters, aktualisiere stattdessen das SDK.
ITMS-91061 Missing privacy manifest
Ein SDK aus Apples Liste häufig genutzter SDKs steckt ohne eigenes Privacy Manifest im Build.
Aktualisiere dieses SDK auf eine Version, die ein Manifest mitliefert. Auf der Liste stehen neben vielen anderen Firebase-Komponenten, OneSignal und die Frameworks des Facebook SDK.
ITMS-91065 Missing signature
Ein gelistetes SDK ist als Binär-Abhängigkeit ohne die Code-Signatur des Herstellers eingebunden.
Nutze das signierte Release des Herstellers. Bearbeite keine Dateien innerhalb eines Frameworks; das zerstört die Signatur.
ITMS-91056 Invalid privacy manifest
Es gibt eine PrivacyInfo.xcprivacy, aber sie enthält einen falschen Schlüssel, einen falschen Wert oder eine falsche Struktur.
Öffne sie im Property-List-Editor von Xcode, vergleiche die Schlüssel mit dem Beispiel unten und entferne Tippfehler oder erfundene Reason Codes.
Die fünf Kategorien und der ehrliche Grund für eine WebView-App
Wähle nur Gründe, die beschreiben, was der Code wirklich tut. Apples Liste der Gründe knüpft an jeden davon Bedingungen, zum Beispiel dass die Daten das Gerät nie verlassen.
Kategorie in der E-Mail
Genehmigte Gründe (Apple)
Übliche Wahl für eine WebViewGold-App
NSPrivacyAccessedAPICategoryUserDefaults
CA92.1 Daten, die nur diese App liest und schreibt; 1C8F.1 innerhalb deiner App Group geteilt; C56D.1 SDK-Wrapper (nur für SDKs); AC6B.1 verwaltete Konfiguration per MDM
CA92.1. Ergänze 1C8F.1 nur, wenn die App über eine App Group Einstellungen mit einer Extension teilt (Push Service Extension, Widget, Share Extension).
NSPrivacyAccessedAPICategoryFileTimestamp
C617.1 Dateien im Container der App oder der App Group; DDA9.1 Zeitstempel, die dem Nutzer angezeigt werden; 3B52.1 Dateien, die der Nutzer ausgewählt hat; 0A2A.1 SDK-Wrapper (nur für SDKs)
C617.1 für Caches und heruntergeladene Dateien im App-Container. 3B52.1 nur, wenn der Code Metadaten von Dateien liest, die der Nutzer ausgewählt hat.
NSPrivacyAccessedAPICategorySystemBootTime
35F9.1 verstrichene Zeit zwischen Ereignissen und Timern in der App; 8FFB.1 absolute Zeitstempel von Ereignissen in der App; 3D61.1 optionaler Fehlerbericht
35F9.1, der Normalfall für Timer, Timeouts und Ladezeitmessungen.
NSPrivacyAccessedAPICategoryDiskSpace
E174.1 Speicherplatz vor dem Schreiben von Dateien prüfen, mit sichtbarem Verhalten; 85F4.1 Speicherplatz dem Nutzer anzeigen; 7D9E.1 optionaler Fehlerbericht; B728.1 Apps für Gesundheitsforschung
E174.1 nur, wenn die App vor dem Speichern von Downloads wirklich den freien Speicher prüft. Kannst du nicht sagen, warum, finde erst heraus, welcher Code die API nutzt, bevor du irgendetwas deklarierst.
NSPrivacyAccessedAPICategoryActiveKeyboards
3EC4.1 Apps mit eigener Tastatur; 54BD.1 an die aktive Tastatur angepasste Oberfläche
Selten in einer WebView-App. Wird dein eigenes Target genannt, such nach eigenem Swift-Code, den ein KI-Agent ergänzt hat.
Mit einer gut optimierten Version Ihrer Web-App können Sie innerhalb von wenigen Minuten eine beeindruckende mobile App erstellen. Zusätzlich dazu ist der Kundenservice sehr nett und hilfsbereit! Ich kann WebViewGold nur empfehlen :-)
Julian Koch · Mitbegründer von DuelDonkey · CodeCanyon
ITMS-91053 in einem WebViewGold-Projekt beheben
Zwanzig Minuten in Xcode, dann eine neue Build-Nummer.
Lies, welche Datei die E-Mail nennt
Ist es die Executable deiner App (der Name deiner .app), gehört die Deklaration in das Manifest des App-Targets. Ist es ein Pfad wie Frameworks/SomeSDK.framework, muss das SDK die API in seinem eigenen Manifest deklarieren, und deine Datei kann das nicht beheben.
Starte mit dem aktuellen WebViewGold-Release
Updates sind kostenlos. Ist dein Projekt alt, lade die aktuelle Version herunter, übertrage deine Werte aus Config.swift, die Texte aus Info.plist, Icons und Splash und prüfe, ob der Fehler bleibt, bevor du irgendetwas von Hand bearbeitest. Neuere Releases können neuere SDK-Versionen enthalten; wenn du unsicher bist, frag den WebViewGold-Support, welche Version du brauchst.
PrivacyInfo.xcprivacy finden oder anlegen
Suche im Project Navigator nach PrivacyInfo.xcprivacy. Hat das App-Target schon eine, erweitere sie; füge demselben Target nie ein zweites Manifest hinzu. Gibt es keine, wähle File, New, File from Template, nimm App Privacy, behalte den Namen PrivacyInfo und setze den Haken beim Haupt-Target der App.
Ein Dictionary pro Kategorie anlegen
Lege unter NSPrivacyAccessedAPITypes einen Eintrag an, mit NSPrivacyAccessedAPIType auf die Kategorie aus der E-Mail gesetzt und NSPrivacyAccessedAPITypeReasons mit den Reason Codes, die für deine App zutreffen. Das Beispiel unten zeigt den Aufbau.
Jede Extension prüfen, die die E-Mail nennt
Apple erwartet ein Manifest in jedem Bundle, dessen Executable die API nutzt. Nennt die E-Mail eine Extension (Notification Service Extension, Widget, Share Extension oder App Clip), bekommt dieses Target ein eigenes Manifest mit den passenden Gründen.
Prüfen, Build-Nummer erhöhen, hochladen
Archiviere, klicke dann im Organizer bei gedrückter Ctrl-Taste auf das Archiv und wähle Generate Privacy Report: Xcode fasst alle Manifeste in einem PDF zusammen, und du siehst deine Kategorien aufgelistet. Erhöhe die Build-Nummer, lade hoch und warte auf die Verarbeitungs-E-Mail, bevor du einreichst.
Eine minimale PrivacyInfo.xcprivacy für das App-Target
Zwei häufige Kategorien als Beispiel. Nutze nur die Kategorien, die deine E-Mail nennt, und die Gründe, die zu deiner App passen; behalte alle anderen Schlüssel, die schon in deiner Datei stehen.
Halte das Manifest stimmig mit deinen übrigen Datenschutzangaben
Deklariere Gründe, die dazu passen, wie sich die App verhält. Ein Reviewer oder eine automatische Prüfung, die sie mit deinen Funktionen vergleicht, erwartet, dass beides übereinstimmt.
NSPrivacyTracking gehört zum selben Thema wie App Tracking Transparency. Wenn du personalisierte AdMob-Werbung zeigst, lies den ATT-Guide für Web-Apps mit Werbung, bevor du den Schlüssel setzt.
Das Manifest ersetzt nicht die App-Privacy-Angaben in App Store Connect. Fülle sie separat aus; der Guide zu Datenschutzerklärung und Labels zeigt, was eine Web-Wrapper-App erhebt.
Cookies, localStorage und IndexedDB deiner Web-App laufen in WebKit, Apples eigenem Framework. Du deklarierst, was die native Binary tut, nicht was dein JavaScript tut.
Lass einen KI-Agenten die Änderung vorbereiten
Füge die vollständige ITMS-E-Mail an der markierten Stelle ein. Prüfe den Diff, bevor du baust; der Agent darf keine Reason Codes erfinden. Mehr zu Agenten-Setups: das WebViewGold-Projekt mit Claude Code einrichten.
Prompt für Claude Code oder Cursor, geöffnet im WebViewGold-Xcode-Projektordner
App Store Connect hat meinen Upload mit der E-Mail unten abgelehnt. Behebe das in diesem WebViewGold-iOS-Projekt.
1. Sag mir für jeden ITMS-91053-Eintrag, welche Datei er nennt und ob diese Datei mein App-Target, eine meiner Extensions oder ein Framework eines Drittanbieters ist.
2. Für meine eigenen Targets: Suche eine vorhandene PrivacyInfo.xcprivacy (lege keine zweite pro Target an). Gibt es keine, lege eine an, die nur zu diesem Target gehört.
3. Ergänze pro Kategorie aus der E-Mail ein NSPrivacyAccessedAPITypes-Dictionary. Wähle Gründe nur aus dieser Liste und begründe jede Wahl in einem Satz: UserDefaults CA92.1, 1C8F.1 (nur wenn eine App Group genutzt wird); FileTimestamp C617.1, DDA9.1, 3B52.1; SystemBootTime 35F9.1, 8FFB.1, 3D61.1; DiskSpace E174.1, 85F4.1, 7D9E.1; ActiveKeyboards 3EC4.1, 54BD.1. Wenn du keinen Code findest, der einen Grund rechtfertigt, hör auf und frag mich.
4. Frameworks von Drittanbietern: Fass sie nicht an. Nenne mir das SDK und seine Version in diesem Projekt und sag mir, mit welchem Update es ein eigenes Privacy Manifest mitbringt.
5. Ändere weder Config.swift noch die Purpose Strings in Info.plist noch irgendeine andere Datei.
E-Mail:
[hier die vollständige ITMS-E-Mail einfügen]
Häufig gestellte Fragen
Ist ITMS-91053 eine Ablehnung durch App Review?
Nein. Es ist eine automatische Prüfung bei der Verarbeitung des Builds, bevor ein Mensch die App ansieht. Der Build wird nicht angenommen, App Review bekommt ihn also nie zu sehen; sobald ein korrigierter Build sauber hochgeladen ist, reichst du wie gewohnt ein.
Kann ich sicherheitshalber alle Reason Codes eintragen?
Nein. Jeder Grund ist eine Aussage darüber, wie dein Code die API und die Daten nutzt, und manche Gründe sind SDKs oder bestimmten App-Typen wie der Gesundheitsforschung vorbehalten. Deklariere, was zutrifft, und nichts darüber hinaus.
Muss ich localStorage oder Cookies meiner Web-App deklarieren?
Nein. Deine Web-App läuft in WebKit, Apples System-Framework. Das Manifest betrifft den nativen Code in deiner Binary und die SDKs, die du mit ihr auslieferst.
Ich baue mit dem Cloud Builder. Was mache ich mit dieser E-Mail?
In diesem Setup bearbeitest du kein Xcode-Projekt. Schick den vollständigen Text der E-Mail an den WebViewGold-Support, damit die Build-Konfiguration geprüft werden kann, und ändere nichts an deiner Web-App; das Manifest ist Teil des nativen Builds.
Brauche ich nach dem Ergänzen des Manifests eine neue Build-Nummer?
Ja. Das Manifest liegt im App-Bundle, es erreicht Apple also nur mit einem neuen Upload. Erhöhe die Build-Nummer, archiviere und lade erneut hoch.
Drei Wege, deine App in die Stores zu bringen
Gleiches Ergebnis, unterschiedlich viel Arbeit auf deiner Seite. Alle drei kommen mit Genehmigungsgarantie und 24/7 Support von echten Menschen.
Selbst machen
$109 pro Plattform, einmalig
Die WebViewGold-Lizenz: ein fertiges Xcode- oder Android-Studio-Projekt. URL einfügen, Name und Icon setzen, Features einschalten, bauen und einreichen. Kostenlose Updates für immer.
Kein Mac, kein Xcode, kein Android Studio: Du konfigurierst im Browser, wir bauen beide Apps in der Cloud und übergeben sie an App Store Connect und die Play Console.
Schick uns deine URL und dein Icon. Unser Team konfiguriert, baut und liefert deine App innerhalb von 72 Stunden, White-Label, inklusive Quellprojekten. Beide Plattformen für $1,158.
Erstattungen erfolgen zu den in unseren FAQ genannten Bedingungen: eine nicht inhaltsbedingte Ablehnung durch Apple und/oder Google, geltend gemacht innerhalb von 14 Tagen nach dem Kauf.