pod 本地仓库创建以及上架步骤

一、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 上架步骤

注意:以下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: 使用gittag 相关命令

    创建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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,113评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,644评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,340评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,449评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,445评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,166评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,442评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,105评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,601评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,066评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,161评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,792评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,351评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,352评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,584评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,618评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,916评论 2 344

推荐阅读更多精彩内容