如何将Cocoapods与Swift项目整合?
正如苹果引入Swift这个他们的新编程语言,我想知道如何将它与通过CocoaPods提供的现有Objective-C库集成 ?
Cocoapods 0.36及以上版本介绍了use_frameworks!
这意味着在Swift中导入Objective-C窗格不需要桥接头。
请使用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,甚至删除桥头文件,如果你不需要它。 如果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部分中描述的过程类似。
- 创build您的Podfile并运行
pod install
。 - 创build一个新的Objective-C头文件
Example-Bridging-Header.h
,并将其添加到项目中。 - 将导入语句添加到桥头 。
- 为您的目标设置
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目标。