从事或者学习iOS开发的小伙伴避免不了用到大佬写的第三方包或者大厂的SDK,那么我们用来导入第三方包的Podfile文件中到底有些什么东西?我们来一探究竟。
这是一个项目中的Podfile文件示例。
platform
我们可以看到上面的示例中platform被注释掉了,当我们在终端中执行命令引入包时产生的黄色警告就是因为没有设置platform,如下。
那么platform到底是干什么用的呢?其实这些第三方功能包都会有对应的版本需求,如果用户的ios系统没有达到包所规定的最低版本,那么这些包的功能就不能完美的展示,所以platform是限制版本必须大于所有包中最低的版本要求,比如我要使用的包最低版本要求是9.4,但我platform后设置的ios版本是9.0,那么就有可能存在冲突。
总的来说platform其实并没有什么用,因为我们在项目target中也会设置最低版本号,如下图,所以我们一般将platform注释掉,使其是一个默认值(即下图值),platform的存在是为了向下兼容,即不同ios版本的用户是否能使用相同的功能,这里可以参考这个文档https://juejin.cn/post/6844904090762215437。
target do end
在target后面即为我们的项目名字,do和end中间可进行我们的引入pod包操作。
use_frameworks!意为使用动态库,那么有动态库就有静态库,这两个有什么区别呢?
动态库为.framework结尾的文件,swift所有的系统库都为动态库,比如打开了一个app加载了UIKit,那么再打开另外一个app需要UIKit时就不需要重复进行加载,可以进行共用,节省时间。
静态库为.a结尾的文件,功能则与动态库相反。
pod的版本限制
1.安装包最新版本,直接pod 包名
pod 'MBProgressHUD'
2.安装包指定版本,后面跟上版本号
pod 'MBProgressHUD', '1.2.0'
3.安装指定范围内的版本
pod 'MBProgressHUD', '> 1.2.0'
该语句意为安装大于1.2.0以上的最高版本
<、<=、>=同理
4.限制版本号
podfile中的版本号有三个:主要版本号、次要版本号、修订版本号,例(1.2.1)中的三个数字对应三个版本号。若主要版本号改变,意味着API发生了较大更新,可能用法也发生较大改变,例如Alamofire的用法从Alamofire.request变为了AF.request;若次要版本号改变,意味着可能增加了某些新功能,但不会对使用方法上进行较大改变;若修订版本号改变,可能是进行了一些小bug的修复。
pod 'MBProgressHUD', '~> 1.2.0'
该语句意味如果进行包的更新,只会更新修订版本到最高版本
pod 'MBProgressHUD', '~> 1.2'
该语句意味如果进行包的更新,只会更新次要版本到最高版本
pod 'MBProgressHUD', '~> 1'
该语句和上一条语句相同
Podfile.lock
当前下载的确切版本的第三方包会被写入该文件,如果存在Podfile.lock文件,那么pod install时只会下载该文件中的确切版本,这样就能保持项目统一性。
pod install vs. pod update
结论:推荐使用pod install
pod update会更新lock文件,一般pod update单个包,更新时也会受命令的版本限制。
使用pod outdated 可以检测当前使用的包有哪些有升级版.
以上就是关于pod文件中的内容解析。