Я только что обновился до Xcode 6 Beta 4, и у меня есть фреймворк, который я создал для Live Views в Beta 2. Из-за другой быстрой ошибки мне пришлось использовать некоторый код Obj-C. Однако при обновлении я получаю следующую ошибку:
ошибка: использование заголовков моста с целями фреймворка не поддерживается
Я не видел ничего в примечаниях к выпуску и не нашел другого пути миграции. Кто-нибудь еще видел это и пришел к решению?
Я понимаю, что в Beta 3 отпала необходимость в фреймворках для просмотра в реальном времени, но в моем случае это имеет смысл, если я смогу заставить его работать. Я могу удалить его в качестве запасного варианта, но я бы предпочел использовать фреймворк, если он не полностью сломан в Beta 4.
xcode
frameworks
beta
Крис Коновер
источник
источник
Ответы:
Как указано в сообщении об ошибке, мостовые заголовки не разрешены в Frameworks. На это намекает раздел « Импорт кода из одной и той же целевой платформы» документации Apple Mix & Match . Как говорится, вам нужно: «В вашем зонтичном заголовочном файле импортировать каждый заголовок Objective-C, который вы хотите предоставить в Swift».
Однако я обнаружил, что вам также может потребоваться сделать эти конкретные заголовки общедоступными. В этом ответе рассматривается, почему и как это сделать: Ошибка компилятора Swift: «немодульный заголовок внутри модуля фреймворка» .
Итак, сделайте это:
Примечание . «Зонтичный заголовочный файл» - это файл (с именем [ProductName] .h), который обычно представляет все общедоступные заголовки платформы. Обычно это просто список операторов #import для других заголовков, содержащихся в структуре. В Xcode, если вы откроете UIKit.h, вы увидите хороший пример зонтичного файла.
источник
Есть две возможности. Один из способов - добавить необходимые заголовки в файл заголовков зонтика и сделать их общедоступными. Однако это проблема, если заголовки должны быть доступны Swift, но не общедоступны.
Вторая возможность, которая сделает внутренние заголовки доступными для Swift, подробно описана здесь . По сути, необходимо создать карту модуля, подобную следующей:
Затем это можно включить в XCode, используя настройку:
источник
header
Утверждение принимает относительный путь. Что вы делаете, когда хотите добавить заголовки другого фреймворка?См. Импорт Objective-C в Swift .
Чтобы импортировать код Objective-C в Swift из того же фреймворка
В файле заголовка зонтика импортируйте каждый заголовок Objective-C, который вы хотите предоставить Swift. Например:
Сделайте включенные файлы общедоступными в разделе «Заголовки» фреймворка «Фазы сборки».
Очистите и восстановите.
Swift будет видеть каждый заголовок, который вы публикуете в заголовке зонтика. Содержимое файлов Objective-C в этой структуре будет доступно в любом файле Swift в этой целевой платформе автоматически, без каких-либо операторов импорта. Используйте свой собственный код Objective-C с тем же синтаксисом Swift, который вы используете с системными классами.
Важно: «зонтичный заголовочный файл» означает файл {ModuleName} .h. Кстати, целевое имя - {ModuleName} .framework.
источник
В моем случае помогло просто удаление
Objective-C Bridging Header
настроек из моего фреймворкаBuild Settings
.источник