一、pod 相关指令
新上架的pod 代码 不能search到解决方案
1.更新仓库 : pod setup
2.删除索引 : rm ~/Library/Caches/CocoaPods/search_index.json
3.搜索:pod search‘yourPod’
只更新pod 引用到的代码
安装项目中的库(不更新仓库):pod install --verbose --no-repo-update
更新项目中的库(不更新仓库):pod update --verbose --no-repo-update
命令加可选参数
查看详情过程(可以查看更多的打印信息): --verbose
允许警告(有警告会通不过,建议一直带上): --allow-warnings
二、创建 pod 本地仓库 (pod私有库创建)
1 、在本地gitlab 创建一个空的代码仓库 名称随便取 (以下用该URL: git.XXX.com/ios/iOSSpec.git做示例)。
专门给pod 建立索引的,这个项目建议只留在远程,本地代码不要上传到该服务器
2、将上述创建的仓库添加到pod 仓库索引中
打开命令行 输入: pod repo add[随便取个仓库名] git.XXX.com/ios/iOSSpec.git
输入: pod repo list 可以查看到除了github仓库还新增了刚刚[随便取个仓库名]
3、 最后 可以为‘ git.XXX.com/ios/ ’ 下的代码仓库进行 pod 上架了 (pod 上架步骤)
pod代码管理大概流程
三、pod 上架步骤
注意:以下pod指令cd 到 .git 的同级目录下即项目目录
1、创建 .podspec文件 并填写注册信息 (参考:podspec 注册说明书)
http://guides.cocoapods.org/syntax/podspec.html
例: pod spec create SGIfiniteView
第二次上架时候如果资源文件没有发生改变只需要修改一下版本号就好了
2、验证 .podspec文件
本地校验: pod lib lint xxx.podspec
远程校验: pod spec lint xxx.podspec 远程校验 要先执行 3 步骤
例:pod lib lint SGIfiniteView.podspec
这里验证通不过需要,根据报错信息修复相关的errores 或者warnings,查看详情过程(可以查看更多的打印信息)建议加上--verbose 。 祝你好运!
3、将代码打上tag,并push到远程/服务器代码仓库 (如:github.com)
注意:远程代码的tag与 .podspec文件中version要一至 打tag之前确保所有的git操作都是已提交确保本地代码与远程代码一致
ps: 使用git的tag 相关命令
创建tag
本地:git tag "0.0.1"
远程:git push --tags
删除tag
本地:git tag -d“tag version”
远程:git push origin :refs/tags/
4、提交podspec文件 发布版本
例:pod trunk push SGIfiniteView.podspec (第一次提交要注册pod账号)
ps:注册pod账号或者切换
使用以下命令
pod trunk register your_email_address ‘your name’ --description='xxx macbook pro'
如 $: pod trunk register 123456@qq.com “ShangSan”
然后邮箱会接收到cocoapod的验证邮件,将邮件中的链接打开就OK了
Tips:
如果pod trunk push失败了需要修改配置或者代码最好重新定义一个新的版本和git tag 否则需要删除git 原来的tag以及远程tag 重新打上tag 再提交验证
四、xxx .podspec 文件详解
Cocoapods 官网指南: http://guides.cocoapods.org/syntax/podspec.html
Pod::Spec.new do |s|
# ――― Spec Metadata概述 ———-#
#这里以 LYTUIKIT为例 地址:https://github.com/install-b/LYTUIKIT
// pod项目的名称 s.name = "LYTUIKIT"
// pod发布的版本号 要与git仓库的tag保持一致 s.version = "0.0.3"
// pod项目描述 s.summary =“pod项目简单的摘要”
s.description = <<-DESC
在这里填写pod 项目的描述
DESC// 宣传主页
s.homepage = "http://www.71ant.com"# ――― Spec License 协议 ――― #
// 默认一般都是MIT 这个在git仓库 创建工程时候 就需要配置成MIT 协议
s.license = "MIT"# ―――Author Metadata 作者信息――― #
// 配置作者名字和邮箱
s.author = { "ShangenZhang" => "645256685@qq.com" }# ――― Platform Specifics 支持的平台 ――― #
//只支持iOS
s.platform = :ios// 支持iOS 和 OSX 这个是假的例子 具体上网搜索
#s.platforms = :ios,:osX# ――― Source Location 地址路径配置 ――― #
// 1、’https://github.com/install-b/LYTUIKIT.git’是git仓库的路径 可以为本地gitlab上代码仓库地址
// 2、‘0.0.3’ 此次发布的版本与之对应的git仓库的
s.source = { :git => "https://github.com/install-b/LYTUIKIT.git",:tag => "0.0.3" }// 为了避免错误通常这样写
s.source = { :git => "https://github.com/install-b/LYTUIKIT.git",:tag => s.version }# ――― Source Code 源代码资源――― #
//这个是要输出给用户的所有源文件文件 这里只有.h和.a文件 eg:.c,.cpp,.m ……
s.source_files = "LYTUIKIT/**/*.{h,a}"// 这个是自己打包的.a 放在pod 工程里面引用 需要用到.a 一定要加这个
s.vendored_libraries = "LYTUIKIT/**/*.a"ps: 这里自己打的包名称一定要以“lib”开头,且‘lib’后面的名称不能与自己的pod名称相同 不分大小写
//还有自己写的framework 包
#s.vendored_framework =“XXX.framework”
#s.vendored_frameworks =“XXX.framework”,“YYY.framework”// 这个是需要别人导入的头文件引用
s.public_header_files = "LYTUIKIT/**/*.h"
ps:上面写的全部是相对路径 从 .podspec 文件所在目录开始算起
其中‘*’ 代表所有的意思 如*.h 值某个路径下的所有 h 文件 子文件夹下的不算
‘**’ 代表 该文件夹以及所有的子文件夹下的所有路径# ――― Resources 资源文件配置 ――― #
//一个bundle
#s.resource = 'LYTUIKIT/Bundles/LYFileSelector.bundle'//多个bundle
s.resources =['LYTUIKIT/Bundles/LYFileSelector.bundle','LYTUIKIT/Bundles/LYTChatProgressHUD.bundle']# ――― Project Linking 系统动态库连接的 ―――― #
// FRAMEWORK引用
s.framework = "UIKIT"
#s.frameworks = "UIKIT",“CORE TEXT”// tbd动态库连接
#s.library =“xml2”
s.libraries =“xml2”,“z”,“sqlite3.0”
注意:tbd 动态库 只要名称 lib前缀和后缀.tbd 都要去掉# ――― Project Settings 项目工程配置――― #
// ARC项目
s.requires_arc = true// builtSettings
s.xcconfig = {“OTHER_LDFLAGS”=>“$(inherited)-ObjC”,“ENABLE_BITCONDE” =>“NO”}# ―――Pod dependency pod第三方依赖――― #
// 假设依赖 三个 其他pod 仓库 例:
s.dependency 'AFNetworking','~> 1.0'
s.dependency 'RestKit/CoreData','~> 0.20.0'
s.ios.dependency 'MBProgressHUD','~> 0.5'end
子组件创建
#这里以 LYTSDK为例
参考地址:https://github.com/71sino/LYTSDK// 设置默认的子组件
s.default_subspec = 'LYTSDK'// s.subspec //为该组件设置子组件
//子组件1 “LYTFoundation”为子组件名称pod下载后子文件名称 |f|子组件命令缩写随便自己
s.subspec 'LYTFoundation' do |f|
f.framework = "Foundation"
f.source_files = 'FrameworkTest/LYTFoundation/**/*.{h,a}'
f.vendored_libraries = "FrameworkTest/LYTFoundation/*.a"
f.public_header_files = 'FrameworkTest/LYTFoundation/**/*.h'
end
s.subspec 'LYTCommonLib' do |com|
com.framework = "Foundation"
com.source_files = 'FrameworkTest/LYTCommonLib/**/*.{h,a}'
com.vendored_libraries = "FrameworkTest/LYTCommonLib/*.a"
com.public_header_files = 'FrameworkTest/LYTCommonLib/**/*.h'
end
s.subspec 'LYTSDK' do |sdk|
sdk.frameworks = "UIKit","CoreTelephony","UserNotifications"
sdk.libraries = "z","xml2","sqlite3.0"
sdk.source_files = "FrameworkTest/LYTSDK/*.h","FrameworkTest/LYTSDK/*.a"
sdk.vendored_libraries = "FrameworkTest/LYTSDK/*.a"
sdk.public_header_files = "FrameworkTest/LYTSDK/*.h"
//设置子组件依赖关系
sdk.dependency 'LYMqttSDK/LYTFoundation'
sdk.dependency 'LYMqttSDK/LYTCommonLib'
end