每个框架内的module.modulemap文件中的export *是什么?

时间:2017-10-31 12:56:56

标签: ios iphone swift frameworks swift4

我创建了一个名为Communication的框架,在框架容器中有一个module.modulemap文件。

module.modulemap

framework module Communication {
  umbrella header "Communication.h"

  export *
  module * { export * }
}

我可以理解该模块需要伞头将其暴露给包含应用程序/目标。

但是其他两行代码的含义是什么。

  export *
  module * { export * }

如果有人知道这行出口是什么?

1 个答案:

答案 0 :(得分:0)

History

Modular Framework在下一个路径中包含.modulemap个文件

module_name.framework/Modules/module_name.modulemap

至于命名,我的规则是

ProductName -> Product Module Name -> <name>.modulemap -> framework module <name>

create a library应该[Custom modulemap]手动创建和设置,create a framework如果Build Settings -> Defines Module -> YES,Xcode会自动生成它。

创建自己的.modulemap文件时,您必须更新Build Settings -> Module Map File中的路径

让我们看一下示例:
注意:我使用explicit module来表明Xcode会产生错误

//ClassA.h
#import "ClassAA.h"

//ClassB.h
//ClassAA.h

//Module.h
#import "ClassA.h"
#import "ClassB.h"

//Module.modulemap
framework module Module {
    //Expose all imports from Module.h for Module module recursively
    //    import Module - you can use ClassA, ClassB, ClassAA
    umbrella header "Module.h" 

    //explicit module * { }
    //    1. `module` works only with `umbrella`
    //    2. Generates a submodule for every header inside Module.h recursively
    //        import Module.ClassA, import Module.ClassB, import Module.ClassC
    //explicit module * { export * }
    //export all imports from <submodule_name>.h for <submodule_name> module
    //    import Module.ClassA - you can use ClassA, ClassAA (ClassAA was added)
    explicit module * { export * }

    //export all imports from Module.h for Module module
    //    import Module.ClassA - you can use ClassA, ClassAA, ClassB(ClassB was added)
    export *
}