Add NoDevice mode and fix some errors

perform operations without an iOS device connected (create custom IPSW for 32-bit devices, and saving OTA blobs)
This commit is contained in:
LukeZGD 2021-11-07 21:29:31 +08:00
parent 920af4bdaf
commit 89d4e13036
3 changed files with 27 additions and 16 deletions

View File

@ -2,7 +2,7 @@
SetToolPaths() { SetToolPaths() {
local Detect="Detected libimobiledevice and libirecovery installed from " local Detect="Detected libimobiledevice and libirecovery installed from "
local MPath="./resources/libimobiledevice_" MPath="./resources/libimobiledevice_"
if [[ $OSTYPE == "linux"* ]]; then if [[ $OSTYPE == "linux"* ]]; then
. /etc/os-release 2>/dev/null . /etc/os-release 2>/dev/null

View File

@ -37,10 +37,13 @@ GetDeviceValues() {
Log "Finding device in Normal mode..." Log "Finding device in Normal mode..."
DeviceState= DeviceState=
ideviceinfo2=$($ideviceinfo -s) ideviceinfo2=$($ideviceinfo -s)
if [[ $? != 0 ]]; then if [[ $? != 0 && $1 != "NoDevice" ]]; then
Log "Finding device in DFU/recovery mode..." Log "Finding device in DFU/recovery mode..."
[[ $platform == "linux" ]] && Echo "* Enter root password of your PC when prompted" [[ $platform == "linux" ]] && Echo "* Enter root password of your PC when prompted"
DeviceState="$($irecovery -q 2>/dev/null | grep -w "MODE" | cut -c 7-)" DeviceState="$($irecovery -q 2>/dev/null | grep -w "MODE" | cut -c 7-)"
elif [[ $1 == "NoDevice" ]]; then
Log "NoDevice argument detected. Skipping device detection"
DeviceState="NoDevice"
elif [[ ! -z $ideviceinfo2 ]]; then elif [[ ! -z $ideviceinfo2 ]]; then
DeviceState="Normal" DeviceState="Normal"
fi fi
@ -50,16 +53,9 @@ GetDeviceValues() {
ProductType=$($irecovery -qv 2>&1 | grep "Connected to iP" | cut -c 14-) ProductType=$($irecovery -qv 2>&1 | grep "Connected to iP" | cut -c 14-)
[[ $(echo $ProductType | cut -c 3) == 'h' ]] && ProdCut=9 [[ $(echo $ProductType | cut -c 3) == 'h' ]] && ProdCut=9
ProductType=$(echo $ProductType | cut -c -$ProdCut) ProductType=$(echo $ProductType | cut -c -$ProdCut)
if [[ ! $ProductType ]]; then
read -p "$(Input 'Enter ProductType (eg. iPad2,1):')" ProductType
fi
UniqueChipID=$((16#$(echo $($irecovery -q | grep "ECID" | cut -c 7-) | cut -c 3-))) UniqueChipID=$((16#$(echo $($irecovery -q | grep "ECID" | cut -c 7-) | cut -c 3-)))
if [[ ! $UniqueChipID || $UniqueChipID == 0 ]]; then
read -p "$(Input 'Enter UniqueChipID (ECID, must be decimal):')" UniqueChipID
fi
ProductVer="Unknown" ProductVer="Unknown"
else elif [[ $DeviceState == "Normal" ]]; then
ProductType=$(echo "$ideviceinfo2" | grep "ProductType" | cut -c 14-) ProductType=$(echo "$ideviceinfo2" | grep "ProductType" | cut -c 14-)
[[ ! $ProductType ]] && ProductType=$($ideviceinfo | grep "ProductType" | cut -c 14-) [[ ! $ProductType ]] && ProductType=$($ideviceinfo | grep "ProductType" | cut -c 14-)
ProductVer=$(echo "$ideviceinfo2" | grep "ProductVer" | cut -c 17-) ProductVer=$(echo "$ideviceinfo2" | grep "ProductVer" | cut -c 17-)
@ -67,13 +63,21 @@ GetDeviceValues() {
UniqueDeviceID=$(echo "$ideviceinfo2" | grep "UniqueDeviceID" | cut -c 17-) UniqueDeviceID=$(echo "$ideviceinfo2" | grep "UniqueDeviceID" | cut -c 17-)
version="(iOS $ProductVer) " version="(iOS $ProductVer) "
fi fi
if [[ ! $DeviceState ]]; then if [[ ! $DeviceState ]]; then
echo -e "\n${Color_R}[Error] No device detected. Please put the device in normal mode before proceeding. ${Color_N}" echo -e "\n${Color_R}[Error] No device detected. Please put the device in normal mode before proceeding. ${Color_N}"
echo "${Color_Y}* Make sure to also trust this computer by selecting \"Trust\" at the pop-up. ${Color_N}" echo "${Color_Y}* Make sure to also trust this computer by selecting \"Trust\" at the pop-up. ${Color_N}"
echo "${Color_Y}* For macOS users, double-check if the device is being detected by iTunes/Finder. ${Color_N}" echo "${Color_Y}* For macOS users, double-check if the device is being detected by iTunes/Finder. ${Color_N}"
echo "${Color_Y}* Recovery or DFU mode is also applicable. For more details regarding alternative methods, read the \"Troubleshooting\" wiki page in GitHub ${Color_N}" echo "${Color_Y}* Recovery or DFU mode is also applicable. For more details regarding alternative methods, read the \"Troubleshooting\" wiki page in GitHub ${Color_N}"
echo "${Color_Y}* To perform operations without an iOS device connected, add NoDevice as an argument. Example: ./restore.sh NoDevice ${Color_N}"
exit 1 exit 1
elif [[ ! -z $DeviceState ]]; then
if [[ ! $ProductType ]]; then
read -p "$(Input 'Enter ProductType (eg. iPad2,1):')" ProductType
fi
if [[ ! $UniqueChipID || $UniqueChipID == 0 ]]; then
read -p "$(Input 'Enter UniqueChipID (ECID, must be decimal):')" UniqueChipID
fi
fi fi
Firmware=resources/firmware/$ProductType Firmware=resources/firmware/$ProductType

View File

@ -44,6 +44,7 @@ Log() {
} }
Main() { Main() {
local Selection=()
local SkipMainMenu local SkipMainMenu
clear clear
@ -71,7 +72,7 @@ Main() {
chmod +x ./resources/*.sh ./resources/tools/* chmod +x ./resources/*.sh ./resources/tools/*
if [[ $? != 0 ]]; then if [[ $? != 0 ]]; then
Log "Warning - An error occurred in chmod. This might cause problems..." Error "A problem with file permissions has been detected, cannot proceed."
fi fi
Log "Checking Internet connection..." Log "Checking Internet connection..."
@ -93,19 +94,25 @@ Main() {
SaveExternal LukeZGD ipwndfu SaveExternal LukeZGD ipwndfu
GetDeviceValues GetDeviceValues $1
Clean Clean
mkdir tmp mkdir tmp
[[ ! -z $1 ]] && SkipMainMenu=1 [[ ! -z $1 ]] && SkipMainMenu=1
if [[ $SkipMainMenu == 1 && $1 != "NoColor" ]]; then if [[ $SkipMainMenu == 1 && $1 != "NoColor" && $1 != "NoDevice" ]]; then
Mode="$1" Mode="$1"
else else
Selection=("Downgrade Device" "Save OTA Blobs") if [[ $1 != "NoDevice" ]]; then
Selection+=("Downgrade Device")
fi
Selection+=("Save OTA Blobs")
if [[ $DeviceProc != 7 ]] && [[ $DeviceState == "Normal" || $1 == "NoDevice" ]]; then
Selection+=("Create Custom IPSW")
fi
if [[ $DeviceProc != 7 && $DeviceState == "Normal" ]]; then if [[ $DeviceProc != 7 && $DeviceState == "Normal" ]]; then
Selection+=("Create Custom IPSW" "Put Device in kDFU Mode") Selection+=("Put Device in kDFU Mode")
fi fi
Selection+=("(Re-)Install Dependencies" "(Any other key to exit)") Selection+=("(Re-)Install Dependencies" "(Any other key to exit)")
Echo "*** Main Menu ***" Echo "*** Main Menu ***"