iOS 1.0.3: bundle ID org.cdnutter.stemify, stemify-<version>.ipa, AltStore source generator
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a0726b07a1
commit
1123f460b0
4 files changed
+95
-11
No files matched your search
Executable
+73
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Writes ios/source.json, an AltStore source (SideStore and Feather read it too), from the
|
||||
ios-v* releases on Gitea. Only releases with a stemify-<version>.ipa are listed, since older
|
||||
ones used a different bundle ID. Set GITEA_TOKEN if the repo is private."""
|
||||
import json, os, re, urllib.request
|
||||
|
||||
REPO = "https://git.iamchrisama.com/cdnutter/stemify"
|
||||
API = "https://git.iamchrisama.com/api/v1/repos/cdnutter/stemify"
|
||||
RAW = f"{REPO}/raw/branch/main"
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
||||
def get(url):
|
||||
req = urllib.request.Request(url)
|
||||
if os.environ.get("GITEA_TOKEN"):
|
||||
req.add_header("Authorization", "token " + os.environ["GITEA_TOKEN"])
|
||||
with urllib.request.urlopen(req) as r:
|
||||
return json.load(r)
|
||||
|
||||
|
||||
yml = open(os.path.join(HERE, "..", "project.yml")).read()
|
||||
builds = {} # only the current build number is known locally; older ones fall back to the version
|
||||
m = re.search(r'MARKETING_VERSION: "(.*)"', yml), re.search(r'CURRENT_PROJECT_VERSION: "(.*)"', yml)
|
||||
builds[m[0][1]] = m[1][1]
|
||||
|
||||
versions = []
|
||||
for rel in get(API + "/releases?limit=50"):
|
||||
v = rel["tag_name"].removeprefix("ios-v")
|
||||
ipa = next((a for a in rel["assets"] if a["name"] == f"stemify-{v}.ipa"), None)
|
||||
if not rel["tag_name"].startswith("ios-v") or not ipa:
|
||||
continue
|
||||
versions.append({
|
||||
"version": v,
|
||||
"buildVersion": builds.get(v, v),
|
||||
"date": rel["published_at"],
|
||||
"localizedDescription": rel["body"].strip() or f"Stemify {v}",
|
||||
"downloadURL": ipa["browser_download_url"],
|
||||
"size": ipa["size"],
|
||||
"minOSVersion": "17.0",
|
||||
})
|
||||
|
||||
source = {
|
||||
"name": "Stemify",
|
||||
"identifier": "org.cdnutter.stemify.source",
|
||||
"sourceURL": f"{RAW}/ios/source.json",
|
||||
"iconURL": f"{RAW}/ios/Stemify/Resources/Assets.xcassets/AppIcon.appiconset/icon.png",
|
||||
"website": REPO,
|
||||
"apps": [{
|
||||
"name": "Stemify",
|
||||
"bundleIdentifier": "org.cdnutter.stemify",
|
||||
"developerName": "cdnutter",
|
||||
"subtitle": "Plex music player with live stem mixing.",
|
||||
"localizedDescription": "Plays your Plex library and lets you mute vocals or remix stems on the fly. "
|
||||
"Works offline with downloads, and in the car with CarPlay.",
|
||||
"iconURL": f"{RAW}/ios/Stemify/Resources/Assets.xcassets/AppIcon.appiconset/icon.png",
|
||||
"tintColor": "#FA2D48",
|
||||
"category": "entertainment",
|
||||
"versions": versions,
|
||||
"appPermissions": {
|
||||
"entitlements": ["com.apple.developer.carplay-audio", "com.apple.developer.siri"],
|
||||
"privacy": {
|
||||
"NSLocalNetworkUsageDescription": "Stemify talks to Plex and the stems server on your home network.",
|
||||
"NSSiriUsageDescription": "Ask Siri to play music from your Plex library.",
|
||||
},
|
||||
},
|
||||
}],
|
||||
"news": [],
|
||||
}
|
||||
|
||||
with open(os.path.join(HERE, "..", "source.json"), "w") as f:
|
||||
json.dump(source, f, indent=2)
|
||||
f.write("\n")
|
||||
print(f"source.json: {len(versions)} version(s)")
|
||||
Reference in new issue
Block a user