Создание и импорт быстрой структуры

Я новичок в быстром программировании. Мне нужно создать чистую быструю структуру и импортировать ее в мой существующий проект с быстрым быстродействием. Когда я пытаюсь импортировать 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(){

    }

}