iOS pods创立私有库
如何创立私有库
要创立私有Pod,首先我们需要两个私有仓库,code repo放私有Pod源码,spec repo放私有Pod的说明书(相似公有Pod的CocoaPods/Specs)。
repo简介
- code repository:代码仓库,我们把项目代码上传到这个仓库。
spec repository:配置仓库,所有的配置按照包名、版本号分门别类的存放在这个仓库。这个仓库只用来存放.Podspec文件,不存放代码。
image.png
步骤
假如之前已经有私有spec repo,无需再建。假如没有,需要新建。创立一个私有的Spec Repo,增加其到本地 – 在本地创立一个叫bbaseRouter的文件夹
image.png
建立 本地代码仓库增加远程spec repo,可以了解为建立远程spec repo 的关联关系
pod repo add [Private Repo Name] [your_privateSpecs.git]
image.png
假如执行成功,之后便可以通过pod repo list命令查看本地Spec仓库列表,正常情况下会有一个公有的CocoaPods官方的master repo 和你的 privateSpecs repo,并可以看到它们在本地的存放路径(其实在~/.cocoapods/repos目录下)。
在想要创立的目录文件夹下,创立Pod私有库 (上图中以及包含该脚本)
pod lib create BBaseRouter目录结构如下:
├── Example #demo APP│ ├── BBaseRouter│ ├── BBaseRouter.xcodeproj│ ├── BBaseRouter.xcworkspace│ ├── Podfile #demo APP 的依赖形容文件│ ├── Pods #demo APP 的依赖文件│ └── Tests├── BBaseRouter #库目录│ ├── Assets #资源文件│ └── Classes #类文件├── BBaseRouter.podspec #podspec文件└── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj主要有两部分组成:* BBaseRouter: 组件源码* Example:Demo 工程,会依赖 BBaseRouter 库到此 demo 工程,方便调试>pod lib会从 github 下载模版工程,创立完成会自动打开 Example 下的BBaseRouter.xcworkspace,在 pod 的工程下有一个Development Pods目录,pod 把我们的源码做为 Demo 工程的一个 pod 库,这跟实际使用是一样的了,只不过我们要改源码。gitlab新建仓库;
将本地代码上传到gitlab
- 首先进入刚才创立的仓库,即要上传代码的目录
cd BBaseRouter* 执行git命令,此命令会在当前目录下创立一个.git文件夹git init* 将本地的仓库关联到gitlab上git remote add origin https://gitee.com/lumic/BBaseRouter.git* 将项目的所有文件增加到仓库中```//这个命令会把当前路径下的所有文件,增加到待上传的文件列表中。假如想增加某个特定的文件,只要把.换成特定的文件名就可.git add .
* 将add的文件commit到仓库 ```git commit -m "注释语句"* 上传代码到gitlab远程仓库```git push -u origin master
* 假如不小心将git远程地址配错了,再次配置提醒以下错误: > fatal: 远程 origin 已经存在。 此时只要要将远程配置删除,重新增就可: ```git remote rm origingit remote add origin https://gitlab.corp.cootek.com/pgd_portfolio/sdk/ios/bbaserouter.gitgit push -u origin masterpo
* 假如远程仓库已经有提交或者者改动,本地仓库没有升级远程仓库的内容,需要将远程代码库与本地代码库同步一下
“`
git pull origin master
但是可能会出现“fatal:拒绝合并无关历史。”的错误 ,需要用 ```git pull origin master --allow-unrelated-histories
截屏2020-03-13下午2.51.04.png
截屏2020-03-13下午2.51.40.png

- 修改podspec文件的内容
除了采用pod 自动从 github 下载pod模版工程的方法,同样也可以基于原有的项目工程文件建立pod库。
操作方式:
在私有Pod代码所在文件夹下执行pod spec create your_podName,则就会在该目录下创立一个your_podName.podspec说明书文件,之后便可以编辑这个说明书文件了。
- 进入podfile目录,pod install检测demo的有效性
pod库的开发过程中,向Pod文件夹中增加库文件和资源,而后进入podfile文件所在的目录下执行pod install命令,pod组件已经在Pods子工程下Development Pods/目录中了,而后编辑demo工程,测试组件。新建的pod库没有在Pods目录下是由于本地测试的缘故。
- 提交源代码并打tag,检测podspec文件的有效性
pod spec lint BBaseRouter.podspec --allow-warnings git tag -m "first release" 0.1.0 git push --tags #推送tag到远端仓库由于podspec文件中获取Git版本控制的项目需要tag号,所以我们要打上一个tag。
截屏2020-03-13下午2.59.51.png
注意:这里tag必需跟podspec文件中的tag保持一致,由于CocoaPods是通过podspec文件中的tag去找源文件的,假如tag对应不起来就会验证失败。
验证podspec文件有效性
有两种验证方式:
- 本地验证:pod lib lint your_podName.podspec
- 联网验证:pod spec lint your_podName.podspec
pod lib lintpod lib lint 假如有警告,会导致无法通过,需要增加--allow-warnings,允许警告假如使用了c函数或者静态库,需要增加--use-libraries假如同时依赖了公有库和私有库,你必需指定源才行,由于默认只会去公有源中查找对应的依赖,需要增加库的源--sources='https://xxxx'
验证通过后,代表这个podspec文件是合格的。
截屏2020-03-13下午2.59.44.png
- 向Spec Repo提交podspec(提交说明书文件到私有说明书库)
pod repo push bbaseRouter BBaseRouter.podspec#前面是本地Repo名字(就是本地代码仓库文件夹名称) 后面是podspec名字 (spec的名称)#同样的加上上面验证时使用到的可选参数
截屏2020-03-13下午3.01.55.png
私有组件库制作完成后,可以使用pod search命令验证一下。
image.png
SubSpec:
配置subspec
s.subspec 'Analytics' do |ss| ss.dependency 'UMengAnalytics', '~> 4.2.4' ss.source_files = 'BBaseRouter/Classes/Analytics/**/*' ss.public_header_files = 'BBaseRouter/Classes/Analytics/*.h' end这里上传代码到远程分支。打tag,并pod repo push bbaseRouter BBaseRouter.podspec 。这里的tag需要和podspec中的版本保持一致
执行 pod lib lint 报错 我们使用pod lib lint –allow-warnings
image.png
在 pod repo push bbaseRouter BBaseRouter.podspec –allow-warnings
image.png
image.png
如何引入subspec,只要要在podfile文件中修改,这是后我们只会导入子subspec中的文件
source ' CocoaPods/Specs.git'source 'https://gitee.com/lumic/BBaseRouterSpec.git'use_frameworks!platform :ios, '8.0'target 'BBaseRouter_Example' do# pod 'BBaseRouter', :path => '../'pod 'BBaseRouter/Analytics', '~> 0.2.0' target 'BBaseRouter_Tests' do inherit! :search_paths endend
image.png
开发过程中,我们只需在Example文件中pod install 将代码拉到本地Development Pods中进行开发
image.png
PO:可能遇到错误
ERROR | [iOS] unknown: Encountered an unknown error (The ‘Pods-App’ target has transitive dependencies that include static binaries: (/private/var/folders/_r/rtmkt9590l7gkq8zscryyqz80000gn/T/CocoaPods-Lint-20180419-3650-1tkys6n-CBBase58/Pods/OpenSSL-Universal/lib-ios/libcrypto.a and /private/var/folders/_r/rtmkt9590l7gkq8zscryyqz80000gn/T/CocoaPods-Lint-20180419-3650-1tkys6n-CBBase58/Pods/OpenSSL-Universal/lib-ios/libssl.a)) during validation.
报错用这种命令:
pod lib lint –use-libraries
git报错:
git@gitlab.corp.cootek.com: Permission denied (publickey).
导致代码无法拉取,升级,可能是由于配置新的ssh导致,需要重新获取分支
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS pods创立私有库