diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..ae22d88
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,11 @@
+# To get started with Dependabot version updates, you'll need to specify which
+# package ecosystems to update and where the package manifests are located.
+# Please see the documentation for all configuration options:
+# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
+
+version: 2
+updates:
+ - package-ecosystem: "swift" # See documentation for possible values
+ directory: "/" # Location of package manifests
+ schedule:
+ interval: "weekly"
diff --git a/.github/workflows/IPSWDownloads.yml b/.github/workflows/IPSWDownloads.yml
new file mode 100644
index 0000000..d55ca89
--- /dev/null
+++ b/.github/workflows/IPSWDownloads.yml
@@ -0,0 +1,165 @@
+name: IPSWDownloads
+on:
+ push:
+ branches-ignore:
+ - '*WIP'
+
+jobs:
+ build-ubuntu:
+ name: Build on Ubuntu
+ env:
+ PACKAGE_NAME: IPSWDownloads
+ SWIFT_VER: ${{ matrix.swift-version }}
+ runs-on: ${{ matrix.runs-on }}
+ if: "!contains(github.event.head_commit.message, 'ci skip')"
+ strategy:
+ matrix:
+ runs-on: [ubuntu-20.04, ubuntu-22.04]
+ swift-version: [5.9]
+ steps:
+ - uses: actions/checkout@v3
+ - name: Cache swift package modules
+ id: cache-spm-linux
+ uses: actions/cache@v3
+ env:
+ cache-name: SPM
+ with:
+ path: .build
+ key: ${{ env.cache-name }}-${{ runner.os }}-${{ env.SWIFT_VER }}-${{ hashFiles('Package.resolved') }}-${{ env.RELEASE_DOT }}
+ restore-keys: |
+ ${{ env.cache-name }}-${{ runner.os }}-${{ env.SWIFT_VER }}-${{ hashFiles('Package.resolved') }}
+ ${{ env.cache-name }}-${{ runner.os }}-${{ env.SWIFT_VER }}
+ - name: Set Ubuntu Release DOT
+ run: echo "RELEASE_DOT=$(lsb_release -sr)" >> $GITHUB_ENV
+ - name: Set Ubuntu Release NUM
+ run: echo "RELEASE_NUM=${RELEASE_DOT//[-._]/}" >> $GITHUB_ENV
+ - name: Set Ubuntu Codename
+ run: echo "RELEASE_NAME=$(lsb_release -sc)" >> $GITHUB_ENV
+ - name: Cache swift
+ id: cache-swift-linux
+ uses: actions/cache@v3
+ env:
+ cache-name: swift
+ with:
+ path: swift-${{ env.SWIFT_VER }}-RELEASE-ubuntu${{ env.RELEASE_DOT }}
+ key: ${{ env.cache-name }}-${{ runner.os }}-${{ env.SWIFT_VER }}-${{ env.RELEASE_DOT }}
+ - name: Download Swift
+ if: steps.cache-swift-linux.outputs.cache-hit != 'true'
+ run: curl -O https://download.swift.org/swift-${SWIFT_VER}-release/ubuntu${RELEASE_NUM}/swift-${SWIFT_VER}-RELEASE/swift-${SWIFT_VER}-RELEASE-ubuntu${RELEASE_DOT}.tar.gz
+ - name: Extract Swift
+ if: steps.cache-swift-linux.outputs.cache-hit != 'true'
+ run: tar xzf swift-${SWIFT_VER}-RELEASE-ubuntu${RELEASE_DOT}.tar.gz
+ - name: Add Path
+ run: echo "$GITHUB_WORKSPACE/swift-${SWIFT_VER}-RELEASE-ubuntu${RELEASE_DOT}/usr/bin" >> $GITHUB_PATH
+ - name: Build
+ run: swift build
+ - name: Run tests
+ run: swift test --enable-test-discovery --enable-code-coverage
+ - name: Prepare Code Coverage
+ run: llvm-cov export -format="lcov" .build/x86_64-unknown-linux-gnu/debug/${{ env.PACKAGE_NAME }}PackageTests.xctest -instr-profile .build/debug/codecov/default.profdata > info.lcov
+ - name: Upload coverage reports to Codecov
+ uses: codecov/codecov-action@v3
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ flags: spm,${{ env.RELEASE_NAME }},${{ env.SWIFT_VER }}
+ build-macos:
+ name: Build on macOS
+ env:
+ PACKAGE_NAME: IPSWDownloads
+ runs-on: ${{ matrix.runs-on }}
+ if: "!contains(github.event.head_commit.message, 'ci skip')"
+ strategy:
+ matrix:
+ include:
+ - runs-on: macos-13
+ xcode: "/Applications/Xcode_15.0.1.app"
+ iOSVersion: "17.0.1"
+ watchOSVersion: "10.0"
+ watchName: "Apple Watch Series 9 (41mm)"
+ iPhoneName: "iPhone 15"
+ - runs-on: macos-13
+ xcode: "/Applications/Xcode_15.1.app"
+ iOSVersion: "17.2"
+ watchOSVersion: "10.2"
+ watchName: "Apple Watch Series 9 (45mm)"
+ iPhoneName: "iPhone 15 Pro"
+ - runs-on: macos-13-xlarge
+ xcode: "/Applications/Xcode_15.2.app"
+ iOSVersion: "17.2"
+ watchOSVersion: "10.2"
+ watchName: "Apple Watch Ultra 2 (49mm)"
+ iPhoneName: "iPhone 15 Pro Max"
+ steps:
+ - uses: actions/checkout@v3
+ - name: Cache swift package modules
+ id: cache-spm-macos
+ uses: actions/cache@v3
+ env:
+ cache-name: cache-spm
+ with:
+ path: .build
+ key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('Package.resolved') }}
+ restore-keys: |
+ ${{ runner.os }}-build-${{ env.cache-name }}-
+ ${{ runner.os }}-build-
+ ${{ runner.os }}-
+ - name: Cache mint
+ if: ${{ github.event_name == 'pull_request' && ( github.base_ref == 'main' || endsWith( github.ref_name , 'Prep') ) && matrix.xcode == '/Applications/Xcode_15.2.app' }}
+ id: cache-mint
+ uses: actions/cache@v3
+ env:
+ cache-name: cache-mint
+ with:
+ path: .mint
+ key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('Mintfile') }}
+ restore-keys: |
+ ${{ runner.os }}-build-${{ env.cache-name }}-
+ ${{ runner.os }}-build-
+ ${{ runner.os }}-
+ - name: Set Xcode Name
+ run: echo "XCODE_NAME=$(basename -- ${{ matrix.xcode }} | sed 's/\.[^.]*$//' | cut -d'_' -f2)" >> $GITHUB_ENV
+ - name: Setup Xcode
+ run: sudo xcode-select -s ${{ matrix.xcode }}/Contents/Developer
+ - name: Install mint
+ if: ${{ github.event_name == 'pull_request' && ( github.base_ref == 'main' || endsWith( github.ref_name , 'Prep') ) && matrix.xcode == '/Applications/Xcode_15.2.app' }}
+ run: |
+ brew update
+ brew install mint
+ # - name: Initialize CodeQL
+ # if: startsWith(matrix.xcode,'/Applications/Xcode_15.1')
+ # uses: github/codeql-action/init@v3
+ # with:
+ # languages: ${{ matrix.language }}
+ - name: Build
+ run: swift build
+ # - name: Perform CodeQL Analysis
+ # if: startsWith(matrix.xcode,'/Applications/Xcode_15.1')
+ # uses: github/codeql-action/analyze@v3
+ - name: Run Swift Package tests
+ run: swift test -v --enable-code-coverage
+ - uses: sersoft-gmbh/swift-coverage-action@v4
+ - name: Upload SPM to CodeCov.io
+ run: bash <(curl https://codecov.io/bash) -F spm -F macOS -F ${XCODE_NAME}
+ env:
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
+ - name: Clean up spm build directory
+ run: rm -rf .build
+ - name: Lint
+ run: ./scripts/lint.sh
+ if: ${{ github.event_name == 'pull_request' && ( github.base_ref == 'main' || endsWith( github.ref_name , 'Prep') ) && matrix.xcode == '/Applications/Xcode_15.2.app' }}
+ - name: Run iOS target tests
+ run: xcodebuild test -scheme IPSWDownloads -sdk iphonesimulator -destination 'platform=iOS Simulator,name=${{ matrix.iPhoneName }},OS=${{ matrix.iOSVersion }}' -enableCodeCoverage YES build test
+ - uses: sersoft-gmbh/swift-coverage-action@v4
+ - name: Upload coverage reports to Codecov
+ uses: codecov/codecov-action@v3
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ flags: iOS,iOS${{ matrix.iOSVersion }},macOS,${{ env.XCODE_NAME }}
+ - name: Run watchOS target tests
+ run: xcodebuild test -scheme IPSWDownloads -sdk watchsimulator -destination 'platform=watchOS Simulator,name=${{ matrix.watchName }},OS=${{ matrix.watchOSVersion }}' -enableCodeCoverage YES build test
+ - uses: sersoft-gmbh/swift-coverage-action@v4
+ - name: Upload coverage reports to Codecov
+ uses: codecov/codecov-action@v3
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ flags: watchOS,watchOS${{ matrix.watchOSVersion }},macOS,${{ env.XCODE_NAME }}
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
new file mode 100644
index 0000000..dfa85e7
--- /dev/null
+++ b/.github/workflows/codeql.yml
@@ -0,0 +1,75 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
+name: "CodeQL"
+
+on:
+ push:
+ branches: [ "main" ]
+ pull_request:
+ branches: [ "main" ]
+ schedule:
+ - cron: '16 9 * * 1'
+
+jobs:
+ analyze:
+ name: Analyze
+ # Runner size impacts CodeQL analysis time. To learn more, please see:
+ # - https://gh.io/recommended-hardware-resources-for-running-codeql
+ # - https://gh.io/supported-runners-and-hardware-resources
+ # - https://gh.io/using-larger-runners
+ # Consider using larger runners for possible analysis time improvements.
+ runs-on: ${{ (matrix.language == 'swift' && 'macos-13') || 'ubuntu-latest' }}
+ timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
+
+ strategy:
+ fail-fast: false
+ matrix:
+ language: [ 'swift' ]
+ # CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ]
+ # Use only 'java-kotlin' to analyze code written in Java, Kotlin or both
+ # Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
+ # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Setup Xcode
+ run: sudo xcode-select -s /Applications/Xcode_15.1.app/Contents/Developer
+
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v3
+ with:
+ languages: ${{ matrix.language }}
+ # If you wish to specify custom queries, you can do so here or in a config file.
+ # By default, queries listed here will override any specified in a config file.
+ # Prefix the list here with "+" to use these queries and those in the config file.
+
+ # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
+ # queries: security-extended,security-and-quality
+
+
+ # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
+ # If this step fails, then you should remove it and run the build manually (see below)
+ - run: |
+ echo "Run, Build Application using script"
+ swift build
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v3
+ with:
+ category: "/language:${{matrix.language}}"
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f964942
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,145 @@
+# Created by https://www.toptal.com/developers/gitignore/api/swift,swiftpm,swiftpackagemanager,xcode,macos
+# Edit at https://www.toptal.com/developers/gitignore?templates=swift,swiftpm,swiftpackagemanager,xcode,macos
+
+### macOS ###
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+### Swift ###
+# Xcode
+#
+# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
+
+## User settings
+xcuserdata/
+
+## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
+*.xcscmblueprint
+*.xccheckout
+
+## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
+build/
+DerivedData/
+*.moved-aside
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+
+## Obj-C/Swift specific
+*.hmap
+
+## App packaging
+*.ipa
+*.dSYM.zip
+*.dSYM
+
+## Playgrounds
+timeline.xctimeline
+playground.xcworkspace
+
+# Swift Package Manager
+# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
+Packages/
+Package.pins
+#Package.resolved
+*.xcodeproj
+# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
+# hence it is not needed unless you have added a package configuration file to your project
+.swiftpm
+
+.build/
+
+# CocoaPods
+# We recommend against adding the Pods directory to your .gitignore. However
+# you should judge for yourself, the pros and cons are mentioned at:
+# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
+# Pods/
+# Add this line if you want to avoid checking in source code from the Xcode workspace
+# *.xcworkspace
+
+# Carthage
+# Add this line if you want to avoid checking in source code from Carthage dependencies.
+# Carthage/Checkouts
+
+Carthage/Build/
+
+# Accio dependency management
+Dependencies/
+.accio/
+
+# fastlane
+# It is recommended to not store the screenshots in the git repo.
+# Instead, use fastlane to re-generate the screenshots whenever they are needed.
+# For more information about the recommended setup visit:
+# https://docs.fastlane.tools/best-practices/source-control/#source-control
+
+fastlane/report.xml
+fastlane/Preview.html
+fastlane/screenshots/**/*.png
+fastlane/test_output
+
+# Code Injection
+# After new code Injection tools there's a generated folder /iOSInjectionProject
+# https://github.com/johnno1962/injectionforxcode
+
+iOSInjectionProject/
+
+### SwiftPackageManager ###
+Packages
+xcuserdata
+*.xcodeproj
+
+
+### SwiftPM ###
+
+
+### Xcode ###
+# Xcode
+# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
+
+
+
+
+## Gcc Patch
+/*.gcno
+
+### Xcode Patch ###
+*.xcodeproj/*
+!*.xcodeproj/project.pbxproj
+!*.xcodeproj/xcshareddata/
+!*.xcworkspace/contents.xcworkspacedata
+**/xcshareddata/WorkspaceSettings.xcsettings
+
+# End of https://www.toptal.com/developers/gitignore/api/swift,swiftpm,swiftpackagemanager,xcode,macos
+Output
+.mint
\ No newline at end of file
diff --git a/.hound.yml b/.hound.yml
new file mode 100644
index 0000000..6941f63
--- /dev/null
+++ b/.hound.yml
@@ -0,0 +1,2 @@
+swiftlint:
+ config_file: .swiftlint.yml
diff --git a/.periphery.yml b/.periphery.yml
new file mode 100644
index 0000000..793b8c2
--- /dev/null
+++ b/.periphery.yml
@@ -0,0 +1,3 @@
+retain_public: true
+targets:
+- IPSWDownloads
diff --git a/.spi.yml b/.spi.yml
new file mode 100644
index 0000000..5974102
--- /dev/null
+++ b/.spi.yml
@@ -0,0 +1,4 @@
+version: 1
+builder:
+ configs:
+ - documentation_targets: [IPSWDownloads]
diff --git a/.swift-version b/.swift-version
new file mode 100644
index 0000000..95ee81a
--- /dev/null
+++ b/.swift-version
@@ -0,0 +1 @@
+5.9
diff --git a/.swiftformat b/.swiftformat
new file mode 100644
index 0000000..9a8c2b4
--- /dev/null
+++ b/.swiftformat
@@ -0,0 +1,7 @@
+--indent 2
+--header strip
+--commas inline
+--disable wrapMultilineStatementBraces, redundantInternal
+--extensionacl on-declarations
+--decimalgrouping 3,4
+--exclude .build, DerivedData, Sources/IPSWDownloads/Generated
diff --git a/.swiftlint.yml b/.swiftlint.yml
new file mode 100644
index 0000000..3425645
--- /dev/null
+++ b/.swiftlint.yml
@@ -0,0 +1,118 @@
+opt_in_rules:
+ - array_init
+ - attributes
+ - closure_body_length
+ - closure_end_indentation
+ - closure_spacing
+ - collection_alignment
+ - conditional_returns_on_newline
+ - contains_over_filter_count
+ - contains_over_filter_is_empty
+ - contains_over_first_not_nil
+ - contains_over_range_nil_comparison
+ - convenience_type
+ - discouraged_object_literal
+ - discouraged_optional_boolean
+ - empty_collection_literal
+ - empty_count
+ - empty_string
+ - empty_xctest_method
+ - enum_case_associated_values_count
+ - expiring_todo
+ - explicit_acl
+ - explicit_init
+ - explicit_top_level_acl
+ - fallthrough
+ - fatal_error_message
+ - file_header
+ - file_name
+ - file_name_no_space
+ - file_types_order
+ - first_where
+ - flatmap_over_map_reduce
+ - force_unwrapping
+ - function_default_parameter_at_end
+ - ibinspectable_in_extension
+ - identical_operands
+ - implicit_return
+ - implicitly_unwrapped_optional
+ - indentation_width
+ - joined_default_parameter
+ - last_where
+ - legacy_multiple
+ - legacy_random
+ - literal_expression_end_indentation
+ - lower_acl_than_parent
+ - missing_docs
+ - modifier_order
+ - multiline_arguments
+ - multiline_arguments_brackets
+ - multiline_function_chains
+ - multiline_literal_brackets
+ - multiline_parameters
+ - nimble_operator
+ - nslocalizedstring_key
+ - nslocalizedstring_require_bundle
+ - number_separator
+ - object_literal
+ - operator_usage_whitespace
+ - optional_enum_case_matching
+ - overridden_super_call
+ - override_in_extension
+ - pattern_matching_keywords
+ - prefer_self_type_over_type_of_self
+ - prefer_zero_over_explicit_init
+ - private_action
+ - private_outlet
+ - prohibited_interface_builder
+ - prohibited_super_call
+ - quick_discouraged_call
+ - quick_discouraged_focused_test
+ - quick_discouraged_pending_test
+ - reduce_into
+ - redundant_nil_coalescing
+ - redundant_type_annotation
+ - required_enum_case
+ - single_test_class
+ - sorted_first_last
+ - sorted_imports
+ - static_operator
+ - strict_fileprivate
+ - strong_iboutlet
+ - switch_case_on_newline
+ - toggle_bool
+ - trailing_closure
+ - type_contents_order
+ - unavailable_function
+ - unneeded_parentheses_in_closure_argument
+ - unowned_variable_capture
+ - untyped_error_in_catch
+ - vertical_parameter_alignment_on_call
+ - vertical_whitespace_between_cases
+ - vertical_whitespace_closing_braces
+ - vertical_whitespace_opening_braces
+ - xct_specific_matcher
+ - yoda_condition
+cyclomatic_complexity:
+ - 6
+ - 9
+file_length:
+ - 200
+ - 550
+function_body_length:
+ - 15
+ - 25
+function_parameter_count: 8
+line_length:
+ - 90
+ - 90
+identifier_name:
+ excluded:
+ - id
+excluded:
+ - Tests
+ - DerivedData
+ - .build
+ - Sources/IPSWDownloads/Generated
+indentation_width:
+ indentation_width: 2
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..b29299c
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 BrightDigit
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/Mintfile b/Mintfile
new file mode 100644
index 0000000..f204f4a
--- /dev/null
+++ b/Mintfile
@@ -0,0 +1,2 @@
+nicklockwood/SwiftFormat@0.52.11
+realm/SwiftLint@0.54.0
diff --git a/Package.resolved b/Package.resolved
new file mode 100644
index 0000000..6ebeb54
--- /dev/null
+++ b/Package.resolved
@@ -0,0 +1,95 @@
+{
+ "pins" : [
+ {
+ "identity" : "openapikit",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/mattpolzin/OpenAPIKit",
+ "state" : {
+ "revision" : "283454875cc6e5b2801d184d65835b92252d1784",
+ "version" : "3.1.2"
+ }
+ },
+ {
+ "identity" : "swift-algorithms",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-algorithms",
+ "state" : {
+ "revision" : "f6919dfc309e7f1b56224378b11e28bab5bccc42",
+ "version" : "1.2.0"
+ }
+ },
+ {
+ "identity" : "swift-argument-parser",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-argument-parser",
+ "state" : {
+ "revision" : "c8ed701b513cf5177118a175d85fbbbcd707ab41",
+ "version" : "1.3.0"
+ }
+ },
+ {
+ "identity" : "swift-collections",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-collections",
+ "state" : {
+ "revision" : "d029d9d39c87bed85b1c50adee7c41795261a192",
+ "version" : "1.0.6"
+ }
+ },
+ {
+ "identity" : "swift-http-types",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-http-types",
+ "state" : {
+ "revision" : "1827dc94bdab2eb5f2fc804e9b0cb43574282566",
+ "version" : "1.0.2"
+ }
+ },
+ {
+ "identity" : "swift-numerics",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-numerics.git",
+ "state" : {
+ "revision" : "0a5bc04095a675662cf24757cc0640aa2204253b",
+ "version" : "1.0.2"
+ }
+ },
+ {
+ "identity" : "swift-openapi-generator",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-openapi-generator",
+ "state" : {
+ "revision" : "76994bfc77061c6cfa3b82415613a9dfbfb47f28",
+ "version" : "1.1.0"
+ }
+ },
+ {
+ "identity" : "swift-openapi-runtime",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-openapi-runtime",
+ "state" : {
+ "revision" : "fd101c320185313bbf9c5a45b827b17eda9ff18a",
+ "version" : "1.1.0"
+ }
+ },
+ {
+ "identity" : "swift-openapi-urlsession",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-openapi-urlsession",
+ "state" : {
+ "revision" : "aac0a8273fa1186641e0b336da3f1be01aa6a0eb",
+ "version" : "1.0.0"
+ }
+ },
+ {
+ "identity" : "yams",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/jpsim/Yams",
+ "state" : {
+ "revision" : "0d9ee7ea8c4ebd4a489ad7a73d5c6cad55d6fed3",
+ "version" : "5.0.6"
+ }
+ }
+ ],
+ "version" : 2
+}
diff --git a/Package.swift b/Package.swift
new file mode 100644
index 0000000..e9d8af7
--- /dev/null
+++ b/Package.swift
@@ -0,0 +1,30 @@
+// swift-tools-version: 5.9
+// swiftlint:disable explicit_acl explicit_top_level_acl
+import PackageDescription
+
+let package = Package(
+ name: "IPSWDownloads",
+ platforms: [.macOS(.v10_15), .iOS(.v13), .tvOS(.v13), .watchOS(.v6), .visionOS(.v1)],
+ products: [
+ .library(name: "IPSWDownloads", targets: ["IPSWDownloads"])
+ ],
+ dependencies: [
+ .package(url: "https://github.com/apple/swift-openapi-generator", from: "1.0.0"),
+ .package(url: "https://github.com/apple/swift-openapi-runtime", from: "1.0.0"),
+ .package(url: "https://github.com/apple/swift-openapi-urlsession", from: "1.0.0")
+ ],
+ targets: [
+ .target(
+ name: "IPSWDownloads",
+ dependencies: [
+ .product(name: "OpenAPIRuntime", package: "swift-openapi-runtime"),
+ .product(name: "OpenAPIURLSession", package: "swift-openapi-urlsession")
+ ]
+ ),
+ .testTarget(
+ name: "IPSWDownloadsTests",
+ dependencies: ["IPSWDownloads"]
+ )
+ ]
+)
+// swiftlint:enable explicit_acl explicit_top_level_acl
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..d03d58e
--- /dev/null
+++ b/README.md
@@ -0,0 +1,86 @@
+
IPSWDownloads
+
+Provides a Swift-friendly API into the API for [IPSW Downloads](http://ipsw.me). Used by [Bushel](https://getbushel.app).
+
+[](https://swiftpackageindex.com/brightdigit/IPSWDownloads)
+[](https://swiftpackageindex.com/brightdigit/IPSWDownloads)
+[](https://IPSWDownloads.dev/)
+
+
+[](http://twitter.com/brightdigit)
+
+[](https://github.com/brightdigit/IPSWDownloads/actions/workflows/IPSWDownloads.yml)
+
+
+
+[](https://codecov.io/gh/brightdigit/IPSWDownloads)
+[](https://www.codefactor.io/repository/github/brightdigit/IPSWDownloads)
+[](https://codebeat.co/projects/github-com-brightdigit-IPSWDownloads-main)
+[](https://codeclimate.com/github/brightdigit/IPSWDownloads)
+[](https://codeclimate.com/github/brightdigit/IPSWDownloads)
+[](https://codeclimate.com/github/brightdigit/IPSWDownloads)
+[](https://houndci.com)
+
+## Introduction
+
+Provides a Swift-friendly API into the API for [IPSW Downloads](http://ipsw.me).
+
+## Installation
+
+### Requirements
+
+**Apple Platforms**
+
+- Xcode 15.0.1 or later
+- Swift 5.9 or later
+- iOS 17.0 / watchOS 10.0 / tvOS 17.0 / macOS 14.0 / visionOS 1.0 or later deployment targets
+
+**Linux**
+
+- Ubuntu 20.04 or later
+- Swift 5.9 or later
+
+### Swift Package Manager
+
+Swift Package Manager is Apple's decentralized dependency manager to integrate libraries to your Swift projects. It is now fully integrated with Xcode 11.
+
+To integrate **IPSWDownloads** into your project using SPM, specify it in your Package.swift file:
+
+```swift
+let package = Package(
+ ...
+ dependencies: [
+ .package(url: "https://github.com/brightdigit/IPSWDownloads", from: "1.0.0-beta.1")
+ ],
+ targets: [
+ .target(
+ name: "YourTarget",
+ dependencies: ["IPSWDownloads", ...]),
+ ...
+ ]
+)
+```
+
+If this is for an Xcode project simply import the repo at:
+
+```
+https://github.com/brightdigit/IPSWDownloads
+```
+
+## Usage
+
+_Coming Soon!_
+
+## Documentation
+
+Be sure to check out the [IPSW Downloads API for more details](https://ipswdownloads.docs.apiary.io/).
+
+## Roadmap
+
+## 1.0.0
+
+- [ ] Coming Soon
+
+## License
+
+This code is distributed under the MIT license. See the [LICENSE](LICENSE) file for more info.
diff --git a/Scripts/generate.sh b/Scripts/generate.sh
new file mode 100755
index 0000000..0d42eaf
--- /dev/null
+++ b/Scripts/generate.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+swift run swift-openapi-generator generate --output-directory Sources/IPSWDownloads/Generated --config openapi-generator-config.yaml openapi.yaml
\ No newline at end of file
diff --git a/Scripts/gh-md-toc b/Scripts/gh-md-toc
new file mode 100755
index 0000000..ef389e7
--- /dev/null
+++ b/Scripts/gh-md-toc
@@ -0,0 +1,361 @@
+#!/usr/bin/env bash
+
+#
+# Steps:
+#
+# 1. Download corresponding html file for some README.md:
+# curl -s $1
+#
+# 2. Discard rows where no substring 'user-content-' (github's markup):
+# awk '/user-content-/ { ...
+#
+# 3.1 Get last number in each row like ' ... sitemap.js.*<\/h/)+2, RLENGTH-5)
+#
+# 5. Find anchor and insert it inside "(...)":
+# substr($0, match($0, "href=\"[^\"]+?\" ")+6, RLENGTH-8)
+#
+
+gh_toc_version="0.7.0"
+
+gh_user_agent="gh-md-toc v$gh_toc_version"
+
+#
+# Download rendered into html README.md by its url.
+#
+#
+gh_toc_load() {
+ local gh_url=$1
+
+ if type curl &>/dev/null; then
+ curl --user-agent "$gh_user_agent" -s "$gh_url"
+ elif type wget &>/dev/null; then
+ wget --user-agent="$gh_user_agent" -qO- "$gh_url"
+ else
+ echo "Please, install 'curl' or 'wget' and try again."
+ exit 1
+ fi
+}
+
+#
+# Converts local md file into html by GitHub
+#
+# -> curl -X POST --data '{"text": "Hello world github/linguist#1 **cool**, and #1!"}' https://api.github.com/markdown
+# Hello world github/linguist#1 cool, and #1!
'"
+gh_toc_md2html() {
+ local gh_file_md=$1
+ URL=https://api.github.com/markdown/raw
+
+ if [ ! -z "$GH_TOC_TOKEN" ]; then
+ TOKEN=$GH_TOC_TOKEN
+ else
+ TOKEN_FILE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/token.txt"
+ if [ -f "$TOKEN_FILE" ]; then
+ TOKEN="$(cat $TOKEN_FILE)"
+ fi
+ fi
+ if [ ! -z "${TOKEN}" ]; then
+ AUTHORIZATION="Authorization: token ${TOKEN}"
+ fi
+
+ # echo $URL 1>&2
+ OUTPUT=$(curl -s \
+ --user-agent "$gh_user_agent" \
+ --data-binary @"$gh_file_md" \
+ -H "Content-Type:text/plain" \
+ -H "$AUTHORIZATION" \
+ "$URL")
+
+ if [ "$?" != "0" ]; then
+ echo "XXNetworkErrorXX"
+ fi
+ if [ "$(echo "${OUTPUT}" | awk '/API rate limit exceeded/')" != "" ]; then
+ echo "XXRateLimitXX"
+ else
+ echo "${OUTPUT}"
+ fi
+}
+
+
+#
+# Is passed string url
+#
+gh_is_url() {
+ case $1 in
+ https* | http*)
+ echo "yes";;
+ *)
+ echo "no";;
+ esac
+}
+
+#
+# TOC generator
+#
+gh_toc(){
+ local gh_src=$1
+ local gh_src_copy=$1
+ local gh_ttl_docs=$2
+ local need_replace=$3
+ local no_backup=$4
+ local no_footer=$5
+
+ if [ "$gh_src" = "" ]; then
+ echo "Please, enter URL or local path for a README.md"
+ exit 1
+ fi
+
+
+ # Show "TOC" string only if working with one document
+ if [ "$gh_ttl_docs" = "1" ]; then
+
+ echo "Table of Contents"
+ echo "================="
+ echo ""
+ gh_src_copy=""
+
+ fi
+
+ if [ "$(gh_is_url "$gh_src")" == "yes" ]; then
+ gh_toc_load "$gh_src" | gh_toc_grab "$gh_src_copy"
+ if [ "${PIPESTATUS[0]}" != "0" ]; then
+ echo "Could not load remote document."
+ echo "Please check your url or network connectivity"
+ exit 1
+ fi
+ if [ "$need_replace" = "yes" ]; then
+ echo
+ echo "!! '$gh_src' is not a local file"
+ echo "!! Can't insert the TOC into it."
+ echo
+ fi
+ else
+ local rawhtml=$(gh_toc_md2html "$gh_src")
+ if [ "$rawhtml" == "XXNetworkErrorXX" ]; then
+ echo "Parsing local markdown file requires access to github API"
+ echo "Please make sure curl is installed and check your network connectivity"
+ exit 1
+ fi
+ if [ "$rawhtml" == "XXRateLimitXX" ]; then
+ echo "Parsing local markdown file requires access to github API"
+ echo "Error: You exceeded the hourly limit. See: https://developer.github.com/v3/#rate-limiting"
+ TOKEN_FILE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/token.txt"
+ echo "or place GitHub auth token here: ${TOKEN_FILE}"
+ exit 1
+ fi
+ local toc=`echo "$rawhtml" | gh_toc_grab "$gh_src_copy"`
+ echo "$toc"
+ if [ "$need_replace" = "yes" ]; then
+ if grep -Fxq "" $gh_src && grep -Fxq "" $gh_src; then
+ echo "Found markers"
+ else
+ echo "You don't have or in your file...exiting"
+ exit 1
+ fi
+ local ts="<\!--ts-->"
+ local te="<\!--te-->"
+ local dt=`date +'%F_%H%M%S'`
+ local ext=".orig.${dt}"
+ local toc_path="${gh_src}.toc.${dt}"
+ local toc_footer=""
+ # http://fahdshariff.blogspot.ru/2012/12/sed-mutli-line-replacement-between-two.html
+ # clear old TOC
+ sed -i${ext} "/${ts}/,/${te}/{//!d;}" "$gh_src"
+ # create toc file
+ echo "${toc}" > "${toc_path}"
+ if [ "${no_footer}" != "yes" ]; then
+ echo -e "\n${toc_footer}\n" >> "$toc_path"
+ fi
+
+ # insert toc file
+ if [[ "`uname`" == "Darwin" ]]; then
+ sed -i "" "/${ts}/r ${toc_path}" "$gh_src"
+ else
+ sed -i "/${ts}/r ${toc_path}" "$gh_src"
+ fi
+ echo
+ if [ "${no_backup}" = "yes" ]; then
+ rm ${toc_path} ${gh_src}${ext}
+ fi
+ echo "!! TOC was added into: '$gh_src'"
+ if [ -z "${no_backup}" ]; then
+ echo "!! Origin version of the file: '${gh_src}${ext}'"
+ echo "!! TOC added into a separate file: '${toc_path}'"
+ fi
+ echo
+ fi
+ fi
+}
+
+#
+# Grabber of the TOC from rendered html
+#
+# $1 - a source url of document.
+# It's need if TOC is generated for multiple documents.
+#
+gh_toc_grab() {
+ common_awk_script='
+ modified_href = ""
+ split(href, chars, "")
+ for (i=1;i <= length(href); i++) {
+ c = chars[i]
+ res = ""
+ if (c == "+") {
+ res = " "
+ } else {
+ if (c == "%") {
+ res = "\\x"
+ } else {
+ res = c ""
+ }
+ }
+ modified_href = modified_href res
+ }
+ print sprintf("%*s", (level-1)*3, "") "* [" text "](" gh_url modified_href ")"
+ '
+ if [ `uname -s` == "OS/390" ]; then
+ grepcmd="pcregrep -o"
+ echoargs=""
+ awkscript='{
+ level = substr($0, length($0), 1)
+ text = substr($0, match($0, /a>.*<\/h/)+2, RLENGTH-5)
+ href = substr($0, match($0, "href=\"([^\"]+)?\"")+6, RLENGTH-7)
+ '"$common_awk_script"'
+ }'
+ else
+ grepcmd="grep -Eo"
+ echoargs="-e"
+ awkscript='{
+ level = substr($0, length($0), 1)
+ text = substr($0, match($0, /a>.*<\/h/)+2, RLENGTH-5)
+ href = substr($0, match($0, "href=\"[^\"]+?\"")+6, RLENGTH-7)
+ '"$common_awk_script"'
+ }'
+ fi
+ href_regex='href=\"[^\"]+?\"'
+
+ # if closed is on the new line, then move it on the prev line
+ # for example:
+ # was: The command foo1
+ #
+ # became: The command foo1
+ sed -e ':a' -e 'N' -e '$!ba' -e 's/\n<\/h/<\/h/g' |
+
+ # find strings that corresponds to template
+ $grepcmd '//g' | sed 's/<\/code>//g' |
+
+ # remove g-emoji
+ sed 's/]*[^<]*<\/g-emoji> //g' |
+
+ # now all rows are like:
+ # ... / placeholders"
+ echo " $app_name - Create TOC for markdown from STDIN"
+ echo " $app_name --help Show help"
+ echo " $app_name --version Show version"
+ return
+ fi
+
+ if [ "$1" = '--version' ]; then
+ echo "$gh_toc_version"
+ echo
+ echo "os: `lsb_release -d | cut -f 2`"
+ echo "kernel: `cat /proc/version`"
+ echo "shell: `$SHELL --version`"
+ echo
+ for tool in curl wget grep awk sed; do
+ printf "%-5s: " $tool
+ echo `$tool --version | head -n 1`
+ done
+ return
+ fi
+
+ if [ "$1" = "-" ]; then
+ if [ -z "$TMPDIR" ]; then
+ TMPDIR="/tmp"
+ elif [ -n "$TMPDIR" -a ! -d "$TMPDIR" ]; then
+ mkdir -p "$TMPDIR"
+ fi
+ local gh_tmp_md
+ if [ `uname -s` == "OS/390" ]; then
+ local timestamp=$(date +%m%d%Y%H%M%S)
+ gh_tmp_md="$TMPDIR/tmp.$timestamp"
+ else
+ gh_tmp_md=$(mktemp $TMPDIR/tmp.XXXXXX)
+ fi
+ while read input; do
+ echo "$input" >> "$gh_tmp_md"
+ done
+ gh_toc_md2html "$gh_tmp_md" | gh_toc_grab ""
+ return
+ fi
+
+ if [ "$1" = '--insert' ]; then
+ need_replace="yes"
+ shift
+ fi
+
+ if [ "$1" = '--no-backup' ]; then
+ need_replace="yes"
+ no_backup="yes"
+ shift
+ fi
+
+ if [ "$1" = '--hide-footer' ]; then
+ need_replace="yes"
+ no_footer="yes"
+ shift
+ fi
+
+ for md in "$@"
+ do
+ echo ""
+ gh_toc "$md" "$#" "$need_replace" "$no_backup" "$no_footer"
+ done
+
+ echo ""
+ echo "Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc)"
+}
+
+#
+# Entry point
+#
+gh_toc_app "$@"
+
diff --git a/Scripts/lint.sh b/Scripts/lint.sh
new file mode 100755
index 0000000..4c0d481
--- /dev/null
+++ b/Scripts/lint.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+if [ -z "$SRCROOT" ]; then
+ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
+ PACKAGE_DIR="${SCRIPT_DIR}/.."
+else
+ PACKAGE_DIR="${SRCROOT}"
+fi
+
+if [ -z "$GITHUB_ACTION" ]; then
+ MINT_CMD="/opt/homebrew/bin/mint"
+else
+ MINT_CMD="mint"
+fi
+
+export MINT_PATH="$PACKAGE_DIR/.mint"
+MINT_ARGS="-n -m $PACKAGE_DIR/Mintfile --silent"
+MINT_RUN="$MINT_CMD run $MINT_ARGS"
+
+if [ "$LINT_MODE" == "NONE" ]; then
+ exit
+elif [ "$LINT_MODE" == "STRICT" ]; then
+ SWIFTFORMAT_OPTIONS=""
+ SWIFTLINT_OPTIONS="--strict"
+else
+ SWIFTFORMAT_OPTIONS=""
+ SWIFTLINT_OPTIONS=""
+fi
+
+pushd $PACKAGE_DIR
+
+$MINT_CMD bootstrap -m Mintfile
+
+if [ -z "$CI" ]; then
+ $MINT_RUN swiftformat .
+ $MINT_RUN swiftlint autocorrect
+fi
+
+if [ -z "$FORMAT_ONLY"]; then
+ $MINT_RUN periphery scan
+ $MINT_RUN swiftformat --lint $SWIFTFORMAT_OPTIONS .
+ $MINT_RUN swiftlint lint $SWIFTLINT_OPTIONS
+fi
+
+popd
diff --git a/Sources/IPSWDownloads/Board.swift b/Sources/IPSWDownloads/Board.swift
new file mode 100644
index 0000000..59e1144
--- /dev/null
+++ b/Sources/IPSWDownloads/Board.swift
@@ -0,0 +1,44 @@
+//
+// File.swift
+//
+//
+// Created by Leo Dion on 1/11/24.
+//
+import Foundation
+
+public struct Board {
+ public let boardconfig: String
+ public let platform: String
+
+ /// The CHIP tag is a 16-bit unsigned integer
+ /// that denotes the type of chip the firmware is to be installed to.
+ /// It is one of the few tags that is not read from the fuses,
+ /// but is instead hardcoded in the bootchain.
+ /// It is used to prevent incompatible firmwares from being installed;
+ /// different processors may have their MMIO registers in different locations.
+ public let cpid: Int
+
+ /// The Board ID of a device
+ /// (also known as BORD, BDID, or ApBoardId) is a value
+ /// (usually represented as `uint8\_t`)
+ /// hat represents multiple characteristics of the logic board
+ public let bdid: Int
+
+ public init(boardconfig: String, platform: String, cpid: Int, bdid: Int) {
+ self.boardconfig = boardconfig
+ self.platform = platform
+ self.cpid = cpid
+ self.bdid = bdid
+ }
+}
+
+extension Board {
+ internal init(component: Components.Schemas.Board) {
+ self.init(
+ boardconfig: component.boardconfig,
+ platform: component.platform,
+ cpid: component.cpid,
+ bdid: component.bdid
+ )
+ }
+}
diff --git a/Sources/IPSWDownloads/Device.swift b/Sources/IPSWDownloads/Device.swift
new file mode 100644
index 0000000..002c4b3
--- /dev/null
+++ b/Sources/IPSWDownloads/Device.swift
@@ -0,0 +1,32 @@
+//
+// File.swift
+//
+//
+// Created by Leo Dion on 1/11/24.
+//
+import Foundation
+
+public struct Device {
+ public let name: String
+ public let identifier: String
+ public let firmwares: [Firmware]
+ public let boards: [Board]
+
+ public init(name: String, identifier: String, firmwares: [Firmware], boards: [Board]) {
+ self.name = name
+ self.identifier = identifier
+ self.firmwares = firmwares
+ self.boards = boards
+ }
+}
+
+extension Device {
+ internal init(component: Components.Schemas.Device) throws {
+ try self.init(
+ name: component.name,
+ identifier: component.identifier,
+ firmwares: component.firmwares.map(Firmware.init(component:)),
+ boards: component.boards.map(Board.init(component:))
+ )
+ }
+}
diff --git a/Sources/IPSWDownloads/Firmware.swift b/Sources/IPSWDownloads/Firmware.swift
new file mode 100644
index 0000000..a6ed03d
--- /dev/null
+++ b/Sources/IPSWDownloads/Firmware.swift
@@ -0,0 +1,61 @@
+//
+// File.swift
+//
+//
+// Created by Leo Dion on 1/11/24.
+//
+import Foundation
+
+public struct Firmware {
+ public let identifier: String
+ public let version: OperatingSystemVersion
+ public let buildid: String
+ public let sha1sum: String
+ public let md5sum: String
+ public let filesize: Int
+ public let url: URL
+ public let releasedate: Date
+ public let uploaddate: Date
+ public let signed: Bool
+
+ public init(
+ identifier: String,
+ version: OperatingSystemVersion,
+ buildid: String,
+ sha1sum: String,
+ md5sum: String,
+ filesize: Int,
+ url: URL,
+ releasedate: Date,
+ uploaddate: Date,
+ signed: Bool
+ ) {
+ self.identifier = identifier
+ self.version = version
+ self.buildid = buildid
+ self.sha1sum = sha1sum
+ self.md5sum = md5sum
+ self.filesize = filesize
+ self.url = url
+ self.releasedate = releasedate
+ self.uploaddate = uploaddate
+ self.signed = signed
+ }
+}
+
+extension Firmware {
+ internal init(component: Components.Schemas.Firmware) throws {
+ try self.init(
+ identifier: component.identifier,
+ version: OperatingSystemVersion(string: component.version),
+ buildid: component.buildid,
+ sha1sum: component.sha1sum,
+ md5sum: component.md5sum,
+ filesize: component.filesize,
+ url: URL(validatingURL: component.url),
+ releasedate: component.releasedate,
+ uploaddate: component.uploaddate,
+ signed: component.signed
+ )
+ }
+}
diff --git a/Sources/IPSWDownloads/FirmwareType.swift b/Sources/IPSWDownloads/FirmwareType.swift
new file mode 100644
index 0000000..7285d08
--- /dev/null
+++ b/Sources/IPSWDownloads/FirmwareType.swift
@@ -0,0 +1,15 @@
+//
+// File.swift
+//
+//
+// Created by Leo Dion on 1/11/24.
+//
+import Foundation
+
+/// Type of Firmware file.
+public enum FirmwareType: String {
+ /// IPSW File
+ case ipsw
+ /// OTA Firmware
+ case ota
+}
diff --git a/Sources/IPSWDownloads/Generated/Client.swift b/Sources/IPSWDownloads/Generated/Client.swift
new file mode 100644
index 0000000..74c4f61
--- /dev/null
+++ b/Sources/IPSWDownloads/Generated/Client.swift
@@ -0,0 +1,181 @@
+// Generated by swift-openapi-generator, do not modify.
+@_spi(Generated) import OpenAPIRuntime
+#if os(Linux)
+@preconcurrency import struct Foundation.URL
+@preconcurrency import struct Foundation.Data
+@preconcurrency import struct Foundation.Date
+#else
+import struct Foundation.URL
+import struct Foundation.Data
+import struct Foundation.Date
+#endif
+import HTTPTypes
+/// Download current and previous versions of Apple's iOS Firmware, iTunes and OTA updates.
+internal struct Client: APIProtocol {
+ /// The underlying HTTP client.
+ private let client: UniversalClient
+ /// Creates a new client.
+ /// - Parameters:
+ /// - serverURL: The server URL that the client connects to. Any server
+ /// URLs defined in the OpenAPI document are available as static methods
+ /// on the ``Servers`` type.
+ /// - configuration: A set of configuration values for the client.
+ /// - transport: A transport that performs HTTP operations.
+ /// - middlewares: A list of middlewares to call before the transport.
+ internal init(
+ serverURL: Foundation.URL,
+ configuration: Configuration = .init(),
+ transport: any ClientTransport,
+ middlewares: [any ClientMiddleware] = []
+ ) {
+ self.client = .init(
+ serverURL: serverURL,
+ configuration: configuration,
+ transport: transport,
+ middlewares: middlewares
+ )
+ }
+ private var converter: Converter {
+ client.converter
+ }
+ /// Get Firmwares For Device
+ ///
+ /// GetFirmwaresForDevice returns Firmwares for a given Device. An optional "type" get parameter may be
+ /// specified to retrieve OTA Firmwares instead of normal IPSW files.
+ /// As of 2021-03-04, it is recommended that you use the "boards" property of the device, as devices can have multiple boards.
+ ///
+ /// - Remark: HTTP `GET /device/{identifier}`.
+ /// - Remark: Generated from `#/paths//device/{identifier}/get(getDevice)`.
+ internal func getDevice(_ input: Operations.getDevice.Input) async throws -> Operations.getDevice.Output {
+ try await client.send(
+ input: input,
+ forOperation: Operations.getDevice.id,
+ serializer: { input in
+ let path = try converter.renderedPath(
+ template: "/device/{}",
+ parameters: [
+ input.path.identifier
+ ]
+ )
+ var request: HTTPTypes.HTTPRequest = .init(
+ soar_path: path,
+ method: .get
+ )
+ suppressMutabilityWarning(&request)
+ try converter.setQueryItemAsURI(
+ in: &request,
+ style: .form,
+ explode: true,
+ name: "type",
+ value: input.query._type
+ )
+ converter.setAcceptHeader(
+ in: &request.headerFields,
+ contentTypes: input.headers.accept
+ )
+ return (request, nil)
+ },
+ deserializer: { response, responseBody in
+ switch response.status.code {
+ case 200:
+ let headers: Operations.getDevice.Output.Ok.Headers = .init(
+ Access_hyphen_Control_hyphen_Allow_hyphen_Methods: try converter.getOptionalHeaderFieldAsURI(
+ in: response.headerFields,
+ name: "Access-Control-Allow-Methods",
+ as: Swift.String.self
+ ),
+ Access_hyphen_Control_hyphen_Allow_hyphen_Origin: try converter.getOptionalHeaderFieldAsURI(
+ in: response.headerFields,
+ name: "Access-Control-Allow-Origin",
+ as: Swift.String.self
+ ),
+ Cache_hyphen_Control: try converter.getOptionalHeaderFieldAsURI(
+ in: response.headerFields,
+ name: "Cache-Control",
+ as: Swift.String.self
+ ),
+ Expires: try converter.getOptionalHeaderFieldAsURI(
+ in: response.headerFields,
+ name: "Expires",
+ as: Swift.String.self
+ ),
+ X_hyphen_Data_hyphen_Location: try converter.getOptionalHeaderFieldAsURI(
+ in: response.headerFields,
+ name: "X-Data-Location",
+ as: Swift.String.self
+ )
+ )
+ let contentType = converter.extractContentTypeIfPresent(in: response.headerFields)
+ let body: Operations.getDevice.Output.Ok.Body
+ let chosenContentType = try converter.bestContentType(
+ received: contentType,
+ options: [
+ "application/json",
+ "application/x-plist",
+ "application/xml"
+ ]
+ )
+ switch chosenContentType {
+ case "application/json":
+ body = try await converter.getResponseBodyAsJSON(
+ Components.Schemas.Device.self,
+ from: responseBody,
+ transforming: { value in
+ .json(value)
+ }
+ )
+ case "application/x-plist":
+ body = try converter.getResponseBodyAsBinary(
+ OpenAPIRuntime.HTTPBody.self,
+ from: responseBody,
+ transforming: { value in
+ .application_x_hyphen_plist(value)
+ }
+ )
+ case "application/xml":
+ body = try converter.getResponseBodyAsBinary(
+ OpenAPIRuntime.HTTPBody.self,
+ from: responseBody,
+ transforming: { value in
+ .xml(value)
+ }
+ )
+ default:
+ preconditionFailure("bestContentType chose an invalid content type.")
+ }
+ return .ok(.init(
+ headers: headers,
+ body: body
+ ))
+ case 404:
+ let headers: Operations.getDevice.Output.NotFound.Headers = .init(
+ Access_hyphen_Control_hyphen_Allow_hyphen_Methods: try converter.getOptionalHeaderFieldAsURI(
+ in: response.headerFields,
+ name: "Access-Control-Allow-Methods",
+ as: Swift.String.self
+ ),
+ Access_hyphen_Control_hyphen_Allow_hyphen_Origin: try converter.getOptionalHeaderFieldAsURI(
+ in: response.headerFields,
+ name: "Access-Control-Allow-Origin",
+ as: Swift.String.self
+ ),
+ X_hyphen_Data_hyphen_Location: try converter.getOptionalHeaderFieldAsURI(
+ in: response.headerFields,
+ name: "X-Data-Location",
+ as: Swift.String.self
+ )
+ )
+ return .notFound(.init(headers: headers))
+ default:
+ return .undocumented(
+ statusCode: response.status.code,
+ .init(
+ headerFields: response.headerFields,
+ body: responseBody
+ )
+ )
+ }
+ }
+ )
+ }
+}
diff --git a/Sources/IPSWDownloads/Generated/Types.swift b/Sources/IPSWDownloads/Generated/Types.swift
new file mode 100644
index 0000000..c842f81
--- /dev/null
+++ b/Sources/IPSWDownloads/Generated/Types.swift
@@ -0,0 +1,542 @@
+// Generated by swift-openapi-generator, do not modify.
+@_spi(Generated) import OpenAPIRuntime
+#if os(Linux)
+@preconcurrency import struct Foundation.URL
+@preconcurrency import struct Foundation.Data
+@preconcurrency import struct Foundation.Date
+#else
+import struct Foundation.URL
+import struct Foundation.Data
+import struct Foundation.Date
+#endif
+/// A type that performs HTTP operations defined by the OpenAPI document.
+internal protocol APIProtocol: Sendable {
+ /// Get Firmwares For Device
+ ///
+ /// GetFirmwaresForDevice returns Firmwares for a given Device. An optional "type" get parameter may be
+ /// specified to retrieve OTA Firmwares instead of normal IPSW files.
+ /// As of 2021-03-04, it is recommended that you use the "boards" property of the device, as devices can have multiple boards.
+ ///
+ /// - Remark: HTTP `GET /device/{identifier}`.
+ /// - Remark: Generated from `#/paths//device/{identifier}/get(getDevice)`.
+ func getDevice(_ input: Operations.getDevice.Input) async throws -> Operations.getDevice.Output
+}
+
+/// Convenience overloads for operation inputs.
+extension APIProtocol {
+ /// Get Firmwares For Device
+ ///
+ /// GetFirmwaresForDevice returns Firmwares for a given Device. An optional "type" get parameter may be
+ /// specified to retrieve OTA Firmwares instead of normal IPSW files.
+ /// As of 2021-03-04, it is recommended that you use the "boards" property of the device, as devices can have multiple boards.
+ ///
+ /// - Remark: HTTP `GET /device/{identifier}`.
+ /// - Remark: Generated from `#/paths//device/{identifier}/get(getDevice)`.
+ internal func getDevice(
+ path: Operations.getDevice.Input.Path,
+ query: Operations.getDevice.Input.Query,
+ headers: Operations.getDevice.Input.Headers = .init()
+ ) async throws -> Operations.getDevice.Output {
+ try await getDevice(Operations.getDevice.Input(
+ path: path,
+ query: query,
+ headers: headers
+ ))
+ }
+}
+
+/// Server URLs defined in the OpenAPI document.
+internal enum Servers {
+ internal static func server1() throws -> Foundation.URL {
+ try Foundation.URL(
+ validatingOpenAPIServerURL: "https://api.ipsw.me/v4",
+ variables: []
+ )
+ }
+}
+
+/// Types generated from the components section of the OpenAPI document.
+internal enum Components {
+ /// Types generated from the `#/components/schemas` section of the OpenAPI document.
+ internal enum Schemas {
+ /// - Remark: Generated from `#/components/schemas/Board`.
+ internal struct Board: Codable, Hashable, Sendable {
+ /// - Remark: Generated from `#/components/schemas/Board/boardconfig`.
+ internal var boardconfig: Swift.String
+ /// - Remark: Generated from `#/components/schemas/Board/platform`.
+ internal var platform: Swift.String
+ /// - Remark: Generated from `#/components/schemas/Board/cpid`.
+ internal var cpid: Swift.Int
+ /// - Remark: Generated from `#/components/schemas/Board/bdid`.
+ internal var bdid: Swift.Int
+ /// Creates a new `Board`.
+ ///
+ /// - Parameters:
+ /// - boardconfig:
+ /// - platform:
+ /// - cpid:
+ /// - bdid:
+ internal init(
+ boardconfig: Swift.String,
+ platform: Swift.String,
+ cpid: Swift.Int,
+ bdid: Swift.Int
+ ) {
+ self.boardconfig = boardconfig
+ self.platform = platform
+ self.cpid = cpid
+ self.bdid = bdid
+ }
+ internal enum CodingKeys: String, CodingKey {
+ case boardconfig
+ case platform
+ case cpid
+ case bdid
+ }
+ }
+ /// - Remark: Generated from `#/components/schemas/Firmware`.
+ internal struct Firmware: Codable, Hashable, Sendable {
+ /// - Remark: Generated from `#/components/schemas/Firmware/identifier`.
+ internal var identifier: Swift.String
+ /// - Remark: Generated from `#/components/schemas/Firmware/version`.
+ internal var version: Swift.String
+ /// - Remark: Generated from `#/components/schemas/Firmware/buildid`.
+ internal var buildid: Swift.String
+ /// - Remark: Generated from `#/components/schemas/Firmware/sha1sum`.
+ internal var sha1sum: Swift.String
+ /// - Remark: Generated from `#/components/schemas/Firmware/md5sum`.
+ internal var md5sum: Swift.String
+ /// - Remark: Generated from `#/components/schemas/Firmware/filesize`.
+ internal var filesize: Swift.Int
+ /// - Remark: Generated from `#/components/schemas/Firmware/url`.
+ internal var url: Swift.String
+ /// - Remark: Generated from `#/components/schemas/Firmware/releasedate`.
+ internal var releasedate: Foundation.Date
+ /// - Remark: Generated from `#/components/schemas/Firmware/uploaddate`.
+ internal var uploaddate: Foundation.Date
+ /// - Remark: Generated from `#/components/schemas/Firmware/signed`.
+ internal var signed: Swift.Bool
+ /// Creates a new `Firmware`.
+ ///
+ /// - Parameters:
+ /// - identifier:
+ /// - version:
+ /// - buildid:
+ /// - sha1sum:
+ /// - md5sum:
+ /// - filesize:
+ /// - url:
+ /// - releasedate:
+ /// - uploaddate:
+ /// - signed:
+ internal init(
+ identifier: Swift.String,
+ version: Swift.String,
+ buildid: Swift.String,
+ sha1sum: Swift.String,
+ md5sum: Swift.String,
+ filesize: Swift.Int,
+ url: Swift.String,
+ releasedate: Foundation.Date,
+ uploaddate: Foundation.Date,
+ signed: Swift.Bool
+ ) {
+ self.identifier = identifier
+ self.version = version
+ self.buildid = buildid
+ self.sha1sum = sha1sum
+ self.md5sum = md5sum
+ self.filesize = filesize
+ self.url = url
+ self.releasedate = releasedate
+ self.uploaddate = uploaddate
+ self.signed = signed
+ }
+ internal enum CodingKeys: String, CodingKey {
+ case identifier
+ case version
+ case buildid
+ case sha1sum
+ case md5sum
+ case filesize
+ case url
+ case releasedate
+ case uploaddate
+ case signed
+ }
+ }
+ /// - Remark: Generated from `#/components/schemas/Device`.
+ internal struct Device: Codable, Hashable, Sendable {
+ /// - Remark: Generated from `#/components/schemas/Device/name`.
+ internal var name: Swift.String
+ /// - Remark: Generated from `#/components/schemas/Device/identifier`.
+ internal var identifier: Swift.String
+ /// - Remark: Generated from `#/components/schemas/Device/firmwares`.
+ internal var firmwares: [Components.Schemas.Firmware]
+ /// - Remark: Generated from `#/components/schemas/Device/boards`.
+ internal var boards: [Components.Schemas.Board]
+ /// - Remark: Generated from `#/components/schemas/Device/boardconfig`.
+ internal var boardconfig: Swift.String?
+ /// - Remark: Generated from `#/components/schemas/Device/platform`.
+ internal var platform: Swift.String?
+ /// - Remark: Generated from `#/components/schemas/Device/cpid`.
+ internal var cpid: Swift.Int?
+ /// - Remark: Generated from `#/components/schemas/Device/bdid`.
+ internal var bdid: Swift.Int?
+ /// Creates a new `Device`.
+ ///
+ /// - Parameters:
+ /// - name:
+ /// - identifier:
+ /// - firmwares:
+ /// - boards:
+ /// - boardconfig:
+ /// - platform:
+ /// - cpid:
+ /// - bdid:
+ internal init(
+ name: Swift.String,
+ identifier: Swift.String,
+ firmwares: [Components.Schemas.Firmware],
+ boards: [Components.Schemas.Board],
+ boardconfig: Swift.String? = nil,
+ platform: Swift.String? = nil,
+ cpid: Swift.Int? = nil,
+ bdid: Swift.Int? = nil
+ ) {
+ self.name = name
+ self.identifier = identifier
+ self.firmwares = firmwares
+ self.boards = boards
+ self.boardconfig = boardconfig
+ self.platform = platform
+ self.cpid = cpid
+ self.bdid = bdid
+ }
+ internal enum CodingKeys: String, CodingKey {
+ case name
+ case identifier
+ case firmwares
+ case boards
+ case boardconfig
+ case platform
+ case cpid
+ case bdid
+ }
+ }
+ }
+ /// Types generated from the `#/components/parameters` section of the OpenAPI document.
+ internal enum Parameters {}
+ /// Types generated from the `#/components/requestBodies` section of the OpenAPI document.
+ internal enum RequestBodies {}
+ /// Types generated from the `#/components/responses` section of the OpenAPI document.
+ internal enum Responses {}
+ /// Types generated from the `#/components/headers` section of the OpenAPI document.
+ internal enum Headers {}
+}
+
+/// API operations, with input and output types, generated from `#/paths` in the OpenAPI document.
+internal enum Operations {
+ /// Get Firmwares For Device
+ ///
+ /// GetFirmwaresForDevice returns Firmwares for a given Device. An optional "type" get parameter may be
+ /// specified to retrieve OTA Firmwares instead of normal IPSW files.
+ /// As of 2021-03-04, it is recommended that you use the "boards" property of the device, as devices can have multiple boards.
+ ///
+ /// - Remark: HTTP `GET /device/{identifier}`.
+ /// - Remark: Generated from `#/paths//device/{identifier}/get(getDevice)`.
+ internal enum getDevice {
+ internal static let id: Swift.String = "getDevice"
+ internal struct Input: Sendable, Hashable {
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/path`.
+ internal struct Path: Sendable, Hashable {
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/path/identifier`.
+ internal var identifier: Swift.String
+ /// Creates a new `Path`.
+ ///
+ /// - Parameters:
+ /// - identifier:
+ internal init(identifier: Swift.String) {
+ self.identifier = identifier
+ }
+ }
+ internal var path: Operations.getDevice.Input.Path
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/query`.
+ internal struct Query: Sendable, Hashable {
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/query/type`.
+ internal var _type: Swift.String
+ /// Creates a new `Query`.
+ ///
+ /// - Parameters:
+ /// - _type:
+ internal init(_type: Swift.String) {
+ self._type = _type
+ }
+ }
+ internal var query: Operations.getDevice.Input.Query
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/header`.
+ internal struct Headers: Sendable, Hashable {
+ internal var accept: [OpenAPIRuntime.AcceptHeaderContentType]
+ /// Creates a new `Headers`.
+ ///
+ /// - Parameters:
+ /// - accept:
+ internal init(accept: [OpenAPIRuntime.AcceptHeaderContentType] = .defaultValues()) {
+ self.accept = accept
+ }
+ }
+ internal var headers: Operations.getDevice.Input.Headers
+ /// Creates a new `Input`.
+ ///
+ /// - Parameters:
+ /// - path:
+ /// - query:
+ /// - headers:
+ internal init(
+ path: Operations.getDevice.Input.Path,
+ query: Operations.getDevice.Input.Query,
+ headers: Operations.getDevice.Input.Headers = .init()
+ ) {
+ self.path = path
+ self.query = query
+ self.headers = headers
+ }
+ }
+ @frozen internal enum Output: Sendable, Hashable {
+ internal struct Ok: Sendable, Hashable {
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/responses/200/headers`.
+ internal struct Headers: Sendable, Hashable {
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/responses/200/headers/Access-Control-Allow-Methods`.
+ internal var Access_hyphen_Control_hyphen_Allow_hyphen_Methods: Swift.String?
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/responses/200/headers/Access-Control-Allow-Origin`.
+ internal var Access_hyphen_Control_hyphen_Allow_hyphen_Origin: Swift.String?
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/responses/200/headers/Cache-Control`.
+ internal var Cache_hyphen_Control: Swift.String?
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/responses/200/headers/Expires`.
+ internal var Expires: Swift.String?
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/responses/200/headers/X-Data-Location`.
+ internal var X_hyphen_Data_hyphen_Location: Swift.String?
+ /// Creates a new `Headers`.
+ ///
+ /// - Parameters:
+ /// - Access_hyphen_Control_hyphen_Allow_hyphen_Methods:
+ /// - Access_hyphen_Control_hyphen_Allow_hyphen_Origin:
+ /// - Cache_hyphen_Control:
+ /// - Expires:
+ /// - X_hyphen_Data_hyphen_Location:
+ internal init(
+ Access_hyphen_Control_hyphen_Allow_hyphen_Methods: Swift.String? = nil,
+ Access_hyphen_Control_hyphen_Allow_hyphen_Origin: Swift.String? = nil,
+ Cache_hyphen_Control: Swift.String? = nil,
+ Expires: Swift.String? = nil,
+ X_hyphen_Data_hyphen_Location: Swift.String? = nil
+ ) {
+ self.Access_hyphen_Control_hyphen_Allow_hyphen_Methods = Access_hyphen_Control_hyphen_Allow_hyphen_Methods
+ self.Access_hyphen_Control_hyphen_Allow_hyphen_Origin = Access_hyphen_Control_hyphen_Allow_hyphen_Origin
+ self.Cache_hyphen_Control = Cache_hyphen_Control
+ self.Expires = Expires
+ self.X_hyphen_Data_hyphen_Location = X_hyphen_Data_hyphen_Location
+ }
+ }
+ /// Received HTTP response headers
+ internal var headers: Operations.getDevice.Output.Ok.Headers
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/responses/200/content`.
+ @frozen internal enum Body: Sendable, Hashable {
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/responses/200/content/application\/json`.
+ case json(Components.Schemas.Device)
+ /// The associated value of the enum case if `self` is `.json`.
+ ///
+ /// - Throws: An error if `self` is not `.json`.
+ /// - SeeAlso: `.json`.
+ internal var json: Components.Schemas.Device {
+ get throws {
+ switch self {
+ case let .json(body):
+ return body
+ default:
+ try throwUnexpectedResponseBody(
+ expectedContent: "application/json",
+ body: self
+ )
+ }
+ }
+ }
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/responses/200/content/application\/x-plist`.
+ case application_x_hyphen_plist(OpenAPIRuntime.HTTPBody)
+ /// The associated value of the enum case if `self` is `.application_x_hyphen_plist`.
+ ///
+ /// - Throws: An error if `self` is not `.application_x_hyphen_plist`.
+ /// - SeeAlso: `.application_x_hyphen_plist`.
+ internal var application_x_hyphen_plist: OpenAPIRuntime.HTTPBody {
+ get throws {
+ switch self {
+ case let .application_x_hyphen_plist(body):
+ return body
+ default:
+ try throwUnexpectedResponseBody(
+ expectedContent: "application/x-plist",
+ body: self
+ )
+ }
+ }
+ }
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/responses/200/content/application\/xml`.
+ case xml(OpenAPIRuntime.HTTPBody)
+ /// The associated value of the enum case if `self` is `.xml`.
+ ///
+ /// - Throws: An error if `self` is not `.xml`.
+ /// - SeeAlso: `.xml`.
+ internal var xml: OpenAPIRuntime.HTTPBody {
+ get throws {
+ switch self {
+ case let .xml(body):
+ return body
+ default:
+ try throwUnexpectedResponseBody(
+ expectedContent: "application/xml",
+ body: self
+ )
+ }
+ }
+ }
+ }
+ /// Received HTTP response body
+ internal var body: Operations.getDevice.Output.Ok.Body
+ /// Creates a new `Ok`.
+ ///
+ /// - Parameters:
+ /// - headers: Received HTTP response headers
+ /// - body: Received HTTP response body
+ internal init(
+ headers: Operations.getDevice.Output.Ok.Headers = .init(),
+ body: Operations.getDevice.Output.Ok.Body
+ ) {
+ self.headers = headers
+ self.body = body
+ }
+ }
+ /// OK
+ ///
+ /// - Remark: Generated from `#/paths//device/{identifier}/get(getDevice)/responses/200`.
+ ///
+ /// HTTP response code: `200 ok`.
+ case ok(Operations.getDevice.Output.Ok)
+ /// The associated value of the enum case if `self` is `.ok`.
+ ///
+ /// - Throws: An error if `self` is not `.ok`.
+ /// - SeeAlso: `.ok`.
+ internal var ok: Operations.getDevice.Output.Ok {
+ get throws {
+ switch self {
+ case let .ok(response):
+ return response
+ default:
+ try throwUnexpectedResponseStatus(
+ expectedStatus: "ok",
+ response: self
+ )
+ }
+ }
+ }
+ internal struct NotFound: Sendable, Hashable {
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/responses/404/headers`.
+ internal struct Headers: Sendable, Hashable {
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/responses/404/headers/Access-Control-Allow-Methods`.
+ internal var Access_hyphen_Control_hyphen_Allow_hyphen_Methods: Swift.String?
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/responses/404/headers/Access-Control-Allow-Origin`.
+ internal var Access_hyphen_Control_hyphen_Allow_hyphen_Origin: Swift.String?
+ /// - Remark: Generated from `#/paths/device/{identifier}/GET/responses/404/headers/X-Data-Location`.
+ internal var X_hyphen_Data_hyphen_Location: Swift.String?
+ /// Creates a new `Headers`.
+ ///
+ /// - Parameters:
+ /// - Access_hyphen_Control_hyphen_Allow_hyphen_Methods:
+ /// - Access_hyphen_Control_hyphen_Allow_hyphen_Origin:
+ /// - X_hyphen_Data_hyphen_Location:
+ internal init(
+ Access_hyphen_Control_hyphen_Allow_hyphen_Methods: Swift.String? = nil,
+ Access_hyphen_Control_hyphen_Allow_hyphen_Origin: Swift.String? = nil,
+ X_hyphen_Data_hyphen_Location: Swift.String? = nil
+ ) {
+ self.Access_hyphen_Control_hyphen_Allow_hyphen_Methods = Access_hyphen_Control_hyphen_Allow_hyphen_Methods
+ self.Access_hyphen_Control_hyphen_Allow_hyphen_Origin = Access_hyphen_Control_hyphen_Allow_hyphen_Origin
+ self.X_hyphen_Data_hyphen_Location = X_hyphen_Data_hyphen_Location
+ }
+ }
+ /// Received HTTP response headers
+ internal var headers: Operations.getDevice.Output.NotFound.Headers
+ /// Creates a new `NotFound`.
+ ///
+ /// - Parameters:
+ /// - headers: Received HTTP response headers
+ internal init(headers: Operations.getDevice.Output.NotFound.Headers = .init()) {
+ self.headers = headers
+ }
+ }
+ /// Not Found
+ ///
+ /// - Remark: Generated from `#/paths//device/{identifier}/get(getDevice)/responses/404`.
+ ///
+ /// HTTP response code: `404 notFound`.
+ case notFound(Operations.getDevice.Output.NotFound)
+ /// The associated value of the enum case if `self` is `.notFound`.
+ ///
+ /// - Throws: An error if `self` is not `.notFound`.
+ /// - SeeAlso: `.notFound`.
+ internal var notFound: Operations.getDevice.Output.NotFound {
+ get throws {
+ switch self {
+ case let .notFound(response):
+ return response
+ default:
+ try throwUnexpectedResponseStatus(
+ expectedStatus: "notFound",
+ response: self
+ )
+ }
+ }
+ }
+ /// Undocumented response.
+ ///
+ /// A response with a code that is not documented in the OpenAPI document.
+ case undocumented(statusCode: Swift.Int, OpenAPIRuntime.UndocumentedPayload)
+ }
+ @frozen internal enum AcceptableContentType: AcceptableProtocol {
+ case json
+ case application_x_hyphen_plist
+ case xml
+ case other(Swift.String)
+ internal init?(rawValue: Swift.String) {
+ switch rawValue.lowercased() {
+ case "application/json":
+ self = .json
+ case "application/x-plist":
+ self = .application_x_hyphen_plist
+ case "application/xml":
+ self = .xml
+ default:
+ self = .other(rawValue)
+ }
+ }
+ internal var rawValue: Swift.String {
+ switch self {
+ case let .other(string):
+ return string
+ case .json:
+ return "application/json"
+ case .application_x_hyphen_plist:
+ return "application/x-plist"
+ case .xml:
+ return "application/xml"
+ }
+ }
+ internal static var allCases: [Self] {
+ [
+ .json,
+ .application_x_hyphen_plist,
+ .xml
+ ]
+ }
+ }
+ }
+}
diff --git a/Sources/IPSWDownloads/IPSWDownloads.swift b/Sources/IPSWDownloads/IPSWDownloads.swift
new file mode 100644
index 0000000..532cc67
--- /dev/null
+++ b/Sources/IPSWDownloads/IPSWDownloads.swift
@@ -0,0 +1,58 @@
+//
+// File.swift
+//
+//
+// Created by Leo Dion on 1/11/24.
+//
+import Foundation
+import OpenAPIRuntime
+
+/// Client for downloading current and previous versions
+/// of Apple's iOS Firmware, iTunes and OTA updates.
+public struct IPSWDownloads {
+ // swiftlint:disable:next force_try
+ private static let serverURL = try! Servers.server1()
+
+ /// The underlying generated client to make HTTP requests to IPSWDownloads.
+ private let underlyingClient: any APIProtocol
+
+ /// An internal initializer used by other initializers and by tests.
+ /// - Parameter underlyingClient: The client to use to make HTTP requests.
+ private init(underlyingClient: any APIProtocol) {
+ self.underlyingClient = underlyingClient
+ }
+
+ /// Creates a new client for IPSWDownloads.
+ ///
+ /// - Parameters:
+ /// - transport: Client transport for connecting to the server.
+ /// - serverURL: Optional server url otherwise the default url is used.
+ public init(
+ transport: any ClientTransport,
+ serverURL: URL? = nil
+ ) {
+ self.init(
+ underlyingClient: Client(
+ serverURL: serverURL ?? Self.serverURL,
+ transport: transport
+ )
+ )
+ }
+
+ /// Returns Firmwares for a given Device.
+ /// - Parameters:
+ /// - identifier: Device Identifier
+ /// - type: Specifies the type of Firmware files
+ /// - Returns: Device object containing the list of firmware object.
+ public func device(
+ withIdentifier identifier: String,
+ type: FirmwareType
+ ) async throws -> Device {
+ let input = Operations.getDevice.Input(
+ path: .init(identifier: identifier),
+ query: .init(_type: type.rawValue)
+ )
+ let device = try await underlyingClient.getDevice(input).ok.body.json
+ return try Device(component: device)
+ }
+}
diff --git a/Sources/IPSWDownloads/OperatingSystemVersion.swift b/Sources/IPSWDownloads/OperatingSystemVersion.swift
new file mode 100644
index 0000000..81a1d06
--- /dev/null
+++ b/Sources/IPSWDownloads/OperatingSystemVersion.swift
@@ -0,0 +1,17 @@
+import Foundation
+
+extension OperatingSystemVersion {
+ internal init(string: String) throws {
+ let components = string.components(separatedBy: ".").compactMap(Int.init)
+
+ guard components.count == 2 || components.count == 3 else {
+ throw RuntimeError.invalidVersion(string)
+ }
+
+ self.init(
+ majorVersion: components[0],
+ minorVersion: components[1],
+ patchVersion: components.count == 3 ? components[2] : 0
+ )
+ }
+}
diff --git a/Sources/IPSWDownloads/RuntimeError.swift b/Sources/IPSWDownloads/RuntimeError.swift
new file mode 100644
index 0000000..33b8372
--- /dev/null
+++ b/Sources/IPSWDownloads/RuntimeError.swift
@@ -0,0 +1,12 @@
+//
+// File.swift
+//
+//
+// Created by Leo Dion on 1/11/24.
+//
+import Foundation
+
+internal enum RuntimeError: Error {
+ case invalidURL(String)
+ case invalidVersion(String)
+}
diff --git a/Sources/IPSWDownloads/URL.swift b/Sources/IPSWDownloads/URL.swift
new file mode 100644
index 0000000..855ef01
--- /dev/null
+++ b/Sources/IPSWDownloads/URL.swift
@@ -0,0 +1,17 @@
+//
+// File.swift
+//
+//
+// Created by Leo Dion on 1/11/24.
+//
+import Foundation
+
+extension URL {
+ /// Returns a validated server URL, or throws an error.
+ /// - Parameter string: A URL string.
+ /// - Throws: If the provided string doesn't convert to URL.
+ public init(validatingURL string: String) throws {
+ guard let url = Self(string: string) else { throw RuntimeError.invalidURL(string) }
+ self = url
+ }
+}
diff --git a/Tests/IPSWDownloadsTests/IPSWDownloadsTest.swift b/Tests/IPSWDownloadsTests/IPSWDownloadsTest.swift
new file mode 100644
index 0000000..d8da57e
--- /dev/null
+++ b/Tests/IPSWDownloadsTests/IPSWDownloadsTest.swift
@@ -0,0 +1,19 @@
+import IPSWDownloads
+import OpenAPIURLSession
+import XCTest
+
+final class IPSWDownloadsTest: XCTestCase {
+ var client: IPSWDownloads!
+
+ override func setUp() {
+ assert(client == nil)
+ client = IPSWDownloads(transport: URLSessionTransport())
+ }
+
+ func testExample() async throws {
+ let device = try await client.device(withIdentifier: "VirtualMac2,1", type: .ipsw)
+ XCTAssertEqual(device.identifier, "VirtualMac2,1")
+ XCTAssertGreaterThan(device.firmwares.count, 10)
+ XCTAssertNotNil(device.firmwares.first)
+ }
+}
diff --git a/Tests/IPSWDownloadsTests/OperatingSystemVersionTest.swift b/Tests/IPSWDownloadsTests/OperatingSystemVersionTest.swift
new file mode 100644
index 0000000..031017b
--- /dev/null
+++ b/Tests/IPSWDownloadsTests/OperatingSystemVersionTest.swift
@@ -0,0 +1,62 @@
+@testable import IPSWDownloads
+import XCTest
+
+extension OperatingSystemVersion: Equatable {
+ public static func == (lhs: OperatingSystemVersion, rhs: OperatingSystemVersion) -> Bool {
+ lhs.majorVersion == rhs.majorVersion &&
+ lhs.minorVersion == rhs.minorVersion &&
+ lhs.patchVersion == rhs.patchVersion
+ }
+
+ static func random() -> OperatingSystemVersion {
+ .init(
+ majorVersion: .random(in: 1 ... 25),
+ minorVersion: .random(in: 0 ... 25),
+ patchVersion: Bool.random() ? .random(in: 1 ... 25) : 0
+ )
+ }
+
+ func string(trimZeroPatch: Bool) -> String {
+ let values: [Int?] = [
+ majorVersion,
+ minorVersion,
+ (!trimZeroPatch || patchVersion > 0) ? patchVersion : nil
+ ]
+ return values.compactMap {
+ $0?.description
+ }.joined(separator: ".")
+ }
+
+ func parsed(trimZeroPatch: Bool) throws -> OperatingSystemVersion {
+ try .init(string: string(trimZeroPatch: trimZeroPatch))
+ }
+}
+
+public class OperatingSystemVersionTests: XCTestCase {
+ func testInitStringValid() throws {
+ let validCount = Int.random(in: 20 ... 50)
+ let values: [OperatingSystemVersion] = (0 ..< validCount).map { _ in
+ .random()
+ }
+ for value in values {
+ try XCTAssertEqual(value, value.parsed(trimZeroPatch: false))
+ try XCTAssertEqual(value, value.parsed(trimZeroPatch: true))
+ }
+ }
+
+ func testInitStringInvalid() throws {
+ let validCount = Int.random(in: 20 ... 50)
+ let strings: [String] = (0 ..< validCount).map { _ in
+ UUID().uuidString
+ }
+ for string in strings {
+ var actual: String?
+ do {
+ _ = try OperatingSystemVersion(string: string)
+ } catch let RuntimeError.invalidVersion(value) {
+ actual = value
+ }
+ XCTAssertEqual(string, actual)
+ }
+ }
+}
diff --git a/codecov.yml b/codecov.yml
new file mode 100644
index 0000000..abe856b
--- /dev/null
+++ b/codecov.yml
@@ -0,0 +1,3 @@
+ignore:
+ - "Tests/**/*"
+ - "Sources/**/Generated/*"
diff --git a/openapi-generator-config.yaml b/openapi-generator-config.yaml
new file mode 100644
index 0000000..baa0f6f
--- /dev/null
+++ b/openapi-generator-config.yaml
@@ -0,0 +1,7 @@
+generate:
+ - types
+ - client
+accessModifier: internal
+filter:
+ operations:
+ - getDevice
diff --git a/openapi.yaml b/openapi.yaml
new file mode 100644
index 0000000..1e67562
--- /dev/null
+++ b/openapi.yaml
@@ -0,0 +1,5806 @@
+openapi: 3.0.3
+info:
+ title: IPSW Downloads API
+ version: 1.0.0
+ description: >-
+ Download current and previous versions of Apple's iOS Firmware, iTunes and
+ OTA updates.
+servers:
+ - url: https://api.ipsw.me/v4
+paths:
+ /device/{identifier}:
+ get:
+ responses:
+ '200':
+ description: OK
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Cache-Control:
+ schema:
+ type: string
+ Expires:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Device'
+ examples:
+ example1:
+ value:
+ name: iPhone 6s
+ identifier: iPhone8,1
+ firmwares:
+ - identifier: iPhone8,1
+ version: 13.1.3
+ buildid: 17A878
+ sha1sum: 96be7a8e55ec4bd1867bd1d7f18b1f24f8731838
+ md5sum: e7f95f23dd0d8f406b2ef95d4b63bc5c
+ filesize: 3652675161
+ url: >-
+ http://updates-http.cdn-apple.com/2019FallFCS/fullrestores/061-30582/2A093596-EB7A-11E9-9505-C810329334FA/iPhone_4.7_13.1.3_17A878_Restore.ipsw
+ releasedate: '2019-10-15T17:00:31Z'
+ uploaddate: '2019-10-10T17:31:00Z'
+ signed: true
+ - identifier: iPhone8,1
+ version: 13.1.2
+ buildid: 17A860
+ sha1sum: a90465c172cd77bcb5bf112993c8ee7caba632d1
+ md5sum: 5c247ad50b0bd470ea976c742bc42240
+ filesize: 3654014311
+ url: >-
+ http://updates-http.cdn-apple.com/2019FallFCS/fullrestores/061-22597/37272F4C-E18B-11E9-9F72-B96496A9EC6E/iPhone_4.7_13.1.2_17A860_Restore.ipsw
+ releasedate: '2019-09-30T17:11:19Z'
+ uploaddate: '2019-09-28T01:09:45Z'
+ signed: true
+ - identifier: iPhone8,1
+ version: 13.1.1
+ buildid: 17A854
+ sha1sum: 6fd3eaa23d13d26f8174c353d92b55c0ecc1698b
+ md5sum: a902e7dae4d9f15fe9d1a1a317a04740
+ filesize: 3651115452
+ url: >-
+ http://updates-http.cdn-apple.com/2019FallFCS/fullrestores/061-18421/E8F8D60E-DED8-11E9-A685-B200DC34986D/iPhone_4.7_13.1.1_17A854_Restore.ipsw
+ releasedate: '2019-09-27T16:58:00Z'
+ uploaddate: '2019-09-24T14:51:54Z'
+ signed: false
+ - identifier: iPhone8,1
+ version: '13.1'
+ buildid: 17A844
+ sha1sum: 3421b3825922e4f3d32e890a75b8ad3ba69a69f2
+ md5sum: a8cc4f157d799b1776028c7ce305ddf2
+ filesize: 3652404986
+ url: >-
+ http://updates-http.cdn-apple.com/2019FallFCS/fullrestores/091-99496/DCDE77CC-D986-11E9-AC76-A120DCDBD6A3/iPhone_4.7_13.1_17A844_Restore.ipsw
+ releasedate: '2019-09-24T17:03:38Z'
+ uploaddate: '2019-09-17T20:21:50Z'
+ signed: false
+ boards:
+ - boardconfig: N71AP
+ platform: s8000
+ cpid: 32768
+ bdid: 4
+ - boardconfig: N71mAP
+ platform: s8003
+ cpid: 32771
+ bdid: 4
+ boardconfig: N71AP
+ platform: s8000
+ cpid: 32768
+ bdid: 4
+ example2:
+ value:
+ name: iPhone 6+
+ identifier: iPhone7,1
+ firmwares:
+ - identifier: iPhone7,1
+ version: 12.4.2
+ buildid: 16G114
+ sha1sum: 58a91fa4d73077133772e464f761c96ad91df683
+ md5sum: 10d9aeb0d87a04a40417be05c0b19a44
+ filesize: 3328746693
+ url: >-
+ http://updates-http.cdn-apple.com/2019SummerFCS/fullrestores/061-20538/FD3DCDB6-DC8C-11E9-ABB0-278C66A83945/iPhone_5.5_12.4.2_16G114_Restore.ipsw
+ releasedate: '2019-09-26T17:04:56Z'
+ uploaddate: '2019-09-21T16:42:04Z'
+ signed: true
+ - identifier: iPhone7,1
+ version: 12.4.1
+ buildid: 16G102
+ sha1sum: 671863b1a34cb4d8abc44919679c645f0500486d
+ md5sum: 8a374df4132aedddd0207c8978080b35
+ filesize: 3345837529
+ url: >-
+ http://updates-http.cdn-apple.com/2019SummerFCS/fullrestores/061-05190/A449778A-C4E7-11E9-BE68-18610AD8B7A1/iPhone_5.5_12.4.1_16G102_Restore.ipsw
+ releasedate: '2019-08-26T18:30:09Z'
+ uploaddate: '2019-08-22T14:27:57Z'
+ signed: false
+ - identifier: iPhone7,1
+ version: '12.4'
+ buildid: 16G77
+ sha1sum: e435aa95763167106707e5d6534a4dcb66408f18
+ md5sum: 75279e6f2f850ba825addfe590afb8ba
+ filesize: 3345389368
+ url: >-
+ http://updates-http.cdn-apple.com/2019SummerFCS/fullrestores/041-86579/9E26E61A-A743-11E9-87D6-F185B65480B0/iPhone_5.5_12.4_16G77_Restore.ipsw
+ releasedate: '2019-07-22T17:08:32Z'
+ uploaddate: '2019-07-15T21:08:52Z'
+ signed: false
+ - identifier: iPhone7,1
+ version: 12.3.1
+ buildid: 16F203
+ sha1sum: a168b1bc901fb64cf725ab0dcca183dd684770dc
+ md5sum: 84a83ab5e05e2560fd6b08d6c014cd82
+ filesize: 3339505439
+ url: >-
+ http://updates-http.cdn-apple.com/2019SpringFCS/fullrestores/041-68573/CC468F46-7C96-11E9-80BA-4EF06256CCDB/iPhone_5.5_12.3.1_16F203_Restore.ipsw
+ releasedate: '2019-05-24T17:02:33Z'
+ uploaddate: '2019-05-22T13:57:50Z'
+ signed: false
+ boards:
+ - boardconfig: N56AP
+ platform: t7000
+ cpid: 28672
+ bdid: 4
+ boardconfig: N56AP
+ platform: t7000
+ cpid: 28672
+ bdid: 4
+ example3:
+ value:
+ name: iPhone 3G
+ identifier: iPhone1,2
+ firmwares:
+ - identifier: iPhone1,2
+ version: 4.2.1
+ buildid: 8C148
+ sha1sum: d2ed58586e8ca2153f2e2ec585bba8afc5173378
+ md5sum: 8b1657935408a1638b69740b282f62b3
+ filesize: 338579762
+ url: >-
+ http://appldnld.apple.com/iPhone4/061-9853.20101122.Vfgt5/iPhone1,2_4.2.1_8C148_Restore.ipsw
+ releasedate: null
+ uploaddate: '2010-11-18T17:30:48Z'
+ signed: true
+ - identifier: iPhone1,2
+ version: '4.1'
+ buildid: 8B117
+ sha1sum: d87bab469dd1146ab83ddcc23f03b3164d7e09d4
+ md5sum: 8cc589baad3c80dd8324c37d7dc00750
+ filesize: 323137556
+ url: >-
+ http://appldnld.apple.com/iPhone4/061-7932.20100908.3fgt5/iPhone1,2_4.1_8B117_Restore.ipsw
+ releasedate: null
+ uploaddate: '2010-09-03T14:12:24Z'
+ signed: true
+ - identifier: iPhone1,2
+ version: 4.0.2
+ buildid: 8A400
+ sha1sum: ee2bc74719170a7a2440b593b6f300727c930c69
+ md5sum: 6f3aefe1f8f516ae6e91fe993749347a
+ filesize: 320216794
+ url: >-
+ http://appldnld.apple.com/iPhone4/061-8802.20100811.XcfpR/iPhone1,2_4.0.2_8A400_Restore.ipsw
+ releasedate: null
+ uploaddate: '2010-08-09T19:52:20Z'
+ signed: true
+ - identifier: iPhone1,2
+ version: 4.0.1
+ buildid: 8A306
+ sha1sum: 940bd2b36c646f6673419eab661ac1f13248e592
+ md5sum: 8a952dbd03fa5e85da1a31092c651a25
+ filesize: 320237975
+ url: >-
+ http://appldnld.apple.com/iPhone4/061-8616.20100715.phnt4/iPhone1,2_4.0.1_8A306_Restore.ipsw
+ releasedate: null
+ uploaddate: '2010-07-13T20:13:59Z'
+ signed: true
+ boards:
+ - boardconfig: n82ap
+ platform: s5l8900x
+ cpid: 35072
+ bdid: 4
+ boardconfig: n82ap
+ platform: s5l8900x
+ cpid: 35072
+ bdid: 4
+ example4:
+ value:
+ name: iPod touch 1G
+ identifier: iPod1,1
+ firmwares:
+ - identifier: iPod1,1
+ version: 1.1.5
+ buildid: 4B1
+ sha1sum: 1b818911316e4248ee01d3ec67f9d39afc3db240
+ md5sum: 80b46fe8db7cfe58bb67e8553f495a8d
+ filesize: 173519637
+ url: >-
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/bundles/061-4841.20080714.bgy8O/iPod1,1_1.1.5_4B1_Restore.ipsw
+ releasedate: null
+ uploaddate: '2008-07-14T21:39:28Z'
+ signed: false
+ - identifier: iPod1,1
+ version: 1.1.4
+ buildid: 4A102
+ sha1sum: c148d1eb1c979bb6434175411d4a372103a4fdd2
+ md5sum: 0ed3435b4ead9aa5606ca0af66eedd90
+ filesize: 173519589
+ url: >-
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/bundles/061-4312.20080226.Btu45/iPod1,1_1.1.4_4A102_Restore.ipsw
+ releasedate: null
+ uploaddate: '2008-02-22T23:28:42Z'
+ signed: false
+ - identifier: iPod1,1
+ version: 1.1.3
+ buildid: 4A93
+ sha1sum: 8dca23eec69d5ae58fbf3d4a23276e46cbb2e3c6
+ md5sum: 12d996c376d378c1333b0343ddad6cb0
+ filesize: 173511411
+ url: >-
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/061-4060.20080115.9Iuh5/iPod1,1_1.1.3_4A93_Restore.ipsw
+ releasedate: null
+ uploaddate: '2008-01-10T04:03:18Z'
+ signed: false
+ - identifier: iPod1,1
+ version: 1.1.2
+ buildid: 3B48b
+ sha1sum: 108d8ffe9ea75e61cd5e57170ad388b7fa00d923
+ md5sum: a7469c40e204a607becabaca841b718f
+ filesize: 165567897
+ url: >-
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/bundles/061-4036.20071107.9g3DF/iPod1,1_1.1.2_3B48b_Restore.ipsw
+ releasedate: null
+ uploaddate: '2007-11-07T20:25:19Z'
+ signed: false
+ boards:
+ - boardconfig: n45ap
+ platform: s5l8900x
+ cpid: 35072
+ bdid: 2
+ boardconfig: n45ap
+ platform: s5l8900x
+ cpid: 35072
+ bdid: 2
+ example5:
+ value:
+ name: Apple TV 2G
+ identifier: AppleTV2,1
+ firmwares:
+ - identifier: AppleTV2,1
+ version: 7.1.2
+ buildid: 11D258
+ sha1sum: 4724347f2700dfe82fb864ecc8cdf66ea33262b1
+ md5sum: 6677e7611ebed25d8dc33d2401b75de2
+ filesize: 698547170
+ url: >-
+ http://appldnld.apple.com/iOS8/031-07202.20140917.tF6Fs/AppleTV2,1_6.2.1_11D258_Restore.ipsw
+ releasedate: '2014-09-17T17:59:02Z'
+ uploaddate: '2014-09-03T17:55:56Z'
+ signed: true
+ - identifier: AppleTV2,1
+ version: 7.1.2
+ buildid: 11D257c
+ sha1sum: a772321de7a4e4b5fa710ec3660d4a640c04ead8
+ md5sum: 2b5ad301db18658c06ba12841c250f4d
+ filesize: 698406382
+ url: >-
+ http://appldnld.apple.com/iOS7.1/031-04317.20140630.2qAFy/AppleTV2,1_6.2_11D257c_Restore.ipsw
+ releasedate: '2014-06-30T18:28:53Z'
+ uploaddate: '2014-06-27T22:43:09Z'
+ signed: false
+ - identifier: AppleTV2,1
+ version: 7.1.1
+ buildid: 11D201c
+ sha1sum: 500dcc8878d0ef51b57f7c8260076d3970235d5a
+ md5sum: 1b8d3e39e1523aeee697c0be90236e9f
+ filesize: 698303443
+ url: >-
+ http://appldnld.apple.com/iOS7.1/031-01311.20140422.EaugX/AppleTV2,1_6.1.1_11D201c_Restore.ipsw
+ releasedate: '2014-04-22T17:46:02Z'
+ uploaddate: '2014-04-16T23:38:39Z'
+ signed: false
+ - identifier: AppleTV2,1
+ version: '7.1'
+ buildid: 11D169b
+ sha1sum: db425818155c27df710547329c6bcdd3a7f78c1e
+ md5sum: 8107d3d44f22c234ccf15c976c8f0331
+ filesize: 698244610
+ url: >-
+ http://appldnld.apple.com/iOS7.1/031-4478.20140310.XDdib/AppleTV2,1_6.1_11D169b_Restore.ipsw
+ releasedate: '2014-03-10T17:57:25Z'
+ uploaddate: '2014-03-06T20:49:52Z'
+ signed: false
+ boards:
+ - boardconfig: k66ap
+ platform: s5l8930x
+ cpid: 35120
+ bdid: 16
+ boardconfig: k66ap
+ platform: s5l8930x
+ cpid: 35120
+ bdid: 16
+ example6:
+ value:
+ name: iPhone 5 (GSM)
+ identifier: iPhone5,1
+ firmwares:
+ - identifier: iPhone5,1
+ buildid: 14G61
+ version: 10.3.4
+ url: >-
+ http://updates-http.cdn-apple.com/2019/ios/091-24443-20190722-9357424A-9931-11E9-BCE8-56D0A77C2E40/com_apple_MobileAsset_SoftwareUpdate/fb90f2903f57aceabaf43bdc5aa99364faa8593e.zip
+ filesize: 66410207
+ prerequisitebuildid: 14F89
+ prerequisiteversion: 10.3.2
+ releasetype: ''
+ uploaddate: '2019-06-27T23:34:39Z'
+ releasedate: '2019-07-22T17:07:55Z'
+ marketingversion: ''
+ signed: true
+ - identifier: iPhone5,1
+ buildid: 14G61
+ version: 10.3.4
+ url: >-
+ http://updates-http.cdn-apple.com/2019/ios/091-24423-20190722-9357424A-9931-11E9-BCE8-53D0A77C2E40/com_apple_MobileAsset_SoftwareUpdate/1bc7b173cae90361d7820409ecc2fa5d5427144a.zip
+ filesize: 48460066
+ prerequisitebuildid: 14G57
+ prerequisiteversion: 10.3.3
+ releasetype: ''
+ uploaddate: '2019-06-27T23:34:34Z'
+ releasedate: '2019-07-22T17:07:56Z'
+ marketingversion: ''
+ signed: true
+ - identifier: iPhone5,1
+ buildid: 14G61
+ version: 10.3.4
+ url: >-
+ http://updates-http.cdn-apple.com/2019/ios/091-24531-20190722-93574B96-9931-11E9-B99A-5FD0A77C2E40/com_apple_MobileAsset_SoftwareUpdate/510f3fd40401a3fb35b1a22fa160f9a29730ec0c.zip
+ filesize: 36390797
+ prerequisitebuildid: 14G60
+ prerequisiteversion: 10.3.3
+ releasetype: ''
+ uploaddate: '2019-06-27T23:34:27Z'
+ releasedate: '2019-07-22T17:07:56Z'
+ marketingversion: ''
+ signed: true
+ - identifier: iPhone5,1
+ buildid: 14G61
+ version: 10.3.4
+ url: >-
+ http://updates-http.cdn-apple.com/2019/ios/091-24126-20190722-93574042-9931-11E9-BCE8-43D0A77C2E40/com_apple_MobileAsset_SoftwareUpdate/716406ffa26c805728d3078b56129ac07fc6516c.zip
+ filesize: 143957900
+ prerequisitebuildid: '14E304'
+ prerequisiteversion: 10.3.1
+ releasetype: ''
+ uploaddate: '2019-06-27T23:34:27Z'
+ releasedate: '2019-07-22T17:07:55Z'
+ marketingversion: ''
+ signed: true
+ boards:
+ - boardconfig: N41AP
+ platform: s5l8950x
+ cpid: 35152
+ bdid: 0
+ boardconfig: N41AP
+ platform: s5l8950x
+ cpid: 35152
+ bdid: 0
+ application/x-plist:
+ examples:
+ example1:
+ value: >
+
+
+
+
+
+
+ BDID
+ 4
+ BoardConfig
+ N71AP
+ Boards
+
+
+ BDID
+ 4
+ BoardConfig
+ N71AP
+ CPID
+ 32768
+ Platform
+ s8000
+
+
+ BDID
+ 4
+ BoardConfig
+ N71mAP
+ CPID
+ 32771
+ Platform
+ s8003
+
+
+ CPID
+ 32768
+ Firmwares
+
+
+ BuildID
+ 17A878
+ Filesize
+ 3652675161
+ Identifier
+ iPhone8,1
+ MD5sum
+ e7f95f23dd0d8f406b2ef95d4b63bc5c
+ ReleaseDate
+ 2019-10-15T17:00:31Z
+ SHA1sum
+ 96be7a8e55ec4bd1867bd1d7f18b1f24f8731838
+ Signed
+
+ URL
+ http://updates-http.cdn-apple.com/2019FallFCS/fullrestores/061-30582/2A093596-EB7A-11E9-9505-C810329334FA/iPhone_4.7_13.1.3_17A878_Restore.ipsw
+ UploadDate
+ 2019-10-10T17:31:00Z
+ Version
+ 13.1.3
+
+
+ BuildID
+ 17A860
+ Filesize
+ 3654014311
+ Identifier
+ iPhone8,1
+ MD5sum
+ 5c247ad50b0bd470ea976c742bc42240
+ ReleaseDate
+ 2019-09-30T17:11:19Z
+ SHA1sum
+ a90465c172cd77bcb5bf112993c8ee7caba632d1
+ Signed
+
+ URL
+ http://updates-http.cdn-apple.com/2019FallFCS/fullrestores/061-22597/37272F4C-E18B-11E9-9F72-B96496A9EC6E/iPhone_4.7_13.1.2_17A860_Restore.ipsw
+ UploadDate
+ 2019-09-28T01:09:45Z
+ Version
+ 13.1.2
+
+
+ BuildID
+ 17A854
+ Filesize
+ 3651115452
+ Identifier
+ iPhone8,1
+ MD5sum
+ a902e7dae4d9f15fe9d1a1a317a04740
+ ReleaseDate
+ 2019-09-27T16:58:00Z
+ SHA1sum
+ 6fd3eaa23d13d26f8174c353d92b55c0ecc1698b
+ Signed
+
+ URL
+ http://updates-http.cdn-apple.com/2019FallFCS/fullrestores/061-18421/E8F8D60E-DED8-11E9-A685-B200DC34986D/iPhone_4.7_13.1.1_17A854_Restore.ipsw
+ UploadDate
+ 2019-09-24T14:51:54Z
+ Version
+ 13.1.1
+
+
+ BuildID
+ 17A844
+ Filesize
+ 3652404986
+ Identifier
+ iPhone8,1
+ MD5sum
+ a8cc4f157d799b1776028c7ce305ddf2
+ ReleaseDate
+ 2019-09-24T17:03:38Z
+ SHA1sum
+ 3421b3825922e4f3d32e890a75b8ad3ba69a69f2
+ Signed
+
+ URL
+ http://updates-http.cdn-apple.com/2019FallFCS/fullrestores/091-99496/DCDE77CC-D986-11E9-AC76-A120DCDBD6A3/iPhone_4.7_13.1_17A844_Restore.ipsw
+ UploadDate
+ 2019-09-17T20:21:50Z
+ Version
+ 13.1
+
+
+ Identifier
+ iPhone8,1
+ Name
+ iPhone 6s
+ Platform
+ s8000
+
+
+ example2:
+ value: >
+
+
+
+
+
+
+ BDID
+ 4
+ BoardConfig
+ N56AP
+ Boards
+
+
+ BDID
+ 4
+ BoardConfig
+ N56AP
+ CPID
+ 28672
+ Platform
+ t7000
+
+
+ CPID
+ 28672
+ Firmwares
+
+
+ BuildID
+ 16G114
+ Filesize
+ 3328746693
+ Identifier
+ iPhone7,1
+ MD5sum
+ 10d9aeb0d87a04a40417be05c0b19a44
+ ReleaseDate
+ 2019-09-26T17:04:56Z
+ SHA1sum
+ 58a91fa4d73077133772e464f761c96ad91df683
+ Signed
+
+ URL
+ http://updates-http.cdn-apple.com/2019SummerFCS/fullrestores/061-20538/FD3DCDB6-DC8C-11E9-ABB0-278C66A83945/iPhone_5.5_12.4.2_16G114_Restore.ipsw
+ UploadDate
+ 2019-09-21T16:42:04Z
+ Version
+ 12.4.2
+
+
+ BuildID
+ 16G102
+ Filesize
+ 3345837529
+ Identifier
+ iPhone7,1
+ MD5sum
+ 8a374df4132aedddd0207c8978080b35
+ ReleaseDate
+ 2019-08-26T18:30:09Z
+ SHA1sum
+ 671863b1a34cb4d8abc44919679c645f0500486d
+ Signed
+
+ URL
+ http://updates-http.cdn-apple.com/2019SummerFCS/fullrestores/061-05190/A449778A-C4E7-11E9-BE68-18610AD8B7A1/iPhone_5.5_12.4.1_16G102_Restore.ipsw
+ UploadDate
+ 2019-08-22T14:27:57Z
+ Version
+ 12.4.1
+
+
+ BuildID
+ 16G77
+ Filesize
+ 3345389368
+ Identifier
+ iPhone7,1
+ MD5sum
+ 75279e6f2f850ba825addfe590afb8ba
+ ReleaseDate
+ 2019-07-22T17:08:32Z
+ SHA1sum
+ e435aa95763167106707e5d6534a4dcb66408f18
+ Signed
+
+ URL
+ http://updates-http.cdn-apple.com/2019SummerFCS/fullrestores/041-86579/9E26E61A-A743-11E9-87D6-F185B65480B0/iPhone_5.5_12.4_16G77_Restore.ipsw
+ UploadDate
+ 2019-07-15T21:08:52Z
+ Version
+ 12.4
+
+
+ BuildID
+ 16F203
+ Filesize
+ 3339505439
+ Identifier
+ iPhone7,1
+ MD5sum
+ 84a83ab5e05e2560fd6b08d6c014cd82
+ ReleaseDate
+ 2019-05-24T17:02:33Z
+ SHA1sum
+ a168b1bc901fb64cf725ab0dcca183dd684770dc
+ Signed
+
+ URL
+ http://updates-http.cdn-apple.com/2019SpringFCS/fullrestores/041-68573/CC468F46-7C96-11E9-80BA-4EF06256CCDB/iPhone_5.5_12.3.1_16F203_Restore.ipsw
+ UploadDate
+ 2019-05-22T13:57:50Z
+ Version
+ 12.3.1
+
+
+ Identifier
+ iPhone7,1
+ Name
+ iPhone 6+
+ Platform
+ t7000
+
+
+ example3:
+ value: >
+
+
+
+
+
+
+ BDID
+ 4
+ BoardConfig
+ n82ap
+ Boards
+
+
+ BDID
+ 4
+ BoardConfig
+ n82ap
+ CPID
+ 35072
+ Platform
+ s5l8900x
+
+
+ CPID
+ 35072
+ Firmwares
+
+
+ BuildID
+ 8C148
+ Filesize
+ 338579762
+ Identifier
+ iPhone1,2
+ MD5sum
+ 8b1657935408a1638b69740b282f62b3
+ ReleaseDate
+ null
+ SHA1sum
+ d2ed58586e8ca2153f2e2ec585bba8afc5173378
+ Signed
+
+ URL
+ http://appldnld.apple.com/iPhone4/061-9853.20101122.Vfgt5/iPhone1,2_4.2.1_8C148_Restore.ipsw
+ UploadDate
+ 2010-11-18T17:30:48Z
+ Version
+ 4.2.1
+
+
+ BuildID
+ 8B117
+ Filesize
+ 323137556
+ Identifier
+ iPhone1,2
+ MD5sum
+ 8cc589baad3c80dd8324c37d7dc00750
+ ReleaseDate
+ null
+ SHA1sum
+ d87bab469dd1146ab83ddcc23f03b3164d7e09d4
+ Signed
+
+ URL
+ http://appldnld.apple.com/iPhone4/061-7932.20100908.3fgt5/iPhone1,2_4.1_8B117_Restore.ipsw
+ UploadDate
+ 2010-09-03T14:12:24Z
+ Version
+ 4.1
+
+
+ BuildID
+ 8A400
+ Filesize
+ 320216794
+ Identifier
+ iPhone1,2
+ MD5sum
+ 6f3aefe1f8f516ae6e91fe993749347a
+ ReleaseDate
+ null
+ SHA1sum
+ ee2bc74719170a7a2440b593b6f300727c930c69
+ Signed
+
+ URL
+ http://appldnld.apple.com/iPhone4/061-8802.20100811.XcfpR/iPhone1,2_4.0.2_8A400_Restore.ipsw
+ UploadDate
+ 2010-08-09T19:52:20Z
+ Version
+ 4.0.2
+
+
+ BuildID
+ 8A306
+ Filesize
+ 320237975
+ Identifier
+ iPhone1,2
+ MD5sum
+ 8a952dbd03fa5e85da1a31092c651a25
+ ReleaseDate
+ null
+ SHA1sum
+ 940bd2b36c646f6673419eab661ac1f13248e592
+ Signed
+
+ URL
+ http://appldnld.apple.com/iPhone4/061-8616.20100715.phnt4/iPhone1,2_4.0.1_8A306_Restore.ipsw
+ UploadDate
+ 2010-07-13T20:13:59Z
+ Version
+ 4.0.1
+
+
+ Identifier
+ iPhone1,2
+ Name
+ iPhone 3G
+ Platform
+ s5l8900x
+
+
+ example4:
+ value: >
+
+
+
+
+
+
+ BDID
+ 2
+ BoardConfig
+ n45ap
+ Boards
+
+
+ BDID
+ 2
+ BoardConfig
+ n45ap
+ CPID
+ 35072
+ Platform
+ s5l8900x
+
+
+ CPID
+ 35072
+ Firmwares
+
+
+ BuildID
+ 4B1
+ Filesize
+ 173519637
+ Identifier
+ iPod1,1
+ MD5sum
+ 80b46fe8db7cfe58bb67e8553f495a8d
+ ReleaseDate
+ null
+ SHA1sum
+ 1b818911316e4248ee01d3ec67f9d39afc3db240
+ Signed
+
+ URL
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/bundles/061-4841.20080714.bgy8O/iPod1,1_1.1.5_4B1_Restore.ipsw
+ UploadDate
+ 2008-07-14T21:39:28Z
+ Version
+ 1.1.5
+
+
+ BuildID
+ 4A102
+ Filesize
+ 173519589
+ Identifier
+ iPod1,1
+ MD5sum
+ 0ed3435b4ead9aa5606ca0af66eedd90
+ ReleaseDate
+ null
+ SHA1sum
+ c148d1eb1c979bb6434175411d4a372103a4fdd2
+ Signed
+
+ URL
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/bundles/061-4312.20080226.Btu45/iPod1,1_1.1.4_4A102_Restore.ipsw
+ UploadDate
+ 2008-02-22T23:28:42Z
+ Version
+ 1.1.4
+
+
+ BuildID
+ 4A93
+ Filesize
+ 173511411
+ Identifier
+ iPod1,1
+ MD5sum
+ 12d996c376d378c1333b0343ddad6cb0
+ ReleaseDate
+ null
+ SHA1sum
+ 8dca23eec69d5ae58fbf3d4a23276e46cbb2e3c6
+ Signed
+
+ URL
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/061-4060.20080115.9Iuh5/iPod1,1_1.1.3_4A93_Restore.ipsw
+ UploadDate
+ 2008-01-10T04:03:18Z
+ Version
+ 1.1.3
+
+
+ BuildID
+ 3B48b
+ Filesize
+ 165567897
+ Identifier
+ iPod1,1
+ MD5sum
+ a7469c40e204a607becabaca841b718f
+ ReleaseDate
+ null
+ SHA1sum
+ 108d8ffe9ea75e61cd5e57170ad388b7fa00d923
+ Signed
+
+ URL
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/bundles/061-4036.20071107.9g3DF/iPod1,1_1.1.2_3B48b_Restore.ipsw
+ UploadDate
+ 2007-11-07T20:25:19Z
+ Version
+ 1.1.2
+
+
+ Identifier
+ iPod1,1
+ Name
+ iPod touch 1G
+ Platform
+ s5l8900x
+
+
+ example5:
+ value: >
+
+
+
+
+
+
+ BDID
+ 16
+ BoardConfig
+ k66ap
+ Boards
+
+
+ BDID
+ 16
+ BoardConfig
+ k66ap
+ CPID
+ 35120
+ Platform
+ s5l8930x
+
+
+ CPID
+ 35120
+ Firmwares
+
+
+ BuildID
+ 11D258
+ Filesize
+ 698547170
+ Identifier
+ AppleTV2,1
+ MD5sum
+ 6677e7611ebed25d8dc33d2401b75de2
+ ReleaseDate
+ 2014-09-17T17:59:02Z
+ SHA1sum
+ 4724347f2700dfe82fb864ecc8cdf66ea33262b1
+ Signed
+
+ URL
+ http://appldnld.apple.com/iOS8/031-07202.20140917.tF6Fs/AppleTV2,1_6.2.1_11D258_Restore.ipsw
+ UploadDate
+ 2014-09-03T17:55:56Z
+ Version
+ 7.1.2
+
+
+ BuildID
+ 11D257c
+ Filesize
+ 698406382
+ Identifier
+ AppleTV2,1
+ MD5sum
+ 2b5ad301db18658c06ba12841c250f4d
+ ReleaseDate
+ 2014-06-30T18:28:53Z
+ SHA1sum
+ a772321de7a4e4b5fa710ec3660d4a640c04ead8
+ Signed
+
+ URL
+ http://appldnld.apple.com/iOS7.1/031-04317.20140630.2qAFy/AppleTV2,1_6.2_11D257c_Restore.ipsw
+ UploadDate
+ 2014-06-27T22:43:09Z
+ Version
+ 7.1.2
+
+
+ BuildID
+ 11D201c
+ Filesize
+ 698303443
+ Identifier
+ AppleTV2,1
+ MD5sum
+ 1b8d3e39e1523aeee697c0be90236e9f
+ ReleaseDate
+ 2014-04-22T17:46:02Z
+ SHA1sum
+ 500dcc8878d0ef51b57f7c8260076d3970235d5a
+ Signed
+
+ URL
+ http://appldnld.apple.com/iOS7.1/031-01311.20140422.EaugX/AppleTV2,1_6.1.1_11D201c_Restore.ipsw
+ UploadDate
+ 2014-04-16T23:38:39Z
+ Version
+ 7.1.1
+
+
+ BuildID
+ 11D169b
+ Filesize
+ 698244610
+ Identifier
+ AppleTV2,1
+ MD5sum
+ 8107d3d44f22c234ccf15c976c8f0331
+ ReleaseDate
+ 2014-03-10T17:57:25Z
+ SHA1sum
+ db425818155c27df710547329c6bcdd3a7f78c1e
+ Signed
+
+ URL
+ http://appldnld.apple.com/iOS7.1/031-4478.20140310.XDdib/AppleTV2,1_6.1_11D169b_Restore.ipsw
+ UploadDate
+ 2014-03-06T20:49:52Z
+ Version
+ 7.1
+
+
+ Identifier
+ AppleTV2,1
+ Name
+ Apple TV 2G
+ Platform
+ s5l8930x
+
+
+ example6:
+ value: >
+
+
+
+
+
+
+ BDID
+ 0
+ BoardConfig
+ N41AP
+ Boards
+
+
+ BDID
+ 0
+ BoardConfig
+ N41AP
+ CPID
+ 35152
+ Platform
+ s5l8950x
+
+
+ CPID
+ 35152
+ Firmwares
+
+
+ BuildID
+ 14G61
+ Filesize
+ 66410207
+ Identifier
+ iPhone5,1
+ MarketingVersion
+
+ PrerequisiteBuild
+ 14F89
+ PrerequisiteVersion
+ 10.3.2
+ ReleaseDate
+ 2019-07-22T17:07:55Z
+ Releasetype
+
+ Signed
+
+ URL
+ http://updates-http.cdn-apple.com/2019/ios/091-24443-20190722-9357424A-9931-11E9-BCE8-56D0A77C2E40/com_apple_MobileAsset_SoftwareUpdate/fb90f2903f57aceabaf43bdc5aa99364faa8593e.zip
+ UploadDate
+ 2019-06-27T23:34:39Z
+ Version
+ 10.3.4
+
+
+ BuildID
+ 14G61
+ Filesize
+ 48460066
+ Identifier
+ iPhone5,1
+ MarketingVersion
+
+ PrerequisiteBuild
+ 14G57
+ PrerequisiteVersion
+ 10.3.3
+ ReleaseDate
+ 2019-07-22T17:07:56Z
+ Releasetype
+
+ Signed
+
+ URL
+ http://updates-http.cdn-apple.com/2019/ios/091-24423-20190722-9357424A-9931-11E9-BCE8-53D0A77C2E40/com_apple_MobileAsset_SoftwareUpdate/1bc7b173cae90361d7820409ecc2fa5d5427144a.zip
+ UploadDate
+ 2019-06-27T23:34:34Z
+ Version
+ 10.3.4
+
+
+ BuildID
+ 14G61
+ Filesize
+ 36390797
+ Identifier
+ iPhone5,1
+ MarketingVersion
+
+ PrerequisiteBuild
+ 14G60
+ PrerequisiteVersion
+ 10.3.3
+ ReleaseDate
+ 2019-07-22T17:07:56Z
+ Releasetype
+
+ Signed
+
+ URL
+ http://updates-http.cdn-apple.com/2019/ios/091-24531-20190722-93574B96-9931-11E9-B99A-5FD0A77C2E40/com_apple_MobileAsset_SoftwareUpdate/510f3fd40401a3fb35b1a22fa160f9a29730ec0c.zip
+ UploadDate
+ 2019-06-27T23:34:27Z
+ Version
+ 10.3.4
+
+
+ BuildID
+ 14G61
+ Filesize
+ 143957900
+ Identifier
+ iPhone5,1
+ MarketingVersion
+
+ PrerequisiteBuild
+ 14E304
+ PrerequisiteVersion
+ 10.3.1
+ ReleaseDate
+ 2019-07-22T17:07:55Z
+ Releasetype
+
+ Signed
+
+ URL
+ http://updates-http.cdn-apple.com/2019/ios/091-24126-20190722-93574042-9931-11E9-BCE8-43D0A77C2E40/com_apple_MobileAsset_SoftwareUpdate/716406ffa26c805728d3078b56129ac07fc6516c.zip
+ UploadDate
+ 2019-06-27T23:34:27Z
+ Version
+ 10.3.4
+
+
+ Identifier
+ iPhone5,1
+ Name
+ iPhone 5 (GSM)
+ Platform
+ s5l8950x
+
+
+ application/xml:
+ examples:
+ example1:
+ value: |
+
+
+
+ iPhone 6s
+ iPhone8,1
+
+ iPhone8,1
+ 13.1.3
+ 17A878
+ 96be7a8e55ec4bd1867bd1d7f18b1f24f8731838
+ e7f95f23dd0d8f406b2ef95d4b63bc5c
+ 3652675161
+ http://updates-http.cdn-apple.com/2019FallFCS/fullrestores/061-30582/2A093596-EB7A-11E9-9505-C810329334FA/iPhone_4.7_13.1.3_17A878_Restore.ipsw
+ 2019-10-15T17:00:31Z
+ 2019-10-10T17:31:00Z
+ false
+ true
+
+
+ iPhone8,1
+ 13.1.2
+ 17A860
+ a90465c172cd77bcb5bf112993c8ee7caba632d1
+ 5c247ad50b0bd470ea976c742bc42240
+ 3654014311
+ http://updates-http.cdn-apple.com/2019FallFCS/fullrestores/061-22597/37272F4C-E18B-11E9-9F72-B96496A9EC6E/iPhone_4.7_13.1.2_17A860_Restore.ipsw
+ 2019-09-30T17:11:19Z
+ 2019-09-28T01:09:45Z
+ false
+ true
+
+
+ iPhone8,1
+ 13.1.1
+ 17A854
+ 6fd3eaa23d13d26f8174c353d92b55c0ecc1698b
+ a902e7dae4d9f15fe9d1a1a317a04740
+ 3651115452
+ http://updates-http.cdn-apple.com/2019FallFCS/fullrestores/061-18421/E8F8D60E-DED8-11E9-A685-B200DC34986D/iPhone_4.7_13.1.1_17A854_Restore.ipsw
+ 2019-09-27T16:58:00Z
+ 2019-09-24T14:51:54Z
+ false
+ false
+
+
+ iPhone8,1
+ 13.1
+ 17A844
+ 3421b3825922e4f3d32e890a75b8ad3ba69a69f2
+ a8cc4f157d799b1776028c7ce305ddf2
+ 3652404986
+ http://updates-http.cdn-apple.com/2019FallFCS/fullrestores/091-99496/DCDE77CC-D986-11E9-AC76-A120DCDBD6A3/iPhone_4.7_13.1_17A844_Restore.ipsw
+ 2019-09-24T17:03:38Z
+ 2019-09-17T20:21:50Z
+ false
+ false
+
+
+ N71AP
+ s8000
+ 32768
+ 4
+
+
+ N71mAP
+ s8003
+ 32771
+ 4
+
+ N71AP
+ s8000
+ 32768
+ 4
+
+
+ example2:
+ value: |
+
+
+
+ iPhone 6+
+ iPhone7,1
+
+ iPhone7,1
+ 12.4.2
+ 16G114
+ 58a91fa4d73077133772e464f761c96ad91df683
+ 10d9aeb0d87a04a40417be05c0b19a44
+ 3328746693
+ http://updates-http.cdn-apple.com/2019SummerFCS/fullrestores/061-20538/FD3DCDB6-DC8C-11E9-ABB0-278C66A83945/iPhone_5.5_12.4.2_16G114_Restore.ipsw
+ 2019-09-26T17:04:56Z
+ 2019-09-21T16:42:04Z
+ false
+ true
+
+
+ iPhone7,1
+ 12.4.1
+ 16G102
+ 671863b1a34cb4d8abc44919679c645f0500486d
+ 8a374df4132aedddd0207c8978080b35
+ 3345837529
+ http://updates-http.cdn-apple.com/2019SummerFCS/fullrestores/061-05190/A449778A-C4E7-11E9-BE68-18610AD8B7A1/iPhone_5.5_12.4.1_16G102_Restore.ipsw
+ 2019-08-26T18:30:09Z
+ 2019-08-22T14:27:57Z
+ false
+ false
+
+
+ iPhone7,1
+ 12.4
+ 16G77
+ e435aa95763167106707e5d6534a4dcb66408f18
+ 75279e6f2f850ba825addfe590afb8ba
+ 3345389368
+ http://updates-http.cdn-apple.com/2019SummerFCS/fullrestores/041-86579/9E26E61A-A743-11E9-87D6-F185B65480B0/iPhone_5.5_12.4_16G77_Restore.ipsw
+ 2019-07-22T17:08:32Z
+ 2019-07-15T21:08:52Z
+ false
+ false
+
+
+ iPhone7,1
+ 12.3.1
+ 16F203
+ a168b1bc901fb64cf725ab0dcca183dd684770dc
+ 84a83ab5e05e2560fd6b08d6c014cd82
+ 3339505439
+ http://updates-http.cdn-apple.com/2019SpringFCS/fullrestores/041-68573/CC468F46-7C96-11E9-80BA-4EF06256CCDB/iPhone_5.5_12.3.1_16F203_Restore.ipsw
+ 2019-05-24T17:02:33Z
+ 2019-05-22T13:57:50Z
+ false
+ false
+
+
+ N56AP
+ t7000
+ 28672
+ 4
+
+ N56AP
+ t7000
+ 28672
+ 4
+
+
+ example3:
+ value: |
+
+
+
+ iPhone 3G
+ iPhone1,2
+
+ iPhone1,2
+ 4.2.1
+ 8C148
+ d2ed58586e8ca2153f2e2ec585bba8afc5173378
+ 8b1657935408a1638b69740b282f62b3
+ 338579762
+ http://appldnld.apple.com/iPhone4/061-9853.20101122.Vfgt5/iPhone1,2_4.2.1_8C148_Restore.ipsw
+ null
+ 2010-11-18T17:30:48Z
+ false
+ true
+
+
+ iPhone1,2
+ 4.1
+ 8B117
+ d87bab469dd1146ab83ddcc23f03b3164d7e09d4
+ 8cc589baad3c80dd8324c37d7dc00750
+ 323137556
+ http://appldnld.apple.com/iPhone4/061-7932.20100908.3fgt5/iPhone1,2_4.1_8B117_Restore.ipsw
+ null
+ 2010-09-03T14:12:24Z
+ false
+ true
+
+
+ iPhone1,2
+ 4.0.2
+ 8A400
+ ee2bc74719170a7a2440b593b6f300727c930c69
+ 6f3aefe1f8f516ae6e91fe993749347a
+ 320216794
+ http://appldnld.apple.com/iPhone4/061-8802.20100811.XcfpR/iPhone1,2_4.0.2_8A400_Restore.ipsw
+ null
+ 2010-08-09T19:52:20Z
+ false
+ true
+
+
+ iPhone1,2
+ 4.0.1
+ 8A306
+ 940bd2b36c646f6673419eab661ac1f13248e592
+ 8a952dbd03fa5e85da1a31092c651a25
+ 320237975
+ http://appldnld.apple.com/iPhone4/061-8616.20100715.phnt4/iPhone1,2_4.0.1_8A306_Restore.ipsw
+ null
+ 2010-07-13T20:13:59Z
+ false
+ true
+
+
+ n82ap
+ s5l8900x
+ 35072
+ 4
+
+ n82ap
+ s5l8900x
+ 35072
+ 4
+
+
+ example4:
+ value: |
+
+
+
+ iPod touch 1G
+ iPod1,1
+
+ iPod1,1
+ 1.1.5
+ 4B1
+ 1b818911316e4248ee01d3ec67f9d39afc3db240
+ 80b46fe8db7cfe58bb67e8553f495a8d
+ 173519637
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/bundles/061-4841.20080714.bgy8O/iPod1,1_1.1.5_4B1_Restore.ipsw
+ null
+ 2008-07-14T21:39:28Z
+ false
+ false
+
+
+ iPod1,1
+ 1.1.4
+ 4A102
+ c148d1eb1c979bb6434175411d4a372103a4fdd2
+ 0ed3435b4ead9aa5606ca0af66eedd90
+ 173519589
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/bundles/061-4312.20080226.Btu45/iPod1,1_1.1.4_4A102_Restore.ipsw
+ null
+ 2008-02-22T23:28:42Z
+ false
+ false
+
+
+ iPod1,1
+ 1.1.3
+ 4A93
+ 8dca23eec69d5ae58fbf3d4a23276e46cbb2e3c6
+ 12d996c376d378c1333b0343ddad6cb0
+ 173511411
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/061-4060.20080115.9Iuh5/iPod1,1_1.1.3_4A93_Restore.ipsw
+ null
+ 2008-01-10T04:03:18Z
+ false
+ false
+
+
+ iPod1,1
+ 1.1.2
+ 3B48b
+ 108d8ffe9ea75e61cd5e57170ad388b7fa00d923
+ a7469c40e204a607becabaca841b718f
+ 165567897
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/bundles/061-4036.20071107.9g3DF/iPod1,1_1.1.2_3B48b_Restore.ipsw
+ null
+ 2007-11-07T20:25:19Z
+ false
+ false
+
+
+ n45ap
+ s5l8900x
+ 35072
+ 2
+
+ n45ap
+ s5l8900x
+ 35072
+ 2
+
+
+ example5:
+ value: |
+
+
+
+ Apple TV 2G
+ AppleTV2,1
+
+ AppleTV2,1
+ 7.1.2
+ 11D258
+ 4724347f2700dfe82fb864ecc8cdf66ea33262b1
+ 6677e7611ebed25d8dc33d2401b75de2
+ 698547170
+ http://appldnld.apple.com/iOS8/031-07202.20140917.tF6Fs/AppleTV2,1_6.2.1_11D258_Restore.ipsw
+ 2014-09-17T17:59:02Z
+ 2014-09-03T17:55:56Z
+ false
+ true
+
+
+ AppleTV2,1
+ 7.1.2
+ 11D257c
+ a772321de7a4e4b5fa710ec3660d4a640c04ead8
+ 2b5ad301db18658c06ba12841c250f4d
+ 698406382
+ http://appldnld.apple.com/iOS7.1/031-04317.20140630.2qAFy/AppleTV2,1_6.2_11D257c_Restore.ipsw
+ 2014-06-30T18:28:53Z
+ 2014-06-27T22:43:09Z
+ false
+ false
+
+
+ AppleTV2,1
+ 7.1.1
+ 11D201c
+ 500dcc8878d0ef51b57f7c8260076d3970235d5a
+ 1b8d3e39e1523aeee697c0be90236e9f
+ 698303443
+ http://appldnld.apple.com/iOS7.1/031-01311.20140422.EaugX/AppleTV2,1_6.1.1_11D201c_Restore.ipsw
+ 2014-04-22T17:46:02Z
+ 2014-04-16T23:38:39Z
+ false
+ false
+
+
+ AppleTV2,1
+ 7.1
+ 11D169b
+ db425818155c27df710547329c6bcdd3a7f78c1e
+ 8107d3d44f22c234ccf15c976c8f0331
+ 698244610
+ http://appldnld.apple.com/iOS7.1/031-4478.20140310.XDdib/AppleTV2,1_6.1_11D169b_Restore.ipsw
+ 2014-03-10T17:57:25Z
+ 2014-03-06T20:49:52Z
+ false
+ false
+
+
+ k66ap
+ s5l8930x
+ 35120
+ 16
+
+ k66ap
+ s5l8930x
+ 35120
+ 16
+
+
+ example6:
+ value: |
+
+
+
+ iPhone 5 (GSM)
+ iPhone5,1
+
+ iPhone5,1
+ 14G61
+ 10.3.4
+ http://updates-http.cdn-apple.com/2019/ios/091-24443-20190722-9357424A-9931-11E9-BCE8-56D0A77C2E40/com_apple_MobileAsset_SoftwareUpdate/fb90f2903f57aceabaf43bdc5aa99364faa8593e.zip
+ 66410207
+ 14F89
+ 10.3.2
+
+ 2019-06-27T23:34:39Z
+ 2019-07-22T17:07:55Z
+
+ true
+
+
+ iPhone5,1
+ 14G61
+ 10.3.4
+ http://updates-http.cdn-apple.com/2019/ios/091-24423-20190722-9357424A-9931-11E9-BCE8-53D0A77C2E40/com_apple_MobileAsset_SoftwareUpdate/1bc7b173cae90361d7820409ecc2fa5d5427144a.zip
+ 48460066
+ 14G57
+ 10.3.3
+
+ 2019-06-27T23:34:34Z
+ 2019-07-22T17:07:56Z
+
+ true
+
+
+ iPhone5,1
+ 14G61
+ 10.3.4
+ http://updates-http.cdn-apple.com/2019/ios/091-24531-20190722-93574B96-9931-11E9-B99A-5FD0A77C2E40/com_apple_MobileAsset_SoftwareUpdate/510f3fd40401a3fb35b1a22fa160f9a29730ec0c.zip
+ 36390797
+ 14G60
+ 10.3.3
+
+ 2019-06-27T23:34:27Z
+ 2019-07-22T17:07:56Z
+
+ true
+
+
+ iPhone5,1
+ 14G61
+ 10.3.4
+ http://updates-http.cdn-apple.com/2019/ios/091-24126-20190722-93574042-9931-11E9-BCE8-43D0A77C2E40/com_apple_MobileAsset_SoftwareUpdate/716406ffa26c805728d3078b56129ac07fc6516c.zip
+ 143957900
+ 14E304
+ 10.3.1
+
+ 2019-06-27T23:34:27Z
+ 2019-07-22T17:07:55Z
+
+ true
+
+
+ N41AP
+ s5l8950x
+ 35152
+ 0
+
+ N41AP
+ s5l8950x
+ 35152
+ 0
+
+
+ '404':
+ description: Not Found
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content: {}
+ summary: Get Firmwares For Device
+ operationId: getDevice
+ description: >-
+ GetFirmwaresForDevice returns Firmwares for a given Device. An optional
+ "type" get parameter may be
+
+ specified to retrieve OTA Firmwares instead of normal IPSW files.
+
+ As of 2021-03-04, it is recommended that you use the "boards" property
+ of the device, as devices can have multiple boards.
+ tags:
+ - Api
+ parameters:
+ - name: identifier
+ in: path
+ description: ''
+ required: true
+ example: iPhone8,1
+ schema:
+ type: string
+ - name: type
+ in: query
+ description: ''
+ required: true
+ example: ipsw
+ schema:
+ type: string
+
+ /devices:
+ get:
+ responses:
+ '200':
+ description: OK
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Cache-Control:
+ schema:
+ type: string
+ Expires:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ schema:
+ $ref: '#/components/schemas/Device'
+ example:
+ - name: iPhone 2G
+ identifier: iPhone1,1
+ boards:
+ - boardconfig: m68ap
+ platform: s5l8900x
+ cpid: 35072
+ bdid: 0
+ boardconfig: m68ap
+ platform: s5l8900x
+ cpid: 35072
+ bdid: 0
+ - name: iPhone 3G
+ identifier: iPhone1,2
+ boards:
+ - boardconfig: n82ap
+ platform: s5l8900x
+ cpid: 35072
+ bdid: 4
+ boardconfig: n82ap
+ platform: s5l8900x
+ cpid: 35072
+ bdid: 4
+ - name: iPhone 3G[S]
+ identifier: iPhone2,1
+ boards:
+ - boardconfig: n88ap
+ platform: s5l8920x
+ cpid: 35104
+ bdid: 0
+ boardconfig: n88ap
+ platform: s5l8920x
+ cpid: 35104
+ bdid: 0
+ - name: iPhone 4 (GSM)
+ identifier: iPhone3,1
+ boards:
+ - boardconfig: n90ap
+ platform: s5l8930x
+ cpid: 35120
+ bdid: 0
+ boardconfig: n90ap
+ platform: s5l8930x
+ cpid: 35120
+ bdid: 0
+ application/x-plist:
+ example: >
+
+
+
+
+
+
+
+ BDID
+ 0
+ BoardConfig
+ m68ap
+ Boards
+
+
+ BDID
+ 0
+ BoardConfig
+ m68ap
+ CPID
+ 35072
+ Platform
+ s5l8900x
+
+
+ CPID
+ 35072
+ Firmwares
+ Identifier
+ iPhone1,1
+ Name
+ iPhone 2G
+ Platform
+ s5l8900x
+
+
+ BDID
+ 4
+ BoardConfig
+ n82ap
+ Boards
+
+
+ BDID
+ 4
+ BoardConfig
+ n82ap
+ CPID
+ 35072
+ Platform
+ s5l8900x
+
+
+ CPID
+ 35072
+ Firmwares
+ Identifier
+ iPhone1,2
+ Name
+ iPhone 3G
+ Platform
+ s5l8900x
+
+
+ BDID
+ 0
+ BoardConfig
+ n88ap
+ Boards
+
+
+ BDID
+ 0
+ BoardConfig
+ n88ap
+ CPID
+ 35104
+ Platform
+ s5l8920x
+
+
+ CPID
+ 35104
+ Firmwares
+ Identifier
+ iPhone2,1
+ Name
+ iPhone 3G[S]
+ Platform
+ s5l8920x
+
+
+ BDID
+ 0
+ BoardConfig
+ n90ap
+ Boards
+
+
+ BDID
+ 0
+ BoardConfig
+ n90ap
+ CPID
+ 35120
+ Platform
+ s5l8930x
+
+
+ CPID
+ 35120
+ Firmwares
+ Identifier
+ iPhone3,1
+ Name
+ iPhone 4 (GSM)
+ Platform
+ s5l8930x
+
+
+
+ application/xml:
+ example: |
+
+
+
+ iPhone 2G
+ iPhone1,1
+
+ m68ap
+ s5l8900x
+ 35072
+ 0
+
+ m68ap
+ s5l8900x
+ 35072
+ 0
+
+
+ iPhone 3G
+ iPhone1,2
+
+ n82ap
+ s5l8900x
+ 35072
+ 4
+
+ n82ap
+ s5l8900x
+ 35072
+ 4
+
+
+ iPhone 3G[S]
+ iPhone2,1
+
+ n88ap
+ s5l8920x
+ 35104
+ 0
+
+ n88ap
+ s5l8920x
+ 35104
+ 0
+
+
+ iPhone 4 (GSM)
+ iPhone3,1
+
+ n90ap
+ s5l8930x
+ 35120
+ 0
+
+ n90ap
+ s5l8930x
+ 35120
+ 0
+
+
+ summary: Get Devices
+ operationId: devices
+ description: >-
+ GetDevices returns a list of all devices known to IPSW Downloads
+
+ If you wish to only get devices which have Firmware Keys, add the
+ ?keysOnly=true parameter.
+
+ As of 2021-03-04, it is recommended that you use the "boards" property
+ of each device, as devices can have multiple boards.
+ tags:
+ - Api
+ parameters:
+ - name: keysOnly
+ in: query
+ description: ''
+ required: true
+ example: 'true'
+ schema:
+ type: boolean
+
+ /ipsw/download/{identifier}/{buildid}:
+ get:
+ responses:
+ '302':
+ description: Found
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Location:
+ schema:
+ type: string
+ content:
+ text/html; charset=utf-8:
+ examples:
+ example1:
+ value: >
+ Found.
+ example2:
+ value: >
+ Found.
+ '404':
+ description: Not Found
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content: {}
+ summary: Download IPSW
+ operationId: ipswDownload
+ description: >-
+ DownloadIPSW redirects to download an IPSW as specified by its
+ identifier and buildid
+ tags:
+ - Api
+ parameters:
+ - name: identifier
+ in: path
+ description: ''
+ required: true
+ example: iPhone7,1
+ schema:
+ type: string
+ - name: buildid
+ in: path
+ description: ''
+ required: true
+ example: 13A452
+ schema:
+ type: string
+ /ipsw/{identifier}/{buildid}:
+ get:
+ responses:
+ '200':
+ description: OK
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Cache-Control:
+ schema:
+ type: string
+ Expires:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Firmware'
+ examples:
+ example1:
+ value:
+ identifier: iPhone7,1
+ version: 11.1.1
+ buildid: 15B150
+ sha1sum: 8c12060e24a88948beea1d13c0aee27556da56cd
+ md5sum: 153f062e1d6c4c73dfedff8c251ac197
+ filesize: 2861115955
+ url: >-
+ http://appldnld.apple.com/ios11.1.1/091-42060-20171106-4525F990-C39A-11E7-B0E4-37BCF8FD2868/iPhone_5.5_11.1.1_15B150_Restore.ipsw
+ releasedate: '2017-11-09T17:58:14Z'
+ uploaddate: '2017-11-07T09:14:12Z'
+ signed: false
+ example2:
+ value:
+ identifier: iPhone6,1
+ version: 10.3.2
+ buildid: 14F89
+ sha1sum: ecf5350d9715769b400a6336f5267b4605bd2786
+ md5sum: 5ede4d1f9751bce2933f7465aea28658
+ filesize: 2540881652
+ url: >-
+ http://appldnld.apple.com/ios10.3.2/031-98771-20170515-E1F8ADA4-2F92-11E7-B86F-ED688FB7FE33/iPhone_4.0_64bit_10.3.2_14F89_Restore.ipsw
+ releasedate: '2017-05-15T17:13:42Z'
+ uploaddate: '2017-05-03T00:06:06Z'
+ signed: false
+ example3:
+ value:
+ identifier: iPhone1,2
+ version: '2.2'
+ buildid: 5G77
+ sha1sum: f67f8b2b842428bf89456cda0c2d5cf954d111a4
+ md5sum: fd33b6f92a6b5bc3dd0fa40b39a40c0c
+ filesize: 258342348
+ url: >-
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-5778.20081120.Aqw4R/iPhone1,2_2.2_5G77_Restore.ipsw
+ releasedate: null
+ uploaddate: '2008-11-17T22:00:12Z'
+ signed: false
+ application/x-plist:
+ examples:
+ example1:
+ value: >
+
+
+
+
+
+
+ BuildID
+ 15B150
+ Filesize
+ 2861115955
+ Identifier
+ iPhone7,1
+ MD5sum
+ 153f062e1d6c4c73dfedff8c251ac197
+ ReleaseDate
+ 2017-11-09T17:58:14Z
+ SHA1sum
+ 8c12060e24a88948beea1d13c0aee27556da56cd
+ Signed
+
+ URL
+ http://appldnld.apple.com/ios11.1.1/091-42060-20171106-4525F990-C39A-11E7-B0E4-37BCF8FD2868/iPhone_5.5_11.1.1_15B150_Restore.ipsw
+ UploadDate
+ 2017-11-07T09:14:12Z
+ Version
+ 11.1.1
+
+
+ example2:
+ value: >
+
+
+
+
+
+
+ BuildID
+ 14F89
+ Filesize
+ 2540881652
+ Identifier
+ iPhone6,1
+ MD5sum
+ 5ede4d1f9751bce2933f7465aea28658
+ ReleaseDate
+ 2017-05-15T17:13:42Z
+ SHA1sum
+ ecf5350d9715769b400a6336f5267b4605bd2786
+ Signed
+
+ URL
+ http://appldnld.apple.com/ios10.3.2/031-98771-20170515-E1F8ADA4-2F92-11E7-B86F-ED688FB7FE33/iPhone_4.0_64bit_10.3.2_14F89_Restore.ipsw
+ UploadDate
+ 2017-05-03T00:06:06Z
+ Version
+ 10.3.2
+
+
+ example3:
+ value: >
+
+
+
+
+
+
+ BuildID
+ 5G77
+ Filesize
+ 258342348
+ Identifier
+ iPhone1,2
+ MD5sum
+ fd33b6f92a6b5bc3dd0fa40b39a40c0c
+ ReleaseDate
+ null
+ SHA1sum
+ f67f8b2b842428bf89456cda0c2d5cf954d111a4
+ Signed
+
+ URL
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-5778.20081120.Aqw4R/iPhone1,2_2.2_5G77_Restore.ipsw
+ UploadDate
+ 2008-11-17T22:00:12Z
+ Version
+ 2.2
+
+
+ application/xml:
+ examples:
+ example1:
+ value: |
+
+
+
+ iPhone7,1
+ 11.1.1
+ 15B150
+ 8c12060e24a88948beea1d13c0aee27556da56cd
+ 153f062e1d6c4c73dfedff8c251ac197
+ 2861115955
+ http://appldnld.apple.com/ios11.1.1/091-42060-20171106-4525F990-C39A-11E7-B0E4-37BCF8FD2868/iPhone_5.5_11.1.1_15B150_Restore.ipsw
+ 2017-11-09T17:58:14Z
+ 2017-11-07T09:14:12Z
+ false
+ false
+
+
+ example2:
+ value: |
+
+
+
+ iPhone6,1
+ 10.3.2
+ 14F89
+ ecf5350d9715769b400a6336f5267b4605bd2786
+ 5ede4d1f9751bce2933f7465aea28658
+ 2540881652
+ http://appldnld.apple.com/ios10.3.2/031-98771-20170515-E1F8ADA4-2F92-11E7-B86F-ED688FB7FE33/iPhone_4.0_64bit_10.3.2_14F89_Restore.ipsw
+ 2017-05-15T17:13:42Z
+ 2017-05-03T00:06:06Z
+ false
+ false
+
+
+ example3:
+ value: |
+
+
+
+ iPhone1,2
+ 2.2
+ 5G77
+ f67f8b2b842428bf89456cda0c2d5cf954d111a4
+ fd33b6f92a6b5bc3dd0fa40b39a40c0c
+ 258342348
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-5778.20081120.Aqw4R/iPhone1,2_2.2_5G77_Restore.ipsw
+ null
+ 2008-11-17T22:00:12Z
+ false
+ false
+
+
+ '404':
+ description: Not Found
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content: {}
+ summary: Get IPSW Information
+ operationId: ipswByIdentifierAndBuild
+ description: >-
+ GetIPSWInformation returns all known information for an IPSW as
+ specified by identifier and buildid
+ tags:
+ - Api
+ parameters:
+ - name: identifier
+ in: path
+ description: ''
+ required: true
+ example: iPhone7,1
+ schema:
+ type: string
+ - name: buildid
+ in: path
+ description: ''
+ required: true
+ example: 15B150
+ schema:
+ type: string
+
+ /ipsw/{version}:
+ get:
+ responses:
+ '200':
+ description: OK
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Cache-Control:
+ schema:
+ type: string
+ Expires:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ schema:
+ $ref: '#/components/schemas/Firmware'
+ examples:
+ example1:
+ value:
+ - identifier: AppleTV2,1
+ version: 4.2.1
+ buildid: 8C154
+ sha1sum: c2b1adea595afa2b9caf633f0a820d3b66424dbf
+ md5sum: 3fe1a01b8f5c8425a074ffd6deea7c86
+ filesize: 279991056
+ url: >-
+ http://appldnld.apple.com/AppleTV/061-9978.20101214.gmabr/AppleTV2,1_4.2.1_8C154_Restore.ipsw
+ releasedate: null
+ uploaddate: '2010-12-13T05:04:45Z'
+ signed: false
+ - identifier: iPhone2,1
+ version: 4.2.1
+ buildid: 8C148a
+ sha1sum: 2787bb9fbf18594279d05682e6fd16d2b9612a2a
+ md5sum: d688d2d48c8b054367adef8e7ab4f5ea
+ filesize: 420813164
+ url: >-
+ http://appldnld.apple.com/iPhone4/061-9895.20101122.Cdew2/iPhone2,1_4.2.1_8C148a_Restore.ipsw
+ releasedate: null
+ uploaddate: '2010-11-21T12:59:55Z'
+ signed: false
+ - identifier: iPod4,1
+ version: 4.2.1
+ buildid: 8C148
+ sha1sum: 6a890696126d0cb7f9ccd6b913ecb09cf2029820
+ md5sum: 14d1508954532e91172f8704fd941a93
+ filesize: 638177119
+ url: >-
+ http://appldnld.apple.com/iPhone4/061-9859.20101122.$erft/iPod4,1_4.2.1_8C148_Restore.ipsw
+ releasedate: null
+ uploaddate: '2010-11-18T17:55:40Z'
+ signed: false
+ - identifier: iPad1,1
+ version: 4.2.1
+ buildid: 8C148
+ sha1sum: 8717b3bedc925b587566442ad375aa65d857e79a
+ md5sum: 9402d5f05348fd68c87f885ff4cb4717
+ filesize: 578084840
+ url: >-
+ http://appldnld.apple.com/iPad/061-9857.20101122.VGthy/iPad1,1_4.2.1_8C148_Restore.ipsw
+ releasedate: null
+ uploaddate: '2010-11-18T17:31:47Z'
+ signed: false
+ example2:
+ value:
+ - identifier: iPhone1,1
+ version: '2.2'
+ buildid: 5G77
+ sha1sum: cbfc6ff886ce89868a55547b9fb980dbf92e6418
+ md5sum: 3603b5d9536cd0b269261cab406a7c38
+ filesize: 257576980
+ url: >-
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-5779.20081120.Pt5yH/iPhone1,1_2.2_5G77_Restore.ipsw
+ releasedate: null
+ uploaddate: '2008-11-17T22:00:17Z'
+ signed: false
+ - identifier: iPhone1,2
+ version: '2.2'
+ buildid: 5G77
+ sha1sum: f67f8b2b842428bf89456cda0c2d5cf954d111a4
+ md5sum: fd33b6f92a6b5bc3dd0fa40b39a40c0c
+ filesize: 258342348
+ url: >-
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-5778.20081120.Aqw4R/iPhone1,2_2.2_5G77_Restore.ipsw
+ releasedate: null
+ uploaddate: '2008-11-17T22:00:12Z'
+ signed: false
+ - identifier: iPod2,1
+ version: '2.2'
+ buildid: 5G77a
+ sha1sum: 34a0a489605f34d6cc6c9954edcaaf9a050deedc
+ md5sum: 47e7d154616aff63c622f506568a96b2
+ filesize: 291123491
+ url: >-
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/061-5358.20081120.Gtghy/iPod2,1_2.2_5G77a_Restore.ipsw
+ releasedate: null
+ uploaddate: '2008-11-17T21:58:35Z'
+ signed: false
+ example3:
+ value:
+ - identifier: iPad5,1
+ version: 10.3.3
+ buildid: 14G60
+ sha1sum: ed9ac58b8817faa1abec0478a2d2710da42f19c4
+ md5sum: 9ca42a38b9804d93637b0b23d965190e
+ filesize: 2549277532
+ url: >-
+ http://appldnld.apple.com/ios10.3.3/091-23287-20170719-CA9523BC-6977-11E7-A56D-329100BA0AE3/iPad_64bit_TouchID_10.3.3_14G60_Restore.ipsw
+ releasedate: '2017-07-19T17:08:50Z'
+ uploaddate: '2017-07-15T16:27:39Z'
+ signed: false
+ - identifier: iPad3,4
+ version: 10.3.3
+ buildid: 14G60
+ sha1sum: 88bb926d58e9e2497fcc2a941987314fd6656cc2
+ md5sum: 612c6d5367cc6bb7032e70489a6ee4ca
+ filesize: 1930250488
+ url: >-
+ http://appldnld.apple.com/ios10.3.3/091-23117-20170719-CA973B02-6977-11E7-953B-279100BA0AE3/iPad_32bit_10.3.3_14G60_Restore.ipsw
+ releasedate: '2017-07-19T17:08:50Z'
+ uploaddate: '2017-07-15T16:27:38Z'
+ signed: true
+ - identifier: iPad6,11
+ version: 10.3.3
+ buildid: 14G60
+ sha1sum: 0bdf196a2e23a9f177402ce3bb047f0e828c0481
+ md5sum: eb4bbe3f1c1b2fdd12ea61921ca4d570
+ filesize: 2457699238
+ url: >-
+ http://appldnld.apple.com/ios10.3.3/091-23331-20170719-CA996666-6977-11E7-81A4-399100BA0AE3/iPad_6,11_iPad_6,12_10.3.3_14G60_Restore.ipsw
+ releasedate: '2017-07-19T17:08:48Z'
+ uploaddate: '2017-07-15T16:27:41Z'
+ signed: false
+ - identifier: iPhone7,2
+ version: 10.3.3
+ buildid: 14G60
+ sha1sum: c5e6caabd61022ed5580301cd8fec3c6c4bb4abf
+ md5sum: a3797cb1ee920204a97855b7657441ca
+ filesize: 2622984304
+ url: >-
+ http://appldnld.apple.com/ios10.3.3/091-23441-20170719-CA9B0570-6977-11E7-95CC-3F9100BA0AE3/iPhone_4.7_10.3.3_14G60_Restore.ipsw
+ releasedate: '2017-07-19T17:08:47Z'
+ uploaddate: '2017-07-15T16:29:01Z'
+ signed: false
+ example4:
+ value:
+ - identifier: iPhone1,1
+ version: 3.1.3
+ buildid: '7E18'
+ sha1sum: eab23a7f8d2a17cb71046c50fc5f67ec390a3c2b
+ md5sum: b8aebb134d92298adced1a22dfac6df2
+ filesize: 238319275
+ url: >-
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7481.20100202.4orot/iPhone1,1_3.1.3_7E18_Restore.ipsw
+ releasedate: null
+ uploaddate: '2010-01-22T01:53:08Z'
+ signed: false
+ - identifier: iPod3,1
+ version: 3.1.3
+ buildid: '7E18'
+ sha1sum: 375fd469b18bfc0b74c7cfa5b4d5945197b1d106
+ md5sum: a73de2cfafef3463e9afa491f20c5213
+ filesize: 295870806
+ url: >-
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7473.20100202.4i44t/iPod3,1_3.1.3_7E18_Restore.ipsw
+ releasedate: null
+ uploaddate: '2010-01-22T01:53:06Z'
+ signed: false
+ - identifier: iPhone2,1
+ version: 3.1.3
+ buildid: '7E18'
+ sha1sum: 8cb3775e62c6f72059a962bf891b4e145b965052
+ md5sum: 4117e4b22565e69205a84e9eeef0583e
+ filesize: 305122343
+ url: >-
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7472.20100202.8tugj/iPhone2,1_3.1.3_7E18_Restore.ipsw
+ releasedate: null
+ uploaddate: '2010-01-22T01:52:31Z'
+ signed: false
+ - identifier: iPhone1,2
+ version: 3.1.3
+ buildid: '7E18'
+ sha1sum: f5950afca546f93e281ba3cdb08bc0cfed7f0896
+ md5sum: 82e93e4e51b0e4503a8165507b8a3df2
+ filesize: 239139281
+ url: >-
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7468.20100202.pbnrt/iPhone1,2_3.1.3_7E18_Restore.ipsw
+ releasedate: null
+ uploaddate: '2010-01-22T01:49:43Z'
+ signed: false
+ application/x-plist:
+ examples:
+ example1:
+ value: >
+
+
+
+
+
+
+
+ BuildID
+ 8C154
+ Filesize
+ 279991056
+ Identifier
+ AppleTV2,1
+ MD5sum
+ 3fe1a01b8f5c8425a074ffd6deea7c86
+ ReleaseDate
+ null
+ SHA1sum
+ c2b1adea595afa2b9caf633f0a820d3b66424dbf
+ Signed
+
+ URL
+ http://appldnld.apple.com/AppleTV/061-9978.20101214.gmabr/AppleTV2,1_4.2.1_8C154_Restore.ipsw
+ UploadDate
+ 2010-12-13T05:04:45Z
+ Version
+ 4.2.1
+
+
+ BuildID
+ 8C148a
+ Filesize
+ 420813164
+ Identifier
+ iPhone2,1
+ MD5sum
+ d688d2d48c8b054367adef8e7ab4f5ea
+ ReleaseDate
+ null
+ SHA1sum
+ 2787bb9fbf18594279d05682e6fd16d2b9612a2a
+ Signed
+
+ URL
+ http://appldnld.apple.com/iPhone4/061-9895.20101122.Cdew2/iPhone2,1_4.2.1_8C148a_Restore.ipsw
+ UploadDate
+ 2010-11-21T12:59:55Z
+ Version
+ 4.2.1
+
+
+ BuildID
+ 8C148
+ Filesize
+ 638177119
+ Identifier
+ iPod4,1
+ MD5sum
+ 14d1508954532e91172f8704fd941a93
+ ReleaseDate
+ null
+ SHA1sum
+ 6a890696126d0cb7f9ccd6b913ecb09cf2029820
+ Signed
+
+ URL
+ http://appldnld.apple.com/iPhone4/061-9859.20101122.$erft/iPod4,1_4.2.1_8C148_Restore.ipsw
+ UploadDate
+ 2010-11-18T17:55:40Z
+ Version
+ 4.2.1
+
+
+ BuildID
+ 8C148
+ Filesize
+ 578084840
+ Identifier
+ iPad1,1
+ MD5sum
+ 9402d5f05348fd68c87f885ff4cb4717
+ ReleaseDate
+ null
+ SHA1sum
+ 8717b3bedc925b587566442ad375aa65d857e79a
+ Signed
+
+ URL
+ http://appldnld.apple.com/iPad/061-9857.20101122.VGthy/iPad1,1_4.2.1_8C148_Restore.ipsw
+ UploadDate
+ 2010-11-18T17:31:47Z
+ Version
+ 4.2.1
+
+
+
+ example2:
+ value: >
+
+
+
+
+
+
+
+ BuildID
+ 5G77
+ Filesize
+ 257576980
+ Identifier
+ iPhone1,1
+ MD5sum
+ 3603b5d9536cd0b269261cab406a7c38
+ ReleaseDate
+ null
+ SHA1sum
+ cbfc6ff886ce89868a55547b9fb980dbf92e6418
+ Signed
+
+ URL
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-5779.20081120.Pt5yH/iPhone1,1_2.2_5G77_Restore.ipsw
+ UploadDate
+ 2008-11-17T22:00:17Z
+ Version
+ 2.2
+
+
+ BuildID
+ 5G77
+ Filesize
+ 258342348
+ Identifier
+ iPhone1,2
+ MD5sum
+ fd33b6f92a6b5bc3dd0fa40b39a40c0c
+ ReleaseDate
+ null
+ SHA1sum
+ f67f8b2b842428bf89456cda0c2d5cf954d111a4
+ Signed
+
+ URL
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-5778.20081120.Aqw4R/iPhone1,2_2.2_5G77_Restore.ipsw
+ UploadDate
+ 2008-11-17T22:00:12Z
+ Version
+ 2.2
+
+
+ BuildID
+ 5G77a
+ Filesize
+ 291123491
+ Identifier
+ iPod2,1
+ MD5sum
+ 47e7d154616aff63c622f506568a96b2
+ ReleaseDate
+ null
+ SHA1sum
+ 34a0a489605f34d6cc6c9954edcaaf9a050deedc
+ Signed
+
+ URL
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/061-5358.20081120.Gtghy/iPod2,1_2.2_5G77a_Restore.ipsw
+ UploadDate
+ 2008-11-17T21:58:35Z
+ Version
+ 2.2
+
+
+
+ example3:
+ value: >
+
+
+
+
+
+
+
+ BuildID
+ 14G60
+ Filesize
+ 2549277532
+ Identifier
+ iPad5,1
+ MD5sum
+ 9ca42a38b9804d93637b0b23d965190e
+ ReleaseDate
+ 2017-07-19T17:08:50Z
+ SHA1sum
+ ed9ac58b8817faa1abec0478a2d2710da42f19c4
+ Signed
+
+ URL
+ http://appldnld.apple.com/ios10.3.3/091-23287-20170719-CA9523BC-6977-11E7-A56D-329100BA0AE3/iPad_64bit_TouchID_10.3.3_14G60_Restore.ipsw
+ UploadDate
+ 2017-07-15T16:27:39Z
+ Version
+ 10.3.3
+
+
+ BuildID
+ 14G60
+ Filesize
+ 1930250488
+ Identifier
+ iPad3,4
+ MD5sum
+ 612c6d5367cc6bb7032e70489a6ee4ca
+ ReleaseDate
+ 2017-07-19T17:08:50Z
+ SHA1sum
+ 88bb926d58e9e2497fcc2a941987314fd6656cc2
+ Signed
+
+ URL
+ http://appldnld.apple.com/ios10.3.3/091-23117-20170719-CA973B02-6977-11E7-953B-279100BA0AE3/iPad_32bit_10.3.3_14G60_Restore.ipsw
+ UploadDate
+ 2017-07-15T16:27:38Z
+ Version
+ 10.3.3
+
+
+ BuildID
+ 14G60
+ Filesize
+ 2457699238
+ Identifier
+ iPad6,11
+ MD5sum
+ eb4bbe3f1c1b2fdd12ea61921ca4d570
+ ReleaseDate
+ 2017-07-19T17:08:48Z
+ SHA1sum
+ 0bdf196a2e23a9f177402ce3bb047f0e828c0481
+ Signed
+
+ URL
+ http://appldnld.apple.com/ios10.3.3/091-23331-20170719-CA996666-6977-11E7-81A4-399100BA0AE3/iPad_6,11_iPad_6,12_10.3.3_14G60_Restore.ipsw
+ UploadDate
+ 2017-07-15T16:27:41Z
+ Version
+ 10.3.3
+
+
+ BuildID
+ 14G60
+ Filesize
+ 2622984304
+ Identifier
+ iPhone7,2
+ MD5sum
+ a3797cb1ee920204a97855b7657441ca
+ ReleaseDate
+ 2017-07-19T17:08:47Z
+ SHA1sum
+ c5e6caabd61022ed5580301cd8fec3c6c4bb4abf
+ Signed
+
+ URL
+ http://appldnld.apple.com/ios10.3.3/091-23441-20170719-CA9B0570-6977-11E7-95CC-3F9100BA0AE3/iPhone_4.7_10.3.3_14G60_Restore.ipsw
+ UploadDate
+ 2017-07-15T16:29:01Z
+ Version
+ 10.3.3
+
+
+
+ example4:
+ value: >
+
+
+
+
+
+
+
+ BuildID
+ 7E18
+ Filesize
+ 238319275
+ Identifier
+ iPhone1,1
+ MD5sum
+ b8aebb134d92298adced1a22dfac6df2
+ ReleaseDate
+ null
+ SHA1sum
+ eab23a7f8d2a17cb71046c50fc5f67ec390a3c2b
+ Signed
+
+ URL
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7481.20100202.4orot/iPhone1,1_3.1.3_7E18_Restore.ipsw
+ UploadDate
+ 2010-01-22T01:53:08Z
+ Version
+ 3.1.3
+
+
+ BuildID
+ 7E18
+ Filesize
+ 295870806
+ Identifier
+ iPod3,1
+ MD5sum
+ a73de2cfafef3463e9afa491f20c5213
+ ReleaseDate
+ null
+ SHA1sum
+ 375fd469b18bfc0b74c7cfa5b4d5945197b1d106
+ Signed
+
+ URL
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7473.20100202.4i44t/iPod3,1_3.1.3_7E18_Restore.ipsw
+ UploadDate
+ 2010-01-22T01:53:06Z
+ Version
+ 3.1.3
+
+
+ BuildID
+ 7E18
+ Filesize
+ 305122343
+ Identifier
+ iPhone2,1
+ MD5sum
+ 4117e4b22565e69205a84e9eeef0583e
+ ReleaseDate
+ null
+ SHA1sum
+ 8cb3775e62c6f72059a962bf891b4e145b965052
+ Signed
+
+ URL
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7472.20100202.8tugj/iPhone2,1_3.1.3_7E18_Restore.ipsw
+ UploadDate
+ 2010-01-22T01:52:31Z
+ Version
+ 3.1.3
+
+
+ BuildID
+ 7E18
+ Filesize
+ 239139281
+ Identifier
+ iPhone1,2
+ MD5sum
+ 82e93e4e51b0e4503a8165507b8a3df2
+ ReleaseDate
+ null
+ SHA1sum
+ f5950afca546f93e281ba3cdb08bc0cfed7f0896
+ Signed
+
+ URL
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7468.20100202.pbnrt/iPhone1,2_3.1.3_7E18_Restore.ipsw
+ UploadDate
+ 2010-01-22T01:49:43Z
+ Version
+ 3.1.3
+
+
+
+ application/xml:
+ examples:
+ example1:
+ value: |
+
+
+
+ AppleTV2,1
+ 4.2.1
+ 8C154
+ c2b1adea595afa2b9caf633f0a820d3b66424dbf
+ 3fe1a01b8f5c8425a074ffd6deea7c86
+ 279991056
+ http://appldnld.apple.com/AppleTV/061-9978.20101214.gmabr/AppleTV2,1_4.2.1_8C154_Restore.ipsw
+ null
+ 2010-12-13T05:04:45Z
+ false
+ false
+
+
+ iPhone2,1
+ 4.2.1
+ 8C148a
+ 2787bb9fbf18594279d05682e6fd16d2b9612a2a
+ d688d2d48c8b054367adef8e7ab4f5ea
+ 420813164
+ http://appldnld.apple.com/iPhone4/061-9895.20101122.Cdew2/iPhone2,1_4.2.1_8C148a_Restore.ipsw
+ null
+ 2010-11-21T12:59:55Z
+ false
+ false
+
+
+ iPod4,1
+ 4.2.1
+ 8C148
+ 6a890696126d0cb7f9ccd6b913ecb09cf2029820
+ 14d1508954532e91172f8704fd941a93
+ 638177119
+ http://appldnld.apple.com/iPhone4/061-9859.20101122.$erft/iPod4,1_4.2.1_8C148_Restore.ipsw
+ null
+ 2010-11-18T17:55:40Z
+ false
+ false
+
+
+ iPad1,1
+ 4.2.1
+ 8C148
+ 8717b3bedc925b587566442ad375aa65d857e79a
+ 9402d5f05348fd68c87f885ff4cb4717
+ 578084840
+ http://appldnld.apple.com/iPad/061-9857.20101122.VGthy/iPad1,1_4.2.1_8C148_Restore.ipsw
+ null
+ 2010-11-18T17:31:47Z
+ false
+ false
+
+
+ example2:
+ value: |
+
+
+
+ iPhone1,1
+ 2.2
+ 5G77
+ cbfc6ff886ce89868a55547b9fb980dbf92e6418
+ 3603b5d9536cd0b269261cab406a7c38
+ 257576980
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-5779.20081120.Pt5yH/iPhone1,1_2.2_5G77_Restore.ipsw
+ null
+ 2008-11-17T22:00:17Z
+ false
+ false
+
+
+ iPhone1,2
+ 2.2
+ 5G77
+ f67f8b2b842428bf89456cda0c2d5cf954d111a4
+ fd33b6f92a6b5bc3dd0fa40b39a40c0c
+ 258342348
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-5778.20081120.Aqw4R/iPhone1,2_2.2_5G77_Restore.ipsw
+ null
+ 2008-11-17T22:00:12Z
+ false
+ false
+
+
+ iPod2,1
+ 2.2
+ 5G77a
+ 34a0a489605f34d6cc6c9954edcaaf9a050deedc
+ 47e7d154616aff63c622f506568a96b2
+ 291123491
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPod/SBML/osx/061-5358.20081120.Gtghy/iPod2,1_2.2_5G77a_Restore.ipsw
+ null
+ 2008-11-17T21:58:35Z
+ false
+ false
+
+
+ example3:
+ value: |
+
+
+
+ iPad5,1
+ 10.3.3
+ 14G60
+ ed9ac58b8817faa1abec0478a2d2710da42f19c4
+ 9ca42a38b9804d93637b0b23d965190e
+ 2549277532
+ http://appldnld.apple.com/ios10.3.3/091-23287-20170719-CA9523BC-6977-11E7-A56D-329100BA0AE3/iPad_64bit_TouchID_10.3.3_14G60_Restore.ipsw
+ 2017-07-19T17:08:50Z
+ 2017-07-15T16:27:39Z
+ false
+ false
+
+
+ iPad3,4
+ 10.3.3
+ 14G60
+ 88bb926d58e9e2497fcc2a941987314fd6656cc2
+ 612c6d5367cc6bb7032e70489a6ee4ca
+ 1930250488
+ http://appldnld.apple.com/ios10.3.3/091-23117-20170719-CA973B02-6977-11E7-953B-279100BA0AE3/iPad_32bit_10.3.3_14G60_Restore.ipsw
+ 2017-07-19T17:08:50Z
+ 2017-07-15T16:27:38Z
+ false
+ true
+
+
+ iPad6,11
+ 10.3.3
+ 14G60
+ 0bdf196a2e23a9f177402ce3bb047f0e828c0481
+ eb4bbe3f1c1b2fdd12ea61921ca4d570
+ 2457699238
+ http://appldnld.apple.com/ios10.3.3/091-23331-20170719-CA996666-6977-11E7-81A4-399100BA0AE3/iPad_6,11_iPad_6,12_10.3.3_14G60_Restore.ipsw
+ 2017-07-19T17:08:48Z
+ 2017-07-15T16:27:41Z
+ false
+ false
+
+
+ iPhone7,2
+ 10.3.3
+ 14G60
+ c5e6caabd61022ed5580301cd8fec3c6c4bb4abf
+ a3797cb1ee920204a97855b7657441ca
+ 2622984304
+ http://appldnld.apple.com/ios10.3.3/091-23441-20170719-CA9B0570-6977-11E7-95CC-3F9100BA0AE3/iPhone_4.7_10.3.3_14G60_Restore.ipsw
+ 2017-07-19T17:08:47Z
+ 2017-07-15T16:29:01Z
+ false
+ false
+
+
+ example4:
+ value: |
+
+
+
+ iPhone1,1
+ 3.1.3
+ 7E18
+ eab23a7f8d2a17cb71046c50fc5f67ec390a3c2b
+ b8aebb134d92298adced1a22dfac6df2
+ 238319275
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7481.20100202.4orot/iPhone1,1_3.1.3_7E18_Restore.ipsw
+ null
+ 2010-01-22T01:53:08Z
+ false
+ false
+
+
+ iPod3,1
+ 3.1.3
+ 7E18
+ 375fd469b18bfc0b74c7cfa5b4d5945197b1d106
+ a73de2cfafef3463e9afa491f20c5213
+ 295870806
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7473.20100202.4i44t/iPod3,1_3.1.3_7E18_Restore.ipsw
+ null
+ 2010-01-22T01:53:06Z
+ false
+ false
+
+
+ iPhone2,1
+ 3.1.3
+ 7E18
+ 8cb3775e62c6f72059a962bf891b4e145b965052
+ 4117e4b22565e69205a84e9eeef0583e
+ 305122343
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7472.20100202.8tugj/iPhone2,1_3.1.3_7E18_Restore.ipsw
+ null
+ 2010-01-22T01:52:31Z
+ false
+ false
+
+
+ iPhone1,2
+ 3.1.3
+ 7E18
+ f5950afca546f93e281ba3cdb08bc0cfed7f0896
+ 82e93e4e51b0e4503a8165507b8a3df2
+ 239139281
+ http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7468.20100202.pbnrt/iPhone1,2_3.1.3_7E18_Restore.ipsw
+ null
+ 2010-01-22T01:49:43Z
+ false
+ false
+
+
+ '404':
+ description: Not Found
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content: {}
+ summary: Get IPSW List For Version
+ operationId: ipswListForVersion
+ description: GetIPSWListForVersion finds all IPSW files for a given iOS version
+ tags:
+ - Api
+ parameters:
+ - name: version
+ in: path
+ description: ''
+ required: true
+ example: 4.2.1
+ schema:
+ type: number
+
+ /itunes/download/{platform}/{version}:
+ get:
+ responses:
+ '302':
+ description: Found
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Location:
+ schema:
+ type: string
+ content:
+ text/html; charset=utf-8:
+ example: >
+ Found.
+ summary: Download Itunes
+ operationId: itunesDownloadForPlatformAndVersion
+ description: >-
+ DownloadItunes redirects to download an iTunes installer as specified by
+ its platform and version, and architecture for windows
+ tags:
+ - Api
+ parameters:
+ - name: platform
+ in: path
+ description: ''
+ required: true
+ example: windows
+ schema:
+ type: string
+ - name: version
+ in: path
+ description: ''
+ required: true
+ example: '11.1'
+ schema:
+ type: number
+ - name: arch
+ in: query
+ description: ''
+ required: true
+ example: x64
+ schema:
+ type: string
+ /itunes/{platform}:
+ get:
+ responses:
+ '200':
+ description: OK
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Cache-Control:
+ schema:
+ type: string
+ Expires:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/iTunes'
+ examples:
+ example1:
+ value:
+ - platform: Windows
+ version: '12.9'
+ datefound: '2018-09-25T00:00:00Z'
+ url: >-
+ https://secure-appldnld.apple.com/itunes12/041-02279-20180912-24D8EE3A-AC7A-11E8-BE19-C36F1B1141A5/iTunesSetup.exe
+ 64biturl: >-
+ https://secure-appldnld.apple.com/itunes12/041-02280-20180912-24D8CF68-AC7A-11E8-8B51-C26F1B1141A5/iTunes64Setup.exe
+ releasedate: '2018-09-25T00:00:00Z'
+ uploaddate: '2018-09-25T00:00:00Z'
+ - platform: Windows
+ version: '12.8'
+ datefound: '2018-06-10T00:00:00Z'
+ url: >-
+ https://secure-appldnld.apple.com/itunes12/091-81691-20180709-C98EBAE5-D5C5-41EC-9847-A5F71D9C4437/iTunesSetup.exe
+ 64biturl: >-
+ https://secure-appldnld.apple.com/itunes12/091-81692-20180709-A4DF288B-8929-401F-AD73-4189359D8A6B/iTunes64Setup.exe
+ releasedate: '2018-06-10T00:00:00Z'
+ uploaddate: '2018-06-10T00:00:00Z'
+ - platform: Windows
+ version: 12.7.5
+ datefound: '2018-05-29T00:00:00Z'
+ url: >-
+ https://secure-appldnld.apple.com/itunes12/091-81943-20180529-DAFD73DE-5F77-11E8-AF1E-509A897FD268/iTunesSetup.exe
+ 64biturl: >-
+ https://secure-appldnld.apple.com/itunes12/091-81934-20180529-DAFCAAD0-5F77-11E8-99A3-4F9A897FD268/iTunes64Setup.exe
+ releasedate: '2018-05-29T00:00:00Z'
+ uploaddate: '2018-05-29T00:00:00Z'
+ - platform: Windows
+ version: 12.7.4
+ datefound: '2018-03-29T02:20:22Z'
+ url: >-
+ https://secure-appldnld.apple.com/itunes12/091-76320-20180329-6D5B23D2-32F7-11E8-993D-9ABAB071F5CF/iTunesSetup.exe
+ 64biturl: >-
+ https://secure-appldnld.apple.com/itunes12/091-76333-20180329-6D5B026C-32F7-11E8-A675-99BAB071F5CF/iTunes64Setup.exe
+ releasedate: '2018-03-30T18:33:03Z'
+ uploaddate: '2018-03-29T02:20:22Z'
+ example2:
+ value:
+ - platform: Mac OS X
+ version: '12.8'
+ datefound: '2018-06-10T00:00:00Z'
+ url: >-
+ https://secure-appldnld.apple.com/itunes12/091-81690-20180709-3C97E2AB-D6CC-4B92-B290-2F21E56F6F70/iTunes12.8.dmg
+ releasedate: '2018-06-10T00:00:00Z'
+ uploaddate: '2018-06-10T00:00:00Z'
+ - platform: Mac OS X
+ version: 12.7.5
+ datefound: '2018-05-29T00:00:00Z'
+ url: >-
+ https://secure-appldnld.apple.com/itunes12/091-81932-20180529-DAFCC9F2-5F77-11E8-B1FB-4E9A897FD268/iTunes12.7.5.dmg
+ releasedate: '2018-05-29T00:00:00Z'
+ uploaddate: '2018-05-29T00:00:00Z'
+ - platform: Mac OS X
+ version: 12.7.4
+ datefound: '2018-03-29T00:57:43Z'
+ url: >-
+ https://secure-appldnld.apple.com/itunes12/091-76329-20180329-89A41942-32EB-11E8-9560-CEB2B071F5CF/iTunes12.7.4.dmg
+ releasedate: '2018-03-29T21:49:29Z'
+ uploaddate: '2018-03-29T00:57:43Z'
+ - platform: Mac OS X
+ version: 12.7.3
+ datefound: '2018-01-23T03:17:51Z'
+ url: >-
+ https://secure-appldnld.apple.com/itunes12/091-44972-20180123-72201340-FFEA-11E7-9647-DA8C65562ECE/iTunes12.7.3.dmg
+ releasedate: '2018-02-27T18:12:43Z'
+ uploaddate: '2018-01-23T03:17:51Z'
+ application/x-plist:
+ examples:
+ example1:
+ value: >
+
+
+
+
+
+
+
+ Datefound
+ 2018-09-25T00:00:00Z
+ Platform
+ Windows
+ ReleaseDate
+ 2018-09-25T00:00:00Z
+ SixtyFourBitURL
+ https://secure-appldnld.apple.com/itunes12/041-02280-20180912-24D8CF68-AC7A-11E8-8B51-C26F1B1141A5/iTunes64Setup.exe
+ URL
+ https://secure-appldnld.apple.com/itunes12/041-02279-20180912-24D8EE3A-AC7A-11E8-BE19-C36F1B1141A5/iTunesSetup.exe
+ UploadDate
+ 2018-09-25T00:00:00Z
+ Version
+ 12.9
+
+
+ Datefound
+ 2018-06-10T00:00:00Z
+ Platform
+ Windows
+ ReleaseDate
+ 2018-06-10T00:00:00Z
+ SixtyFourBitURL
+ https://secure-appldnld.apple.com/itunes12/091-81692-20180709-A4DF288B-8929-401F-AD73-4189359D8A6B/iTunes64Setup.exe
+ URL
+ https://secure-appldnld.apple.com/itunes12/091-81691-20180709-C98EBAE5-D5C5-41EC-9847-A5F71D9C4437/iTunesSetup.exe
+ UploadDate
+ 2018-06-10T00:00:00Z
+ Version
+ 12.8
+
+
+ Datefound
+ 2018-05-29T00:00:00Z
+ Platform
+ Windows
+ ReleaseDate
+ 2018-05-29T00:00:00Z
+ SixtyFourBitURL
+ https://secure-appldnld.apple.com/itunes12/091-81934-20180529-DAFCAAD0-5F77-11E8-99A3-4F9A897FD268/iTunes64Setup.exe
+ URL
+ https://secure-appldnld.apple.com/itunes12/091-81943-20180529-DAFD73DE-5F77-11E8-AF1E-509A897FD268/iTunesSetup.exe
+ UploadDate
+ 2018-05-29T00:00:00Z
+ Version
+ 12.7.5
+
+
+ Datefound
+ 2018-03-29T02:20:22Z
+ Platform
+ Windows
+ ReleaseDate
+ 2018-03-30T18:33:03Z
+ SixtyFourBitURL
+ https://secure-appldnld.apple.com/itunes12/091-76333-20180329-6D5B026C-32F7-11E8-A675-99BAB071F5CF/iTunes64Setup.exe
+ URL
+ https://secure-appldnld.apple.com/itunes12/091-76320-20180329-6D5B23D2-32F7-11E8-993D-9ABAB071F5CF/iTunesSetup.exe
+ UploadDate
+ 2018-03-29T02:20:22Z
+ Version
+ 12.7.4
+
+
+
+ example2:
+ value: >
+
+
+
+
+
+
+
+ Datefound
+ 2018-06-10T00:00:00Z
+ Platform
+ Mac OS X
+ ReleaseDate
+ 2018-06-10T00:00:00Z
+ SixtyFourBitURL
+
+ URL
+ https://secure-appldnld.apple.com/itunes12/091-81690-20180709-3C97E2AB-D6CC-4B92-B290-2F21E56F6F70/iTunes12.8.dmg
+ UploadDate
+ 2018-06-10T00:00:00Z
+ Version
+ 12.8
+
+
+ Datefound
+ 2018-05-29T00:00:00Z
+ Platform
+ Mac OS X
+ ReleaseDate
+ 2018-05-29T00:00:00Z
+ SixtyFourBitURL
+
+ URL
+ https://secure-appldnld.apple.com/itunes12/091-81932-20180529-DAFCC9F2-5F77-11E8-B1FB-4E9A897FD268/iTunes12.7.5.dmg
+ UploadDate
+ 2018-05-29T00:00:00Z
+ Version
+ 12.7.5
+
+
+ Datefound
+ 2018-03-29T00:57:43Z
+ Platform
+ Mac OS X
+ ReleaseDate
+ 2018-03-29T21:49:29Z
+ SixtyFourBitURL
+
+ URL
+ https://secure-appldnld.apple.com/itunes12/091-76329-20180329-89A41942-32EB-11E8-9560-CEB2B071F5CF/iTunes12.7.4.dmg
+ UploadDate
+ 2018-03-29T00:57:43Z
+ Version
+ 12.7.4
+
+
+ Datefound
+ 2018-01-23T03:17:51Z
+ Platform
+ Mac OS X
+ ReleaseDate
+ 2018-02-27T18:12:43Z
+ SixtyFourBitURL
+
+ URL
+ https://secure-appldnld.apple.com/itunes12/091-44972-20180123-72201340-FFEA-11E7-9647-DA8C65562ECE/iTunes12.7.3.dmg
+ UploadDate
+ 2018-01-23T03:17:51Z
+ Version
+ 12.7.3
+
+
+
+ application/xml:
+ examples:
+ example1:
+ value: |
+
+
+
+ Windows
+ 12.9
+ 2018-09-25T00:00:00Z
+ https://secure-appldnld.apple.com/itunes12/041-02279-20180912-24D8EE3A-AC7A-11E8-BE19-C36F1B1141A5/iTunesSetup.exe
+ https://secure-appldnld.apple.com/itunes12/041-02280-20180912-24D8CF68-AC7A-11E8-8B51-C26F1B1141A5/iTunes64Setup.exe
+ 2018-09-25T00:00:00Z
+ 2018-09-25T00:00:00Z
+
+
+ Windows
+ 12.8
+ 2018-06-10T00:00:00Z
+ https://secure-appldnld.apple.com/itunes12/091-81691-20180709-C98EBAE5-D5C5-41EC-9847-A5F71D9C4437/iTunesSetup.exe
+ https://secure-appldnld.apple.com/itunes12/091-81692-20180709-A4DF288B-8929-401F-AD73-4189359D8A6B/iTunes64Setup.exe
+ 2018-06-10T00:00:00Z
+ 2018-06-10T00:00:00Z
+
+
+ Windows
+ 12.7.5
+ 2018-05-29T00:00:00Z
+ https://secure-appldnld.apple.com/itunes12/091-81943-20180529-DAFD73DE-5F77-11E8-AF1E-509A897FD268/iTunesSetup.exe
+ https://secure-appldnld.apple.com/itunes12/091-81934-20180529-DAFCAAD0-5F77-11E8-99A3-4F9A897FD268/iTunes64Setup.exe
+ 2018-05-29T00:00:00Z
+ 2018-05-29T00:00:00Z
+
+
+ Windows
+ 12.7.4
+ 2018-03-29T02:20:22Z
+ https://secure-appldnld.apple.com/itunes12/091-76320-20180329-6D5B23D2-32F7-11E8-993D-9ABAB071F5CF/iTunesSetup.exe
+ https://secure-appldnld.apple.com/itunes12/091-76333-20180329-6D5B026C-32F7-11E8-A675-99BAB071F5CF/iTunes64Setup.exe
+ 2018-03-30T18:33:03Z
+ 2018-03-29T02:20:22Z
+
+
+ example2:
+ value: |
+
+
+
+ Mac OS X
+ 12.8
+ 2018-06-10T00:00:00Z
+ https://secure-appldnld.apple.com/itunes12/091-81690-20180709-3C97E2AB-D6CC-4B92-B290-2F21E56F6F70/iTunes12.8.dmg
+
+ 2018-06-10T00:00:00Z
+ 2018-06-10T00:00:00Z
+
+
+ Mac OS X
+ 12.7.5
+ 2018-05-29T00:00:00Z
+ https://secure-appldnld.apple.com/itunes12/091-81932-20180529-DAFCC9F2-5F77-11E8-B1FB-4E9A897FD268/iTunes12.7.5.dmg
+
+ 2018-05-29T00:00:00Z
+ 2018-05-29T00:00:00Z
+
+
+ Mac OS X
+ 12.7.4
+ 2018-03-29T00:57:43Z
+ https://secure-appldnld.apple.com/itunes12/091-76329-20180329-89A41942-32EB-11E8-9560-CEB2B071F5CF/iTunes12.7.4.dmg
+
+ 2018-03-29T21:49:29Z
+ 2018-03-29T00:57:43Z
+
+
+ Mac OS X
+ 12.7.3
+ 2018-01-23T03:17:51Z
+ https://secure-appldnld.apple.com/itunes12/091-44972-20180123-72201340-FFEA-11E7-9647-DA8C65562ECE/iTunes12.7.3.dmg
+
+ 2018-02-27T18:12:43Z
+ 2018-01-23T03:17:51Z
+
+
+ '404':
+ description: Not Found
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content: {}
+ summary: Find Itunes
+ operationId: itunesForPlatform
+ description: >-
+ FindItunes finds FindItunes versions for a given platform. specify
+ either "windows" or "macOS"
+ tags:
+ - Api
+ parameters:
+ - name: platform
+ in: path
+ description: ''
+ required: true
+ example: windows
+ schema:
+ type: string
+
+ /keys/device/{identifier}:
+ get:
+ responses:
+ '200':
+ description: OK
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Cache-Control:
+ schema:
+ type: string
+ Expires:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/FirmwareKey'
+ examples:
+ example1:
+ value:
+ - identifier: iPhone3,1
+ buildid: 10A403
+ codename: Sundance
+ baseband: 04.12.02
+ updateramdiskexists: true
+ restoreramdiskexists: true
+ - identifier: iPhone3,1
+ buildid: 10A523
+ codename: Sundance
+ baseband: 04.12.02
+ updateramdiskexists: true
+ restoreramdiskexists: true
+ - identifier: iPhone3,1
+ buildid: 10B144
+ codename: Brighton
+ baseband: 04.12.05
+ updateramdiskexists: true
+ restoreramdiskexists: true
+ - identifier: iPhone3,1
+ buildid: 10B146
+ codename: Brighton
+ baseband: 04.12.05
+ updateramdiskexists: true
+ restoreramdiskexists: true
+ example2:
+ value:
+ - identifier: iPad2,4
+ buildid: 10A403
+ codename: Sundance
+ updateramdiskexists: true
+ restoreramdiskexists: true
+ - identifier: iPad2,4
+ buildid: 10A523
+ codename: Sundance
+ updateramdiskexists: true
+ restoreramdiskexists: true
+ - identifier: iPad2,4
+ buildid: 10B141
+ codename: Brighton
+ updateramdiskexists: true
+ restoreramdiskexists: true
+ - identifier: iPad2,4
+ buildid: 10B146
+ codename: Brighton
+ updateramdiskexists: true
+ restoreramdiskexists: true
+ example3:
+ value:
+ - identifier: iPod1,1
+ buildid: 3A101a
+ codename: Snowbird
+ updateramdiskexists: true
+ restoreramdiskexists: true
+ - identifier: iPod1,1
+ buildid: 3A110a
+ codename: Snowbird
+ updateramdiskexists: true
+ restoreramdiskexists: true
+ - identifier: iPod1,1
+ buildid: 3B48b
+ codename: Oktoberfest
+ updateramdiskexists: true
+ restoreramdiskexists: true
+ - identifier: iPod1,1
+ buildid: 4A102
+ codename: Little Bear
+ updateramdiskexists: true
+ restoreramdiskexists: true
+ application/x-plist:
+ examples:
+ example1:
+ value: >
+
+
+
+
+
+
+
+ Baseband
+ 04.12.02
+ BuildID
+ 10A403
+ CodeName
+ Sundance
+ Identifier
+ iPhone3,1
+ Keys
+
+
+ RestoreRamdiskExists
+
+ UpdateRamdiskExists
+
+
+
+ Baseband
+ 04.12.02
+ BuildID
+ 10A523
+ CodeName
+ Sundance
+ Identifier
+ iPhone3,1
+ Keys
+
+
+ RestoreRamdiskExists
+
+ UpdateRamdiskExists
+
+
+
+ Baseband
+ 04.12.05
+ BuildID
+ 10B144
+ CodeName
+ Brighton
+ Identifier
+ iPhone3,1
+ Keys
+
+
+ RestoreRamdiskExists
+
+ UpdateRamdiskExists
+
+
+
+ Baseband
+ 04.12.05
+ BuildID
+ 10B146
+ CodeName
+ Brighton
+ Identifier
+ iPhone3,1
+ Keys
+
+
+ RestoreRamdiskExists
+
+ UpdateRamdiskExists
+
+
+
+
+ example2:
+ value: >
+
+
+
+
+
+
+
+ Baseband
+
+ BuildID
+ 10A403
+ CodeName
+ Sundance
+ Identifier
+ iPad2,4
+ Keys
+
+
+ RestoreRamdiskExists
+
+ UpdateRamdiskExists
+
+
+
+ Baseband
+
+ BuildID
+ 10A523
+ CodeName
+ Sundance
+ Identifier
+ iPad2,4
+ Keys
+
+
+ RestoreRamdiskExists
+
+ UpdateRamdiskExists
+
+
+
+ Baseband
+
+ BuildID
+ 10B141
+ CodeName
+ Brighton
+ Identifier
+ iPad2,4
+ Keys
+
+
+ RestoreRamdiskExists
+
+ UpdateRamdiskExists
+
+
+
+ Baseband
+
+ BuildID
+ 10B146
+ CodeName
+ Brighton
+ Identifier
+ iPad2,4
+ Keys
+
+
+ RestoreRamdiskExists
+
+ UpdateRamdiskExists
+
+
+
+
+ example3:
+ value: >
+
+
+
+
+
+
+
+ Baseband
+
+ BuildID
+ 3A101a
+ CodeName
+ Snowbird
+ Identifier
+ iPod1,1
+ Keys
+
+
+ RestoreRamdiskExists
+
+ UpdateRamdiskExists
+
+
+
+ Baseband
+
+ BuildID
+ 3A110a
+ CodeName
+ Snowbird
+ Identifier
+ iPod1,1
+ Keys
+
+
+ RestoreRamdiskExists
+
+ UpdateRamdiskExists
+
+
+
+ Baseband
+
+ BuildID
+ 3B48b
+ CodeName
+ Oktoberfest
+ Identifier
+ iPod1,1
+ Keys
+
+
+ RestoreRamdiskExists
+
+ UpdateRamdiskExists
+
+
+
+ Baseband
+
+ BuildID
+ 4A102
+ CodeName
+ Little Bear
+ Identifier
+ iPod1,1
+ Keys
+
+
+ RestoreRamdiskExists
+
+ UpdateRamdiskExists
+
+
+
+
+ application/xml:
+ examples:
+ example1:
+ value: |
+
+
+
+ iPhone3,1
+ 10A403
+ Sundance
+ 04.12.02
+ true
+ true
+
+
+ iPhone3,1
+ 10A523
+ Sundance
+ 04.12.02
+ true
+ true
+
+
+ iPhone3,1
+ 10B144
+ Brighton
+ 04.12.05
+ true
+ true
+
+
+ iPhone3,1
+ 10B146
+ Brighton
+ 04.12.05
+ true
+ true
+
+
+ example2:
+ value: |
+
+
+
+ iPad2,4
+ 10A403
+ Sundance
+
+ true
+ true
+
+
+ iPad2,4
+ 10A523
+ Sundance
+
+ true
+ true
+
+
+ iPad2,4
+ 10B141
+ Brighton
+
+ true
+ true
+
+
+ iPad2,4
+ 10B146
+ Brighton
+
+ true
+ true
+
+
+ example3:
+ value: |
+
+
+
+ iPod1,1
+ 3A101a
+ Snowbird
+
+ true
+ true
+
+
+ iPod1,1
+ 3A110a
+ Snowbird
+
+ true
+ true
+
+
+ iPod1,1
+ 3B48b
+ Oktoberfest
+
+ true
+ true
+
+
+ iPod1,1
+ 4A102
+ Little Bear
+
+ true
+ true
+
+
+ '404':
+ description: Not Found
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content: {}
+ summary: Keys Device List
+ operationId: firmwareKeysForIdentifier
+ description: KeysDeviceList returns the firmwares which have keys for a given device
+ tags:
+ - Api
+ parameters:
+ - name: identifier
+ in: path
+ description: ''
+ required: true
+ example: iPhone3,1
+ schema:
+ type: string
+
+ /keys/ipsw/{identifier}/{buildid}:
+ get:
+ responses:
+ '200':
+ description: OK
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Cache-Control:
+ schema:
+ type: string
+ Expires:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ schema:
+ $ref: '#/components/schemas/FirmwareKey'
+ examples:
+ example1:
+ value:
+ identifier: AppleTV3,1
+ buildid: 10B329a
+ codename: BrightonMaps
+ updateramdiskexists: false
+ restoreramdiskexists: true
+ keys:
+ - image: GlyphCharging
+ filename: >-
+ Firmware/all_flash/all_flash.j33ap.production/glyphcharging.s5l8942x.img3
+ kbag: ''
+ key: >-
+ 9ea5d333ccc82b7a9668f8d542f783fc0775b866baf0081c2a2c766a82fd4737
+ iv: 1083ac52737244647753ff38f2d96e4c
+ date: '2017-08-28T14:54:24Z'
+ - image: Kernelcache
+ filename: kernelcache.release.j33
+ kbag: ''
+ key: >-
+ 40cfe04545e040890777ff473b97a9899dcde3bb4b1c57e842033a864f953543
+ iv: 5259656a5699f44553c2ee05abb58090
+ date: '2017-08-28T14:54:24Z'
+ - image: BatteryLow0
+ filename: >-
+ Firmware/all_flash/all_flash.j33ap.production/batterylow0.s5l8942x.img3
+ kbag: ''
+ key: >-
+ f313f30c7194d755339749082c086ac9df450ab0363f6875284fc53987ce784e
+ iv: f10718ca4e30b4449fdc398068445547
+ date: '2017-08-28T14:54:24Z'
+ - image: RootFS
+ filename: 048-2924-001.dmg
+ kbag: ''
+ key: >-
+ 69504518c7c4d251cbd19c3cc8e7546aab98f0db26fc5078614a33e732e766e9ec8f5872
+ iv: ''
+ date: '2017-08-28T14:54:24Z'
+ example2:
+ value:
+ identifier: iPhone5,4
+ buildid: 12A402
+ codename: Okemo
+ baseband: '0'
+ updateramdiskexists: true
+ restoreramdiskexists: true
+ keys:
+ - image: AppleLogo
+ filename: >-
+ Firmware/all_flash/all_flash.n49ap.production/applelogo@2x~iphone.s5l8950x.img3
+ kbag: >-
+ 5c53f34107d09bf829b38a95b26f964a6e85d80f3243da6702bfa19e53c35feab18d253bcb995fbc81d131866413a6ae
+ key: >-
+ 6f175ccf6e6c980ab6d6eb7a80622fde81464a65632b5c1b289e66c52ecec567
+ iv: 3f21235489e5c5e6092f65c4b63e054e
+ date: '2015-07-30T00:00:00Z'
+ - image: BatteryCharging0
+ filename: >-
+ Firmware/all_flash/all_flash.n49ap.production/batterycharging0@2x~iphone.s5l8950x.img3
+ kbag: >-
+ 460ecb620de1a813aa324124f837f68896d3b54c3863c00c6353a10129565e7f6c81ddd62cced616fc31fffb790a9abc
+ key: >-
+ 826d846c57a54ffef170966068f710c02247b72fc7b5e16b6cd2f592b72c23e7
+ iv: 5c5ed07d75e56102fea8576ac139eee7
+ date: '2015-07-30T00:00:00Z'
+ - image: BatteryCharging1
+ filename: >-
+ Firmware/all_flash/all_flash.n49ap.production/batterycharging1@2x~iphone.s5l8950x.img3
+ kbag: >-
+ 952e783be27a07a0ac607ebcdf81b3256e3652bf3c5fcf3c64f67ea160713fc4e9fdc93566fee2a60e249c314a38cba9
+ key: >-
+ 7281fead490bd2c262f60b9d9ccdbee964b60e127ad9e513bcf61a020da2857c
+ iv: eb88c863ed92d4b43afdbb90a44f552c
+ date: '2015-07-30T00:00:00Z'
+ - image: BatteryFull
+ filename: >-
+ Firmware/all_flash/all_flash.n49ap.production/batteryfull@2x~iphone.s5l8950x.img3
+ kbag: >-
+ ee0b0eedb38f49528536263db03f5d356440d6fadf217e8eb23e16d10c2e1273301e7b50c440ca575f09a1d849e7f10d
+ key: >-
+ cc62578e3ea833dab8c754e370a1e8ee4898f55d21f30e1e78b68ebc21497ff1
+ iv: 933400ada3afbee673e01118b16831f7
+ date: '2015-07-30T00:00:00Z'
+ application/x-plist:
+ examples:
+ example1:
+ value: >
+
+
+
+
+
+
+ Baseband
+
+ BuildID
+ 10B329a
+ CodeName
+ BrightonMaps
+ Identifier
+ AppleTV3,1
+ Keys
+
+
+ BuildID
+ 10B329a
+ Date
+ 2017-08-28T14:54:24Z
+ Filename
+ Firmware/all_flash/all_flash.j33ap.production/glyphcharging.s5l8942x.img3
+ IV
+ 1083ac52737244647753ff38f2d96e4c
+ Identifier
+ AppleTV3,1
+ Image
+ GlyphCharging
+ KBag
+
+ Key
+ 9ea5d333ccc82b7a9668f8d542f783fc0775b866baf0081c2a2c766a82fd4737
+
+
+ BuildID
+ 10B329a
+ Date
+ 2017-08-28T14:54:24Z
+ Filename
+ kernelcache.release.j33
+ IV
+ 5259656a5699f44553c2ee05abb58090
+ Identifier
+ AppleTV3,1
+ Image
+ Kernelcache
+ KBag
+
+ Key
+ 40cfe04545e040890777ff473b97a9899dcde3bb4b1c57e842033a864f953543
+
+
+ BuildID
+ 10B329a
+ Date
+ 2017-08-28T14:54:24Z
+ Filename
+ Firmware/all_flash/all_flash.j33ap.production/batterylow0.s5l8942x.img3
+ IV
+ f10718ca4e30b4449fdc398068445547
+ Identifier
+ AppleTV3,1
+ Image
+ BatteryLow0
+ KBag
+
+ Key
+ f313f30c7194d755339749082c086ac9df450ab0363f6875284fc53987ce784e
+
+
+ BuildID
+ 10B329a
+ Date
+ 2017-08-28T14:54:24Z
+ Filename
+ 048-2924-001.dmg
+ IV
+
+ Identifier
+ AppleTV3,1
+ Image
+ RootFS
+ KBag
+
+ Key
+ 69504518c7c4d251cbd19c3cc8e7546aab98f0db26fc5078614a33e732e766e9ec8f5872
+
+
+ RestoreRamdiskExists
+
+ UpdateRamdiskExists
+
+
+
+ example2:
+ value: >
+
+
+
+
+
+
+ Baseband
+ 0
+ BuildID
+ 12A402
+ CodeName
+ Okemo
+ Identifier
+ iPhone5,4
+ Keys
+
+
+ BuildID
+ 12A402
+ Date
+ 2015-07-30T00:00:00Z
+ Filename
+ Firmware/all_flash/all_flash.n49ap.production/applelogo@2x~iphone.s5l8950x.img3
+ IV
+ 3f21235489e5c5e6092f65c4b63e054e
+ Identifier
+ iPhone5,4
+ Image
+ AppleLogo
+ KBag
+ 5c53f34107d09bf829b38a95b26f964a6e85d80f3243da6702bfa19e53c35feab18d253bcb995fbc81d131866413a6ae
+ Key
+ 6f175ccf6e6c980ab6d6eb7a80622fde81464a65632b5c1b289e66c52ecec567
+
+
+ BuildID
+ 12A402
+ Date
+ 2015-07-30T00:00:00Z
+ Filename
+ Firmware/all_flash/all_flash.n49ap.production/batterycharging0@2x~iphone.s5l8950x.img3
+ IV
+ 5c5ed07d75e56102fea8576ac139eee7
+ Identifier
+ iPhone5,4
+ Image
+ BatteryCharging0
+ KBag
+ 460ecb620de1a813aa324124f837f68896d3b54c3863c00c6353a10129565e7f6c81ddd62cced616fc31fffb790a9abc
+ Key
+ 826d846c57a54ffef170966068f710c02247b72fc7b5e16b6cd2f592b72c23e7
+
+
+ BuildID
+ 12A402
+ Date
+ 2015-07-30T00:00:00Z
+ Filename
+ Firmware/all_flash/all_flash.n49ap.production/batterycharging1@2x~iphone.s5l8950x.img3
+ IV
+ eb88c863ed92d4b43afdbb90a44f552c
+ Identifier
+ iPhone5,4
+ Image
+ BatteryCharging1
+ KBag
+ 952e783be27a07a0ac607ebcdf81b3256e3652bf3c5fcf3c64f67ea160713fc4e9fdc93566fee2a60e249c314a38cba9
+ Key
+ 7281fead490bd2c262f60b9d9ccdbee964b60e127ad9e513bcf61a020da2857c
+
+
+ BuildID
+ 12A402
+ Date
+ 2015-07-30T00:00:00Z
+ Filename
+ Firmware/all_flash/all_flash.n49ap.production/batteryfull@2x~iphone.s5l8950x.img3
+ IV
+ 933400ada3afbee673e01118b16831f7
+ Identifier
+ iPhone5,4
+ Image
+ BatteryFull
+ KBag
+ ee0b0eedb38f49528536263db03f5d356440d6fadf217e8eb23e16d10c2e1273301e7b50c440ca575f09a1d849e7f10d
+ Key
+ cc62578e3ea833dab8c754e370a1e8ee4898f55d21f30e1e78b68ebc21497ff1
+
+
+ RestoreRamdiskExists
+
+ UpdateRamdiskExists
+
+
+
+ application/xml:
+ examples:
+ example1:
+ value: |
+
+
+
+ AppleTV3,1
+ 10B329a
+ BrightonMaps
+
+ false
+ true
+
+ AppleTV3,1
+ 10B329a
+ GlyphCharging
+ Firmware/all_flash/all_flash.j33ap.production/glyphcharging.s5l8942x.img3
+
+ 9ea5d333ccc82b7a9668f8d542f783fc0775b866baf0081c2a2c766a82fd4737
+ 1083ac52737244647753ff38f2d96e4c
+ 2017-08-28T14:54:24Z
+
+
+ AppleTV3,1
+ 10B329a
+ Kernelcache
+ kernelcache.release.j33
+
+ 40cfe04545e040890777ff473b97a9899dcde3bb4b1c57e842033a864f953543
+ 5259656a5699f44553c2ee05abb58090
+ 2017-08-28T14:54:24Z
+
+
+ AppleTV3,1
+ 10B329a
+ BatteryLow0
+ Firmware/all_flash/all_flash.j33ap.production/batterylow0.s5l8942x.img3
+
+ f313f30c7194d755339749082c086ac9df450ab0363f6875284fc53987ce784e
+ f10718ca4e30b4449fdc398068445547
+ 2017-08-28T14:54:24Z
+
+
+ AppleTV3,1
+ 10B329a
+ RootFS
+ 048-2924-001.dmg
+
+ 69504518c7c4d251cbd19c3cc8e7546aab98f0db26fc5078614a33e732e766e9ec8f5872
+
+ 2017-08-28T14:54:24Z
+
+
+
+ example2:
+ value: |
+
+
+
+ iPhone5,4
+ 12A402
+ Okemo
+ 0
+ true
+ true
+
+ iPhone5,4
+ 12A402
+ AppleLogo
+ Firmware/all_flash/all_flash.n49ap.production/applelogo@2x~iphone.s5l8950x.img3
+ 5c53f34107d09bf829b38a95b26f964a6e85d80f3243da6702bfa19e53c35feab18d253bcb995fbc81d131866413a6ae
+ 6f175ccf6e6c980ab6d6eb7a80622fde81464a65632b5c1b289e66c52ecec567
+ 3f21235489e5c5e6092f65c4b63e054e
+ 2015-07-30T00:00:00Z
+
+
+ iPhone5,4
+ 12A402
+ BatteryCharging0
+ Firmware/all_flash/all_flash.n49ap.production/batterycharging0@2x~iphone.s5l8950x.img3
+ 460ecb620de1a813aa324124f837f68896d3b54c3863c00c6353a10129565e7f6c81ddd62cced616fc31fffb790a9abc
+ 826d846c57a54ffef170966068f710c02247b72fc7b5e16b6cd2f592b72c23e7
+ 5c5ed07d75e56102fea8576ac139eee7
+ 2015-07-30T00:00:00Z
+
+
+ iPhone5,4
+ 12A402
+ BatteryCharging1
+ Firmware/all_flash/all_flash.n49ap.production/batterycharging1@2x~iphone.s5l8950x.img3
+ 952e783be27a07a0ac607ebcdf81b3256e3652bf3c5fcf3c64f67ea160713fc4e9fdc93566fee2a60e249c314a38cba9
+ 7281fead490bd2c262f60b9d9ccdbee964b60e127ad9e513bcf61a020da2857c
+ eb88c863ed92d4b43afdbb90a44f552c
+ 2015-07-30T00:00:00Z
+
+
+ iPhone5,4
+ 12A402
+ BatteryFull
+ Firmware/all_flash/all_flash.n49ap.production/batteryfull@2x~iphone.s5l8950x.img3
+ ee0b0eedb38f49528536263db03f5d356440d6fadf217e8eb23e16d10c2e1273301e7b50c440ca575f09a1d849e7f10d
+ cc62578e3ea833dab8c754e370a1e8ee4898f55d21f30e1e78b68ebc21497ff1
+ 933400ada3afbee673e01118b16831f7
+ 2015-07-30T00:00:00Z
+
+
+
+ '404':
+ description: Not Found
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content: {}
+ summary: Keys For IPSW
+ operationId: firmwareKeysForIdentifierAndBuild
+ description: KeysForIPSW returns FirmwareKeys for a given IPSW
+ tags:
+ - Api
+ parameters:
+ - name: identifier
+ in: path
+ description: ''
+ required: true
+ example: AppleTV3,1
+ schema:
+ type: string
+ - name: buildid
+ in: path
+ description: ''
+ required: true
+ example: 10B329a
+ schema:
+ type: string
+
+ /model/{model}:
+ get:
+ responses:
+ '200':
+ description: OK
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Cache-Control:
+ schema:
+ type: string
+ Expires:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Model'
+ examples:
+ example1:
+ value:
+ identifier: iPad7,1
+ example2:
+ value:
+ identifier: iPod5,1
+ application/x-plist:
+ examples:
+ example1:
+ value: >
+
+
+
+
+
+
+ Identifier
+ iPad7,1
+
+
+ example2:
+ value: >
+
+
+
+
+
+
+ Identifier
+ iPod5,1
+
+
+ application/xml:
+ examples:
+ example1:
+ value: |
+
+
+
+ iPad7,1
+
+
+ example2:
+ value: |
+
+
+
+ iPod5,1
+
+
+ '404':
+ description: Not Found
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content: {}
+ summary: Identify Model
+ operationId: identifierForModel
+ description: IdentifyModel finds the identifier of a given model number
+ tags:
+ - Api
+ parameters:
+ - name: model
+ in: path
+ description: ''
+ required: true
+ example: A1670
+ schema:
+ type: string
+
+ /ota/documentation/{device}/{version}:
+ get:
+ responses:
+ '200':
+ description: OK
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Cache-Control:
+ schema:
+ type: string
+ Expires:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ X-Frame-Options:
+ schema:
+ type: string
+ content:
+ text/html:
+ examples:
+ example1:
+ value: |
+ This is an example OTA documentation HTML result.
+ example2:
+ value: |
+ This is an example OTA documentation HTML result.
+ '404':
+ description: Not Found
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Cache-Control:
+ schema:
+ type: string
+ Expires:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NotFoundDetails'
+ example:
+ status: 404
+ message: not found
+ summary: OTA Documentation
+ operationId: otaDocumentationForDeviceAndVersion
+ description: >-
+ OTADocumentation returns the documentation for a given device type and
+ version
+ tags:
+ - Api
+ parameters:
+ - name: device
+ in: path
+ description: ''
+ required: true
+ example: iPhone
+ schema:
+ type: string
+ - name: version
+ in: path
+ description: ''
+ required: true
+ example: '11.2'
+ schema:
+ type: number
+ /ota/download/{identifier}/{buildid}:
+ get:
+ responses:
+ '302':
+ description: Found
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Location:
+ schema:
+ type: string
+ content:
+ text/html; charset=utf-8:
+ example: >
+ Found.
+ summary: Download OTA
+ operationId: otaDownloadForIdentifierAndBuild
+ description: >-
+ DownloadOTA redirects to download an OTA Firmware as specified by its
+ identifier, buildid and optionally prerequisite
+ tags:
+ - Api
+ parameters:
+ - name: identifier
+ in: path
+ description: ''
+ required: true
+ example: iPhone3,3
+ schema:
+ type: string
+ - name: buildid
+ in: path
+ description: ''
+ required: true
+ example: 11D201
+ schema:
+ type: string
+ - name: prerequisite
+ in: query
+ description: ''
+ required: true
+ example: 11D167
+ schema:
+ type: string
+ /ota/{identifier}/{buildid}:
+ get:
+ responses:
+ '200':
+ description: OK
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Cache-Control:
+ schema:
+ type: string
+ Expires:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/OTA'
+ example:
+ identifier: iPhone3,3
+ buildid: 11D201
+ version: 7.1.1
+ url: >-
+ http://appldnld.apple.com/iOS7.1/031-00205.20140425.Th1s3/com_apple_MobileAsset_SoftwareUpdate/eca55b74f8f6539d000d9148f38cfe6eb5717cda.zip
+ filesize: 16299751
+ prerequisitebuildid: 11D167
+ prerequisiteversion: '7.1'
+ releasetype: 'null'
+ uploaddate: '2014-04-15T15:25:54Z'
+ releasedate: '2014-04-22T17:56:18Z'
+ marketingversion: null
+ signed: false
+ application/x-plist:
+ example: >
+
+
+
+
+
+
+ BuildID
+ 11D201
+ Filesize
+ 16299751
+ Identifier
+ iPhone3,3
+ MarketingVersion
+
+ PrerequisiteBuild
+ 11D167
+ PrerequisiteVersion
+ 7.1
+ ReleaseDate
+ 2014-04-22T17:56:18Z
+ Releasetype
+ null
+ Signed
+
+ URL
+ http://appldnld.apple.com/iOS7.1/031-00205.20140425.Th1s3/com_apple_MobileAsset_SoftwareUpdate/eca55b74f8f6539d000d9148f38cfe6eb5717cda.zip
+ UploadDate
+ 2014-04-15T15:25:54Z
+ Version
+ 7.1.1
+
+
+ application/xml:
+ example: |
+
+
+
+ iPhone3,3
+ 11D201
+ 7.1.1
+ http://appldnld.apple.com/iOS7.1/031-00205.20140425.Th1s3/com_apple_MobileAsset_SoftwareUpdate/eca55b74f8f6539d000d9148f38cfe6eb5717cda.zip
+ 16299751
+ 11D167
+ 7.1
+ null
+ 2014-04-15T15:25:54Z
+ 2014-04-22T17:56:18Z
+
+ false
+
+
+ summary: Get OTA Information
+ operationId: otaInformationForIdentifierAndBuild
+ description: >-
+ GetOTAInformation returns all known information for an OTA specified by
+ its identifier and build (and optionally
+
+ prerequisite firmware)
+ tags:
+ - Api
+ parameters:
+ - name: identifier
+ in: path
+ description: ''
+ required: true
+ example: iPhone3,3
+ schema:
+ type: string
+ - name: buildid
+ in: path
+ description: ''
+ required: true
+ example: 11D201
+ schema:
+ type: string
+ - name: prerequisite
+ in: query
+ description: ''
+ required: true
+ example: 11D167
+ schema:
+ type: string
+
+ /ota/{version}:
+ get:
+ responses:
+ '200':
+ description: OK
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Cache-Control:
+ schema:
+ type: string
+ Expires:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ schema:
+ $ref: '#/components/schemas/OTA'
+ examples:
+ example1:
+ value:
+ - identifier: AppleTV3,1
+ buildid: 12A365b
+ version: '8.0'
+ url: >-
+ http://appldnld.apple.com/iOS8/031-05657.20140917.LLFDi/com_apple_MobileAsset_SoftwareUpdate/abf42e951ff9397c6bb288e722d8811b3d7f11a2.zip
+ filesize: 541919807
+ prerequisitebuildid: 11D169b
+ prerequisiteversion: '7.1'
+ releasetype: 'null'
+ uploaddate: '2014-09-09T05:55:40Z'
+ releasedate: '2014-09-17T17:54:04Z'
+ marketingversion: null
+ signed: false
+ - identifier: AppleTV3,1
+ buildid: 12A365b
+ version: '8.0'
+ url: >-
+ http://appldnld.apple.com/iOS8/031-05644.20140917.aZNEo/com_apple_MobileAsset_SoftwareUpdate/90a74d5acbde4aec4191b2513272011b66ebdf84.zip
+ filesize: 541908385
+ prerequisitebuildid: 11D201c
+ prerequisiteversion: 7.1.1
+ releasetype: 'null'
+ uploaddate: '2014-09-09T05:55:19Z'
+ releasedate: '2014-09-17T17:54:04Z'
+ marketingversion: null
+ signed: false
+ - identifier: AppleTV3,1
+ buildid: 12A365b
+ version: '8.0'
+ url: >-
+ http://appldnld.apple.com/iOS8/031-05616.20140917.jYJmH/com_apple_MobileAsset_SoftwareUpdate/38b2fe1810f1fa57fd346b88f3b7d19e6fb1d128.zip
+ filesize: 541828041
+ prerequisitebuildid: 11D257c
+ prerequisiteversion: 7.1.2
+ releasetype: 'null'
+ uploaddate: '2014-09-09T05:47:45Z'
+ releasedate: '2014-09-17T17:54:04Z'
+ marketingversion: null
+ signed: false
+ - identifier: AppleTV3,1
+ buildid: 12A5365b
+ version: '8.0'
+ url: >-
+ http://appldnld.apple.com/iOS8/031-05408.20140917.uPtTD/com_apple_MobileAsset_SoftwareUpdate/0dd5a269619de15c1ff64577034e88fb98eae60b.zip
+ filesize: 931428635
+ prerequisitebuildid: 12A4345d
+ prerequisiteversion: '8.0'
+ releasetype: Beta
+ uploaddate: '2014-09-09T05:43:28Z'
+ releasedate: '2014-09-17T17:54:02Z'
+ marketingversion: null
+ signed: false
+ example2:
+ value:
+ - identifier: iPad3,4
+ buildid: 14G60
+ version: 10.3.3
+ url: >-
+ http://appldnld.apple.com/ios10.3.3/091-23239-20170719-77F53FDC-6992-11E7-B3A1-7C034A4DD6D5/com_apple_MobileAsset_SoftwareUpdate/cb7b5863ff3bd4c635976294d602eda576479cef.zip
+ filesize: 514599537
+ prerequisitebuildid: 14A346
+ prerequisiteversion: '10.0'
+ releasetype: ''
+ uploaddate: '2017-07-15T19:32:55Z'
+ releasedate: '2017-07-19T16:58:07Z'
+ marketingversion: null
+ signed: false
+ - identifier: iPad3,4
+ buildid: 14G60
+ version: 10.3.3
+ url: >-
+ http://appldnld.apple.com/ios10.3.3/091-23239-20170719-77F53FDC-6992-11E7-B3A1-7C034A4DD6D5/com_apple_MobileAsset_SoftwareUpdate/cb7b5863ff3bd4c635976294d602eda576479cef.zip
+ filesize: 514599537
+ prerequisitebuildid: 14B72
+ prerequisiteversion: '10.1'
+ releasetype: ''
+ uploaddate: '2017-07-15T19:32:55Z'
+ releasedate: '2017-07-19T16:58:11Z'
+ marketingversion: null
+ signed: false
+ - identifier: iPad3,4
+ buildid: 14G60
+ version: 10.3.3
+ url: >-
+ http://appldnld.apple.com/ios10.3.3/091-23239-20170719-77F53FDC-6992-11E7-B3A1-7C034A4DD6D5/com_apple_MobileAsset_SoftwareUpdate/cb7b5863ff3bd4c635976294d602eda576479cef.zip
+ filesize: 514599537
+ prerequisitebuildid: 14B150
+ prerequisiteversion: 10.1.1
+ releasetype: ''
+ uploaddate: '2017-07-15T19:32:55Z'
+ releasedate: '2017-07-19T16:58:11Z'
+ marketingversion: null
+ signed: false
+ - identifier: iPad3,4
+ buildid: 14G60
+ version: 10.3.3
+ url: >-
+ http://appldnld.apple.com/ios10.3.3/091-23239-20170719-77F53FDC-6992-11E7-B3A1-7C034A4DD6D5/com_apple_MobileAsset_SoftwareUpdate/cb7b5863ff3bd4c635976294d602eda576479cef.zip
+ filesize: 514599537
+ prerequisitebuildid: 14B100
+ prerequisiteversion: 10.1.1
+ releasetype: ''
+ uploaddate: '2017-07-15T19:32:55Z'
+ releasedate: '2017-07-19T16:58:10Z'
+ marketingversion: null
+ signed: false
+ application/x-plist:
+ examples:
+ example1:
+ value: >
+
+
+
+
+
+
+
+ BuildID
+ 12A365b
+ Filesize
+ 541919807
+ Identifier
+ AppleTV3,1
+ MarketingVersion
+
+ PrerequisiteBuild
+ 11D169b
+ PrerequisiteVersion
+ 7.1
+ ReleaseDate
+ 2014-09-17T17:54:04Z
+ Releasetype
+ null
+ Signed
+
+ URL
+ http://appldnld.apple.com/iOS8/031-05657.20140917.LLFDi/com_apple_MobileAsset_SoftwareUpdate/abf42e951ff9397c6bb288e722d8811b3d7f11a2.zip
+ UploadDate
+ 2014-09-09T05:55:40Z
+ Version
+ 8.0
+
+
+ BuildID
+ 12A365b
+ Filesize
+ 541908385
+ Identifier
+ AppleTV3,1
+ MarketingVersion
+
+ PrerequisiteBuild
+ 11D201c
+ PrerequisiteVersion
+ 7.1.1
+ ReleaseDate
+ 2014-09-17T17:54:04Z
+ Releasetype
+ null
+ Signed
+
+ URL
+ http://appldnld.apple.com/iOS8/031-05644.20140917.aZNEo/com_apple_MobileAsset_SoftwareUpdate/90a74d5acbde4aec4191b2513272011b66ebdf84.zip
+ UploadDate
+ 2014-09-09T05:55:19Z
+ Version
+ 8.0
+
+
+ BuildID
+ 12A365b
+ Filesize
+ 541828041
+ Identifier
+ AppleTV3,1
+ MarketingVersion
+
+ PrerequisiteBuild
+ 11D257c
+ PrerequisiteVersion
+ 7.1.2
+ ReleaseDate
+ 2014-09-17T17:54:04Z
+ Releasetype
+ null
+ Signed
+
+ URL
+ http://appldnld.apple.com/iOS8/031-05616.20140917.jYJmH/com_apple_MobileAsset_SoftwareUpdate/38b2fe1810f1fa57fd346b88f3b7d19e6fb1d128.zip
+ UploadDate
+ 2014-09-09T05:47:45Z
+ Version
+ 8.0
+
+
+ BuildID
+ 12A5365b
+ Filesize
+ 931428635
+ Identifier
+ AppleTV3,1
+ MarketingVersion
+
+ PrerequisiteBuild
+ 12A4345d
+ PrerequisiteVersion
+ 8.0
+ ReleaseDate
+ 2014-09-17T17:54:02Z
+ Releasetype
+ Beta
+ Signed
+
+ URL
+ http://appldnld.apple.com/iOS8/031-05408.20140917.uPtTD/com_apple_MobileAsset_SoftwareUpdate/0dd5a269619de15c1ff64577034e88fb98eae60b.zip
+ UploadDate
+ 2014-09-09T05:43:28Z
+ Version
+ 8.0
+
+
+
+ example2:
+ value: >
+
+
+
+
+
+
+
+ BuildID
+ 14G60
+ Filesize
+ 514599537
+ Identifier
+ iPad3,4
+ MarketingVersion
+
+ PrerequisiteBuild
+ 14A346
+ PrerequisiteVersion
+ 10.0
+ ReleaseDate
+ 2017-07-19T16:58:07Z
+ Releasetype
+
+ Signed
+
+ URL
+ http://appldnld.apple.com/ios10.3.3/091-23239-20170719-77F53FDC-6992-11E7-B3A1-7C034A4DD6D5/com_apple_MobileAsset_SoftwareUpdate/cb7b5863ff3bd4c635976294d602eda576479cef.zip
+ UploadDate
+ 2017-07-15T19:32:55Z
+ Version
+ 10.3.3
+
+
+ BuildID
+ 14G60
+ Filesize
+ 514599537
+ Identifier
+ iPad3,4
+ MarketingVersion
+
+ PrerequisiteBuild
+ 14B72
+ PrerequisiteVersion
+ 10.1
+ ReleaseDate
+ 2017-07-19T16:58:11Z
+ Releasetype
+
+ Signed
+
+ URL
+ http://appldnld.apple.com/ios10.3.3/091-23239-20170719-77F53FDC-6992-11E7-B3A1-7C034A4DD6D5/com_apple_MobileAsset_SoftwareUpdate/cb7b5863ff3bd4c635976294d602eda576479cef.zip
+ UploadDate
+ 2017-07-15T19:32:55Z
+ Version
+ 10.3.3
+
+
+ BuildID
+ 14G60
+ Filesize
+ 514599537
+ Identifier
+ iPad3,4
+ MarketingVersion
+
+ PrerequisiteBuild
+ 14B150
+ PrerequisiteVersion
+ 10.1.1
+ ReleaseDate
+ 2017-07-19T16:58:11Z
+ Releasetype
+
+ Signed
+
+ URL
+ http://appldnld.apple.com/ios10.3.3/091-23239-20170719-77F53FDC-6992-11E7-B3A1-7C034A4DD6D5/com_apple_MobileAsset_SoftwareUpdate/cb7b5863ff3bd4c635976294d602eda576479cef.zip
+ UploadDate
+ 2017-07-15T19:32:55Z
+ Version
+ 10.3.3
+
+
+ BuildID
+ 14G60
+ Filesize
+ 514599537
+ Identifier
+ iPad3,4
+ MarketingVersion
+
+ PrerequisiteBuild
+ 14B100
+ PrerequisiteVersion
+ 10.1.1
+ ReleaseDate
+ 2017-07-19T16:58:10Z
+ Releasetype
+
+ Signed
+
+ URL
+ http://appldnld.apple.com/ios10.3.3/091-23239-20170719-77F53FDC-6992-11E7-B3A1-7C034A4DD6D5/com_apple_MobileAsset_SoftwareUpdate/cb7b5863ff3bd4c635976294d602eda576479cef.zip
+ UploadDate
+ 2017-07-15T19:32:55Z
+ Version
+ 10.3.3
+
+
+
+ application/xml:
+ examples:
+ example1:
+ value: |
+
+
+
+ AppleTV3,1
+ 12A365b
+ 8.0
+ http://appldnld.apple.com/iOS8/031-05657.20140917.LLFDi/com_apple_MobileAsset_SoftwareUpdate/abf42e951ff9397c6bb288e722d8811b3d7f11a2.zip
+ 541919807
+ 11D169b
+ 7.1
+ null
+ 2014-09-09T05:55:40Z
+ 2014-09-17T17:54:04Z
+
+ false
+
+
+ AppleTV3,1
+ 12A365b
+ 8.0
+ http://appldnld.apple.com/iOS8/031-05644.20140917.aZNEo/com_apple_MobileAsset_SoftwareUpdate/90a74d5acbde4aec4191b2513272011b66ebdf84.zip
+ 541908385
+ 11D201c
+ 7.1.1
+ null
+ 2014-09-09T05:55:19Z
+ 2014-09-17T17:54:04Z
+
+ false
+
+
+ AppleTV3,1
+ 12A365b
+ 8.0
+ http://appldnld.apple.com/iOS8/031-05616.20140917.jYJmH/com_apple_MobileAsset_SoftwareUpdate/38b2fe1810f1fa57fd346b88f3b7d19e6fb1d128.zip
+ 541828041
+ 11D257c
+ 7.1.2
+ null
+ 2014-09-09T05:47:45Z
+ 2014-09-17T17:54:04Z
+
+ false
+
+
+ AppleTV3,1
+ 12A5365b
+ 8.0
+ http://appldnld.apple.com/iOS8/031-05408.20140917.uPtTD/com_apple_MobileAsset_SoftwareUpdate/0dd5a269619de15c1ff64577034e88fb98eae60b.zip
+ 931428635
+ 12A4345d
+ 8.0
+ Beta
+ 2014-09-09T05:43:28Z
+ 2014-09-17T17:54:02Z
+
+ false
+
+
+ example2:
+ value: |
+
+
+
+ iPad3,4
+ 14G60
+ 10.3.3
+ http://appldnld.apple.com/ios10.3.3/091-23239-20170719-77F53FDC-6992-11E7-B3A1-7C034A4DD6D5/com_apple_MobileAsset_SoftwareUpdate/cb7b5863ff3bd4c635976294d602eda576479cef.zip
+ 514599537
+ 14A346
+ 10.0
+
+ 2017-07-15T19:32:55Z
+ 2017-07-19T16:58:07Z
+
+ false
+
+
+ iPad3,4
+ 14G60
+ 10.3.3
+ http://appldnld.apple.com/ios10.3.3/091-23239-20170719-77F53FDC-6992-11E7-B3A1-7C034A4DD6D5/com_apple_MobileAsset_SoftwareUpdate/cb7b5863ff3bd4c635976294d602eda576479cef.zip
+ 514599537
+ 14B72
+ 10.1
+
+ 2017-07-15T19:32:55Z
+ 2017-07-19T16:58:11Z
+
+ false
+
+
+ iPad3,4
+ 14G60
+ 10.3.3
+ http://appldnld.apple.com/ios10.3.3/091-23239-20170719-77F53FDC-6992-11E7-B3A1-7C034A4DD6D5/com_apple_MobileAsset_SoftwareUpdate/cb7b5863ff3bd4c635976294d602eda576479cef.zip
+ 514599537
+ 14B150
+ 10.1.1
+
+ 2017-07-15T19:32:55Z
+ 2017-07-19T16:58:11Z
+
+ false
+
+
+ iPad3,4
+ 14G60
+ 10.3.3
+ http://appldnld.apple.com/ios10.3.3/091-23239-20170719-77F53FDC-6992-11E7-B3A1-7C034A4DD6D5/com_apple_MobileAsset_SoftwareUpdate/cb7b5863ff3bd4c635976294d602eda576479cef.zip
+ 514599537
+ 14B100
+ 10.1.1
+
+ 2017-07-15T19:32:55Z
+ 2017-07-19T16:58:10Z
+
+ false
+
+
+ '404':
+ description: Not Found
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content: {}
+ summary: Get OTA List For Version
+ operationId: otasForVersion
+ description: GetOTAListForVersion finds all OTA files for a given iOS version
+ tags:
+ - Api
+ parameters:
+ - name: version
+ in: path
+ description: ''
+ required: true
+ example: '8.0'
+ schema:
+ type: number
+
+ /releases:
+ get:
+ responses:
+ '200':
+ description: OK
+ headers:
+ Access-Control-Allow-Methods:
+ schema:
+ type: string
+ Access-Control-Allow-Origin:
+ schema:
+ type: string
+ Cache-Control:
+ schema:
+ type: string
+ Expires:
+ schema:
+ type: string
+ X-Data-Location:
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ schema:
+ $ref: '#/components/schemas/ReleaseDate'
+ example:
+ - date: '2021-03-04'
+ releases:
+ - name: watchOS 5.3.9 (16U693)
+ date: '2021-03-04T13:42:36Z'
+ count: 200
+ type: watchOS
+ - name: watchOS 6.3 (17U208)
+ date: '2021-03-04T13:42:46Z'
+ count: 80
+ type: watchOS
+ - name: watchOS 6.3 (17U6208)
+ date: '2021-03-04T13:42:58Z'
+ count: 12
+ type: watchOS
+ - name: watchOS 6.3 (17U216)
+ date: '2021-03-04T13:44:01Z'
+ count: 144
+ type: watchOS
+ - date: '2020-11-18'
+ releases:
+ - name: iOS 11.0.1 (20B29)
+ date: '2020-11-18T00:06:43Z'
+ count: 4
+ type: iOS
+ - date: '2019-10-16'
+ releases:
+ - name: watchOS 6.1 (17S5076a)
+ date: '2019-10-16T17:12:16Z'
+ count: 324
+ type: watchOS
+ - date: '2019-10-15'
+ releases:
+ - name: iOS 13.1.3 (17A878)
+ date: '2019-10-15T17:00:26Z'
+ count: 51
+ type: iOS
+ - name: iOS OTA 9.9.13.1.3 (17A878)
+ date: '2019-10-15T17:06:55Z'
+ count: 50
+ type: iOS OTA
+ application/x-plist:
+ example: >
+
+
+
+
+
+
+
+ Date
+ 2021-03-04
+ Releases
+
+
+ Count
+ 200
+ Date
+ 2021-03-04T13:42:36Z
+ Name
+ watchOS 5.3.9 (16U693)
+ Type
+ watchOS
+
+
+ Count
+ 80
+ Date
+ 2021-03-04T13:42:46Z
+ Name
+ watchOS 6.3 (17U208)
+ Type
+ watchOS
+
+
+ Count
+ 12
+ Date
+ 2021-03-04T13:42:58Z
+ Name
+ watchOS 6.3 (17U6208)
+ Type
+ watchOS
+
+
+ Count
+ 144
+ Date
+ 2021-03-04T13:44:01Z
+ Name
+ watchOS 6.3 (17U216)
+ Type
+ watchOS
+
+
+
+
+ Date
+ 2020-11-18
+ Releases
+
+
+ Count
+ 4
+ Date
+ 2020-11-18T00:06:43Z
+ Name
+ iOS 11.0.1 (20B29)
+ Type
+ iOS
+
+
+
+
+ Date
+ 2019-10-16
+ Releases
+
+
+ Count
+ 324
+ Date
+ 2019-10-16T17:12:16Z
+ Name
+ watchOS 6.1 (17S5076a)
+ Type
+ watchOS
+
+
+
+
+ Date
+ 2019-10-15
+ Releases
+
+
+ Count
+ 51
+ Date
+ 2019-10-15T17:00:26Z
+ Name
+ iOS 13.1.3 (17A878)
+ Type
+ iOS
+
+
+ Count
+ 50
+ Date
+ 2019-10-15T17:06:55Z
+ Name
+ iOS OTA 9.9.13.1.3 (17A878)
+ Type
+ iOS OTA
+
+
+
+
+
+ application/xml:
+ example: |
+
+
+
+ 2021-03-04
+
+ watchOS 5.3.9 (16U693)
+ 2021-03-04T13:42:36Z
+ 200
+ watchOS
+
+
+ watchOS 6.3 (17U208)
+ 2021-03-04T13:42:46Z
+ 80
+ watchOS
+
+
+ watchOS 6.3 (17U6208)
+ 2021-03-04T13:42:58Z
+ 12
+ watchOS
+
+
+ watchOS 6.3 (17U216)
+ 2021-03-04T13:44:01Z
+ 144
+ watchOS
+
+
+
+ 2020-11-18
+
+ iOS 11.0.1 (20B29)
+ 2020-11-18T00:06:43Z
+ 4
+ iOS
+
+
+
+ 2019-10-16
+
+ watchOS 6.1 (17S5076a)
+ 2019-10-16T17:12:16Z
+ 324
+ watchOS
+
+
+
+ 2019-10-15
+
+ iOS 13.1.3 (17A878)
+ 2019-10-15T17:00:26Z
+ 51
+ iOS
+
+
+ iOS OTA 9.9.13.1.3 (17A878)
+ 2019-10-15T17:06:55Z
+ 50
+ iOS OTA
+
+
+
+ summary: Releases
+ operationId: releases
+ description: >-
+ Releases returns the release timeline of all entities in the IPSW
+ Downloads database
+ tags:
+ - Api
+ parameters:
+
+components:
+ schemas:
+ NotFoundDetails:
+ type: object
+ properties:
+ status:
+ type: integer
+ message:
+ type: string
+ ReleaseDate:
+ type: object
+ properties:
+ date:
+ type: string
+ format: date
+ releases:
+ type: array
+ items:
+ schema:
+ $ref: '#/components/schemas/ReleaseEntry'
+ required:
+ - date
+ - releases
+ ReleaseEntry:
+ type: object
+ properties:
+ name:
+ type: string
+ date:
+ type: string
+ format: date-time
+ count:
+ type: integer
+ type:
+ type: string
+ required:
+ - name
+ - date
+ - count
+ - type
+ OTA:
+ type: object
+ properties:
+ identifier:
+ type: string
+ buildid:
+ type: string
+ version:
+ type: string
+ url:
+ type: string
+ filesize:
+ type: integer
+ prerequisitebuildid:
+ type: string
+ prerequisiteversion:
+ type: string
+ releasetype:
+ type: string
+ uploaddate:
+ type: string
+ format: date-time
+ releasedate:
+ type: string
+ format: date-time
+ marketingversion:
+ nullable: true
+ signed:
+ type: boolean
+ required:
+ - identifier
+ - buildid
+ - version
+ - url
+ - filesize
+ - prerequisitebuildid
+ - prerequisiteversion
+ - releasetype
+ - uploaddate
+ - releasedate
+ - marketingversion
+ - signed
+ Model:
+ type: object
+ properties:
+ identifier:
+ type: string
+ Key:
+ type: object
+ properties:
+ image:
+ type: string
+ filename:
+ type: string
+ kbag:
+ type: string
+ key:
+ type: string
+ iv:
+ type: string
+ date:
+ type: string
+ format: date-time
+ required:
+ - image
+ - filename
+ - kbag
+ - key
+ - iv
+ - date
+ FirmwareKey:
+ type: object
+ properties:
+ identifier:
+ type: string
+ buildid:
+ type: string
+ codename:
+ type: string
+ baseband:
+ type: string
+ updateramdiskexists:
+ type: boolean
+ restoreramdiskexists:
+ type: boolean
+ keys:
+ type: array
+ items:
+ $ref: '#/components/schemas/Key'
+ required:
+ - identifier
+ - buildid
+ - codename
+ - updateramdiskexists
+ - restoreramdiskexists
+ iTunes:
+ type: object
+ properties:
+ platform:
+ type: string
+ version:
+ type: string
+ datefound:
+ type: string
+ format: date-time
+ url:
+ type: string
+ format: uri
+ 64biturl:
+ type: string
+ format: uri
+ releasedate:
+ type: string
+ format: date-time
+ uploaddate:
+ type: string
+ format: date-time
+ required:
+ - platform
+ - version
+ - datefound
+ - url
+ - releasedate
+ - uploaddate
+ Board:
+ type: object
+ properties:
+ boardconfig:
+ type: string
+ platform:
+ type: string
+ cpid:
+ type: integer
+ bdid:
+ type: integer
+ required:
+ - boardconfig
+ - platform
+ - cpid
+ - bdid
+ Firmware:
+ type: object
+ required:
+ - identifier
+ - version
+ - buildid
+ - sha1sum
+ - md5sum
+ - filesize
+ - url
+ - releasedate
+ - uploaddate
+ - signed
+ properties:
+ identifier:
+ type: string
+ version:
+ type: string
+ buildid:
+ type: string
+ sha1sum:
+ type: string
+ md5sum:
+ type: string
+ filesize:
+ type: integer
+ url:
+ type: string
+ format: uri
+ releasedate:
+ type: string
+ format: date-time
+ uploaddate:
+ type: string
+ format: date-time
+ signed:
+ type: boolean
+ Device:
+ type: object
+ required:
+ - name
+ - identifier
+ - firmwares
+ - boards
+ properties:
+ name:
+ type: string
+ identifier:
+ type: string
+ firmwares:
+ type: array
+ items:
+ $ref: '#/components/schemas/Firmware'
+ boards:
+ type: array
+ items:
+ $ref: '#/components/schemas/Board'
+ boardconfig:
+ type: string
+ platform:
+ type: string
+ cpid:
+ type: integer
+ bdid:
+ type: integer
+tags:
+ - name: Api
+
diff --git a/project.yml b/project.yml
new file mode 100644
index 0000000..0fadf8f
--- /dev/null
+++ b/project.yml
@@ -0,0 +1,15 @@
+name: IPSWDownloads
+options:
+ preGenCommand: ./Scripts/generate.sh
+settings:
+ LINT_MODE: ${LINT_MODE}
+packages:
+ IPSWDownloads:
+ path: .
+aggregateTargets:
+ Lint:
+ buildScripts:
+ - path: Scripts/lint.sh
+ name: Lint
+ basedOnDependencyAnalysis: false
+ schemes: {}
\ No newline at end of file