如何将Cocoapods与Swift项目整合?

正如苹果引入Swift这个他们的新编程语言,我想知道如何将它与通过CocoaPods提供的现有Objective-C库集成 ?

Cocoapods 0.36及以上版本介绍了use_frameworks! 这意味着在Swift中导入Objective-C窗格不需要桥接头。

请使用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,甚至删除桥头文件,如果你不需要它。 如果select后一种可能性,不要忘记在Xcode项目configuration中删除path(到这个被删除的桥接头文件)。

3.添加import

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

4.如有必要修复枚举

你现在正在使用真正的框架,所以你的枚举已经移动了! 你可能有一行Swift,这样的桥接头很好:

 progressHUD.mode = MBProgressHUDModeIndeterminate 

现在要成为这个:

 progressHUD.mode = MBProgressHUDMode.Indeterminate 

没有什么大不了的,但是大量的错误可能会导致你误入歧途,认为如果你使用了很多的Objective-C枚举,你会遇到一个比你更大的问题。

( 这个答案的来源 )

为了您的信息:我想(你将不得不自己testing一下)use_frameworks! 您的Podfile中的指令仅与iOS> = 8的Xcode项目兼容。

看来这个过程与Using Swift和Cocoa和Objective-C文档中的Mix and Match部分中描述的过程类似。

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

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


CocoaPods现在在最新的0.36版本中支持Swift。 它仍在testing阶段,但它的工作。

首先你需要安装CocoaPods beta(目前beta 2),在terminal中运行它。

 sudo gem install cocoapods --pre 

这是非常多的。 你可以像你通常那样添加Swift库。

但是如果你想通过CocoaPods将一个用Objective-C编写的库添加到一个Swift项目中,那么就有一个问题。 您需要添加行use_frameworks! 到您的Podfile。 这是一个例子。

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

我也写了一篇关于这个的博客文章 。

如果您在bridging-header.h中发现文件未find错误,则可能需要确保您的Pods库正在您的Build Scheme中链接。

CocoaPods疑难解答部分介绍了如何在这里项目#4下做到这一点

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

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

在我的情况下,我发现我不是将主窗口添加到主目标,而是只在这里解释的Podfile中的Test和TestUI目标。