package-macos.sh 2.8 KB

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