如何将Cocoapods与Swift项目集成?

时间:2014-06-09 14:53:40

标签: ios objective-c xcode swift cocoapods

当Apple推出他们的新编程语言Swift时,我想知道如何将它与现有的CocoaPods提供的Objective-C库集成?

6 个答案:

答案 0 :(得分:78)

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

请使用 MBProgressHUD Alamofire 找到以下完整示例:

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枚举,那么一堆错误可能会让你误入歧途,说你遇到了更大的问题。

Source of this answer

供您参考:我猜(您必须自己测试以确定)use_frameworks! Podfile中的指令仅与面向iOS> = 8的Xcode项目兼容。

答案 1 :(得分:72)

该过程似乎与Mix and Match文档的Using Swift with Cocoa and Objective-C部分中描述的过程类似。

  1. 创建您的Podfile并运行pod install
  2. 创建一个新的Objective-C头文件Example-Bridging-Header.h,并将其添加到项目中。
  3. 将导入语句添加到网桥标题
  4. 为目标设置Objective-C Bridging Header
  5. 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)
    

    更多信息:Integrating Cocoapods with a Swift project

答案 2 :(得分:16)

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


CocoaPods现在支持Swift最新的0.36版本。它仍然处于测试阶段,但确实有效。

首先,您需要在终端中运行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'

我也写了blog post

答案 3 :(得分:2)

如果您在bridging-header.h中收到文件未找到错误,则可能需要确保在Build Scheme中链接了Pods库。

CocoaPods疑难解答部分介绍了如何在第4项here

项下执行此操作

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

在我的情况下,我发现我没有向主目标添加pod,而只是在Podfile中添加了Test和TestUI目标,如here所述。