pod install与pod update的区别
pod install一般是你第一次想要为项目添加pod的时候使用的,它同样也使
用在你为Podfile文件添加或移除pod库的时候。
每次pod install命令运行的时候,pod install会为每一个它安装的pod
库在Podfile.lock文件中写入其版本号。Podfile.lock文件追踪每一个安
装的pod库的版本号,并锁定这些版本号。
当你运行pod install是,它将只解决不在Podfile.lock中的pod库依赖关
系
对于在Podfile.lock文件中的pod库,pod install会只下载
Podfile.lock文件中指定的版本,而不会去检查这个库是否有更新的版本。
对于不在Podfile.lock文件中的pod库,pod install会搜索这个pod库在
Podfile文件中指定的版本
pod update
当你运行了pod update PODNAME命令,CocoaPods会在不考虑
Podfile.lock中版本的情况下试着去查找PODNAME的最新版本。pod
update PODNAME命令会将相应的pod更新到最新的版本(新版本仍然遵守你
在Podfile中做的限制)
用法
通过pod update PODNAME,你可以只更新某个特定的pod库(检查是否存在
新版本并更新相应的pod库)。相反,pod install则不会去更新已安装的
pod库。
当你向Podfile中添加了pod,你应该使用pod install而不是pod update
去在不更新已安装的pod库的版本基础上安装新添加的pod库。
当你想过更新某个特定pod库(或所有的库)的版本时你只需要使用pod
update
pod.lock产生冲突的原因
Podfile.lock 不一致的原因:
Podfile.lock和Manifest.lock:
项目中集成 cocoapods 的时候,运行 pod install 后,项目根目录中会
生成Podfile.lock,而Pods目录中会有Manifest.lock。
Xcode 编译项目的时候,会执行 Build Phases 中的[CP] Check Pods
Manifest.lock 脚本,这个脚本会比对Podfile.lock和
Manifest.lock,如果两个文件不相同就会报错。
Podfile.lock是什么:
Podfile.lock 文件主要包含三个块:PODS、DEPENDENCIES、SPEC
CHECKSUMS,用来记录每个pod的版本号、依赖的其他库和每个库对应的
podspec.json文件的 checksum(SHA-1算法)。通过这些信息可以确保多
人协作的时候,大家使用的是相同版本的第三方库。
删掉Pod.lock文件,然后重新执行pod install --verbose --no-
repo-update
CocoaPods原理和说明
1、第三方库会被编译成.a静态库供我们真正的工程使用。
CocoaPods会将所有的第三方库以target的方式组成一个名为Pods的工程,
该工程就放在刚才新生成的Pods目录下。整个第三方库工程会生成一个名称为
libPods.a的静态库提供给我们自己的CocoaPodsTest工程使用。
对于资源文件,CocoaPods提供了一个名为Pods-resources.sh的bash脚
本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到
目标目录中。
2、我们的工程和第三方库所在的工程会由一个新生成的workspace管理
为了方便我们直观的管理工程和第三方库,CocoaPodsTest工程和Pods工程
会被以workspace的形式组织和管理,也就是我们刚才看到的
CocoaPodsTest.xcworkspace文件。
3、原来的工程设置已经被更改了,这时候我们直接打开原来的工程文件去编译
就会报错,只能使用新生成的workspace来进行项目管理。
4、CocoaPods通过一个名为Pods.xcconfig的文件来在编译时设置所有的依
赖和参数。
dSYM 文件
什么是 dSYM 文件
Xcode编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 是保存 16
进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文
件中,并且每次编译项目的时候都会生成一个新的 dSYM 文件,位于 /
Users/<用户名>/Library/Developer/Xcode/Archives 目录下,对于
每一个发布版本我们都很有必要保存对应的 Archives 文件
( AUTOMATICALLY SAVE THE DSYM FILES 这篇文章介绍了通过脚本每次
编译后都自动保存 dSYM 文件)。
dSYM 文件有什么作用
当我们软件 release 模式打包或上线后,不会像我们在 Xcode 中那样直观
的看到用崩溃的错误,这个时候我们就需要分析 crash report 文件了,
iOS 设备中会有日志文件保存我们每个应用出错的函数内存地址,通过 Xcode
的 Organizer 可以将 iOS 设备中的 DeviceLog 导出成 crash 文件,
这个时候我们就可以通过出错的函数地址去查询 dSYM 文件中程序对应的函数
名和文件名。大前提是我们需要有软件版本对应的 dSYM 文件,这也是为什么
我们很有必要保存每个发布版本的 Archives 文件了。
如何将文件一一对应
每一个 xx.app 和 xx.app.dSYM 文件都有对应的 UUID,crash 文件也
有自己的 UUID,只要这三个文件的 UUID 一致,我们就可以通过他们解析出
正确的错误函数信息了。
Git和SVN
1. Git是分布式的,SVN是集中式的,好处是跟其他同事不会有太多的冲突,
自己写的代码放在自己电脑上,一段时间后再提交、合并,也可以不用联网在本
地提交;
2. Git下载下来后,在本地不必联网就可以看到所有的log,很方便学习,
SVN却需要联网;
3. Git鼓励分Branch,而SVN,说实话,我用Branch的次数还挺少的,SVN
自带的Branch merge我还真没用过,有merge时用的是Beyond Compare工
具合并后再Commit的;
4. Tortoise也有出Git版本,真是好东西;
5. SVN在Commit前,我们都建议是先Update一下,跟本地的代码编译没问
题,并确保开发的功能正常后再提交,这样其实挺麻烦的,有好几次同事没有先
Updata,就
Commit了,发生了一些错误,耽误了大家时间,Git可能这种情况会少些。