Comment on page
📓
Make a Source
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.
ExampleSource.json
6KB
Code
We recommend reading the below instructions and editing this file with details for your source.
{
"name": "My Example Source",
"subtitle": "A source for all of my apps",
"description": "Welcome to my source! Here you'll find all of my apps.",
"iconURL": "https://example.com/source_icon.png",
"headerURL": "https://example.com/source_header.png",
"website": "https://example.com",
"tintColor": "#F54F32",
"featuredApps": [
"com.example.myapp",
"com.example.anotherapp"
],
"apps": [],
"news": [],
}
The name of your source as it will appear in AltStore.
(optional)
A short, one-sentence description of your source. This will appear underneath the source's name on its About page.
(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.
(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.(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
.(optional)
A link to the primary website for your source. It will be displayed underneath your source's name on its About page.
(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.(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.
An ordered list of the apps in your source.
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
. "apps": [
{
"name": "My Example App",
"bundleIdentifier": "com.example.myapp",
"developerName": "Example Developer",
"subtitle": "An awesome app.",
"localizedDescription": "This is an awesome app only available on AltStore.",
"iconURL": "https://example.com/myapp_icon.png",
"tintColor": "#F54F32",
"screenshots": [
"https://example.com/myapp_screenshot1.png",
"https://example.com/myapp_screenshot2.png",
"https://example.com/myapp_screenshot3.png"
],
"versions": [],
"appPermissions": {},
},
]
The name of your app as it will appear on its store page.
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.
The name of the developer or developers as it will appear on the store page.
(optional)
A short, one-sentence description of your app that will appear in the Browse tab of AltStore.
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.
A link to you app's icon image. It will automatically be masked to an app icon shape.
(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)
(optional)
Screenshots of your app. We recommend showcasing your app's main features.
A list of all the published versions of your app.
The order of versions matters. AltStore uses the order to determine which version is the "latest" release. For more information, see Updating Apps
Standard
"screenshots": [
{
"imageURL": "https://example.com/iphone_portrait_1.png"
},
{
"imageURL": "https://example.com/iphone_portrait_2.png"
},
{
"imageURL": "https://example.com/iphone_landscape.png",
"width": 2556,
"height": 1179
},
]
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": [
"https://example.com/iphone_portrait_1.png",
"https://example.com/iphone_portrait_2.png",
{
"imageURL": "https://example.com/iphone_landscape.png",
"width": 2556,
"height": 1179
}
]
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."screenshots": {
"iphone": [
"https://example.com/iphone_portrait_1.png",
"https://example.com/iphone_portrait_2.png",
{
"imageURL": "https://example.com/iphone_landscape.png",
"width": 2556,
"height": 1179
}
],
"ipad": [
{
"imageURL": "https://example.com/ipad_portrait.png",
"width": 1668,
"height": 2388
},
{
"imageURL": "https://altstore.io/ipad_landscape",
"width": 2388,
"height": 1668
}
]
}
Link to a screenshot of your app.
(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 explicit
width.
(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 explicit
height.
"versions": [
{
"version": "1.0",
"date": "2023-03-30",
"localizedDescription": "First AltStore release!",
"downloadURL": "https://myapp.com/myapp-1.0.ipa",
"size": 79821,
"minOSVersion": "12.0",
"maxOSVersion": "16.3"
},
]
Your app's version number (
CFBundleShortVersionString)
. It is case sensitive and should match exactly what is in your Info.plist
.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)
(optional)
A description of what's new in this version. You can use this to tell users about new features, bugs fixes, etc.
The URL where your
.ipa
is hosted.(optional)
The minimum iOS version supported by this release. AltStore will hide any updates that are not supported by the user's device.
(optional)
The maximum iOS version supported by this release (inclusive). AltStore will hide any updates that are not supported by the user's device.
"appPermissions": {
"entitlements": [
"com.apple.security.application-groups",
"com.apple.developer.siri"
],
"privacy": {
"NSMicrophoneUsageDescription": "App uses the microphone to record audio.",
"NSCameraUsageDescription": "App uses the camera to take photos."
}
},
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.
"entitlements": [
"com.apple.security.application-groups",
"com.apple.developer.siri"
]
These entitlements are required by all applications, so they don’t need to be explicitly listed:
application-identifier
com.apple.developer.team-identifier
The
get-task-allow
entitlement also doesn't need to be explicitly listed because it is automatically given to all applications resigned with AltStore. Unlike the above entitlements though, it will be shown on the app’s store page.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.
"privacy": {
"NSMicrophoneUsageDescription": "App uses the microphone to record audio.",
"NSCameraUsageDescription": "App uses the camera to take photos."
}
"news": [
{
"title": "New Feature Announcement",
"identifier": "new_feature",
"caption": "Introducing a new feature in AltStore!",
"date": "2023-03-15",
"tintColor": "#F54F32",
"imageURL": "https://example.com/new_feature_image.png",
"notify": true,
"url": "https://example.com/new_feature_details",
"appID": "com.example.myapp"
},
]
The title of your News item.
A unique value to distinguish this News item from others in your source.
A source cannot have multiple News items with the same identifier.
A short, one-sentence description of your News item.
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)
(optional)
The background color for your News item.
This must be in hexadecimal format (e.g #F54F32 or F65432)
(optional)
A link to the image you want featured with your News item.
This will be scaled to fill a 67:40 aspect ratio.
(optional)
When
true
, AltStore will send a push notification about this News item when it next checks for updates in the background.(optional)
A link that AltStore should open when the News item is tapped. Links will be opened in an in-app web browser.
(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.
Last modified 1mo ago