详细讲解如何发布自己的开源pod到Cocoapods以及一些lint检查错误

   这篇文章详细的讲解如何发布自己的开源框架到Cocoapods,比较基础,如有错误,欢迎指正。

要点:

  • pod的版本依赖于Git的tag,将一个tag视为工程的一次release
  • 一个pod版本对应一个tag,pod版本最好与tag一致
  • pod 命令可以使用--verbose 开启啰嗦模式查看日志

一、创建github repository

image
  1. 项目名称:自己填写项目名称,最好是自己想发布的库的名称,方便管理
  2. 项目描述:可选项,描述当前项目
  3. 公开项目:选择public别人才能看到和下载这个库,创建私有库需要$$
  4. README:一个好的项目需要一个README文件来介绍库文件如何使用
  5. .gitignore: Git管理项目的忽略文件,一般选择对应语言即可,对其修改为Git管理知识,这里不做铺开
  6. 开源许可证:开源许可证,根据自己的需要设置,我选择MITcocoapods对开源许可设置比较在意,所以需要设置一个

二、克隆项目到本地

  1. 在github上找到项目的地址


    image
  2. 克隆项目到本地

$ git clone git@github.com:read0nly/DemoKit.git

  1. 将写好的开源库源代码放入本地的Git仓库下


    image

三、注册pod trunk

  要将一个开源库或者私有库发布到pods之前你需要注册trunk

pod trunk register [email] '[name]' --description='[desc]'

  • email:任意邮箱,推荐使用你注册github的邮箱
  • name:推荐使用github的name
  • desc:简单的描述信息

  例如我自己注册一个:

pod trunk register nj.readonly@gmail.com 'read0nly' --description='macbook pro'

  注册之后需要进入上面填的邮箱,点击链接进行邮箱验证 </br>
完成之后可以使用pod trunk me检测是否注册成功

pod trunk me

  注册成功后将看到如下信息:

$ pod trunk me </br>

  • Name: read0nly</br>
  • Email: nj.readonly@gmail.com</br>
  • Since: April 12th, 08:49</br>
  • Sessions:</br>
    • April 12th, 08:49 - August 19th, 19:56. IP: 167.99.173.25

四、发布pod

1.创建.podspec

$ pod spec create [name]

  • name: podspec 文件的名称,一般与git上创建的repository名称相同</br>
    // 如:</br>
    pod spec create DemoKit

  执行此命令事实上是在当前目录创建了一个.podspec文件(纯文本文件),这个文件记录了pod发布执行的动作,以及资源配置信息。


image

2.修改.podspec文件

  .podspec文件生成之后里面有一个模板,有很多的注释和配置,比较全面,但是有些内容可能是我们目前使用不到的。这里提供一个简洁版的.podspec文件,如果后续有其他需求,例如子模块之类的,可以再自行添加。

Pod::Spec.new do |s|



s.name = "DemoKit"

s.version = "0.0.1"

s.summary = "A demo for cocoapods."

s.homepage = "https://github.com/read0nly/DemoKit"

s.license = { :type => "MIT", :file => "LICENSE" }

s.author = { "nj" => "nj.readonly@gmail.com" }

s.platform = :ios, "8.0"

s.source = { :git => "https://github.com/read0nly/DemoKit.git", :tag => s.version.to_s }

s.requires_arc = true

s.source_files = "DemoKit/*"

#s.exclude_files = ""

s.framework = "UIKit","Foundation"

s.swift_version = "4.0"
end

  • name:pod库的名字
  • version:版本号
  • summary:总结
  • homepage :主页,项目在github上的主页
  • license :开源证书,type为类型,file是文件,注意文件路径,如果.podspec在同一目录下,可以不写路径
  • author :作者,包含名字和联系方式
  • platform:支持的平台,这里支持iOS8,也可以支持OSX,tvOS,watchOS等
  • source:项目源,写自己项目在github上的地址,要发布的版本建议与pod版本一致
  • requires_arc:是否支持arc
  • source_files:要包含的文件,/*代表包含这个目录下面的所有文件,也可匹配某一个类型的文件,例如:DemoKit/**/*.siwft 或者 DemoKit/**/*.{h,m}分别代表DemoKit下所有目录的swift 或.h .m文件
  • exclude_files:不包含的文件,规则同上,如果在包含文件里面没有需要排除的文件,则删除此行
  • framework:依赖的系统库
  • swift_version:swift版本,对于swift项目来说这个参数很重要,一定要填写库文件所使用的swift版本,否则会导致编译失败

  其他的配置信息,需要的时候可以到Cocoapods项目官方文档podspec部分查阅

