ARC Lite仅在Release配置中启用了第二代iPod上的应用程序崩溃

时间:2012-08-07 08:57:03

标签: iphone ios ipad

我有一个支持ARC lite的应用程序(启用了ARC而没有归零弱引用,Apple LLVM 4.0)。部署目标设置为iOS 4.0。它已经在iOS 4.0到5.1.1上进行了测试。当我使用调试版本并通过Xcode安装时,它总能正常工作,但是当我使用发布配置创建一个adhoc版本时,它总是会在使用iOS 4.2.1的第二代iPod上启动时崩溃,但在其他设备上工作正常(甚至第三代)带iOS 4.3的iPod。)

崩溃日志说 找不到符号:_objc_retainAutoreleasedReturnValue 当调用方法main时它会崩溃(然后是dyld_stub_binder,dyld :: fastBindLazySymbol)

我进行了一些搜索,这种崩溃通常发生在没有弧的项目中包含启用弧的库时。但就我而言,整个项目都启用了弧。

任何线索?

非常感谢。

[编辑]更新:我可以使用NSLog来调试adhoc构建。

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(@“输入自动释放池后确定”)被成功调用,但是应用程序:didFinishLaunchingWithOptions:永远不会被输入。

2 个答案:

答案 0 :(得分:1)

它似乎与命令行构建工具有关。我曾经使用xcodebuild命令来存档adhoc构建: xcodebuild -scheme myscheme clean build archive

发生了这次事故。

然后我尝试从Xcode归档,adhoc构建实际上在所有设备上都能正常工作。太奇怪了(请记住,adhoc命令行适用于比iPod 2nd更新的设备)。

现在我只使用Xcode中的Archive按钮。但我在Apple dev论坛上发布了这个问题: https://devforums.apple.com/message/711334

答案 1 :(得分:0)

我的回答:我是如何从同一问题中解脱出来的。

<强>步骤:

1.首先在代码符号列中进行所有更改,并确保所有设置在项目选项卡和目标选项卡中都可以正常工作。

2.只需在第一步中完成所有设置,如选择正确的提示并指定准确的束限制,然后现在使xcode退出。

3.完成2步后,只需重新启动计算机,然后为您在第一步中选择的配置文件进行构建。

现在它的工作正常,希望所以这个答案可能对你有所帮助。无论如何它是我对上述问题的解决方案..... :)