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步后,只需重新启动计算机,然后为您在第一步中选择的配置文件进行构建。
现在它的工作正常,希望所以这个答案可能也会对你有所帮助。无论如何,这是我对上述问题的解决方案….. 🙂