Ctrl K
ComunidadGuías…

scripts/select-device.sh

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/bin/bash

# Utility script for iOS and Android Emulators
# ============================================
#
# Purpose:
# --------
# This script helps to start and kill iOS simulators and Android emulators instances.
#
# How this script helps:
# ----------------------
# This script streamlines the process of starting and killing on both android and ios
# platforms.

# Use functions and variables from the utils script
source scripts/shellUtils.sh

launch_simulator_ios() {
  local device_id="$1"
  local active_developer_dir
  active_developer_dir=$(xcode-select -p 2>/dev/null)
  local simulator_app="$active_developer_dir/Applications/Simulator.app"

  if [ -d "$simulator_app" ]; then
    open "$simulator_app" --args -CurrentDeviceUDID "$device_id"
  else
    open "devices://device/open?id=$device_id"
  fi

  xcrun simctl boot "$device_id" 2>/dev/null || true
}

select_device_ios()
{
  # shellcheck disable=SC2124
  IFS="$@" arr=$(xcrun xctrace list devices | grep -E "iPhone|iPad")

  # Create arrays to store device names and identifiers
  device_names=()
  device_identifiers=()

  # Parse the device list and populate the arrays
  while IFS= read -r line; do
    if [[ $line =~ ^(.*)\ \((.*)\)\ \((.*)\)$ ]]; then
      device="${BASH_REMATCH[1]}"
      version="${BASH_REMATCH[2]}"
      identifier="${BASH_REMATCH[3]}"
      device_identifiers+=("$identifier")
      device_names+=("$device Version: $version")
    else
      info "Input does not match the expected pattern."
      echo "$line"
    fi
  done <<< "$arr"
  if [ ${#device_names[@]} -eq 0 ]; then
    error "No devices detected, please create one."
    exit 1
  fi
  if [ ${#device_names[@]} -eq 1 ]; then
    device_identifier="${device_identifiers[0]}"
    success "Single device detected, launching ${device_names[0]}"
    launch_simulator_ios "$device_identifier"
    return
  fi
  info "Multiple devices detected, please select one from the list."
  PS3='Please enter your choice: '
  select device_name in "${device_names[@]}"; do
    if [ -n "$device_name" ]; then
      selected_index=$((REPLY - 1))
      device_name_for_display="${device_names[$selected_index]}"
      device_identifier="${device_identifiers[$selected_index]}"
      break
    else
      echo "Invalid selection. Please choose a device."
  fi
  done
  success "Launching $device_name_for_display"
  launch_simulator_ios "$device_identifier"
}

kill_all_emulators_ios() {
  # kill all the emulators
  killall DeviceHub 2>/dev/null || true
  killall Simulator 2>/dev/null || true
  xcrun simctl shutdown all 2>/dev/null || true
}

restart_adb_server() {
  info "Restarting adb ..."
  adb kill-server
  sleep 2
  adb start-server
  sleep 2
  info "Restarting adb done"
}

ensure_device_available() {
  # Must turn off exit on error temporarily
  set +e
  if adb devices | grep -q offline; then
    restart_adb_server
    if adb devices | grep -q offline; then
      error "Device remains 'offline'.  Please investigate!"
      exit 1
    fi
  fi
  set -e
}

select_device_android()
{
  # shellcheck disable=SC2124
  IFS="$@" arr=$(emulator -list-avds)

  # Create arrays to store device names
  device_names=()

  # Parse the device list and populate the arrays
  while IFS= read -r line; do
    device_names+=("$line")
  done <<< "$arr"
  if [ ${#device_names[@]} -eq 0 ]; then
    error "No devices detected, please create one."
    exit 1
  fi
  if [ ${#device_names[@]} -eq 1 ]; then
    device_identifier="${device_names[0]}"
    success "Single device detected, launching $device_identifier"
    emulator -avd "$device_identifier" -writable-system > /dev/null 2>&1 &
    return
  fi
  info "Multiple devices detected, please select one from the list."
  PS3='Please enter your choice: '
  select device_name in "${device_names[@]}"; do
    if [ -n "$device_name" ]; then
      selected_index=$((REPLY - 1))
      device_identifier="${device_names[$selected_index]}"
      break
    else
      echo "Invalid selection. Please choose a device."
  fi
  done
  success "Launching $device_identifier"
  emulator -avd "$device_identifier" -writable-system > /dev/null 2>&1 &
}

kill_all_emulators_android() {
  # kill all the emulators
  adb devices | grep emulator | cut -f1 | while read -r line; do adb -s "$line" emu kill; done
}