在使用pod做模块化的时候,有一些framework在podspec中的swift文件内无法引入的,比如BaiduMapKit
、UMengAnalytics
等。这个Demo或许能解救你于水火之中。
自动在私有Pods(BMK
)中增加静态库(BaiduMapKit
)的包含功能。
这里只说需要额外更改的部分。
如果有更好的配置方法,或者此方法有什么不妥的地方(特别是添加framework这块),请指正~
s.dependency 'BaiduMapKit'
s.pod_target_xcconfig = {
'OTHER_LDFLAGS' => '$(inherited) -undefined dynamic_lookup'
}
s.prepare_command = 'sh mk_modulemap.sh Pods/BaiduMapKit'
pre_install do |installer|
# workaround for https://github.com/CocoaPods/CocoaPods/issues/3289
Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {}
end
BaiduMapKit
、UMengAnalytics
等一些framework
中因为不含Modules/module.modulemap
,所以无法在swift中import。
在DianQK的基于 CocoaPods 进行 iOS 开发说明了这个问题,并提供了解决方案,可以参考。
由于其重新定义podspec的方案需要在库更新的时候在此更新该podspec
,所以又写了一个简单的脚本做这件事情。
该脚本可以直接配置在将这样的pod作为dependency
的podspec
中,写做:
s.prepare_command = 'sh mk_modulemap.sh Pods/BaiduMapKit Pods/UMengAnalytics'
这样就可以自动补全framework
缺失的Modules/module.modulemap
啦~~
脚本会遍历每个目录下所有的framework,并根据.framework/Headers
补全其中缺失的Modules/module.modulemap
。
Modules/module.modulemap
文件格式为:
framework module MODULE {
header "xxx.h"
...
export *
}
一个或多个目录。
将mk_modulemap.sh按照DEMO中的环境放置,在podspec
中配置:
s.prepare_command = 'sh mk_modulemap.sh PATH1 PATH2'
讲mk_modulemap.sh放置在Podfile同级目录下,然后在Podfile中配置:
post_install do |installer|
system 'sh md_modulemap.sh Pods'
end
处理脚本就在那里mk_modulemap.sh,你想咋用咋用。。只要解决问题就好!😄
shell
功底较差,功能可用,脚本不忍直视,大佬们见笑了。。