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 вашего приложения.

Другие вопросы по тегам