Подключите Objective C framework к приложению Swift iOS 8 (Parse framework)

Я пытаюсь использовать фреймворк Objective C с языком программирования Swift для разработки iOS 8. Это конкретный случай импорта, но общая проблема:

как вы импортируете Objective C framework в swift и получаете признание импорта?

Я пытаюсь интегрировать фреймворк Parse в swift-приложение, используя бета-версии iOS 8 и Xcode 6.

вот метод для интеграции Parse framework в Цель C:

https://www.parse.com/apps/quickstart#social/mobile/ios/native/existing

Я загрузил фреймворк Parse в виде сжатого архива, извлек его и импортировал в Xcode 6 без каких-либо проблем. В моем приложении он отображается как правильно отформатированная структура под именем Parse.рамки.

мой текущий мыслительный процесс заключается в изменении AppDelegate.swift файл в корневом каталоге моего проекта. Вот тока файл без изменений (автоматически генерируется Xcode при создании проекта swift):

https://gist.github.com/fconcklin/e8ef7d8b056105a04161

Я попытался импортировать синтаксический анализ, добавив строку import Parse ниже строки import UIKit. Однако Xcode выдает предупреждение о том, что такой модуль не найден, и сборка завершается неудачно.

Я также попытался создать файл ${PROJ_NAME_HERE}-Bridging-Header.h который содержит импорт Objective C синтаксического анализа с помощью import <Parse/Parse.h>. Эта линия не выдает ошибку, но, похоже, в конечном итоге не имеет значения.

спасибо заранее. Дайте мне знать, если вам понадобится дополнительная информация.

6 ответов


" доказательство дурака " способ добавления заголовка моста выглядит следующим образом:

Если у вас Свифт добавить новый Objective-C File для вашего проекта и Xcode предложит, если вы хотите настроить свой проект с заголовком моста. нажать Yes.

Если у вас С добавить новый Swift File к нему, и вы получите тот же запрос. нажать Yes.

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


после дальнейших исследований я нашел решение и понял, что я просто растерялась.

правильный подход заключается в следующем:

  • импортируйте фреймворк Objective C, перетаскивая фреймворк в проект Xcode 6 Swift.

  • создайте новый файл Objective C в своем проекте (File->New->File [Objective C для iOS]).

  • примите приглашение (согласитесь) для создания заголовка моста файл между объектом C и Swift.

  • удалите вновь созданный файл Objective C, но сохраните файл заголовка моста ${YOURPROJ}-Bridging-Header.h.

  • в файле заголовка моста импортируйте фреймворк с помощью стандартного Цель C синтаксис импорта (например,#import <Parse/Parse.h>).

  • это освобождает от необходимости выполнять import Parse заявление в . Теперь вы можете написать код, который использует любую структуру пока он импортируется с помощью связующего заголовка. Он доступен во всех файлах Swift вашего проекта.

теперь, если вы хотите протестировать интеграцию синтаксического анализа в своем проекте, вы можете ввести Parse. и используйте завершение кода, чтобы просмотреть структуру и увидеть, что завершение кода указывает на успешный импорт.

однако здесь есть еще одно предостережение, которое необходимо устранить при использовании файла заголовка моста. Все зависимости framework также необходимо указать в файле заголовка моста. В случае интеграции Parse framework в Swift-приложение Ваш файл заголовка моста будет выглядеть следующим образом:

 #import <Foundation/Foundation.h>

 // Parse Dependencies
 #import <AudioToolbox/AudioToolbox.h>
 #import <CFNetwork/CFNetwork.h>
 #import <CoreGraphics/CoreGraphics.h>
 #import <CoreLocation/CoreLocation.h>
 #import <MobileCoreServices/MobileCoreServices.h>
 #import <QuartzCore/QuartzCore.h>
 #import <Security/Security.h>
 #import <StoreKit/StoreKit.h>
 #import <SystemConfiguration/SystemConfiguration.h>

 // Import parse framework
 #import <Parse/Parse.h>

надеюсь, что это помогает.


добавить парсить базы для быстрого проекта: Добавьте эти библиотеки в проект Swift.

enter image description here

вставьте эти фреймворки из ParseSDK в свой проект:

enter image description here

добавить заголовок ProjectName-Bridging -.h (https://developer.apple.com/library/ios/documentation/swift/conceptual/buildingcocoaapps/MixandMatch.html) (https://stackoverflow.com/a/24272431/1847511) файл с таким контентом.

enter image description here

добавить путь к заголовку моста связи:

enter image description here

добавить TestCode:

enter image description here

выполнить приложение.


ответ на мою проблему был другим. Я имел пути поиска фреймворка в настройках сборки моего проекта значение рекурсивные когда они должны были быть нерекурсивный.

в моем случае моя цель имеет свои пути поиска рамок, установленные в $(по наследству), что означает наследование настройки из моего проекта.

пути поиска фреймворка моего проекта имели только один путь,$PROJECT_DIR/../ External/** (с двумя Астерикс смысл "этой папки рекурсивно". Мой разбора.рамки файл находился на базовом уровне внешней папки.

изменение пути из рекурсивные до нерекурсивный основные вещи для меня. Очень странный...


новая версия Parse framework нуждается в обновлении.

например, вы должны вставить libsqlite3.0.dylib в двоичном файле библиотеки с библиотеками и файлом заголовка обновления с #import и #import


' цель-c мостовой заголовок ' сделает трюк.

Хорошо описано в ссылке ("использование синтаксического анализа с Swift и Xcode 6")