iOS 创建私有pod库,并添加第三方

2020.5.5修改:
1、首先创建私有索引库
2、有了私有索引库后再创建私有仓库
这里写的有点乱糟糟的,后面将重新整理,把私有索引库和私有仓库分两章写一下

我是分割线


https://www.jianshu.com/p/e5d3c7a7335a
https://www.jianshu.com/p/d6a592d6fced
https://blog.csdn.net/overstep1024/article/details/84543770

缘起

最近一系列996的呐喊,让很多公司确实稍微消停了一下,终于没那么忙了。还么松下来两天,bilibili、大疆先后爆出了程序员私自开源公司代码,一下子各大公司又紧张起来,包括我司。这不,前两天刚刚上了oa首页,即日起,公司内网停止访问github、gitlab、oschina等第三方开源软件托管平台,整个人都凉凉了。首先想到的就是我的cocoapods第三方怎么办,虽然有自己的私有库,但是还是有不少第三方直接用的pods,于是这次想着把第三方的也悉数迁移到私有库。

开始

首先,在自己的远程git仓库新建一个项目,这一块就不多说了。建好后,在本地

cd YourProjict
git clone git@yougitaddress.git

代码克隆下来后,在本地repo添加自己的私有库,回到上面clone下来的文件夹,创建你自己的pods和demo。

pod repo add mypods(私有库名称) https://github.com/xxxxx/xxxxx.git(私有库远程地址)
cd YourProjict
pod lib create mypods

这个命令会在你刚才的目录下,根据 cocoapods的 pods模板生成一个 pods工程,包含 pods以及 demo工程,并且命令执行完毕会打开 example里面的 xcworkspace。在工程中找到replaceme.m文件,并替换成你自己的,同时找到 podspec 文件,编辑你所需要的信息,操作完成后,到你的 podfile目录下执行 pod install
这个操作会把你的demo项目和pods进行链接,编译无误后,便可以进行校验。

校验

#import "你的pods文件"
首先import你项目中的文件,如果没有报错,说明基本路径没有问题了,接着就可以进行pod的校验,执行命令

pod lib lint

校验遇到麻烦
如果很不幸,你校验出了问题,比如我在执行的时候就遇到了如下问题

- WARN  | summary: The summary is not meaningful.
- ERROR | [iOS] unknown: Encountered an unknown error (Could not find a `ios` simulator (valid values: com.apple.coresimulator.simruntime.ios-10-0, com.apple.coresimulator.simruntime.ios-11-1, com.apple.coresimulator.simruntime.ios-12-2, com.apple.coresimulator.simruntime.tvos-12-2, com.apple.coresimulator.simruntime.watchos-5-2). Ensure that Xcode -> Window -> Devices has at least one `ios` simulator listed or otherwise add one.) during validation.

这个比较好解决,如果你和我一样是Xcode10以上的版本,可能就需要更新下 cocoapods

sudo gem install cocoapods

更新完成cocoapods后,再次进行校验,如果出现如下提示,那么就成功了

HenlyToolKit passed validation.

检查远程spec

pod spec lint

由于我们没有推送上去,此时远程肯定是没有的,检查必然报错

➜  xxxxx git:(master) ✗ pod spec lint

Username for 'http://xxxxx.xxx.com': xxxx
Password for 'http://xxxx@xxxx.xxx.com':
 -> xxxxxKit (0.1.1)
    - ERROR | [iOS] unknown: Encountered an unknown error ([!] /usr/bin/git clone http://xxxxx.xxx.com /var/folders/s7/nxsncldcnklcnkwdcn_cjsncjdcndjcn_njkdbchdbc/T/s2e923949r-e8r948r-e9i9re --template= --single-branch --depth 1 --branch 0.1.1

Cloning into '/var/folders/s7/cndjcndjcndwjkcn/T/xnjscnjdcnjd-cndkcndjcn-ncjdncjldwnc'...
remote: HTTP Basic: Access denied
fatal: Authentication failed for 'http://http://xxxxx.xxx.com.git/'
) during validation.

Analyzed 1 podspec.

[!] The spec did not pass validation, due to 1 error.

[!] 'xxxxxKit' uses the unencrypted 'http' protocol to transfer the Pod. Please be sure you're in a safe network with only trusted hosts. Otherwise, please reach out to the library author to notify them of this security issue.

此时我们在用git那所有的代码上传,在进行远程验证

pod repo lint
timg.jpeg

我枯辽,又双叒叕报错了

➜  xxxxxKit git:(master) pod spec lint

 -> xxxxKit (0.1.1)
    - ERROR | [iOS] file patterns: The `source_files` pattern did not match any file.
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description

Analyzed 1 podspec.

[!] The spec did not pass validation, due to 1 error.

可是,明明本地检测没问题的啊,[iOS] file patterns: The `source_files` pattern did not match any file.这句就是说,source_files的路径和文件夹不一致,后来找了很久,发现一个捷径

open /Users/xxxxx/Library/Caches/CocoaPods/Pods/External

找到我们的pods,然后手动添加文件夹
当相应文件都做好后,我们在执行一遍指令 pod spec lint
谢天谢地,终于成功了,最后执行上传到我们远程仓库的repo

pod repo push 仓库名称 xxxxKit.podspec

这样,一份私有pod仓库就建立好了

----------更新下,这个操作好像不太稳妥-----------

pod会通过我们写的.podspec文件内的s.source 与 s.source_files两个地址目录去查找对应pod文件,看如下示例:

 s.version          = '0.1.2'
 s.source           = { :git => >'http://xxxKit', :tag => s.version.to_s }
 s.ios.deployment_target = '8.0'
 s.source_files = 'xxxKit/Classes/*.{c,h,hh,m,mm}','xxxKit/Classes/Third/*.{c,h,hh,m,mm}'

pod会去http://xxxKit这个地址的0.1.2 tag下的Classes和Third目录下找所有.h.m文件

解决办法:
每次更新version的时候,push到远程,并且添加tag,tag需要与version保持一致

git add -A && git commit -m "Release 2.0.0"  
git tag '2.0.0'  
git push --tags  
git push origin master

这两条命令是为pod添加版本号并打上tag:
set the new version to 2.0.0
set the new tag to 2.0.0

-------------- 还是失败,我又自闭了-------------
最后参考了大神的博客,终于找到原因

错误分析

s.source_files中描述的为相对路径,但在pod lib lint 与 pod spec lint 时,所用的参照不一样。pod lib lint 时,以podspec文件所在位置为参照;pod spec lint 时,以Git仓库的根目录为参照。

所以,在pod lib lint 时,该s.source_files的描述为源码相对于podspec文件的相对路径,该描述正确;在pod spec lint 时,该s.source_files的描述应为源码相对于Git根目录的相对路径,改描述错误,所以报错。

修复方案:

1、不同的验证方案,使用不同的s.source_files 描述。
pod lib lint 时:

 s.source_files  = "MWBase/BaseModule/**/*.{h,m}"

pod spec lint 时:

 s.source_files  = "MWBase/MWBase/BaseModule/**/*.{h,m}"

2、推荐方案:移动podspec文件至Git根目录下,并修改内容:

 s.source_files  = "MWBase/MWBase/BaseModule/**/*.{h,m}"

添加第三方

  s.dependency 'DoraemonKit/Core', '~> 1.1.7'
  s.dependency 'DoraemonKit/WithLogger', '~> 1.1.7'
  s.dependency 'DoraemonKit/WithGPS', '~> 1.1.7'
  s.dependency 'DoraemonKit/WithLoad', '~> 1.1.7'

制作完毕

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

推荐阅读更多精彩内容