Получение неизвестной ошибки о "отказе динамических аксессуаров" после обновления до 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