Impossibile leggere i valori in CFPrefsPlistSource iOS 10


87

Oggi ho aggiornato il mio Xcode 8 alla beta 2 e sto cercando di condividere i dati tra l'app e l'estensione di oggi. Sto affrontando questo avviso di registro:

2016-07-08 18: 00: 24.732472 ProjetctX [941: 42801] [Impostazioni predefinite utente] Impossibile leggere i valori in CFPrefsPlistSource <0x1700f1280> (Dominio: group.xpto, Utente: kCFPreferencesAnyUser, ByHost: Sì, Contenitore: (null)) : L'utilizzo di kCFPreferencesAnyUser con un contenitore è consentito solo per i contenitori di sistema, scollegandosi da cfprefsd

Qualcuno può aiutarmi?



@PravinKamble Ho ricevuto questo errore, ma posso accedere a tutto (appgroup predefinito dell'utente).
Klevison

1
cambiando l'obiettivo di distribuzione su 9.3 funzionerà perfettamente sul dispositivo ma non funzionerà con iOS 10
cercherò una

@PravinKamble hai creato il tuo progetto usando Xcode 8 beta 2?
Klevison

Ottengo la stessa cosa usando i valori predefiniti condivisi con XCode 8 beta 4.
Gruntcakes

Risposte:


79

Questo è in realtà un avviso falso introdotto in iOS 10 e macOS 10.12:

Suggerimento NSUserDefaults: negli attuali sistemi operativi è presente un errore registrato "... con un contenitore è consentito solo per i contenitori di sistema ...".

Questo è falso.

Il tentativo di rilevare una particolare modalità di guasto, ha rilevato contemporaneamente un normale caso di funzionamento.

Anche il mio successore su UserDefaults non ha trovato un modo per renderlo meno allarmante senza rendere impossibile il debug del caso sintomatico:

https://twitter.com/Catfish_Man/status/784460565972332544 [thread]

Il consiglio di anteporre il tuo ID team silenzia l'avviso, ma creerà anche un nuovo utente predefinito vuoto. Ciò comporterà illeggibilità dei dati precedentemente memorizzati.

Per il momento, la soluzione è semplicemente ignorarlo.

Inoltre, CFM membro dello staff Apple sui forum :

Il messaggio registrato è falso a meno che tu non stia facendo cose molto specifiche che non penso siano possibili senza usare funzioni private (è stato aggiunto per rilevare un uso improprio di quelle funzioni, ma sfortunatamente ha anche catturato un normale caso di utilizzo).


1
Ho provato a creare un gruppo di app che inizia con l'ID del team ma lo costringe a iniziare con "gruppo". Quindi, i due non dovrebbero corrispondere ???
SAHM

3
Vedo questi messaggi di registro su High Sierra. L'aggiunta dell'ID team non silenzia l'avviso per me. Apple ha intenzione di risolvere questo problema?
mschmidt

1
Scusa, puoi approfondire per favore? "anteponi il tuo ID squadra" a cosa?
Motti Shneor

19

Ecco come utilizzare UserDefaults con i gruppi di app per trasferire i dati tra la tua app principale e la tua estensione:

  1. Nella tua app principale, seleziona il tuo progetto nel Navigatore progetti.

  2. Seleziona la destinazione dell'app principale e scegli la scheda Funzionalità.

  3. Attiva l'opzione Gruppi di app. Questo comunicherà con il Portale per sviluppatori per generare una serie di diritti.

  4. Crea un nuovo contenitore. Secondo Apple, il tuo ID contenitore deve iniziare con "gruppo", quindi un nome come "gruppo.io.intrepid.myapp" è perfetto.

  5. Seleziona la destinazione dell'estensione e ripeti il ​​processo di attivazione dei gruppi di app. Non creare un nuovo gruppo di app, seleziona semplicemente il gruppo che è stato appena creato nella destinazione dell'app principale.

  6. Quando leggi o scrivi UserDefaults nella tua app o nella tua estensione, non accedere UserDefaults.standard. Invece usa UserDefaults(suiteName: "group.io.intrepid.myapp"). Nota: il nome della suite è il nome del contenitore del gruppo di app creato nel passaggio 4.

Assicurati di abilitare il gruppo e utilizzare lo stesso ID di gruppo sia per l'estensione che per la sezione delle funzionalità dell'app!

Il merito va a http://blog.intrepid.io/ios-app-extensions


"seleziona semplicemente il gruppo che è stato appena creato nel target dell'app principale" => Cosa fare quando non appare ??
user3722523

abilita e seleziona lo stesso gruppo anche all'interno!
Arfan Mirza

Ripeto, come selezionare lo stesso gruppo se la selezione è vuota nell'interno ???
user3722523

Quando si attivano / attivano i gruppi nella sezione Compatibilità, viene visualizzato automaticamente l'elenco dei gruppi, se non viene visualizzato, controllare il Team (Firma dell'account sviluppatore), anche il Team ha bisogno dello stesso! Imposta la squadra e attiva di nuovo i gruppi!
Arfan Mirza