3.检验.podspec文件

  修改完.podspec文件之后,我们使用lint命令进行本地测试

pod lib lint

  可以使用 --verbose 参数开启啰嗦模式,可以查看详细日志信息

pod lib lint --verbose

  如果有错误,可以根据错误提示解决错误,文章最后部分列举了几种错误解决方式。如果有警告可以不用管,也可尝试解决

4.将库文件打上tag,push到github

  • 查看没有提交的文件

git status -s

image
  • 添加所有文件

git add .

  • 提交文件

git commit -m 'commit version 0.0.1'

  使用-m参数添加提交时候的日志信息,一定要填

  • push 代码到github

git push

  • 打上标签 tag

git tag '0.0.1'

  cocoapods发布依赖与标签tag,前面.podspec文件里面的版本正是每一个tag的版本,建议tag与需要发布的版本相同

  • push tag到github

git push --tag

5.push到cocoapods

  使用push命令,发布自己的版本库到cocoapods

pod trunk push DemoKit.podspec

  如果有警告可以使用--allow-warnings选项允许警告

pod trunk push DemoKit.podspec --allow-warnings

  如果依赖了第三方库,需要加上 --use-libraries 选项

  发布成功之后可以看到如下信息:

image

6.查看自己的pod库

  提交成功几分钟之后就可以使用pod search DemoKit 来查看自己的库了

pod search DemoKit

  如果查询不到,可以尝试初始化,或者更新本地的spec

pod repo init
pod repo update

  如果还是查询不到,可以删除本地的pod索引文件

sudo rm ~/Library/Caches/CocoaPods/search_index.json

  删除之后再重新执行pod search

五、lint 错误

<span id = 'lint_issuse' ></span>

NO.1

  • ERROR | [iOS] unknown: Encountered an unknown error (The 'Pods-App' target has transitive dependencies that include static binaries: (/private/var/folders/m7/7t1r7_993fbgs40fppwxrsm80000gn/T/CocoaPods-Lint-20180301-60100-1meifl-Payment/Pods/openssl-ios-bitcode/lib/libcrypto.a and /private/var/folders/m7/7t1r7_993fbgs40fppwxrsm80000gn/T/CocoaPods-Lint-20180301-60100-1meifl-Payment/Pods/openssl-ios-bitcode/lib/libssl.a)) during validation.

  依赖了其他库,添加--use-libraries选项

$ pod lib lint --use-libraries

NO.2

xcodebuild: error: Unable to find a destination matching the provided destination specifier:

{ id:6AC7A44D-6523-4371-AAAB-C5191451D58E }



Available destinations for the "App" scheme:

{ platform:iOS Simulator, id:9C15AC46-816E-4A85-9F21-A693CE34D542, OS:11.2, name:iPhone SE }

{ platform:iOS Simulator, id:626866A7-B843-4CCF-B27D-00420F5F16DB, OS:11.2, name:iPhone X }



Ineligible destinations for the "App" scheme:

{ platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }

{ platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Generic iOS Simulator Device }

Testing with xcodebuild.

  这个问题困扰了我很久,我是在查看cocoapods的issues#7454中才找了解决方案。问题原因由于本地模拟器设置,在“Generic iOS Device”设备下无法通过编译。目前暂行解决方式是在Xcode -> Window -> Devices & simulators 里面删除模拟器,直到剩下错误信息中“Available destinations”下的设备,或者lint检验通过。

  遇到问题,可以查看错误日志,或者查看Cocoapods的issues来解决问题。

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

推荐阅读更多精彩内容