Создание и импорт быстрой структуры
Я новичок в быстром программировании.
Мне нужно создать чистую быструю структуру и импортировать ее в мой существующий проект с быстрым быстродействием.
Когда я пытаюсь импортировать swift framework, я получаю эту ошибку
сообщение:
"Could not build Objective-C module '<myModule>'"
![Framework File Structure]()
test.h
import Foundation
public class Test {
class func printTest() {
println("111");
}
}
Asdf.h
import UIKit
public class Asdf: Test {
class func echo() {
println(888);
}
}
MyModule-Swift.h
#ifndef <myModule>_<myModule>_Swift_h
#define <myModule>_<myModule>_Swift_h
#endif
После создания фреймворка я добавил фреймворк в свой существующий проект и получил это
![Project Structure and import problem screen]()
Что я делаю неправильно? Спасибо за помощь!
Комментарий ответа @findall -
Я попытался добавить все файлы фреймворков в корневую папку проекта и внутри папки проекта, но снова получил ту же ошибку
![Add Framework files to project root]()
![Add Framework files inside project folder]()
Ответы
Ответ 1
Я сделал следующие шаги.
- Создайте проект фреймворка, например, под названием "FooKit" . (
Cocoa Touch Framework
для выбора)
- Создайте файл ".swift" и добавьте к нему открытый символ, например
public func foo()
.
- Создайте проект на стороне приложения (приложения). (Я выбрал
Single View Application
)
- Откройте корневой каталог "FooKit" с помощью Finder, перетащите "FooKit.xcodeproj" и переместите его в проект приложения через
Project Navigator
.
- Добавьте "FooKit" в
Target Dependencies
в настройке приложения Build Phases
.
- Добавьте "FooKit.framework" в
Embedded Binaries
в настройках приложения General
.
Теперь вы можете создать такой код в приложении с поддержкой.
import FooKit
func bar() {
foo()
}
Ответ 2
В Xcode 7.2 с использованием Swift 2.1 мне удалось пройти мимо упомянутой ошибки, убедившись, что настройки сборки вашей чистой структуры Swift под названием Foo следующие:
1) Настройки сборки- > Упаковка- > Определяет модуль = Да
2) Настройки сборки- > Быстрый компилятор - Генерация кода- > Установить Objective-C Заголовок совместимости = Да (если вам не нужно импортировать вашу среду Swift в Objective C, установите для этого параметра значение Нет)
3) Стереть строковое значение Настройки сборки- > Компилятор Swift - Генерация кода → Objective-C Консоль верхнего уровня
4) Настройки сборки- > Быстрый компилятор - Генерация кода → Objective-C Имя заголовка сгенерированного интерфейса= Foo-Swift.h(если вам не нужно импортировать вашу среду Swift в Objective C стереть этот параметр, как это было на шаге 3))
5) Убедитесь, что Настройки сборки- > Упаковка- > Имя продукта = Foo
6) Добавьте в заголовок общедоступный заголовок вашего фреймворка (Foo.h), который вы можете использовать для импорта вашего кода Swift в Objective C, следующую строку:
#import "Foo-Swift.h"
(но если вам не нужно импортировать ваш код Swift в цель C, пропустите этот шаг)
6) Добавьте следующую строку в файл Swift, где вы хотите использовать модуль Foo:
import Foo
Важные замечания:
1) Убедитесь, что ваш заголовок зонтика Foo.h установлен в общедоступный файл в Инспекторе файлов, иначе это не сработает.
2) Если вы используете чистую среду Swift в файлах Objective C, убедитесь, что:
-
заголовок Foo-Swift.h сгенерировал правильный интерфейс, перейдя в Foo.h, а затем щелкнув в меню верхнего левого угла редактора кода Xcode, а затем выбрав Includes- > Foo-Swift.h( Мне пришлось несколько раз перестроить структуру Foo до тех пор, пока Xcode не уловил это изменение, а затем создал правильный интерфейс в Objective C, поэтому вам также может понадобиться это сделать)
-
ваши быстрые классы наследуют от NSObject или они не будут доступны для кода Objective C
Ответ 3
В Swift:
Создать структуру: -
-
Запустить Xcode → Создать новый проект Xcode → iOS → Рамочная и библиотека → Cocoa Touch Framework → Назовите фреймворк (например, sampleCocoaFramework) → Создать.
-
Установить Taget → Общие → Информация о развертывании → Цель развертывания.
-
Добавить открытый класс: Файл → Новый файл → iOS → Swift File → Назовите его (например, openCocoaClass) → Создать.
-
Теперь добавьте код в openCocoaClass.swift.
import Foundation
public class openCocoaClass {
public init() {
}
public var samplePublicVariable = "samplePublicVariable @ openCocoaClass"
public func samplePublicFunction()
{
print("samplePublicFunction @ openCocoaClass")
}
}
-
Очистить проект: Продукт → Очистить
-
Настроить параметры схемы: Продукт → Схема → Изменить схему → Выполнить → Конфигурация сборки → Отпустить.
-
Создайте фреймворк: Product → Build.
- Экспорт рамки: Продукты → Выберите фреймворк → Идентичность и тип → Полный путь → Выпущенная структура.
Добавление рамки в проект: -
-
Запустите проект Xcode и назовите его (например, CocoaFrameworkTest).
-
Перетащите образец sampleCocoaFramework.framework в папку проекта CocoaFrameworkTest.
-
Цель → Общие → Вставить двоичные файлы → Добавить другое → Выбрать структуру
- > Скопировать элементы при необходимости → Готово.
Доступ к Framework на ViewController: -
import UIKit
import sampleCocoaFramework
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let frameworkObject = openCocoaClass.init()
frameworkObject.samplePublicFunction()
print(frameworkObject.samplePublicVariable)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
Ответ 4
Дополнительно для ответа @jvarela, в Xcode 9 и swift 4,
Чтобы импортировать среду Swift в проект Objective C, вы должны добавить
@objc
отметьте все ваши классы, методы и переменные, которые вы хотите экспортировать в проект Objective C.
Например,
@objc public class Foo: NSObject {
@objc public var fooDescription: String
@objc public func foo(){
}
}