ancora non funziona ... tuttavia con il progetto iOS funziona. I'v creato un thread: stackoverflow.com/questions/44914304/...
user3722523


4

Cambia il nome del tuo gruppo nei diritti Xcode da:

group.com.mycompany.myapp

Per

group.MYTEAMID.com.mycompany.myapp

ps: puoi trovare il tuo MYTEAMID nell'abbonamento developer.apple.com



3

La soluzione per me era di non utilizzare lo stesso identificatore per l'applicazione Bundle Identifier e la parte dopo "group.".

Supponiamo che l'ID del bundle dell'app sia "com.app.id", quindi l'ID del gruppo come "group.com.app.id" sta causando problemi. Dopo averlo cambiato in "group.com.app.id.something" si ferma.


0

Crea con Xcode 8.1 Beta e vedrai lo stesso avviso, ma otterrai anche il valore.


0

Sto affrontando lo stesso problema quando provo a utilizzare initWithSuiteName. Sembra che questo sia un bug di Apple. L'unica soluzione / soluzione alternativa che ho trovato è ripristinare tutte le impostazioni del dispositivo. Vai a Impostazioni -> Generali -> Ripristina -> Ripristina tutte le impostazioni.

Questo non cancella alcun contenuto sull'iPhone, cancella solo tutte le impostazioni. Dopo aver ripristinato l'impostazione, tutto ha funzionato bene. Fammi sapere se aiuta anche te.


0

Per impostazione predefinita, se stai utilizzando Settings.Bundle / Root.plist per visualizzare e modificare le preferenze dell'app tramite l'app Impostazioni di Apple, utilizza il dizionario UserDefaults.standard .

Quindi, se stai utilizzando App-Groups e desideri condividere queste impostazioni / impostazioni predefinite all'interno delle tue app e estensioni, devi modificare il contenitore delle tue impostazioni.

Passaggio 1: apri Settings.Bundle -> Root.plist

Apri Settings.Bundle -> Root.plist

Passaggio 2: aggiungi la chiave ApplicationGroupContainerIdentifier e come valore imposta il tuo App-Group-Id, definito in Signing & Capabilities: Assomiglia a group.xx.yy

Aggiungi coppia chiave-valore per ApplicationGroupContainerIdentifier

Dopo aver implementato questo passaggio, il contenitore predefinito per le impostazioni dell'app passerà ora da UserDefaults.standard (il percorso delle app) al percorso condiviso.


-3

se soffri di questo problema quando provi a salvare i dati nell'estensione APP utilizzando userDefault, forse hai scritto questo codice:

[[NSUserDefaults standardUserDefaults] initWithSuiteName:@"group.xxx.com"];

Questo codice ripristina l'impostazione predefinita userDefault.

In realtà, il codice corretto è:

[[NSUserDefaults alloc] initWithSuiteName:@"group.xxx.com"];

http://www.jianshu.com/p/e782104c3bc3


-10

Cambio da

[[NSUserDefaults alloc] initWithSuiteName:@"group.com.xxx.xxx"];

per

[[NSUserDefaults alloc] initWithSuiteName:@"nnnnnnnnnn.group.com.xxx.xxx"]; 

Dov'è nnnnnnnnnil numero della tua squadra, quello che usi per firmare il tuo codice.

Testato con Xcode 8 GM e iOS 10 GM e ha funzionato!


2
Dovremmo usare "nnnnnnnnnn.group.com.xxx.xxx" anche per scrivere nell'app principale o semplicemente usare l'ID team nell'estensione? Per me, l'aggiunta dell'ID del team sembra estrarre un UserDeaults vuoto senza nessuno dei dati che ho salvato in "group.com.xxx.xxx" nella mia app. Spero davvero che ci sia una soluzione a questo, poiché sta bloccando il mio aggiornamento di iOS 10.
timgcarlson

2
I dati continuano a non essere sincronizzati. L'errore scompare.
Jeet

3
attualmente sembra che questo errore non influisca sull'app. Ma se si aggiunge l'ID squadra, l'errore manca ma i dati non possono essere recuperati.
scorpiozj

4
Questa non è una buona risposta. Dovresti mettere qualsiasi altra cosa e saltare l'errore come aiuto mentre cambi la chiave.
kokluch

Non funziona nel mio caso, l'errore scompare ma i dati non vengono recuperati
TibiaZ
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.