Browse Source
fixes #6128 some of this is based on:mastere1354632d2/scripts/package/macos-notarize-app.sh1eb8b71e7d24e44e97845abec73eee
5 changed files with 175 additions and 71 deletions
@ -1,23 +0,0 @@
|
||||
#!/usr/bin/env bash |
||||
|
||||
. $(dirname "$0")/../build_tools_util.sh |
||||
|
||||
|
||||
function DoCodeSignMaybe { # ARGS: infoName fileOrDirName codesignIdentity |
||||
infoName="$1" |
||||
file="$2" |
||||
identity="$3" |
||||
deep="" |
||||
if [ -z "$identity" ]; then |
||||
# we are ok with them not passing anything; master script calls us unconditionally even if no identity is specified |
||||
return |
||||
fi |
||||
if [ -d "$file" ]; then |
||||
deep="--deep" |
||||
fi |
||||
if [ -z "$infoName" ] || [ -z "$file" ] || [ -z "$identity" ] || [ ! -e "$file" ]; then |
||||
fail "Argument error to internal function DoCodeSignMaybe()" |
||||
fi |
||||
info "Code signing ${infoName}..." |
||||
codesign -f -v $deep -s "$identity" "$file" || fail "Could not code sign ${infoName}" |
||||
} |
||||
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||
<plist version="1.0"> |
||||
<dict> |
||||
<!-- These are required for binaries built by PyInstaller --> |
||||
<!-- see pyinstaller/pyinstaller#4629 --> |
||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key> |
||||
<true/> |
||||
<key>com.apple.security.cs.disable-library-validation</key> |
||||
<true/> |
||||
|
||||
<!-- These are required for USB HID access (hw wallets). --> |
||||
<!-- see https://github.com/Electron-Cash/Electron-Cash/commit/5abec73eee0cdeb725e3c5a989621ec4ccfb92a0 --> |
||||
<key>com.apple.security.cs.allow-dyld-environment-variables</key> |
||||
<true/> |
||||
<key>com.apple.security.cs.allow-jit</key> |
||||
<true/> |
||||
</dict> |
||||
</plist> |
||||
@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env bash |
||||
# from https://github.com/metabrainz/picard/blob/e1354632d2db305b7a7624282701d34d73afa225/scripts/package/macos-notarize-app.sh |
||||
|
||||
|
||||
if [ -z "$1" ]; then |
||||
echo "Specify app bundle as first parameter" |
||||
exit 1 |
||||
fi |
||||
|
||||
if [ -z "$APPLE_ID_USER" ] || [ -z "$APPLE_ID_PASSWORD" ]; then |
||||
echo "You need to set your Apple ID credentials with \$APPLE_ID_USER and \$APPLE_ID_PASSWORD." |
||||
exit 1 |
||||
fi |
||||
|
||||
APP_BUNDLE=$(basename "$1") |
||||
APP_BUNDLE_DIR=$(dirname "$1") |
||||
|
||||
cd "$APP_BUNDLE_DIR" || exit 1 |
||||
|
||||
# Package app for submission |
||||
echo "Generating ZIP archive ${APP_BUNDLE}.zip..." |
||||
ditto -c -k --rsrc --keepParent "$APP_BUNDLE" "${APP_BUNDLE}.zip" |
||||
|
||||
# Submit for notarization |
||||
echo "Submitting $APP_BUNDLE for notarization..." |
||||
RESULT=$(xcrun altool --notarize-app --type osx \ |
||||
--file "${APP_BUNDLE}.zip" \ |
||||
--primary-bundle-id org.electrum.electrum \ |
||||
--username $APPLE_ID_USER \ |
||||
--password @env:APPLE_ID_PASSWORD \ |
||||
--output-format xml) |
||||
|
||||
if [ $? -ne 0 ]; then |
||||
echo "Submitting $APP_BUNDLE failed:" |
||||
echo "$RESULT" |
||||
exit 1 |
||||
fi |
||||
|
||||
REQUEST_UUID=$(echo "$RESULT" | xpath \ |
||||
"//key[normalize-space(text()) = 'RequestUUID']/following-sibling::string[1]/text()" 2> /dev/null) |
||||
|
||||
if [ -z "$REQUEST_UUID" ]; then |
||||
echo "Submitting $APP_BUNDLE failed:" |
||||
echo "$RESULT" |
||||
exit 1 |
||||
fi |
||||
|
||||
echo "$(echo "$RESULT" | xpath \ |
||||
"//key[normalize-space(text()) = 'success-message']/following-sibling::string[1]/text()" 2> /dev/null)" |
||||
|
||||
# Poll for notarization status |
||||
echo "Submitted notarization request $REQUEST_UUID, waiting for response..." |
||||
sleep 60 |
||||
while : |
||||
do |
||||
RESULT=$(xcrun altool --notarization-info "$REQUEST_UUID" \ |
||||
--username "$APPLE_ID_USER" \ |
||||
--password @env:APPLE_ID_PASSWORD \ |
||||
--output-format xml) |
||||
STATUS=$(echo "$RESULT" | xpath \ |
||||
"//key[normalize-space(text()) = 'Status']/following-sibling::string[1]/text()" 2> /dev/null) |
||||
|
||||
if [ "$STATUS" = "success" ]; then |
||||
echo "Notarization of $APP_BUNDLE succeeded!" |
||||
break |
||||
elif [ "$STATUS" = "in progress" ]; then |
||||
echo "Notarization in progress..." |
||||
sleep 20 |
||||
else |
||||
echo "Notarization of $APP_BUNDLE failed:" |
||||
echo "$RESULT" |
||||
exit 1 |
||||
fi |
||||
done |
||||
|
||||
# Staple the notary ticket |
||||
xcrun stapler staple "$APP_BUNDLE" |
||||
Loading…
Reference in new issue