无法将 Swift 和 Obj-C 库与 Cocoapods 一起使用

Unable to use both Swift and Obj-C libs with Cocoapods

我刚刚开始一个新的 Swift 项目,我想使用不同的库。特别是,我想使用 Realm.io,一个 Obj-C 库。但是,我也想使用纯 Swift 库,例如 Alamofire 或 Dollar。

我使用 Cocoapods 来管理我的依赖项。我使用最新版本 (0.37.0) 和新的 use_frameworks! 标志。 pod install随时成功。

不幸的是,当我尝试构建我的项目时,出现了两个错误(针对我的主要目标):

其他导入工作正常。

我注意到以下几点:如果我删除纯 Swift 库和 use_frameworks,一切正常。我知道 this current issue from Cocoapods。但是,Realm 要求开发人员使用该标志应该不是问题。

这是我的 Podfile:

platform :ios, '8.0'
use_frameworks!

target 'rothrock' do
  pod 'Realm'
  pod 'Cent'
  pod 'SwiftyJSON'
  pod 'Alamofire'
end

target 'rothrockTests', :exclusive => true do
end

我没有使用桥接头。我应该吗?

有什么想法或解决方法吗?

您需要桥接 header 并在那里导入您的 Objective-C 库 header。

如果您只使用 Realm,您可以查看此文档以了解 Swift http://realm.io/docs/cocoa/(转到选项卡中的 CocoaPods)

Swift

  1. 安装 CocoaPods 0.36.0 或更高版本 ([sudo] gem install cocoapods)。
  2. 在您的 Podfile 中,将 use_frameworks!pod 'Realm' 添加到您的应用目标。
  3. 从命令行,运行 pod install。
  4. 使用 CocoaPods 生成的 .xcworkspace 文件来处理您的项目!
  5. 下载最新版本的 Realm 并解压 zip。
  6. 将位于 Swift/RLMSupport.swift 的文件拖到 Xcode 项目的文件导航器中,选中“需要时复制项目”复选框。

我刚刚在一个项目中安装了 Realm 库,其中包含您上面提到的一些库,例如 AlamofireSwiftyJSON 和其他人,当您构建项目甚至放置 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'

希望对你有所帮助

好的,这是完整的演练:

  1. 使用 Cocoapods 和 use_frameworks! 标志安装依赖项。
  2. 由于您需要使用 Objective-C 依赖项,因此创建桥接 header。您可以通过将 Objective-C class 导入您的 Swift 项目来轻松创建一个,而不是删除它(向导会询问您是否需要桥接 header)。否则,创建一个新的 header 文件。然后,导航到您的目标配置并在 Swift Compiler - Code Generation > Objective-C Bridging header.
  3. 中输入您的文件名
  4. 仍在您的目标配置中,在 Search Paths > User Header Search Paths 中添加一个新条目:Pods 作为值并将其标记为递归。
  5. 从您的代码中删除与您的 Objective-C 库相关的所有 import 指令。
  6. 构建您的项目。你应该成功了。