4

我有一个启用了 ARC 的应用程序(启用了 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: 从未进入。

4

2 回答 2

1

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

并得到了这次崩溃。

然后我尝试从 Xcode 归档,即席构建实际上在所有设备上都可以正常工作。太奇怪了(请记住,临时构建的命令行适用于比 iPod 第二代更新的设备)。

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

于 2012-08-08T01:04:48.147 回答
0

我的回答:我是如何摆脱同样的问题的。

脚步:

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

2.只需在第一步中进行所有设置,例如选择正确的配置并指定准确的捆绑标识符,然后现在让 xcode 退出。

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

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

于 2012-10-29T10:41:04.657 回答