创建及使用Cocoapods私有库

为什么要使用Cocoapods私有库

在项目开发的时候常常会积累很多自己的框架及工具包,而如果需要创建新项目,就不得不把很多可能积累的库一次导入到新工程中,因为自己的控件或者逻辑处理的库可能并没开源,所以为了方便未来反复利用,我们就会考虑也变成非开源形式的Cocoapods来使用,在或者项目中的业务逻辑和UI逻辑是使用MVVP之类的构架形式进行开发的,那么为了复用和方便单元测试,同样的VM层也会进行Cocoapods私有库封装。

如何创建私有库

整体先说明一下创建一个私有的podspec包括如下那么几个步骤:

1.创建并设置一个私有的Spec Repo。

2.创建Pod的所需要的项目工程文件,并且有可访问的项目版本控制地址。

3.创建Pod所对应的podspec文件。

4.本地测试配置好的podspec文件是否可用。

5.向私有的Spec Repo中提交podspec。

6.在个人项目中的Podfile中增加刚刚制作的好的Pod并使用。

7.更新维护podspec。

创建私有Spec Repo

这里方便大家测试,所以提供一个git的公开连接,但是实际项目中大家根据自己实际的git地址就ok了。

# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]

$ pod repo add XXTools https://github.com/Namunaka/NMPrivatePodDemo

此时如果成功的话进入到~/.cocoapods/repos目录下就可以看到WTSpecs这个目录了。至此第一步创建私有Spec Repo完成。

为自己的项目创建 podspec 文件

我们可以为自己的开源项目创建podspec文件,首先通过如下命令初始化一个podspec文件:

pod spec create your_pod_spec_name

该命令执行之后,CocoaPods 会生成一个名为your_pod_spec_name.podspec的文件,然后我们修改其中的相关内容即可。

关于podspec里面如何写,可以参考下面的资料

《如何编写一个 CocoaPods 的 spec 文件》

这里贴出来我自己比价简单的podspec,具体代码部分可以直接看git下里面有具体文件https://github.com/Namunaka/NMPrivatePodDemo        

podspec 图1
podspec 图2

演示目前的工程目录


验证podspec文件有效性

pod lib lint #本地验证,貌似可以其实不用 直接远程验证 也就用下面的就好啦

pod spec lint XXTools.podspec --verbose #远程详细验证

pod spec lint XXTools.podspec --verbose --allow-warnings #远程详细验证并且允许忽略warning (但是最好不要这么做)

如果不成功对照提示的错误进行修改,另外

《Cocoapods使用私有库中遇到的坑》

《Cocoapods 项目添加Cocoapods支持遇到的坑》

这2偏文章也都介绍几个比较恶心吧唧的问题

提交podspec至私有仓库

在工程目录下执行

# pod repo push 文件夹 xxx.podspec

$ pod repo push NMPodSpecs NMPodSpecs.podspec

# pod repo push 输出详情 允许忽略warning (但是最好不要这么做)

$ pod repo push XXTools XXTools.podspec --verbose --allow-warnings

在执行前确定git是干净的也就是说保证所有修改都进行了commit 否则会坑爹的报错

使用私有仓库

执行 pod search XXTools 查询私有仓库

pod repo中明明存在的podspec 却search 不到

找到~/Library/Caches/CocoaPods/search_index.json 然后删除search_index.json 或者直接执行 rm ~/Library/Caches/CocoaPods/search_index.json

后在一次输入:pod search 你的查找库这里是XXTools

最后在需要使用私有库的工程下创建Podfile 与普通的不太一样的是这里的Podfile要额外添加source

创建Podfile文件,在 Podfile 文件开头中添加:

source 'https://github.com/Namunaka/NMPrivatePodDemo' #私有库地址

source 'https://github.com/CocoaPods/Specs.git' #公共库地址

platform :ios, ‘8.0’

target 'PodDemo' do

pod 'XXTools'

end

?xml version="1.0" encoding="UTF-8"?

如果不提供source 自己实验是没有办法install的

另外如果不添加官方库地址,若私有库的类库的子依赖,依赖了公有库某个类库,会导致pod install失败。

如果项目中添加了额外的公共库依赖比如AFNetworking之类的库 需要在添加source    https://github.com/CocoaPods/Specs.git

否则又回出现只能找到公共库而找不到私有库的问题

验证podspec

网上貌似有好多验证指令但是 目前实验好用的就这个

pod spec lint 你创建的这个文件.podspec --verbose

验证失败,会出现一系列错误,但也不是无根可寻,其中出现错误频率最多的提示是

ERROR | [iOS] file patterns: Thesource_filespattern did not match any file.

此错误的原因是没有找到匹配的文件。

解决方案:

手动创建文件,具体操作方法如下

终端输入:

~/库/Caches/CocoaPods/Pods/External/XXTools/035cb9aa62b9d49f904fad1119b83da4-aebfe

进入相应文件夹,创建文件夹与source_files文件路径对应

ConfigSpecDemo/ConfigSpecDemo/Classes

文件结构如下:

XXTools

└── 035cb9aa62b9d49f904fad1119b83da4-aebfe

├── ConfigSpecDemo

│ └──ConfigSpecDemo

│ └──Classes

└── LICENSE #开源协议 默认MIT

Classes文件夹存放自己的库文件

其他-扩展

利用 podspec 的 subspec 来实现多个预处理宏的灵活配置

什么是预处理宏

开始正题前,我先说下简单什么是预处理宏,因为可能有些人不知道。先上一段例子方便理解:



代码很简单,对 JSPatch 这个库的初始化。 DEBUG 在这里就是提前定义好的预处理宏。通过结合 #ifdef ,可以只在编译测试版的时候设置 JSPatch 为 Development 状态。当要发布正式版的时候也不用修改代码,直接编译就行,中间那句 [JSPatch setupDevelopment]; 不会出现在代码里。

看明白了吧,预处理宏的主要就是用来有目的的引入或移除一部分功能(代码)。

本文的使用场景

一个第三方库会有很多功能,其中有一部分功能需要在编译阶段就决定是否引入。比如 IDFA,Apple 要求使用的话需要在提交审核的时候声明,不然就被拒。此时如果应用不用,那就会被你拖累。所以需要提供一个方法从代码里删除,这就需要用到预处理宏。用类似上面的方式改好后,让用户在 Build Settings 里设置一下就 OK。

如果这个库支持 CocoaPods,可以建一个 subspec 省去用户手动修改:



当有多个预处理宏需要设置,可以都写在这一个里面。

可如果不想写在一起,想让用户自己选择开启某些的话,怎么办?

答案很简单,多写几个 subspec。用户需要哪个,就引入哪个。具体例子继续看。

Subspec 的灵活配置

假设我们有两个功能需要预处理宏来开关,那 podspec 这么写


这里面通过两个 subpec 来开关功能。当用户用的时候,则在 Podfile 里这么引入

pod 'YOUR_SPEC', :subspecs => ['IDFA', 'IDFB']

最后整理下pod 命令

pod repo add [PrivateRepoName] [GitHubHTTPScloneURL]

pod spec create your_pod_spec_name

pod lib lint

pod spec lint

pod repo push [PrivateRepoName] [xxx.podspec]

//引用源 用,分割

--sources='http://xxx/iosDev/XXToolsPodSpecs.git,https://github.com/CocoaPods/Specs.git'

//lint显示详情

--verbose

//引用私有库、静态库引用的时候加上

--use-libraries

//允许 警告,有一些警告是代码自身带的。

--allow-warnings


一大堆参考资料(感谢各位整理的文档)

《如何编写一个 CocoaPods 的 spec 文件》

《Cocoapods 入门》

《3分钟让你的框架支持cocoapods,podspec文件讲解》

《Cocoapods私有Pod仓库》

《Cocoapods使用私有库中遇到的坑》

《Cocoapods 项目添加Cocoapods支持遇到的坑》

《上传自己的库到Cocoapods》

《使用Cocoapods创建私有podspec》

《如何创建私有 CocoaPods 仓库》

《利用 podspec 的 subspec 来实现多个预处理宏的灵活配置》

《使用私有Cocoapods仓库 中高级用法》

《Pod lint fails when containing dynamic-frameworks without simulator architectures》

《待解决 pod lib lint pod不支持i386编译环境,如何避开》

《Error: SDK “iphonesimulator9.0” Cannot be located》

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

推荐阅读更多精彩内容