2016-12-15 109 views
0

我有一個應用程序記錄視頻,並使用外部庫作爲FMMPEG和x264。所有的extern庫都是用iOS 9.2 SDK和所有有效的體系結構編譯的。應用程序崩潰在iOS 9但不在iOS 10

它工作正常,直到我決定使用iOS 10 SDK作爲基本SDK,並將iOS 10中不推薦使用的方法替換爲使用iOS的更新方法(將Xcode更新至8.X版本後)。在這一刻我有這樣的生成設置:

Build Settings

正如我所說的,在應用程序中使用的extern庫,和該庫是與iOS 9.2 SDK版本編譯(我決定爲避免警告,因爲最低限度的支持版本對於我的應用程序是9.2)。那麼,當應用程序在iOS 10中運行時,它運行時沒有錯誤,但是當應用程序在iOS 9中運行並開始錄製視頻時,應用程序總是會在FFMPEG庫中的浮動操作中崩潰(如果我編輯FFMPEG源代碼並將浮點值在運行之前應用程序崩潰在下一次浮動操作,所以它不是一個解決方案)。

的問題是:

Only crash when I use iOS 10.X SDK version for compile app in Xcode, when I configure for use iOS 9.X SDK version in Xcode for compile and install app in iOS 9, it don't crash.

的解決辦法是:使用的iOS SDK 9.X在Xcode中編譯,但我不能使用的iOS SDK 9.X版本創建的應用程序,我使用僅在iOS 10中的框架作爲UserNotifications。

當然,我總是在運行時檢查的iOS版本:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {...} 

摘要:

應用程序編譯與iOS SDK 10.X iOS版+ 9 =崩潰

應用使用iOS 9.X SDK + iOS 9編譯=沒有崩潰(但不能成爲解決方案)


崩潰代碼:

code=EXC_ARM_BREAKPOINT,subcode=0xe7ffdefe

+0

你檢查了這個問題嗎? http://stackoverflow.com/questions/29434253/xcode-exc-breakpoint-exc-arm-breakpoint-subcode-0xe7ffdefe在這種特殊情況下,它是一個在64位環境中使用的整數,但它在代碼是32位。簡單地轉換成一個'UInt32'解決了這個問題。也許使用'Float32'? –

+0

問題不在於32位和64位,問題是:一個iPhone SE與iOS 10運行應用程序沒有問題。其他iPhone SE的iOS 9在浮動操作中崩潰,iPhone SE使用64位proc,所以它不會是錯誤。此外,應用程序崩潰在第三方庫,改變所有類型是瘋狂的。 – Anthony

+0

用解決方案編輯。感謝所有人;) – Anthony

回答

0

(發佈代表OP)的

問題解決了。當我被檢查日誌,我看到了一個錯誤:

dyld: Symbol not found: ___gesf2 

的問題是應用程序正在尋找在通訊錄框架的符號時,應用程序在32位(ARMv7的& armv7s)跑了。解決方案是從項目中刪除此框架並重新編譯它。