Podfile文件
- Podfile文件是在工程路径下,通过
pod init
命令自动生成的一个文件,此文件可编辑输入你想要导入的第三库的名称及版本; - Podfile文件其有特定的语法格式,一般常见的有以下内容;
Podfile文件的语法格式
-
platform :iOS, '8.0'
- 指定了开源库应该被编译在哪个平台以及平台的最低版本;
- 如果不指定平台版本,官方文档里写明各平台默认值为 iOS:4.3,OS X:10.6,tvOS:9.0,watchOS:2.0
-
use_frameworks!
- 使用 frameworks 动态库替换静态库链接;
-
target '项目名称xxx' do ... end
- 指定特定 target 的依赖库;
- 可以嵌套子 target 的依赖库;
-
inhibit_all_warnings!
- 屏蔽 CocoaPods 库里面的所有警告;
- 这个特性也能在子 target 里面定义,如果你想单独屏蔽某 pod 里面的警告也是可以的,例如:
pod 'JYCarousel', :inhibit_warnings => true
-
source
- 指定 specs 的位置,自定义添加自己的 podspec
- 如果没有自定义添加 podspec,则可以不添加这一项,因为默认使用 CocoaPods 官方的 source。一旦指定了其它 source,那么就必须指定官方的 source,如下例所示:
source 'https://github.com/CocoaPods/Specs.git'//官方的
source 'https://github.com/aliyun/aliyun-specs.git'//自定义的
- 导入目标第三库的基本写法与含义:
pod 'AFNetworking'
--> 不显式指定依赖库版本,表示每次都获取最新版本
pod 'AFNetworking', '2.0'
--> 只使用 2.0 版本
pod 'AFNetworking', '> 2.0'
--> 使用高于 2.0 的版本
pod 'AFNetworking', '>= 2.0'
--> 使用大于或等于 2.0 的版本
pod 'AFNetworking', '< 2.0'
--> 使用小于 2.0 的版本
pod 'AFNetworking', '<= 2.0'
--> 使用小于或等于 2.0 的版本
pod 'AFNetworking', '~> 0.1.2'
--> 使用大于等于 0.1.2 但小于 0.2 的版本
pod 'AFNetworking', '~> 0.1'
--> 使用大于等于 0.1 但小于 1.0 的版本
pod 'AFNetworking', '~> 0'
--> 高于 0 的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本
最后给出一个做过的项目的Podfile文件,其内容如下:
platform:ios,'10.0'
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/aliyun/aliyun-specs.git'
inhibit_all_warnings!
target 'RSXS' do
#use_frameworks!
pod 'MJExtension', '~> 3.0.15'
pod 'AFNetworking', '~> 3.2.1'
pod 'Masonry'
pod 'SDWebImage', '~> 4.4.1'
pod 'MJRefresh', '~> 3.1.15.3'
pod 'MBProgressHUD', '~> 1.1.0'
pod 'SDCycleScrollView', '~> 1.75'
pod 'MSWeakTimer', '~> 1.1.0'
pod 'WechatOpenSDK'
pod 'CocoaSecurity', '~> 1.2.4'
pod 'DTCoreText', '~> 1.6.21'
pod 'FMDB', '~> 2.7.2'
pod 'FXBlurView', '~> 1.6.4'
pod 'AlicloudFeedback', '~> 3.3.6'
pod 'RDVTabBarController', '~> 1.1.9'
pod 'RollingNotice', '~> 1.0.5.2'
pod 'SXWaveAnimate', '~> 2.0.0'
pod 'UMCCommon'
# U-Share SDK UI模块(分享面板,建议添加)
pod 'UMCShare/UI'
#集成微信(精简版0.2M)
pod 'UMCShare/Social/ReducedWeChat'
#集成QQ/QZone/TIM(完整版7.6M)
pod 'UMCShare/Social/QQ'
#集成新浪微博(完整版25.3M)
pod 'UMCShare/Social/Sina'
#集成统计SDK
pod 'UMCAnalytics'
pod 'Reveal-SDK', :configurations => ['Debug']
#集成极光推送
pod 'JPush'
pod 'KMNavigationBarTransition'
pod 'UITableView+FDTemplateLayoutCell'
pod 'HCSStarRatingView', '~> 1.5'
pod 'Bugly'
#pod 'Fabric'
#pod 'Crashlytics'
#pod 'Flurry-iOS-SDK/FlurrySDK'
#pod 'CocoaDebug', :configurations => ['Debug']
pod 'TTTAttributedLabel', '~> 2.0.0'
pod 'Bytedance-UnionAD'
pod 'SDWebImage/GIF'
pod 'FLAnimatedImage'
end
Podfile.lock文件
- 在编辑完Podfile文件之后,第一次执行
pod install
命令,Cocoapods就会按照Podfile文件中内容,去加载链接所有的第三库,加载完成之后,就会生成一个Podfile.lock文件
,也就是说Podfile.lock文件是在第一次pod install
成功后生成的,它会将所有加载的第三方库的版本信息全部记录保存下来;
PODS:
- AFNetworking (3.0.1):
- AFNetworking/NSURLSession (= 3.0.1)
- AFNetworking/Reachability (= 3.0.1)
- AFNetworking/Security (= 3.0.1)
- AFNetworking/Serialization (= 3.0.1)
- AFNetworking/UIKit (= 3.0.1)
- AFNetworking/NSURLSession (3.0.1):
- AFNetworking/Reachability
- AFNetworking/Security
- AFNetworking/Serialization
- AFNetworking/Reachability (3.0.1)
- AFNetworking/Security (3.0.1)
- AFNetworking/Serialization (3.0.1)
- AFNetworking/UIKit (3.0.1):
- AFNetworking/NSURLSession
- Masonry (0.6.4)
DEPENDENCIES:
- AFNetworking (= 3.0.1)
- Masonry (~> 0.6.2)
SPEC REPOS:
trunk:
- AFNetworking
- Masonry
SPEC CHECKSUMS:
AFNetworking: 20d8749e03e45f1e5c046ad0b647e0b07bcdd91f
Masonry: 281802d04d787ea2973179ee8bcb50500579ede2
PODFILE CHECKSUM: 91497ff1e149c86256edcfe4055d715f641290db
COCOAPODS: 1.10.2
- 看到Podfile.lock文件不仅会记录所有导入第三方库的信息,还记录了Cocoapods工具当前使用的版本信息,
COCOAPODS: 1.10.2
pod install与pod update命令的区别
-
每次执行
pod install
命令都会去下载Podfile.lock文件中没有记录的新添加导入的第三方库,或者有移除指定的第三方库,就会移除; -
如果第三方库没有指定版本号:
- 当第一次执行
pod install
命令时,那么下载的是最新的版本,同时将第三方库的版本号记录在Podfile.lock文件中; - 以后再执行
pod install
命令时,即使第三方库已经更新了新的版本,pod不会下载新的版本,依然会维持第一次执行pod install
命令时的版本; -
pod update
会检测第三方库是否更新了新的版本,若有更新,会下载最新的版本;
- 当第一次执行
-
如果第三方库指定了特定的版本号:
- 例如pod 'AFNetworking', '2.0',第一次执行
pod install
命令时,下载的是2.0版本,同时将第三方库的版本号记录在Podfile.lock文件中;以后执行pod install
命令时,都不会更新AFNetworking,一直是2.0版本; - 执行
pod update
,不会更新AFNetworking的版本号,因为版本已经确定为2.0版本;
- 例如pod 'AFNetworking', '2.0',第一次执行
-
如果第三方库指定的是范围版本号:
- 例如pod 'Masonry', '~> 0.6.2',那么第一次执行
pod install
命令时,会下载大于 0.6.2且小于1.0.0的版本,有可能下载的不是最新的版本,同时将第三方库的版本号记录在Podfile.lock文件中;以后执行pod install
命令时,只要当前版本号满足了 '~> 0.6.2',就不会去下载别的版本; - 执行
pod update
,只要当前版本号满足了 '~> 0.6.2',就不会去下载别的版本,也就是说即使第三方库有了更新也不会更新到最新的版本;
- 例如pod 'Masonry', '~> 0.6.2',那么第一次执行
网友评论