Skip to content

Instantly share code, notes, and snippets.

@bistole
Created March 2, 2021 21:11
Show Gist options
  • Save bistole/d76519d90c65b9c7b12cfd2b5097c1aa to your computer and use it in GitHub Desktop.
Save bistole/d76519d90c65b9c7b12cfd2b5097c1aa to your computer and use it in GitHub Desktop.
archive, notarize and stapler
#!/bin/sh
CODE_BASE=/path/to/Storyboard
SCRIPT_PATH=$(dirname "$0")
DEPLOY_ROOT_PATH="${SCRIPT_PATH}/.."
LOG_PATH="${DEPLOY_ROOT_PATH}/logs"
BUILD_PATH="${DEPLOY_ROOT_PATH}/build/macos"
VERSION=
STATUS=
REQUEST_UUID=
NOTARIZE_LOG=
# parepare
mkdir -p ${BUILD_PATH} ${LOG_PATH}
# parse args
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-v|--version)
VERSION="$2"
shift # past argument
shift # past value
;;
*) # unknown
shift # past argument
esac
done
if [ -z "$VERSION" ]; then
read -p 'No version is specified, please enter one:' ver
VERSION=${ver}
fi
# cleanup
rm -f "${LOG_PATH}/macos-build-${VERSION}-00?.log"
rm -f "${BUILD_PATH}/$VERSION/Storyboard_temporary.zip"
# archive
echo Archiving...
xcodebuild -workspace "$CODE_BASE/macos/Runner.xcworkspace" \
-scheme Runner clean archive -configuration release \
-archivePath "${BUILD_PATH}/archive" archive
# export
echo Exporting...
xcodebuild -exportArchive -archivePath "${BUILD_PATH}/archive.xcarchive" \
-exportOptionsPlist "${CODE_BASE}/macos/Runner/ExportOptions.plist" \
-exportPath "${BUILD_PATH}/${VERSION}"
# zip
echo Zipping...
/usr/bin/ditto -c -k --keepParent "${BUILD_PATH}/$VERSION/Storyboard.app" \
"${BUILD_PATH}/$VERSION/Storyboard_temporary.zip"
# notarize
echo Uploading...
xcrun altool --notarize-app \
--primary-bundle-id "com.laterhorse.storyboard.zip" \
--username "[email protected]" \
--password "@keychain:storyboard.notarize.password" \
--file "${BUILD_PATH}/$VERSION/Storyboard.zip" 2>/dev/null \
| tee "${LOG_PATH}/macos-build-${VERSION}-000.log"
REQUEST_UUID=`grep RequestUUID ${LOG_PATH}/macos-build-${VERSION}-000.log | awk '{print $3}'`
if [ -z $REQUEST_UUID ]; then
echo "Failed to upload app to notarize."
exit 0
fi
echo REQUEST UUID is "$REQUEST_UUID"
# check status
echo Checking progress...
while [ -z "$STATUS" ] || [ "$STATUS" = 'in progress' ];
do
xcrun altool --notarization-history 0 \
--username "[email protected]" \
--password "@keychain:storyboard.notarize.password" 2>/dev/null \
> "${LOG_PATH}/macos-build-${VERSION}-001.log"
STATUS=`grep $REQUEST_UUID ${LOG_PATH}/macos-build-${VERSION}-001.log | awk '{print $5" "$6}'`
if [ -z "$STATUS" ] || [ "$STATUS" = 'in progress' ]; then
echo "Waiting for notarized, sleep 5 sec..."
sleep 5
fi
done
# echo "BEFORE CHECK: $STATUS"
STATUS=`grep $REQUEST_UUID ${LOG_PATH}/macos-build-${VERSION}-001.log | awk '{print $5}'`
# echo "AFTER CHECK: $STATUS"
CHECK_INFO() {
xcrun altool --notarization-info $REQUEST_UUID \
--username "[email protected]" \
--password "@keychain:storyboard.notarize.password" 2>/dev/null \
| tee "${LOG_PATH}/macos-build-${VERSION}-002.log"
NOTARIZE_LOG=`grep LogFileURL ${LOG_PATH}/macos-build-${VERSION}-002.log | awk '{print $2}'`
curl -o "${LOG_PATH}/macos-build-${VERSION}-003.log" $NOTARIZE_LOG \
2>/dev/null
ISSUES=`cat ${LOG_PATH}/macos-build-${VERSION}-003.log | jq '.issues'`
if [ -z $ISSUES ] || [ $ISSUES = null ]; then
echo No issues found
else
echo "Check following issues:"
echo $ISSUES | jq .
fi
}
# not succeed
if [[ $STATUS != "success" ]]; then
echo "Failed to notarize app. :("
CHECK_INFO
exit 0;
fi
# succeed
echo "App was notarized!!"
CHECK_INFO
# remove upload zip
rm -f "${BUILD_PATH}/$VERSION/Storyboard_temporary.zip"
# stapler
echo "Stapler..."
xcrun stapler staple "${BUILD_PATH}/$VERSION/Storyboard.app" 2>/dev/null
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment