Получение неизвестной ошибки о "отказе динамических аксессуаров" после обновления до macOS

После обновления до macOS Sierra (10.12) и Xcode 8.0 (8A218a), я начал получать много сообщений об ошибках в моем приложении macOS/ Cocoa (написанном в Objective-C), которые следуют этому формату:

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

Ничто из этого не является моим кодом или кодом из сторонних библиотек разработчиков, которые я использую, и выполнение поиска по этим именам переменных (например: "uniqueId" или "ABCDInfo" ) ничего не вытягивает, указывая на то, что это не в моем проекте.

Я видел, что эта проблема также сообщалась на форумах разработчиков Apple дважды (Проблема 1 и Проблема 2), но оба вопроса остаются без ответа

Мой вопрос: что вызывает эти сообщения об ошибках и как их исправить? Это не приводит к сбою моего приложения, но я бы предпочел выяснить и понять, что случилось.

Ответ 1

Прежде всего, давайте посмотрим, что @synthesize и @dynamic:

  • @synthesize будет генерировать методы getter и setter для вашего свойства.
  • @dynamic сообщает компилятору, что методы getter и setter реализуются не самим классом, а где-то в другом месте (например, суперкласс или будет предоставлен во время выполнения)

В настоящее время для контактов требуется, чтобы кто-либо, использующий почтовую/контактную структуру, должен был кодироваться с правом использования-контактов.

Вам необходимо изолировать ваше приложение, предоставив право доступа "Доступ к контактам". Предупреждения по-прежнему будут регистрироваться, но это связано с другой ошибкой XCode 8, которая записывает столько вещей бесполезно.

Кажется, Apple больше не будет принимать приложение без песочницы для доступа к контактам (или местоположению или календарю).

В песочницу вашего приложения выполните следующие действия: Перейдите в настройки своего проектa > Выберите приложение > Включить приложение SandBox, а затем выберите данные приложения, которые вы используете.

Ответ 2

Возможно, это связано с этой конфигурацией:

  • Вы получаете доступ к структуре AddressBook, возможно, построенной с использованием неявных синтезированных свойств.
  • Ваше программное обеспечение построено с "неявными синтезированными свойствами" OFF