该应用程序适用于iPhone 3GS,但在发布时在iPhone 3G上崩溃

问题描述:

我开发了一个包含Xcode 3.2.3和iPhone SDK 4.0的应用程序。如果我直接在Xcode中运行,它在iPhone 3GS和3G上都可以正常工作。该应用程序适用于iPhone 3GS,但在发布时在iPhone 3G上崩溃

但是,如果我从App Store下载并安装应用程序,它会在iPhone 3G和iPod touch 3G的启动屏幕上崩溃。但它适用于带有OS 3.1.3或iOS 4.0的iPhone 3GS。

的设备日志显示以下内容:

Exception Type: EXC_BAD_INSTRUCTION (SIGILL) 
Exception Codes: 0x00000001, 0x00000000 

Crashed Thread: 0  

Thread 0 Crashed: 
0 Dove    0x000762aa +[TTNavigator navigator] (TTNavigator.m:59) 
1 Dove    0x000035ce -[Around01AppDelegate applicationDidFinishLaunching:] (Around01AppDelegate.m:85) 
2 UIKit    0x00004e88 -[UIApplication _performInitializationWithURL:sourceBundleID:] + 540 
3 UIKit    0x00004a60 -[UIApplication _runWithURL:sourceBundleID:] + 576 
4 UIKit    0x00055df8 -[UIApplication handleEvent:withNewEvent:] + 1516 
5 UIKit    0x00055634 -[UIApplication sendEvent:] + 60 
6 UIKit    0x0005508c _UIApplicationHandleEvent + 4528 
7 GraphicsServices 0x00005988 PurpleEventCallback + 1044 
8 CoreFoundation  0x00057524 CFRunLoopRunSpecific + 2296 
9 CoreFoundation  0x00056c18 CFRunLoopRunInMode + 44 
10 UIKit    0x00003c00 -[UIApplication _run] + 512 
11 UIKit    0x00002228 UIApplicationMain + 960 
12 Dove    0x00003086 main (main.m:26) 
13 Dove    0x00002ec8 start + 44 

您的发布配置错误的架构设置。如果您想要在3G和2008年iPod touch上进行部署,则必须为arm6和arm7创建说明。你可能只是创建一个优化的arm7二进制文件。将arm6体系结构添加到发布配置中,然后重试。

+1

嗨杰森,感谢您的帮助!这是我的项目设置:体系结构:标准(armv6 armv7),基本SDK:iPhone设备4.0,仅构建活动体系结构:(选中),有效体系结构:armv6 armv7。这些是我应该做的正确设置吗?当我使用xCode运行它时,该应用在3G上运行良好。谢谢! – 0pcl 2010-06-23 03:45:11

+0

我想通过参考此页面上的信息:http://useyourloaf.com/blog/2010/4/21/xcode-build-active-architecture-only.html 稍后将提交一个新的二进制文件它如何去。谢谢! – 0pcl 2010-06-23 04:30:53

+0

@noear:哦,很好,我很高兴你明白了。您应该将该链接作为实际答案回答您的问题并接受它,这样,搜索类似内容的用户可以快速找到解决方案:) – 2010-06-23 04:59:56

我想通了参考信息这个页面上:http://useyourloaf.com/blog/2010/4/21/xcode-build-active-architecture-only.html

如果您使用任何第三方库,使用相同的项目设置,你在自己的项目中使用应该重新编译他们。

在我的情况下, 基地SDK:的iOS 4.0, 部署目标:3.0, 并确保取消“建立有效体系结构只”

+1

+1指出第三方库可能导致此问题发生。 – 2010-10-02 18:25:53

该启动崩溃是错误的架构的结果依赖和你的项目。我和我的项目有类似的问题。我的项目在调试iPhone 3G上运行良好,并崩溃释放iPhone 3G。但是,它在调试/发布版iPad和iPhone 4上运行良好。

我有一个库,我正在建设与调试(标准armv6,armv7),和释放(优化armv7)。主要项目是用Standard(armv6,armv7)构建Debug/Release。这种体系结构不匹配导致iPhone 3G上发布的崩溃。我遇到这个问题的原因是iPhone 3G必须使用armv6,但iPhone 4和iPad可以使用armv7。

run 
Running… 
[Switching to thread 11523] 
[Switching to thread 11523] 
sharedlibrary apply-load-rules all 
continue 
Program received signal: “EXC_BAD_ACCESS”. 
warning: check_safe_call: could not restore current frame 

warning: Unable to restore previously selected frame. 
warning: Unable to restore previously selected frame. 
warning: Unable to restore previously selected frame. 
warning: Unable to restore previously selected frame. 
warning: Unable to restore previously selected frame. 
(gdb) 

要解决此问题更改iPhone图书馆目标的“架构”使用标准(ARMv6的,ARMv7的)为“所有配置”。

嘿,你已经提到使用Facebook three20库。我们遇到了完全相同的问题 - 仅在appstore分发中,应用程序崩溃时才会使用EXC_BAD_ACCESS |发布配置,仅适用于iPhone 3G/iPod touch 2G,但可在iPhone 3GS和iPad上完美工作。事实证明,我们正在使用内置的three20 JSON库,并且该库是原因。在我们的例子中,下载新版本的JSON库解决了这个问题(显然这个错误已经修复)。