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

一、背景

当符号表过多时,友盟只能一个一个手动上传,很费时费力。找到了命令行批量上传符号表的方式。第一次使用,安装环境会比较麻烦,但也属于一劳永逸类的工作。本方法也可稍作修改后,用于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文件到友盟
upload_dsyms_to_um() {
    # ⚠️这里的dSYMs.zip即刚刚压缩过的符号表压缩包文件名
    python3 um_upload_dsym_info.py ${UM_VERSION} "dSYMs.zip"
}

# 上传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放在同一个目录下

7. 执行命令 上传符号表

打开控制台,执行命令

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

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


API上传即为命令行上传的符号表
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容