Подключите платформу Objective C к Swift iOS 8 (Parse framework)
Я пытаюсь использовать платформу Objective C с языком программирования Swift для разработки iOS 8. Это конкретный случай импорта, но общая проблема заключается в следующем:
Как импортировать инфраструктуру Objective C в swift и распознать импорт?
Я пытаюсь интегрировать структуру Parse в быстрое приложение, используя бета-версии iOS 8 и Xcode 6.
Ниже приведена методика интеграции Framework Parse в Objective C:
https://www.parse.com/apps/quickstart#social/mobile/ios/native/existing
Я загрузил структуру Parse как сжатый архив, извлек его и импортировал в Xcode 6 без проблем. В моем приложении он выглядит как правильно отформатированная структура под названием Parse.framework.
Мой текущий процесс рассмотрения - изменить файл AppDelegate.swift
в корневом каталоге моего проекта. Вот текущий файл без изменений (автоматически генерируемый Xcode при быстром создании проекта):
https://gist.github.com/fconcklin/e8ef7d8b056105a04161
Я попытался импортировать синтаксис, добавив строку import Parse
под строку import UIKit
. Однако Xcode выдает предупреждение о том, что такого модуля не обнаружено, и сборка завершилась неудачей.
Я также попытался создать файл ${PROJ_NAME_HERE}-Bridging-Header.h
, который содержит Objective C import of Parse, используя import <Parse/Parse.h>
. Эта строка не выдает ошибку, но, похоже, не имеет никакого значения.
Спасибо заранее.
Дайте мне знать, если вам нужна дополнительная информация.
Ответы
Ответ 1
Способ добавления "мозаичного заголовка" "Fool Proof" заключается в следующем:
Если у вас есть проект Swift, добавьте в проект новый Objective-C Файл, и Xcode предложит вам настроить проект с помощью соединительного заголовка. Нажмите "Да".
Если у вас есть проект Objective-C, добавьте к нему новый Swift File, и вы получите ту же подсказку. Нажмите "Да".
После того, как вы получите заголовок моста, вы можете удалить только что добавленный файл, если хотите.
Ответ 2
После дальнейших исследований я нашел решение и понял, что я просто смутился.
Правильный подход выглядит следующим образом:
-
Импортируйте свою инфраструктуру Objective C, перетащив фреймворк в проект Xcode 6 Swift.
-
Создайте новый объект Objective C в вашем проекте (File- > New- > File [Objective C для iOS]).
-
Примите приглашение (соглашайтесь), чтобы создать заголовочный файл между объектами C и Swift.
-
Удалите вновь созданный файл Objective C, но сохраните заголовочный файл моста ${YOURPROJ}-Bridging-Header.h
.
-
В заголовочном файле Bridging импортируйте фреймворк с помощью стандартного синтаксиса импорта Objective C (например, #import <Parse/Parse.h>
).
-
Это отказывается от необходимости выполнять оператор import Parse
в вашем файле AppDelegate.swift
. Теперь вы можете написать код, который использует любую фреймворк, пока он импортируется с использованием заголовка моста. Он доступен во всех файлах Swift вашего проекта.
Теперь, если вы хотите протестировать интеграцию Parse в своем проекте, вы можете ввести Parse.
и использовать завершение кода для просмотра структуры и посмотреть, что завершение кода указывает на успешный импорт.
Однако здесь есть еще одна оговорка, которая должна быть решена при использовании файла заголовка Bridging Header. Все зависимости структуры должны быть указаны в файле заголовка моста. В случае интеграции структуры Parse в приложение Swift ваш файл заголовка Bridging будет выглядеть следующим образом:
#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>
Надеюсь, это поможет.
Ответ 3
Чтобы добавить Parse framework в проект Swift:
Добавьте эти библиотеки в проект Swift.
![enter image description here]()
Вставьте эти рамки из ParseSDK в свой проект:
![enter image description here]()
Добавить ProjectName-Bridging-Header.h(https://developer.apple.com/library/ios/documentation/swift/conceptual/buildingcocoaapps/MixandMatch.html) (fooobar.com/questions/127878/...) с таким контентом.
![enter image description here]()
Добавить путь для связывания заголовка:
![enter image description here]()
Добавьте TestCode:
![enter image description here]()
Запустите приложение.
Ответ 4
Ответ на мою проблему был другим. У меня были пути поиска Framework в моем проекте Build Settings, который был установлен в рекурсивный, когда они должны были быть нерекурсивными.
В моем случае у моей цели есть пути к поиску Framework, установленным на $(унаследованный), что означает наследование параметра из моего проекта.
В моем проекте Framework Search Paths был только один путь, $PROJECT_DIR/../Внешний/** (с двумя знаками asteriks "поиск этой папки рекурсивно". My Parse.framework был расположен на базовом уровне внешней папки.
Изменение пути от рекурсивных к нерекурсивным фиксированным вещам для меня. Очень странно...
Ответ 5
Новая версия Framework Parse нуждается в обновлении.
Например, вы должны вставить libsqlite3.0.dylib в библиотеку Binary With Libraries и обновить заголовочный файл С#import и #import
Ответ 6
Использование классов Objective C в Swift
Если вы собираетесь импортировать код в пределах цели приложения (Mixing Swift и Objective-C в одном проекте), вам следует использовать файл bridging header
, чтобы представить код Objective C для кода Swift. [Mixing Swift and Objective-C code in a project]
В этом посте я опишу, как импортировать инфраструктуру Objective-C в код Swift
Быстрый потребитель → Динамическая структура Objective-C
Версия Xcode 10.2.1
Создать каркас Objective-C
Создайте каркасный проект или создайте целевой каркас
File -> New -> Project... -> Cocoa Touch Framework
//or
Project editor -> Add a Target -> Cocoa Touch Framework
Будут созданы два файла:
Info.plist
- Build Settings -> Info.plist File
<product_name>.h
- Build Phases -> Headers
. Это заголовочный файл зонтика [About]
Добавьте все файлы .h
в файл зонтика, который будет открыт для потребителя
#import "header_1.h"
#import "header_2.h"
Добавить файлы реализации .m
Select '.m' file -> Select File Inspectors Tab -> Target Membership -> Select the target
//or
Project editor -> select a target -> Build Phases -> Compile Sources -> add files
Добавить файлы заголовков .h
, которые были перечислены в <product_name>.h
(header_1.h
, header_2.h
)[can not do it] [public target membership]
Select '.h' file -> Select File Inspectors Tab -> Target Membership -> Select the target and make it **public**
//or
Project editor -> select a target -> Build Phases -> Headers -> add files to the **public** zone
Построить структуру - ⌘ Command + B или Product -> Build
Примечание. Убедитесь, что вы создали структуру для той же архитектуры процессов, что и код клиента.
Найти сгенерированный вывод[Build location]
Products group -> <product_name>.framework -> Show in Finder
Структура включает в себя
Info.plist
- Папка
Modules
с:
module.modulemap
[About] [Custom modulemap] Этот файл был создан автоматически, поскольку Build Settings -> Defines Module -> YES
- Папка
Headers
с:
- файлы из раздела
Headers
. Есть открытые интерфейсы/определения
![]()
Использование Objective-C Framework
Drag and drop
двоичный файл в проект Xcode[About]
Embed binaries
[Library not loaded] [Link vs Embed]
Project editor -> select a target -> General -> Embedded Binaries -> path to '<product_name>.framework' file
Я автоматически добавлю фреймворк в:
Project editor -> select a target -> General -> Linked Frameworks and Libraries
Project editor -> select a target -> Build Phases -> Embed Frameworks
Project editor -> select a target -> Build Phases -> Link Binary With Libraries
Добавить Framework Search paths
[Module not found] [Recursive path]
Project editor -> select a target -> Build Settings -> Search Paths -> Framework Search paths -> add path to the parent of '<product_name>.framework' file
Импортировать модуль в код клиента Swift[module_name]
import module_name
Больше примеров здесь
Ответ 7
' Objective-C заголовок заголовка "сделает трюк.
Хорошо описано в ссылка ( " Использование Parse with Swift и Xcode 6" )