使用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
应用程序和动态框架都是在没有优化的情况下构建的。
UPDATE
静态框架-失败
更改为xCode 9引入的功能-静态Swift框架时,结果相同。
xCode-死代码剥离
默认情况下,使用Swift代码将Dead Code Stripping
设为ON。我检查了一下是否是问题所在。结果没有区别。
答案 0 :(得分:0)
已解决
我在本文中找到了答案:
我未能在框架内部的Swift类上设置public init()
。 lldb可以调用的工作代码:
// set the Framework class to Public
public class rnHello{
// set the initializer to public, otherwise you cannot invoke class
public init() {
}
// set the function to public, as it defaults to internal
public static func world() {
print("hello from a static method")
}
}
现在,您可以通过Swift代码或lldb访问此代码:
(lldb) po rnHello.world()
hello from a static method