lldb错误:无法查找符号。迅捷的iOS

时间:2018-07-18 06:15:07

标签: swift debugging lldb

使用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。我检查了一下是否是问题所在。结果没有区别。

1 个答案:

答案 0 :(得分:0)

已解决

我在本文中找到了答案:

http://iosbrain.com/blog/2018/01/13/building-swift-4-frameworks-and-including-them-in-your-apps-xcode-9/

我未能在框架内部的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