Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 混合Objective-C/Swift框架的模块映射位置和编译器设置_Ios_Objective C_Swift_Xcode_Module Map - Fatal编程技术网

Ios 混合Objective-C/Swift框架的模块映射位置和编译器设置

Ios 混合Objective-C/Swift框架的模块映射位置和编译器设置,ios,objective-c,swift,xcode,module-map,Ios,Objective C,Swift,Xcode,Module Map,背景:我正在将一个大型的旧混合语言代码库转换为一个框架。我有问题,所以我想我应该从一个最小的测试项目开始,看看事情是如何运作的。我遇到了更多的问题。这是带有Xcode 10.2.1的Swift 5.0 我创建了一个新的iOS框架项目TestFramework。TestFramework具有以下源文件: OCTest.[hm],具有单个私有类 OCPublic.[hm],具有单个公共类。它叫八重奏 STest.swift,具有单个公共类。它同时称为OCPublic和OCTest 我还有以下两个

背景:我正在将一个大型的旧混合语言代码库转换为一个框架。我有问题,所以我想我应该从一个最小的测试项目开始,看看事情是如何运作的。我遇到了更多的问题。这是带有Xcode 10.2.1的Swift 5.0

我创建了一个新的iOS框架项目TestFramework。TestFramework具有以下源文件:

  • OCTest.[hm]
    ,具有单个私有类
  • OCPublic.[hm]
    ,具有单个公共类。它叫八重奏
  • STest.swift
    ,具有单个公共类。它同时称为OCPublic和OCTest
我还有以下两个伞形标题,与源文件位于同一文件夹中:

  • TestFramework.h
    ,这是一个自动创建的Xcode。我只添加了
    #导入“OCPublic.h”
  • TestFramework\u Private.h
    。它有两行:

    #包括“TestFramework.h”
    #包括“OCTest.h”
    
它们都位于
TestFramework
文件夹中,以及
Info.plist
和Xcode自动创建的所有其他内容

我成功地进行了编译,使用
carthage build--archive
构建了一个框架包,并在一个测试应用程序中成功地使用了生成的框架,其中包含以下模块映射和构建设置:

  • TestFramework/module.modulemap
    存在且为空
  • TestFramework/module.private.modulemap
    与以下行一起存在:

    module TestFramework_Private {
        umbrella header "TestFramework_Private.h"
        export *
    }
    
  • 生成设置中的
    MODULEMAP\u文件
    MODULEMAP\u私有文件
    均未设置

  • SWIFT\u INCLUDE\u路径
    $(项目目录)/TestFramework
  • 定义\u模块
    为真
如果我将任何内容(
framework-module-TestFramework{…}
)添加到
modulemap
,或者尝试将
modulemap\u文件
modulemap\u-PRIVATE\u文件
指向它们的文件(值为
TestFramework/modulemap
TestFramework/modulemap.PRIVATE.modulemap
)我遇到各种构建错误(找不到TestFramework\u Private、重新定义模块TestFramework等)

如果删除空的主模块映射,则不会得到
STest.swift
尝试导入的模块“TestFramework\u Private”

如果我尝试将私有内容移动到一个单独的文件夹中,并更改
SWIFT\u INCLUDE\u路径
MODULEMAP\u private\u文件
,我会得到更多构建错误


在主模块映射中有或没有内容的情况下,
MODULEMAP
*设置是否有一些值应该起作用?如果我想将内容移动到不同的文件夹中,该怎么办?

似乎至少我的一些问题是由以下原因引起的:

当构建一个框架,该框架在定义同一模块的源目录和安装目录中都有模块映射时,编译器将显示一条重新定义消息。(28638816)

解决方法:将源目录中的模块映射文件重命名为非默认名称(默认名称为module.modulemap或module.map),并将模块映射文件生成设置设置为重命名的模块映射

将我的模块映射文件重命名为除
module.modulemap
以外的任何文件(例如,在“全部”中使用的名称),可以将
modulemap\u文件
指向它,并允许我将标题移动到其他位置等