Configuration
Package config contains types and helpers available to configure a Cider project.
You can customize your project using a .cider.yml
file either created from scratch or using cider init
.
- An X here means the field is required.
- This field is optional and can be omitted.
Table of Contents
Specification
Project
Project is the top level configuration type. It is a map of app names to App configuration objects. The keys are simple identifiers that are used in logging, and that you can use with cider release
to filter the apps you intend to release.
For example:
My App:
id: com.myproject.MyApp
primaryLocale: en-US
Other App:
id: com.myproject.MyApp
primaryLocale: en-US
App
App is used to manage the high-level configuration options for an app in general.
- id: string – Bundle ID of the app.
- primaryLocale: string – Primary locale (or language) of the app.
- usesThirdPartyContent: bool – Whether or not the app uses third party content. Omit to avoid declarting content rights.
- availability: Availability – Availability of the app, including pricing and supported territories.
- categories: Categories – Categories to list under in the App Store.
- ageRatings: AgeRatingDeclaration – Content warnings that are used to declare the age rating.
- localizations: AppLocalizations – App info localizations.
- versions: Version – Metadata to configure new App Store versions.
- testflight: Testflight – Metadata to configure new Testflight beta releases.
Availability
Availability wraps aspects of app availability, such as territories and pricing.
For example:
availability:
pricing:
- tier: '0'
availableInNewTerritories: false
territories:
- USA
- availableInNewTerritories: bool – Indicates whether or not the app should be made automaticaly available in new App Store territories, as Apple makes new ones available.
- priceTiers: [PriceSchedule] – List of PriceSchedules that describe the pricing details of your app.
- territories: [string] – Array of ISO 3166-1 Alpha-3 country codes corresponding to territories to make your app available in.
PriceSchedule
PriceSchedule represents pricing availability information that an app should be immediately configured to.
- tier: string – Tier corresponds to a representation of a tier on the App Store Pricing Matrix. For example, Tier 1 should be represented as “1” and the Free tier should be represented as “0”.
- startDate: Time – StartDate is the start date a price schedule should take effect. Set to nil to have it take effect immediately.
- endDate: Time – EndDate is the end date a price schedule should be in effect until. Field is currently a no-op.
Categories
Categories describes the categories your app belongs to. A primary category is required, and a secondary category is encouraged.
Some categories have optional subcategories you can use to improve the specificity of your categorization. Up to two subcategories can provided each for the primary and secondary categories.
For example:
categories:
primary: BUSINESS
secondary: STICKERS
secondarySubcategories:
- STICKERS_ART
See the App Categories section below for more information on app categories.
- primary: string – ID for the primary category.
- primarySubcategories: [string] – IDs of any subcategories to apply to the primary category. Only up to two will be accepted.
- secondary: string – ID for the secondary category.
- secondarySubcategories: [string] – IDs of any subcategories to apply to the secondary category. Only up to two will be accepted.
AgeRatingDeclaration
AgeRatingDeclaration describes the various content warnings you can provide or apply to your applications.
For example:
ageRatings:
kidsAgeBand: 6-8
matureOrSuggestiveThemes: none
profanityOrCrudeHumor: none
violenceCartoonOrFantasy: frequentOrIntense
violenceRealistic: infrequentOrMild
- gamblingAndContests: bool – Whether your app enables legally and guideline-compliant gambling.
- unrestrictedWebAccess: bool – Whether your app enables generalized usage of the internet, such as an internet browser.
- kidsAgeBand: string – Age band to use in categorizing your app for lists aimed at kids. Valid options:
"5 and under"
,"6-8"
,"9-11"
. - alcoholTobaccoOrDrugUseOrReferences: string – Whether your app makes references to alcohol, tobacco, or drug use and/or paraphernalia. Valid options:
"none"
,"infrequentOrMild"
,"frequentOrIntense"
. - medicalOrTreatmentInformation: string – Whether your app offers medical advice or treatment information. Valid options:
"none"
,"infrequentOrMild"
,"frequentOrIntense"
. - profanityOrCrudeHumor: string – Whether your app contains or enables profanity and/or crude humor. Valid options:
"none"
,"infrequentOrMild"
,"frequentOrIntense"
. - sexualContentOrNudity: string – Whether your app contains or enables sexual content or nudity. Valid options:
"none"
,"infrequentOrMild"
,"frequentOrIntense"
. - gamblingSimulated: string – Whether your app enables simulated gambling with either real or simulated currency. Valid options:
"none"
,"infrequentOrMild"
,"frequentOrIntense"
. - horrorOrFearThemes: string – Whether your app contains horror or fear-inducing themes. Valid options:
"none"
,"infrequentOrMild"
,"frequentOrIntense"
. - matureOrSuggestiveThemes: string – Whether your app contains mature or suggestive themes. Valid options:
"none"
,"infrequentOrMild"
,"frequentOrIntense"
. - sexualContentGraphicAndNudity: string – Whether your app contains or enables sexual content or nudity that is graphic in nature. Valid options:
"none"
,"infrequentOrMild"
,"frequentOrIntense"
. - violenceCartoonOrFantasy: string – Whether your app contains cartoon or fantasy violence. Valid options:
"none"
,"infrequentOrMild"
,"frequentOrIntense"
. - violenceRealistic: string – Whether your app contains realistic violence. Valid options:
"none"
,"infrequentOrMild"
,"frequentOrIntense"
. - violenceRealisticProlongedGraphicOrSadistic: string – Whether your app contains prolonged, realistic violence that is graphic or sadistic in nature. Valid options:
"none"
,"infrequentOrMild"
,"frequentOrIntense"
.
AppLocalizations
AppLocalizations is a map of locale codes to AppLocalization objects.
For example:
localizations:
en-US:
name: My App
subtitle: congratulations
ja:
name: 僕のアップ
subtitle: おめでとう
AppLocalization
AppLocalization contains localized details for your App Store listing.
- name: string – Name of the app in this locale. Templated.
- subtitle: string – Subtitle of the app in this locale. Templated.
- privacyPolicyText: string – Privacy policy text if not using a URL. Templated.
- privacyPolicyURL: string – Privacy policy URL if not using a text body. Templated.
Version
Version outlines the general details of your app store version as it will be represented on the App Store.
For example:
versions:
platform: iOS
copyright: 2020 App
releaseType: manual
localizations: ...
reviewDetails: ...
- platform: string – Platform the app is to be released on. Valid options:
"iOS"
,"macOS"
,"tvOS"
. - localizations: VersionLocalizations – Map of locale codes to VersionLocalization objects for App Store version information.
- copyright: string – Copyright information to display on the listing. Templated.
- earliestReleaseDate: Time – Earliest release date, in Go’s RFC3339 format. Set to null to release as soon as is permitted by the release type.
- releaseType: string – Release type. Valid options:
"manual"
,"afterApproval"
,"scheduled"
. - enablePhasedRelease: bool – Indicates whether phased release should be enabled for updates.
- idfaDeclaration: IDFADeclaration – Information about an app’s IDFA declaration. Omit or set to null to declare to Apple that your app does not use the IDFA.
- routingCoverage: File – Routing coverage resource.
- reviewDetails: ReviewDetails – Details about an app to share with the App Store reviewer.
VersionLocalizations
VersionLocalizations is a map of locale codes to VersionLocalization objects.
For example:
localizations:
en-US:
description: My App for cool people
keywords: Apps, Cool, Mine
whatsNew: Thank you for using My App! I bring you updates every week so this continues to be my app.
VersionLocalization
VersionLocalization contains localized details for the listing of a specific version on the App Store.
- description: string – App description in this locale. Templated.
- keywords: string – App keywords in this locale. Templated.
- marketingURL: string – Marketing URL to use in this locale. Templated.
- promotionalText: string – Promotional text to use in this locale. Can be updated without a requiring a new build. Templated.
- supportURL: string – Support URL to use in this locale. Templated.
- whatsNew: string – “Whats New” release note text to use in this locale. Templated.
- previewSets: PreviewSets – Map of preview types to arrays of app preview assets.
- screenshotSets: ScreenshotSets – Map of screenshot types to arrays of app screenshot assets.
PreviewSets
PreviewSets is a map of preview types to arrays of Previews. Each preview type can contain up to three preview assets, which can be content such as videos.
For example:
previewSets:
iphone65:
- file: assets/iphone65/preview1.mp4
ipadPro129:
- file: assets/ipadPro129/preview1.mp4
For more information, see App preview specifications.
Valid previewTypes:
"appleTV"
"desktop"
"ipad105"
"ipad97"
"ipadPro129"
"ipadPro3Gen11"
"ipadPro3Gen129"
"iphone35"
"iphone40"
"iphone47"
"iphone55"
"iphone58"
"iphone65"
"watchSeries3"
"watchSeries4"
Preview
Preview is an expansion of File that defines a new app preview asset.
- path: string – Path to a file on-disk. Templated.
- mimeType: string – MIME type of the asset. Overriding this is usually unnecessary.
- previewFrameTimeCode: string – Time code to a frame to show as a preview of the video, if not the beginning.
File
File refers to a file on disk by name.
- path: string – Path to a file on-disk. Templated.
ScreenshotSets
ScreenshotSets is a map of screenshot types to arrays of Files. Each screenshot type can contain up to ten assets, which must be correctly sized and encoded images for each type.
For example:
screenshotSets:
iphone65:
- file: assets/iphone65/screenshot1.jpg
- file: assets/iphone65/screenshot2.jpg
- file: assets/iphone65/screenshot3.jpg
ipadPro129:
- file: assets/ipadPro129/screenshot1.jpg
- file: assets/ipadPro129/screenshot2.jpg
- file: assets/ipadPro129/screenshot3.jpg
Some screenshot sizes are required in order to submit your app for review. You’ll get an error at submission time if you don’t provide all of the required assets. For information about screenshot requirements, see Screenshot specifications.
Valid screenshotTypes:
"appleTV"
"desktop"
"ipad105"
"ipad97"
"ipadPro129"
"ipadPro3Gen11"
"ipadPro3Gen129"
"iphone35"
"iphone40"
"iphone47"
"iphone55"
"iphone58"
"iphone65"
"watchSeries3"
"watchSeries4"
"ipad105imessage"
"ipad97imessage"
"ipadPro129imessage"
"ipadPro3Gen11imessage"
"ipadPro3Gen129imessage"
"iphone40imessage"
"iphone47imessage"
"iphone55imessage"
"iphone58imessage"
"iphone65imessage"
IDFADeclaration
IDFADeclaration outlines regulatory information for Apple to use to handle your apps’ use of tracking identifiers. Implicitly enables usesIdfa
when creating an app store version.
For example:
idfaDeclaration:
attributesActionWithPreviousAd: false
attributesAppInstallationToPreviousAd: false
honorsLimitedAdTracking: true
servesAds: false
- attributesActionWithPreviousAd: bool – Indicates that the app attributes user action with previous ads.
- attributesAppInstallationToPreviousAd: bool – Indicates that the app attributes user installation with previous ads.
- honorsLimitedAdTracking: bool – Indicates that the app developer will honor Apple’s guidelines around tracking when the user has chosen to limit ad tracking.
- servesAds: bool – Indicates that the app serves ads
ReviewDetails
ReviewDetails contains information for App Store reviewers to use in their evaluation.
For example:
reviewDetails:
contact:
email: person@company.com
firstName: Person
lastName: Personson
phone: '15555555555'
demoAccount:
isRequired: false
notes: |
This app is good and should pass review with flying colors, because it's so good.
attachments:
- path: assets/review/attachment1.png
- path: assets/review/attachment2.png
Note: review attachments are not considered during TestFlight review and are not handled by Cider.
- contact: ContactPerson – Point of contact for the App Store reviewer.
- demoAccount: DemoAccount – A demo account the reviewer can use to evaluate functionality
- notes: string – Notes that the reviewer should be aware of. Templated.
- attachments: [File] – Attachment resources the reviewer should be aware of or use in evaluation.
ContactPerson
ContactPerson is a point of contact for App Store reviewers to reach out to in case of an issue.
- email: string – Contact email. Templated.
- firstName: string – Contact first (given) name. Templated.
- lastName: string – Contact last (family) name. Templated.
- phone: string – Contact phone number. Templated.
DemoAccount
DemoAccount contains account credentials for App Store reviewers to assess your apps.
- isRequired: bool – Whether or not a demo account is required. Other fields can be omitted if this is set to false.
- name: string – Demo account name or login. Templated.
- password: string – Demo account password. Templated.
Testflight
Testflight represents configuration for beta distribution of apps.
- enableAutoNotify: bool – Indicates whether to auto-notify existing beta testers of a new Testflight update.
- licenseAgreement: string – Beta license agreement content. Templated.
- localizations: TestflightLocalizations – Map of locale codes to localization configurations for beta app and beta build information.
- betaGroups: [BetaGroup] – Array of beta group names. If you want to refer to beta groups defined in this configuration file, use the value provided for the group field on the corresponding beta group. Beta groups to add or update in App Store Connect.
- betaTesters: [BetaTester] – Individual beta testers to add or update in App Store Connect.
- reviewDetails: ReviewDetails – Details about an app to share with the App Store reviewer.
TestflightLocalizations
TestflightLocalizations is a map of locale codes to TestflightLocalization objects.
For example:
localizations:
en-US:
description: My App for cool people
feedbackEmail: person@company.com
whatsNew: Thank you for using My App! I bring you updates every week so this continues to be my app.
TestflightLocalization
TestflightLocalization contains localized details for the listing of a specific build in the Testflight app.
- description: string – Beta build description in this locale. Templated.
- feedbackEmail: string – Email for testers to provide feedback to in this locale. Templated.
- marketingURL: string – Marketing URL to use in this locale. Templated.
- privacyPolicyURL: string – Privacy policy URL to use in this locale. Templated.
- tvOSPrivacyPolicy: string – Privacy policy text to use on tvOS in this locale. Templated.
- whatsNew: string – “Whats New” release note text to use in this locale. Templated.
BetaGroup
BetaGroup describes a beta group in Testflight that should be kept in sync and used with this app.
- group: string – Name of the beta group.
- publicLinkEnabled: bool – Indicates whether to enable the public link.
- publicLinkLimitEnabled: bool – Indicates whether a limit on the number of testers who can use the public link is enabled.
- feedbackEnabled: bool – Indicates whether tester feedback is enabled within TestFlight
- publicLinkLimit: int – Maximum number of testers that can join the beta group using the public link.
- testers: [BetaTester] – Array of beta testers to explicitly assign to the beta group.
BetaTester
BetaTester describes an individual beta tester that should have access to this app.
- email: string – Beta tester email.
- firstName: string – Beta tester first (given) name.
- lastName: string – Beta tester last (family) name.
Full Example
My App:
id: com.myproject.MyApp
primaryLocale: en-US
usesThirdPartyContent: false
availability:
availableInNewTerritories: false
priceTiers:
- tier: "0"
territories:
- USA
categories:
primary: SOCIAL_NETWORKING
primarySubcategories:
- ""
- ""
secondary: GAMES
secondarySubcategories:
- GAMES_SIMULATION
- GAMES_RACING
localizations:
en-US:
name: My App
subtitle: Not Your App
versions:
platform: iOS
localizations:
en-US:
description: My App for cool people
keywords: Apps, Cool, Mine
whatsNew: Thank you for using My App! I bring you updates every week so this
continues to be my app.
previewSets:
iphone65:
- path: assets/store/iphone65/preview.mp4
screenshotSets:
iphone65:
- path: assets/store/iphone65/app.jpg
copyright: 2020 Me
releaseType: afterApproval
enablePhasedRelease: true
testflight:
enableAutoNotify: true
licenseAgreement: ""
localizations:
en-US:
description: My App for cool people using the beta
Locales
The App Store operates in a variety of locales and territories. When referring to localized resources in Cider such as AppLocalizations, VersionLocalizations, or TestflightLocalizations, use ISO 639-1 identifiers where possible, in the style of "en-US"
where possible. If an ISO 639-1 code does not exist, use the appropriate ISO 639-2 code.
App Categories
App categories provided and supported by the App Store Connect API are fluid and difficult to create a consistent format for. The App Store adds categories regularly, and it represents a challenge for both metadata maintainers and maintainers of Cider to support. Therefore, the choice has been made to accept any string as a category ID, and let the API respond with whether or not it’s valid.
Here are some known category IDs, with subcategories broken out where applicable, that you can use in your configuration:
"BOOKS"
"BUSINESS"
"DEVELOPER_TOOLS"
"EDUCATION"
"ENTERTAINMENT"
"FINANCE"
"FOOD_AND_DRINK"
"GAMES"
"GAMES_SPORTS"
"GAMES_WORD"
"GAMES_MUSIC"
"GAMES_ADVENTURE"
"GAMES_ACTION"
"GAMES_ROLE_PLAYING"
"GAMES_CASUAL"
"GAMES_BOARD"
"GAMES_TRIVIA"
"GAMES_CARD"
"GAMES_PUZZLE"
"GAMES_CASINO"
"GAMES_STRATEGY"
"GAMES_SIMULATION"
"GAMES_RACING"
"GAMES_FAMILY"
"HEALTH_AND_FITNESS"
"LIFESTYLE"
"MAGAZINES_AND_NEWSPAPERS"
"MEDICAL"
"PRODUCTIVITY"
"REFERENCE"
"SHOPPING"
"SOCIAL_NETWORKING"
"SPORTS"
"STICKERS"
"STICKERS_PLACES_AND_OBJECTS"
"STICKERS_EMOJI_AND_EXPRESSIONS"
"STICKERS_CELEBRATIONS"
"STICKERS_CELEBRITIES"
"STICKERS_MOVIES_AND_TV"
"STICKERS_SPORTS_AND_ACTIVITIES"
"STICKERS_EATING_AND_DRINKING"
"STICKERS_CHARACTERS"
"STICKERS_ANIMALS"
"STICKERS_FASHION"
"STICKERS_ART"
"STICKERS_GAMING"
"STICKERS_KIDS_AND_FAMILY"
"STICKERS_PEOPLE"
"STICKERS_MUSIC"
"MUSIC"
"TRAVEL"
"UTILITIES"
"WEATHER"
For more information on categories, see Choosing a category on the Apple Developer Portal.