创建自己的私有远程Pod库

参考来源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。就可以将代码导入到项目中了

相关推荐
AirDroid_cn1 小时前
iPhone或iPad接收的文件怎么找?怎样删除?
ios·iphone·ipad·文件传输
Swift社区7 小时前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift
#摩斯先生7 小时前
Swift从0开始学习 对象和类 day3
ios·xcode·swift
没头脑的ht7 小时前
Swift内存访问冲突
开发语言·ios·swift
#摩斯先生7 小时前
Swift从0开始学习 并发性 day4
ios·xcode·swift
没头脑的ht7 小时前
Swift闭包的本质
开发语言·ios·swift
javaDocker12 小时前
业务架构、数据架构、应用架构和技术架构
架构
Jinkey13 小时前
FlutterBasic - GetBuilder、Obx、GetX<Controller>、GetxController 有啥区别
android·flutter·ios
JosieBook13 小时前
【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍
架构
.生产的驴14 小时前
SpringCloud OpenFeign用户转发在请求头中添加用户信息 微服务内部调用
spring boot·后端·spring·spring cloud·微服务·架构