CocoaPods实践与理解

/** 写在前面,我是新手经验和知识量还不够,有些理解和解释有bug,我自己都不知道哈哈。辩证的看哦 **/

来我司之后,第一天搭建生产环境遇到,就是被CocoaPods坑了。

生产环境是这样:os x Yosemite 10.10.3 ruby 2.0.0p481 CocoaPods 0.57.2

问题1描述:

diff: /../Podfile.lock: No such file or directory 

diff: /Manifest.lock: No such file or directory error: The sandbox is not in sync with 

the Podfile.lock. Run 'pod install' or update your CocoaPods installation.

当我pod install 项目之后,是可以生成Pods文件目录,下载引用的frame。但是无法生成.xcworkspace文件,项目有之前编译生存的.xcworkspace,删除后发现pod install 无法生成新的。也没有生成Podfile.lock文件,当你打开.xcworkspace,发现会报错上面的3个错误。google这些错误,在stackoverflow 找到资料,给出解决方案如下:

1. 删除工程文件夹下的Podfile、Podfile.lock及Pods文件夹

2. 删除xcworkspace文件

3. 使用xcodeproj文件打开工程,删除Frameworks组下的Pods.xcconfig及libPods.a引用

4. 在工程设置中的Build Phases下删除Check Pods Manifest.lock及Copy Pods Resources

ps:如果将cocoapods集成到工程中后不小心修改或删除了其相关文件导致无法便以通过例如:不小心把

Pods.xcconfig给删除了然后出现diff: /../Podfile.lock: No such file or directory,用上面的方法删除cocoapods后,

再重新$sudo pod install一下就好了。

但是我问题里面,出现找不到Podfile.lock文件,而且即使按照这个步骤来完成,问题也没有解决。

再补充一点,我司建议使用自己的repo spec镜像。于是我按照指南先做来一步删除cocoapods默认指向github的repo

pod repo remove master

pod repo add master https://gitcafe.com/lloydsheng/Specs.git

-------------------------

名称解释:repo spec 是什么?

可以看这篇文章里面介绍什么是repo,如果制作自己的项目发布到cocoapods官方repo里面去。http://www.360doc.com/content/14/0309/10/11029609_358969425.shtml

我稍微解释一下(2333 我也知道这么多哈),repo就是仓库的意思,上面的master就是cocoapod 安装后默认的仓库,这里面是list文件目录,有所有官方维护的第三方库如AFNetwork,SDWebImage。里面放的是特殊的框架说明文档,你可以本地查看master目录里面的内容,命令如下:

cd ~/.cocoapods/repos/master 进去后发现2个文件和一个目录

