为自己的库代码制作CocoaPods依赖

CocoaPods是iOS最常用的类库管理工具,通过CocoaPods使用简单的命令就可以快速管理常用的类库。自己写的一些类库也可以添加到CocoaPods,为开源事业做贡献,或者做成自己的私有库,方便在不同的项目中快速使用。


下面详细说明如何为自己的类库添加CocoaPods依赖。

创建Git代码库

GitHub(本文使用GitHub)或者gitlabgitee(码云)上创建自己的远程代码库,用于存放需要添加CocoaPods依赖的封装库,或者库及其示例工程。如下为GitHub上创建一个名为 ELKChained-master 的Public的代码库,这个库将用来存放我的示例工程和基于OC语言的简单易用的链式编程框架,OC链式编程开源库在这里
注意:工程及库文件存放地址必须支持https,否则推送pods库会失败。github、gitlab、和gitee均支持https。

创建GitHub仓库
  • 本地创建制作CocoaPods依赖的库文件及示例工程

    我们可以把想要使用CocoaPods管理的库文件直接制作成pods依赖库,用户使用的时候,install到项目中然后集成使用;当然也可以在制作依赖库的时候提供示例工程,写一些示例代码,方便用户参考和集成。
    我这里准备上传一个ELKChained-master工程到GitHub上,然后给示例工程的ELKChainedAlloy库添加CocoaPods依赖。方便用户使用pods集成ELKChainedAlloy库,同时通过GitHub下载示例项目,指导用户快速上手这款链式编程框架。

    示例项目和ELKChainedAlloy库

    如上图,我准备了一个名为ELKChained-master的示例工程,红色框内的文件夹ELKChainedAlloy为准备制作CocoaPods依赖的文件。
    上图中除了示例工程文件、库文件之外,还有三个文件:.podspecLICENSEREADME.md
    .podspeccocopods引入第三方代码库的配置索引文件
    LICENSEMIT License软件授权条款
    README.md:使用说明
    1、创建spec文件
    使用终端cdELKChained-master项目的根目录,输入命令创建spec文件。

    // pod spec create 库名字
    pod spec create ELKChainedAlloy
    

    执行完命令,文件夹下创建了一个名为ELKChainedAlloy.podspec的spec文件。使用Xcode打开编辑此文件。下面是一些重要的基础属性及含义。

    Pod::Spec.new do |s|
    
      # 库名称
      s.name         = "ELKChainedAlloy"
    
      # 库的版本
      s.version      = "1.0.0"
    
      # 库摘要
      s.summary      = "基于OC的简单易用的链式编程框架,通过 . 调用方法,实现快速编程"
    
      # 库描述(最好比summary多写一些描述)
      s.description  = <<-DESC
                        基于OC的简单易用的链式编程框架,通过 . 调用方法,实现快速编程
                        提供所有系统控件及系统类的链式编程方法,提升开发效率
                        持续更新中。。。
                       DESC
    
      # 远程仓库地址,即 GitHub 的地址,或者你使用的其他的 Gitlab,gitee的地址
      # 或者你想提供给用户的技术支持网站、自己的主页、公司官方网站
      s.homepage     = "https://github.com/CircusJonathan/ELKChained-master"
    
      # MIT许可证(The MIT License),软件授权条款
      s.license      = "MIT"
      # s.license      = { :type => "MIT", :file => "FILE_LICENSE" }
    
      # 作者信息
      s.author             = { "Jonathan" => "Jonathan_dk@163.com" }
    
      # 支持的系统及支持的最低系统版本
      s.platform     = :ios
      s.platform     = :ios, "8.0"
    
      # 支持多个平台使用时
      # s.ios.deployment_target = "8.0"
      # s.osx.deployment_target = "10.7"
      # s.watchos.deployment_target = "2.0"
      # s.tvos.deployment_target = "9.0"
    
      # 下载地址,即远程仓库的 GitHub下载地址(clone 地址),使用.git结尾
      # 这个地址必须为https地址,否则推送pods库会失败,github、gitlab、和gitee均为https
      s.source       = { :git => "https://github.com/CircusJonathan/ELKChained-master.git", :tag => "#{s.version}" }
    
      # 库文件在仓库中的相对路径
      # 等号后面的第一个参数表示的是要添加 CocoaPods 依赖的库在项目中的相对路径
      # 因为我的库就放在库根目录,所以直接就是 ELKChainedAlloy
      # 如果你的是在其他地方,比如 ELKChained-master/ELKChainedAlloy,填写实际的相对路径
      # 等号后的第二个参数,用来指示 ELKChainedAlloy 文件夹下的哪些文件需要添加 CocoaPods依赖
      # “**”这个通配符代表 ELKChainedAlloy 文件夹下的所有文件,"*.{h,m}"代表所有的.h,.m文件
      s.source_files  = "ELKChainedAlloy", "ELKChainedAlloy/**/*.{h,m}"
    
      # 指明 ELKChainedAlloy 文件夹下不需要添加到 CocoaPods 的文件
      # 这里是 Exclude 文件夹内的内容
      s.exclude_files = "ELKChainedAlloy/Exclude"
    
      # 是否需要项目是 ARC
      s.requires_arc = true
    
      # 库中用到的框架或系统库(没用到可以没有)
      s.ios.frameworks = 'Foundation', 'UIKit'
      # s.framework  = "SomeFramework"
      # s.frameworks = "SomeFramework", "AnotherFramework"
    
      # 如果你的库依赖其他的 Podspecs,可以添加这些依赖项,例如
      # s.dependency 'AFNetworking', '~> 3.2.1'
    
    end
    

    2、创建软件授权条款LICENSE文件
    通过终端vim命令创建LICENSE并编辑license内容。一般采用MIT许可证,MIT许可证(The MIT License)是许多软件授权条款中,被广泛使用的其中一种。与其他常见的软件授权条款(如GPLLGPLBSD)相比,MIT是相对宽松的软件授权条款。MIT条款可与其他授权条款并存。MIT条款是自由软件基金会(FSF)认可的自由软件授权条款,与GPL兼容。
    MIT授权条款格式如下,只需要修改yearcopyright holder就可以了。MIT许可证原文

    Copyright (C) <year> <copyright holders>
    
    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is furnished
    to do so, subject to the following conditions:
    
    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.
    
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    THE SOFTWARE.
    

    3、创建README.md使用说明
    同样使用vim命令创建README.md文件并编辑,我目前的内容很简单,只写了几行描述文案,后续再持续完善使用说明。

    # ELKChained-master
    ELKChainedAlloy链式编程框架
    
    基于OC的简单易用的链式编程框架,通过 . 调用方法,实现快速编程
    提供所有系统控件及系统类的链式编程方法,提升开发效率
    持续更新中。。。
    
  • 代码上传GitHub及注册spec并推送到CocoaPods仓库

    1、上传代码到GitHub,此处使用终端命令实现

    // cd 到项目文件夹根目录
    cd /Users/Jonathan/Desktop/ELK/ELKChained-master
    // git init (初始化本地仓库)
    git init
    // git add . (将仓库添加到临时仓库,"."表示目录下所有文件)
    git add .
    // git commit -m "描述信息" (添加描述信息)
    git commit -m "初始化 ELKChainedAlloy OC链式编程框架 "
    // git remote add origin github上仓库的地址(关联到远程仓库)
    git remote add origin https://github.com/CircusJonathan/ELKChained-master.git
    // git push -f origin master(推送到远程仓库,执行之后需要输入GitHub账号和密码)
    git push -f origin master
    

    成功运行上面的命令之后,项目已经push到了GitHub代码库,如下图:

    代码上传到GitHub

    2、注册spec并推送到CocoaPods仓库
    ELKChainedAlloy打标签。

    git tag '1.0.0'  //标签 对应 .podspec文件中的version信息
    git push --tags  //推送到远程仓库
    

    注册spec并推送到远程仓库
    使用trunk进行注册

    // 填写验证邮箱,稍后通过邮件验证
    pod trunk register Jonathan_dk@163.com 'Jonathan' --verbose
    
    注册成功终端信息

    注册成功之后终端会显示如上图的信息,提示通过邮件链接验证CocoaPods注册信息。邮件内容如下:

    验证邮件,点击邮件链接验证
    验证成功

    验证成功之后,使用终端命令进行推送。会将与version版本对应的tag标记的库代码推送到pods。

    // pod trunk push 完整的.podspec文件名
    pod trunk push ELKChainedAlloy.podspec --allow-warnings 
    

    推送结果如下,库版本为1.0.0,有一些警告,提示UIControlState的部分枚举值是iOS9.0之后才有的,iOS8.0系统不支持,这是因为我上面.podspec文件中的s.platform(支持的系统及支持的最低系统版本)的值写的是ios, "8.0",警告可以忽略,不影响此图作为trunk推送成功的参考信息。

    trunk推送成功终端信息

    到这里CocoaPods依赖库就发布成功了,可以使用pod search 库名称命令搜索验证。如果搜索不到,执行以下命令

    // 更新本地的CocoaPods库
    pod repo update
    // 然后使用下面的命令搜索
    // pod search 库名称 --simple
    pod search ELKChainedAlloy --simple
    

    搜索到的结果如下图

