#!/bin/bash # Requires ideviceinfo (libimobiledevice), pzb, curl, jq if [[ "$#" -lt "2" ]]; then echo "Usage: pullipsw [uuid] [version]" exit 0 fi target_uuid="$1" target_version="$2" echo "Finding IPSW for $target_uuid, version $target_version..." device_info=$(ideviceinfo -u $target_uuid) if [[ "$device_info" == ERROR* ]]; then echo "Failed to find device with UUID $target_uuid!" exit 0 fi device_name=$(echo "$device_info" | grep DeviceName | sed 's/DeviceName: //g') product_type=$(echo "$device_info" | grep ProductType | sed 's/ProductType: //g') product_version=$(echo "$device_info" | grep ProductVersion | sed 's/ProductVersion: //g') build_version=$(echo "$device_info" | grep BuildVersion | sed 's/BuildVersion: //g') echo "Device name: $device_name" echo "Product type: $product_type" echo "Product version: $product_version" echo "Build version: $build_version" # Find the buildid from the version number ipsw_url=$(curl https://api.ipsw.me/v4/device/$product_type?type=ipsw 2>/dev/null | jq -r '.firmwares[] | select(.version == "'$target_version'") | .url') echo echo IPSW URL: $ipsw_url echo cd /tmp wget $ipsw_url file_name=$(echo $ipsw_curl | rev | cut -d'/' -f1 | rev) echo "Saved to $file_name."