Подтвердить что ты не робот

Структура импорта в Swift Project, Xcode

Я пытаюсь импортировать myFramework в проект. Я добавил myFramework в Build Phases- > Link Binary With Libraries.

Objective-c работает:

#import <UIKit/UIKit.h>
#import <myFramework/myFramework.h>

Но с помощью Swift я получаю ошибку No such module myFramework:

import UIKit
import myFramework

В соответствии с документацией Swift:

Импорт внешних фреймворков

Вы можете импортировать внешние фреймворки с чистым Objective-Ccodebase, чистой кодовой базой Swift или кодовой базой смешанного языка. процесс импорта внешней структуры одинаковый, независимо от того, Framework написана на одном языке или содержит файлы из обоих языки. Когда вы импортируете внешнюю структуру, убедитесь, что Определяет настройку сборки модуля для импортируемой вами структуры к Да.

Вы можете импортировать фреймворк в любой файл Swift в другой с использованием следующего синтаксиса:

СВИФТ

import FrameworkName

Вы можете импортировать фреймворк в любой файл Objective-C.m в другой целевой системе, используя следующие Синтаксис:

OBJECTIVE-C

@import FrameworkName;

Я создал myFramework с помощью Xcode 5. Xcode 5 не имеет настройки сборки "Определяет модуль".

Где проблема?

4b9b3361

Ответ 1

Если вы правильно поняли, у вас нет отдельной цели сборки для вашей среды (вы уже создали ее с XCode 5) и включили фреймворк в цель создания проекта.

Часть документации, на которую вы ссылаетесь, касается рамок в рамках разных целей. Поскольку ваша инфраструктура находится в целевой программе, эта часть документации здесь не применяется.

В вашем случае вы не можете импортировать фреймворк в свой файл Swift. Вот почему вы получаете сообщение об ошибке "Нет такого модуля myFramework" . myFramework не является модулем - это часть вашего проектного модуля (который по умолчанию определяется вашим именем продукта). Таким образом, классы в вашей структуре должны быть доступны.

Однако ваша структура написана в Objective-C. Итак, что вам нужно сделать, это импортировать классы Swift в ваш заголовок-мост, как описано здесь.

Обратите внимание, что это не имеет ничего общего с быстрым импортом модуля. Директива import в файле заголовка-моста просто уведомляет компилятор о "переводить" Objective-C заголовочные файлы в синтаксис Swift и делает видимым публичный заголовок для Swift.

Итак, что вы должны делать сейчас?

  • Сначала импортируйте файлы заголовков, которые вас интересуют в заголовочном заголовке. Вам нужно импортировать заголовки, с которыми вы будете взаимодействовать в Swift.

  • Попробуйте выполнить компиляцию своего проекта на этом этапе. Если XCode не может найти файлы заголовков фреймворка, ваша проблема, вероятно, не связана с Swift или XCode 6, но проблема с включением фреймворков в целом.

  • После этого попытайтесь создать экземпляр класса, который вы импортировали в заголовок-мостик, возможно, в вашем AppDelegate.swift. Автозаполнение XCode должно предлагать вам имена типов.

Надеюсь, что это поможет.

Ответ 2

На Свифте:

Создать каркас: -

  1. Запустите Xcode → Создать новый проект Xcode → iOS → Framework & Library → Cocoa Touch Framework → Назовите структуру (например, sampleCocoaFramework) → Create.

  2. Задайте Цель → Общие → Информация о развертывании → Цель развертывания.

  3. Добавьте открытый класс: Файл → Новый файл → iOS → Файл Swift → Назовите его (например, openCocoaClass) → Создать.

  4. Теперь добавьте немного кода в openCocoaClass.swift.

    import Foundation
    
    public class openCocoaClass {
    
        public init() {
    
        }
    
        public var samplePublicVariable = "samplePublicVariable @ openCocoaClass"
    
        public func samplePublicFunction()
        {
            print("samplePublicFunction @ openCocoaClass")
        }          
    

    }

  5. Очистить проект: Продукт → Очистить

  6. Настройте параметры схемы: Продукт → Схема → Редактировать схему → Выполнить → Настройка сборки → Выпуск.

  7. Сборка фреймворка: Продукт → Сборка.

  8. Экспортируйте фреймворк: Продукты → Выберите фреймворк → Идентификационные данные и введите → Полный путь → Выпущенный фреймворк.

Добавление фреймворка в проект: -

  1. Запустите проект Xcode и назовите его (например, CocoaFrameworkTest).

  2. Перетащите файл sampleCocoaFramework.framework в папку проекта CocoaFrameworkTest.

  3. Цель → Общие → Вставить двоичные файлы → Добавить другое → Выбрать 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()
    }
}

Ответ 3

В соответствии с документацией Swift

Чтобы импортировать код Objective-C в Swift из одной и той же цели

  • В своем Objective-C файле заголовка моста импортируйте каждый заголовок Objective-C, который вы хотите открыть для Swift. Например:

    #import "XYZCustomCell.h"

    #import "XYZCustomView.h"

    #import "XYZCustomViewController.h"

  • В разделе "Параметры сборки" убедитесь, что параметр сборки Objective-C Bridging Header в Swift Compiler - Code Generation имеет путь к заголовок. Путь должен быть напрямую связан с самим файлом, а не с каталог, в котором он находится. Путь должен быть относительно вашего проекта, аналогично тому, как указан ваш путь Info.plist в Build Настройки. В большинстве случаев вам не нужно изменять этот параметр.

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

let myCell = XYZCustomCell()
myCell.subtitle = "A custom cell"

Кроме того, убедитесь, что для параметра "Определить модуль" в разделе "Упаковка" установлено значение "Да".

Ответ 4

вам нужно в своем объекте c создать публичный заголовок с тем же именем вашего приложения, в вашем случае FrameworkName.h и добавить все классы, которые вы хотите открыть (эти классы должны быть добавлены как открытый заголовок в свойствах проекта ) После этого вы добавите фреймворк и добавьте ссылку на свой публичный заголовок import FrameworkName

Ответ 5

Выполните следующие действия:

Swift Docs

И затем перейдите сюда:

Youtube видео для создания фреймворков

Обратите внимание:

Убедитесь, что "Целевое членство" заголовков одинаково (проект должен быть в порядке).

Ответ 6

Вы можете импортировать внешнюю инфраструктуру objC в быстрый проект, используя синтаксис ниже:

#import "objCExternalFramework-name/headerfilename.h"

Ответ 7

Хорошо, теперь это Xcode 7.2. И то, что я наблюдал, быстрый импорт чувствителен к регистру. Пример - import uikit не будет работать. Вам нужно будет ввести его как import uikit.

просто мои два цента.

Ответ 8

Последний XCode предоставляет возможность встроить фреймворк в другие проекты. Эта ссылка (fooobar.com/questions/136993/...) хорошо работала для меня.

Ответ 9

Просто c ommand+B поможет!

Почему: добавление фреймворка через Cocoapods создаст другой проект pod с необходимыми фреймворками в нем. Чтобы основной проект идентифицировал структуры, статические библиотеки обоих проектов должны быть соединены. Для этого необходимо создать рабочее пространство.