#!/bin/bash set -e OSTYPE=$(uname) if [ "${OSTYPE}" != "Darwin" ]; then echo "[obs-websocket - Error] macOS package script can be run on Darwin-type OS only." exit 1 fi echo "[obs-websocket] Preparing package build" GIT_HASH=$(git rev-parse --short HEAD) GIT_BRANCH_OR_TAG=$(git name-rev --name-only HEAD | awk -F/ '{print $NF}') VERSION="$GIT_HASH-$GIT_BRANCH_OR_TAG" FILENAME_UNSIGNED="obs-websocket-$VERSION-Unsigned.pkg" FILENAME="obs-websocket-$VERSION.pkg" echo "[obs-websocket] Modifying obs-websocket.so linking" install_name_tool \ -change /tmp/obsdeps/lib/QtWidgets.framework/Versions/5/QtWidgets \ @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets \ -change /tmp/obsdeps/lib/QtGui.framework/Versions/5/QtGui \ @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui \ -change /tmp/obsdeps/lib/QtCore.framework/Versions/5/QtCore \ @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore \ ./build/obs-websocket.so # Check if replacement worked echo "[obs-websocket] Dependencies for obs-websocket" otool -L ./build/obs-websocket.so if [[ "$RELEASE_MODE" == "True" ]]; then echo "[obs-websocket] Signing plugin binary: obs-websocket.so" codesign --sign "$CODE_SIGNING_IDENTITY" ./build/obs-websocket.so else echo "[obs-websocket] Skipped plugin codesigning" fi echo "[obs-websocket] Actual package build" packagesbuild ./CI/macos/obs-websocket.pkgproj echo "[obs-websocket] Renaming obs-websocket.pkg to $FILENAME" mv ./release/obs-websocket.pkg ./release/$FILENAME_UNSIGNED if [[ "$RELEASE_MODE" == "True" ]]; then echo "[obs-websocket] Signing installer: $FILENAME" productsign \ --sign "$INSTALLER_SIGNING_IDENTITY" \ ./release/$FILENAME_UNSIGNED \ ./release/$FILENAME rm ./release/$FILENAME_UNSIGNED echo "[obs-websocket] Submitting installer $FILENAME for notarization" zip -r ./release/$FILENAME.zip ./release/$FILENAME UPLOAD_RESULT=$(xcrun altool \ --notarize-app \ --primary-bundle-id "fr.palakis.obs-websocket" \ --username "$AC_USERNAME" \ --password "$AC_PASSWORD" \ --asc-provider "$AC_PROVIDER_SHORTNAME" \ --file "./release/$FILENAME.zip") rm ./release/$FILENAME.zip REQUEST_UUID=$(echo $UPLOAD_RESULT | awk -F ' = ' '/RequestUUID/ {print $2}') echo "Request UUID: $REQUEST_UUID" echo "[obs-websocket] Wait for notarization result" # Pieces of code borrowed from rednoah/notarized-app while sleep 30 && date; do CHECK_RESULT=$(xcrun altool \ --notarization-info "$REQUEST_UUID" \ --username "$AC_USERNAME" \ --password "$AC_PASSWORD" \ --asc-provider "$AC_PROVIDER_SHORTNAME") echo $CHECK_RESULT if ! grep -q "Status: in progress" <<< "$CHECK_RESULT"; then echo "[obs-websocket] Staple ticket to installer: $FILENAME" xcrun stapler staple ./release/$FILENAME break fi done else echo "[obs-websocket] Skipped installer codesigning and notarization" fi