Ответ 1
Первое, что нужно наблюдать (это, конечно же, не мое первое наблюдение!) заключается в том, что вы не можете сделать это, используя статическую библиотеку под iOS. Xcode не позволит использовать Swift в статической структуре. Попробуйте. Xcode отклонит ваши пожелания!
В этом процессе я закончил. Две основные проблемы, с которыми мне пришлось столкнуться, заключались в следующем: (i) сделать Xcode ссылку на структуру в проекте использования без ошибок и (ii) получить доступ к заголовкам структуры в проекте использования. В освещенном взгляде Apple эти два вопроса являются отдельными. Обратите внимание на сарказм.;.)
1) Создайте Cocoa Touch Framework
с помощью Xcode. Я считаю, что это работает с Xcode6 и Xcode7. Использование:
Файл > Создать > Проект > iOS > Рамки и библиотеки > Cocoa Нажмите Framework
Я использую Xcode7. (Не делайте Cocoa Touch Static Library
- как я уже говорил выше, Xcode не позволит вам включать Swift в статические библиотеки).
2) С помощью классов Swift убедитесь, что члены и функции являются общедоступными. Я не экспериментировал с этим, но кажется, что публичный атрибут необходим для того, чтобы члены и функции были видимыми для пользователей фреймворка.
3) Добавьте все классы Swift (и Objective-C), которые вы хотите использовать в своей структуре.
4) Закройте этот проект. (Тот же проект не может быть открыт дважды в Xcode, и вам нужно включить структуру в свой следующий проект).
5) Откройте свой проект в Xcode. Для меня это был существующий универсальный проект приложения. Возможно, вы создаете новый проект. В любом случае перетащите файл .xcodeproj вашего проекта framework в Finder в ваш проект.
6) Внутри используемого проекта откройте проект фреймворка. И перетащите файл фреймворка в Embed Frameworks
на этапах сборки (раздел Embed Frameworks
не присутствовал на этапах сборки, когда я впервые начал свои эксперименты, и еще не знаю, какое волшебство вызвало его появление!).
Эти шаги до сих пор должны позволять вам создавать и связывать, фактически не интегрируя использование вашего библиотечного кода. (Я использовал https://github.com/RadiusNetworks/swift-framework-example для некоторых моих тестов).
7) Теперь для coup de grace: Под Build Settings
найдите Framework Search Paths
. И добавьте:
${TARGET_BUILD_DIR}/YourFrameworkName.framework
(Кажется, вам не обязательно иметь это обозначение как рекурсивное).
8) В ваших файлах Swift с использованием фреймворка вам нужно добавить импорт вверху каждого файла:
import YourFrameworkName
Теперь вы можете создавать и связывать свою новую библиотеку!
9) Еще один вопрос: убедитесь, что ваш Deployment Target
для вашей рамки соответствует вашему целевому проекту. Например, если ваш проект будет создан для iOS7, убедитесь, что ваша структура построена для iOS7 или ранее.
10) Second gotcha (10/23/15): Я только что узнал, что для моей фреймворка необходимо иметь "App-Swift.h" (имя, которое я использую для этого) в качестве заголовка Objective-C сгенерированного интерфейса имя в настройках сборки. Когда я взял это (Objective-C Generated Interface Header) (пытаясь исправить еще одну проблему), я получаю серверные интересные проблемы, возникающие в App-Swift.h. Эти проблемы выглядят примерно так: "Невозможно найти объявление интерфейса для NSObject" ?
11) Третий вопрос (10/29/15): Когда я попытался загрузить свое первое приложение в iTunes Connect, которое использует эту платформу, я получил ошибку при загрузке. Ошибка:
ОШИБКА ITMS-90206: "Недействительный пакет. 'Your.app/Frameworks/YourFramework.framework' содержит запрещенный файл 'Каркасы'".
Различные SO и другие сообщения попали в эту ошибку, и трюк для меня был для целевой среды Framework в настройках сборки, чтобы установить "Встроенный контент содержит Swift Code" в NO. (У моего приложения Build Settings этот флаг уже установлен на NO).
Пример проекта, в котором выполняется большинство этих шагов, находится на https://github.com/crspybits/CocoaTouchFramework.git