Xcode 6 / Beta 4: Использование мостовых заголовков с целями фреймворка не поддерживается


Я только что обновился до Xcode 6 Beta 4 и имею фреймворк, который я создал для живых просмотров в Beta 2. Из-за другой ошибки swift мне нужно было использовать некоторый код Obj-C. При обновлении, однако, я получаю следующую ошибку:

ошибка: использование мостовых заголовков с целями фреймворка не поддерживается

Я ничего не видел в примечаниях к выпуску или не нашел другого пути миграции. Кто-нибудь еще видел это и нашел решение?

I поймите, что бета 3 устранила необходимость в рамках для живых представлений, но в моем случае это имеет смысл, если я могу заставить его работать. Я могу удалить его, хотя и в качестве запасного варианта, но предпочел бы использовать фреймворк, если они не полностью сломаны в бета-версии 4.

3 110

3 ответа:

Как говорится в сообщении об ошибке, мостовые заголовки не допускаются в рамках. Элемент импорт кода из той же целевой платформы на Mix & Match документация apple намекает на это. Как говорится, вам нужно "в вашем заголовочном файле umbrella импортировать каждый заголовок Objective-C, который вы хотите предоставить Swift".

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

Итак, это:

  1. удалите файл заголовка моста.
  2. удалите ссылки на файл заголовка моста в настройках сборки для фреймворка
  3. добавьте необходимые заголовки в файл зонтика ([ProductName].h)
  4. сделать включенные файлы общедоступными в разделе "заголовки" фреймворка его " сборки Фазы."
  5. очистить и перестроить.

Примечание: "umbrella header file" - это файл (с именем [ProductName].h) который обычно представляет все открытые заголовки фреймворка. Обычно это просто список операторов # import для других заголовков, содержащихся в фреймворке. В Xcode, если вы открываете UIKit.h, вы увидите хороший пример файла зонтика.

есть две возможности. Добавление необходимых заголовков в файл заголовка umbrella и их публикация-это один из способов. Однако это проблема, если заголовки должны быть доступны для Swift, но не общедоступны.

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

module AwesomeKitPrivate {  
  header "../InternalClass.h"
  export *
}

Это может быть включено в XCode с помощью настройка:

SWIFT_INCLUDE_PATHS = $(SRCROOT)/AwesomeKit/ProjectModule  

посмотреть импорт Objective-C в Swift .

импортировать код Objective-C в Swift из того же фреймворка

  1. в разделе параметры сборки, в упаковке, убедитесь, что параметр определяет модуль для этой целевой платформы имеет значение "Да".
  2. в файле заголовка зонтика импортируйте каждый заголовок Objective-C, который вы хотите предоставить Swift. Например:

        #import "XYZ/XYZCustomCell.h"
        #import "XYZ/XYZCustomView.h"
        #import "XYZ/XYZCustomViewController.h"
    
  3. сделать включенные файлы общедоступными в раздел "заголовки" фреймворка его "фазы сборки".

  4. очистить и перестроить.

Swift будет видеть каждый заголовок, который вы выставляете публично в заголовке зонтика. Содержимое файлов Objective-C в этой структуре будет доступно в любом файле Swift в пределах этой целевой структуры автоматически, без каких-либо инструкций импорта. Используйте свой пользовательский код Objective-C с тем же синтаксисом Swift, который вы используете с системой занятия.

let myOtherCell = XYZCustomCell()
myOtherCell.subtitle = "Another custom cell"

важно: заголовок файла "зонтик" означает, что файл {название модуля}.ч. Кстати, целевое имя - {ModuleName}.рамки.