美文网首页
命令行上传友盟dSYM(符号表)

命令行上传友盟dSYM(符号表)

作者: Accepted_ | 来源:发表于2023-01-13 16:36 被阅读0次

一、背景

当符号表过多时,友盟只能一个一个上传,很费时费力。找到了命令行批量上传符号表的方式。第一次使用,安装环境会比较麻烦,但也属于一劳永逸类的工作。本方法也可稍作修改后,用于Jenkins,打包上传后,自动上传符号表。

二、使用命令行上传dSYM操作步骤

注:安装以下环境和插件无需科学上网,网速快点就行。

1. 安装Python环境 (上传dSYM需要Python环境)

  • 如何确定是否安装过python环境?
# 命令行输入python或python3 (任选其一)
$ python

$ python3

如果显示zsh: command not found: python 表示没有安装

没有安装python环境 如果显示如下图所示,表示安装过。(python和python3有一个通过就行) 安装过python环境
  • 安装Python(已安装可跳过)
    1. 去python官网下载 https://www.python.org/downloads/
    2. 双击安装
    3. 控制台输入python3,如显示上图表示安装成功

2. 安装pip命令 (安装Python插件需要pip)

2.1 去官网下载 https://pypi.org/project/pip/

pip官网
下载

2.2 下载完成后解压,命令行cd进入解压的文件夹内

# 进入文件夹
$ cd /Users/march/Downloads/pip-22.3.1
# 用python命令安装 pip
$ python3 setup.py install

3. 安装requests插件

# 控制台输入
$ pip install requests

4. 安装alibabacloud_umeng_apm20220214插件

# 控制台输入
$ pip install alibabacloud_umeng_apm20220214
# 如果显示 *** Read timed out. 就是网不好,多执行几次这个命令就好了
如果前面alibabacloud-xxx都拉下来了,但是有进度条的这个一直停在0.0,看看是不是连了VPN,请断开(如果可以再切换个网络)后再次尝试。 下载异常示例

5. 找到APP对应的access_key_idaccess_key_secretdata_source_id

  • data_source_id查找路径:友盟 -> 选对应的项目 -> 设置 -> 应用信息 -> APPKEY

    data_source_id查找路径
  • access_key_idaccess_key_secret查找路径:友盟 -> 选对应的项目 -> 设置 -> 符号表管理 -> API上传说明 按钮 -> 查看OpenApi的使用方法 按钮 -> 获取身份认证信息 按钮 -> apiKeyaccess_key_idapiSecurityaccess_key_secret

    access_key_id和access_key_secret查找路径图1

    access_key_id和access_key_secret查找路径图2 ↓
    access_key_id和access_key_secret在红框处

图中红框处apiKeyaccess_key_idapiSecurityaccess_key_secret

6. 准备好上传符号表所需文件

6.1 准备好要上传的符号表 待上传的符号表示例

6.2 准备上传符号表所需命令文件 (共 3 个)

  • 第一个:创建.sh文件,命名为self_upload_dsyms.sh,代码如下,⚠️处的函数内需要根据实际情况修改。
# 版本号
VERSION=$1
# Build号
BUILD_VERSION=$2

#上传友盟的版本号 版本号-Build号
UM_VERSION="'${VERSION}'-'${BUILD_VERSION}'"

# 上传DSYMS文件到友盟(⚠️这里根据实际dSYM个数进行增删)
upload_dsyms_to_um() {
    # 第一个是工程主Target的符号表,以app.dSYM结尾
    python3 um_upload_dsym_info.py ${UM_VERSION} "Demo.app.dSYM.zip"
    #其余为导出的其他符号表,以.dSYM结尾
    python3 um_upload_dsym_info.py ${UM_VERSION} "Masonry.framework.dSYM.zip"
    python3 um_upload_dsym_info.py ${UM_VERSION} "AFNetworking.framework.dSYM.zip"
}

# 压缩dSYM文件(⚠️这里根据实际dSYM个数进行增删)
zip_dsyms() {
    # 第一个是工程主Target的符号表,以app.dSYM结尾,注意区分
    zip -r Demo.app.dSYM.zip Demo.app.dSYM
    #其余为导出的其他符号表,以.dSYM结尾
    zip -r Masonry.framework.dSYM.zip Masonry.framework.dSYM
    zip -r AFNetworking.framework.dSYM.zip AFNetworking.framework.dSYM
}

# 压缩dsym
zip_dsyms
# 上传DSYMS文件
upload_dsyms_to_um
  • 第二个:创建.sh文件,命名为um_upload_dsym_tool.sh,此文件无需修改
uploadAddress=$1
OSSAccessKeyId=$2
key=$3
policy=$4
signature=$5
callback=$6
fileName=$7

