2016-09-28 45 views
12

Po aktualizacji do systemu MacOS Sierra (10.12) i Xcode 8.0 (8A218a) zacząłem otrzymywać wiele komunikatów o błędach w mojej aplikacji MacOS/Cocoa (napisanej w Objective-C) że następujący format:Uzyskanie nieznanego błędu dotyczącego "awarii dynamicznych akcesorów" po aktualizacji do systemu MacOS

[error] warning: dynamic accessors failed to find @property implementation for 'uniqueId' for entity ABCDInfo while resolving selector 'uniqueId' on class 'ABCDInfo'. Did you remember to declare it @dynamic or @synthesized in the @implementation ? 

[error] warning: dynamic accessors failed to find @property implementation for 'uniqueId' for entity ABCDContact while resolving selector 'uniqueId' on class 'ABCDContact'. Did you remember to declare it @dynamic or @synthesized in the @implementation ? 

[error] warning: dynamic accessors failed to find @property implementation for 'uniqueId' for entity ABCDEmailAddress while resolving selector 'uniqueId' on class 'ABCDEmailAddress'. Did you remember to declare it @dynamic or @synthesized in the @implementation ? 

[error] warning: dynamic accessors failed to find @property implementation for 'address' for entity ABCDEmailAddress while resolving selector 'address' on class 'ABCDEmailAddress'. Did you remember to declare it @dynamic or @synthesized in the @implementation ? 

Nic z tego nie jest mój kodu lub kodu z 3rd strona bibliotek programistycznych, że używam i przeprowadzając wyszukiwanie w tych nazw zmiennych (czyli: „uniqueId” lub „ABCDInfo”) nie wyciąga niczego, co wskazuje, że nie ma go w moim projekcie.

Widziałem, że kwestia ta została również zgłaszane na Apple Developer Forum dwukrotnie (Issue 1 i Issue 2), ale oba pytania pozostają bez odpowiedzi

Moje pytanie brzmi: Co powoduje te komunikaty o błędach i jak mogę je naprawić? Nie powoduje to awarii mojej aplikacji, ale wolałbym dowiedzieć się i zrozumieć, co jest nie tak.

+0

Mam ten sam problem, ale szukam odpowiedzi Swift. Dzięki. – iphaaw

Odpowiedz

8

wstępie przejdźmy Sprawdź, co @synthesize i @dynamic są:

  • @synthesize wygeneruje pobierające i ustawiające metody nieruchomość
  • @dynamic informuje kompilator, że getter i setter metody nie są realizowane przez samą klasę ale gdzieś indziej (jak nadrzędnej lub zostaną dostarczone przy starcie)

Kontakty wymagają teraz, aby każdy, kto używa szkieletu poczty/kontaktu, był kodowany z uprawnieniami do używania kontaktów.

Musisz piaskować swoją aplikację, przyznając uprawnienie "Dostęp do kontaktów". Ostrzeżenia będą nadal rejestrowane, ale jest to związane z innym błędem XCode 8, który loguje tak wiele rzeczy bezużytecznie.

Wygląda na to, że Apple nie zaakceptuje aplikacji bez piaskownicy, aby uzyskać dostęp do Kontaktów (lub lokalizacji lub kalendarza).

Aby przeprowadzić piaskownicę w aplikacji, wykonaj następujące czynności: Przejdź do ustawień projektu> Wybierz aplikację> Włącz aplikację SandBox aplikacji, a następnie wybierz dane aplikacji, z których korzystasz.

+0

Jeśli nie planujesz rozpowszechniać aplikacji za pośrednictwem App Store, ponieważ musisz wyłączyć sandbox, nadal możesz włączyć uprawnienia do kontaktów, a następnie ręcznie przywróć wartość piaskownicy do wartości NO w pliku plist. – cdf1982

1

Może podobne do tej konfiguracji:

  • uzyskiwania dostępu adresowa ramy, prawdopodobnie zbudowany z „ukryte syntetyzowane Właściwości”.
  • oprogramowanie jest zbudowany z "niejawny syntetyzowane properties OFF
+2

Jak wyłączyć "ukryte właściwości syntezatora" w strukturze AddressBook? –

+0

@ RyanD'souza Nie możesz, ponieważ jest już skompilowany. Musisz włączyć tę opcję. – Sirens

+0

Próbowałem, nadal otrzymuję komunikaty o błędach rejestrowane (podczas gdy funkcjonalność działa poprawnie) – cdf1982