2023-05-17 08:55:08 +00:00
|
|
|
#!/bin/csh
|
|
|
|
|
|
|
|
# This file is part of BOINC.
|
|
|
|
# http://boinc.berkeley.edu
|
|
|
|
# Copyright (C) 2023 University of California
|
|
|
|
#
|
|
|
|
# BOINC is free software; you can redistribute it and/or modify it
|
|
|
|
# under the terms of the GNU Lesser General Public License
|
|
|
|
# as published by the Free Software Foundation,
|
|
|
|
# either version 3 of the License, or (at your option) any later version.
|
|
|
|
#
|
|
|
|
# BOINC is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
# See the GNU Lesser General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU Lesser General Public License
|
|
|
|
# along with BOINC. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
##
|
|
|
|
# Notarization Script for Macintosh BOINC Manager 5/17/23 by Charlie Fenton
|
|
|
|
|
|
|
|
##
|
2023-05-17 09:27:50 +00:00
|
|
|
## This script will notarize and staple the release created by the script
|
2023-05-17 08:55:08 +00:00
|
|
|
## mac_installer/release_boinc.sh
|
|
|
|
##
|
|
|
|
## As of MacOS 10.15 Catalina, the OS does not allow the user to run downloaded
|
|
|
|
## software unless it has been "notarized" by Apple.
|
|
|
|
##
|
|
|
|
## cd to the root directory of the boinc tree, for example:
|
|
|
|
## cd [path]/boinc
|
|
|
|
##
|
|
|
|
## Invoke this script with the three parts of the version number as arguments.
|
|
|
|
## For example, if the version is 3.2.1:
|
|
|
|
## source [path_to_this_script] 3 2 1
|
|
|
|
##
|
|
|
|
## You must have done the following before running this script:
|
|
|
|
## * Created an app-specific password by following the instructions on
|
|
|
|
## "Using app-specific passwords" at <https://support.apple.com/en-us/HT204397>.
|
|
|
|
## NOTE: You cannot use your normal Apple ID password.
|
2023-05-17 09:27:50 +00:00
|
|
|
## * Created a profile named "notarycredentials" in your keychain using the
|
2023-05-17 08:55:08 +00:00
|
|
|
## "notarytool store-credentials" command (see "man notarytool" for details.)
|
|
|
|
## * Run the release_boinc.sh script
|
|
|
|
##
|
|
|
|
## - for more information:
|
|
|
|
## $ xcrun notarytool --help
|
|
|
|
## $ man stapler
|
|
|
|
##
|
|
|
|
|
|
|
|
basepath="../BOINC_Installer/New_Release_$1_$2_$3"
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "***** Notarizing Installer and Uninstaller *****"
|
|
|
|
echo
|
|
|
|
|
|
|
|
xcrun notarytool submit "$basepath/boinc_$1.$2.$3_macOSX_universal.zip" --keychain-profile "notarycredentials" --wait
|
|
|
|
|
|
|
|
if [ $? -ne 0 ]; then return 1; fi
|
|
|
|
|
|
|
|
## *** STAPLING THE ORIGINAL FILES NEVER WORKS. FOR SOME REASON, WE MUST:
|
|
|
|
## * REGENERATE THE DIRECTORY TREE FROM THE ZIP FILE WE SUBMITTED,
|
|
|
|
## * STAPLE THE EXECUTABLES IN THE NEW TREE
|
|
|
|
## * THEN CREATE A NEW ZIP FILE FROM THE STAPLED.
|
2023-05-17 09:27:50 +00:00
|
|
|
## FOR SAFETY, I FIRST RENAME THE ORIGINAL DIRECTORY TREE AND ZIP FILE RATHER THAN
|
2023-05-17 08:55:08 +00:00
|
|
|
## TRASHING THEM ***
|
|
|
|
|
|
|
|
mv "$basepath/boinc_$1.$2.$3_macOSX_universal" "$basepath/boinc_$1.$2.$3_macOSX_universal-orig"
|
|
|
|
|
|
|
|
open -W "$basepath/boinc_$1.$2.$3_macOSX_universal.zip"
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "***** Stapling Installer *****"
|
|
|
|
echo
|
|
|
|
|
|
|
|
xcrun stapler staple "$basepath/boinc_$1.$2.$3_macOSX_universal/BOINC Installer.app"
|
|
|
|
|
|
|
|
if [ $? -ne 0 ]; then return 1; fi
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "***** Stapling Uninstaller *****"
|
|
|
|
echo
|
|
|
|
|
|
|
|
xcrun stapler staple "$basepath/boinc_$1.$2.$3_macOSX_universal/extras/Uninstall BOINC.app"
|
|
|
|
|
|
|
|
if [ $? -ne 0 ]; then return 1; fi
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "***** Zipping Installer and Uninstaller *****"
|
|
|
|
echo
|
|
|
|
|
|
|
|
mv "$basepath/boinc_$1.$2.$3_macOSX_universal.zip" "$basepath/boinc_$1.$2.$3_macOSX_universal-raw.zip"
|
|
|
|
|
|
|
|
ditto -ck --sequesterRsrc --keepParent "$basepath/boinc_$1.$2.$3_macOSX_universal" "$basepath/boinc_$1.$2.$3_macOSX_universal.zip"
|
|
|
|
|
|
|
|
## *** Now notarize the command-line version ***
|
|
|
|
echo
|
|
|
|
echo "***** Notarizing command-line version *****"
|
|
|
|
echo
|
|
|
|
|
|
|
|
xcrun notarytool submit "$basepath/boinc_$1.$2.$3_universal-apple-darwin.dmg" --keychain-profile "notarycredentials" --wait
|
|
|
|
|
|
|
|
if [ $? -ne 0 ]; then return 1; fi
|
|
|
|
|
|
|
|
## *** STAPLING THE ORIGINAL DMG NEVER WORKS. FOR SOME REASON, WE MUST MAKE A
|
|
|
|
## COPY OF THE ORIGINAL DMG AND STAPLE THAT. FOR SAFETY, I:
|
|
|
|
## * FIRST RENAME THE ORIGINAL DMG RATHER THAN TRASHING IT
|
|
|
|
## * MAKE A COPY WITH THE ORIGINAL NAME
|
|
|
|
## * STAPLE THE NEW COPY (WITH THE ORIGINAL NAME) ***
|
|
|
|
|
|
|
|
mv "$basepath/boinc_$1.$2.$3_universal-apple-darwin.dmg" "$basepath/boinc_$1.$2.$3_universal-apple-darwin-raw.dmg"
|
|
|
|
|
|
|
|
cp "$basepath/boinc_$1.$2.$3_universal-apple-darwin-raw.dmg" "$basepath/boinc_$1.$2.$3_universal-apple-darwin.dmg"
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "***** Stapling command-line version *****"
|
|
|
|
echo
|
|
|
|
|
|
|
|
stapler staple "$basepath/boinc_$1.$2.$3_universal-apple-darwin.dmg"
|
|
|
|
|
|
|
|
if [ $? -ne 0 ]; then return 1; fi
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "***** Notarizing AddRemoveUser *****"
|
|
|
|
echo
|
|
|
|
|
|
|
|
## Command line tools such as AddRemoveuser cannot be notarized and so cannot be
|
|
|
|
## launched directly from the Finder (e.g. by double-clicking them), even if
|
|
|
|
## contained in a notarized dmg or zip file. But gatekeeper won't block them if
|
|
|
|
## they are run from within Terminal, as long as the containing dmg or zip file
|
|
|
|
## has been notarized (the zip file can't be stapled, and doesn't need to be.)
|
|
|
|
## For more information about this, see
|
|
|
|
## <https://developer.apple.com/forums/thread/127403>.
|
|
|
|
|
|
|
|
xcrun notarytool submit "$basepath/boinc_$1.$2.$3_$arch-AddRemoveUser.dmg" --keychain-profile "notarycredentials" --wait
|
|
|
|
|
|
|
|
if [ $? -ne 0 ]; then return 1; fi
|
|
|
|
|
|
|
|
## *** STAPLING THE ORIGINAL DMG NEVER WORKS. FOR SOME REASON, WE MUST MAKE A
|
|
|
|
## COPY OF THE ORIGINAL DMG AND STAPLE THAT. FOR SAFETY, I:
|
|
|
|
## * FIRST RENAME THE ORIGINAL DMG RATHER THAN TRASHING IT
|
|
|
|
## * MAKE A COPY WITH THE ORIGINAL NAME
|
|
|
|
## * STAPLE THE NEW COPY (WITH THE ORIGINAL NAME) ***
|
|
|
|
|
|
|
|
mv "$basepath/boinc_$1.$2.$3_$arch-AddRemoveUser.dmg" "$basepath/boinc_$1.$2.$3_$arch-AddRemoveUser-raw.dmg"
|
|
|
|
|
|
|
|
cp "$basepath/boinc_$1.$2.$3_$arch-AddRemoveUser-raw.dmg" "$basepath/boinc_$1.$2.$3_$arch-AddRemoveUser.dmg"
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "***** Stapling AddRemoveUser *****"
|
|
|
|
echo
|
|
|
|
|
|
|
|
stapler staple "$basepath/boinc_$1.$2.$3_$arch-AddRemoveUser.dmg"
|
|
|
|
|
|
|
|
if [ $? -ne 0 ]; then return 1; fi
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|