[英]Problem with Frameworks in Command Line Tool
在所有人开始向我抛出其他堆栈溢出和论坛帖子之前:我已经全部查看了。 他们都没有帮助。
我有一个名为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]
有人可以帮忙吗? 我已经尝试了好几天都无济于事。
为了解决您的问题,我们需要默认更改Xcode处理Swift 命令行工具目标的方式,特别是针对Swift标准库的链接约定。
我们要:
SwizzleSrc
框架中 swizzler
命令行可执行文件动态链接所有Swift库 swizzler
可执行文件能够找到所有需要的Swift库(现已放置在框架目标中) 让我们开始吧(假设您正在使用Xcode 10.1或更高版本):
这很简单。 为SwizzleSrc
框架目标更改以下构建设置 :
这是有些棘手的部分。 为swizzler
工具目标添加以下用户定义的设置(在Build Settings中 ):
SWIFT_FORCE_DYNAMIC_LINK_STDLIB
设置为YES
SWIFT_FORCE_STATIC_LINK_STDLIB
设置为NO
(要添加新的用户定义设置,只需单击“ 构建设置”选项卡标题下方的+
按钮。)
这将确保您的命令行可执行文件将改为动态链接所有Swift库(即,默认情况下它们是静态链接的)。 顺便说一句,Swift软件包管理器使用这些完全相同的设置来修复相关问题。
为swizzler
工具目标添加以下Runpath搜索路径条目(在Build Settings中 ):
@executable_path
@executable_path/SwizzleSrc.framework/Versions/Current/Frameworks
现在清理您的构建文件夹,再次重建两个目标,然后检查是否可以彻底解决您的问题;)
有关更多信息,请确保还检查以下链接:
我还创建了一个(非常!)简单的Xcode项目,演示了上述步骤:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.