创建静态库可以选择Framework或Static Library,分别对应于.framework和.a库。
.a库是纯二进制文件,当项目中含有.c和.cpp的类文件时,就需要使用.a库;.a文件不能直接使用,至少要有.h文件配合,而.framework文件可以直接使用;.framework中除了二进制文件外,还可以包含资源文件bundle(包括图片资源、xib、storyboard等等)。
.framework相当于是.a + .h + sourceFile,我们以创建.framework库为例。
1、在项目的TARGET -> Build Settings -> Linking中,找到Mach-O Type,将其修改为Static Library;
2、在项目的TARGET -> Build Settings -> Architectures中,找到Build Active Architecture Only,将其设置为NO。(Debug和Release都设置为NO。该属性设置为YES是为了debug的时候编译速度更快,因为它只会编译当前的architecture版本,而当设置为NO时它会编译所有的版本,编译出的版本是向下兼容的。因此如果我们是做组件库的,无论是Debug还是Release,都应该适配不同的设备。)
在项目中完成静态库的功能逻辑代码,然后配置需要公开的头文件,在TARGET -> Build Phases中找到Headers,展开后有Public、Private、Project三个目录,编写的文件默认是在Project下,将你需要公开的的头文件从Project中拖拽到Public目录下。
然后选中菜单栏Product -> Scheme -> Edit Scheme,找到Run下的Build Configuration,将其设置为Release,表示当前运行环境为Release环境。
接下来分别选择模拟器和真机进行编译(Command+B),编译成功后右键当前项目的Products目录下的framework,选择Show in Finder,找到两个framework对应的目录(分别位于Release-iphoneos下和Release-iphonesimulator下)。拷贝其中一份framework到任一目录(该目录为到时候合并用的目录),然后打开终端,使用如下命令进行framework合并:
lipo -create 路径1 路径2 -output 目标路径
注意:路径1、路径2、目标路径最后面的格式应为XXX.framework/XXX。
输出的目标路径就是合并后的我们最终需要的framework,它支持在模拟器和真机中运行。
打开终端,cd到需要存放的目录下,输入命令pod lib create XXX,回车会出现Cloning https://github.com/CocoaPods/pod-template.git
into XXX.,耐心等待几分钟,然后依次回答以下问题。
完成之后会自动创建并打开一个工程,然后将刚刚打包好的framework下的Header文件夹与合并后的framework放入Classes/XXX目录下,并删除它创建的ReplaceMe.m文件。
接着在终端cd到Example目录下输入pod install命令,回车后在Classes目录下的文件就可以在打开的工程目录下的pods下看到了。(如果导入的文件还依赖于第三方库,在podfile文件中添加需要的三方库并pod install即可,工程编译通过就OK了。)
最后我们需要将本地私有库和远程仓库进行连接。首先新建一个远程仓库,复制创建好的git链接“XXX.git”,在终端中cd到私有库的目录下,依次输入如下命令:
git add .
git commit -m "提交描述"
git remote add origin 远程仓库git
git push origin master(首次提交可能会出现各种问题,可以进行强制提交git push --force origin master)
提交后就可以在远程仓库中看到相关内容了,可以根据需要修改.podspec文件。然后进入私有库目录下对框架打tag标签,这里需要注意一定要对应.podspec里面的s.version。
git tag 版本号
git push --tags
然后就是将私有库的.podspec文件上传到本地Spec Repo。
pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
[Private Repo Name] 本地需要用来管理私有库的spec名称
[GitHub HTTPS clone URL] 管理私有库的仓库地址
然后就可以进行发布了,发布前记得先验证。
验证.podspec文件是否可用:pod lib lint --allow-warnings
验证远程仓库是否可用:pod spec lint --allow-warnings
最后提交.podspec文件到仓库。
pod repo push XXX XXX.podspec --allow-warnings
如果想要开源,可以输入以下命令进行发布。
pod trunk push --allow-warnings