如何将Cocoapods集成到Swift项目中?

84

随着苹果公司推出了他们的新编程语言Swift,我想知道如何将它与现有的通过CocoaPods可用的Objective-C库集成?


你也可以阅读我最近的文章,了解如何在你的 Swift 项目中设置 CocoaPods。链接 - Hemang
6个回答

78

Cocoapods 0.36及以上版本引入了use_frameworks!指令,这意味着在Swift中导入Objective-C pods时不需要桥接头文件。

请查看下面一个完整的示例,使用MBProgressHUDAlamofire

1. Podfile

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.3'
use_frameworks!

pod 'Alamofire', '>= 1.2.2' # Swift pod
pod 'MBProgressHUD', '>= 0.9.1' # Objective-C pod

2. 删除

如果您不需要桥接头文件,请删除其中的 #imports 或者直接删除桥接头文件。如果您选择后者,则不要忘记在 Xcode 项目配置中删除对这个已删除的桥接头文件的路径。

3. 添加导入

在每个需要这些类的 Swift 文件顶部添加 import MBProgressHUD 和/或 import Alamofire

4. 如有必要,请修复枚举

现在您正在使用真正的框架,因此您的枚举已经移动了!您可能会发现一行 Swift 代码与桥接头文件一起使用时是正常的,如下所示:

progressHUD.mode = MBProgressHUDModeIndeterminate

那现在必须成为这个:

progressHUD.mode = MBProgressHUDMode.Indeterminate

这并不是什么大问题,但如果你正在使用许多 Objective-C 枚举类型,错误堆积可能会让你误以为存在比实际更大的问题。

(本答案来源)

供参考:我猜(你需要自己测试以确定)在 Podfile 中使用 use_frameworks! 指令只与针对 iOS >= 8 的 Xcode 项目兼容。


73

看起来这个过程类似于混编章节中描述的过程,该章节位于使用 Swift 与 Cocoa 和 Objective-C文档中。

  1. 创建您的 Podfile 文件并运行 pod install 命令。
  2. 创建一个新的 Objective-C 头文件,Example-Bridging-Header.h,并将其添加到项目中。
  3. 桥接头文件中添加 import 语句。
  4. 为您的目标设置 Objective-C Bridging Header

enter image description here

现在您可以在您的 Swift 文件中使用您的库,例如 MKUnits:

let kilograms = NSNumber.mass_kilogram(2)()
let pounds = NSNumber.mass_pound(10)()
let result = kilograms.add(pounds)
println(result)

更多内容请查看:将CocoaPods与Swift项目集成


3
对于我来说,导入语句需要包括项目目录,即#import <Reachability/Reachability.h>而不是#import "Reachability.h" - Kyle Clegg
只是一个更新。Swift PODs,即:Swift Libs也将很快由CocoaPods支持。下一个版本0.36将在CocoaPods中带来完整的Swift支持。大部分功能已经完成,您可以使用我的博客文章中的说明立即测试Swift Pods。 - Sachin Palewar
2
Cocoapods 0.36 及以上版本引入了 use_frameworks! 指令,这意味着在 Swift 中导入 Objective-C pods 不再需要桥接头文件(请参见下面的答案)。 - King-Wizard
5
除了上述内容之外,我发现我必须将 "Pods/**" 添加到我的 "用户头文件搜索路径" 中的构建设置中。我还必须将 "#import<Foundation/Foundation.h>" 添加到桥接文件中。 - Swifty McSwifterton
1
谢谢 Swifty。我尝试使用 use_frameworks!,但它对我没有起作用。将 "Pods/**" 添加到用户搜索路径中可以解决问题。 - user3246173
显示剩余3条评论

16

更新: CocoaPods 0.36 稳定版本已经发布,正式支持 Swift。


CocoaPods 最新的 0.36 版本现在已经支持 Swift,虽然还处于 beta 阶段但它可以使用。

首先需要在终端中运行以下命令安装 CocoaPods beta(目前为 beta 2)。

sudo gem install cocoapods --pre

就是这样了。你可以像平时一样添加Swift库。

但是,如果你想通过CocoaPods将一个用Objective-C编写的库添加到Swift项目中,有一个问题。你需要在你的Podfile中添加一行use_frameworks!。以下是一个示例。

use_frameworks!
platform :ios, '8.0'

pod 'MagicalRecord'

我也写了一篇关于此的博客文章


3
“use_frameworks!” 只适用于 iOS 版本大于等于 8,如果是这样的话,请在您的回答中写出这一点。 - Michael

2
如果在你的 bridging-header.h 文件中出现了文件未找到的错误,你可能需要确保你的 Pods 库被链接到了你的构建方案中。
CocoaPods 的故障排除部分描述了如何在第四项这里中进行此操作。

1
现在你可以通过运行sudo gem install cocoapods来使用cocoapods 0.36.0版本,该版本支持集成Swift框架。当你使用一个由Swift编写的框架时,你应该在Podfile中明确地使用它:
platform :ios, '8.0'
use_frameworks!
pod 'Alamofire'

0
在我的情况下,我发现我没有将Pods添加到主目标,而是只将它们添加到Podfile中的Test和TestUI目标,如此处所解释的那样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接