Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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
Macos 如何将Objective C静态库导入Swift框架?_Macos_Swift_Frameworks_Static Libraries - Fatal编程技术网

Macos 如何将Objective C静态库导入Swift框架?

Macos 如何将Objective C静态库导入Swift框架?,macos,swift,frameworks,static-libraries,Macos,Swift,Frameworks,Static Libraries,我正在用Swift为OSX编写一个动态框架(Proto.Framework)。我想包含一个静态库(libstat.a)中的代码,该库是用Objective C编写的。下面是我得到的: // Dynamic.swift in Proto.framework class Dynamic { func doSomethingWithStat() { Stat().statThing() } } // Stat.h in libstat.a static library

我正在用Swift为OSX编写一个动态框架(
Proto.Framework
)。我想包含一个静态库(
libstat.a
)中的代码,该库是用Objective C编写的。下面是我得到的:

// Dynamic.swift in Proto.framework
class Dynamic {
    func doSomethingWithStat() {
        Stat().statThing()
    }
}

// Stat.h in libstat.a static library
@interface Stat : NSObject
- (void)statThing;
@end

// Stat.m
@implementation Stat
- (void)statThing {
    NSLog(@"OK");
}
@end
在我的Proto.framework目标中,我将它链接到libstat.a。当我尝试构建Proto时,它自然不会编译,因为它找不到
Stat().statThing()的定义。它不知道我的静态库的符号。我该怎么说呢

对于应用程序,我会使用桥接头并执行导入。但是编译器出错并告诉我框架中不允许使用
桥接头。嗯

因此,我将其包含在我的“伞形头”(
Proto.h
)中,但这告诉我
错误:在框架模块中包含非模块头。嗯

使我的
Stat
library目标
Defines模块:YES
即使在干净的构建之后似乎也不会改变错误。所以我不知道该怎么做


有人能给我指出正确的方向吗?

Proto.framework
的构建设置中,尝试将
允许框架模块中的非模块包含
选项设置为


实现这一点的最简单方法是使用模块映射文件。下面我假设您在一个单独的项目中拥有
Proto.framework
,该项目名为
Proto

  • 在框架中创建一个
    module.modulemap
    文件,其中包含以下内容(根据需要替换头文件的路径):
  • _

  • 在项目生成设置中,在
    打包
    部分中查找
    模块映射文件
    。输入
    $(SRCROOT)/Proto/module.modulemap

  • 就这样。从现在起,您应该能够在Swift中使用
    stat.h
    中声明的任何内容。

    我通过公开标题(而不是项目)解决了此错误

    转到目标构建阶段并相应地移动标题:

    这适用于我的“lib”目标。但我仍然无法构建libTests目标。这里有两个错误:

    • 未找到包含的“header.h”文件;用“引号”代替
    • 同样:在框架模块“lib”中包含非模块头

    我还不能解决这个问题

    只是尝试了一下,仍然得到了
    错误:在框架模块Proto中包含非模块头文件
    :\n我也有同样的问题(xcode 7,swift 2)。有人找到解决方案吗?我必须公开我在伞头中导入的附加标题。你最终找到了吗?我在为同样的问题挣扎,同样的问题。有办法吗?我也有同样的问题。还在看…在Xcode 7.2中也没有看到模块映射设置unfortunately@MaxMacLeod只需在文本编辑器(例如TextWrangler)中创建一个新文件,然后将其拖放到项目中。别忘了选择目标。它对存档应用程序也有效吗?添加module.map后,我可以解决“包含非模块头”的问题,但当我存档项目时,它找不到桥接头文件。投诉缺少标题。当我在派生数据中检查build文件夹以进行发布时,我在那里看不到任何hedaer文件。在添加模块映射之前存在。有什么想法吗?我正在处理xcode 10
    framework module Proto {
        umbrella header "Proto.h"
    
        // Load a C header to be used in Swift - here /usr/include/sys/stat.h:
        header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/sys/stat.h"
    
        export *
        module * { export * }
    }