作者 ripperhe 关注

2017.03.30 23:38* 字数 5589 阅读 27评论 0喜欢 2

前言

目前比较流行的组件化开发,针对多个 app 要用同一套代码,将其做成 pod 仓库是比较好的解决方案。代码只有一份放在组件仓库,需要集成的 app 只需要将其 pod 到工程内部即可。

如果很多组件都需要做成 pod 库,每一步都手动去做,显得繁琐而且容易出错。本文主要讲一下,怎么自动化去实现这些事情。不过,在此之前,先概述一下,发布框架具体需要做哪些事情。如果对发 pod 的流程比较熟悉,直接跳过看自动化实现部分。

先上 GitHub 仓库地址:

  • fastlane-files → 快车道文件
  • pod-template → ruby 脚本及模板文件

发布框架到官方库

注:图中标号并非和发布流程标号对应,图中表述的是从框架发布到使用的大致流程。

想要发布框架到 CocoaPods 官方库,需要有以下流程:

  1. 安装 CocoaPods]
  2. 注册 CocoaPods 账号]
  3. 创建 spec 文件]
  4. 提交代码并为框架打 tag
  5. 验证 spec 文件
  6. 通过 pod trunk push 推送 spec 文件

安装 CocoaPods

网上有很多教程,这里不再赘述。需要注意的是,RubyGems 的 淘宝镜像 已经不再维护,已迁移至 Ruby China,安装 CocoaPods 前记得替换 gem sources

注册 CocoaPods 账号

首先需要注册一个 CocoaPods 账号,用于发布 pod 仓库。

$ pod trunk register EMAIL [NAME]

trunk 命令用于创建一个账号或是一个 seession。

  • 如果你还没有账号,则需要将邮箱和名字一起填入,创建账号的同时会自动创建 session
  • 如果已经有了账号,但是没有在当前这台电脑上发布过 pod 仓库,这个时候就需要创建一个 session,仅需要填邮箱即可,除非你想改名字,否则不用填写名字。

你可以对你的 session 进行描述,这样在利用 pod trunk me 命令查看所有 session 信息的时候,可以很清晰地看到在哪些电脑上创建过 session。

$ pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'

命令成功之后,你的邮箱应该会收到一份邮件。查看邮件信息,访问对应网址即可验证你的账号。当然,这个事情做一次就好了,以后基本上不用再操作。

创建 spec 文件

spec 文件即一个 pod 仓库的描述信息。所有通过 pod search 搜索出来的框架,都是根据这个文件中的描述信息进行匹配的。以下为部分描述信息:

  • 仓库名字
  • 作者
  • 证书
  • 版本
  • 描述
  • 代码源路径
  • 使用哪些文件
  • 依赖哪些其他框架
  • ...

一个简单的 spec 文件如下:

Pod::Spec.new do |s|s.name             = 'ZYTemplateName's.version          = '0.1.0's.summary          = 'A short description of ZYTemplateName.'s.homepage         = 'https://github.com/ripperhe/ZYTemplateName's.license          = { :type => 'MIT', :file => 'LICENSE' }s.author           = { 'ripperhe' => 'ripperhe@qq.com' }s.source           = { :git => 'https://github.com/ripperhe/ZYTemplateName.git', :tag => s.version.to_s }s.ios.deployment_target = '8.0's.source_files = 'ZYTemplateName/Classes/**/*'
end

先进入需要发布的框架的根目录,执行

$ pod spec create [NAME]

这里的 NAME 即为框架名字,不需要手动加 .podspec 后缀。执行完成之后,会生成 ZYTemplateName.podspec 文件(这里以 ZYTemplateName 为例),进入该文件,将对应信息改为你具体的信息即可。

如果你发现你的 spec 文件默认填写的用户名和邮箱不是你刚才利用 trunk 命令注册账号时候填写的不用惊讶,因为默认取的是 git 的用户名和邮箱,所以想修改的话,去修改 ~/.gitconfig 文件中的用户名和邮箱。以下为相关源码:

def default_data_for_template(name)data = {}data[:name]          = namedata[:version]       = '0.0.1'data[:summary]       = "A short description of #{name}."data[:homepage]      = "http://EXAMPLE/#{name}"data[:author_name]   = `git config --get user.name`.stripdata[:author_email]  = `git config --get user.email`.stripdata[:source_url]    = "http://EXAMPLE/#{name}.git"data[:ref_type]      = ':tag'data[:ref]           = '#{s.version}'data
end

spec 文件的这些描述,基本上看命名是可以看明白的。实在不明白可以查看 官方文档。需要注意的是,s.version 是你将要发布的 pod 仓库的版本,s.source 是你的仓库源地址和对应的 tag 信息。

version 和 tag 可以是不同的,但是为了方便管理和维护,我们一般将其设置为一样的,所以 tag 可以 直接使用 s.version.to_s。既然这里用到了 tag,那么接下来,就需要为仓库代码打上 tag

提交代码并为框架打 tag

首先,需要将本仓库的所有修改提交到远程仓库。

$ git add .
$ git ci -m 'release pod'
$ git push

上一步在仓库的根目录创建了 spec 文件,随着代码的提交,spec 文件也会提交到自己的远程代码仓库。这个 spec 文件和需要发布的框架放在一起并不是必须,只是这样可以方便我们以后维护这个框架。

