|  |  |  | #!/usr/bin/env bash
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Script used with Drone CI to delete any test simulators created by the pipeline that are older than 1 | 
					
						
							|  |  |  | # hour (the timeout for iOS builds) to ensure we don't waste too much HDD space with test simulators. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | dir="$HOME/Library/Developer/CoreSimulator/Devices" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # The $HOME directory for a drone pipeline won't be the directory the simulators are stored in so | 
					
						
							|  |  |  | # check if it exists and if not, fallback to a hard-coded directory | 
					
						
							|  |  |  | if [[ ! -d $dir ]]; then | 
					
						
							|  |  |  |   dir="/Users/drone/Library/Developer/CoreSimulator/Devices" | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Plist file | 
					
						
							|  |  |  | plist="${dir}/device_set.plist" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if [[ ! -f ${plist} ]]; then | 
					
						
							|  |  |  | 	echo -e "\e[31;1mXCode Simulator list not found.\e[0m" | 
					
						
							|  |  |  | 	exit 1 | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Delete any unavailable simulators | 
					
						
							|  |  |  | xcrun simctl delete unavailable | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Extract all UUIDs from the device_set | 
					
						
							|  |  |  | uuids=$(grep -Eo '[A-F0-9]{8}-([A-F0-9]{4}-){3}[A-F0-9]{12}' "$plist") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Create empty arrays to store the outputs | 
					
						
							|  |  |  | uuids_to_keep=() | 
					
						
							|  |  |  | uuids_to_ignore=() | 
					
						
							|  |  |  | uuids_to_remove=() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Find directories older than an hour | 
					
						
							|  |  |  | while read -r child_dir; do | 
					
						
							|  |  |  |   # Get the last component of the directory path | 
					
						
							|  |  |  |   dir_name=$(basename "$child_dir") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # If the folder is not in the uuids array then add it to the uuids_to_remove | 
					
						
							|  |  |  |   # array, otherwise add it to uuids_to_ignore | 
					
						
							|  |  |  |   if ! echo "$uuids" | grep -q "$dir_name"; then | 
					
						
							|  |  |  |     uuids_to_remove+=("$dir_name") | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     uuids_to_ignore+=("$dir_name") | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | done < <(find "$dir" -maxdepth 1 -type d -not -path "$dir" -mmin +60) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Find directories newer than an hour | 
					
						
							|  |  |  | while read -r child_dir; do | 
					
						
							|  |  |  |   # Get the last component of the directory path | 
					
						
							|  |  |  |   dir_name=$(basename "$child_dir") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # If the folder is not in the uuids array then add it to the uuids_to_keep array | 
					
						
							|  |  |  |   if ! echo "$uuids" | grep -q "$dir_name"; then | 
					
						
							|  |  |  |     uuids_to_keep+=("$dir_name") | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | done < <(find "$dir" -maxdepth 1 -type d -not -path "$dir" -mmin -60) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Delete the simulators | 
					
						
							|  |  |  | if [ ${#uuids_to_remove[@]} -eq 0 ]; then | 
					
						
							|  |  |  |   echo -e "\e[31mNo simulators to delete\e[0m" | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |   echo -e "\e[31mDeleting ${#uuids_to_remove[@]} old test simulators:\e[0m" | 
					
						
							|  |  |  |   for uuid in "${uuids_to_remove[@]}"; do | 
					
						
							|  |  |  |     echo -e "\e[31m    $uuid\e[0m" | 
					
						
							|  |  |  |     # xcrun simctl delete "$uuid" | 
					
						
							|  |  |  |   done | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Output the pipeline simulators we are leaving | 
					
						
							|  |  |  | if [ ${#uuids_to_keep[@]} -gt 0 ]; then | 
					
						
							|  |  |  |   echo -e "\e[33m\nIgnoring ${#uuids_to_keep[@]} test simulators (might be in use):\e[0m" | 
					
						
							|  |  |  |   for uuid in "${uuids_to_keep[@]}"; do | 
					
						
							|  |  |  |   	echo -e "\e[33m    $uuid\e[0m" | 
					
						
							|  |  |  |   done | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Output the remaining Xcode Simulators | 
					
						
							|  |  |  | echo -e "\e[32m\nIgnoring ${#uuids_to_ignore[@]} Xcode simulators:\e[0m" | 
					
						
							|  |  |  | for uuid in "${uuids_to_ignore[@]}"; do | 
					
						
							|  |  |  |   echo -e "\e[32m    $uuid\e[0m" | 
					
						
							|  |  |  | done |