81 lines
1.8 KiB
Bash
Executable file
81 lines
1.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Extract code-signing identifier from macOS application bundles
|
|
# Usage: get_app_id [app_name|app_path]
|
|
|
|
extract_identifier() {
|
|
local app="$1"
|
|
codesign -dr - "$app" 2>&1 | grep -m1 "identifier" | sed -E 's/.*identifier "([^"]+)".*/\1/'
|
|
}
|
|
|
|
validate_and_extract() {
|
|
local app_path="$1"
|
|
|
|
if [[ ! -d "$app_path" ]]; then
|
|
echo "Error: Application not found: $app_path" >&2
|
|
return 1
|
|
fi
|
|
|
|
# Extract identifier
|
|
local identifier
|
|
identifier=$(extract_identifier "$app_path")
|
|
|
|
if [[ -z "$identifier" ]]; then
|
|
echo "Error: No code signature found for: $(basename "$app_path")" >&2
|
|
return 1
|
|
fi
|
|
|
|
echo "$identifier"
|
|
}
|
|
|
|
get_app_id() {
|
|
local app_path="${1:-}"
|
|
|
|
# If no argument, use fzf to select
|
|
if [[ -z "$app_path" ]]; then
|
|
if ! command -v fzf &>/dev/null; then
|
|
echo "Error: fzf is required for interactive selection" >&2
|
|
echo "Install with: brew install fzf" >&2
|
|
return 1
|
|
fi
|
|
|
|
# shellcheck disable=SC2016
|
|
app_path=$(
|
|
find /Applications -maxdepth 3 -name "*.app" -type d |
|
|
sort |
|
|
fzf --prompt="Select app: " \
|
|
--preview='
|
|
app={}
|
|
printf "Application: %s\n\n" "$(basename "$app")"
|
|
id=$(codesign -dr - "$app" 2>&1 | grep -m1 "identifier" | sed -E "s/.*identifier \"([^\"]+)\".*/\1/")
|
|
if [[ -n "$id" ]]; then
|
|
printf "Bundle ID:\n%s\n" "$id"
|
|
else
|
|
printf "No code signature found\n"
|
|
fi
|
|
' \
|
|
--preview-window="up:5:wrap" \
|
|
--height="50%"
|
|
)
|
|
|
|
extract_identifier "$app_path"
|
|
return 0
|
|
fi
|
|
|
|
# Resolve app path
|
|
if [[ "$app_path" != /* ]]; then
|
|
if [[ "$app_path" == *.app ]]; then
|
|
app_path="/Applications/$app_path"
|
|
else
|
|
app_path="/Applications/$app_path.app"
|
|
fi
|
|
fi
|
|
|
|
validate_and_extract "$app_path"
|
|
}
|
|
|
|
# Main execution
|
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
get_app_id "$@"
|
|
fi
|