Imp*_*ate 3 macos frameworks command-line-tool swift xcode10.1
在每个人开始向我抛出其他堆栈溢出和论坛帖子之前:我都看了一遍。他们都没有帮助。
我有一个简单的 cmd 工具swizzler,想在其中嵌入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]
有人可以帮忙吗?我已经尝试了好几天没有成功。
为了解决您的问题,我们需要更改 Xcode默认处理 Swift命令行工具目标的方式,特别是针对 Swift 标准库的链接约定。
我们需要:
SwizzleSrc框架中嵌入 Swift 标准库swizzler命令行可执行文件动态链接所有 Swift 库swizzler可执行文件能够找到所有需要的 Swift 库(现在放置在框架目标中)让我们开始吧(假设您使用的是Xcode 10.1或更高版本):
这很简单。更改以下生成设置的SwizzleSrc框架目标:
这是有点棘手的部分。为工具目标添加以下用户定义的设置swizzler(在Build Settings 中):
SWIFT_FORCE_DYNAMIC_LINK_STDLIB 设置 YESSWIFT_FORCE_STATIC_LINK_STDLIB 设置 NO(要添加新的用户定义设置,只需单击+“构建设置”选项卡标题下方的按钮即可。)
这将确保您的命令行可执行文件将动态链接所有 Swift 库(即,默认情况下它们是静态链接的)。顺便说一下,Swift Package Manager 使用这些完全相同的设置来修复相关问题。
为工具目标添加以下Runpath Search Path条目swizzler(在Build Settings 中):
@executable_path@executable_path/SwizzleSrc.framework/Versions/Current/Frameworks现在清理您的构建文件夹,再次重建两个目标,并检查这是否能彻底解决您的问题;)
如需更多信息,请务必查看以下链接:
我还创建了一个(非常!)简单的 Xcode 项目来演示上述步骤:
| 归档时间: | 
 | 
| 查看次数: | 1135 次 | 
| 最近记录: |