UMCrashConfigure.h 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. //
  2. // UMCrashConfigure.h
  3. // UMCrash
  4. //
  5. // Created by wangkai on 2020/9/3.
  6. // Copyright © 2020 wangkai. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. typedef NSString *_Nullable(^CallbackBlock)(void);
  10. FOUNDATION_EXPORT NSString * _Nonnull const UMReportExceptionNameForCSharp;
  11. @class UMAPMConfig;
  12. @interface UMCrashConfigure : NSObject
  13. //获取sdk版本号
  14. + (NSString *_Nonnull)getVersion;
  15. //return字符串不能大于256字节,大于部分将被截取
  16. + (void)setCrashCBBlock:(CallbackBlock _Nullable )cbBlock;
  17. /**
  18. * 设置自定义版本号和build版本号即子版本号 (需要在初始化appkey方法之前调用)
  19. */
  20. + (void)setAppVersion:( NSString * __nonnull )appVersion buildVersion:(NSString* __nullable)buildVersion;
  21. /**
  22. * 设置APM的各个模块的开启/关闭配置(需要在初始化appkey方法之前调用)
  23. */
  24. +(void)setAPMConfig:(UMAPMConfig*_Nonnull)config;
  25. /**
  26. * @brief 设置APM的网络模块针对iOS13及以下系统的单独开关,以避免在同时集成NSURLProtocol和APM的网络模块的本身冲突引起崩溃。
  27. * 如果需要调用,在初始化UAPM网络模块前调用。
  28. *
  29. * @param enable 指定开关。YES:(捕获iOS13及以下特定网络请求,默认开启)。NO:不捕获iOS13及以下特定网络请求。
  30. *
  31. * @note 问题原因:同时集成NSURLProtocol和APM的网络模块的场景,先初始化APM的网络模块,再初始化NSURLProtocol的registerClass,会导致崩溃在iOS13及以下版本会崩溃,目前可以确定为iOS系统API引起的问题,iOS14无此问题。(先初始化NSURLProtocol的registerClass,再初始化APM的网络模块,是不会出现问题的)
  32. * 兼容iOS13及以下的初始化代码如下:
  33. * @example:
  34. * //确保NSURLProtocol的初始化在UMAPM的上面
  35. * [NSURLProtocol registerClass:[UMURLProtocol class]];
  36. * UMAPMConfig* config = [UMAPMConfig defaultConfig];
  37. * config.networkEnable = YES;
  38. * [UMCrashConfigure setAPMConfig:config];
  39. * [UMConfigure initWithAppkey:UMAPPKEY channel:@"App Store"];
  40. *
  41. * @note
  42. * 此开关默认打开,在同时集成NSURLProtocol和APM的网络模块的场景时候,根据需要调用,如果按照上述初始化顺序,不需要调用。
  43. *
  44. * @note 此函数关闭生效后,不会完全关闭网络模块,只是针对特定网络请求不再捕获,如果开发者能知道同时集成NSURLProtocol和APM的网络模块的场景的时候,最好通过调整初始化顺利来兼容所有场景,并在iOS13及以下版本测试兼容性。
  45. * @note:其他场景下,不需要调用此函数。
  46. */
  47. +(void)enableNetworkForProtocol:(BOOL)enable;
  48. /**
  49. * 上报自定义错误
  50. * 用户可以用SDK预定义的字符串UMReportExceptionNameForCSharp来传递csharp类型的自定义异常
  51. * @name 名称 长度限制256字节以内,超过截断。
  52. * @reason 错误原因 长度限制256字节以内,超过截断。
  53. * @stackTrace 堆栈 长度限制100*1024字节以内,超过截断。
  54. *
  55. * @example:
  56. * // 日志类型唯一标识
  57. NSString* name = @"csharp";
  58. NSString* reason = @"csharp exception";
  59. NSArray* stackTrace = [NSArray arrayWithObjects:
  60. @"msg: Exception: Exception, Attempted to divide by zero.",
  61. @"UnityDemo+ExceptionProbe.NormalException () (at <unknown>:0)",
  62. @"UnityDemo.TrigException (System.Int32 selGridInt) (at <unknown>:0)",
  63. @"UnityDemo.OnGUI () (at <unknown>:0)",
  64. nil];
  65. *
  66. *[UMCrashConfigure reportExceptionWithName:name reason:reason stackTrace:stackTrace];
  67. *
  68. *
  69. */
  70. +(void)reportExceptionWithName:(NSString* _Nonnull)name
  71. reason:(NSString* _Nonnull)reason
  72. stackTrace:(NSArray* _Nonnull)stackTrace;
  73. @end