Моя цель в этом заключалась в создании iOS-структуры, которая включает в себя как Swift, так и Objective-C, которые я мог бы использовать в своих проектах разработки. Характер этой структуры заключается в том, что сама инфраструктура развивается. Поэтому было важно, чтобы каждый раз, когда я строил проект с использованием этой структуры (я буду называть проекты с использованием структуры «используя» проекты из-за отсутствия лучшего термина), я хотел убедиться, что сама структура была перестроена. Я хотел, чтобы это было основой, потому что у меня есть несколько приложений, через которые я хочу использовать один и тот же код. Я боролся с этим за хороший кусок сегодня и потратил много времени на то, что должно было быть, по крайней мере, в моих мыслях. Итак, я поделюсь своим процессом.Как создать структуру разработки в iOS, включая Swift?
ответ
Первое, что нужно наблюдать (это было, конечно, не мое первое наблюдение!) В том, что вы не можете сделать это, используя статическую библиотеку под iOS. Xcode не позволит использовать Swift в статической структуре. Попробуйте. Xcode отклонит ваши пожелания!
Вот процесс, в котором я закончил. Две основные проблемы, с которыми мне пришлось столкнуться, заключались в следующем: (i) сделать Xcode ссылку на структуру в проекте использования без ошибок и (ii) получить доступ к заголовкам структуры в проекте использования. В просвещенном виде Apple эти два вопроса являются отдельными. Обратите внимание на сарказм. ;).
1) Создайте Cocoa Touch Framework
с помощью Xcode. Я считаю, что это работает с Xcode6 и Xcode7. Использование:
File> New> Project> IOS> Framework & Library> Cocoa Touch Framework
я случайно использовать Xcode7. (Do не сделать Cocoa Touch Static Library
- как я уже сказал выше, Xcode не позволит вам включать Swift в статические библиотеки).
2) С вашими классами Swift убедитесь, что члены и функции общественность. Я не экспериментировал с этим, но кажется, что публичный атрибут необходим для того, чтобы члены и функции были видимыми для пользователей фреймворка.
3) Добавьте, какие бывают классы Swift (и Objective-C), которые вы хотите использовать в своей структуре.
4) Закрыть этот рамочный проект. (Тот же проект не может быть открыт дважды в Xcode, и вам нужно включить структуру в свой следующий проект).
5) Откройте свой проект в Xcode. Для меня это был существующий универсальный проект приложения. Возможно, вы создаете новый проект. В любом случае перетащите файл .xcodeproj вашего проекта framework в Finder в ваш проект.
6) Внутри используемого проекта откройте проект фреймворка. И перетащите файл фрейма в Embed Frameworks
в фазах сборки (раздел Embed Frameworks
не присутствовал в Build Phase, когда я впервые начал свои эксперименты, и еще не знаю, какое волшебство вызвало его появление!).
Эти шаги до сих пор должны позволить строить и ссылку, фактически еще интегрированием использование кода библиотеки. (я использовал https://github.com/RadiusNetworks/swift-framework-example для некоторых из моих тестов).
7) Теперь для государственного переворота: Под 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 Generated Interface Название заголовка в настройках сборки. Когда я взял этот (заголовок с расширенным интерфейсом Objective-C) (пытаясь исправить еще одну проблему), я получаю серверные интересные проблемы, возникающие в App-Swift.h. Эти вопросы выглядеть примерно так: "Cannot find interface declaration for NSObject"?
11) Третий Гоча (10/29/15): Когда я пытался загрузить мое первое приложение на ITunes Connect, что делает использование этой рамки, я получил сообщение об ошибке загрузки. Ошибка чтения:
ОШИБКА ITMS-90206: "Invalid Bundle расслоением на 'Your.app/Frameworks/YourFramework.framework' содержит Disallowed файл 'рамочные'."
Разнообразные SO и другие сообщения столкнулись с такой ошибкой, и трюк для меня был для целевой среды Framework в настройках сборки, чтобы установить «Встроенный контент содержит Swift Code» в NO. (У моего приложения Build Settings этот флаг уже установлен на NO).
Пример проект с большинством из этих шагов, выполненных на https://github.com/crspybits/CocoaTouchFramework.git
не небезопасный, чтобы дать полное xocdeproject рамок к другим, кто хочет использовать рамки? не делает ли ваше приложение открытым для всех? – Saty
Что вы подразумеваете под «сделать ваше приложение открытым для всех»? Как я уже упоминал, эта запись относится к моим собственным проектам развития. Я не распространял свои фреймворки на другие, где на карту поставлены какие-то проблемы с безопасностью или с закрытыми исходными кодами. –
хорошо, тогда это хорошо. Спасибо, принц ... – Saty