前言
cocoapods是一款强大的框架依赖构建的工具,类似于java中的maven,可以快速搭建你项目中需要的框架,并且它可以自动帮你关联好第三方库之间的依赖关系, 这个很像ubuntu下的apt安装软件,自动帮你下载需要的依赖。
使用cocoapod可以轻松的创建框架,发布到github上,可以让全世界的开发者下载到你的框架,并且使用,如果能为全世界的开源社区做点贡献,也是一件非常兴奋的事情。
开发静态库有两种方法:
手动创建框架
手动创建比较繁琐,而且容易出现问题,大致步骤如下:
- 在xcode中创建一个
Cocoa Touch Static Library
- 创建
Podfile
文件 - 执行
pod install
完成整个项目的构建 - 如果需要demo,手动创建示例程序,使用pod添加对私有静态库的依赖,重复执行
pod install
来完成框架的构建
使用Pod创建框架
要求你系统中安装的cocoapod的版本>0.3
电脑环境:
- OS X ElCapitan 10.11.1
- cocoapod 0.39
- xcode 7.2
- ruby 2.0.0p645 (2015-04-13 revision 50299) [universal.x86_64-darwin15]
- Homebrew 0.9.5 (no git repository)
可以通过pod官网提供的命令来创建,让我们快速开始:
pod lib create podLib-Andrew
这行命令会自动从pod官网的仓库中下载模板 然后它会问你几个问题
- What language do you want to use?? [ ObjC / Swift ] =>看你需要
- Would you like to include a demo application with your library? [ Yes / No ]=>是否包含一个demo,我一般Yes
- Which testing frameworks will you use? [ Specta / Kiwi / None ] =>是否需要包含一个测试框架
- Would you like to do view based testing? [ Yes / No ]
- What is your class prefix? =>类的前缀是什么
执行成功之后,会自动用xcode打开工程,如果你的pod版本太新,比如1.0beta版本,可能不会自动创建workspace工作目录,这是由于pod1.0有些语法变了,你要相应的更改Podfile文件中的语法,具体参考官方最新的语法。
最终生成的目录结构如下:
- Example 你的实例代码文件夹
- .travis.yml -持续集成的配置文件 travis-ci
- _Pods.xcproject 工程的一个连接,类似快捷方式
- LICENSE 默认是 MIT License
- README.md 描述文件
- pod 你存储源代码的地方
设置你的框架
让我们看打开后的工程目录
- 你可以编辑Podspec metadata,包括里面的版本号和介绍等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
- s.name是我们库的名称
- s.version是库原代码版本号
- s.summary是对我们库的一个简单的介绍
- s.homepage声明库的主页
- s.license是所采用的授权版本
- s.author是库的作者
- s.platform是我们库所支持的软件平台,这在我们最后提交进行编译 时有用
- s.source声明原代码的地址.
按照默认配置,类库的源文件将位于Pod/Classes文件夹下,资源文件位于Pod/Assets文件夹下,可以修改s.source_files和s.resource_bundles来更换存放目录。s.public_header_files用来指定头文件的搜索位置。 s.frameworks和s.libraries指定依赖的SDK中的framework和类库,需要注意,依赖项不仅要包含你自己类库的依赖,还要包括所有第三方类库的依赖,只有这样当你的类库打包成.a或.framework时才能让其他项目正常使用.
建立远程版本库
现在让我们去github上建立一个仓库,名字和工程的名字保持一致podLib-Andrew
切换到终端,进入刚才的工程的根目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
编写源代码
在Pod的classes文件夹中新建一个类 StringUtils
StringUtils.h
1 2 3 4 5 |
|
StringUtils.m
1 2 3 4 5 6 7 |
|
注意源代码的存放位置一定要和 .podspec中的 s.source 路径要一致,不然不会起作用的。
运行 pod install
,也许你也注意到了,每次添加或者修改类,或者添加图片等操作,都要执行 pod install
或者pod update
来更新应用。
注意 如果是生成swift功能,在Podfile文件中一定要有
use_frameworks!
,这行命令是指定框框是动态框架,因为swift要求要么依赖全部是动态框架,要么全部不是,所以如果注释掉,会报编译报错;另外,swift工程中的源文件,如果想让外部调用的话,一定要声明成
public
, 这一点很重要。
Note
添加完源代码之后,如果要在demo工程中引用,发现是引用不到的,原因就是你必须要把类库加入到demo工程中才行,默认在Podfile文件中生成的类库是动态类库,即 .framework的。 我尝试了好久,一直引用不了,于是就改成生成.a静态库的方式,完美引用。
修改成.a类库的方法就是在 Podfile中,把#use_frameworks!
注释掉就行了,这行代码默认就是生成动态类库的。
加入持续集成(Travis CI)
这个模板包含了一个 .travis.yml
文件,加入你在Github上开关了你的框架,打开 travis-ci官网,并且用github账号登录并且同步,打开你要开源的项目,设置 on
提交本地代码库
修改podLib-Andrew.podspec 中的 s.source
,
s.source = { :git => "https://github.com/andrew-anlu/podLib-Andrew.git", :tag => s.version.to_s }
提交代码,并要打上tag
1 2 3 4 |
|
验证类库
开发完静态类库之后,需要运行 pod lib lint
验证一下类库是否符合 pod的要求。pod spec lint
也是用来验证是否有效,区别在于
- pod lib lint 不访问网络,只在本地验证
- pod spec lint 检查远程仓库和远程的tag
假如你只想发布一个私人的框架,请看这个教程 Private Specs Repos,如果你想发布一个已经存在的私有框架,可以用下面的命令
pod repo push SPEC_REPO *.podspec --verbose
发布框架
pod trunk push podLib-Andrew.podspec
如果发布成功,执行 pod search podLib
就会搜到你的框架
Done
👍