Skip to content

Instantly share code, notes, and snippets.

@m1stadev
Last active August 16, 2021 21:25
Show Gist options
  • Save m1stadev/93ccb59d7f5d4285af8a663c8de02aaa to your computer and use it in GitHub Desktop.
Save m1stadev/93ccb59d7f5d4285af8a663c8de02aaa to your computer and use it in GitHub Desktop.
Quick script I wrote to easily get the download link to an IPSW for an iOS device with an iOS version/buildid + device identifier
#!/usr/bin/env python3
import argparse
import requests
import sys
class IPSW:
def __init__(self, device, version=None, buildid=None):
self.device = device
self.version = version
self.api = self.get_api()
if buildid is not None:
self.version = self.buildid_to_version()
self.ipsw_url = self.get_ipsw()
def get_api(self): return requests.get(f'https://api.ipsw.me/v4/device/{self.device}?type=ipsw').json()
def get_ipsw(self): return next(self.api['firmwares'][x]['url'] for x in range(len(self.api['firmwares'])) if self.api['firmwares'][x]['version'] == self.version)
def buildid_to_version(self): return next(self.api['firmwares'][x]['version'] for x in range(len(self.api['firmwares'])) if self.api['firmwares'][x]['buildid'] == self.buildid)
def main():
parser = argparse.ArgumentParser(description='IPSW-DL - Easily download iOS IPSWs', usage="ipsw-dl -d 'device' -i 'iOS version' -b 'buildid'")
parser.add_argument('-d', '--device', help='Device identifier', nargs=1)
parser.add_argument('-i', '--version', help='iOS Version', nargs=1)
parser.add_argument('-b', '--buildid', help='iOS Build ID', nargs=1)
args = parser.parse_args()
if not args.device:
sys.exit(parser.print_help(sys.stderr))
if not args.buildid:
ipsw_info = IPSW(args.device[0], version=args.version[0])
elif not args.version:
ipsw_info = IPSW(args.device[0], buildid=args.buildid[0])
else:
sys.exit(parser.print_help(sys.stderr))
print(f'IPSW URL for device {args.device[0]}, iOS {ipsw_info.version}: {ipsw_info.ipsw_url}')
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment