๐Make a Source
Last updated
Last updated
To distribute your apps with AltStore you need to first create a source, which is just a self-hosted JSON file containing basic metadata about your apps. Below is a list of required keys to make a valid source in AltStore along with optional keys you can use to further customize your source.
Create a new JSON document
Input information about your Source using the Source Keys below
Host that document at your sourceURL
Download this example source as a template to edit with your source's information
name
(string)The name of your source as it will appear in AltStore.
subtitle
(string)(optional)
A short, one-sentence description of your source. This will appear underneath the source's name on its About page.
description
(string)(optional)
A full-length description of your source. This can include any information you believe is relevant for your source, such as information about your apps or additional links.
iconURL
(string)(optional)
A link to an image that will be used to visually identify your source. It will appear as a circle.
If not provided, this defaults to the iconURL
of the first app listed in your source.
headerURL
(string)(optional)
A link to an image that will be displayed as the header of your source's About page. The image will be blurred by default, but can be viewed by swiping the source's info banner.
We recommended using a 3:2 aspect ratio for best results.
If not provided, this defaults to your source's iconURL
.
website
(string)(optional)
A link to the primary website for your source. It will be displayed underneath your source's name on its About page.
patreonURL
(string)(optional)
A link to your Patreon campaign. This will enable you to distribute Patreon-only apps through your Source.
You must add a Patreon object to every app listing you want to designate as Patreon-only. See the Apps section for more information.
tintColor
(string)(optional)
A color that will be used to theme your source's About page. We recommend using a color that works well with your source's icon for consistent theming, but you are free to choose any color you want. Black and white tint colors will be automatically adjusted for legibility.
This must be in hexadecimal format (e.g #F54F32 or C9B632)
If not provided, this defaults to the tintColor
of the first app listed in your source.
featuredApps
(array of strings)(optional)
An ordered list of app bundleIdentifier
's you want featured on your source's About page. Currently, only the first five will be displayed.
If not provided, this defaults to the first five apps listed in your source.
apps
(array of Apps)An ordered list of the apps in your source.
See Apps section below for more.
news
(array of News Item)A list of the News items in your source. The ordering does not matter because AltStore will display them in reverse chronological order according to their date
.
See News Items section below for more.
name
(string)The name of your app as it will appear on its store page.
bundleIdentifier
(string)Your app's bundle identifier (CFBundleIdentifier
). It is case sensitive and should match exactly what is in your Info.plist
.
A source cannot have multiple apps with the same bundle identifier.
marketplaceID
(string)The "Apple ID" of your notarized app. You can find this on your app's App Store Connect page under "App Information."
Not required for non-notarized apps distributed with AltStore (World)
developerName
(string)The name of the developer or developers as it will appear on the store page.
subtitle
(string)(optional)
A short, one-sentence description of your app that will appear in the Browse tab of AltStore.
localizedDescription
(string)A full-length description of your app. This can include any information you believe is relevant for your app, such as feature descriptions or additional links.
iconURL
(string)A link to you app's icon image. It will automatically be masked to an app icon shape.
tintColor
(string)(optional)
The color used to theme your app's store page. We recommend using your app's existing tint color (if it has one), but you are free to choose any color you want.
This must be in hexadecimal format (e.g #F54F32 or C9B632)
category
(string)(optional)
The store category best representing your app.
This must be one of the below values. If no category is provided it will default to other
developer
entertainment
games
lifestyle
other
photo-video
social
utilities
screenshots
(array of Screenshots)(optional)
Screenshots of your app. We recommend showcasing your app's main features.
Please see the Screenshots section below for detailed info and instructions.
versions
(array of App Versions)A list of all the published versions of your app.
Please see the App Versions section below for detailed info and instructions
The order of versions matters. AltStore uses the order to determine which version is the "latest" release. For more information, see Updating Apps
appPermissions
(App Permissions object)An object listing all entitlements and privacy permissions information used by the app.
See App Permissions section below for more.
patreon
(Patreon object)(optional)
An object specifying the required pledge/tiers to download the app.
See Patreon section below for more.
Standard
If a screenshot has an aspect ratio of 9:19.5 (aka a portrait Face ID iPhone), you can optionally list the URL directly instead of a full Screenshot
object:
Screenshots with an aspect ratio of 9:19.5 (aka a portrait Face ID iPhone) will have their corners automatically rounded.
If your app supports both iPhone and iPad and you want to use different screenshots for each device, you can provide multiple arrays nested under the iphone
and ipad
keys, respectively, using the same format as above.
imageURL
(string)Link to a screenshot of your app.
width
(number)(optional)
The pixel width of the image. If not provided, AltStore will assume a default size of 393 x 852 points (iPhone 15 in portrait mode).
All iPad screenshots must provide an explicitwidth.
height
(number)(optional)
The pixel height of the image. If not provided, AltStore will assume a default size of 393 x 852 points (iPhone 15 in portrait mode).
All iPad screenshots must provide an explicitheight.
For information on how to update your apps once they're published, see Updating Apps.
version
(string)Your app's version number (CFBundleShortVersionString)
. It is case sensitive and should match exactly what is in your Info.plist
.
buildVersion
(string)Your app's build number (CFBundleVersion)
. It is case sensitive and should match exactly what is in your Info.plist
.
marketingVersion
(string)(optional)
The full version displayed to users on your app's store page and throughout the UI. This can be anything you want and does not need to match version
or buildVersion
.
If not provided, this will default to combining version
and buildVersion,
e.g. 1.3 (4)
date
(string)The release date for this version.
This should be in ISO 8601 format (e.g. 2023-2-17 or 2023-02-17T12:00:00-06:00)
localizedDescription
(string)(optional)
A description of what's new in this version. You can use this to tell users about new features, bugs fixes, etc.
downloadURL
(string)The URL where your ADP directory is hosted.
For sideloading, this only needs to be the .ipa
file
minOSVersion
(string)(optional)
The minimum iOS version supported by this release. AltStore will hide any updates that are not supported by the user's device.
maxOSVersion
(string)(optional)
The maximum iOS version supported by this release (inclusive). AltStore will hide any updates that are not supported by the user's device.
For security purposes, AltStore requires that sources list all entitlements and privacy permissions for every app. These will be checked against the downloaded .ipa, and AltStore will refuse to install any app whose permissions do not match.
entitlements
(array of strings)A list of all entitlements used by the app and its app extensions.
These entitlements are required for all applications, so don't need to be listed:
com.app.developer.team-identifier
application-identifier
privacy
(dictionary of strings)A dictionary with all the "UsageDescription" keys in your app's Info.plist along with their descriptions. We recommend using the same descriptions already in your Info.plist.
title
(string)The title of your News item.
identifier
(string)A unique value to distinguish this News item from others in your source.
A source cannot have multiple News items with the same identifier.
caption
(string)A short, one-sentence description of your News item.
date
(string)The publishing date for this News item.
This should be in ISO 8601 format (e.g. 2023-2-17 or 2023-02-17T12:00:00-06:00)
tintColor
(string) (optional)
The background color for your News item.
This must be in hexadecimal format (e.g #F54F32 or F65432)
imageURL
(string) (optional)
A link to the image you want featured with your News item.
This will be scaled to fill a 67:40 aspect ratio.
notify
(boolean)(optional)
When true
, AltStore will send a push notification about this News item when it next checks for updates in the background.
url
(string)(optional)
A link that AltStore should open when the News item is tapped. Links will be opened in an in-app web browser.
appID
(string) (optional)
The bundle identifier of an associated app. This will make the app's info banner appear below the News item, which will open the app's Store page when tapped.
By adding a Patreon object to your app listing, AltStore can ensure only Patrons can download the app.
For more information on how AltStore's Patreon Integration works, please visit the Patreon Integration page.
The below requirements are mutually inclusive. This means if any of the conditions you provide are met, a user will be able to download your app.
If you don't provide any of the following keys, AltStore will default to allowing all active Patrons to download the app regardless of tier (excluding followers).
pledge
(number)(optional)
The minimum pledge amount required for download. This can be used to limit downloads to higher tiers.
This amount is assumed to be in USD by default. If using a non-USD currency for your campaign, you must specify it using the currency key below.
This amount will be shown as the app's monthly price if provided. For this reason, we recommend always providing a minimum pledge amount, even if you only have one tier.
currency
(string)(optional*)
The ISO currency code of your campaign's currency.
*This key is required if you provide a pledge amount and your campaign uses a non-USD currency.
benefit
(string)(optional)
The identifier of a campaign benefit. You can add benefits to any of your Patreon campaign tiers, then specify it using this key to allow anyone with that benefit to download your app.
Benefit identifiers are hidden by default, but you can find them by using the Patreon API.
tiers
(array of strings)(optional)
A list of tier identifiers designating which tiers are required to download. A user must be a member of one of these tiers to download your app.
You can find a tier's identifier by selecting a tier and going to its checkout page. The identifier is the numeric value at the end of the URL.
https://www.patreon.com/checkout/shaneriley?rid=
8373919