📓
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
5KB
Code
We recommend reading the below instructions and editing this file with details for your source.
{
"name": "My Example Source",
"identifier": "com.example.MyApps",
"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.
A string that identifies your source and must be unique. AltStore uses this to distinguish sources from one another. To ensure your identifier is unique, we recommend using a reverse-DNS format (e.g.
com.example.MyApps
)You cannot change this identifier once you publish your source. Doing so will cause the source to break for all existing users.
(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",
"screenshotURLs": [
"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)
Links to screenshots/images of your app. The first two will be displayed under the app listing in the browse tab, and the rest will be visible on the app's page. We recommend using screenshots that show the main features of your app.
We recommended using images with 9:16 aspect ratios for best results. Other aspect ratios will be stretched to fill.
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
"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": [
{
"name": "com.apple.security.application-groups"
},
{
"name": "com.apple.developer.siri"
}
],
"privacy": [
{
"name": "PhotoLibrary",
"usageDescription": "App saves photos to your Photo Library."
}
]
},
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
A list of all entitlements the app has. Each entitlement should have the following keys:
The entitlement key (case-sensitive).
Privacy
A list of all
UsageDescription
entries in the app's Info.plist. Each permission should have the following keys:The name of a
UsageDescription
key in the app's Info.plist. Specifically, the case-sensitive string between "NS" and "UsageDescription".e.g. For NSPhotoLibraryUsageDescription, use "PhotoLibrary"
An explanation for how or why the app uses this protected resource. We recommend using the same string that's already in your Info.plist.
"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 15d ago