Files
steipete--codexbar/Scripts/release_dsym_paths.sh
T
2026-07-13 12:22:33 +08:00

76 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
codexbar_dsym_dwarf_path() {
local dsym_path="$1"
local app_name="$2"
local dwarf_path="${dsym_path}/Contents/Resources/DWARF/${app_name}"
if [[ ! -f "$dwarf_path" ]]; then
echo "Missing fresh dSYM for ${app_name} at: ${dwarf_path}" >&2
return 1
fi
printf '%s\n' "$dwarf_path"
}
codexbar_require_dsym_dwarf_for_arch() {
local dsym_path="$1"
local app_name="$2"
local arch="$3"
local dwarf_path
if ! dwarf_path=$(codexbar_dsym_dwarf_path "$dsym_path" "$app_name"); then
return 1
fi
if ! lipo -archs "$dwarf_path" | tr ' ' '\n' | grep -qx "$arch"; then
echo "dSYM at ${dwarf_path} does not contain required architecture: ${arch}" >&2
return 1
fi
printf '%s\n' "$dwarf_path"
}
codexbar_dwarf_uuid_for_arch() {
local path="$1"
local arch="$2"
local uuid
uuid=$(dwarfdump --uuid "$path" | awk -v arch="(${arch})" '$1 == "UUID:" && $3 == arch { print $2; exit }')
if [[ -z "$uuid" ]]; then
echo "Missing UUID for ${arch} in: ${path}" >&2
return 1
fi
printf '%s\n' "$uuid"
}
codexbar_verify_dsym_matches_binary() {
local app_binary="$1"
local dsym_dwarf="$2"
shift 2
local arch app_uuid dsym_uuid
if [[ ! -f "$app_binary" ]]; then
echo "Missing app binary for dSYM UUID verification: ${app_binary}" >&2
return 1
fi
if [[ ! -f "$dsym_dwarf" ]]; then
echo "Missing dSYM DWARF file for UUID verification: ${dsym_dwarf}" >&2
return 1
fi
for arch in "$@"; do
if ! app_uuid=$(codexbar_dwarf_uuid_for_arch "$app_binary" "$arch"); then
return 1
fi
if ! dsym_uuid=$(codexbar_dwarf_uuid_for_arch "$dsym_dwarf" "$arch"); then
return 1
fi
if [[ "$app_uuid" != "$dsym_uuid" ]]; then
echo "dSYM UUID mismatch for ${arch}: app=${app_uuid}, dSYM=${dsym_uuid}" >&2
return 1
fi
done
}