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

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

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

: 0: ошибка: базовый модуль Objective-C 'Sample' не найден

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

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

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

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


person Moth    schedule 05.06.2014    source источник
comment
Почему архивный фреймворк?   -  person vladof81    schedule 20.06.2014
comment
Вы пытались создать проект чистой быстрой платформы и использовать его из клиентского приложения в той же рабочей области? Если да, то сработало?   -  person Omer    schedule 16.07.2014


Ответы (5)


ИЗМЕНИТЬ (27.07.2018)

Информация в ответе ниже может быть неточной. Ваш пробег может отличаться.


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

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

Незначительное обновление

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

person Aaron    schedule 06.06.2014
comment
Это прямо противоречит документации Apple: разработчик .apple.com / library / prerelease / ios / documentation / Swift /. - person rougeExciter; 29.06.2014
comment
Эти документы все еще находятся на стадии предварительного выпуска, поэтому они могут быть изменены. Кроме того, они не сказали, что невозможно создать фреймворк и использовать его в отдельном проекте. Они просто сказали, что это не поддерживается. Вы пробовали создать цель Swift Framework для использования в другом проекте? - person Aaron; 29.06.2014
comment
Да, я держал свой порошок сухим и пытался найти границы того, что работает, а что нет, но на данный момент все работает нормально. Я подозреваю, что существуют (по крайней мере) следующие ограничения: если они пересмотрят быстрый язык, несмотря на обещанную двоичную совместимость, приложение и все его фреймворки должны будут быть построены с использованием одной и той же двоичной версии. - person rougeExciter; 29.06.2014
comment
Уверены ли мы, что iOS Swift Framework не поддерживается сейчас, когда выпущен Xcode 6? Я не могу найти подтверждение в документации / примечаниях. Это опция в XCode для фреймворков. Для всех, кому интересно, вот пошаговая инструкция по настройке моего проекта. Это неправильно? github.com/mikemoser/swift-framework - person Michael Moser; 13.10.2014
comment
@MichaelMoser Они поддерживаются, но только как фреймворк, являющийся частью одного проекта. Что изначально не поддерживается, так это разорвать эту структуру, чтобы использовать ее в каком-либо другом проекте (см. Второй абзац OP, первое предложение) или передать его кому-то. - person Aaron; 13.10.2014
comment
Я просто получаю это Использование необъявленного типа, использование неразрешенного идентификатора, ошибка, независимо от того, что я пробую с Swift Cocoa Touch Framework. Я пробовал ограниченное рабочее пространство. Я попытался добавить проект фреймворка в качестве подпроекта. Я пробовал импортировать фреймворк прямо из Link Binary With Libraries. Сейчас декабрь .. Поддерживается это или нет? - person Morkrom; 11.12.2014
comment
@Michael Moser, спасибо, что поделились своим примером фреймворка. Работает, когда я использую его в отдельном проекте. У меня возникнет проблема, если я добавлю собственные файлы Swift в его копию, построю, а затем добавлю в образец проекта. Даже объявленные публично, они относятся к незадекларированному типу. - person Morkrom; 11.12.2014
comment
@Aaron, все равно нельзя сделать распределенный фреймворк на Swift?, Swift стал на год старше. :-( - person Mohammad Zaid Pathan; 23.09.2015
comment
@ZaidPathan Я не пробовал с момента этого исходного вопроса. Ситуация могла измениться, но я не уверен. - person Aaron; 23.09.2015
comment
@ Аарон, я думаю, все еще нет возможности, спасибо за ваш ответ. - person Mohammad Zaid Pathan; 23.09.2015

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

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

Изображение, показывающее MyFramework.h для цели MyFramework на вкладке

person Jamie McDaniel    schedule 16.07.2014
comment
Это помогло мне с той же проблемой. Хотя он на самом деле не говорит мне, что было не так ... в любом случае, спасибо! :) - person Jeehut; 21.08.2014

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

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

person CodaFi    schedule 07.06.2015


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

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

person jcgamestoy    schedule 08.06.2014