2016-12-15 81 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)跑了。解决方案是从项目中删除此框架并重新编译它。