Невозможно использовать как Swift, так и Obj-C libs с Cocoapods
Я только что начал новый проект Swift, и я хотел бы использовать разные библиотеки. В частности, я хотел бы использовать Realm.io, библиотеку Obj-C. Но я также хотел бы использовать чистые библиотеки Swift, такие как Alamofire или Dollar.
Я использую Cocoapods для управления моими зависимостями. Я использую последнюю версию (0.37.0) и новый флаг use_frameworks!
. pod install
будет успешным в любое время.
К сожалению, когда я пытаюсь создать свой проект, я получаю две ошибки (для моей основной цели):
-
Umbrella header Realm.h not found
from module.modulemap
-
Could not build Objective-C module Realm
из любого файла с помощью import Realm
Другие импортные работы работают нормально.
Я заметил следующее: если удалить чистые Swift libs и use_frameworks
, все будет хорошо. Я знаю о этой текущей проблеме от Cocoapods. Тем не менее, это не должно быть проблемой, поскольку Realm просит разработчиков использовать этот флаг.
Вот мой подфайл:
platform :ios, '8.0'
use_frameworks!
target 'rothrock' do
pod 'Realm'
pod 'Cent'
pod 'SwiftyJSON'
pod 'Alamofire'
end
target 'rothrockTests', :exclusive => true do
end
Я не использую заголовок. Должен ли я?
Любая идея или обходное решение?
Ответы
Ответ 1
Хорошо, вот полное пошаговое руководство:
- Установите зависимости, используя Cocoapods и флаг
use_frameworks!
.
- Как вам нужно использовать зависимость Objective-C, создайте заголовок Bridging. Вы можете легко создать его, импортировав класс Objective-C в ваш проект Swift, а затем удалите его (мастер должен спросить вас, нужен ли заголовок моста). В противном случае создайте новый файл заголовка. Затем перейдите к вашей целевой конфигурации и введите имя своего файла в
Swift Compiler - Code Generation
> Objective-C Bridging header
.
- В вашей целевой конфигурации добавьте новую запись в
Search Paths
> User Header Search Paths
: Pods
как значение и помечайте ее как рекурсивную.
- Удалите с вашего кода инструкцию
import
по сравнению с вашей библиотекой Objective-C.
- Создайте свой проект. Вы должны иметь успех.
Ответ 2
Вам нужен заголовок для моста и импортируйте его заголовки библиотеки Objective-C.
Если вы используете только Realm, вы можете проверить эту документацию для Swift http://realm.io/docs/cocoa/ (перейдите в CocoaPods вниз на вкладках)
Swift
- Установите CocoaPods 0.36.0 или новее (
[sudo] gem install cocoapods
).
- В вашем подфайле добавьте
use_frameworks!
и pod 'Realm'
в свою целевую программу.
- В командной строке запустите pod install.
- Используйте файл .xcworkspace, сгенерированный CocoaPods, для работы над вашим проектом!
- Загрузите последнюю версию Realm и извлеките zip.
- Перетащите файл в Swift/RLMSupport.swift в File Navigator вашего проекта Xcode, установив флажок "Копировать элементы" в случае необходимости.
Ответ 3
Я только что установил библиотеку Realm в проекте, который у меня есть, с некоторыми из упомянутых выше библиотек, таких как Alamofire и SwiftyJSON, а другие и он отлично работает, когда вы строите проект и даже ставите import Realm
, никаких ошибок компиляции вообще.
Я использую Cocoapods 0.36.0, стабильную версию, и это мой PodFile:
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
platform :ios, '8.0'
link_with 'ApiWorkflow', 'ApiWorkflowTests'
pod 'SwiftyJSON', '~> 2.2'
pod 'Alamofire', '~> 1.2'
pod 'Typhoon', '~> 3.0'
pod 'SwiftCSV', '~> 0.1'
pod 'Realm'
Я надеюсь, что это поможет вам