11#! /bin/bash
2-
32# ###########################################################################################
43# #
54# # Post-install Script for Swift Dialog
1110# Define any variables we need here:
1211logDir=" /Library/Application Support/Microsoft/IntuneScripts/Swift Dialog"
1312DIALOG_BIN=" /usr/local/bin/dialog"
14- PKG_PATH=" /var/tmp/dialog-2.5.2-4777.pkg"
13+ PKG_PATH=" /var/tmp/dialog.pkg"
14+ PKG_URL=" https://github.com/swiftDialog/swiftDialog/releases/download/v2.5.2/dialog-2.5.2-4777.pkg"
1515
1616# Start Logging
1717mkdir -p " $logDir "
@@ -27,57 +27,69 @@ exec > >(tee -a "$logDir/postinstall.log") 2>&1
2727if [[ ! -f " $DIALOG_BIN " ]]; then
2828 echo " $( date) | POST | Swift Dialog is not installed [$DIALOG_BIN ]. Installing now..."
2929
30- # Install SwiftDialog from the .pkg file
31- if [[ -f " $PKG_PATH " ]]; then
30+ # Download the SwiftDialog .pkg
31+ curl -L -o " $PKG_PATH " " $PKG_URL "
32+
33+ # Install SwiftDialog from the downloaded .pkg file
3234 sudo installer -pkg " $PKG_PATH " -target /
33-
34- if [[ $? -eq 0 ]]; then
35- echo " $( date) | POST | Swift Dialog has been installed successfully."
36- else
37- echo " $( date) | ERROR | Swift Dialog installation failed."
38- exit 1
39- fi
40- else
41- echo " $( date) | ERROR | Package file not found at $PKG_PATH . Exiting."
42- exit 1
43- fi
35+
4436else
4537 echo " $( date) | POST | Swift Dialog is already installed."
4638fi
4739
4840# Wait for Desktop
49- until ps aux | grep /System/Library/CoreServices/ Dock.app/Contents/MacOS/Dock | grep -v grep & > /dev/null; do
50- echo " $( date) | + Dock not running, waiting [1] seconds"
41+ until pgrep -x Dock > /dev/null 2>&1 ; do
42+ echo " $( date) | + Dock not running, waiting [1] seconds"
5143 sleep 1
5244done
53- echo " $( date) | Dock is here, lets carry on"
45+ echo " $( date) | Dock is here, let's carry on"
46+ ps aux
5447
55- # Run Swift Dialog
56- /usr/local/bin/dialog --jsonfile " /Library/Application Support/SwiftDialogResources/swiftdialog.json" --width 1280 --height 670 --blurscreen --ontop &
48+ # Wait for Swift Dialog to launch
49+ MAX_ATTEMPTS=5
50+ attempt=1
5751
58- # Wait for Swift Dialog to start
59- START=$( date +%s) # Set the start time so we can calculate how long we've been waiting
60- echo " $( date) | POST | Waiting for Swift Dialog to Start..."
61- # Loop for 1 minutes (60 seconds)
62- until ps aux | grep /usr/local/bin/dialog | grep -v grep & > /dev/null; do
63- # Check if the 60 seconds have passed
64- if [[ $(( $(date +% s) - $START )) -ge 60 ]]; then
65- echo " $( date) | POST | Failed: Swift Dialog did not start within 60 seconds"
66- exit 1
52+ while [ $attempt -le $MAX_ATTEMPTS ]; do
53+ echo " $( date) | INFO | Attempting to launch Swift Dialog (Attempt $attempt of $MAX_ATTEMPTS )"
54+
55+ # Launch Swift Dialog in the background
56+ killall Dialog
57+ /usr/local/bin/dialog --jsonfile " /Library/Application Support/SwiftDialogResources/swiftdialog.json" --width 1280 --height 670 --blurscreen --ontop &
58+ sleep 2
59+
60+ start_time=$( date +%s)
61+ launched=0
62+
63+ # Wait up to 5 seconds for the process to appear
64+ while true ; do
65+ if ps aux | grep /usr/local/bin/dialog | grep -v grep > /dev/null; then
66+ launched=1
67+ break
68+ fi
69+
70+ done
71+
72+ if [ $launched -eq 1 ]; then
73+ echo " $( date) | INFO | Swift Dialog launched successfully on attempt $attempt ."
74+ break
75+ else
76+ echo " $( date) | WARNING | Swift Dialog did not launch within 60 seconds on attempt $attempt ."
77+ attempt=$(( attempt+ 1 ))
6778 fi
68- echo -n " ."
69- sleep 1
7079done
71- echo " OK"
80+
81+ if [ $attempt -gt $MAX_ATTEMPTS ]; then
82+ echo " $( date) | ERROR | Swift Dialog failed to launch after $MAX_ATTEMPTS attempts. Continuing with the script..."
83+ fi
7284
7385echo " $( date) | POST | Processing scripts..."
7486for script in /Library/Application\ Support/SwiftdialogResources/scripts/* .* ; do
7587 echo " $( date) | POST | Executing [$script ]"
7688 xattr -d com.apple.quarantine " $script " > /dev/null 2>&1
7789 chmod +x " $script " > /dev/null 2>&1
78- nice -n 20 " $script "
90+ nice -n 20 " $script " &
7991done
8092
8193# Once we're done, we should write a flag file out so that we don't run again
8294sudo touch " $logDir /onboardingComplete"
83- exit 0
95+ exit 0
0 commit comments