本文介紹如何使用手動集成方式接入崩潰分析服務的iOS SDK。
前提條件
使用限制
僅支持iOS 8.0及以上的App。
接入概述
通過iOS SDK接入崩潰分析服務的操作步驟如下:
準備
下載崩潰分析服務相關開源庫文件,包括:
添加依賴
1:在Xcode中,將SDK目錄中的framework文件拖入Target目錄,在彈出框勾選Copy items if needed選項。
2:相同方式引入開源庫文件:
FBAllocationTracker
FBMemoryProfiler
FBRetainCycleDetector
rcd_fishhook
rcd_fishhook
在FBRetainCycleDetector
工程目錄下。
3:打開Build Phases > Link Binary With Libraries,添加Xcode自帶的公共包文件:
libc++.tbd
SystemConfiguration.framework
4:打開Build Phases > Compile Sources,為下列文件添加Compiler Flags:-fno-objc-arc
FBAssociationManager.mm
FBBlockStrongRelationDetector.m
FBBlockStrongLayout.m
FBClassStrongLayoutHelpers.m
NSObject+FBAllocationTracker.mm
FBAllocationTrackerNSZombieSupport.mm
接入服務
將iOS配置文件
AliyunEmasServices-Info.plist
拷貝至項目根目錄。在
AppDelegate.m
文件的application:didFinishLaunchingWithOptions
方法中初始化SDK。引入頭文件:
#import <AlicloudCrash/AlicloudCrashProvider.h> #import <AlicloudHAUtil/AlicloudHAProvider.h>
添加代碼段:
NSString *appVersion = @"x.x"; //app版本,會上報 NSString *channel = @"xx"; //渠道標記,自定義,會上報 NSString *nick = @"xx"; //nick 昵稱,自定義,會上報 [[AlicloudCrashProvider alloc] autoInitWithAppVersion:appVersion channel:channel nick:nick]; [AlicloudHAProvider start];
參數說明:
參數
說明
appVersion
用于指定App的版本,上報至服務端,進行版本區分。
【數據類型】字符串
【格式要求】自定義
【取值范圍】任意長度。
說明該參數值將在控制臺顯示為下拉列表選項,建議短小凝練。
【是否必選】是
【是否可為空】否
【默認值】無
【大小寫敏感】是。例如,vx.x和Vx.x不是一個版本。
【字符類型】英文大小寫、數字。
說明不支持中文字符、特殊字符。
channel
用于指定渠道標識,上報至服務端,進行渠道區分。
【數據類型】字符串
【取值范圍】任意長度
【是否必選】是
【是否可為空】否
【默認值】無
【字符類型】英文大小寫、數字。
說明不支持中文字符、特殊字符。
nick
用于指定用戶昵稱,上報至服務端,進行用戶區分。后續可能依據該參數,進行數據檢索。
【數據類型】字符串
【取值范圍】任意長度
【是否必選】是
【是否可為空】否
【默認值】無
【字符類型】英文大小寫、數字。
說明不支持中文字符、特殊字符。
【命名規范】自定義
添加高級設置
iOS SDK提供接口,用于上報自定義信息/錯誤。
//上報自定義信息 [AlicloudCrashProvider configCustomInfoWithKey:@"key" value:@"value"];//配置項:自定義環境信息(configCustomInfoWithKey/value) //按異常類型上報自定義信息 [AlicloudCrashProvider setCrashCallBack:^NSDictionary * _Nonnull(NSString * _Nonnull type) { return @{@"key":@"value"};//配置項:異常信息(key/value) }]; //上報自定義錯誤 NSError *error = [NSError errorWithDomain:@"customError" code:10001 userInfo:@{@"errorInfoKey":@"errorInfoValue"}]; [AlicloudCrashProvider reportCustomError:error];//配置項:自定義錯誤信息(errorWithDomain/code/userInfo)
具體說明請參見iOS SDK接口說明。
編譯
在項目的
Build Setting
中,將Allow Non-modular Includes In Framework Modules
設置為YES
。執行編譯。
說明編譯過程中如出現
duplicate symbol
類型錯誤,確認本地依賴與CocoaPods管理的依賴是否重復;如是,則刪除本地依賴。如同時使用其他阿里云產品,可能會因為依賴中存在UTDID沖突,造成編譯失敗。解決辦法參見:SDK UTDID沖突解決方案。
功能驗證
iOS SDK接入操作完成后,需進行功能驗證。
編寫測試代碼,模擬/觸發移動端崩潰。例如:
NSMutableArray *array = @[]; [array addObject:nil];
說明更多內容參考樣例代碼。
重啟移動端大概2分鐘后在控制臺查看是否顯示崩潰信息。
說明崩潰數據從采集到上傳到控制臺顯示,存在大約2~3分鐘延遲。
顯示崩潰數據:SDK接入成功
數據未顯示:按照c步驟進行排查
在模擬/觸發崩潰及重啟移動設備期間,使用Charles抓包,查看能否捕獲包含
https://adash-emas.cn-hangzhou.aliyuncs.com/upload
的HTTP請求:捕獲:崩潰信息已上報。可能原因:后端未接入;Appkey/Secret信息有誤。
未捕獲:崩潰信息未上報。可能原因:SDK接入失敗;SDK未捕獲崩潰;數據發送失敗。請聯系技術支持解決。
樣例代碼
崩潰分析服務iOS SDK接入工程樣例請參見Demo工程。