搜狐媒体平台-搜狐网站>IT

他一出家就成中国最帅和尚

眼眸深邃、轮廓分明、身材颀长,活生生的一幅画。

大学副教授与在押服刑女结婚

这在监狱民警看来,那么令人不可思议。

使用cocoapods管理私有库

ios笔记 阅读(0) 评论()
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。举报

  背景

  项目状况

  • 项目前期实现为主 对业务代码和基础代码只做了大概隔离(目录上的隔离);

  • 业务代码和基础代码的隔离不彻底 有耦合 无法抽离基础代码供其他app使用(目前暂无此需求);

  • 基础代码和基础代码之间相互调用 有耦合 无法单独使用其中一部分;

  • 基础代码并无版本的概念 每次改动其实并没有兼容的概念 此时的基础代码其实是当业务代码在用。

  私有库的目的

  • 去除业务代码和基础代码的耦合 使代码更干净;

  • 基础代码模块化 更容易管理 测试;

  • 业务代码的调用会更统一;

  • 使基础代码有version的概念 为未来两个app调用不同版本的基础库做准备。

  Cocoapods的一些基本概念

  使用cocoapods的原因

  • 方案成熟 例子众多;

  • 支持指定版本;

  • 支持部署到私有的仓库;

  • 项目原本第三方库代码的引入就基于cocoapods 团队接受成本低。

  cocoapods如何管理第三方库代码

  • 有一个集中的git repo 专门存放所有第三方库的说明和链接 暂且称之为索引库;

  • 第一个pod install的时候 会clone一份索引库到本地 路径为/Users/toamtopeter/.cocoapods/repos/master;

  • 每次pod install或者update 会从remote拉去最新的Specs;

  • Specs里面有第三方库的各个版本的历史;

  • 根据Podfile再对比Specs 就能够拉去相应的代码了。

  公有库和私有库的区分

  • 公有库的git repo是公开的 私有库的git repo是private的;

  • 公有库中的描述文件格式为json 私有库中为ruby。

  创建私有库管理中心(Spec repo)

  略,具体见(https://blog.wtlucky.com/blog/2015/02/26/create-private-podspec/)

  创建私有库流程

  以下流程以FORNetwork举例

  1. 添加私有库管理中心到cocoapods

1

  2

# pod repo add [仓库名] [仓库链接]

  $ pod repo add FORSpecs git@gitlab.51offer.inner:mobile/FORSpecs.git

  添加完之后 就能够在本地找到FORSpecs了 里面的内容就是我们未来需要用到的私有库 当然现在还是空的。

  此时的目录结构为

1

  2

  3

  4

.

  └── repos

  ├── FORSpecs

  └── master

2. 创建private repo
  • gitlab创建 FORNetwork

  • 权限是全组的 mobile

  • 拿到git地址 git@gitlab.51offer.inner:mobile/lib-FORNetwork.git

  3. 创建你自己的private pod

  cocoapods提供了一个命令 可以快捷创建一个private pod的环境

1 $ pod lib create FORNetwork

  生成目录结构

1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

.

  ├── Example

  │ ├── FORNetwork

  │ ├── FORNetwork.xcodeproj

  │ ├── FORNetwork.xcworkspace

  │ ├── Podfile

  │ ├── Podfile.lock

  │ ├── Pods

  │ ├── Tests

  │ └── build

  ├── FORNetwork.podspec

  ├── LICENSE

  ├── Pod

  │ ├── Assets

  │ └── Classes

  ├── README.md

  └── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj

  创建的文件及文件夹中 有两个尤为重要

  • Example

  • FORNetwork.podspec

  Example

  用于demo演示 项目结构和我们平时引入cocoapods的项目结构一致。

  唯一区别的地方是Podfile。

  由于此时我们的私有代码是在本地 所以对于本地私有代码的引入是通过path, pod 'FORNetwork', :path => '../'

1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

source 'https://github.com/CocoaPods/Specs.git'

  use_frameworks!

  target 'FORNetwork_Example', :exclusive => true do

  // 指定路径

  pod 'FORNetwork', :path => '../'

  end

  target 'FORNetwork_Tests', :exclusive => true do

  pod 'FORNetwork', :path => '../'

  pod 'Kiwi'

  pod 'FBSnapshotTestCase'

  end

  那么私有库的代码放在哪里?

  默认我们需要放到下图的Class中。

  是不是一定要放到Class下?当然不是 路径可以在 FORNetwork.podspec中指定。

  需要注意的时候 当我们Class中添加/删除/修改文件结构的时候,我们都需要对pod udpate用于更新。

  podspec

  podspec就是整个私有库的说明书

  4.完成开发后校验

  在所有的私有库代码开发完成 并且 已经在 Example中添加演示代码后 我们就可以校验了。

  校验的目的是什么?

  校验是为了检测 此时的私有库是否符合标准,是否有警告,是否有错误等等。。。

  可以看到有很多警告。。。

  • WARN | source: Git SSH URLs will NOT work for people behind firewalls configured to only allow HTTP, therefore HTTPS is preferred.

  这是由于我们在podspec说明中指定的地址是git 而不是 http或者https 无关紧要 忽略。

  剩下的警告都是依赖的第三方库和系统警告 大致看了一下 没有私有库本身导致的问题。

  在做完这些判断后 我们就可以通过忽略警告来validate私有库了

1 $ pod lib lint --allow-warnings
5.校验完毕,添加说明书到私有库管理中心中FORSpecs

  命令如下

1 $ pod repo push FORSpecs FORNetwork.podspec

  如果直接执行以下命令 仍旧会出现之前校验的报错 那是由于在上传前cocoapods仍旧会validate一次。

  所以我们仍旧需要加上--allow-warnings参数

1 $ pod repo push FORSpecs FORNetwork.podspec --allow-warnings

  这回就上传成功了

  6. 本地搜索一下私有库

1 $ pod search FORNetwork

  得到结果如下

  -> FORNetwork (0.1.0)

  51offer网络库

  pod 'FORNetwork', '~> 0.1.0'

  - Homepage: https://gitlab.51offer.inner/mobile/lib-FORNetwork

  - Source: git@gitlab.51offer.inner:mobile/lib-FORNetwork.git

  - Versions: 0.1.0 [FORSpecs repo]

  和我们在说明书中填写的一致 此时说明私有库搭建完成。

  6.项目中引用

  虽然可以搜索到,但是项目中引入仍旧需要做一些处理。

  我们需要在Podfile中指定source。

  小结

  整体来说,创建私有库不难,维护私有库很麻烦,一旦有新代码的改动,每次都需要创建新版本,有点繁琐。

  后续希望通过两方面来简化流程:

  • 脚本编写 一步搞定所有流程 方便更新版本;

  • git hook监控commit 当检测到特定文本比如”更新pod” 自动运行脚本。

  参考详见阅读原文

mt.sohu.com true ios笔记 https://mt.sohu.com/20160824/n465823814.shtml report 7841 背景项目状况项目前期实现为主对业务代码和基础代码只做了大概隔离(目录上的隔离);业务代码和基础代码的隔离不彻底有耦合无法抽离基础代码供其他app使用(目前暂无此
阅读(0) 举报
欢迎举报抄袭、转载、暴力色情及含有欺诈和虚假信息的不良文章。

热门关注

搜生活

搜生活+关注

搜狐公众平台官方账号

MAGIC杨梦晶

MAGIC杨梦晶+关注

生活时尚&搭配博主 /生活时尚自媒体 /时尚类书籍作者

搜狐教育

搜狐教育+关注

搜狐网教育频道官方账号

星吧GEO

星吧GEO+关注

全球最大华文占星网站-专业研究星座命理及测算服务机构

热门图片

  • 热点视频
  • 影视剧
  • 综艺
  • 原创
锦绣缘

同步热播-锦绣缘

主演:黄晓明/陈乔恩/乔任梁/谢君豪/吕佳容/戚迹
神雕侠侣

大结局-神雕侠侣

主演:陈晓/陈妍希/张馨予/杨明娜/毛晓彤/孙耀琦
封神英雄榜

同步热播-封神英雄榜

主演:陈键锋/李依晓/张迪/郑亦桐/张明明/何彦霓

六颗子弹

主演:尚格·云顿/乔·弗拉尼甘/Bianca Bree
龙虎少年队2

龙虎少年队2

主演:艾斯·库珀/ 查宁·塔图姆/ 乔纳·希尔

《奔跑吧兄弟》

baby14岁写真曝光

《我看你有戏》

李冰冰向成龙撒娇争宠

《明星同乐会》

李湘遭闺蜜曝光旧爱

《非你莫属》

美女模特教老板走秀

《一站到底》

曝搬砖男神奇葩择偶观

搜狐视频娱乐播报

柳岩被迫成赚钱工具

大鹏嘚吧嘚

大屁小P虐心恋

匆匆那年第16集

匆匆那年大结局

隐秘而伟大第二季

乔杉遭粉丝骚扰

The Kelly Show

男闺蜜的尴尬初夜

我来说两句排行榜

客服热线:86-10-58511234

客服邮箱:kf@vip.sohu.com