首页 IOS正文

IOS开发实战Bug收集集锦(持续更新。。。)

yuange IOS 2021-01-11 1197 0 iOS开发BUG收集

1.崩溃信息如下:

 Collection <__NSSetM: 0x146d47df0> was mutated while being enumerated.

在遍历set时,对set做了操作(删除或修改),发生崩溃。
修复办法:

[aMutableSet enumerateObjectsUsingBlock:^(id  _Nonnull obj, BOOL * _Nonnull stop) {
            if (满足条件)
            {
                *stop = YES;
                [aMutableSet removeObject:obj];
            }
        }];

2.发布app时,报如下错误:

Xcode 7 error: “Missing iOS Distribution signing identity for …”

解决办法如下:

1.Download https://developer.apple.com/certificationauthority/AppleWWDRCA.cer2.Double-click to install to Keychain.3.Then in Keychain, Select View -> "Show Expired Certificates" in Keychain app.4.It will list all the expired certifcates.5.Delete "Apple Worldwide Developer Relations Certificate Authority certificates" from "login" tab6.And also delete it from "System" tab.

这样就好了。

参考:

http://stackoverflow.com/questions/32821189/xcode-7-error-missing-ios-distribution-signing-identity-for

3.web页面调用相册或相机
报错如下:

Warning: Attempt to present <UIImagePickerController: 0x12734be00> on <MBTabBarVC: 0x1270fc000> whose view is not in the window hierarchy!

解决办法:在自定义的tab页面中重载下面方法。

-(void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion{
    if ( self.presentedViewController)
    {
        [super dismissViewControllerAnimated:flag completion:completion];
    }}

一、原生代码处理

正常代码使用中的几种崩溃处理:

1.NSException收集崩溃信息

// 将系统提供的获取崩溃信息函数写在这个方法中,以保证在程序开始运行就具有获取崩溃信息的功能
  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     // 将下面C函数的函数地址当做参数
     NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
     return YES;
  }
  // 设置一个C函数,用来接收崩溃信息
  void UncaughtExceptionHandler(NSException *exception){
      // 可以通过exception对象获取一些崩溃信息,我们就是通过这些崩溃信息来进行解析的,例如下面的symbols数组就是我们的崩溃堆栈。
      NSArray *symbols = [exception callStackSymbols];
      NSString *reason = [exception reason];
      NSString *name = [exception name];
  }
  
  //代码调用第2种方法:获取崩溃统计的函数指针
  NSUncaughtExceptionHandler *handler = NSGetUncaughtExceptionHandler();

2.dSYM

每次Archive一个包之后,都会随之生成一个dSYM文件。每次发布一个版本,我们都需要备份这个文件,以方便以后的调试。

需要使用Xcode自带的symbolicatecrash工具来将.Crash和.dSYM文件进行符号化

3、通过Xcode查看设备崩溃信息

选择window-> devices -> 选择自己的手机 -> view device logs 就可以查看我们的崩溃信息了。

4、苹果自带崩溃统计工具

苹果在Xcode中为我们集成了崩溃统计功能,在Window->Organizer->Crashes中可以看到

需要用户在iPhone中进行设置,设置->隐私->诊断与用量->诊断与用量数据(iOS8以下在通用中设置),选择自动发送,并与开发者共享即可

1、循环利用cell的ID设置位置写错了。导致程序奔溃。

2、对于除数算法,可以直接算出结果的就写上结果,不要偷懒写式子让计算机自己算,更何况是除数,会有算出无限小数的可能性。

 3、更改连线好的属性名,别忘了重新连线,否则会出现容易看不出来的bug

 4、slider不断的调用相关的方法和刷新,这个方法如果传递的参数可能比较占内存,比如某个对象,传递过程可能会跟不上slider的刷新速度,这里就需要对其进行处理,或者是另寻它法。
 
 5、对于工程中有很多很多的文件的时候,但是在文件夹目录下是会出现这种情况的,在同一个工程下,但是在不同的目录下是可以共存相同的文件,比如下图:
处理方法就是,仔细看看错误信息:
然后接着:
就这样就能找到问题的所在了。Bug解决了吧。
 
 6、关于Assertion failure in -[UIApplication _runWithMainScene的Bug

出现的问题:

解决方式是将出现的bug信息Assertion failure in -[UIApplication _runWithMainScene....这前面部分拷贝到Google搜索引擎一搜索就有:

7、关于bitcode的问题:

8、关于声明和创建const属性,出现的bug,这个bug类型是前面介绍的第5个bug

我将下面的两段代码,为了能够让两个类单独内部使用,把下面的代码抽离出来,分别放在不同的类的前面,结果造成前面第5个讲的bug,重复定义了。

 

评论

在线客服-可直接交谈

您好!有什么需要可以为您服务吗?