2015-03-05 33 views
17

Widziałem wszystkie inne posty z SO dotyczące udostępniania danych NSUserDefaults między aplikacjami hosta i rozszerzeniami aplikacji, ale moje nadal nie działa. Oto wszystko, co zrobiłem:Dlaczego grupy aplikacji nie działają w moim rozszerzeniu WatchKit?

  1. Włącz grupy aplikacji na karcie "Możliwości" Xcode dla aplikacji rozszerzenia i hosta.
  2. Ustaw nazwę grupy na "group.com.mycompany.foo" i sprawdź, czy rozszerzenie i aplikacja hosta zostały dodane do grupy.
  3. Potwierdzono, że istnieje plik uprawnień dla obu z kluczem "com.apple.security.application-groups" ustawionym na nazwę mojej grupy aplikacji. (Dla tego, co jest warte, korzystam również ze współużytkowanych funkcji keychain między rozszerzeniem a aplikacją hosta, która działa - więc nie sądzę, aby to stanowiło problem z uprawnieniami).
  4. Regeneracja wszystkich profili udostępniania. W rzeczywistości nawet anulowałem wszystkie moje certyfikaty i zregenerowałem wszystkie profile świeże po skonfigurowaniu grupy aplikacji.

I po tym wszystkim, ten kod nie zadziała:

// in the host app 
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"]; 
[testDefaults setObject:@"TEST" forKey:@"foo"]; 
[testDefaults synchronize]; 

a następnie:

// in the extension 
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"]; 
NSLog(@"%@", [testDefaults objectForKey:@"foo"]); 

co skutkuje:

(null) 

Kiedy spójrz w preferencje Xcode, zauważam te ikony, z których żadna nie ma ikony "Grupa aplikacji": Xcode Preferences - Entitlements

Ale jak już wcześniej wspomniałem, po skonfigurowaniu grupy aplikacji posunąłem się do końca po wyczyszczeniu profili pęków kluczy, certyfikatów i obsługi administracyjnej. Więc jeśli to jest faktycznie problem, w jaki sposób mogę dodać uprawnienia do profili?

Czego mi brakuje? Jestem świeży z pomysłów.

Pomoc?

EDYCJA: Grupy dostępu działają w moim obecnie rozszerzeniu Safari o numerze &, ale nie w rozszerzeniu WatchKit. Nie mam pojęcia dlaczego, a wszystkie ustawienia kompilacji wydają się być skonfigurowane w ten sam sposób.

EDIT 2: Dla tych, twierdząc, że moje możliwości nie są ustawione prawidłowo, oto zrzut ekranu: Capabilities

+0

Czy próbowałeś kliknięcie „refres h "w lewym dolnym rogu listy profili obsługi Xcode? –

+1

Prawdopodobnie milion razy. :( – user2393462435

+0

Brak ikony grup aplikacji w kolumnie Uprawnienia w załączonym widoku (przynajmniej ja tego nie mam i aplikacje działają dla mnie) Powrót do problemu: czy jesteś w 100% pewien, że zarówno aplikacja hosta, jak i cel rozszerzenia są podpisany z prawidłowym profilem administracyjnym i identyfikatorem szyldu kodu, a poprawne mam na myśli 'com.mycompany.foo.myapp' i' com.mycompany.foo.myapp.myappwatchkitextension'. Wildcard nie zadziała tutaj – lvp

Odpowiedz

5

Miałem podobny problem. Zauważyłem, że moje rozszerzenie WatchKit i aplikacja WatchKit mają identyczne identyfikatory pakietów. Zmieniłem identyfikator pakietu mojej aplikacji WatchKit. Również nie zapomniałem zmienić NSExtensionAttributes/WKAppBundleIdentifier w pliku info.plist rozszerzenia, aby dopasować ten identyfikator. Teraz wszystko działa. Mam nadzieję, że to Ci pomoże!

Krótko: Identyfikatory pakietów aplikacji i rozszerzenia WatchKit powinny być różne!

+0

To był problem! DZIĘKUJĘ BARDZO! – user2393462435

+1

To nie zadziała w przypadku WachOS 2+. W takim przypadku powinieneś użyć [WatchConectivity] (http://stackoverflow.com/questions/31457811/send-messages-between-ios-and-watchos-z-watchconnectivity-in-watchos2) – marcelosalloum

2

Próbowałaś czytać ten sam klucz z iPhone app?

Uważam, że problem polega na tym, że nie aktywowałeś uprawnienia do grupy aplikacji w swoim rozszerzeniu WatchKit.

  1. Wybierz rozszerzenie WatchKit w ustawieniach projektu.

  2. Wybierz Możliwości zakładka pod WatchKit Extension i szukać App grup i przekształcić go na.

  3. Wybierz ten sam identyfikator grupy aplikacji, który został wcześniej utworzony (powinien pojawić się automatycznie i po prostu go sprawdzić).

+0

Jest włączony, a plik uprawnień wygląda identycznie jak plik uprawnień dla moich rozszerzeń, które już działają. Moje ustawienia kompilacji poprawnie odwołują się do tego pliku uprawnień (wiem o tym, ponieważ wspólny brelok działa, mimo że grupa aplikacji nie działa). – user2393462435

+0

Czy próbowałeś odczytać ten sam klucz po ustawieniu go w aplikacji na iPhone'a? – BalestraPatrick

+0

Zobacz kod w oryginalnym pytaniu. Ustawiam i odczytuję z tego samego klucza. – user2393462435

1

Oto, co mi się udało. Widocznie Xcode automatycznie utworzony nowy plik uprawnień dla nowego rozszerzenia (prawdopodobnie po tym, jak ustawić go z „Możliwości”, ale niestety wartość tablicy brakowało ...

W uprawnień aplikacji:

enter image description here

W Entitlement rozszerzeń wartość brakowało w tablicy:

enter image description here

Również ważne jest, aby upewnić się, że grupa pojawi się w zakładce „Capability” dla obu celów (APP i rozszerzenia) i że wszystkie 3 checkmarks są zielone, zobacz przykład:

App docelowa

enter image description here

Rozbudowa docelowa

enter image description here