CocoaPods-version.yml README.md Specs  然后进入Specs 就可以看到官方维护的所有第三方库。我找到AFNetworking,进入目录发现有0.10.0-2.4.0所有的版本,进入2.4.0文件夹看到AFNetworking.podspec.json文件cat显示一下,可以看到关键这个库的介绍下载地址,{

"name": "AFNetworking",

"version": "2.0.3",

"license": "MIT",

"summary": "A delightful iOS and OS X networking framework.",

"homepage": "https://github.com/AFNetworking/AFNetworking",

"authors": {

"Mattt Thompson": "m@mattt.me"

},

"source": {

"git": "https://github.com/AFNetworking/AFNetworking.git",

"tag": "2.0.3",

"submodules": true

},

"requires_arc": true,

"platforms": {

"ios": "6.0",

"osx": "10.8"

},

  对了,在Podfile文件里面写上pod AFNetworking '2.4.0' 然后执行pod install,就可以通过ruby环境把我们当前项目生成xcworkspace文件,并下载AFNetworking框架。那么cocoapods是怎么找到AFNetworking的,就是到本地的repo master spec里面search查找到AFNetworking,然后解析他的说明文档,找到github上的资源下载下来。目前官方的spec维护有执行pod list 可以看到10824 pods were foun,有一万多个库。

   我可以把自己的库放到cocoapods里面去,上面的网址就是介绍如何安装cocoapods规范fork他们的项目,提交你的库到repo里面去。这样别人就可以通过cocoapods引用你的库了。前面提到我司建议删除cocoapods默认的master repo仓库,给他指向我们自己的服务器镜像。

   好处是什么呢?github不稳定,每次pod install 会clone下来1万多个pod。而且不容易集成我司自己的私有库,是的,我可以把自己的私有库添加到pod里面。最简单方式,就是修改自己电脑上的master pod 按照规范添加一个.podspec.json 你自己执行就可以找到这个库。为了更多贡献,建立服务器上私有pod 库就更nice,维护同官方的库版本,同时添加自己的私有库。对了在Podfile文件里面可以指定我们matsr repo 资源从哪里引用。命令就是Podfile里面添加 source "xxxxxxxx.git"  如果本地repo没有那么会clone下来,同于前面手动执行 pod repo add master "xxxxxxxx.git"  执行后结果就是:Cloning spec repo `gitcafe-lloydsheng-specs` from `https://gitcafe.com/lloydsheng/Specs.git`

执行pod repo list 可以看到你clone哪些spec,我司有好几个specs,你发现有一个master,找了会资料没有理解。哈哈,后来想明白了master就是默认主repo意思,如果你的Podfile里面没有指定source 那么就是master咯。(nice,这是我自己一些理解的)。

master

- Type: git (origin)

- URL:  https://gitcafe.com/lloydsheng/Specs.git

- Path: /Users/jianyi/.cocoapods/repos/master

好了介绍了cocoapods原理和生产环境。

-----------------------

问题二:出现问题以后,我pull了线上的版本测试一下,之前是master主线。执行pod install后,也出现了问题。[!] The 'xxx' target has frameworks with conflicting names: networkxxx.

每次pod install 安装这里的时候就提示有framework 冲突了,按照log理解就是重复引用。但是podfile里面没有重复的引入,其他同事没有问题。因为其他同事忙着发版本,我刚来我先自己研究一下什么问题。当时考虑到一下几个方面:

是不是podfile引入了三个 source repo,他们自己里面有冲突?#一次次屏蔽调试没有问题,就是pod netwrokxxxx 处报错。百思不得其解,后来组长过来debug了一下,也不得其解,不过老鸟踩的坑比我多呀,建议我降低cocoapods版本到0.35.0,和他们环境一样再install看看。

嗯,降低版本后,一次就install成功了,也就是说这次的framework冲突是cocoapods版本引起的。所以这里给大家一个思路,有时候检查一下依赖的环境,也是解决问题的重要方法之一。

总结:第一个问题,出现问题本质是当是我pull的是master版本,里面的podfile不完整引起的,造成没有编译生成新的.xcworkspace和Podfile.lock文件。所以,出现这样问题解决办法,删除.xcworkspace,pod文件夹,Podfile.lock 如果可以生成新的.xcworkspace那么说明cocoapods编译没有问题。就不会出现diff: /../Podfile.lock: No such file or directory。报这个问题,因为.xcworkspace不是你pod install 自己生成的还是老项目留下的,他当然找不到对应的podfile.lock。

    第二个问题,出现的问题就比较诡异,没有经验脑活着子一下子短路了的人会很惨。解决方案降低版本,或者你升级版本尝试一下。


最后分享一下pod命令:

ruby --version 看当前环境的ruby,大多数是建议切换换成淘宝的ruby镜像

pod --version  看当前cocoapods版本

pod repo list  查看你本地clone下来的specs,这样pod update/isstall 会先从本地查找找库的资源路径的

pod repo remove master  刚刚说了,这是删除cocoapods 默认的specs

pod repo add master https://gitcafe.com/lloydsheng/Specs.git  指定自己的默认spec

pod repo update 更新本地和服务器的repo 数据

cd ~/.cocoapods/ 环境目录了 进入看看有什么吧 

cd ~/.cocoapods/repos/master/Specs/ 所有库的规范文档咯

-------------------

可见,我司用的是cocoapods,我自己使用就是pod完了,没有使用说明source 指定repo。这次我就好好学习,研究了一下pod 命令和怎么实现的机制。现在明白来,如何维护私有repo,向官方添加自己的库。nice,,,,,

  至于升级后cocoapods改变了什么,导致报哪个冲突错误呢?现在还没有深入去考虑,目前的知识够我工作,麻利的干活,看到pod相关的语句心里有数了。对cocoapods背后技术原理有了数,遇事就不慌了。

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

推荐阅读更多精彩内容

  • 项目组件化、平台化是技术公司的共同目标,越来越多的技术公司推崇使用pod管理第三方库以及私有组件,一方面使项目架构...
    swu_luo阅读 21,423评论 0 39
  • CocoaPods 是什么? CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具。CocoaPo...
    朝洋阅读 25,630评论 3 51
  • Ruby 安装 要安装cocospods 首先需要安装ruby,可以先安装xcode,再安装macport ,最后...
    山天大畜阅读 1,840评论 0 1
  • 自从开始做互联网运营,看手机看微信成了工作的一部分,手机一响就忍不住去看,其实知道这样不好,很浪费时间,但就是控制...
    知识e站阅读 656评论 0 0
  • 暮然回首,啥都没有 又是一个阴天,厚厚的云层遮住了原本应该绽放的阳光,压抑着,压抑着,这雨又不掉落。心烦意乱...
    秋水兮寒阅读 165评论 0 0