Skip to content

[已解决]在pod库中swift使用百度地图SDK时配置例子

Notifications You must be signed in to change notification settings

madordie/Demo-PodspecUseBMK

Repository files navigation

Demo-PodspecUseBMK

在使用pod做模块化的时候,有一些framework在podspec中的swift文件内无法引入的,比如BaiduMapKitUMengAnalytics等。这个Demo或许能解救你于水火之中。

实现效果

自动在私有Pods(BMK)中增加静态库(BaiduMapKit)的包含功能。

配置方法

这里只说需要额外更改的部分。

如果有更好的配置方法,或者此方法有什么不妥的地方(特别是添加framework这块),请指正~

podspec配置

s.dependency 'BaiduMapKit'
s.pod_target_xcconfig = {
    'OTHER_LDFLAGS'          => '$(inherited) -undefined dynamic_lookup'
}
s.prepare_command = 'sh mk_modulemap.sh Pods/BaiduMapKit'

Podfile配置

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

引申问题

BaiduMapKitUMengAnalytics等一些framework中因为不含Modules/module.modulemap,所以无法在swift中import。

DianQK的基于 CocoaPods 进行 iOS 开发说明了这个问题,并提供了解决方案,可以参考。

由于其重新定义podspec的方案需要在库更新的时候在此更新该podspec,所以又写了一个简单的脚本做这件事情。

该脚本可以直接配置在将这样的pod作为dependencypodspec中,写做:

s.prepare_command = 'sh mk_modulemap.sh Pods/BaiduMapKit Pods/UMengAnalytics'

这样就可以自动补全framework缺失的Modules/module.modulemap啦~~

mk_modulemap.sh说明

mk_modulemap.sh

功能

脚本会遍历每个目录下所有的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,你想咋用咋用。。只要解决问题就好!😄

PS

shell功底较差,功能可用,脚本不忍直视,大佬们见笑了。。

About

[已解决]在pod库中swift使用百度地图SDK时配置例子

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published