Code Monkey home page Code Monkey logo

demo-podspecusebmk's Introduction

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功底较差,功能可用,脚本不忍直视,大佬们见笑了。。

demo-podspecusebmk's People

Contributors

madordie avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.