#!/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 }