【发布时间】:2018-12-25 22:42:15
【问题描述】:
使用 lldb,我想在我发布的 iOS 构建和发布动态框架中实例化一个 Swift 类。
我在模拟器上将 lldb 附加到我的发布版本。
主应用 - 工作
(lldb) exp let $c = hello_class()
error: <EXPR>:3:10: error: use of unresolved identifier 'hello_class'
let $c = hello_class()
^~~~~~~~~~~
(lldb) expr import My_App
(lldb) exp let $c = hello_class()
(lldb) po $c.hello()
???? hello ????
动态框架 - 失败
(lldb) dclass -m myframework
Dumping classes
************************************************************
myframework.RustyAppInfo
(lldb) expr import myframework
(lldb) expr let $d = RustyAppInfo()
error: Couldn't lookup symbols:
__T011myframework12RustyAppInfoCACycfC
应用和动态框架都是在没有优化的情况下构建的。
更新
静态框架 - 失败
更改为 Xcode 9 引入的功能 - 静态 Swift 框架时,结果相同。
Xcode - 死代码剥离
默认情况下,使用 Swift 代码时,Dead Code Stripping 已打开。我查了一下是不是这个问题。结果没有区别。
【问题讨论】:
-
有趣!也许编辑问题以包含“在调试器中附加它时来自框架”左右更具体,并希望能吸引专家:)
-
那个符号是:
myframework.RustyAppInfo.__allocating_init() -> myframework.RustyAppInfo。在创建新对象时调用这似乎是一个合理的事情,但我不确定为什么它不存在于您的框架中。 -
我未能将我的框架的 init 函数声明为 public @JimIngham。这就是找不到符号的原因。