85 lines
4.8 KiB
Bash
85 lines
4.8 KiB
Bash
#!/bin/bash
|
|
# Download a curated shortlist of iOS 9.3.5-compatible IPAs from archive.org
|
|
# (iOSObscura collection) on a network where archive.org DNS is blocked.
|
|
#
|
|
# Usage: bash fetch-ios935-ipas.sh [outdir]
|
|
# Default outdir: ./ipas935
|
|
#
|
|
# WHY --resolve: the home router DNS (192.168.1.1) does not resolve archive.org.
|
|
# archive.org 302-redirects downloads to dn####.ca.archive.org, which ALSO must
|
|
# be pinned, otherwise curl resolves it and fails.
|
|
#
|
|
# Requires: curl, dig. Run from anywhere.
|
|
|
|
set -u
|
|
|
|
OUT="${1:-./ipas935}"
|
|
mkdir -p "$OUT"
|
|
|
|
ORIGIN_IP=207.241.224.2 # archive.org (nlb). Re-check with: dig +short archive.org @1.1.1.1
|
|
BASE="https://archive.org/download/iOSObscura"
|
|
|
|
# Relative archive paths. Spaces MUST be %20-encoded in the URL.
|
|
PATHS=(
|
|
# --- music / MIDI ---
|
|
"iOS 4/jp.co.korg.iMS-20/iMS-20-(jp.co.korg.iMS-20)-1.5.2-(iOS_4.2)-b907eac71f276430c76260efb4bc88a2.ipa"
|
|
"iOS 4/jp.co.korg.iELECTRIBE/iELECTRIBE-(jp.co.korg.iELECTRIBE)-1.5.2-(iOS_4.2)-9402340e34240bb1ec56487a6e8c2006.ipa"
|
|
"iOS 5/jp.co.korg.iPolysix/iPolysix-(jp.co.korg.iPolysix)-146-(iOS_5.1)-cf0662fa0ecfac24cd633eeec2f758d7.ipa"
|
|
"iOS 5/jp.co.korg.ikaossilator/iKaossilator-(jp.co.korg.ikaossilator)-2.3.0-(iOS_5.1)-7f78df777b8eea3ac3a7421383b1107e.ipa"
|
|
"iOS 5/com.moogmusic.animoog/Animoog-(com.moogmusic.animoog)-2.1.1-(iOS_5.0)-005cf967f702b9cd728a8e90869bae2d.ipa"
|
|
"iOS 5/com.moogmusic.filtatron/Filtatron-(com.moogmusic.filtatron)-1.2.0-(iOS_5.0)-41c0b0b57ae11a7127098218b2fa8b35.ipa"
|
|
"iOS 5/com.arturia.imini/iMini-(com.arturia.imini)-1.1-(iOS_5.1)-3a7d6691ce8d5aeff9247471a7e4c065.ipa"
|
|
"iOS 5/com.giku.Horizon/Sunrizer-(com.giku.Horizon)-3.0-(iOS_5.0)-32152900a4482119c57590557514dd6a.ipa"
|
|
"iOS 4/jp.co.yamaha.emi.tenopad/TNR-i-(jp.co.yamaha.emi.tenopad)-1.2.1-(iOS_4.3)-2fcfb9205482329a25b73d3df866b7c0.ipa"
|
|
"iOS 6/com.pulsecodeinc.ModularSynthesizer/modular-(com.pulsecodeinc.ModularSynthesizer)-1.04-(iOS_6.0)-1a62151edacb566c74bc4afd70200eef.ipa"
|
|
"iOS 8/com.apple.mobilegarageband/GarageBand-(com.apple.mobilegarageband)-3417.29-(iOS_8.0)-b3b43b5ab1b763afdbc7c3b7293fc19a.ipa"
|
|
"iOS 8/com.steinberg.cubasis/Cubasis-(com.steinberg.cubasis)-2.2.0.8-(iOS_8.3)-e133725270833b6bca3fb97db0eb2f61.ipa"
|
|
"iOS 5/net.intua.beatmaker2/BeatMaker 2-(net.intua.beatmaker2)-2.5.4-(iOS_5.0)-78f41efe78dae096ccf1b472fe2f4bd8.ipa"
|
|
"iOS 8/net.fingerlab.beat/DM1-(net.fingerlab.beat)-01-(iOS_8.0)-351e437413b9f3765d0b6d967750977b.ipa"
|
|
"iOS 6/net.fingerlab.musyc/Musyc-(net.fingerlab.musyc)-017-(iOS_6.0)-1e5da2d554b6803e6dde327f6ac79304.ipa"
|
|
"iOS 7/se.propellerheads.figure/Figure-(se.propellerheads.figure)-341-(iOS_7.0)-d2ba4bce45e5ca0d23a0863c98d90673.ipa"
|
|
"iOS 5/co.uk.blipinteractive.NanoStudio/NanoStudio-(co.uk.blipinteractive.NanoStudio)-1.43-(iOS_5.0)-7a3bdf08297a38060d045afdd7751de0.ipa"
|
|
"iOS 5/us.audiob.Audiobus/Audiobus-(us.audiob.Audiobus)-1.0.2.5-(iOS_5.0)-39dc47e3dc76359207763652f99a065e.ipa"
|
|
"iOS 6/com.native-instruments.traktordj/Traktor DJ-(com.native-instruments.traktordj)-1.3.3.383-(iOS_6.1)-57b48c1607bc00f53cdf5832e492c071.ipa"
|
|
"iOS 5/com.sonosaurus.thumbjam/ThumbJam-(com.sonosaurus.thumbjam)-2.4.2-(iOS_5.0)-0479efba0d47b4672117f5a2ccfeed6e.ipa"
|
|
"iOS 5/com.ikmultimediaus.igrandpadfull/iGrand Piano-(com.ikmultimediaus.igrandpadfull)-1.0.1-(iOS_5.1)-5b480775a406e8bd16e75c29daf098a9.ipa"
|
|
"iOS 7/com.collect3.beatwave/Beatwave-(com.collect3.beatwave)-2.6.1.2-(iOS_7.0)-f720430fc4c0d1a0568c4b9b2a047bff.ipa"
|
|
# --- general utility (from top-level Clutch-renamed files) ---
|
|
"VLC-v2.6.6--iOS6.1-(Clutch-1.4.6).ipa"
|
|
"Puffin-v4.7.3--iOS6.0-(Clutch-1.4.6).ipa"
|
|
"Kodi Remote-v1.5.5--iOS5.1.1-(Clutch-1.4.6).ipa"
|
|
"VNC Viewer-v2.3.5--iOS5.1.1-(Clutch-1.4.6).ipa"
|
|
"TeamViewer-v10.0.37492--iOS5.0-(Clutch-1.4.6).ipa"
|
|
)
|
|
|
|
ok=0; fail=0
|
|
for rel in "${PATHS[@]}"; do
|
|
enc=$(printf '%s' "$rel" | sed 's/ /%20/g')
|
|
url="$BASE/$enc"
|
|
fname=$(basename "$rel")
|
|
printf '>> %s\n' "$fname"
|
|
|
|
# resolve the redirect host once per file
|
|
DN=$(curl -sI --resolve archive.org:443:"$ORIGIN_IP" --max-time 30 "$url" \
|
|
| grep -i '^location' | tr -d '\r' | sed 's/^[Ll]ocation: //')
|
|
if [ -z "$DN" ]; then
|
|
printf ' !! no redirect / not found\n'; fail=$((fail+1)); continue
|
|
fi
|
|
HOST=$(printf '%s' "$DN" | sed -E 's#https://([^/]+)/.*#\1#')
|
|
IP=$(dig +short +time=5 +tries=2 "$HOST" @1.1.1.1 | tail -1)
|
|
if [ -z "$IP" ]; then
|
|
printf ' !! no DNS for %s\n' "$HOST"; fail=$((fail+1)); continue
|
|
fi
|
|
|
|
curl -sL --resolve archive.org:443:"$ORIGIN_IP" --resolve "$HOST:443:$IP" \
|
|
--max-time 300 -o "$OUT/$fname" "$url"
|
|
if [ -s "$OUT/$fname" ] && file "$OUT/$fname" | grep -qi 'zip archive'; then
|
|
printf ' ok %s\n' "$(du -h "$OUT/$fname" | cut -f1)"; ok=$((ok+1))
|
|
else
|
|
printf ' !! bad download\n'; fail=$((fail+1))
|
|
fi
|
|
done
|
|
|
|
printf '\n=== done: %d ok, %d failed -> %s ===\n' "$ok" "$fail" "$OUT"
|
|
printf 'Install requires jailbreak + AppSync Unified (Cydia).\n'
|