Zaktualizowałem dziś mój Xcode 8 do wersji beta 2 i próbuję udostępniać dane między aplikacją a rozszerzeniem Today. Mam do czynienia z tym ostrzeżeniem dziennika:
2016-07-08 18: 00: 24.732472 ProjetctX [941: 42801] [Ustawienia domyślne użytkownika] Nie można odczytać wartości w CFPrefsPlistSource <0x1700f1280> (domena: group.xpto, użytkownik: kCFPreferencesAnyUser, ByHost: tak, kontener: (null)) : Używanie kCFPreferencesAnyUser z kontenerem jest dozwolone tylko dla kontenerów systemowych, odłączanie od cfprefsd
Czy ktoś może mi pomóc?
ios
xcode
ios10
ios-app-group
Klevison
źródło
źródło
Odpowiedzi:
W rzeczywistości jest to fałszywe ostrzeżenie, które zostało wprowadzone w iOS 10 i macOS 10.12:
Porada dotycząca dołączenia identyfikatora zespołu na początku wyciszy ostrzeżenie, ale utworzy również nowe, puste wartości domyślne użytkownika. Spowoduje to, że wszystkie wcześniej zapisane dane staną się nieczytelne.
Na razie rozwiązaniem jest po prostu zignorowanie tego.
Ponadto członek zespołu Apple CFM na forach :
źródło
Oto jak używać funkcji UserDefaults z grupami aplikacji do przekazywania danych między główną aplikacją a rozszerzeniem:
W aplikacji głównej wybierz projekt w Nawigatorze projektów.
Wybierz główny cel aplikacji i wybierz kartę Możliwości.
Przełącz przełącznik Grupy aplikacji na WŁ. Spowoduje to komunikację z portalem dla programistów w celu wygenerowania zestawu uprawnień.
Utwórz nowy kontener. Według Apple identyfikator kontenera musi zaczynać się od „group”, więc nazwa taka jak „group.io.intrepid.myapp” jest idealna.
Wybierz docelowe rozszerzenie i powtórz proces włączania grup aplikacji. Nie twórz nowej grupy aplikacji, po prostu wybierz grupę, która została właśnie utworzona w głównym celu aplikacji.
Podczas czytania lub pisania UserDefaults w aplikacji lub rozszerzeniu nie uzyskuj dostępu
UserDefaults.standard
. Zamiast tego użyjUserDefaults(suiteName: "group.io.intrepid.myapp")
. Uwaga: nazwa pakietu to nazwa kontenera grupy aplikacji utworzonego w kroku 4.Upewnij się, że włącz grupę i użyj tego samego identyfikatora grupy dla sekcji rozszerzeń i funkcji aplikacji!
Kredyt trafia do http://blog.intrepid.io/ios-app-extensions
źródło
Miałem również ten sam problem z moją aplikacją na macOS.
Rozwiązano to przez: Uruchom ponownie urządzenie!
https://stackoverflow.com/a/39876271
źródło
SuiteName (postfix) nie może być głównym identyfikatorem pakietu.
źródło
Zmień nazwę grupy w uprawnieniach Xcode z:
group.com.mycompany.myapp
Do
group.MYTEAMID.com.mycompany.myapp
ps: możesz znaleźć swój MYTEAMID w członkostwie developer.apple.com
źródło
Rozwiązaniem dla mnie było nie używać tego samego identyfikatora dla identyfikatora pakietu aplikacji i części po „grupie”.
Powiedzmy, że identyfikator pakietu aplikacji to „com.app.id”, a identyfikator grupy to „group.com.app.id” powoduje problemy. Po zmianie na „group.com.app.id.something” program się zatrzymuje.
źródło
Buduj za pomocą Xcode 8.1 Beta, a zobaczysz to samo ostrzeżenie, ale otrzymasz także wartość.
źródło
Mam ten sam problem, gdy próbuję użyć initWithSuiteName. Wygląda na to, że to błąd firmy Apple. Jedynym rozwiązaniem / obejściem, które znalazłem, jest zresetowanie wszystkich ustawień urządzenia. Przejdź do Ustawienia -> Ogólne -> Resetuj -> Resetuj wszystkie ustawienia.
Nie usuwa to żadnej zawartości z iPhone'a, po prostu usuwa wszystkie ustawienia. Po zresetowaniu ustawień wszystko działało dobrze. Daj mi znać, jeśli to też ci pomoże.
źródło
jeśli napotkasz ten problem podczas próby zapisania danych w rozszerzeniu APP przy użyciu
userDefault
, być może napisałeś ten kod:[[NSUserDefaults standardUserDefaults] initWithSuiteName:@"group.xxx.com"];
Ten kod resetuje domyślnie
userDefault
.Właściwie prawidłowy kod to:
[[NSUserDefaults alloc] initWithSuiteName:@"group.xxx.com"];
http://www.jianshu.com/p/e782104c3bc3
źródło
Zmień z
[[NSUserDefaults alloc] initWithSuiteName:@"group.com.xxx.xxx"];
do
[[NSUserDefaults alloc] initWithSuiteName:@"nnnnnnnnnn.group.com.xxx.xxx"];
Gdzie
nnnnnnnnn
jest numer twojego zespołu, ten, którego używasz do podpisania kodu.Przetestowany pod Xcode 8 GM i iOS 10 GM i działał!
źródło