homebrew-cask/developer/bin/find_appcast

89 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
readonly user_agent=(--user-agent 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36')
function usage {
echo "usage: ${0} <path_to_app>"
}
function absolute_path {
echo "$(cd "$(dirname "${1}")" && pwd)/$(basename "${1}")"
}
function url_exists {
local url
url="${1}"
[[ "$(curl --silent "${url}")" == '[]' ]] && return 1 # Special case for empty devmate appcasts
curl --output /dev/null --silent --head --fail "${url}"
}
function verify_appcast {
local appcast_type url
appcast_type="${1}"
url="${2}"
echo -n "Looking for ${appcast_type} appcast… "
if url_exists "${url}"; then
echo 'Found!'
echo " ${url}"
else
echo 'Not found.'
fi
}
function find_sparkle {
local app plist url
app="${1}"
plist="${app}/Contents/Info.plist"
url="$(defaults read "${plist}" 'SUFeedURL' 2>/dev/null)"
verify_appcast 'Sparkle' "${url}"
}
function find_hockeyapp {
local app binary identifier_hex url
app="${1}"
binary="$(find "${path_to_app}/Contents/MacOS" -type f -print -quit)"
identifier_hex="$(strings "${binary}" | grep --extended-regexp '^[a-f0-9]{32}$')"
url="https://rink.hockeyapp.net/api/2/apps/${identifier_hex}"
verify_appcast 'HockeyApp' "${url}"
}
function find_devmate {
local app bundle_id url
app="${1}"
bundle_id="$(mdls -raw -name kMDItemCFBundleIdentifier "${app}")"
url="https://updates.devmate.com/${bundle_id}.xml"
verify_appcast 'DevMate' "${url}"
}
# Exit if no argument (or more than one) was given
if [[ -z "${1}" ]] || [[ -n "${2}" ]]; then
usage
exit 1
fi
readonly path_to_app="$(absolute_path "${1}")"
if [[ ! -d "${path_to_app}" ]] || [[ "${path_to_app}" != *'.app' ]]; then
echo 'You need to use this on a .app. Please verify your target.'
usage
exit 1
fi
find_sparkle "${path_to_app}"
find_hockeyapp "${path_to_app}"
find_devmate "${path_to_app}"