尊重原创, 共同进步.
前提
公司某项目因实际开发, 需要全部修正和部分修改部分Pod项目的配置.
因这种配置相对较少有人用到, 所以网上找答案也比较累. 折腾完后, 还是记录一下便于自己和大伙查找这类资料.
具体实情
- 混编OC和Swift
- Pod项目的Swift适配版本新旧不一
- 某个Pod项目由于自带的lib文件不支持BitCode, 所以需要额外处理
- 其它可能的配置需求
Podfile内容及解释
具体看注释.
因涉及项目隐私, 部分路径和项目使用了化名.
platform :ios, "8.0"
use_frameworks! # 因为是混编, 全局使用framework模式, 也可以放入只针对部分的项目放入具体的target中
source 'https://github.com/CocoaPods/Specs.git' # 指定Podfile源
source 'https://test.com/test-repo-name' # 其它的源, 也可以指定本地服务器源
# 由于多个target都使用了这些库, 进行模块化归类和定义, 便于管理
def abc_dependency
pod "ABCDemoLibName", "~>1.0.0" # 建议指定到具体的版本, 避免版本变更引起的接口变化导致不知名问题
end
def rn_dependency # 我们的项目使用了ReactNative的东西
# 'node_modules'目录一般位于根目录中
# 但是如果你的结构不同,那你就要根据实际路径修改下面的`:path`
pod 'React', :path => 'node_modules/react-native', :subspecs => [
'Core',
'DevSupport',
'RCTText',
# 在这里继续添加你所需要的RN模块, 具体参考ReactNative的podspec文件中的subpod描述
# ...
]
# 如果你的RN版本 >= 0.42.0,请加入下面这行
pod "Yoga", :path => "node_modules/react-native/ReactCommon/yoga"
# 摄像头库
pod 'react-native-camera', path: 'node_modules/react-native-camera'
# 还有其它第三方开发, 或者本地自行开发的npm包(必须支持了CocoaPods)
# ...
end
target "MyDemoTarget1" do
abc_dependency
rn_dependency
end
target "MyDemoTarget2" do
abc_dependency
rn_dependency
end
# 可以引申到其它配置项修改.
# 关于宏及其对应含义, 可以参考Github上边的部分gist.
# 也可以直接在XCode构建/运行后, 打开Report Navigator, 查看构建历史的详细日志, 其中有大量的参数信息
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
# Swift版本在各个项目库中适配情况不同, 建议统一进行配置
config.build_settings['SWIFT_VERSION'] = '3.2'
end
if target.name == "ABCDemoLibName" # 指定某个Pod项目target, 单独修改其配置
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
end
else # 其它项目沿用统一设置. 在这里也可以不修改, 因为XCode 8以上BitCode都已经默认为开启状态
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'YES'
end
end
end
end
复制代码
总结
遇到解决不了问题的时候, Google/Stack Overflow也不一定帮得上忙. 最省时间和省力的办法还是得找官方文档.
当然, 前提是你还得懂更多的语言和知识, 比如Ruby