怎样在Swift中使用cocoapods swift库

1162人阅读
swift(19)
从CocoaPods的从介绍来看,它是主要给Objective-C项目用的,但是我们可以很容易地混合Objective-C和Swift到同个项目,从而利用大量的CocoaPods库和Swift漂亮舒服的语法。
什么是 CocoaPods
&“CocoaPods is the dependency manager for Objective-C projects. It has thousands of libraries and
can help you scale your projects elegantly. ”
从介绍看,它是主要给 Objective-C 项目用的,但是我们可以很容易地混合 Objective-C 和 Swift 到同个项目,从而利用大量的 CocoaPods 库和 Swift 漂亮舒服的语法。
作为 iOS 开发新手,一定是要紧跟前人脚步,学习使用 CocoaPods 。
这里简单略过,请参考其他无数的文章。
系统默认安装,可以参考。在命令行下执行。
我的环境是 HomeBrew
本文不打算在安装部分耗费太多时间。希望看到这里保证你的命令行下有可用的 pod 命令。
假设我们已经有个项目,叫&ProjName&,需要使用一些注明的 CocoaPods 库,比如 AFNetworking3.
首先,命令行 cd 到我们的项目目录,一般 ls 命令会看到如下几个文件夹:
赞,就是这里,创建一个&Podfile&文本文件,写入如下内容
一般这么简单的文件都是直接 nano 写。 :)
直接创建&Podfile&, CocoaPods 会创建一个项目同名的 WorkSpace ,然后添加一个叫 Pods 的项目,这个项目编译结果是一个叫&libPods.a的链接库, 它会添加到我们之前的 ProjName 项目中作为编译依赖。
当然,通过命令行执行&pod init&也可以自动创建&Podfile,而且可以自动分析当前项目的 target ,相对来说更好,也更优雅。具体请参考官方手册。这样的好处是更细致,还可以区分多个子项目子 target 。原理大同小异。
然后接下来,命令行执行&open ProjName.xcworkspace,注意这个可不是&.xcodeproj,这个是 CocoaPods 为我们创建的一个 WorkSpace ,包含我们之前的项目,和 Pods 依赖。
开始编码过程。直接在代码里调用,比如写在某个按钮的&@IBAction&里:
这里直接抄了 JakeLin 的 SwiftWeather 代码4,就一小段,希望他不会打我。
Swift 坑爹了
看起来貌似我们已经可以在 Swift 中使用&AFNetworking&了。结果刚写几句代码一堆类和变量找不到定义,而且坑爹的是很多时候我们只能靠猜测,判断这些 Objective-C 的定义转换成 Swift 定义是什么样子,用起来就是完全靠蒙!
这不科学!
这都三礼拜了,所以大家都摸索出了调用的方法,那就是按照和 Objective-C 代码混编的例子,添加 Bridging Header !
之前简单介绍过和 Objective-C 交互的内容5,大家可以去围观。
一般说来,你在 Swift 项目新建 Objective-C 类的时候,直接弹出是否创建 Bridge Header 的窗口,点 YES 就是了,这时候一般多出来个&ProjectName-Bridging-Header.h&。然后删掉这个类, Bridging Header 头文件还在。
在这个 Bridging Header 文件里写入要导入的 CocoaPods 库,就可以在 Swift 中使用了。
如果没有自动创建头文件的话,这个配置在项目的 Build Settings 中的 Swift Compiler – Code Generation 子项里。
创建一个头文件,指定为 Bridging Header 也可以。
然后编译,成功执行!
这就完事了?
实际上,前两天刚写一篇&&, 把任意 Objective-C 库当做 Swift Module 是可行的。当时就觉得这个东西应该是可能完全进入 CocoaPods 的,但是在官方 repo 找了下发现,以前有人提过增加 module.map 支持,结果 CocoaPods 的人认为这个是 llvm 内部特性, issue 被关闭了。&最近又被提起,我在后面提了下
Swift 支持,希望官方靠谱。
所以下面的内容,就是,我们是否可以在 CocoaPods 上加入 module.map 支持,然后直接在 Swift 中 import ModuleName ?
扩展 CocoaPods
考虑了多种方式,最后选择了 Hook 的方式。如果 Ruby 技术足够好,或许可以直接写个插件。或者直接改官方代码给官方提交。但是实在能力有限。相关的 module.map 语法参考 llvm 官方手册&。用了最简单的功能。也许遇到复杂的 PodSpec 就不起作用了,但是原理如此,相信小伙伴们已经知道怎么做了。
目前我的 Podfile 大概是这个样子:
post_install&是&Podfile&的一种 hook 机制,可以用来加入自定义操作。我在这里的写的逻辑就是,针对所有的 Pod 生成一个&module.map&文件。 位于&Pods/Headers/,这个目录被
CocoaPods 自动设置为项目的 Header Search Path 所以不需要额外处理。默认我们的 Swift 文件就找得到。
其中&normalized_pod_name&用于处理百度地图 API SDK 这一类名字带减号的库,因为他们不能作为 Module Name ,实际上或许有更好的方法来处理。
实测发现完全没有问题,直接&import AFNetworking&或者&import BaiduMapsiOSSDK&都可以。
而且很不错的一点是,按住 Command 键,然后鼠标点击模块名、类名等,会跳转到 Swift 定义。
遇到提示&.pcm&文件 outdate 的情况下需要你删除&$HOME/Library/Developer/Xcode/DerivedData/ModuleCache&目录,这个目录保存的是预编译模块,类似于预编译头文件。
目前 Swift 还是有很多 BUG 的,调用&NSObject&也许会让编译器直接 segment fault ,不带任何出错信息。很伤情。此时请第一时间检查语法是否有诡异,其次将所有用到字符串或者&Optional&的地方都额外用变量处理,避免用字面常量。(个人经验)
如果多次调用&pod install&并在其中修改过&Podfile,那么有可能你的项目依赖会乱掉,多了不存在的&.a&文件到依赖或者多次包含。手工在项目树和项目选项里删除就可以了。此类编译错误都是链接错误。
本文提出了一种 Bridging Header 之外的使用 CocoaPods 库的方法。利用有限的 Ruby 知识写了个 Hook 。目前测试 OK 。
&CocoaPods
&CocoaChina 对 CocoaPods 的介绍
&(Swift 与 Objective-C 之间的交互)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1215806次
积分:11385
积分:11385
排名:第855名
原创:124篇
转载:155篇
评论:101条
(1)(1)(1)(3)(2)(2)(5)(11)(2)(1)(1)(1)(3)(6)(2)(3)(7)(4)(5)(4)(11)(2)(5)(6)(2)(23)(13)(21)(23)(60)(31)(9)(7)(3)中国领先的IT技术网站
51CTO旗下网站
怎样在swift中创建一个CocoaPods(2)
你可能对一些比较著名的开源的CocoaPods框架比较熟悉,比如Alamofire、MBProgressHUD。但是有时你可能找不到刚好满足你需求的pod,也或者你需要把一个大的项目拆分成小的,可重用的组件。幸运的是,创建你自己的CocoaPods是件很容易的事!
作者:Joshua Greene来源:| 13:44
首先,在&RWPickFlavor.xcworkspace&中创建下面的分组来归类你将要拷贝的文件:
Categories
Controllers
Views(Ice Cream,Storyboards &&Nibs)
从IceCreamShop.xcworkspace中的分组到对应的RWPickFlavor.xcworkspace&中的分组,对所有的文件执行拖拽并放开的操作 - 除了AppDelegate.swift&和LaunchScreen.xib,就像下面那样:
如果有提示跳出,要保证Copy items if needed这个选项被确认过了,这样所有的文件才是真正被拷贝而不是简单地链接。当你完成以后,RWPickFlavor&应该有下面的文件:
一旦你确定了所有的文件都已经被拷贝过来了,从IceCreamShop中删除所有的originals和任何空的分组,只剩下RWPickFlavor中的文件。小心不要删除下面这些:
AppDelegate.swift
LaunchScreen.xib
Images.xcassets
Supporting Files 分组下的任何文件
现在打开Info.plist,在Supporting Files那个分组下,找到Main storyboard file base name那一行并删除。
编译运行,应该不会有错的,最终你会看到黑色的屏幕上显示着 &Ice Cream Shop&的logo。
那么图片呢?
你可能已经注意到了你没有拷贝Resources分组,这是因为你只需要拷贝background.jpg这个图片本身到RWPickFlavor的Resources文件夹下,不是整个的Images.xcassets文件。
首先,你在RWPickFlavor中创建一个Resources分组。
然后,在IceCreamShop中选择&Images.xcassets,选中background右击并选择Show in Finder,就像下面那样:
现在把background.png从finder中拖拽到RMPickFlavor的resources分组中。当有弹出提示时,再次选中Copy items if needed选项。当你已经拷贝了图片,从IceCreamShop的Image.xcassets中删除原始的background图片。
最后,在Main.storyboard的Choose Your Flavor场景中的RMPickFlavor类里更新imageview的图片,这样他就指向了图片background.jpg而不是background。
不管你信不信,创建你的pod的最困难的部分已经完成了。
CocoaPods和Git
由于cocoapod是部署在git上面的, 每一个pod都需要有它自己的git目录.如果你已经有了git主机,你可以用它来放你的目录。
如果没有,是一个很不错的选择,因为它被众多的开发者所了解并且对开源的项目免费。
是另外一个不错的选择,它是免费的并且没有限制的,包括私有的目录,可以供达5个开发人员共同开发。
这个教程使用了github,但是你也可以用你自己的git服务器。
GitHub目录设置
首先,并你的github账号。
下一步,点击屏幕右上角的+(创建新的)图标并且选择下方的New repository.
输入RMPickFlavor作为目录名,并且选择Create repository。
Github将在你的账户下面创建一个新的目录,然后你将看到一个下面屏幕所示的Quick setup所展示的你的目录URL:
你将在某一时刻需要这个URL,所以保持这个页面打开。
现在你需要第二个目录来放你的私有pod规范 - 之后你将在这篇教程中用到它。
在一个新的标签页中打开;再次点击Create New图标并选择New repository。将这个目录取名为RWPodSpecs,并选择Create repository。
保持这个标签页打开之后在你需要这个URL的时候你可以轻松获取。
大家都在看猜你喜欢
热点头条头条热点头条
24H热文一周话题本月最赞
讲师:12人学习过
讲师:13人学习过
讲师:20人学习过
精选博文论坛热帖下载排行
本书是作者根据十年网站营销经验,特别是搜索引擎优化(SEO)实现营销方面的技术和实践总结。本书帮助读者建立搜索营销的概念,分析搜索营...
订阅51CTO邮刊假如你来到这里,说明你已经开始着手使用swift这门新语言了。
就像Java有Maven一样,Objective-C也有自己的依赖管理工具cocoapods。
但是由于swift才出来不久,目前很多cocoapods管理的第三方库依然是由Objective-C编写的。
为了能够在swift中使用这些类库,需要在Xcode中进行一些配置。
假设你的项目是基于cocoapods的,并且是通过XX.xcworkspace打开的。(Xcode6以上)
为了进行演示,假设导入的第三方库是。下面讲解如何在swift中使用该类库。
步骤一:创建头文件(该头文件是连接oc到swift的桥梁)
在project navigator中右击项目,选择New File... -& iOS -& Source -& Header File,给文件命名后(头文件命名任意,假设为Bridging-Header.h)保存。
步骤二:打开该文件,清空里面的内容,然后导入你想要的类库并保存。
#import &MBProgressHUD.h&
进入到Build Settings,在搜索框中输入bridg,找到Objective-C Bridging Header,选项,把头文件的路径赋值给该选项。如图所示:
使用引用的代码,比如在viewDidLoad方法里添加显示进度框:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
MBProgressHUD .showHUDAddedTo(self.view, animated: true)
运行效果如下:
--------------------
需要注意的是,假如不是通过cocoapods引入的类库,而是直接拷贝到项目中(Build Settings的Objective-C Bridging Header没有赋值过,Xcode会弹出如下对话框:
选择Yes后,项目的根目录下会自动创建一个名字为XXX-Bridging-Header.h的头文件(XXX为你的模块名(module name)一般就是你的product name),
另外在Build Settings的Objective-C Header File的值也被自动设成头文件的路径。
如图所示:
只要在自动生成的头文件里import你想要的第三方类库后,就可以随意在你的项目源文件里使用它了。
[reference怎样在Swift中使用CocoaPods_百度知道
怎样在Swift中使用CocoaPods
; + error.openweathermap: AFHTTPRequestOperation: &quot。当然,命令行 cd 到我们的项目目录,命令行执行 open ProjName.xcodeproj ProjNameTests 赞; 2。原理大同小异.03.GET(url, &quot.0&quot,比如写在某个按钮的 @IBAction 里.26,然后添加一个叫 Pods 的项目;lon&quot!) in
println(&quot:ios: { (operation,就是这里,也更优雅,这个是 CocoaPods 为我们创建的一个 WorkSpace ,这个项目编译结果是一个叫 libPods,
failure:0]
println(params)
manager:let manager = AFHTTPRequestOperationManager()
let url = &quot。然后接下来.0&quot,包含我们之前的项目。这样的好处是更细致, CocoaPods 会创建一个项目同名的 WorkSpace .: &quot,一般 ls 命令会看到如下几个文件夹ProjName ProjNlat&quot, 它会添加到我们之前的 ProjName 项目中作为编译依赖;~&gt, &quot!:)直接创建 Podfile 。具体请参考官方手册;Error.JSON.org/data/2;8: NSE
println(url)
let params = [&: { (operation.xcworkspace,注意这个可不是 ,而且可以自动分析当前项目的 target ,
error://api!)
success: 39。直接在代码里调用,和 Pods 依赖,
parameters: AnyObject。开始编码过程,通过命令行执行 pod init 也可以自动创建 Podfile,创建一个 Podfile 文本文件.5/weather" target="_blank">AFNetworking&quot.xcodeproj!, &quot, &quot,写入如下内容platform .5/weather&quot: params: AFHTTPRequestOperation,
responseO 一般这么简单的文件都是直接 nano 写; + responseObject://api: 41,需要使用一些注明的 CocoaPods 库!) in
println(&quot.a的链接库。 ,还可以区分多个子项目子 target .org/data/2;cnt&quot,相对来说更好;;<a href="http,比如 AFNetworking3,叫 ProjN pod &quot.首先假设我们已经有个项目
网络管理与维护
其他类似问题
为您推荐:
其他1条回答
个步骤,名字为 xxxx、编辑 xxxx,将想要导入的库 import 到这里: #import & File… 创建一个 Header File(iOS-&gt。 4;AFNetworking&#47,将 CocoaPods 导入 Swift 1,例如.h; New -&gt.h、使用 File -&gt,设置 Objective-C Bridging Header 为 xxxx、打开项目的 Build Settings、编辑 Podfile 文件并 pod install 2。 3.h;HeaderFile 模板);Source-&gt、创建;AFNetworking.h&gt
swift的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁怎样在Swift中使用CocoaPods_百度知道
怎样在Swift中使用CocoaPods
提问者采纳
这自从OS X 10。幸运的是首先你需要安装CocoaPods.7之后就实现了,CocoaPods被建立在Ruby上。打开终端并且输入以下命令行,而最近的Mac OS X版本带有Ruby
来自团队:
其他类似问题
为您推荐:
swift的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 cocoapods swift库 的文章

 

随机推荐