2013-02-06 4 views
8

Ich bin auf der Suche nach Benutzerdaten in einer App zu verschlüsseln, und der NSFileProtection-Mechanismus sieht dafür perfekt aus.Data Protection/NSFileProtectionComplete - Erfolgreich unterstützt durch die Datei "anpassungen.plist"?

Diese SO Question/Answer thread wies mich auf der WWDC 2011 Video Securing iOS Apps, die den "zu gut, um wahr zu sein" Tipp der Einstellung von Datenschutz über die App über Berechtigungen gegeben (siehe ab 33 Minuten).

Also, ich habe dies für meine iOS 5.x + App versucht, und stieß auf das Problem, wo es über Invalid Entitlements klagt.

Ich habe Data Protection für die spezifische App über das iOS Provisioning Portal konfiguriert, und meine App Provisioning aktualisiert, so in der Theorie sollte ich alle eingestellt werden, aber ich bekomme immer noch den Fehler.

Wenn ich die spezifische FileProtectionComplete-Einstellung aus dem Berechtigungsnachweis lösche, wird die App ohne den Fehler "Ungültiger Berechtigungsnachweis" ausgeführt.

Bei der Untersuchung dieser, sah ich auch die einige Leute bekommen ihre Anwendungen rejected (an dem Punkt, den sie die Binärdatei hochladen), wie dies nicht unterstützt wird (oder veraltet?). Bitte beachten Sie, dass ich speziell nach Datenschutz und nicht nach Passbook frage.

In diesem Stadium denke ich, vielleicht ist es wirklich, "zu gut, um wahr zu sein". Also, ich bin im Begriff, auf diese magische Berechtigungen Flag aufzugeben, und stattdessen die programmatische Methode, NSFileProtectionComplete als eine Schreiboption hinzufügen.

Aber bevor ich das tue, kann jemand bestätigen, dass es ihnen gelungen ist, Data Protection einfach unter Verwendung des Flags "Entitlements" hinzuzufügen? Vielen Dank.

Antwort

0

Ich habe versucht, Datenschutz mit Berechtigungen und es funktioniert gut. Der Trick besteht darin, den Eintrag Ihrer Berechtigungsdatei im xcode-Projekt als den des Provisioning-Profils beizubehalten.

Konkret sollten die folgenden 2 Einstellungen in den Berechtigungen Datei und Provisioning Profil gleich sein: - "com.apple.developer.default-data-protection" - Ich habe dies als NSFileProtectionComplete gesetzt. "application-identifier" - Ich verwende keine Platzhalter in Bezeichner, obwohl ich denke, dass es auch funktionieren sollte.

+0

Können Sie erarbeiten, was Sie damit meinen? Ich habe eine Berechtigungsdatei eingerichtet, sichergestellt, dass meine AppID für den Datenschutz konfiguriert wurde, und ein Bereitstellungsprofil erstellt, aber keinen Erfolg erzielt. Ich fand diesen Beitrag bei [Apple Dev Foren, die bestätigt haben, dass dies nicht funktionierte] (https://devforums.apple.com/message/636524#636524) (Stand 21. März 2012) – edelaney05

+0

edelaney05- Ich habe meine Antwort aktualisiert . Geht das für dich ? –

0

Es würde nicht funktionieren für mich mit dem Wildcard für die Profil-ID (d. H. My.company.app. *) Also musste eine neue voll qualifizierte erstellen. Es funktioniert für mich mit meinem Entitlements.plist wie folgt aussehen:

<?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>com.apple.developer.default-data-protection</key> 
    <string>NSFileProtectionComplete</string> 
    <key>get-task-allow</key> 
    <false/> 
</dict> 
</plist> 

und mit meinem Profilabschnitt für sie wie folgt aussehen: ....

<dict> 
    <key>application-identifier</key> 
    <string>xxx.my.company.app</string> 
    <key>com.apple.developer.default-data-protection</key> 
    <string>NSFileProtectionComplete</string> 
    <key>get-task-allow</key> 
    <false/> 
    <key>keychain-access-groups</key> 
    <array> 
     <string>xxxxxxxx</string> 
    </array> 
</dict>    

....

10

NSFileProtectionComplete wird nicht mehr über Berechtigungen unterstützt. Stattdessen wird es im Bereitstellungsprofil angegeben.

Ich hatte genau das gleiche Problem, das Sie getan haben.Als ich versuchte, auf einem Gerät zu erstellen und auszuführen, habe ich die folgende Warnung bekam:

The executable was signed with invalid entitlements.

The entitlements specified in your application’s Code Signing Entitlements file do not match those specified in your provisioning profile.

(0xE8008016).

in der Konsole manifestiert er sich als diesen Fehler:

May 6 16:18:13 XXXXX installd[54] : entitlement 'DataProtectionClass' has value not permitted by a provisioning profile

Irgendwann habe ich die richtigen Einstellungen gefunden. Sie müssen sich beim Entwicklerportal anmelden und den Datenschutz für die App-ID aktivieren, die dem von Ihnen verwendeten Bereitstellungsprofil zugeordnet ist. Siehe das Bild unten:

enter image description here

Verwandte Themen