{"schema":{"type":"object","properties":{"name":{"description":"The name of your app as it appears both within Exponent and on your home screen as a standalone app.","type":"string"},"description":{"description":"A short description of what your app is and why it is great.","type":"string"},"slug":{"description":"The friendly url name for publishing. eg: `exp.host/@your-username/slug`.","type":"string","pattern":"^[a-zA-Z0-9\\-]+$"},"privacy":{"description":"Either `public` or `unlisted`. If not provided, defaults to `unlisted`. In the future `private` will be supported. `unlisted` hides the experience from search results.","enum":["public","unlisted"],"type":["array","boolean","number","object","string","null"]},"sdkVersion":{"description":"The Exponent sdkVersion to run the project on. This should line up with the version specified in your package.json.","type":"string","pattern":"^(\\d+\\.\\d+\\.\\d+)|(UNVERSIONED)$"},"version":{"description":"Your app version, use whatever versioning scheme that you like.","type":"string"},"orientation":{"description":"Lock your app to a specific orientation with `portrait` or `landscape`. Defaults to no lock.","enum":["default","portrait","landscape"],"type":["array","boolean","number","object","string","null"]},"primaryColor":{"description":"On Android, this will determine the color of your app in the multitasker. Currently this is not used on iOS, but it may be used for other purposes in the future.","type":"string","pattern":"^#|(#)\\d{6}$","meta":{"regexHuman":"6 character long hex color string, eg: `'#000000'`"}},"icon":{"description":"Local path or remote url to an image to use for your app's icon. We recommend that you use a 512x512 png file with transparency. This icon will appear on the home screen and within the Exponent app.","type":"string","meta":{"asset":true,"contentTypePattern":"^image/png$","contentTypeHuman":".png image"}},"notification":{"description":"Configuration for remote (push) notifications.","type":"object","properties":{"icon":{"description":"Local path or remote url to an image to use as the icon for push notifications. 48x48 png grayscale with transparency.","type":"string","meta":{"asset":true,"contentTypePattern":"^image/png$","contentTypeHuman":".png image"}},"color":{"description":"Tint color for the push notification image when it appears in the notification tray.","type":"string","pattern":"^#|(#)\\d{6}$","meta":{"regexHuman":"6 character long hex color string, eg: `'#000000'`"}},"androidMode":{"description":"Show each push notification individually (`default`) or collapse into one (`collapse`).","enum":["default","collapse"],"type":["array","boolean","number","object","string","null"]},"androidCollapsedTitle":{"description":"If `androidMode` is set to `collapse`, this title is used for the collapsed notification message. eg: `'#{unread_notifications} new interactions'`.","type":"string"}},"additionalProperties":false},"loading":{"description":"Configuration for the loading screen that users see when opening your app, while fetching & caching bundle and assets.","type":"object","properties":{"icon":{"description":"Local path or remote url to an image to display while starting up the app. Image size and aspect ratio are up to you. Must be a .png.","type":"string","meta":{"asset":true,"contentTypePattern":"^image/png$","contentTypeHuman":".png image"}},"exponentIconColor":{"description":"If no icon is provided, we will show the Exponent logo. You can choose between `white` and `blue`.","enum":["white","blue"],"type":["array","boolean","number","object","string","null"]},"exponentIconGrayscale":{"description":"Similar to `exponentIconColor` but instead indicate if it should be grayscale (`1`) or not (`0`).","type":"number","minimum":0,"maximum":1},"backgroundImage":{"description":"Local path or remote url to an image to fill the background of the loading screen. Image size and aspect ratio are up to you. Must be a .png.","type":"string","meta":{"asset":true,"contentTypePattern":"^image/png$","contentTypeHuman":".png image"}},"backgroundColor":{"description":"Color to fill the loading screen background","type":"string","pattern":"^#|(#)\\d{6}$","meta":{"regexHuman":"6 character long hex color string, eg: `'#000000'`"}},"hideExponentText":{"description":"By default, Exponent shows some text at the bottom of the loading screen. Set this to `true` to disable.","type":"boolean"},"loadingIndicatorStyleExperimental":{"description":"DEPRECATED: was used in the past for changing the style of the iOS loading indicator.","type":"string","pattern":"^light$","meta":{"autogenerated":true}}},"additionalProperties":false},"appKey":{"description":"By default, Exponent looks for the application registered with the AppRegistry as `main`. If you would like to change this, you can specify the name in this property.","type":"string"},"androidStatusBarColor":{"type":"string","pattern":"^#|(#)\\d{6}$","meta":{"deprecated":true,"regexHuman":"6 character long hex color string, eg: `'#000000'`"}},"androidStatusBar":{"description":"Configuration for android statusbar.","type":"object","properties":{"barStyle":{"description":"Configure the statusbar icons to have light or dark color.","type":"string","enum":["light-content","dark-content"]},"backgroundColor":{"description":"Configuration for android statusbar.","type":"string","pattern":"^#|(#)\\d{6}$","meta":{"regexHuman":"6 character long hex color string, eg: `'#000000'`"}}}},"androidHideExponentNotificationInShellApp":{"description":"By default, Exponent adds a notification to your app with refresh button and debug info. Set this to `true` to disable.","type":"boolean"},"scheme":{"description":"Url scheme to link into your app. For example, if we set this to `'rnplay'`, then rnplay:// urls would open your app when tapped.","type":"string","meta":{"standaloneOnly":true}},"entryPoint":{"description":"The relative path to your main JavaScript file.","type":"string"},"extra":{"description":"Any extra fields you want to pass to your experience.","type":"object","properties":{},"additionalProperties":true},"rnCliPath":{"type":"string"},"packagerOpts":{"type":"object","properties":{},"additionalProperties":true},"ignoreNodeModulesValidation":{"type":"boolean"},"nodeModulesPath":{"type":"string"},"ios":{"description":"iOS standalone app specific configuration","type":"object","meta":{"standaloneOnly":true},"properties":{"bundleIdentifier":{"description":"The bundle identifier for your iOS standalone app. You make it up, but it needs to be unique on the App Store. See [this StackOverflow question](http://stackoverflow.com/questions/11347470/what-does-bundle-identifier-mean-in-the-ios-project).","type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9\\-\\.]+$","meta":{"regexHuman":"iOS bundle identifier notation unique name for your app. For example, host.exp.exponent, where exp.host is our domain and Exponent is our app."}},"buildNumber":{"description":"Build number for your iOS standalone app. Must be a string that matches Apple's [format for CFBundleVersion](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102364).","type":"string","pattern":"^[A-Za-z0-9\\.]+$"},"config":{"type":"object","properties":{"usesNonExemptEncryption":{"description":"Sets `ITSAppUsesNonExemptEncryption` in the standalone ipa's Info.plist to the given boolean value.","type":"boolean"},"googleMapsApiKey":{"description":"`Google Maps iOS SDK `_ key for your standalone app.","type":"string"},"googleSignIn":{"description":"[Google Sign-In iOS SDK](https://developers.google.com/identity/sign-in/ios/start-integrating) keys for your standalone app.","type":"object","properties":{"reservedClientId":{"description":"The reserved client id url scheme. Can be found in `GoogleService-Info.plist`.","type":"string"}},"additionalProperties":false}},"additionalProperties":false},"supportsTablet":{"description":"Whether your standalone iOS app supports tablet screen sizes.","type":"boolean"},"infoPlist":{"description":"Arbitrary configuration to add to your standalone app's native Info.plist. Applied prior to all other Exponent-specific configuration. No other validation is performed, so use this at your own risk of rejection from the App Store.","type":"object","properties":{},"additionalProperties":true}},"additionalProperties":false},"android":{"description":"Android standalone app specific configuration","type":"object","meta":{"standaloneOnly":true},"properties":{"package":{"description":"The package name for your Android standalone app. You make it up, but it needs to be unique on the Play Store. See [this StackOverflow question](http://stackoverflow.com/questions/6273892/android-package-name-convention).","type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9\\_\\.]+$","meta":{"regexHuman":"Reverse DNS notation unique name for your app. For example, host.exp.exponent, where exp.host is our domain and Exponent is our app."}},"versionCode":{"description":"Version number required by Google Play. Increment by one for each release. https://developer.android.com/studio/publish/versioning.html.","type":"integer"},"config":{"type":"object","properties":{"fabric":{"description":"[Twitter Fabric](https://get.fabric.io/) keys to hook up Crashlytics and other services.","type":"object","properties":{"apiKey":{"description":"Your Fabric API key","type":"string"},"buildSecret":{"description":"Your Fabric build secret","type":"string"}},"additionalProperties":false},"googleMaps":{"description":"[Google Maps Android SDK](https://developers.google.com/maps/documentation/android-api/signup) key for your standalone app.","type":"object","properties":{"apiKey":{"description":"Your Google Maps Android SDK API key","type":"string"}},"additionalProperties":false},"googleSignIn":{"description":"[Google Sign-In Android SDK](https://developers.google.com/identity/sign-in/android/start-integrating) keys for your standalone app.","type":"object","properties":{"apiKey":{"description":"The Android API key. Can be found in the credentials section of the developer console or in `google-services.json`.","type":"string"},"certificateHash":{"description":"The SHA-1 hash of the signing certificate used to build the apk without any separator `:`. Can be found in `google-services.json`. https://developers.google.com/android/guides/client-auth","type":"string"}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"facebookScheme":{"description":"Used for Facebook native login. Starts with 'fb' and followed by a string of digits, like 'fb1234567890'. You can find your scheme at https://developers.facebook.com/docs/facebook-login/ios in the 'Configuring Your info.plist' section.","type":"string","pattern":"^fb[0-9]+$"},"isDetached":{"description":"Is app detached","type":"boolean","meta":{"autogenerated":true}},"detach":{"description":"Extra fields needed by detached apps","type":"object","properties":{},"meta":{"autogenerated":true},"additionalProperties":true}},"additionalProperties":false,"required":["name","slug","sdkVersion"]}}