发布 pod 仓库,需要和自己框架的远程仓库代码版本对应,所以这里需要为当前代码打上 tag,这个 tag 是和前面的 spec 文件中填写的 tag 对应的。框架发布成功之后,CocoaPods 会根据 tag 信息去获取相应代码。

$ git push origin master
$ git tag '0.1.0'
$ git push --tags

验证 spec 文件

用于验证 spec 文件是否正确,可以及早发现问题。同样,也是在需要发布的框架的根目录,执行

$ pod spec lint ZYTemplateName.podspec

这里需要加上 .podspec 后缀来验证这个文件。如果有报错,仔细查看报错信息,一般可以定位问题,可以加上 --verbose 查看详细的验证过程,方便定位问题。

$ pod spec lint ZYTemplateName.podspec --verbose

验证 spec 文件也可以用另外一个命令

$ pod lib lint ZYTemplateName.podspec

pod spec lint 和 pod lib lint 最主要的区别是,前者会根据 spec 文件 tag 信息去验证远程仓库代码是否存在,后者不会。简单理解就是,pod spec lint 联网检查,pod lib lint 不联网检查。

验证的时候,可能会报错,或是报警告。报错的话,必须解决,详细看具体信息,一般能找到问题,如果不能,自行 google

iOS 一行命令发布 Pod 框架相关推荐

  1. iOS好用的第三方框架/插件

    一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https://github. ...

  2. 发布开源框架到CocoaPods入坑指南

    个人原文博客地址: 发布开源框架到CocoaPods入坑指南 在开发过程中一定会用到一些第三方框架, 只要安装了CocoaPods, 然后通过pod install命令, 就可以集成框架到项目中了 可 ...

  3. 【iOS开发】从Cocoa框架说开去--Fundation框架系列

    [Cocoa简介] Cocoa是苹果公司为Mac OS X所创建的原生面向对象API 是Mac OS X上五大API之一.(其他四个:Carbon POSIX X11 Java)它是苹果的面向对象开发 ...

  4. 一行命令装下所有「炼丹」工具及依赖项,就靠这个免费软件源了|教程

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI 相信不少 ...

  5. erwin模型怎么保存_一行命令启动,十分钟内完成部署,Paddle Serving开放模型即服务功能...

    机器之心发布 机器之心编辑部 百度飞桨的 Paddle Serving 能够实现服务器端快速部署,最近,随着飞桨更新到 1.7 版本,Paddle Serving 也有了新变化.更新后的 Paddle ...

  6. iOS比较常用的第三方框架

    [转]http://www.cnblogs.com/wujy/p/4747998.html 把平时看到或项目用到的一些插件进行整理,文章后面分享一些不错的实例,若你有其它的插件欢迎分享,不断的进行更新 ...

  7. 蒲公英使用一行命令上传Apk文件

    在安卓开发中,为了给测试人员提供测试包,我们经历了从U盘拷贝.发邮件或者QQ.微信等通讯工具发送测试Apk文件,不像IOS一样有AppleStore的测试模式.安卓就只能自己来想办法给测试组提供测试包 ...

  8. iOS开发 常用第三方开源框架

    iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报 开源框架 图像: 1.图片浏览控件MWPhotoBrowse ...

  9. 自己动手设计一款iOS自动构建发布工具

    2019独角兽企业重金招聘Python工程师标准>>> 自己动手设计一款iOS自动构建发布工具 一.引言 在iOS开发中,你可能经常会遇到这样的场景: 自己负责的功能模块开发完成后, ...

最新文章

  1. 敏捷团队如何通过Leangoo领歌做迭代管理、迭代规划及任务协同
  2. 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(四)
  3. 002_JavaScript的历史
  4. Python Mysql_db对数据查询进行处理
  5. stm32 hal 串口只可以接收到一包数据数据
  6. Java异常与异常处理简单使用
  7. Android【报错】This class should be public (android.support.v7.internal.widget.ActionBarView.HomeView)
  8. Axure RP安装破解汉化以及发布到至AxureShare
  9. Github 汉化插件教程
  10. C语言中字符串的结束标志是什么
  11. 如何使用 google 搜索
  12. R中设置图形参数--函数par()详解
  13. 会议记录管理系统(6) - 查找会议记录模块设计
  14. centos 5.2自动安装的php不支持mysql?
  15. 墨干V1.1.0: 新一代结构化编辑器的雏形
  16. 【shaderforge学习笔记】 Parallax节点(视差节点)
  17. 什么事MVC?什么是MVC!
  18. 请帮小明同学设计一个程序,输入上次考试成绩(int)和本次考试成绩(int),然后输出成绩提高百分比,保留2位小数。
  19. 图论500题 慢慢写
  20. MapReduce作业在Hadoop完全分布式集群上运行的问题与思考(持续更新)

热门文章

  1. android -volley-请求数据
  2. HDU 5972 Regular Number(ShiftAnd+读入优化)
  3. 详解亚马逊:物流为何是电商命脉
  4. 《c陷阱与缺陷》之贪心法
  5. 面向对象模型的四种核心技术
  6. Eigen/Matlab 使用小结
  7. PHP数组实际占用内存大小的分析
  8. linux系统级别的能够打开的文件句柄的数file-max命令
  9. CentOS 5.5 编译安装apache+php+mysql,利用CMS快速建立论坛
  10. Nginx源代码分析 - 日志处理