hydra

Terminal replacement for Loopback — virtual audio devices and routing on macOS, from a ratatui TUI.
Log | Files | Refs | README | LICENSE

create_uninstaller.sh (2199B)


      1 #!/bin/bash
      2 set -euo pipefail
      3 
      4 devTeamID="Q5C99V536K" # ⚠️ Replace this with your own developer team ID
      5 notarize=true # To skip notarization, set this to false
      6 notarizeProfile="notarize" # ⚠️ Replace this with your own notarytool keychain profile name
      7 
      8 # Basic Validation
      9 if [ ! -d BlackHole.xcodeproj ]; then
     10     echo "This script must be run from the BlackHole repo root folder."
     11     echo "For example:"
     12     echo "  cd /path/to/BlackHole"
     13     echo "  ./Uninstaller/create_uninstaller.sh"
     14     exit 1
     15 fi
     16 
     17 for channels in 2 16 64 128 256; do
     18 
     19 	# create script
     20 	echo \
     21 	'#!/bin/bash
     22 
     23 file="/Library/Audio/Plug-Ins/HAL/BlackHole'$channels'ch.driver"
     24 
     25 if [ -d "$file" ] ; then
     26     sudo rm -R "$file"
     27     sudo killall coreaudiod
     28 fi' > Uninstaller/Scripts/postinstall
     29 
     30 	chmod 755 Uninstaller/Scripts/postinstall
     31 
     32 	# Build .pkg
     33     packageName='Uninstaller/BlackHole'$channels'ch-Uninstaller.pkg'
     34 
     35     pkgbuild --nopayload --scripts Uninstaller/Scripts --sign $devTeamID --identifier 'audio.existential.BlackHole'$channels'ch.Uninstaller' $packageName
     36 
     37     # Notarize and Staple
     38     if [ "$notarize" = true ]; then
     39 
     40         # Submit the package for notarization and capture output, also displaying it simultaneously
     41         output=$(xcrun notarytool submit "$packageName" --progress --wait --keychain-profile "notarize" 2>&1 | tee /dev/tty)
     42 
     43         # Extract the submission ID
     44         submission_id=$(echo "$output" | grep -o -E 'id: [a-f0-9-]+' | awk '{print $2}' | head -n1)
     45 
     46         if [ -z "$submission_id" ]; then
     47           echo "Failed to extract submission ID. ❌"
     48           exit 1
     49         fi
     50 
     51         # Check the captured output for the "status: Invalid" indicator
     52         if echo "$output" | grep -q "status: Invalid"; then
     53           echo "Error detected during notarization: Submission Invalid ❌"
     54 
     55           # Fetch and display notarization logs
     56           echo -e "\nFetching logs for submission ID: $submission_id"
     57           xcrun notarytool log --keychain-profile "notarize" "$submission_id"
     58           exit 1
     59         else
     60           echo "Notarization submitted successfully ✅"
     61         fi
     62 
     63         xcrun stapler staple $packageName
     64     fi
     65 
     66 done
     67 
     68 rm Uninstaller/Scripts/postinstall