1. 程式人生 > >iOS 開發 騰訊bugly(上線後崩潰追蹤)整合指南--2106最新版

iOS 開發 騰訊bugly(上線後崩潰追蹤)整合指南--2106最新版

iOS 開發 騰訊bugly(上線後崩潰追蹤)整合指南–2106最新版

首先要去騰訊開放平臺註冊APP 獲取appid 和appkey
這裡寫圖片描述

cocoapods整合

1.Podfile檔案

##

platform :ios, ‘8.0’

target 'demo' do
pod 'Masonry'
pod 'AFNetworking'
pod 'SDWebImage'
pod 'SVProgressHUD'
pod 'Bugly'

end

2.終端–cd 到專案檔案

##

pod init
pod search bugly
pod install

依賴庫

SystemConfiguration.framework
Security.framework
libz.dylib

3.在工程的AppDelegate.m檔案匯入標頭檔案

#import <Bugly/Bugly.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [Bugly startWithAppId:@"此處替換為你在騰訊註冊的AppId"];
    return
YES; }

自動整合符號配置表

仔細閱讀符號表工具iOS版–使用指南
這裡寫圖片描述

.sh檔案

這裡寫圖片描述

配置表
指令碼

開啟工具包中的dSYM_upload.sh,複製所有內容,在新增的Run Scrpit Phase中貼上
修改新增的Run Scrpit中的 <YOUR_APP_ID> 為您的App ID,<YOUR_APP_KEY>為您的App Key,<YOUR_BUNDLE_ID> 為App的Bundle Id

dsYM

#!/bin/sh
#
# Copyright 2016 Bugly, Tencent. All rights reserved.
#
# V1.4.0
# # 2016.08.03 # # # ###################################################### # 1. 指令碼整合到Xcode工程的Target ###################################################### # # --- Copy the SCRIPT to the Run Script of Build Phases in the Xcode project --- # # # BUGLY_APP_ID="你的APP_ID" # # BUGLY_APP_KEY="你的APP_KEY" # # BUNDLE_IDENTIFIER="你的bundle id" # # UPLOAD_DSYM_ONLY=1 # # # 指令碼預設配置的版本格式為CFBundleShortVersionString(CFBundleVersion), 如果你修改預設的版本格式, 請設定此變數, 如果不想修改, 請忽略此設定 # CUSTOMIZED_APP_VERSION="" # # # Debug模式編譯是否上傳,1=上傳 0=不上傳,預設不上傳 UPLOAD_DEBUG_SYMBOLS=1 # # # 模擬器編譯是否上傳,1=上傳 0=不上傳,預設不上傳 UPLOAD_SIMULATOR_SYMBOLS=1 # # #只有Archive操作時上傳, 1=支援Archive上傳 0=所有Release模式編譯都上傳 # UPLOAD_ARCHIVE_ONLY=0 # # # # source dSYMUpload.sh # # --- END OF SCRIPT --- # # # # ####################################################### # 2. 指令碼根據輸入引數處理 ####################################################### # # #命令列下輸入應用基本資訊, .dSYM檔案的父目錄路徑, 輸出檔案目錄即可 # # sh dSYMUpload.sh <bugly_app_id> <bugly_app_key> <app_bundle_identifier> <app_version> <dSYM_src_dir> <bSYMBOL_dest_dir> # # # # # #注意: # # 1. dSYMUpload.sh會呼叫buglySymboliOS.jar進行.dSYM解析,所以依賴Java執行時環境 # # 2. dSYMUpload.sh和buglySymboliOS.jar的檔案路徑需一致 # # # # --- CONTENT OF SCRIPT --- # # Bugly服務域名 BUGLY_DSYM_UPLOAD_DOMAIN="api.bugly.qq.com" # 注意jar工具的路徑跟dSYMUpload.sh指令碼路徑一致, 請務必保證jar路徑的正確性 BUGLY_SYMBOL_JAR_PATH="dsymtool/buglySymboliOS.jar" # 查詢新增到系統目錄的jar工具 if [ ! -f "${BUGLY_SYMBOL_JAR_PATH}" ]; then BUGLY_SYMBOL_JAR_PATH="$HOME/bin/buglySymboliOS.jar" fi # 列印錯誤資訊 function exitWithMessage(){ echo "--------------------------------" echo "${1}" echo "--------------------------------" exit ${2} } # 上傳bSYMBOL檔案 function dSYMUpload() { P_APP_ID="$1" P_APP_KEY="$2" P_APP_BUNDLE_ID="$3" P_APP_VERSION="$4" P_BSYMBOL_ZIP_FILE="$5" # P_BSYMBOL_ZIP_FILE_NAME=${P_BSYMBOL_ZIP_FILE##*/} P_BSYMBOL_ZIP_FILE_NAME=${P_BSYMBOL_ZIP_FILE_NAME//&/_} P_BSYMBOL_ZIP_FILE_NAME="${P_BSYMBOL_ZIP_FILE_NAME// /_}" DSYM_UPLOAD_URL="https://${BUGLY_DSYM_UPLOAD_DOMAIN}/openapi/file/upload/symbol?app_id=${P_APP_ID}&app_key=${P_APP_KEY}" echo "dSYM upload url: ${DSYM_UPLOAD_URL}" echo "-----------------------------" STATUS=$(/usr/bin/curl -k "${DSYM_UPLOAD_URL}" --form "api_version=1" --form "app_id=${P_APP_ID}" --form "app_key=${P_APP_KEY}" --form "symbolType=2" --form "bundleId=${BUNDLE_IDENTIFIER}" --form "productVersion=${BUGLY_APP_VERSION}" --form "fileName=${P_BSYMBOL_ZIP_FILE_NAME}" --form "[email protected]${P_BSYMBOL_ZIP_FILE}" --verbose) echo "-----------------------------" UPLOAD_RESULT="FAILTURE" echo "Bugly server response: ${STATUS}" if [ ! "${STATUS}" ]; then echo "Error: Failed to upload the zip archive file." elif [[ "${STATUS}" == *"{\"reponseCode\":\"0\"}"* ]]; then echo "Success to upload the dSYM for the app [${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION}]" UPLOAD_RESULT="SUCCESS" else echo "Error: Failed to upload the zip archive file to Bugly." fi #Remove temp dSYM archive #echo "Remove temporary zip archive: ${DSYM_ZIP_FPATH}" #/bin/rm -f "${DSYM_ZIP_FPATH}" if [ "$?" -ne 0 ]; then exitWithMessage "Error: Failed to remove temporary zip archive." 0 fi echo "--------------------------------" echo "${UPLOAD_RESULT} - dSYM upload complete." if [[ "${UPLOAD_RESULT}" == "FAILTURE" ]]; then echo "--------------------------------" echo "Failed to upload the dSYM" echo "Please check the script and try it again." fi } # .dSYM解析為bSYMBOL檔案 function dSYMParse() { DSYM_FILE="$1" DSYM_SYMBOL_FILE="$2" echo "--------------------------------" echo "Extract symbol info from .dSYM file. to ${DSYM_SYMBOL_FILE}" (/usr/bin/java -Xms512m -Xmx1024m -Dfile.encoding=UTF8 -jar "${BUGLY_SYMBOL_JAR_PATH}" -i "${DSYM_FILE}" -o "${DSYM_SYMBOL_FILE}" ) || exitWithMessage "Error: Failed to extract symbols." 1 echo "--------------------------------" } # 執行 function run() { CONFIG_BUGLY_APP_ID="$1" CONFIG_BUGLY_APP_KEY="$2" CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER="$3" CONFIG_BUGLY_APP_VERSION="$4" CONFIG_DSYM_SOURCE_DIR="$5" CONFIG_DSYM_DEST_DIR="$6" CONFIG_UPLOAD_DSYM_ONLY="$7" # 檢查必須引數是否設定 if [ ! "${CONFIG_BUGLY_APP_ID}" ]; then exitWithMessage "Error: Bugly App ID not defined. Please set 'BUGLY_APP_ID' " 0 fi if [[ "${CONFIG_BUGLY_APP_ID}" == *"App ID"* ]]; then exitWithMessage "Error: Bugly App ID not defined." 0 fi if [ ! "${CONFIG_BUGLY_APP_KEY}" ]; then exitWithMessage "Error: Bugly App Key not defined." 0 fi if [ ! "${CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER}" ]; then exitWithMessage "Error: Bundle Identifier not defined." 0 fi if [ ! "${CONFIG_BUGLY_APP_VERSION}" ]; then exitWithMessage "Error: App Version not defined." 0 fi if [ ! -e "${CONFIG_DSYM_SOURCE_DIR}" ]; then exitWithMessage "Error: Invalid dir ${CONFIG_DSYM_SOURCE_DIR}" 0 fi if [ ! "${CONFIG_DSYM_DEST_DIR}" ]; then exitWithMessage "Error: Invalid dir ${CONFIG_DSYM_DEST_DIR}" 0 fi if [ ! -e "${CONFIG_DSYM_DEST_DIR}" ]; then mkdir ${CONFIG_DSYM_DEST_DIR} fi DSYM_FOLDER="${CONFIG_DSYM_SOURCE_DIR}" IFS=$'\n' echo "Scaning dSYM FOLDER: ${DSYM_FOLDER} ..." RET="F" # for dsymFile in $(find "$DSYM_FOLDER" -name '*.dSYM'); do RET="T" echo "Found dSYM file: $dsymFile" DSYM_FILE_NAME=${dsymFile##*/} DSYM_SYMBOL_ZIP_FILE_NAME="${DSYM_FILE_NAME}.zip" DSYM_SYMBOL_ZIP_FILE_NAME="${DSYM_SYMBOL_ZIP_FILE_NAME// /_}" DSYM_SYMBOL_ZIP_FILE=${CONFIG_DSYM_DEST_DIR}/${DSYM_SYMBOL_ZIP_FILE_NAME} if [ $CONFIG_UPLOAD_DSYM_ONLY -eq 1 ]; then if [ -e $DSYM_SYMBOL_ZIP_FILE ]; then rm -f $DSYM_SYMBOL_ZIP_FILE fi # 如果只上傳dSYM,直接壓縮dSYM目錄 zip -r -j $DSYM_SYMBOL_ZIP_FILE $dsymFile -x *.plist else # 使用符號表工具來生成Symbol檔案 dSYMParse $dsymFile $DSYM_SYMBOL_ZIP_FILE fi # 上傳 dSYMUpload $CONFIG_BUGLY_APP_ID $CONFIG_BUGLY_APP_KEY $CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER $CONFIG_BUGLY_APP_VERSION $DSYM_SYMBOL_ZIP_FILE done if [ $RET = "F" ]; then exitWithMessage "No .dSYM found in ${DSYM_FOLDER}" 0 fi } # 在Xcode工程中執行 function runInXcode(){ echo "Uploading dSYM to Bugly in Xcode ..." echo "Info.Plist : ${INFOPLIST_FILE}" BUNDLE_VERSION=$(/usr/libexec/PlistBuddy -c 'Print CFBundleVersion' "${INFOPLIST_FILE}") BUNDLE_SHORT_VERSION=$(/usr/libexec/PlistBuddy -c 'Print CFBundleShortVersionString' "${INFOPLIST_FILE}") # 組裝Bugly預設識別的版本資訊(格式為CFBundleShortVersionString(CFBundleVersion), 例如: 1.0(1)) if [ ! "${CUSTOMIZED_APP_VERSION}" ]; then BUGLY_APP_VERSION="${BUNDLE_SHORT_VERSION}(${BUNDLE_VERSION})" else BUGLY_APP_VERSION="${CUSTOMIZED_APP_VERSION}" fi echo "--------------------------------" echo "Prepare application information." echo "--------------------------------" echo "Product Name: ${PRODUCT_NAME}" echo "Bundle Identifier: ${BUNDLE_IDENTIFIER}" echo "Version: ${BUNDLE_SHORT_VERSION}" echo "Build: ${BUNDLE_VERSION}" echo "Bugly App ID: ${BUGLY_APP_ID}" echo "Bugly App key: ${BUGLY_APP_KEY}" echo "Bugly App Version: ${BUGLY_APP_VERSION}" echo "--------------------------------" echo "Check the arguments ..." ##檢查模擬器編譯是否允許上傳符號 if [ "$EFFECTIVE_PLATFORM_NAME" == "-iphonesimulator" ]; then if [ $UPLOAD_SIMULATOR_SYMBOLS -eq 0 ]; then exitWithMessage "Warning: Build for simulator and skipping to upload. \nYou can modify 'UPLOAD_SIMULATOR_SYMBOLS' to 1 in the script." 0 fi fi ##檢查是否是Release模式編譯 if [ "${CONFIGURATION=}" == "Debug" ]; then if [ $UPLOAD_DEBUG_SYMBOLS -eq 0 ]; then exitWithMessage "Warning: Build for debug mode and skipping to upload. \nYou can modify 'UPLOAD_DEBUG_SYMBOLS' to 1 in the script." 0 fi fi ##檢查是否Archive操作 if [ $UPLOAD_ARCHIVE_ONLY -eq 1 ]; then if [[ "$TARGET_BUILD_DIR" == *"/Archive"* ]]; then echo "Archive the package" else exitWithMessage "Warning: Build for NOT Archive mode and skipping to upload. \nYou can modify 'UPLOAD_ARCHIVE_ONLY' to 0 in the script." 0 fi fi # run ${BUGLY_APP_ID} ${BUGLY_APP_KEY} ${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION} ${DWARF_DSYM_FOLDER_PATH} ${BUILD_DIR}/BuglySymbolTemp ${UPLOAD_DSYM_ONLY} } # 根據Xcode的環境變數判斷是否處於Xcode環境 INFO_PLIST_FILE="${INFOPLIST_FILE}" BuildInXcode="F" if [ -f "${INFO_PLIST_FILE}" ]; then BuildInXcode="T" fi if [ $BuildInXcode = "T" ]; then runInXcode else echo "\nUsage: dSYMUpload.sh <bugly_app_id> <bugly_app_key> <app_bundle_identifier> <app_version> <dSYM_src_dir> <bSYMBOL_dest_dir> [upload_dsym_only]\n" # 你可以在此處直接設定BuglyAppID和BuglyAppKey,排除不常變引數的輸入 BUGLY_APP_ID="$1" BUGLY_APP_KEY="$2" BUNDLE_IDENTIFIER="$3" BUGLY_APP_VERSION="$4" DWARF_DSYM_FOLDER_PATH="$5" SYMBOL_OUTPUT_PATH="$6" UPLOAD_DSYM_ONLY=$7 run ${BUGLY_APP_ID} ${BUGLY_APP_KEY} ${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION} ${DWARF_DSYM_FOLDER_PATH} ${SYMBOL_OUTPUT_PATH} ${UPLOAD_DSYM_ONLY} fi

dsYM檔案

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

指令碼直接上傳dSYM檔案

指令碼直接上傳dSYM檔案

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

終端執行

這裡寫圖片描述

這裡寫圖片描述
生成XXX.app.dsYM.zip包,上傳上去

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

專案效果

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述