iOS 绝地求生闪退求助

博客分类:
很多时候,开发的APP会存在在真机上出现闪退和崩溃的问题,如果捕获到这些异常,就以快速定位问题所在,所以这里记录下如何捕获和处理方法。
总的核心思想是:
1.让程序知道出现闪退和崩溃的问题时,该调用什么
2.对闪退和崩溃问题进行处理
key point:
ios里面的崩溃和闪退分两种情况,一种是未捕获的异常,通常是一些NSXXXXException这种,这种异常,可以通过NSSetUncaughtExceptionHandler 函数来进行异常处理。还有一种,内存访问错误,重复释放等这些错误造成的,就不是exception了,而是抛出Signal,这就需要做专门的Signal处理。
1.让程序知道出现闪退和崩溃的问题时,该调用什么:
//在AppDelegate.m里面的didFinishLaunchingWithOptions方法里面注册一下(didFinishLaunchingWithOptions方法在app启动时总会调用,所以在这里面注册)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
//对应第一种情况,如果有未捕获的异常,通过NSSetUncaughtExceptionHandler方法,来向程序注册,当这种情况时,就调用HandleException方法来进行处理
NSSetUncaughtExceptionHandler(&HandleException);
//对应第二种情况,抛出了Signal的时候,就调用SignalHandler方法处理
//第一个参数,表示抛出的Signal,当系统抛出SIGABRT这个Signal的时候,就调用SignalHandler方法进行处理
signal(SIGABRT, SignalHandler);
signal(SIGILL, SignalHandler);
signal(SIGSEGV, SignalHandler);
signal(SIGFPE, SignalHandler);
signal(SIGBUS, SignalHandler);
signal(SIGPIPE, SignalHandler);
2.对闪退和崩溃问题进行处理:
//HandleException方法
volatile int32_t UncaughtExceptionCount = 0;
const int32_t UncaughtExceptionMaximum = 10;
void HandleException(NSException *exception)
//我也不明白到玩意到底啥意思
int32_t exceptionCount = OSAtomicIncrement32(&UncaughtExceptionCount);
if (exceptionCount & UncaughtExceptionMaximum)
//获得关于exception的信息
NSArray *stackArray = [exception callStackSymbols];
NSString *reason = [exception reason];
NSString *name = [exception name];
NSString *errorMessage = @"";
errorMessage = [errorMessage stringByAppendingFormat:@"App Crash error:name=%@;reason=%@;stack=%@",name,reason,[stackArray componentsJoinedByString:@";"]];
//处理exception或者发送mail或者上传得到的exception信息
//SignalHandler方法
void SignalHandler(int signal)
int32_t exceptionCount = OSAtomicIncrement32(&UncaughtExceptionCount);
if (exceptionCount & UncaughtExceptionMaximum)
//处理signal或者发送mail或者上传得到的signal信息
//得到backtrace的内容,就相当于exception的详细log
const NSInteger UncaughtExceptionHandlerSkipAddressCount = 4;
const NSInteger UncaughtExceptionHandlerReportAddressCount = 5;
+ (NSArray *)backtrace
void* callstack[128];
int frames = backtrace(callstack, 128);
char **strs = backtrace_symbols(callstack, frames);
NSMutableArray *backtrace = [NSMutableArray arrayWithCapacity:frames];
i = UncaughtExceptionHandlerSkipAddressCount;
i & UncaughtExceptionHandlerSkipAddressCount +
UncaughtExceptionHandlerReportAddressCount;
[backtrace addObject:[NSString stringWithUTF8String:strs[i]]];
free(strs);
jiangmq100083
浏览: 1670 次
来自: 大连
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'iOS 亦沦陷乎!「不给权限就闪退」
· 333 天前用 iPhone 发布 · 5438 次点击
以前看到都是流氓应用在 Android 平台耍这些伎俩。如今 iOS 也岌岌可危了
手机调不出.jpg 结尾的 URL ,图请戳上面?
如图若不给予定位权限,应用会在每次打开时弹出请求,之后点取消马上给闪退。控制变量大法排除兼容性等,一旦给予定位权限,应用就恢复正常不再闪退。心中顿时一群草泥马奔过。
这样的行为是不是违反 T&C 了,想想 iOS 企业部署的滥用,不知道苹果管不管得好。
49 回复 &| &直到
14:47:06 +08:00
& &333 天前 via Android
然而安卓有办法给程序返回虚假的权限。。。
& &333 天前
举报试看看,这个应该是审核没有审核出来吧
& &333 天前
这种可以向举报吗
& &333 天前
这 app 作死吧
& &333 天前
肯定可以举报,这样是违反 App Store 规定的
& &333 天前
& &333 天前
举报!举报!举报!给出 App 名称,我们一起帮忙举报。
& &333 天前
这款 App 是叫“日本旅游优化”
& &333 天前
对于 Android 的这种情况, app ops 就是必备的
& &333 天前 via iPhone
倒不觉得一定是故意设计的,可能只是个空指针 bug
& &333 天前 via iPhone
可你不给定位权限他怎么帮你优化。。。
& &333 天前 via iPhone
苹果统一市场的可以举报
& &333 天前 via iPhone
T&C 是什么
& &333 天前
@ Terms & Conditions
& &333 天前
这个是开发者没有做好 iOS 10 的适配或者没有权限时的代码有 Bug 吧... 而不是故意无权限就闪退的... !
& &333 天前
下载观察之后我收回我的话,是刻意设计的。
& &333 天前
@ !!! 这样也可以么...
& &333 天前
& &333 天前 via iPhone
iOS 不怕这个,毕竟审核严格,以后审核多加一项就好了
& &333 天前 via iPhone
供开发者的举报入口:
& &333 天前 via Android
好气哦,狗东和网商银行不更新就闪退
& &333 天前
& &333 天前 via iPhone
闪退就闪退呗,自己作死
& &333 天前
@ 什么办法。
& &333 天前
@ ios 也能做到, ipad 版 bloomberg 一打开就检查更新,不是最新版本就弹框锁屏让你更新,无法取消
& &333 天前
或许只是写的 Bug 而已
& &333 天前 via iPhone
卸了就是了
& &333 天前
同意 @ 的说服, 应该是开发者没有适配 iOS 10 权限造成的
& &333 天前 via iPhone
请集体举报支付宝,上次那个刷福字的就是不给定位就不准玩
& &333 天前 via iPhone
我玩那个天天狼人杀
不给摄像头权限就不给玩
这样合理嘛
& &333 天前 via Android
是的,这些情况也应该下架。
& &333 天前 via Android
京东不给电话权限退出, QQ 音乐不给电话权限退出,百度地图不给电话权限退出。
请问这个电话权限是不是获取手机号的权限?
& &333 天前
@ 我觉得应用是想获取 imei 但是实际上也能获取到手机号
& &333 天前 via iPhone
@ 刷福字和定位有关啊
& &333 天前
装了这个就能看到具体获取了什么了,也能返回空数据
& &333 天前 via Android
@ 这个权限对它们来说用于获取与硬件绑定的唯一的“永远”不会改变的识别码,也就是 IMEI/meid
& &333 天前 via Android
appops 在关于 IMEI 的接口上,设置为 ignore 时的实现是返回 null
& &333 天前
android 用 xprivacy 解决一堆。
ios 暂时没办法
& &333 天前
今天正好发现坚果元就有这个情况,不给相机权限就闪退,我更愿意理解为是程序上的 bug...
& &332 天前
& &332 天前
感觉是一个测试用例没覆盖到的 bug
& &332 天前 via iPhone
如果开发者不是有意的话, LZ 如果参加过 iOS 10 及以上 app 的开发就会知道这是一个很常见的 bug ,原因是最新的 iOS 修改了隐私权限,由原来的应用内申请变为在 plist 文件中加入声明,如果使用了权限但是没有声明的话, app 就会直接闪退
& &332 天前
楼上说的对 而且一款应用的问题怎么能说 iOS 沦陷了?
& &332 天前
我也觉得是个 bug
& &332 天前
是真的的话举报,没有适配等更新
& &332 天前
2017 ,祝您写程序永远没有 BUG !
& &332 天前
@ 你说的这种情况连系统对话框都没跳出来就会崩。这个应用是拒绝了自定义的索权对话框才崩的。
& &332 天前
吓的我赶紧屯一个 android 机器。
话说最近买啥好? pixel 太贵, 5x 内存太小、 6p 810 那啥。
& &310 天前
@ android 装一些境内的应用全家桶,有些不给权限也要闪退的。 iOS 稍微还好点,但不排除一些一些流氓的应用。
& · & 591 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.0 · 80ms · UTC 20:42 · PVG 04:42 · LAX 12:42 · JFK 15:42? Do have faith in what you're doing.Write the code ,change the world!
这种情况应和所谓的内存不足关系不大,很少有程序会在初始化时载入大量内容导致崩溃,并且这类问题也很容易在开发阶段被发现,所以内存不足造成秒退的可能性低(内存不足退,通常是程序用了一段时间,切换了几个画面以后发生的)。&&  而且秒退是发生在程序刚刚启动的时候,在开发、苹果审核阶段都没有被发现的最大可能性就是,这个问题只会发生在老版系统、老版机型上。&&  对于很多开发者(尤其是个人开发者),进行所有 iOS 版本,所有 iOS 机型覆盖测试是有难度的,苹果审核时也只是重点审核该应用在新机器、新版本下的运行情况,并不关注老系统。所以这也就是为什么会秒退的程序竟然也能通过苹果的审核。&&  在新 iOS 上正常的应用,到了老版本 iOS 上秒退最常见原因是系统动态链接库或Framework无法找到。这种情况通常是由于 App 引用了一个新版操作系统里的动态库(或者某动态库的新版本)或只有新 iOS 支持的 Framework,而又没有对老系统进行测试,于是当 App 运行在老系统上时便由于找不到而秒退。解决办法是等开发人员发现这个问题后升级程序,或由用户自行升级其操作系统。&&  还有一种常见的秒退是程序在升级时,修改了本地存储的数据结构,但是对用户既存的旧数据没有做好升级,结果导致初始化时因为无法正确读取用户数据而秒退。这类问题通常只需删除程序后重新安装一遍就能解决。但缺点是用户的既存数据会丢失&&就算有备份可能也无济于事,因为备份下来的旧数据还是无法被正确升级。如果旧数据非常重要,那么就需要联系开发人员要求其进行程序修正了。&&  另一种已经变得不那么常见的秒退原因是 App 的设置不正确。例如在编译时没有编译 ARMv6 的版本,但是设置里却允许该 App 运行在 ARMv6 处理器的机器上(如:iPhone 1代,iPhone 3G,iPod touch 1、2代和3代8G版)。这个问题除了等开发人员升级外用户自己没什么办法解决。当然愿意换台新机器是最好的 ;) 这个问题目前已经能够在提交应用至 App Store 的时候被检查出来了,因此今后应该不太常见了。&&  还有一类秒退或是用到 App 里某个功能后必退的原因,是开发时用到了只有新版操作系统才支持的某个方法,而又没有对该方法是否存在于老系统中做出判断。例如程序启动时用到了 Game Center,而没有判断用户的机器是否支持 Game Center,于是就秒退了。&&  主要的秒退情况就是这么几个,这些都是以该 App 新版系统上能正常跑为前提的。&&  诸如内存不足、BAD_ACCESS 这类问题通常不管在新旧 iOS 上都会存在,如果是由于这类问题造成的秒退通常都能在测试和审核阶段被发现,因此并不常见。
阅读(...) 评论()
Write the code ,change the world!他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)输入关键字或相关内容进行搜索
xcode更新到7.1后,在IOS9上有几率出现闪退问题,umeng统计错误率在10%左右,都是同一个错误,IOS的版本都是9.0以上,请官方看一下错误信息,是不是由于5+SDK没有适配IOS9导致的,谢谢。
我们的app是企业应用 下载地址 http://www.pgyer.com/CXqw
以下是umeng上的错误信息Application received signal SIGSEGV
CoreFoundation
0xf18f74 &redacted& + 148
libobjc.A.dylib
0xb0bf80 objc_exception_throw + 56
CoreFoundation
0xf18ea4 &redacted& + 0
ChaoGeLive
0xb4aec ZNSt6vectorIPN5zxing6qrcode3ECBESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3 + 884600
libsystem_platform.dylib
0x593c _sigtramp + 52
CoreFoundation
0xdff7c0 &redacted& + 668
CoreFoundation
0xe213b8 CFDictionaryCreateCopy + 148
CoreFoundation
0xeb83c4 &redacted& + 564
CoreFoundation
0xe550bc CFCalendarSetLocale + 176
CoreFoundation
0xe72f5c &redacted& + 108
0xdf6f8 &redacted& + 376
0xdf440 &redacted& + 864
0xd8af9c &redacted& + 252
0xe31628 &redacted& + 44
0x9f38 &redacted& + 140
0xb27220 &redacted& + 100
0x9198 &redacted& + 156
0xb27144 _ZN7WebCore16HTMLInputElement8setValueERKN3WTF6StringENS_22TextFieldEventBehaviorE + 232
0xbf114 &redacted& + 188
JavaScriptCore
0xaae4 _ZN3JSC8JSObject3putEPNS_6JSCellEPNS_9ExecStateENS_12PropertyNameENS_7JSValueERNS_15PutPropertySlotE + 1384
JavaScriptCore
0x37f4 &redacted& + 500
JavaScriptCore
0xbab0c &redacted& + 10684
JavaScriptCore
0xbddb4 &redacted& + 23652
JavaScriptCore
0xb7f38 &redacted& + 312
JavaScriptCore
0xe4c84 &redacted& + 180
JavaScriptCore
0xedc4 &redacted& + 400
JavaScriptCore
0xe37c _ZN3JSC4callEPNS_9ExecStateENS_7JSValueENS_8CallTypeERKNS_8CallDataES2_RKNS_7ArgListERN3WTF8NakedPtrINS_9ExceptionEEE + 80
0xb6382c &redacted& + 828
0xe43e18 &redacted& + 696
0xa70d14 &redacted& + 328
0xe38a50 &redacted& + 112
0xe396cc &redacted& + 904
0xa70a80 &redacted& + 36
0xb63494 &redacted& + 156
0xb891bc &redacted& + 148
JavaScriptCore
0xbe330 &redacted& + 25056
JavaScriptCore
0xbddb4 &redacted& + 23652
JavaScriptCore
0xb7f38 &redacted& + 312
JavaScriptCore
0xe4c84 &redacted& + 180
JavaScriptCore
0xedc4 &redacted& + 400
JavaScriptCore
0xe37c _ZN3JSC4callEPNS_9ExecStateENS_7JSValueENS_8CallTypeERKNS_8CallDataES2_RKNS_7ArgListERN3WTF8NakedPtrINS_9ExceptionEEE + 80
0xd837c &redacted& + 468
0xd7ff8 &redacted& + 140
0xa02b04 &redacted& + 580
0xa026f0 &redacted& + 148
0xa02630 &redacted& + 36
CoreFoundation
0xed0c9c &redacted& + 28
CoreFoundation
0xed0940 &redacted& + 884
CoreFoundation
0xece054 &redacted& + 1520
CoreFoundation
0xdfcdc0 CFRunLoopRunSpecific + 384
0xa61aa0 &redacted& + 456
libsystem_pthread.dylib
0xbb3c &redacted& + 156
libsystem_pthread.dylib
0xbaa0 &redacted& + 0
libsystem_pthread.dylib
0x9030 thread_start + 4
)dSYM UUID: AAC5A273-C820-33E8-8CC4-249CE20C4999
CPU Type: arm64
Slide Address: 0x0000
Binary Image: libswiftUIKit.dylib
Base Address: 0x8000
今天会发出新版本,适配过9.1
今晚请下载新的5+SDK
这个问题 还真老火
请问楼主解决了这个问题吗 我都遇到
能告知一下是什么原因吗, 我们应用其他地方也有类似问题
出现异常可以提供可以复现问题的ipa发生问题的机型和系统版本并说明重现步骤
要回复问题请先或
浏览: 1106
关注: 6 人

我要回帖

更多关于 海马苹果永不闪退安装 的文章

 

随机推荐