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

我有一个支持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)

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

有什么线索吗?

非常感谢。

[编辑]更新:我可以使用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:永远不会输入。

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

并得到了这次崩溃。

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

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

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

脚步:

1.首先在代码符号列中进行所有更改,并确保所有设置在项目选项卡和目标选项卡中都与您想要的相同。

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

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

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