前段时间借助了CocoaPods进行组件化开发,现在总结下操作步骤和遇到的问题,以供以后使用,借助Carthage进行组件化实际原理和步骤是相同的。
创建私有Pod仓库
在git服务器上创建私有仓库
执行命令
pod repo add
添加私有仓库(HTSpecs是私有仓库名称)
$ pod repo add HTSpecs git@192.168.80.136:IOS/HTSpecs.git
- 执行命令
pod repo list
检查是否添加成功
$ pod repo list
创建私有Pod组件库
-
创建模板项目
pod lib create 项目名
第一个问题是我们需要选择的开发语言,这里我们选择
ObjC
;第二个问题是询问是否包含一个Demo项目,一般会选择
Yes
,其他问题根据实际情况选择。 -
Pod会自动在当前目录生成一个项目,配置项目中的
podspec
文件
`s.version` 表示的是当前类库的版本号;//**要和tag值对应**
`s.source` 表示当前类库远程地址;
`s.sources_files` 表示类库的源文件存放目录;
`s.resource_bundles` 表示资源文件存放目录;
`s.frameworks` 表示类库依赖的framework;
`s.static_framework = true` 把当前项目内的framework编译成静态库,如果项目中包含其他闭源静态库需要加上此句;
`s.dependency` 表示依赖的第三方类库;
`s.requires_arc = true`,如果项目依赖了第三方类库,必须加上此句;
其他字段请参考http://guides.cocoapods.org/syntax/podspec.html
- 把需要导入的文件导入工程中,导入位置要与
podspec
中s.sources_files
配置的地址对应
**导入完成后执行git命令**
只执行一次,确认当前远程地址是否正确
1. 添加远程仓库
git remote add origin 仓库地址 // 仓库地址与.podspec文件中的s.source对应
2.提交修改的文件并打tag
git add .
git commit -a -m '修改内容'
git tag -a tag版本号 -m '修改内容' // tag版本号和podspec配置文件里的s.version保持一致
3.推送修改的分支和tag到远程仓库
git push -u origin master
git push --tags
- 使用
pod lib lint
验证类库是否符合 pod 的要求,可以使用--allow-warnings
来忽略一些警告,建议在打 tag 前运行此命令,检查自己写的pod是否报错,在push到远程Specs的时候(步骤5),会自动运行此步骤。
如果项目依赖了私有库,需要加上--sources
指定依赖库的所属 specs 地址,如下:
pod lib lint 项目名.podspec --allow-warnings --sources='git@192.168.80.136:IOS/HTSpecs.git,https://github.com/CocoaPods/Specs'
- 把当前项目的
podspec
文件push到私有源中
pod repo push HTSpecs YourPod.podspec --allow-warnings -- sources='git@192.168.80.136:IOS/HTSpecs.git,https://github.com/CocoaPods/Specs'
提交成功后gitlab里的私有仓库能看到上传的项目配置文件
之后提交新版本时按以下步骤进行:
检查是否可以编译成功(pod lib lint)-> 提交并打上对应的 tag -> 推送到对应的 spec(pod repo push)
使用私有库
在主项目里Podfile文件里添加需要引用私有源地址:
source 'git@192.168.80.136:IOS/HTSpecs.git'
source 'https://github.com/CocoaPods/Specs.git'
使用下面命令可以指定引入第三方的远程仓库地址:
pod 'HTNetwork',:git => 'git@192.168.80.136:IOS/HTNetwork.git'
编码注意
为避免提供给Pod外部时,出现引入错误,Pod中引用和继承第三方库需要按以下方式进行导入:
#if __has_include(<AFNetworking/AFNetworking.h>)
#import <AFNetworking/AFNetworking.h>
#else
#import "AFNetworking.h"
#endif
先用宏检查是否存在以第三方库形式导入的,是的话以此方式导入,不是的话以直接引入源码的方式导入。
给项目添加Carthage支持
- 打开Xcode,新建与pod库同名的打包工程。Xcode->
File
->New
->Project
,根据需要选择framework或者static library。
-
将创建好的相关文件复制到pod仓库的文件夹,并创建Cartfile文件,在Cartfile文件中写上所依赖的库。(可选,只为了获取第三方framework)
例:github "SnapKit/Masonry"
github "jdg/MBProgressHUD"
git "git@192.168.80.136:IOS/YTKNetwork.git"运行
carthage update --platform iOS --verbose
下载依赖的framework,操作完毕文件夹结构应该如下(红色是新增的文件),Carthage/Build路径下有打包好的第三方framework。
-
将代码和资源文件添加到打包工程并提交,提交之前修改文件夹中的
.gitconfig
配置文件,删除Carthage/Checkouts
前的注释。-
选择需要分享给carthage的target。
-
使用以下命令验证是否可以用carthage成功打包
carthage build --no-skip-current --platform iOS
或者直接编译指定的famework
carthage build YourFramework --no-skip-current --platform iOS
-
-