手把手教你发布自己的CocoaPods开源库
下面我会通过一个名为IFMMenu的项目来讲解一下整个过程。
1.写好代码,上传到github
github上创建项目仓库的时候记得创建LICENSE(许可证/授权)文件,此文件必须要有。
github上创建项目仓库
2.将自己的项目打成tag
因为cocoapods是依赖tag版本的,所以必须打tag,以后再次更新只需要把你的项目打一个tag,然后修改.podspec文件中的版本接着提交到cocoapods官方就可以了,提交命令请看下面
- //为git打tag, 第一次需要在前面加一个v
- git tag "v1.0.0"
- git push --tags
3.注册CocoaPods
trunk需要CocoaPods 0.33版本以上,用pod --version命令查看版本,如果版本低,需要升级。
- pod --version
- //版本低于0.33
- sudo gen install cocoapods
- pod setup
已经注册过的不需要注册,怎么看自己有没有注册
- pod trunk me
pod trunk me信息
若未注册,执行以下命令,邮箱以及用户名请对号入座。用户名我使用的是Github上的用户名。
- // 加上--verbose可以输出详细错误信息,方便出错时查看。
- pod trunk register example@example.com 'liugangios' --verbose
注册完成之后会给你的邮箱发个邮件,进入邮箱邮件里面有个链接,需要点击确认一下。
注册完成后使用pod trunk me检验注册是否成功。
4.创建.podspec
cd到你项目的目录,执行命令
- pod spec create IFMMenu
5.编辑.podspec
创建好后,打开.podspec,删除注释, 前面有#的为注释,也可以用以下代码替换,然后编辑自己的库信息。
- Pod::Spec.new do |s|
- s.name = 'IFMMenu'
- s.version = '1.0.2'
- s.authors = { 'liugangios' => 'example@example.com' }
- s.homepage = 'https://github.com/liugangios/IFMMenu'
- s.summary = 'a dropdown menu for ios like wechat homepage.'
- s.source = { :git => 'https://github.com/liugangios/IFMMenu.git',
- :tag => s.version.to_s }
- s.license = { :type => "MIT", :file => "LICENSE" }
- s.platform = :ios, '7.0'
- s.requires_arc = true
- s.source_files = 'IFMMenu'
- s.public_header_files = 'IFMMenu/*.h'
- s.ios.deployment_target = '7.0'
- end
- s.name:名称,pod search搜索的关键词,注意这里一定要和.podspec的名称一样,否则报错
- s.version:版本号,to_s:返回一个字符串
- s.author:作者
- s.homepage:项目主页地址
- s.summary: 项目简介
- s.source:项目源码所在地址
- s.license:许可证
- s.platform:项目支持平台
- s.requires_arc: 是否支持ARC
- s.source_files:需要包含的源文件
- s.public_header_files:需要包含的头文件
- s.ios.deployment_target:支持的pod最低版本
其他一些非必要字段
- s.social_media_url:社交网址
- s.resources:资源文件
- s.dependency:依赖库,不能依赖未发布的库
- s.license= { :type => “MIT”, :file => “LICENSE” }
这里建议这样写,如果写别的会报警告,导致后面一直提交失败。
source_files写法及含义
- "IFMMenu/*
- "IFMMenu/IFMMenu/*.{h,m}"
- "IFMMenu/**/*.h"
*表示匹配所有文件
*.{h,m}表示匹配所有以.h和.m结尾的文件
**表示匹配所有子目录
s.source常见写法
- s.source = { :git => "https://github.com/liugangios/IFMMenu.git", :commit => "68defea" }
- s.source = { :git => "https://github.com/liugangios/IFMMenu.git", :tag => 1.0.0 }
- s.source = { :git => "https://github.com/liugangios/IFMMenu.git", :tag => s.version }
- commit => "68defea" 表示将这个Pod版本与Git仓库中某个commit绑定
- tag => 1.0.0表示将这个Pod版本与Git仓库中某个版本的comit绑定
- tag => s.version表示将这个Pod版本与Git仓库中相同版本的comit绑定
6.验证.podspec
到此检查一下你工程中有以下文件:
- 你的项目,
- .podspec文件,
- LICENSE文件
项目内文件
使用以下命令测试本地.podspec文件是否存在语法错误。
- pod spec lint IFMMenu.podspec --verbose
7.发布
- pod trunk push IFMMenu.podspec
时间较长,耐性等待,大概5-10分钟,发布成功后会有以下提示
发布成功截图
8.测试自己的cocoapods
这个时候使用pod search搜索的话会提示搜索不到,可以执行以下命令更新本地search_index.json文件
- rm ~/Library/Caches/CocoaPods/search_index.json
然后
- pod search IFMMenu
该命令会重新创建search_index.json文件,5-10分钟,耐性等待
搜索结果
完整命令
- git tag "v1.0.0"
- git push --tags
- pod trunk register example@example.com 'liugangios' --verbose
- pod trunk me
- pod spec create IFMMenu
- //编辑 IFMMenu.podspec
- pod spec lint IFMMenu.podspec
- pod trunk push IFMMenu.podspec
- rm ~/Library/Caches/CocoaPods/search_index.json
- pod search IFMMenu
报错处理
- [!] Unable to accept duplicate entry for: XXXXX (1.0.0)
意思是:不能接受同一版本的提交
解决方案:
1、执行如下命令
- git tag 1.0.1
- git push --tags
2、修改XXXX.podspec文件中的内容
- s.version = "1.0.1"
- s.source = { :Git => "https://github.com/xxx/xxx.git", :tag => "1.0.1" }
3、执行命令pod spec lint、pod trunk push 库名.podspec验证并提交到CocoPods
手把手教你发布自己的CocoaPods开源库相关推荐
- 【原】iOS:手把手教你发布代码到CocoaPods(Trunk方式)
概述 关于CocoaPods的介绍不在本文的主题范围内,如果你是iOS开发者却不知道CocoaPods,那可能要面壁30秒了.直奔主题,这篇文章主要介绍如果把你的代码发布到CocoaPods代码库中, ...
- iOS:手把手教你发布代码到CocoaPods(Trunk方式)
概述 关于CocoaPods的介绍不在本文的主题范围内,如果你是iOS开发者却不知道CocoaPods,那可能要面壁30秒了.直奔主题,这篇文章主要介绍如果把你的代码发布到CocoaPods代码库中, ...
- Python编程|手把手教植物大战僵尸,代码开源
前言 如题,手把手教Python实现植物大战僵尸游戏,代码简单易学,无需额外安装Python包,只要有pygame即可,文末获取全部素材及源代码~ 视频演示效果:https://www.bilibil ...
- 引入yml依赖包_手把手教你发布 Python 项目开源包
编译:机器之心,作者:Gabriel Lerner.Nathan Toubiana 好不容易码了个 python 项目,是不是很兴奋?那么怎么把这个项目发出去让大家看到呢?本文作者写了一份在 GitH ...
- 【小白向】手把手教你发布自己写的HTML静态网页
相对于C++.JAVA等编程语言的复杂难学,HTML/CSS/JS可以说是对刚接触计算机的同学最友好的编程语言了.特别是随着主流浏览器都支持了HTML5/CSS3,就算是新手, 只要费点心思,也容易就 ...
- 手把手教你发布一个Python包
本文主题如下: 编写一个包(Python 源代码),但不是本文的重点. 编译包,观察编译后的文件. 发布包,发布的包可以有多种类型. 如何在 Pypi 中查看已发布的包. 注意: 本文编写的包在 Py ...
- php composer源码打包,手把手教你发布自己的 Composer 包
一.前言 Composer 是 PHP 用来管理依赖(dependency)关系的工具.我们不仅要学会使用别人提供的包,更要学会制作和分享自己的软件包,下面演示如何创建一个自己的 Composer 包 ...
- 手把手教你写C语言的动态库的开发
前言 动态库的概念: 动态库提供了一种方法,使进程可以调用不属于其可执行代码的函数.函数的可执行代码位于一个 DLL 文件中, 该 DLL 包含一个或多个已被编译.链接并与使用它们的进程分开存储的函数 ...
- css加号图标_手把手教你打造一个纯CSS图标库
来,干了这碗安利 写这篇文章的目的其实就是为了安利一下我的图标库: 主题说完了,下面进入正题. 在web开发中,我们经常要用到一些小图标(加减勾叉等).通常做法就两种: 直接使用图片: 使用css/s ...
最新文章
- SQL Server 复制需要有实际的服务器名称才能连接到服务器
- SVM支持向量机——核函数、软间隔
- 调用微信和支付宝调三方接口扫描二维码?
- Flowable 数据库表结构 ACT_ID_GROUP
- php+js实现弹幕,jquery.barrager.js-专业的网页弹幕插件
- Multi-thread--多线程运行实例
- HALCON:图像采集之同步采集(synchronous)与异步采集(asynchronous)
- 20170724 Airflow官网资料学习
- 信号链模拟芯片是什么?
- ckeditor富文本解决文段首行缩进问题
- 【EasyRL学习笔记】第五章 Proximal Policy Optimization 近端策略优化算法
- java心得!--很好的java学习历程(转自张国宝)
- Matlab之随机森林TreeBagger
- python tkinter Button的使用
- solr搜索之搜索精度问题我已经尽力了!!!
- qt弹窗界面模态设置
- c语言sizeof char,sizeof 你真的弄明白了吗?来看看这个例子
- 提取lbp特征java代码_目标检测的图像特征提取之_LBP特征
- 智能电表怎么实现远程抄表
- QUV灯管-UVA340,UVB313,UVC灯管Q-SUN氙弧灯灯管和滤光器介绍
热门文章
- 4_Shell语言———脚本概述
- 【转】MFC 各类型相互转换
- wordpress自动批量定时发布插件 DX-auto-publish
- 一个权限树的设计与实现
- 3 关于数据仓库维度数据处理的方法探究系列——缓慢变化维概述和原理
- jquery php 异步图片上传实例,php结合jquery异步上传图片(ajaxSubmit)
- XamarinSQLite教程在Xamarin.Android项目中定位数据库文件
- SSH服务审计工具ssh-audit
- 服务器SSL/TLS快速检测工具TLLSSLed
- 分享Kali Linux 2016.2第45周VMware虚拟机