我正在开始在框架中使用Swift,它使用libz.dylib
,但看起来没有办法从Swift中导入它。我尝试了import zlib
和import libz
,但没有效果。 ZLib已经与目标相关联。
似乎让我的Swift代码看到zlib
类的唯一方法是在桥接头中导入必要的头文件,但框架目标不能有桥接头,所以有没有办法使用dylib?
答案 0 :(得分:3)
我添加了一个C / C ++ dylib库,带有C Public API头到Swift Project。
假设库是libModule.dylib。
使用"模块"
创建目录mkdir Module; cd Module
在Module目录
中创建一个文件module.mapTouch module.map
创建一个目录,这将是头文件目录,任何名称都将服务。
mkdir Headers
将所有标题复制到标题目录
cp -R path/Headers Headers/
打开module.map&将下面的内容复制到它,Swift团队建议,在库名前添加前缀C,以防它是一个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 *
}
转到构建设置 - > Swift编译器 - 搜索路径
如果错过了第9步,我们就会发现着名的@ rpath / Image未发现崩溃。
现在在swift中导入模块如下:
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 *
}
答案 1 :(得分:1)
您可以按照以下答案中所述导入系统模块: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。