2010-06-23 55 views
2

我開發了一個包含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 

回答

2

您的發佈配置錯誤的架構設置。如果您想要在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

2

我想通了參考信息這個頁面上: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

1

該啓動崩潰是錯誤的架構的結果依賴和你的項目。我和我的項目有類似的問題。我的項目在調試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的)爲「所有配置」。

0

嘿,你已經提到使用Facebook three20庫。我們遇到了完全相同的問題 - 僅在appstore分發中,應用程序崩潰時纔會使用EXC_BAD_ACCESS |發佈配置,僅適用於iPhone 3G/iPod touch 2G,但可在iPhone 3GS和iPad上完美工作。事實證明,我們正在使用內置的three20 JSON庫,並且該庫是原因。在我們的例子中,下載新版本的JSON庫解決了這個問題(顯然這個錯誤已經修復)。