diff --git a/.github/workflows/scripts/update-ios-releases.py b/.github/workflows/scripts/update-ios-releases.py new file mode 100644 index 0000000..83b002c --- /dev/null +++ b/.github/workflows/scripts/update-ios-releases.py @@ -0,0 +1,79 @@ +""" +Python script to download the Apple RSS feed and parse it. +""" + +import os +import json +import urllib.request +from xml.dom.minidom import parseString + +from packaging import version + + +def download_apple_rss(feed_url): + with urllib.request.urlopen(feed_url) as f: + rss_feed = f.read().decode('utf-8') + print("Downloaded RSS feed from Apple.") + return rss_feed + + +def parse_latest_ios_versions(rss_feed_text): + latest_ios_versions = [] + + parsed_feed = parseString(rss_feed_text) + for item in parsed_feed.getElementsByTagName("item"): + title = item.getElementsByTagName("title")[0].firstChild.data + if not title.startswith("iOS"): + continue + + import re + build_match = re.match(r"iOS (?P[\d\.]+) (?Pbeta )?(\S*)?\((?P.*)\)", title) + if not build_match: + print("Could not parse iOS build:", title) + continue + + release_info = build_match.groupdict() + if release_info["beta"]: + print("Skipping beta release:", title) + continue + + latest_ios_versions.append(release_info) + + return latest_ios_versions + + +def update_mvt(mvt_checkout_path, latest_ios_versions): + version_path = os.path.join(mvt_checkout_path, "mvt/ios/data/ios_versions.json") + with open(version_path, "r") as version_file: + current_versions = json.load(version_file) + + new_entry_count = 0 + for new_version in latest_ios_versions: + for current_version in current_versions: + if new_version["build"] == current_version["build"]: + break + else: + # New version that does not exist in current data + current_versions.append(new_version) + new_entry_count += 1 + + if not new_entry_count: + print("No new iOS versions found.") + else: + print("Found {} new iOS versions.".format(new_entry_count)) + new_version_list = sorted(current_versions, key=lambda x: version.Version(x["version"])) + with open(version_path, "w") as version_file: + json.dump(new_version_list, version_file, indent=4) + + +def main(): + print("Downloading RSS feed...") + mvt_checkout_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../")) + + rss_feed = download_apple_rss("https://developer.apple.com/news/releases/rss/releases.rss") + latest_ios_version = parse_latest_ios_versions(rss_feed) + update_mvt(mvt_checkout_path, latest_ios_version) + + +if __name__ == "__main__": + main() diff --git a/.github/workflows/update-ios-data.yml b/.github/workflows/update-ios-data.yml new file mode 100644 index 0000000..d3c411a --- /dev/null +++ b/.github/workflows/update-ios-data.yml @@ -0,0 +1,25 @@ +name: update-ios-releases +run-name: ${{ github.actor }} is finding the latest iOS release version and build numbers +on: + schedule: + # * is a special character in YAML so you have to quote this string + - cron: '0 */6 * * *' + + +jobs: + update-ios-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + - name: Run script to fetch latest iOS releases from Apple RSS feed. + run: python3 mvt/.github/workflows/scripts/update-ios-releases.py + - name: Create Pull Request + uses: peter-evans/create-pull-request@v5 + with: + title: '[auto] Update MVT with latest iOS releases and versions' + commit-message: Add new iOS versions and build numbers + add-paths: | + *.json + labels: | + automated pr \ No newline at end of file diff --git a/mvt/ios/data/ios_models.json b/mvt/ios/data/ios_models.json new file mode 100644 index 0000000..83f6650 --- /dev/null +++ b/mvt/ios/data/ios_models.json @@ -0,0 +1,166 @@ +[ + { + "identifier": "iPhone4,1", + "description": "iPhone 4S" + }, + { + "identifier": "iPhone5,1", + "description": "iPhone 5" + }, + { + "identifier": "iPhone5,2", + "description": "iPhone 5" + }, + { + "identifier": "iPhone5,3", + "description": "iPhone 5c" + }, + { + "identifier": "iPhone5,4", + "description": "iPhone 5c" + }, + { + "identifier": "iPhone6,1", + "description": "iPhone 5s" + }, + { + "identifier": "iPhone6,2", + "description": "iPhone 5s" + }, + { + "identifier": "iPhone7,1", + "description": "iPhone 6 Plus" + }, + { + "identifier": "iPhone7,2", + "description": "iPhone 6" + }, + { + "identifier": "iPhone8,1", + "description": "iPhone 6s" + }, + { + "identifier": "iPhone8,2", + "description": "iPhone 6s Plus" + }, + { + "identifier": "iPhone8,4", + "description": "iPhone SE (1st generation)" + }, + { + "identifier": "iPhone9,1", + "description": "iPhone 7" + }, + { + "identifier": "iPhone9,2", + "description": "iPhone 7 Plus" + }, + { + "identifier": "iPhone9,3", + "description": "iPhone 7" + }, + { + "identifier": "iPhone9,4", + "description": "iPhone 7 Plus" + }, + { + "identifier": "iPhone10,1", + "description": "iPhone 8" + }, + { + "identifier": "iPhone10,2", + "description": "iPhone 8 Plus" + }, + { + "identifier": "iPhone10,3", + "description": "iPhone X" + }, + { + "identifier": "iPhone10,4", + "description": "iPhone 8" + }, + { + "identifier": "iPhone10,5", + "description": "iPhone 8 Plus" + }, + { + "identifier": "iPhone10,6", + "description": "iPhone X" + }, + { + "identifier": "iPhone11,2", + "description": "iPhone XS" + }, + { + "identifier": "iPhone11,4", + "description": "iPhone XS Max" + }, + { + "identifier": "iPhone11,6", + "description": "iPhone XS Max" + }, + { + "identifier": "iPhone11,8", + "description": "iPhone XR" + }, + { + "identifier": "iPhone12,1", + "description": "iPhone 11" + }, + { + "identifier": "iPhone12,3", + "description": "iPhone 11 Pro" + }, + { + "identifier": "iPhone12,5", + "description": "iPhone 11 Pro Max" + }, + { + "identifier": "iPhone12,8", + "description": "iPhone SE (2nd generation)" + }, + { + "identifier": "iPhone13,1", + "description": "iPhone 12 mini" + }, + { + "identifier": "iPhone13,2", + "description": "iPhone 12" + }, + { + "identifier": "iPhone13,3", + "description": "iPhone 12 Pro" + }, + { + "identifier": "iPhone13,4", + "description": "iPhone 12 Pro Max" + }, + { + "identifier": "iPhone14,4", + "description": "iPhone 13 Mini" + }, + { + "identifier": "iPhone14,5", + "description": "iPhone 13" + }, + { + "identifier": "iPhone14,2", + "description": "iPhone 13 Pro" + }, + { + "identifier": "iPhone14,3", + "description": "iPhone 13 Pro Max" + }, + { + "identifier": "iPhone14,8", + "decription": "iPhone 14 Plus" + }, + { + "identifier": "iPhone15,2", + "description": "iPhone 14 Pro" + }, + { + "identifier": "iPhone15,3", + "description": "iPhone 14 Pro Max" + } +] \ No newline at end of file diff --git a/mvt/ios/data/ios_versions.json b/mvt/ios/data/ios_versions.json new file mode 100644 index 0000000..3a5925e --- /dev/null +++ b/mvt/ios/data/ios_versions.json @@ -0,0 +1,895 @@ +[ + { + "build": "1A543a", + "version": "1.0" + }, + { + "build": "1C25", + "version": "1.0.1" + }, + { + "build": "1C28", + "version": "1.0.2" + }, + { + "build": "3A109a", + "version": "1.1.1" + }, + { + "build": "3B48b", + "version": "1.1.2" + }, + { + "build": "4A93", + "version": "1.1.3" + }, + { + "build": "4A102", + "version": "1.1.4" + }, + { + "build": "5A347", + "version": "2.0" + }, + { + "build": "5B108", + "version": "2.0.1" + }, + { + "build": "5C1", + "version": "2.0.2" + }, + { + "build": "5F136", + "version": "2.1" + }, + { + "build": "5G77", + "version": "2.2" + }, + { + "build": "5H11", + "version": "2.2.1" + }, + { + "build": "7A341", + "version": "3.0" + }, + { + "build": "7A400", + "version": "3.0.1" + }, + { + "build": "7C144", + "version": "3.1" + }, + { + "build": "7D11", + "version": "3.1.2" + }, + { + "build": "7E18", + "version": "3.1.3" + }, + { + "build": "8A293", + "version": "4.0" + }, + { + "build": "8A306", + "version": "4.0.1" + }, + { + "build": "8B117", + "version": "4.1" + }, + { + "build": "8C148", + "version": "4.2" + }, + { + "build": "8C148a", + "version": "4.2.1" + }, + { + "build": "8C148", + "version": "4.2.1" + }, + { + "build": "8E401", + "version": "4.2.8" + }, + { + "build": "8E501", + "version": "4.2.9" + }, + { + "build": "8E600", + "version": "4.2.10" + }, + { + "build": "8F190", + "version": "4.3" + }, + { + "build": "8J2", + "version": "4.3.3" + }, + { + "build": "8K2", + "version": "4.3.4" + }, + { + "build": "8L1", + "version": "4.3.5" + }, + { + "build": "9A334", + "version": "5.0" + }, + { + "build": "9A405", + "version": "5.0.1" + }, + { + "build": "9A406", + "version": "5.0.1" + }, + { + "build": "9B176", + "version": "5.1" + }, + { + "build": "9B179", + "version": "5.1" + }, + { + "build": "9B206", + "version": "5.1.1" + }, + { + "build": "9B208", + "version": "5.1.1" + }, + { + "build": "10A403", + "version": "6.0" + }, + { + "build": "10A405", + "version": "6.0" + }, + { + "build": "10A523", + "version": "6.0.1" + }, + { + "build": "10A525", + "version": "6.0.1" + }, + { + "build": "10A551", + "version": "6.0.2" + }, + { + "build": "10B141", + "version": "6.1" + }, + { + "build": "10B144", + "version": "6.1" + }, + { + "build": "10B142", + "version": "6.1" + }, + { + "build": "10B143", + "version": "6.1" + }, + { + "build": "10B145", + "version": "6.1.1" + }, + { + "build": "10B146", + "version": "6.1.2" + }, + { + "build": "10B329", + "version": "6.1.3" + }, + { + "build": "10B350", + "version": "6.1.4" + }, + { + "build": "10B500", + "version": "6.1.6" + }, + { + "build": "11B511", + "version": "7.0.3" + }, + { + "build": "11B554a", + "version": "7.0.4" + }, + { + "build": "11B601", + "version": "7.0.5" + }, + { + "build": "11B651", + "version": "7.0.6" + }, + { + "build": "11D169", + "version": "7.1" + }, + { + "build": "11D167", + "version": "7.1" + }, + { + "build": "11D201", + "version": "7.1.1" + }, + { + "build": "11D257", + "version": "7.1.2" + }, + { + "build": "12A365", + "version": "8.0" + }, + { + "build": "12A366", + "version": "8.0" + }, + { + "build": "12A402", + "version": "8.0.1" + }, + { + "build": "12A405", + "version": "8.0.2" + }, + { + "build": "12B411", + "version": "8.1" + }, + { + "build": "12B435", + "version": "8.1.1" + }, + { + "build": "12B436", + "version": "8.1.1" + }, + { + "build": "12B440", + "version": "8.1.2" + }, + { + "build": "12B466", + "version": "8.1.3" + }, + { + "build": "12D508", + "version": "8.2" + }, + { + "build": "12F70", + "version": "8.3" + }, + { + "build": "12H143", + "version": "8.4" + }, + { + "build": "12H321", + "version": "8.4.1" + }, + { + "build": "13A344", + "version": "9.0" + }, + { + "build": "13A342", + "version": "9.0" + }, + { + "build": "13A343", + "version": "9.0" + }, + { + "build": "13A404", + "version": "9.0.1" + }, + { + "build": "13A405", + "version": "9.0.1" + }, + { + "build": "13A452", + "version": "9.0.2" + }, + { + "build": "13B143", + "version": "9.1" + }, + { + "build": "13C75", + "version": "9.2" + }, + { + "build": "13D15", + "version": "9.2.1" + }, + { + "build": "13D20", + "version": "9.2.1" + }, + { + "build": "13E237", + "version": "9.3" + }, + { + "build": "13E233", + "version": "9.3" + }, + { + "build": "13E234", + "version": "9.3" + }, + { + "build": "13E238", + "version": "9.3.1" + }, + { + "build": "13F69", + "version": "9.3.2" + }, + { + "build": "13G34", + "version": "9.3.3" + }, + { + "build": "13G35", + "version": "9.3.4" + }, + { + "build": "13G36", + "version": "9.3.5" + }, + { + "build": "13G37", + "version": "9.3.6" + }, + { + "build": "14A403", + "version": "10.0.1" + }, + { + "build": "14A456", + "version": "10.0.2" + }, + { + "build": "14A551", + "version": "10.0.3" + }, + { + "build": "14B72", + "version": "10.1" + }, + { + "build": "14B72c", + "version": "10.1" + }, + { + "build": "14B150", + "version": "10.1.1" + }, + { + "build": "14B100", + "version": "10.1.1" + }, + { + "build": "14C92", + "version": "10.2" + }, + { + "build": "14D27", + "version": "10.2.1" + }, + { + "build": "14E277", + "version": "10.3" + }, + { + "build": "14E304", + "version": "10.3.1" + }, + { + "build": "14F89", + "version": "10.3.2" + }, + { + "build": "14G60", + "version": "10.3.3" + }, + { + "build": "14G61", + "version": "10.3.4" + }, + { + "build": "15A372", + "version": "11.0" + }, + { + "build": "15A402", + "version": "11.0.1" + }, + { + "build": "15A421", + "version": "11.0.2" + }, + { + "build": "15A432", + "version": "11.0.3" + }, + { + "build": "15B93", + "version": "11.1" + }, + { + "build": "15B150", + "version": "11.1.1" + }, + { + "build": "15B202", + "version": "11.1.2" + }, + { + "build": "15C114", + "version": "11.2" + }, + { + "build": "15C153", + "version": "11.2.1" + }, + { + "build": "15C202", + "version": "11.2.2" + }, + { + "build": "15D60", + "version": "11.2.5" + }, + { + "build": "15D100", + "version": "11.2.6" + }, + { + "build": "15E216", + "version": "11.3" + }, + { + "build": "15E302", + "version": "11.3.1" + }, + { + "build": "15F79", + "version": "11.4" + }, + { + "build": "15G77", + "version": "11.4.1" + }, + { + "build": "16A366", + "version": "12.0" + }, + { + "build": "16A367", + "version": "12.0" + }, + { + "build": "16A404", + "version": "12.0.1" + }, + { + "build": "16A405", + "version": "12.0.1" + }, + { + "build": "16B92", + "version": "12.1" + }, + { + "build": "16B94", + "version": "12.1" + }, + { + "build": "16B93", + "version": "12.1" + }, + { + "build": "16C50", + "version": "12.1.1" + }, + { + "build": "16C104", + "version": "12.1.2" + }, + { + "build": "16C101", + "version": "12.1.2" + }, + { + "build": "16D39", + "version": "12.1.3" + }, + { + "build": "16D40", + "version": "12.1.3" + }, + { + "build": "16D57", + "version": "12.1.4" + }, + { + "build": "16E227", + "version": "12.2" + }, + { + "build": "16F156", + "version": "12.3" + }, + { + "build": "16F203", + "version": "12.3.1" + }, + { + "build": "16F250", + "version": "12.3.2" + }, + { + "build": "16G77", + "version": "12.4" + }, + { + "build": "16G102", + "version": "12.4.1" + }, + { + "build": "16G114", + "version": "12.4.2" + }, + { + "build": "16G130", + "version": "12.4.3" + }, + { + "build": "16G140", + "version": "12.4.4" + }, + { + "build": "16G161", + "version": "12.4.5" + }, + { + "build": "16G183", + "version": "12.4.6" + }, + { + "build": "16G192", + "version": "12.4.7" + }, + { + "build": "16G201", + "version": "12.4.8" + }, + { + "build": "16H5", + "version": "12.4.9" + }, + { + "build": "16H20", + "version": "12.5" + }, + { + "build": "16H22", + "version": "12.5.1" + }, + { + "build": "16H30", + "version": "12.5.2" + }, + { + "build": "16H41", + "version": "12.5.3" + }, + { + "build": "16H50", + "version": "12.5.4" + }, + { + "build": "16H62", + "version": "12.5.5" + }, + { + "build": "16H71", + "version": "12.5.6" + }, + { + "build": "16H81", + "version": "12.5.7" + }, + { + "build": "17A577", + "version": "13.0" + }, + { + "build": "17A844", + "version": "13.1" + }, + { + "build": "17A854", + "version": "13.1.1" + }, + { + "build": "17A860", + "version": "13.1.2" + }, + { + "build": "17A861", + "version": "13.1.2" + }, + { + "build": "17A878", + "version": "13.1.3" + }, + { + "build": "17B84", + "version": "13.2" + }, + { + "build": "17B102", + "version": "13.2.2" + }, + { + "build": "17B111", + "version": "13.2.3" + }, + { + "build": "17C54", + "version": "13.3" + }, + { + "build": "17D50", + "version": "13.3.1" + }, + { + "build": "17E255", + "version": "13.4" + }, + { + "build": "17E8255", + "version": "13.4" + }, + { + "build": "17E262", + "version": "13.4.1" + }, + { + "build": "17E8258", + "version": "13.4.1" + }, + { + "build": "17F75", + "version": "13.5" + }, + { + "build": "17F80", + "version": "13.5.1" + }, + { + "build": "17G68", + "version": "13.6" + }, + { + "build": "17G80", + "version": "13.6.1" + }, + { + "build": "17H35", + "version": "13.7" + }, + { + "build": "18A373", + "version": "14.0" + }, + { + "build": "18A393", + "version": "14.0.1" + }, + { + "build": "18A8395", + "version": "14.1" + }, + { + "build": "18B92", + "version": "14.2" + }, + { + "build": "18C66", + "version": "14.3" + }, + { + "build": "18D52", + "version": "14.4" + }, + { + "build": "18D61", + "version": "14.4.1" + }, + { + "build": "18D70", + "version": "14.4.2" + }, + { + "build": "18E199", + "version": "14.5" + }, + { + "build": "18E212", + "version": "14.5.1" + }, + { + "build": "18F72", + "version": "14.6" + }, + { + "build": "18G69", + "version": "14.7" + }, + { + "build": "18G82", + "version": "14.7.1" + }, + { + "build": "18H17", + "version": "14.8" + }, + { + "build": "18H107", + "version": "14.8.1" + }, + { + "build": "19A341", + "version": "15.0" + }, + { + "build": "19A346", + "version": "15.0" + }, + { + "build": "19A348", + "version": "15.0.1" + }, + { + "build": "19A404", + "version": "15.0.2" + }, + { + "build": "19B74", + "version": "15.1" + }, + { + "build": "19B81", + "version": "15.1.1" + }, + { + "build": "19C56", + "version": "15.2" + }, + { + "build": "19C63", + "version": "15.2.1" + }, + { + "build": "19D50", + "version": "15.3" + }, + { + "build": "19D52", + "version": "15.3.1" + }, + { + "build": "19E241", + "version": "15.4" + }, + { + "build": "19E258", + "version": "15.4.1" + }, + { + "build": "19F77", + "version": "15.5" + }, + { + "build": "19G71", + "version": "15.6" + }, + { + "build": "19G82", + "version": "15.6.1" + }, + { + "build": "19H12", + "version": "15.7" + }, + { + "build": "19H117", + "version": "15.7.1" + }, + { + "build": "19H218", + "version": "15.7.2" + }, + { + "build": "20A362", + "version": "16.0" + }, + { + "build": "20A371", + "version": "16.0.1" + }, + { + "build": "20A380", + "version": "16.0.2" + }, + { + "build": "20A392", + "version": "16.0.3" + }, + { + "build": "20B82", + "version": "16.1" + }, + { + "build": "20B101", + "version": "16.1.1" + }, + { + "build": "20B110", + "version": "16.1.2" + }, + { + "build": "20C65", + "version": "16.2" + }, + { + "build": "20D47", + "version": "16.3" + }, + { + "build": "20D67", + "version": "16.3.1" + }, + { + "build": "20E247", + "version": "16.4" + }, + { + "build": "20E252", + "version": "16.4.1" + }, + { + "version": "16.5", + "beta": null, + "build": "20F66" + } +] \ No newline at end of file diff --git a/mvt/ios/versions.py b/mvt/ios/versions.py index 6818e29..6bd9cd6 100644 --- a/mvt/ios/versions.py +++ b/mvt/ios/versions.py @@ -2,280 +2,16 @@ # Copyright (c) 2021-2023 Claudio Guarnieri. # Use of this software is governed by the MVT License 1.1 that can be found at # https://license.mvt.re/1.1/ +import json from logging import Logger from typing import Dict, Optional import packaging +import pkgutil -IPHONE_MODELS = [ - {"identifier": "iPhone4,1", "description": "iPhone 4S"}, - {"identifier": "iPhone5,1", "description": "iPhone 5"}, - {"identifier": "iPhone5,2", "description": "iPhone 5"}, - {"identifier": "iPhone5,3", "description": "iPhone 5c"}, - {"identifier": "iPhone5,4", "description": "iPhone 5c"}, - {"identifier": "iPhone6,1", "description": "iPhone 5s"}, - {"identifier": "iPhone6,2", "description": "iPhone 5s"}, - {"identifier": "iPhone7,1", "description": "iPhone 6 Plus"}, - {"identifier": "iPhone7,2", "description": "iPhone 6"}, - {"identifier": "iPhone8,1", "description": "iPhone 6s"}, - {"identifier": "iPhone8,2", "description": "iPhone 6s Plus"}, - {"identifier": "iPhone8,4", "description": "iPhone SE (1st generation)"}, - {"identifier": "iPhone9,1", "description": "iPhone 7"}, - {"identifier": "iPhone9,2", "description": "iPhone 7 Plus"}, - {"identifier": "iPhone9,3", "description": "iPhone 7"}, - {"identifier": "iPhone9,4", "description": "iPhone 7 Plus"}, - {"identifier": "iPhone10,1", "description": "iPhone 8"}, - {"identifier": "iPhone10,2", "description": "iPhone 8 Plus"}, - {"identifier": "iPhone10,3", "description": "iPhone X"}, - {"identifier": "iPhone10,4", "description": "iPhone 8"}, - {"identifier": "iPhone10,5", "description": "iPhone 8 Plus"}, - {"identifier": "iPhone10,6", "description": "iPhone X"}, - {"identifier": "iPhone11,2", "description": "iPhone XS"}, - {"identifier": "iPhone11,4", "description": "iPhone XS Max"}, - {"identifier": "iPhone11,6", "description": "iPhone XS Max"}, - {"identifier": "iPhone11,8", "description": "iPhone XR"}, - {"identifier": "iPhone12,1", "description": "iPhone 11"}, - {"identifier": "iPhone12,3", "description": "iPhone 11 Pro"}, - {"identifier": "iPhone12,5", "description": "iPhone 11 Pro Max"}, - {"identifier": "iPhone12,8", "description": "iPhone SE (2nd generation)"}, - {"identifier": "iPhone13,1", "description": "iPhone 12 mini"}, - {"identifier": "iPhone13,2", "description": "iPhone 12"}, - {"identifier": "iPhone13,3", "description": "iPhone 12 Pro"}, - {"identifier": "iPhone13,4", "description": "iPhone 12 Pro Max"}, - {"identifier": "iPhone14,4", "description": "iPhone 13 Mini"}, - {"identifier": "iPhone14,5", "description": "iPhone 13"}, - {"identifier": "iPhone14,2", "description": "iPhone 13 Pro"}, - {"identifier": "iPhone14,3", "description": "iPhone 13 Pro Max"}, - {"identifier": "iPhone14,8", "decription": "iPhone 14 Plus"}, - {"identifier": "iPhone15,2", "description": "iPhone 14 Pro"}, - {"identifier": "iPhone15,3", "description": "iPhone 14 Pro Max"} -] -IPHONE_IOS_VERSIONS = [ - {"build": "1A543a", "version": "1.0"}, - {"build": "1C25", "version": "1.0.1"}, - {"build": "1C28", "version": "1.0.2"}, - {"build": "3A109a", "version": "1.1.1"}, - {"build": "3B48b", "version": "1.1.2"}, - {"build": "4A93", "version": "1.1.3"}, - {"build": "4A102", "version": "1.1.4"}, - {"build": "5A347", "version": "2.0"}, - {"build": "5B108", "version": "2.0.1"}, - {"build": "5C1", "version": "2.0.2"}, - {"build": "5F136", "version": "2.1"}, - {"build": "5G77", "version": "2.2"}, - {"build": "5H11", "version": "2.2.1"}, - {"build": "7A341", "version": "3.0"}, - {"build": "7A400", "version": "3.0.1"}, - {"build": "7C144", "version": "3.1"}, - {"build": "7D11", "version": "3.1.2"}, - {"build": "7E18", "version": "3.1.3"}, - {"build": "8A293", "version": "4.0"}, - {"build": "8A306", "version": "4.0.1"}, - {"build": "8B117", "version": "4.1"}, - {"build": "8C148", "version": "4.2"}, - {"build": "8C148a", "version": "4.2.1"}, - {"build": "8C148", "version": "4.2.1"}, - {"build": "8E600", "version": "4.2.10"}, - {"build": "8E401", "version": "4.2.8"}, - {"build": "8E501", "version": "4.2.9"}, - {"build": "8F190", "version": "4.3"}, - {"build": "8J2", "version": "4.3.3"}, - {"build": "8K2", "version": "4.3.4"}, - {"build": "8L1", "version": "4.3.5"}, - {"build": "9A334", "version": "5.0"}, - {"build": "9A405", "version": "5.0.1"}, - {"build": "9A406", "version": "5.0.1"}, - {"build": "9B176", "version": "5.1"}, - {"build": "9B179", "version": "5.1"}, - {"build": "9B206", "version": "5.1.1"}, - {"build": "9B208", "version": "5.1.1"}, - {"build": "10A403", "version": "6.0"}, - {"build": "10A405", "version": "6.0"}, - {"build": "10A523", "version": "6.0.1"}, - {"build": "10A525", "version": "6.0.1"}, - {"build": "10A551", "version": "6.0.2"}, - {"build": "10B141", "version": "6.1"}, - {"build": "10B144", "version": "6.1"}, - {"build": "10B142", "version": "6.1"}, - {"build": "10B143", "version": "6.1"}, - {"build": "10B145", "version": "6.1.1"}, - {"build": "10B146", "version": "6.1.2"}, - {"build": "10B329", "version": "6.1.3"}, - {"build": "10B350", "version": "6.1.4"}, - {"build": "10B500", "version": "6.1.6"}, - {"build": "11B511", "version": "7.0.3"}, - {"build": "11B554a", "version": "7.0.4"}, - {"build": "11B601", "version": "7.0.5"}, - {"build": "11B651", "version": "7.0.6"}, - {"build": "11D169", "version": "7.1"}, - {"build": "11D167", "version": "7.1"}, - {"build": "11D201", "version": "7.1.1"}, - {"build": "11D257", "version": "7.1.2"}, - {"build": "12A365", "version": "8.0"}, - {"build": "12A366", "version": "8.0"}, - {"build": "12A402", "version": "8.0.1"}, - {"build": "12A405", "version": "8.0.2"}, - {"build": "12B411", "version": "8.1"}, - {"build": "12B435", "version": "8.1.1"}, - {"build": "12B436", "version": "8.1.1"}, - {"build": "12B440", "version": "8.1.2"}, - {"build": "12B466", "version": "8.1.3"}, - {"build": "12D508", "version": "8.2"}, - {"build": "12F70", "version": "8.3"}, - {"build": "12H143", "version": "8.4"}, - {"build": "12H321", "version": "8.4.1"}, - {"build": "13A344", "version": "9.0"}, - {"build": "13A342", "version": "9.0"}, - {"build": "13A343", "version": "9.0"}, - {"build": "13A404", "version": "9.0.1"}, - {"build": "13A405", "version": "9.0.1"}, - {"build": "13A452", "version": "9.0.2"}, - {"build": "13B143", "version": "9.1"}, - {"build": "13C75", "version": "9.2"}, - {"build": "13D15", "version": "9.2.1"}, - {"build": "13D20", "version": "9.2.1"}, - {"build": "13E237", "version": "9.3"}, - {"build": "13E233", "version": "9.3"}, - {"build": "13E234", "version": "9.3"}, - {"build": "13E238", "version": "9.3.1"}, - {"build": "13F69", "version": "9.3.2"}, - {"build": "13G34", "version": "9.3.3"}, - {"build": "13G35", "version": "9.3.4"}, - {"build": "13G36", "version": "9.3.5"}, - {"build": "13G37", "version": "9.3.6"}, - {"build": "14A403", "version": "10.0.1"}, - {"build": "14A456", "version": "10.0.2"}, - {"build": "14A551", "version": "10.0.3"}, - {"build": "14B72", "version": "10.1"}, - {"build": "14B72c", "version": "10.1"}, - {"build": "14B150", "version": "10.1.1"}, - {"build": "14B100", "version": "10.1.1"}, - {"build": "14C92", "version": "10.2"}, - {"build": "14D27", "version": "10.2.1"}, - {"build": "14E277", "version": "10.3"}, - {"build": "14E304", "version": "10.3.1"}, - {"build": "14F89", "version": "10.3.2"}, - {"build": "14G60", "version": "10.3.3"}, - {"build": "14G61", "version": "10.3.4"}, - {"build": "15A372", "version": "11.0"}, - {"build": "15A402", "version": "11.0.1"}, - {"build": "15A421", "version": "11.0.2"}, - {"build": "15A432", "version": "11.0.3"}, - {"build": "15B93", "version": "11.1"}, - {"build": "15B150", "version": "11.1.1"}, - {"build": "15B202", "version": "11.1.2"}, - {"build": "15C114", "version": "11.2"}, - {"build": "15C153", "version": "11.2.1"}, - {"build": "15C202", "version": "11.2.2"}, - {"build": "15D60", "version": "11.2.5"}, - {"build": "15D100", "version": "11.2.6"}, - {"build": "15E216", "version": "11.3"}, - {"build": "15E302", "version": "11.3.1"}, - {"build": "15F79", "version": "11.4"}, - {"build": "15G77", "version": "11.4.1"}, - {"build": "16A366", "version": "12.0"}, - {"build": "16A367", "version": "12.0"}, - {"build": "16A404", "version": "12.0.1"}, - {"build": "16A405", "version": "12.0.1"}, - {"build": "16B92", "version": "12.1"}, - {"build": "16B94", "version": "12.1"}, - {"build": "16B93", "version": "12.1"}, - {"build": "16C50", "version": "12.1.1"}, - {"build": "16C104", "version": "12.1.2"}, - {"build": "16C101", "version": "12.1.2"}, - {"build": "16D39", "version": "12.1.3"}, - {"build": "16D40", "version": "12.1.3"}, - {"build": "16D57", "version": "12.1.4"}, - {"build": "16E227", "version": "12.2"}, - {"build": "16F156", "version": "12.3"}, - {"build": "16F203", "version": "12.3.1"}, - {"build": "16F250", "version": "12.3.2"}, - {"build": "16G77", "version": "12.4"}, - {"build": "16G102", "version": "12.4.1"}, - {"build": "16G114", "version": "12.4.2"}, - {"build": "16G130", "version": "12.4.3"}, - {"build": "16G140", "version": "12.4.4"}, - {"build": "16G161", "version": "12.4.5"}, - {"build": "16G183", "version": "12.4.6"}, - {"build": "16G192", "version": "12.4.7"}, - {"build": "16G201", "version": "12.4.8"}, - {"build": "16H5", "version": "12.4.9"}, - {"build": "16H20", "version": "12.5"}, - {"build": "16H22", "version": "12.5.1"}, - {"build": "16H30", "version": "12.5.2"}, - {"build": "16H41", "version": "12.5.3"}, - {"build": "16H50", "version": "12.5.4"}, - {"build": "16H62", "version": "12.5.5"}, - {"build": "16H71", "version": "12.5.6"}, - {"build": "16H81", "version": "12.5.7"}, - {"build": "17A577", "version": "13.0"}, - {"build": "17A844", "version": "13.1"}, - {"build": "17A854", "version": "13.1.1"}, - {"build": "17A860", "version": "13.1.2"}, - {"build": "17A861", "version": "13.1.2"}, - {"build": "17A878", "version": "13.1.3"}, - {"build": "17B84", "version": "13.2"}, - {"build": "17B102", "version": "13.2.2"}, - {"build": "17B111", "version": "13.2.3"}, - {"build": "17C54", "version": "13.3"}, - {"build": "17D50", "version": "13.3.1"}, - {"build": "17E255", "version": "13.4"}, - {"build": "17E8255", "version": "13.4"}, - {"build": "17E262", "version": "13.4.1"}, - {"build": "17E8258", "version": "13.4.1"}, - {"build": "17F75", "version": "13.5"}, - {"build": "17F80", "version": "13.5.1"}, - {"build": "17G68", "version": "13.6"}, - {"build": "17G80", "version": "13.6.1"}, - {"build": "17H35", "version": "13.7"}, - {"build": "18A373", "version": "14.0"}, - {"build": "18A393", "version": "14.0.1"}, - {"build": "18A8395", "version": "14.1"}, - {"build": "18B92", "version": "14.2"}, - {"build": "18C66", "version": "14.3"}, - {"build": "18D52", "version": "14.4"}, - {"build": "18D61", "version": "14.4.1"}, - {"build": "18D70", "version": "14.4.2"}, - {"build": "18E199", "version": "14.5"}, - {"build": "18E212", "version": "14.5.1"}, - {"build": "18F72", "version": "14.6"}, - {"build": "18G69", "version": "14.7"}, - {"build": "18G82", "version": "14.7.1"}, - {"build": "18H17", "version": "14.8"}, - {"build": "18H107", "version": "14.8.1"}, - {"build": "19A341", "version": "15.0"}, - {"build": "19A346", "version": "15.0"}, - {"build": "19A348", "version": "15.0.1"}, - {"build": "19A404", "version": "15.0.2"}, - {"build": "19B74", "version": "15.1"}, - {"build": "19B81", "version": "15.1.1"}, - {"build": "19C56", "version": "15.2"}, - {"build": "19C63", "version": "15.2.1"}, - {"build": "19D50", "version": "15.3"}, - {"build": "19D52", "version": "15.3.1"}, - {"build": "19E241", "version": "15.4"}, - {"build": "19E258", "version": "15.4.1"}, - {"build": "19F77", "version": "15.5"}, - {"build": "19G71", "version": "15.6"}, - {"build": "19G82", "version": "15.6.1"}, - {"build": "19H12", "version": "15.7"}, - {"build": "19H117", "version": "15.7.1"}, - {"build": "19H218", "version": "15.7.2"}, - {"build": "20A362", "version": "16.0"}, - {"build": "20A371", "version": "16.0.1"}, - {"build": "20A380", "version": "16.0.2"}, - {"build": "20A392", "version": "16.0.3"}, - {"build": "20B82", "version": "16.1"}, - {"build": "20B101", "version": "16.1.1"}, - {"build": "20B110", "version": "16.1.2"}, - {"build": "20C65", "version": "16.2"}, - {"build": "20D47", "version": "16.3"}, - {"build": "20D67", "version": "16.3.1"}, - {"build": "20E247", "version": "16.4"}, - {"build": "20E252", "version": "16.4.1"}, - {"build": "20F66", "version": "16.5"}, -] +IPHONE_MODELS = json.loads(pkgutil.get_data("mvt", "ios/data/ios_models.json")) +IPHONE_IOS_VERSIONS = json.loads(pkgutil.get_data("mvt", "ios/data/ios_versions.json")) def get_device_desc_from_id(identifier: str, diff --git a/setup.cfg b/setup.cfg index e3181fc..353e5ee 100644 --- a/setup.cfg +++ b/setup.cfg @@ -42,6 +42,9 @@ console_scripts = mvt-ios = mvt.ios:cli mvt-android = mvt.android:cli +[options.package_data] +mvt = ios/data/*.json + [flake8] max-complexity = 10 max-line-length = 1000