Xcode 11 Beta не будет собираться из-за WatchKit?
Работал на Xcode 10. Теперь в бета-версии, которую я не могу собрать, я продолжаю получать эту ошибку:
"WatchKit" недоступен при сборке для симулятора iOS. Рассмотреть возможность использования
#if !os(iOS)
условно импортировать эту структуру.
2 ответа
У меня была такая же проблема для одного файла swift в расширении WatchKit. Оказалось, что он был членом приложения для iOS и расширения WatchKit. Я снял флажок с iOS-приложения в разделе целевого членства для файла, чтобы он принадлежал только цели расширения WatchKit. Сейчас проект строится успешно.
Некоторые функции для связи между часами Apple и iPhone/iPad раньше были реализованы в рамках WatchKit. Но в какой-то момент он переместился в структуру WatchKitConnectivity.
Если вы посмотрите в своей Target раздел "Build Phase" -> "Link Binary With Libraries", вы увидите "WatchKit.framework" со статусом "Optional". iOS13+ стал более "строгим", поэтому он не будет собираться, если я полностью не удалю "WatchKit.framework" и вместо этого добавлю "WatchConnectivity.framework".
Также убедитесь, что в вашем коде iPhone/iPad указано использование "import WatchConnectivity" вместо "import WatchKit".
Нам нужно использовать "Условный импорт", чтобы решить эту проблему.
Заменить import WatchKit
заголовок с кодом ниже:
#if !os(iOS)
import WatchKit
#endif
Это решило мою проблему и успешно собралось в iOS 13.
Xcode 11 удаляет WatchKit из iOS SDK. Из примечаний к выпуску:
Платформа WatchKit больше не входит в iOS SDK. Если вы используете API WatchKit из iOS, вам необходимо отказаться от этого использования. Фреймворк WatchKit остается доступным в watchOS. Если вы используете API WatchKit из iOS, чтобы сделать вывод о доступности функций на сопряженных Apple Watch, включите информацию о своем варианте использования при отправке отзыва в Feedback Assistant. (49707950)
Сюда входят плагины Cordova, которые ссылаются на WatchKit в plugin.xml:
<framework src="WatchKit.framework" />
Вышеупомянутая строка добавит WatchKit в качестве основы для целевого приложения iOS. Вам нужно будет удалить это и добавить WatchKit только для цели Watch вашего приложения.