pod search 结果

  • 更新CocoaPods依赖库文件

    更新CocoaPods上的库文件非常简单
    1、把修改(升级)后的库代码pushGitHub
    2、修改CocoaPods配置索引文件.podspec
    修改库配置文件的版本信息s.version,和必要的其他配置信息。
    3、打标签,推送到CocoaPods远程仓库
    打标签,推送标签

    git tag '版本信息' 
    git push --tags
    

    推送库到CocoaPods远程仓库

    // pod trunk push 完整的.podspec文件名
    pod trunk push 完整的.podspec文件名 --allow-warnings 
    

    CocoaPods自定义库文件更新完毕!


  • 删除CocoaPods依赖库文件

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,108评论 18 139
  • 项目组件化、平台化是技术公司的共同目标,越来越多的技术公司推崇使用pod管理第三方库以及私有组件,一方面使项目架构...
    swu_luo阅读 20,579评论 0 39
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,937评论 3 118
  • 昨天考试完了,这个周末没有书面作业,孩子好好轻松。不管昨天考的如何,先一放先让孩子们尽情放松一下。在放松的同时,也...
    文皓文文妈妈阅读 128评论 0 1
  • 人性讨厌批评,批评意味着否定他人的自我。人一旦失去自我,会导致信心全无。 所以对待他人要怀欣赏之心,切记凭...
    斐丽希娅阅读 190评论 0 0