仅在发布配置中启用 ARC lite 的应用程序在第二代 iPod 上崩溃

2024-02-17

我有一个启用了 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)

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

有什么线索吗?

非常感谢。

[编辑] 更新:我可以使用 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 Entering autorelease pool") 被成功调用,但 application:didFinishLaunchingWithOptions: 从未输入。


看来和命令行构建工具有关。我曾经使用 xcodebuild 命令来归档临时构建: xcodebuild -scheme myscheme clean 构建存档

并发生了这次事故。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅在发布配置中启用 ARC lite 的应用程序在第二代 iPod 上崩溃 的相关文章

随机推荐