iOS项目组件化之Cocoapods(二) -- 踩坑与小技巧
前言
该篇介绍在组件化中遇到的一些坑和一些小技巧使用方面.
系列文章
iOS项目组件化之Cocoapods(一) -- 基础
iOS项目组件化之Cocoapods(二) -- 踩坑与小技巧
坑
静态库多类型资源文件问题
静态库主要坑之一就是多类型资源文件问题. 当时就为了这个查了很久 (╯‵□′)╯︵┻━┻
当你设podspec为:
s.static_framework = true
这时候就会存在只能加载一种类型文件问题, 下面我用实例来演示给大家看.
库结构
我们先看看库文件
在这里插入图片描述
代码运行
两个库, 一个是动态库, 一个是静态库. 资源文件都是放了一个xib和一张图片.(Swift和OC没啥差别)
接下来看看主项目里面代码的调用, 并且运行一下.
[图片上传失败...(image-a700f6-1550222540017)]从日志中, 我们可以看到, 动态库和静态库
勾选Inherit Module From Target
这里要注意一点, xib中必须要勾选Inherit Module From Target 指定在哪个模组
不然你运行会和静态库一样, 出现 Unknown class xxx in Interface Builder file.
在这里插入图片描述
解决静态库使用多类型资源文件问题
其实这个很好解决, 只要把静态库需要用的资源分离出来,创建一个资源库, 然后静态库的podspec里面关联这个资源库. 这样就能静态库使用多类型资源问题了.
最后这个我就不演示了, 留给大家自己去实践, 有啥问题可以留个评论~
App Extension 被限制问题
'sharedApplication' is unavailable: not available on iOS (App Extension) - Use view controller based solutions where appropriate instead.
这个错误是因为你用AppExtension的'sharedApplication'就已经是在调用系统层的东西了, 所以苹果是不会让你取这个的.
所以App Extension里面用的库一定要注意, 不要涉及到这些系统禁用的东西.
The 'Pods-xxx' target has transitive dependencies that include static binaries:
出现这个错误时, 在podspec中加入. 具体原因我也没去了解, 知道的大哥可以在评论中解释一下.
Pod::Spec.new do |s|
pre_install do |installer|Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {
}
end
end
小技巧
项目配置
在这里我列出最常用的两个吧( 反正是我最常用✧(≖ ◡ ≖) )
这个属性还可以配置很多, 具体可以去官网查, 或者Google一下.
ps: ENABLE_BITCODE 这些字段, 可以右击 xxx.xcodeproj, 点击显示包内容, 打开project.pbxproj文件查看字段( 这个文件很有用,有兴趣可以深入了解一下 )
s.pod_target_xcconfig = {
'ENABLE_BITCODE' => 'NO', #配置Bitcode为NO
'ENABLE_TESTABILITY' => 'NO', #配置enable testability为NO
}
分模块
其实按目前的教程, 如果直接这样发布到Cocoapods上面, 或者指定git依赖等等.
会发现文件的位置并不会分文件夹, 而是全部在一个目录下, 这样就会特别不清晰, 这个时候就需要用到 .subspec 字段了.
Pod::Spec.new do |s|
# s 是上面 do |s| 声明的 s, 类似声明一个对象
s.subspec 'Tool' do |tool|
# Tool是文件夹名, tool是这个组的对象.
tool.subspec 'UITool' do |uiTool|
# 如果还需要细分, 那么就一直这样下去就行
end
end
end
而且人家单独想用你某个subspec还可以这样pod
pod 'xxx/Tool'
这样分不单单层次分明而已, 例如一些老项目是有MRC文件, 然后你只需要把MRC文件放到一个文件夹,其他ARC放到另一个文件夹,这样就能通过每个不同的subspec来设置.
还有很多用法,这里只是抛转引玉.
项目地址
照惯例, 提供项目地址
https://github.com/SyKingW/XQTestCocoapodsModule(2)