Создание чистой Swift Cocoa Touch Framework

Я изучаю Swift с Xcode-6 и до сих пор настолько хорош, хотя мне кажется, что новые коллекции нуждаются в небольшой работе, так как мне удалось несколько раз сломать компилятор.

Проблема в том, что я сейчас застреваю, пытаясь создать пакет фреймворка , а затем использовать его в другом проекте. Проект строится без проблем, и все тесты проходят успешно. Когда я иду для создания Архива (который, как я полагаю, является тем, что требуется), я получаю сообщение об ошибке:

: 0: ошибка: базовый Objective-C модуль "Образец" не найден

Теперь я предполагаю, что это имеет какое-то отношение к содержимому моего Sample.h, которое сообщает мне

// In this header, you should import all the public headers of your framework using statements like #import <Sample/PublicHeader.h>

что отлично, за исключением того, что я использовал только быстрые перечисления, структуры и классы для этой структуры, поэтому нет файлов .h.

Может ли кто-нибудь пролить свет на это, поскольку я еще не могу найти документацию?

Ответ 1

Я сел с инженером и задал этот точный вопрос. Это был их ответ:

Xcode 6 в настоящее время не поддерживает создание распределяемых инфраструктур Swift и что Apple, скорее всего, не будет создавать эту функциональность в Xcode до тех пор, пока это будет выгодно для них. Прямо сейчас, Frameworks должны быть встроены в ваш проект приложения, а не распространены. Если вы смотрите видеозапись сеанса или смотрите примеры проектов, это всегда соглашение. Еще одна причина в том, что Swift очень новый и, вероятно, изменится. Таким образом, ваша платформа на основе Swift не гарантирует работу на платформе, на которой вы ее первоначально построили.

Небольшое обновление

Инженер отметил, что создавать рамки для распространения невозможно, просто чтобы он не поддерживался.

Ответ 2

Мне удалось пройти мимо ошибки, перейдя к цели для фреймворка и на вкладке "Построить фазы" в разделе "Заголовки", удалите файл MyFramework.h

Однако я получал ошибку "Underlying Objective-C not found", когда я использовал фреймворк для совместного использования кода между содержащим приложением и расширением приложения, оба из которых были чистыми Swift.

Image showing MyFramework.h for the MyFramework target on the Build Phases tab under Headers

Ответ 3

Вы можете найти это полезным: Создание чистого быстродействующего модуля

Вкратце: можно создать статический фреймворк, но есть одна проблема: он не работает в проекте конечного пользователя, если включен заголовок ProjectName-Swift.h.

Но он отлично работает, если вы используете только быстрый.

Ответ 4

Предполагая, что вы создаете действительно чистый модуль Swift, вы должны отключить заголовок совместимости Objective-C и любые сгенерированные заголовки интерфейсов, чтобы компилятор не ушел, полагая, что он может найти модуль Objective-C для фреймворка. enter image description here

Не удалить заголовок общедоступной структуры. Если вы это сделаете, вы получите предупреждение модуля-карты на время ссылки.

Ответ 5

Я думаю, что это ошибка в XCode 6, или что Apple не позволяет архивировать Framework из XCode во время бета-тестирования.

Если вы компилируете профиль XCode, он корректно формирует структуру. (См. Папку Release, созданную в DerivedData)