CocoaPod pod init 、install 、update 用对了嘛?

1,956 阅读6分钟

1. CocoaPod pod init 、install 、update 用对了嘛?

 语法也就是 ruby 语法,CocoaPod 命令是基于 ruby
pod init 、install 、update、分别做了什么?

pod install & pod update 的区别:

  1. **相同 :**当项目中存在一个 Podfile 的文件,不论是调用 pod install 还是 pod update
    都会生成一个 Podfile.lock 的文件。
    ( Podfile.lock 文件,会锁定被 pod install 或者 pod update 下载下来的第三方库的版本号。)

  2. 不同 :
    2.1   当  Podfile文件里没有指定版本号Podfile**.lock** 文件存在时,

    那么 **pod install** 只会依赖 **Podfile.lock** 里的第三方库的版本(Podfile.lock 文件有啊,里面又有版本号啊,信息最全,我安装库肯定依赖这个啦!!)
    Pod update下载最新的第三方框架,并且更新 **Podfile.lock** 文件

总结

1. 如果指定了版本号,pod install 和 pod update 没有区别。

2. 如果没有指定版本号,第一次使用 pod 命令时,pod install 和 pod update 没有区别。

3. 如果没有指定版本号,不是第一次使用 pod 命令(主要体现在有 Podfile.lock) ,那么使用 pod install 只会依赖 Podfile.lock 里的版本号,而 pod update 则会下载最新版本,并更新 Podfile.lock 中的版本号。

pod install 主要目的是安装第三方库。 pod update 主要是更新第三方库。

pod init

初始化一个工程,此时会产生Podfile这么一个文件,我们可以添加需要引入的第三方包

pod install

pod install --verbose

用这个命令可以看到所有的执行操作

  • 第一次构建工程时要使用该命令,但是如果我们编辑了Podfile文件,例如添加、删除、更新了一个pod也会使用该命令

  • 我们运行这个命令的时候,开始下载安装新的pods,它会将我们每一个第三方包的版本写入一个叫Podfile.lock的文件。这个文件包含了我们安装的所有的第三方包的信息

  • 当我们运行这个命令的时候,它只会下载不在Podfile.lock文件里的第三方包

  • 对于Podfile.lock里边有的详细的第三方包(有版本),它只会下载对应的版本,不管这个第三方包有没有新的版本

  • 如果Podfile.lock里边没有的第三方包,它将下载你Podfile里边写的(例如pod 'MyPod', '~>1.2'),如果不写版本默认下载最新的版本

当你想要为你的工程加入 pods 时,这个命令第一次被使用;当然,任何时候你修改了你的 Podfile,添加,升级,或是移除一个 pod 时,你都应该使用这个命令。

pod update

如果我们运行pod update PODNAME 将  只更新这一个 第三方包到最新的版本

如果我们直接运行pod update 没有pod名称,它将会更新我们所有的第三方包

总结

如果我们在Podfile文件增加、减少、或者改变了版本的时候运行pod install;

如果我们想更新第三包的时候使用pod update命令。

运行 pod install 不会更新已经安装的 pods 的版本

当你向你的 Podfile 添加了一个 pod,你应该运行 pod install,而不是 pod update

仅安装这个新的 pod,并且不在这个安装过程中冒险去更新已存在的 pod。
仅仅当你想去更新某一个指定的 pod(或者所有 pods)的版本的时候,你才会用到 pod update。

注意:
在你开发自己的 pod 时,往往会遇到向你的 pod 中添加 .h/.m/.xib 文件的情况,这个时候应该运行 pod install。
原因是,在开发中的 pod 版本没有变化,但是内容发生了变化。运行 pod update 的话,由于版本没有发生变化,所以不会起效果。
运行 pod install ,因为在开发中的 pod ,源代码文件往往是在你自己的电脑上,而后在 Podfile 中,这个开发中的 pod 的路径往往是 “../xxxpod” 这样的,在pod.project 中,这个正在开发的 pod 会存在于 development 文件夹下。运行 pod install 会将你新添加的 .h/.m/.xib 进行安装,如果不运行,会出现文件存在,但是Xcode 提示找不到文件的问题,原因就是上次 pod install 之后 CocoaPods 创建了 配置文件(.xcconfig,在 pods 文件目录下)。通过这些配置文件,CocoaPods 管理了所有的 pod 中的头文件路径,而新增的 .h/.m/.xib 不在原先的配置文件中,所以文件时存在的,但是 Xcode 找不到。

场景 1

1、User1 创建工程:
User1 创建了工程,并且想要使用 pods A,B,C。他创建了 Podfile 将这三个 pod 写入 Podfile,并运行了 pod install。
这将会安装 pod A,B,C ,我们假设这三个 pod 都是 1.0.0 版本。
然后 Podfile.lock 将会记录这一切,并且记录下 pod A,B,C 所安装的版本都是 1.0.0。

2、User1 添加一个新的 pod:
之后,User1 想要添加一个新的 pod D 到 Podfile。
当他在 Podfile 中添加了 pod D 之后,紧接着他应该运行 pod install。这样一来,即便 pod B 的维护者,在 User1 第一次执行 pod install 之后,发布了 pod B 的 1.1.0 版本,工程中仍会继续使用 pod B 的 1.0.0 版本 —— 因为 User1 只想添加 pod D,不想冒险升级 pod B。

3、User2 加入工程:
然后 User2 加入了团队,之前 User2 从未参与过该工程。他们 clone 了仓库,然后运行 pod install。
Podfile.lock(该文件应该提交到 git 仓库) 的内容,将会保证他们能得到完全相同的 pods,pods 的版本完全和 User1 所使用的一致。
即便 pod C 有一个 1.2.0 版本可以使用,User2 仍然会得到 1.0.0 版本的 pod C。因为在 Podfile.lock 中注册的就是 1.0.0 版本。pod C 被 Podfile.lock 锁定在 1.0.0 版本。

4、检查一个 pod 的新版本:
之后,User1 想要检查下所安装的 pods 是否有可用的更新版本。他们运行 pod outdated ,这将会告诉他们 pod B 有一个新的 1.1.0 版本,同时 pod C 有一个新的 1.2.0 版本已经发布。
User1 考虑了下,他们想要更新 pod B,而不是 pod C;所以,他们运行 pod update B,这会将 B 的版本从 1.0.0 更新到 1.1.0(同时更新了 Podfile.lock),而保持 pod C 的版本在 1.0.0(并不会把他更新到 1.2.0)

2. .p12 苹果证书 ?

.cer是苹果的默认证书,在xcode开发打包可以使用,

.cer证书仅包含公钥,.p12证书可能既包含公钥也包含私钥,这就是他们的区别,

除开xcode开发工具,其他都需要用p12才能打包。