我正在寻找开始在框架中使用Swift的框架,该框架使用libz.dylib
,但它看起来像无法从Swift中导入它。我试过import zlib
和import libz
,这没有奏效。 ZLib已经链接到目标。如何在框架中使用Swift文件中的C dylib
看起来像让我的Swift代码看到zlib
类的唯一方法是在桥接头中导入必要的头,但框架目标不能有桥头,所以有办法使用dylib?
我正在寻找开始在框架中使用Swift的框架,该框架使用libz.dylib
,但它看起来像无法从Swift中导入它。我试过import zlib
和import libz
,这没有奏效。 ZLib已经链接到目标。如何在框架中使用Swift文件中的C dylib
看起来像让我的Swift代码看到zlib
类的唯一方法是在桥接头中导入必要的头,但框架目标不能有桥头,所以有办法使用dylib?
您可以导入系统模块,在这个答案说明:Importing CommonCrypto in a Swift framework
TLDR
ZLib
到你的框架目录文件夹module.map
文件包含以下内容 module ZLib [system] { header "/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/zlib.h" export * }
您可能必须将路径更改为您的zlib标头。该示例适用于XCode 7 Beta和El Capitan。
我已经加入一个C/C++ dylib库,带有C公共API头文件到Swift Project。
假设库是libModule.dylib。
与 “模块” 创建目录
mkdir Module; cd Module
创建模块目录
Touch module.map
中的文件module.map创建一个目录,这将是头文件目录,任何名字都会有效。
mkdir Headers
拷贝所有的标题为头目录
cp -R path/Headers Headers/
开放module.map &复制下面的内容吧,斯威夫特团队建议,添加前缀下,在库名称的前面,在情况下,如果其一个C库。
module CModule {
umbrella "Headers" // for multiple files
header "filename.h" // for single header file, in this case even the Header directory is not needed.
export *
}
转到构建设置 - >雨燕编译器 - 搜索路径
如果第9步错过了,我们会发现着名的@ rpath/Image未找到崩溃。在迅速如下
立即导入模块:
import CModule // name given inside module.map
系统库,大多数步骤不需要..刚刚创建的目录有正确的头道&模块映射文件和做6,7 其似乎甚至不需要步骤10作为其系统库。
module CommonCrypto [system] {
header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/CommonCrypto/CommonCrypto.h"
export *
}
创建Headers目录也是可选的,在这种情况下,“Headers”伞变成了“伞”。 “但是将所有标题复制到根目录是我不会考虑的。 – RK1979
@rmaddy我包括Objective-C的标签作为一种变通的解决方案可能涉及的Objective-C – Dov