IOS设计Use CocoaPods With Swift (在 Swift 中利用 CocoaPods)仓酷云
iOS5开始支持CoreImage了还没去看Mac上的CI是很强大的CFNetwork---从来没用过我一般都会用ASIHttpRequset封装好的高层网络库OBJC实现的CFNetwork好像是C实现CoreLocation---获取位置的库工具很少本文先容怎样在Swift项目中利用CocoaPods。假如你已精晓BridgingHeader的办法,请间接跳到“扩大CocoaPods”一节。甚么是CocoaPods
CocoaPodsisthedependencymanagerforObjective-Cprojects.Ithasthousandsoflibrariesandcanhelpyouscaleyourprojectselegantly.1
从先容看,它是次要给Objective-C项目用的,可是我们能够很简单地夹杂Objective-C和Swift到同个项目,从而使用大批的CocoaPods库和Swift大度恬逸的语法。
作为iOS开辟老手,必定是要紧跟后人脚步,进修利用CocoaPods。
基本用法
这里复杂略过,请参考其他有数的文章。
安装
体系默许安装,能够参考其他教程2。在命令行下实行。
sudogeminstallcocoapods我的情况是HomeBrew
123456789#增加taobaoMirror否则被墙失落没举措下载gemsources-ahttp://ruby.taobao.org/#安装geminstallcocoapods#更新命令rbenvrehash#实行pod#此时一样平常会下载官方的一切PodSpec库,也能够用podsetup初始化情况
本文不盘算在安装部分泯灭太多工夫。但愿看到这里包管你的命令行下有可用的pod命令。
利用
假定我们已有个项目,叫ProjName,必要利用一些说明的CocoaPods库,好比AFNetworking3.
起首,命令行cd到我们的项目目次,一样平常ls命令会看到以下几个文件夹:
123ProjNameProjName.xcodeprojProjNameTests
赞,就是这里,创立一个Podfile文本文件,写进以下内容
12platform:ios,"8.0"pod"AFNetworking","~>2.0"
一样平常这么复杂的文件都是间接nano写。:)
间接创立Podfile,CocoaPods会创立一个项目同名的WorkSpace,然后增加一个叫Pods的项目,这个项目编译了局是一个叫libPods.a的链接库,它会增加到我们之前的ProjName项目中作为编译依附。
固然,经由过程命令行实行podinit也能够主动创立Podfile,并且能够主动剖析以后项目标target,绝对来讲更好,也更文雅。详细请参考官方手册。如许的优点是更仔细,还能够辨别多个子项目子target。道理迥然不同。
然后接上去,命令行实行openProjName.xcworkspace,注重这个可不是.xcodeproj,这个是CocoaPods为我们创立的一个WorkSpace,包括我们之前的项目,和Pods依附。
入手下手编码历程。间接在代码里挪用,好比写在某个按钮的@IBAction里:
1234567891011121314151617letmanager=AFHTTPRequestOperationManager()leturl="http://api.openweathermap.org/data/2.5/weather"println(url)letparams=["lat":39.26,"lon":41.03,"cnt":0]println(params)manager.GET(url,parameters:params,success:{(operation:AFHTTPRequestOperation!,responseObject:AnyObject!)inprintln("JSON:"+responseObject.description!)},failure:{(operation:AFHTTPRequestOperation!,error:NSError!)inprintln("Error:"+error.localizedDescription)})
这里间接抄了JakeLin的SwiftWeather代码4,就一小段,但愿他不会打我。
Swift坑爹了
看起来貌似我们已能够在Swift中利用AFNetworking了。了局刚写几句代码一堆类和变量找不到界说,并且坑爹的是良多时分我们只能靠推测,判别这些Objective-C的界说转换成Swift界说是甚么模样,用起来就是完整靠蒙!
这不迷信!
这都三星期了,以是人人都探索出了挪用的办法,那就是依照和Objective-C代码混编的例子,增加BridgingHeader!
持续
之前复杂先容过和Objective-C交互的内容5,人人能够往围不雅。
一样平常说来,你在Swift项目新建Objective-C类的时分,间接弹出是不是创立BridgeHeader的窗口,点YES就是了,这时候候一样平常多出来个ProjectName-Bridging-Header.h。然后删失落这个类,BridgingHeader头文件还在。
在这个BridgingHeader文件里写进要导进的CocoaPods库,就能够在Swift中利用了。
#import<AFNetworking/AFNetworking.h>假如没有主动创立头文件的话,这个设置在项目标BuildSettings中的SwiftCompiler–CodeGeneration子项里。
创立一个头文件,指定为BridgingHeader也能够。
然后编译,乐成实行!
这就完事了?
实践上,前两天刚写一篇Swift的模块体系,把恣意Objective-C库当作SwiftModule是可行的。事先就以为这个工具应当是大概完整进进CocoaPods的,可是在官方repo找了下发明,之前有人提过增添module.map撑持,了局CocoaPods的人以为这个是llvm外部特征,issue被封闭了。#2216比来又被提起,我在前面提了下Swift撑持,但愿官方靠谱。
以是上面的内容,就是,我们是不是能够在CocoaPods上到场module.map撑持,然后间接在Swift中importModuleName?
扩大CocoaPods
思索了多种体例,最初选择了Hook的体例。假如Ruby手艺充足好,也许能够间接写个插件。大概间接改官方代码给官方提交。可是其实才能无限。相干的module.map语法参考llvm官方手册Modules–Clang3.5documentation。用了最复杂的功效。大概碰到庞大的PodSpec就不起感化了,可是道理云云,信任小同伴们已晓得怎样做了。
今朝我的Podfile也许是这个模样:
12345678901234567891
post_install是Podfile的一种hook机制,能够用来到场自界说操纵。我在这里的写的逻辑就是,针对一切的Pod天生一个module.map文件。位于Pods/Headers/,这个目次被CocoaPods主动设置为项目标HeaderSearchPath以是不必要分外处置。默许我们的Swift文件就找失掉。
个中normalized_pod_name用于处置百度舆图APISDK这一类名字带减号的库,由于他们不克不及作为ModuleName,实践上也许有更好的办法来处置。
实践效果
实测发明完整没有成绩,间接importAFNetworking大概importBaiduMapsiOSSDK都能够。
并且很不错的一点是,按住Command键,然后鼠标点击模块名、类名等,会跳转到Swift界说。
坑
碰到提醒.pcm文件outdate的情形下必要你删除$HOME/Library/Developer/Xcode/DerivedData/ModuleCache目次,这个目次保留的是预编译模块,相似于预编译头文件。
有一些像NSCopying的接口(经@李禹龙提醒应该叫协议)不是特别用到开始不用了解NSObject创建对象的时候用+(id)alloc方法创建后需要init方法初始化 以上可以同时进行,学习过程中尽量不要纠结细节和底层,要知道ios是封闭的、OC是高级语言,我们不可能过多地去了解它的原理,至少在新手阶段没有必要。用迭代的方式更新你的知识,而不是死抠一个知识点。 在此,某不才愿将安装成功的Mac OS X系统的vmware虚拟机向有志学习iOS开发的各位学友们免费开放出来,经测试,可以在WindowsXP/Win7系统上完美运行,即便你的机器只有2GB内存。 看《iPhone 4与iPad开发基础教程》,跟着一步步来 然而,在vmware软件环境下,安装Mac OS X操作系统也是一件非常复杂的事情,而且还有可能花费了大量时间,最后却跑不起来。笔者也是经过了大量的实践, 最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。 培训时可以选择安卓,iOS,Java,因为实习的时候我选了安卓,当时实习时间只有三周,学的晕头转向,而java我也没学过,iOS的基础是C语言,这个大学里还是学过的,于是选择了iOS。 以上可以同时进行,学习过程中尽量不要纠结细节和底层,要知道ios是封闭的、OC是高级语言,我们不可能过多地去了解它的原理,至少在新手阶段没有必要。用迭代的方式更新你的知识,而不是死抠一个知识点。 众多研发人员积极参与到iOS平台的开发中来也就不足为奇了。
页:
[1]