package-macos.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/bin/bash
  2. set -e
  3. script_dir=$(dirname "$0")
  4. source "$script_dir/../ci_includes.generated.sh"
  5. OSTYPE=$(uname)
  6. if [ "${OSTYPE}" != "Darwin" ]; then
  7. echo "[Error] macOS package script can be run on Darwin-type OS only."
  8. exit 1
  9. fi
  10. echo "=> Preparing package build"
  11. export QT_CELLAR_PREFIX="$(/usr/bin/find /usr/local/Cellar/qt -d 1 | sort -t '.' -k 1,1n -k 2,2n -k 3,3n | tail -n 1)"
  12. GIT_HASH=$(git rev-parse --short HEAD)
  13. GIT_BRANCH_OR_TAG=$(git name-rev --name-only HEAD | awk -F/ '{print $NF}')
  14. PKG_VERSION="$GIT_HASH-$GIT_BRANCH_OR_TAG"
  15. FILENAME_UNSIGNED="$PLUGIN_NAME-$PKG_VERSION-Unsigned.pkg"
  16. FILENAME="$PLUGIN_NAME-$PKG_VERSION.pkg"
  17. echo "=> Modifying $PLUGIN_NAME.so"
  18. install_name_tool \
  19. -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets \
  20. @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets \
  21. -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui \
  22. @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui \
  23. -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore \
  24. @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore \
  25. ./build/$PLUGIN_NAME.so
  26. # Check if replacement worked
  27. echo "=> Dependencies for $PLUGIN_NAME"
  28. otool -L ./build/$PLUGIN_NAME.so
  29. if [[ "$RELEASE_MODE" == "True" ]]; then
  30. echo "=> Signing plugin binary: $PLUGIN_NAME.so"
  31. codesign --sign "$CODE_SIGNING_IDENTITY" ./build/$PLUGIN_NAME.so
  32. else
  33. echo "=> Skipped plugin codesigning"
  34. fi
  35. echo "=> Actual package build"
  36. packagesbuild ./installer/installer-macOS.generated.pkgproj
  37. echo "=> Renaming $PLUGIN_NAME.pkg to $FILENAME"
  38. mv ./release/$PLUGIN_NAME.pkg ./release/$FILENAME_UNSIGNED
  39. if [[ "$RELEASE_MODE" == "True" ]]; then
  40. echo "=> Signing installer: $FILENAME"
  41. productsign \
  42. --sign "$INSTALLER_SIGNING_IDENTITY" \
  43. ./release/$FILENAME_UNSIGNED \
  44. ./release/$FILENAME
  45. rm ./release/$FILENAME_UNSIGNED
  46. echo "=> Submitting installer $FILENAME for notarization"
  47. zip -r ./release/$FILENAME.zip ./release/$FILENAME
  48. UPLOAD_RESULT=$(xcrun altool \
  49. --notarize-app \
  50. --primary-bundle-id "$MACOS_BUNDLEID" \
  51. --username "$AC_USERNAME" \
  52. --password "$AC_PASSWORD" \
  53. --asc-provider "$AC_PROVIDER_SHORTNAME" \
  54. --file "./release/$FILENAME.zip")
  55. rm ./release/$FILENAME.zip
  56. REQUEST_UUID=$(echo $UPLOAD_RESULT | awk -F ' = ' '/RequestUUID/ {print $2}')
  57. echo "Request UUID: $REQUEST_UUID"
  58. echo "=> Wait for notarization result"
  59. # Pieces of code borrowed from rednoah/notarized-app
  60. while sleep 30 && date; do
  61. CHECK_RESULT=$(xcrun altool \
  62. --notarization-info "$REQUEST_UUID" \
  63. --username "$AC_USERNAME" \
  64. --password "$AC_PASSWORD" \
  65. --asc-provider "$AC_PROVIDER_SHORTNAME")
  66. echo $CHECK_RESULT
  67. if ! grep -q "Status: in progress" <<< "$CHECK_RESULT"; then
  68. echo "=> Staple ticket to installer: $FILENAME"
  69. xcrun stapler staple ./release/$FILENAME
  70. break
  71. fi
  72. done
  73. else
  74. echo "=> Skipped installer codesigning and notarization"
  75. fi