curl --location --request POST ${uploadAddress} \
--form signature=${signature} \
--form OSSAccessKeyId=${OSSAccessKeyId} \
--form policy=${policy} \
--form key=${key} \
--form callback=${callback} \
--form file=@"${fileName}"
  • 第三个:创建.py文件,命名为um_upload_dsym_info.py,修改 步骤5 中找到的access_key_idaccess_key_secretdata_source_id(在⚠️处)
# -*- coding: utf-8 -*-
import sys
import asyncio
import json
import os
import requests

from typing import List

from alibabacloud_umeng_apm20220214.client import Client as umeng_apm20220214Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_umeng_apm20220214 import models as umeng_apm_20220214_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient

class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client(
        access_key_id: str,
        access_key_secret: str,
    ) -> umeng_apm20220214Client:
        """
        使用AK&SK初始化账号Client
        @param access_key_id:
        @param access_key_secret:
        @return: Client
        @throws Exception
        """
        config = open_api_models.Config(
            # ⚠️您的 AccessKey ID,
            access_key_id='',
            # ⚠️您的 AccessKey Secret,
            access_key_secret=''
        )
        # 访问的域名
        config.endpoint = f'apm.openapi.umeng.com'
        return umeng_apm20220214Client(config)

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        app_version = args[0]
        file_name = args[1]
        client = Sample.create_client('accessKeyId', 'accessKeySecret')
        get_sym_upload_param_request = umeng_apm_20220214_models.GetSymUploadParamRequest(
            app_version=app_version,
            data_source_id='⚠️data_source_id在这里',
            file_name=file_name,
            file_type=3
        )
        headers = {}
        try:
            response = await client.get_sym_upload_param_with_options_async(get_sym_upload_param_request, headers, util_models.RuntimeOptions())
            response_body = response.body.data
            upload_address = response_body.upload_address
            access_key_id = response_body.access_key_id
            key = response_body.key
            policy = response_body.policy
            signature = response_body.signature
            callback = response_body.callback
            os.system('./um_upload_dsym_tool.sh '+upload_address+' '+access_key_id+' '+key+' '+policy+' '+signature+' '+callback+' '+file_name)

        except Exception as error:
            # 如有需要,请打印 error
            UtilClient.assert_as_string(error.message)
            print(error)

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    result = loop.run_until_complete(Sample.main_async(sys.argv[1:]))
    loop.close()
6.3 把上述三个文件放在和dSYM 同一个文件夹内 把三个文件和dSYM放在同一个目录下

7. 执行命令 上传符号表

打开控制台,执行命令

# 进入dSYMs目录下
$ cd /Users/march/Desktop/dSYMs
# 执行上传命令  传入 版本号 (例如1.0.0) 和 build号(例如1)
$ sh self_upload_dsyms.sh "1.0.0" "1"
上传成功示例

控制台输出code为200表示上传成功。可在友盟符号表列表查看。


API上传即为命令行上传的符号表

相关文章

  • 命令行上传友盟dSYM(符号表)

    一、背景 当符号表过多时,友盟只能一个一个上传,很费时费力。找到了命令行批量上传符号表的方式。第一次使用,安装环境...

  • 友盟上传dsym文件

    做了三年多iOS开发,终于知道了如何上传dsym文件,惭愧 点击上传dsym文件即可

  • iOS崩溃日志相关文章转载

    iOS之DYSM分析友盟错误信息 iOS 用dSYM工具分析友盟崩溃日志 —— 详细步骤 漫谈iOS Crash收...

  • 一次 Jenkins 入坑记录

    最近在使用 Jenkins 打包的时候,上传到 fir 上的包,没有 dSYM 符号表信息,导致虽然使用了 bug...

  • iOS新版友盟使用DSYM文件跟踪APP崩溃信息

    友盟的切换旧版功能不能用了,自己研究了一下,新版比旧版更好用。 附:如果Safari上传DSYM文件不成功,换成C...

  • iOS 闪退收集

    一、dSYM 什么是dSYM dSYM实际上放的是程序在编译过程中收集的符号表的信息,其实质上保存符号表数据的是二...

  • iOS无dSYM符号表情况下的崩溃分析

    一、dSYM符号表分析崩溃 在能够获取到dSYM符号表文件的情况下,分析崩溃详情请移步iOS crash 解析定位...

  • 友盟错误分析解决

    在友盟错误列表分析并解决错误时,可以通过上传dSYM使错误信息更直接的显示在项目的某个类的第几行,注意要错误对应版...

  • Crash的解析以及定位

    一、.dSYM 1.简介 .dSYM(debugging SYMbols)又称为调试符号表,是苹果为了方便调试和定...

  • iOS使用dSYM文件定位bug位置

    我们用的是友盟统计 找到dSYM文件:Xcoder->Window->Organizer, 找到对应的版本->Sh...

网友评论

      本文标题:命令行上传友盟dSYM(符号表)

      本文链接:https://www.haomeiwen.com/subject/ctejcdtx.html