【发布时间】:2012-08-07 08:57:03
【问题描述】:
我有一个启用了 ARC lite 的应用程序(启用了 ARC 而没有将弱引用归零,Apple LLVM 4.0)。部署目标设置为 iOS 4.0。它已经在 iOS 4.0 到 5.1.1 上进行了测试。当我使用调试构建并通过 Xcode 安装时,它总是可以正常工作,但是当我使用发布配置创建临时构建时,它总是在使用 iOS 4.2.1 的第二代 iPod 上启动时崩溃,但在其他设备上运行良好(甚至是第三代装有 iOS 4.3 的 iPod)。
崩溃日志说 未找到符号:_objc_retainAutoreleasedReturnValue 并且在调用 main 方法时崩溃(然后是 dyld_stub_binder, dyld::fastBindLazySymbol)
我做了一些搜索,当一个启用了弧的库包含在没有弧的项目中时,通常会发生这种崩溃。但在我的情况下,整个项目都启用了弧。
有什么线索吗?
非常感谢。
[编辑] 更新:我可以使用 NSLog 来调试临时构建。
main.m 是这样的:
int main(int argc, char *argv[]) {
NSLog(@"ok before entering autorelease pool");
@autoreleasepool {
NSLog(@"ok after entering autorelease pool");
return UIApplicationMain(argc, argv, nil, NSStringFromClass([XXX class]));
}
}
NSLog(@"ok after into autorelease pool") 调用成功,但 application:didFinishLaunchingWithOptions: 从未进入。
【问题讨论】:
-
您几乎可以肯定地在调试器中发生崩溃,方法是更改您的方案的调试操作以使用发布版本。我不知道这是否会有所帮助。
-
谢谢约瑟夫。我正在尝试这样做,但它无法通过抱怨“没有找到包含任何钥匙串签名证书的未过期的配置文件”来安装,即使我更改了项目设置以让“发布”使用开发人员配置文件。也许调试模式不适用于发布版本?
-
绝对有效。您的发布版本的代码设计设置一定仍然存在问题;使它们与调试版本相同,它将起作用。
-
嗯,我重新启动了计算机,错误消失了。它尝试在设备上安装应用程序,但随后失败并出现错误:“无法启动“XXX”超时等待应用程序启动”。应用程序到达加载屏幕,但在那里退出,类似于我运行临时构建时。
-
在我上一条评论之后.. 实际上它只是 Xcode 错误。当我通过 Xcode(带有发布配置)安装并从设备本身启动时,该应用程序可以启动并正常工作。