如何将Cocoapods与Swift项目集成在一起?


Answers:


78

Cocoapods 0.36及更高版本引入了该use_frameworks!指令,该指令意味着在Swift中导入Objective-C Pod不需要桥接头。

请在下面找到使用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枚举相比,您遇到的问题更大。

此答案的来源

供您参考:我想(您必须自己进行测试以确保)use_frame正常!Podfile中的指令仅与面向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目标:

在此处输入图片说明

现在,您可以在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语句需要包含项目目录,即aka#import <Reachability/Reachability.h>而不是#import "Reachability.h"
凯尔·克莱格

只是一个更新。Swift POD,即:Swift Libs也将很快得到CocoaPods的支持。下一版本0.36将在CocoaPods中全面支持Swift。大部分功能已经完成,您可以立即按照我的博客文章
Sachin Palewar

2
Cocoapods 0.36及更高版本引入了use_frameworks!该指令意味着在Swift中导入Objective-C Pod不再需要桥接头(请参阅下面的答案)。
金向导《

5
除了上述内容外,我还发现我必须在“构建设置”的“用户标题搜索路径”中添加“ Pods / **”。我还必须将“ #import <Foundation / Foundation.h>”添加到桥文件中。
Swifty McSwifterton,2015年

1
谢谢你Swifty。我尝试过use_frameworks!但这对我没有用。将“ Pods / **”添加到用户搜索路径是可行的。
user3246173 2015年

16

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


CocoaPods现在在其最新的0.36版本中支持Swift。它仍处于测试阶段,但可以运行。

首先,您需要通过在终端中运行CocoaPods beta(当前为beta 2)来安装它。

sudo gem install cocoapods --pre

就是这样。您可以像平常一样添加Swift库。

但是,如果您想通过CocoaPods将用Objective-C编写的库添加到Swift项目中,就会遇到麻烦。您需要将该行添加use_frameworks!到Podfile中。这是一个例子。

use_frameworks!
platform :ios, '8.0'

pod 'MagicalRecord'

我也为此写了一篇博客文章


3
use_frameworks!仅适用于iOS> = 8对吗?如果是这样,您应该在答案中写下来。

2

如果在bridging-header.h中遇到找不到文件的错误,则可能要确保Pods库已在构建方案中链接。

CocoaPods疑难解答部分在此处的项目#4下介绍了如何执行此操作


1

现在,您可以通过运行来使用cocoapods 0.36.0版本,sudo gem install cocoapods该版本支持集成swift框架。当使用swift编写的框架时,应在Podfile中显式使用它:

platform :ios, '8.0'
use_frameworks!
pod 'Alamofire'

0

以我为例,我发现我是不添加荚主要目标,但仅适用于检测和TestUI目标在Podfile作为解释在这里

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.