参考来源1:cloud.tencent.com/developer/a...
参考来源2:juejin.cn/post/703119...
私有远程库是为了防止别人访问,但是又能支持pod导入的一种很好的解决方案,一般公司项目或自己的私有项目模块采用这个方式可以实现组件化。
准备工作
私有仓库需要准备:
-
1、支持cocoaPods的电脑(自行百度)
-
2、一个存储私有仓库索引的仓库地址
目的是在进行pod的时候,让pod在这个仓库中去找
-
3、一个存储组件(代码)的仓库
pod在私有仓库中找到索引之后,到这个仓库来down源码
创建索引仓库并将其添加到本地
查看本地的所有仓库索引
pod repo
bash
% pod repo
aliyun-aliyun-specs
- Type: git (master)
- URL: https://github.com/aliyun/aliyun-specs.git
- Path: /Users/jasonOs/.cocoapods/repos/aliyun-aliyun-specs
cocoapods
- Type: git (remotes/origin/master)
- URL: https://github.com/CocoaPods/Specs.git
- Path: /Users/jasonOs/.cocoapods/repos/cocoapods
trunk
- Type: CDN
- URL: https://cdn.cocoapods.org/
- Path: /Users/jasonOs/.cocoapods/repos/trunk
3 repos
此时能看到,本地一共有3个索引仓库,这这个都很熟悉,是公共索引仓库。我们要讲自己的索引仓库也加进来
创建自己的仓库索引
这个没什么特别,就是和创建一个远程仓库而已,这里以gitee为例:
添加自己的仓库索引到本地
上面创建了一个仓库,将仓库的地址复制出来(建议用https的方式,如果用ssl,需要配置
)。
pod repo add 自己定义的仓库名字和远程仓库那个名字无关 远程仓库地址
csharp
// eg:
pod repo add MYSpec https://gitee.com/xxx/test-spec.git
此时再执行pod repo
,发现自己的远程仓库加到本地了
typescript
pod repo
..........
MYSpec
- Type: git (unknown)
- URL: https://gitee.com/xxxx/test-spec.git
- Path: /Users/98-elden/.cocoapods/repos/MYSpec
..........
4 repos
删除本地仓库索引
删除本地repo
$ pod repo remove name
更新本地的Pod 索引库的缓存信息
$ pod repo update [--verbose]
远程仓库加好了, 这个先放一边
创建工程仓库
这个仓库是用来存储源码的
自己创建一个远程工程仓库
仓库地址:https://gitee.com/xxx/product.git
我习惯用sourceTree将远程仓库导入本地。
通过sourceTree 将远程仓库导入本地后,进入这个仓库目录
创建一个索引和示例工程
这个仓库目录,直接用pod命令创建
pod lib create KitSource
vbnet
$ pod lib create KitSource
Cloning `https://github.com/CocoaPods/pod-template.git` into `KitSource`.
Configuring KitSource template.
security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.
------------------------------
To get you started we need to ask a few questions, this should only take a minute.
If this is your first time we recommend running through with the guide:
- https://guides.cocoapods.org/making/using-pod-lib-create.html
( hold cmd and double click links to open in a browser. )
What platform do you want to use?? [ iOS / macOS ]
> iOS
What language do you want to use?? [ Swift / ObjC ]
> ObjC
// 是否创建一个实例工程 这里输入YES,方便自己测试代码
Would you like to include a demo application with your library? [ Yes / No ]
> YES
// 用那种测试框架
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None
Would you like to do view based testing? [ Yes / No ]
> No
What is your class prefix?
> Kit
security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.
security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.
security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.
security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.
security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.
security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.
Running pod install on your new library.
Analyzing dependencies
Downloading dependencies
Installing KitSource (0.1.0)
Generating Pods project
Integrating client project
[!] Please close any current Xcode sessions and use `KitSource.xcworkspace` for this project from now on.
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
[!] Your project does not explicitly specify the CocoaPods master specs repo. Since CDN is now used as the default, you may safely remove it from your repos directory via `pod repo remove master`. To suppress this warning please add `warn_for_unused_master_specs_repo => false` to your Podfile.
Ace! you're ready to go!
We will start you off by opening your project in Xcode
open 'KitSource/Example/KitSource.xcworkspace'
To learn more about the template see `https://github.com/CocoaPods/pod-template.git`.
To learn more about creating a new pod, see `https://guides.cocoapods.org/making/making-a-cocoapod`.
jasonOs@MacdeMacBook-Pro PodProduct %
此时会自动打开示例工程,打开工程目录,找到这个目录
把东西放在对应的目录之后,打开工程的podfile,可以看到在这个文件里,已经有pod加入
pod 'KitSource', :path => '../'
cd到对应的podfile上一级目录 ,进行 pod install
此时工程里面就引入了我们加入的代码
对工程进行修改和测试,保证项目可用。
修改索引信息
找到工程中的KitSource.podspec文件,主要修改一下信息
ini
s.name = 'KitSource' s.version = '0.1.0'
s.summary = 'KitSource.'
s.description = <<-DESC
一段描述
DESC
s.homepage = '主页:一般可以用仓库地址去掉后面那段 ,比如:https://gitee.com/xxx'
s.source = { :git => '工程仓库地址,比如:https://gitee.com/xxx/product.git', :tag => s.version.to_s }
s.source_files = 'KitSource/Classes/**/*'
更多注释参照:
ini
Pod::Spec.new do |s|
# pod 库名称
s.name = 'PodName'
# pod库 版本
s.version = '0.1.0'
# pod 简述 pod search 的时候显示
s.summary = 'A short description of PodName.'
# 详细介绍
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
# 项目主页 要填写可以访问到的地址,不然验证不通过
s.homepage = 'https://github.com/zhaixingxing/PodName'
# 开源协议 必须要有
s.license = { :type => 'MIT', :file => 'LICENSE' }
# 作者信息
# Pod 屏幕截图,支持单个或者数组,主要适用于UI类的pod库。cocoapods推荐使用gif
# s.screenshot = '图片URL'
# s.screenshots = [ '图片URL','图片URL' ]
s.author = { 'zhaixingxing' => 'xxx@126.com' }
# 项目地址 不支持ssh的地址,验证不通过,只支持HTTP和HTTPS,最好使用HTTPS
s.source = { :git => 'https://github.com/zhaixingxing/PodName.git', :tag => s.version.to_s }
# 多媒体介绍地址
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
# 说明文档地址
# s.documentation_url = 'http://www.example.com/docs.html'
# 支持的版本
s.ios.deployment_target = '9.0'
# 支持的swift版本
# s.swift_version = '5.0'
# 是否使用静态库。如果podfile指明了use_frameworks!命令,但是pod仓库需要使用静态库则需要设置
# s.static_framework = true
#是否使用ARC,如果指定具体文件,则具体的文件使用ARC
# s.requires_arc = true
# 资源文件
s.source_files = 'PodName/Classes/**/*'
# s.source_files = 'Classes/**/*.{h,m}', 'More_Classes/**/*.{h,m}'
# 资源库文件
# s.resource_bundles = {
# 'PodName' => ['PodName/Assets/*']
# }
# 依赖的系统库 多个用逗号隔开
# s.frameworks = 'UIKit', 'MapKit'
# 依赖的第三方framework 后面是路径
# s.vendored_frameworks = ['Module/*.framework']
# 依赖的第三方 .a 后面是路径
# s.vendored_library = 'Module/Classes/SDK/*.a'
# 依赖的 .a 多个用逗号隔开
s.libraries = ['xml2.2','sqlite3.0']
# 依赖的第三方库
# s.dependency 'AFNetworking', '~> 2.3'
# s.dependency 'SDWebImage'
# 公开的头文件
# s.public_header_files = 'Pod/Classes/**/*.h'
# 指定不公开的头文件
# s.private_header_files = 'Pod/Classes/**/*.h'
# 自定义前缀文件 默认为系统 头文件
# s.prefix_header_file = false
# s.prefix_header_file = 'iphone/include/prefix.pch'
# 向系统 pch 文件中添加头文件 多个用逗号隔开
# s.prefix_header_contents = '#import <UIKit/UIKit.h>' , '#import "Test.h"'
end
#子模块
s.subspec 'TestSub' do |ss|
# 子模块文件, 文件信息如上
ss.source_files = 'podName/Classes/TestSub/**/*'
end
修改好spec之后,将代码提交到远程仓库
1、将pod创建的工程整个丢到刚才创建的原厂仓库地址下。
方式1、通过sourceTree上传
方式2、通过命令上传
csharp
git add .
git commit -m '一段描述'
git remote add origin https://gitee.com/xxx/product.git
// 第一次push如果报错的话可以加上-f
// git push -f origin master
git push origin master
2、 打tag 需要与spec中的version中一致
lua
git tag '0.1.0'
git push --tags
此时在看远程仓库中,标签就有了
提交podspec到远端索引仓库
先校验
在上传spec文件前我们可以做一个验证来节省时间,不然每次都推送很久结果还是验证失败,会气死人的~
本地验证Spec的必填字段
arduino
// 本地验证不会验证 s.source 中的tag
pod lib lint
远端验证
pod spec lint
- 验证私有库提示 如果验证的是私有库,则在后面加上
--private
,否则会有警告,你可以选择--allow-warnings
来忽略该警告
vbnet
pod lib lint --private
pod spec lint --private
在校验时,如果报错,
参考这里
参考这里
提交仓库索引
将修改编辑好的spec提交到仓库索引
pod repo push 索引仓库 工程名.podspec
arduino
// eg:
// pod repo push MYSpec KitSource.podspec
项目中引用
创建新项目中,在podfile中的最前面加入库索引
bash
source 'https://gitee.com/xxx/test-spec.git'
引入库
arduino
pod 'KitSource'
此时通过pod install。就可以将代码导入到项目中了