Невозможно использовать как 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'

Я надеюсь, что это поможет вам