2013-02-06 8 views
8

Sto cercando di crittografare i dati utente in un'app e il meccanismo NSFileProtection sembra perfetto per questo.Protezione dati/NSFileProtectionComplete - supportato con successo tramite entitlements.plist?

Questo SO Question/Answer thread mi ha indirizzato al WWDC 2011 Video Securing iOS Apps che ha fornito il suggerimento "troppo bello per essere vero" di impostazione di Data Protection sull'app tramite diritti (vedere 33 minuti in).

Quindi, ho provato questo per la mia app iOS 5.x +, e mi sono imbattuto nel problema in cui si lamenta di Invalid Entitlements.

Ho configurato Data Protection per l'app specifica tramite il portale di provisioning iOS e aggiornato il provisioning dell'app, quindi in teoria dovrei essere impostato, ma ottengo comunque l'errore.

Se rimuovo l'impostazione specifica FileProtectionComplete dall'Atentlement, l'app viene eseguita senza l'errore di entitlement Invalid.

Nell'indagare su questo, ho anche visto che alcune persone stanno ottenendo le loro app rejected (nel punto in cui caricano il file binario) in quanto non supportate (o deprecate?). Si prega di notare che sto chiedendo specificatamente la protezione dei dati, e non il libretto degli indirizzi.

In questa fase, sto pensando, forse è davvero "troppo bello per essere vero". Quindi, sto per rinunciare a questo flag per le invenzioni magiche, e invece uso il metodo programmatico, per aggiungere NSFileProtectionComplete come opzione di scrittura.

Tuttavia, prima di farlo, qualcuno può confermare che è stato possibile aggiungere Protezione dati utilizzando semplicemente il contrassegno Entitlement? Grazie.

risposta

0

Ho provato la protezione dei dati utilizzando le autorizzazioni e funziona correttamente. Il trucco è mantenere la voce del file delle autorizzazioni nel progetto xcode come quella del profilo di provisioning.

In particolare, le seguenti 2 impostazioni nel file delle autorizzazioni e nel profilo di provisioning devono essere le stesse: - "com.apple.developer.default-data-protection" - Ho impostato come NSFileProtectionComplete. "application-identifier" - Non sto usando i caratteri jolly nell'identificatore, anche se penso che dovrebbe funzionare altrettanto bene.

+0

Puoi approfondire cosa si intende con questo? Ho impostato un file delle autorizzazioni, mi sono assicurato che il mio AppID fosse configurato per la protezione dei dati e ho emesso un profilo di provisioning, ma non ha avuto alcun successo. Ho trovato questo post su [Forum Apple Dev che ha confermato che non funzionava] (https://devforums.apple.com/message/636524#636524) (al 21 marzo 2012) – edelaney05

+0

edelaney05- Ho aggiornato la mia risposta . Per te funziona ? –

0

Non funzionerebbe per me usare il carattere jolly per l'ID profilo (ad esempio my.company.app. *) Così ho dovuto crearne uno nuovo completo. Funziona per me con il mio Entitlements.plist simile a questo:

<?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> 

e con la mia sezione del profilo per esso simile a questo: ....

<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 non è più supportato tramite diritti. Invece, è specificato nel profilo di provisioning.

Ho avuto esattamente lo stesso problema che hai fatto.Quando ho provato a costruire e gestire su un dispositivo, ho ricevuto il seguente avviso:

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).

Nella console, si manifesta come questo errore:

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

Alla fine, ho trovato le impostazioni corrette. È necessario accedere al portale per sviluppatori e abilitare la protezione dei dati nell'ID app associato al profilo di provisioning che si sta utilizzando. Vedere l'immagine qui sotto:

enter image description here

Problemi correlati