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

Подключите платформу 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>. Эта строка не выдает ошибку, но, похоже, не имеет никакого значения.

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

4b9b3361

Ответ 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

Будут созданы два файла:

  1. Info.plist - Build Settings -> Info.plist File
  2. <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

Я автоматически добавлю фреймворк в:

  1. Project editor -> select a target -> General -> Linked Frameworks and Libraries
  2. Project editor -> select a target -> Build Phases -> Embed Frameworks
  3. 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" )