【问题标题】:Problem with Frameworks in Command Line Tool命令行工具中的框架问题
【发布时间】:2019-07-02 05:27:21
【问题描述】:

在所有人开始向我抛出其他堆栈溢出和论坛帖子之前:我都看过了。他们都没有帮助。

我有一个名为swizzler 的简单cmd 工具,并希望在其中嵌入SwizzleSrc 框架。我已经按照所有教程和堆栈溢出没有运气。这是我得到的。

构建

2019-02-07 19:22:46.785680-0500 Terminal[67444:11837029] flock failed to lock maps file: errno = 35
2019-02-07 19:22:46.786939-0500 Terminal[67444:11837029] flock failed to lock maps file: errno = 35

运行

Last login: Thu Feb  7 19:21:08 on ttys018
NAME-iMac:~ NAME$ /Users/NAME/Library/Developer/Xcode/DerivedData/swizzler-aslysekmorknabdslxbxfaeuiztk/Build/Products/Debug/swizzler ; exit;
dyld: Library not loaded: @rpath/SwizzleSrc.framework/Versions/A/SwizzleSrc
  Referenced from: /Users/NAME/Library/Developer/Xcode/DerivedData/swizzler-aslysekmorknabdslxbxfaeuiztk/Build/Products/Debug/swizzler
  Reason: image not found
Abort trap: 6
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[Process completed]

有人可以帮忙吗?我已经尝试了几天没有成功。

【问题讨论】:

  • 您找到解决此问题的方法了吗?谢谢!
  • 不幸的是还没有。

标签: swift macos frameworks command-line-tool xcode10.1


【解决方案1】:

要解决您的问题,我们需要更改 Xcode 默认处理 Swift 命令行工具 目标的方式,特别是针对 Swift 标准库的链接约定。

我们需要:

  • 将 Swift 标准库嵌入到您的 SwizzleSrc 框架中
  • 强制您的 swizzler 命令行可执行文件动态链接所有 Swift 库
  • 最后,确保您的 swizzler 可执行文件能够找到所有需要的 Swift 库(现在放置在框架目标中)

让我们开始吧(假设您使用的是 Xcode 10.1 或更高版本):

在框架中嵌入 Swift 库

这很简单。为 SwizzleSrc 框架目标更改以下构建设置

  • 始终嵌入 Swift 标准库

在命令行工具中动态链接所有 Swift 库

这是有点棘手的部分。为swizzler 工具目标添加以下用户定义设置(在构建设置中):

  • SWIFT_FORCE_DYNAMIC_LINK_STDLIB 设置为 YES
  • SWIFT_FORCE_STATIC_LINK_STDLIB 设置为 NO

(要添加新的用户定义设置,只需点击构建设置标签标题下方的+按钮。)

这将确保您的命令行可执行文件将动态链接所有 Swift 库(即,默认情况下它们是静态链接的)。顺便说一句,Swift 包管理器使用这些完全相同的设置来解决相关问题。

更新命令行工具的运行路径

swizzler 工具目标添加以下Runpath Search Path 条目(在Build Settings 中):

  • @executable_path
  • @executable_path/SwizzleSrc.framework/Versions/Current/Frameworks

现在清理您的构建文件夹,再次重新构建两个目标,并检查这是否能永久解决您的问题;)

参考文献

如需更多信息,请务必同时查看以下链接:

我还创建了一个(非常!)简单的 Xcode 项目来演示上述步骤:

【讨论】:

  • 我在一个干净的 Xcode 项目(仅包含这两个目标)上测试了上述所有步骤,并且效果很好。顺便说一句,我之前遇到了和你一样的错误。无论如何,我会在今天晚些时候尝试将我的项目上传到 GitHub...
  • 嘿@ImportAccelerate,我按照答案中概述的步骤上传了一个简单的Xcode项目:github.com/pmattos/Swift-CLI-with-Framework
猜你喜欢
  • 2010-10-12
  • 2021-01-21
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 2015-03-23
  • 1970-01-01
  • 2021-11-23
相关资源
最近更新 更多