All Products
Search
Document Center

Application Real-Time Monitoring Service:Bulk upload symbol tables

Last Updated:Mar 11, 2026

When your application uses code obfuscation or minification, crash and error stack traces become unreadable. Symbol tables (JavaScript source maps, iOS dSYM files) restore these traces to human-readable function names, file paths, and line numbers. To upload symbol tables in bulk rather than one at a time through the console, upload them directly to the Object Storage Service (OSS) bucket that the Real User Monitoring (RUM) sub-service of Application Real-Time Monitoring Service (ARMS) provides.

Three upload methods are available: ossutil, OSS SDKs, and CI/CD pipelines.

Prerequisites

Before you begin, make sure that you have:

OSS bucket and path format

Select the bucket for your region

Use the bucket that matches the region where your application resides:

RegionBucket
China (Hangzhou)arms-rum-sourcemap-hz
Singaporearms-rum-sourcemap-sg
US (Silicon Valley)arms-rum-sourcemap-usw

Construct the upload path

Upload files to the following path structure:

<uid>/<pid>/<version>/
PlaceholderDescriptionExample
<uid>Alibaba Cloud account ID1981000187653069
<pid>RUM application IDji7ex7ti31@f1fadb692e6cdc8
<version>Symbol table version1.0.0
Important

For iOS apps, compress dSYM files into a .zip archive before uploading. RUM automatically parses the UUID from the compressed file. See Upload dSYM files for details.

Upload with ossutil

ossutil is a command-line tool for OSS. It supports directory uploads and is the simplest method for bulk operations.

Important

Configure access credentials for ossutil before proceeding. For details, see Configure ossutil.

Upload a directory

Upload all symbol tables from a local directory:

ossutil cp -r <local-directory>/ oss://<bucket>/<uid>/<pid>/<version>/

Example:

ossutil cp -r ./sourcemaps/ oss://arms-rum-sourcemap-hz/1981000187653069/ji7ex7ti31@f1fadb692e6cdc8/1.0.0/

Upload a single file

./ossutil64 cp <file-path> oss://<bucket>/<uid>/<pid>/<version>/

Example:

./ossutil64 cp examplefile.js.map oss://arms-rum-sourcemap-hz/1981000187653069/ji7ex7ti31@f1fadb692e6cdc8/1.0.0/

Upload with OSS SDKs

Use an OSS SDK when you need programmatic control or want to integrate uploads into your application code. All SDK examples follow the same pattern: authenticate with environment variable credentials, connect to the region-specific bucket, and upload files to the <uid>/<pid>/<version>/ path.

The following Python example uploads a source map file named examplefile.js.map:

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# Authenticate using the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())

# Connect to the China (Hangzhou) region bucket
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'arms-rum-sourcemap-hz')

# Build the destination path: <uid>/<pid>/<version>/<filename>
destination = '1981000187653069/ji7ex7ti31@f1fadb692e6cdc8/1.0.0/examplefile.js.map'

# Upload the local file
bucket.put_object_from_file(destination, 'D:\\localpath\\examplefile.js.map')

For other languages, see OSS SDK overview.

Integrate with CI/CD pipelines

You can integrate CI/CD pipelines with ossutil or OSS SDKs to upload symbol tables to the specified OSS bucket.

Upload dSYM files

For iOS apps, compress dSYM files before uploading. RUM automatically parses the UUID from each compressed file.

  1. Locate your dSYM files. A typical directory structure:

       .
       ├── AlibabaCloudRUM.framework.dSYM
       │   └── Contents
       │       ├── Info.plist
       │       └── Resources
       │           ├── DWARF
       │           │   └── AlibabaCloudRUM
       │           └── Relocations
       │               └── aarch64
       │                   └── AlibabaCloudRUM.yml
       └── iOSDemo.app.dSYM
           └── Contents
               ├── Info.plist
               └── Resources
                   ├── DWARF
                   │   ├── iOSDemo
                   │   └── iOSDemo.txt
                   └── Relocations
                       └── aarch64
                           └── iOSDemo.yml
  2. Compress the dSYM files into a .zip archive:

       zip -r dsyms.zip *.dSYM
  3. Upload the archive to OSS. The path must include the version:

       ossutil cp dsyms.zip oss://<bucket>/<uid>/<pid>/<version>/

FAQ

What does "403 AccessDenied: You have no right to access this object because of bucket acl" mean?

This error occurs when Enable OSS batch upload is not turned on for your account. To resolve it:

  1. Open the ARMS console and go to your application.

  2. Go to the Application Settings tab.

  3. In the File Management section, turn on Enable OSS batch upload.

Only accounts with this toggle enabled can upload to the RUM OSS bucket. For details, see Prerequisites.

What's next