在构建带有相关Swift库的Swift命令行工具时,为什么要嵌入框架?

在构建带有相关Swift库的Swift命令行工具时,为什么要嵌入框架?,swift,xcode,dylib,Swift,Xcode,Dylib,我已经构建了一个简单的Swift项目,该项目生成了一个macOS命令行工具,并具有一个关联的自定义Swift库(.dylib),但在编译和运行它时,表单上会显示许多警告: objc[9532]:类_SwiftNativeNSEnumeratorBase在/Applications/Xcode.app/Contents/Developer/toolschains/Xcode default.xctoolschain/usr/lib/swift/macosx/libswiftCore.dylib(0

我已经构建了一个简单的Swift项目,该项目生成了一个macOS命令行工具,并具有一个关联的自定义Swift库(
.dylib
),但在编译和运行它时,表单上会显示许多警告:

objc[9532]:类_SwiftNativeNSEnumeratorBase在/Applications/Xcode.app/Contents/Developer/toolschains/Xcode default.xctoolschain/usr/lib/swift/macosx/libswiftCore.dylib(0x100cca3f0)和/Users/../Build/Products/Debug/MyTool(0x1003e84c0)中实现。将使用其中一个。哪一个是未定义的

扫描生成的
MyTool
二进制文件显示它包含该函数,因此我认为它是通过静态链接烘焙而成的。
.dylib
希望它作为一个共享库出现,所以这似乎就是复制的原因

我在项目和目标级别尝试了许多设置,但是除了显式嵌入选项之外,似乎没有一个可以控制将核心框架作为静态库嵌入的东西


对于两个目标,始终嵌入Swift库设置为“否”。“清理和生成”仍会生成复制警告。

看来要解决此问题,必须更改一些内容:

  • 将运行时搜索路径设置为包含
    /Applications/Xcode.app/Contents/Developer/toolschains/Xcode default.xctoolschain/usr/lib/swift/macosx
    或相应的库集。这些库似乎包含比默认位置中的库更新的Swift库版本
  • 将与标准库的链接设置为“否”
  • 通过从
    ../usr/lib/swift/macos
    位置拖动库,在命令行目标的“常规”选项卡上手动指定要链接到的库。Swift项目需要
    libswiftCore.dylib

由于C绑定,我还必须包括
libc
,但是默认的(
libc.tbc
)就足够了。

看起来有一些事情需要更改才能解决这个问题:

  • 将运行时搜索路径设置为包含
    /Applications/Xcode.app/Contents/Developer/toolschains/Xcode default.xctoolschain/usr/lib/swift/macosx
    或相应的库集。这些库似乎包含比默认位置中的库更新的Swift库版本
  • 将与标准库的链接设置为“否”
  • 通过从
    ../usr/lib/swift/macos
    位置拖动库,在命令行目标的“常规”选项卡上手动指定要链接到的库。Swift项目需要
    libswiftCore.dylib
由于C绑定,我还必须包括
libc
,但是默认的(
libc.tbc
)就足够了