Skip to content

Commit a315e1c

Browse files
jimmyleeexpbot
authored andcommitted
cuts version 28 of the docs
fbshipit-source-id: b7b4374
1 parent 08e232b commit a315e1c

File tree

169 files changed

+13052
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

169 files changed

+13052
-1
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "expo-docs",
3-
"version": "27.0.0",
3+
"version": "28.0.0",
44
"private": true,
55
"scripts": {
66
"dev": "concurrently -k 'yarn run mdjs' 'node server.js'",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
---
2+
title: Advanced Release Channels
3+
---
4+
5+
> **WARNING:** Channel features are in beta, run `npm install -g exp` to get the most up to date features.
6+
7+
## Introduction
8+
9+
For a quick introduction to release channels, read [this](https://docs.expo.io/versions/latest/guides/release-channels.html).
10+
11+
When you publish your app by running `exp publish --release-channel staging`, it creates:
12+
13+
- a release, identified by a `publicationId` for Android and iOS platforms. A release refers to your bundled source code and assets at the time of publication.
14+
- a link to the release in the `staging` channel, identified by a `channelId`. This is like a commit on a git branch.
15+
16+
For simplicity, the rest of this article will refer to just the `ios` releases, but you could swap out ios for android at any point and everything would still be true.
17+
18+
## See past publishes
19+
You can see everything that you’ve published with `exp publish:history`.
20+
21+
#### Example command and output
22+
`exp publish:history --platform ios`
23+
24+
| publishedTime | appVersion | sdkVersion | platform | channel | channelId | publicationId |
25+
|---|---|---|---|---|---|---|
26+
| 2018-01-05T23:55:04.603Z | 1.0.0 | 24.0.0 | ios | staging | 9133d577 | d9bd6b80 |
27+
28+
To see more details about this particular release, you can run `exp publish:details`
29+
30+
#### Example command and output
31+
`exp publish:details --publish-id d9bd6b80`
32+
33+
[![Publish Details](./release-channels-pub-details-1.png)](/_images/release-channels-pub-details-1.png)
34+
35+
36+
## What version of the app will my users get?
37+
38+
Your users will get the most recent compatible release that was pushed to a channel. Factors that affect compatibility:
39+
40+
- sdkVersion
41+
- platform
42+
43+
The following flowchart shows how we determine which release to return to a user:
44+
45+
[![Serving Flowchart](./release-channels-flowchart.png)](/_images/release-channels-flowchart.png)
46+
47+
## Promoting a release to a new channel
48+
49+
Example use case: you previously published a release to `staging` and everything went well in your testing. Now you want this release to be active in another channel (ie) production
50+
51+
We run `exp publish:set` to push our release to the `production` channel.
52+
`exp publish:set --publish-id d9bd6b80 --release-channel production`
53+
54+
Continuing from the previous section, we can see that our release is available in both the `staging` and the `production` channels.
55+
56+
`exp publish:history --platform ios`
57+
58+
| publishedTime | appVersion | sdkVersion | platform | channel | channelId | publicationId |
59+
|---|---|---|---|---|---|---|
60+
| 2018-01-05T23:55:04.603Z | 1.0.0 | 24.0.0 | ios | staging | 9133d577 | d9bd6b80 |
61+
| 2018-01-05T23:55:04.603Z | 1.0.0 | 24.0.0 | ios | production | 6e406223 | d9bd6b80 |
62+
63+
## Rollback a channel entry
64+
65+
Example use case: you published a release to your `production` channel, only to realize that it includes a major regression for some of your users, so you want to revert back to the previous version.
66+
67+
Continuing from the previous section, we rollback our `production` channel entry with `exp publish:rollback`.
68+
69+
`exp publish:rollback --channel-id 6e406223`
70+
71+
Now we can see that our release is no longer available in the production channel.
72+
73+
`exp publish:history --platform ios`
74+
75+
| publishedTime | appVersion | sdkVersion | platform | channel | channelId | publicationId |
76+
|---|---|---|---|---|---|---|
77+
| 2018-01-05T23:55:04.603Z | 1.0.0 | 24.0.0 | ios | staging | 9133d577 | d9bd6b80 |
78+
79+
## Release channels CLI tools
80+
### Publish history
81+
82+
```
83+
Usage: exp publish:history [--release-channel <channel-name>] [--count <number-of-logs>]
84+
85+
View a log of your published releases.
86+
87+
Options:
88+
-c, --release-channel <channel-name> Filter by release channel. If this flag is not included, the most recent publications will be shown.
89+
-count, --count <number-of-logs> Number of logs to view, maximum 100, default 5.
90+
```
91+
92+
### Publish details
93+
```
94+
Usage: exp publish:details --publish-id <publish-id>
95+
View the details of a published release.
96+
97+
Options:
98+
--publish-id <publish-id> Publication id. (Required)
99+
```
100+
101+
### Publish rollback
102+
```
103+
Usage: exp publish:rollback --channel-id <channel-id>
104+
105+
Rollback an update to a channel.
106+
107+
Options:
108+
--channel-id <channel-id> The channel id to rollback in the channel. (Required)
109+
```
110+
111+
### Publish set
112+
```
113+
Usage: exp publish:set --release-channel <channel-name> --publish-id <publish-id>
114+
115+
Set a published release to be served from a specified channel.
116+
117+
Options:
118+
-c, --release-channel <channel-name> The channel to set the published release. (Required)
119+
-p, --publish-id <publish-id> The id of the published release to serve from the channel. (Required)
120+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
---
2+
title: Deploying to App Stores
3+
---
4+
5+
This guide offers best practices around submitting your Expo app to the Apple iTunes Store and Google Play Store. To learn how to generate native binaries for submission, see [Building Standalone Apps](./building-standalone-apps.html).
6+
7+
Although you can share your published project through the Expo Client and on your [expo.io](https://expo.io) profile, submitting a standalone app to the Apple and Google stores is necessary to have a dedicated piece of real estate on your users' devices. Submitting to these stores carries stronger requirements and quality standards than sharing a toy project with a few friends, because it makes your app available through a much wider distribution platform.
8+
9+
**Disclaimer:** Especially in the case of Apple, review guidelines and rules change all the time, and Apple's enforcement of various rules tends to be finicky and inconsistent. We can't guarantee that your particular project will be accepted by either platform, and you are ultimately responsible for your app's behavior. However, Expo apps are native apps and behave just like any other apps, so if you've created something awesome, you should have nothing to worry about!
10+
11+
## Make sure your app works on many form factors
12+
13+
It's a good idea to test your app on a device or simulator with a small screen (e.g. an iPhone SE) as well as a large screen (e.g. an iPhone X). Ensure your components render the way you expect, no buttons are blocked, and all text fields are accessible.
14+
15+
Try your app on tablets in addition to handsets. Even if you have `ios.supportsTablet: false` configured, your app will still render at phone resolution on iPads and must be usable.
16+
17+
## Make app loading seamless
18+
19+
- Add a [splash screen](./splash-screens.html), the very first thing your users see after they select your app.
20+
- Use [AppLoading](../sdk/app-loading.html) to ensure your interface is ready before the user sees it.
21+
- [Preload and cache your assets](./offline-support.html) so your app loads quickly, even with a poor internet connection.
22+
23+
## Play nicely with the system UI
24+
25+
- Configure the [status bar](./configuring-statusbar.html) so it doesn't clash with your interface.
26+
- Use [native gestures](../sdk/gesture-handler.html) whenever possible.
27+
- Use interface elements that make sense on the device. For example, see the [iOS Human Interface Guidelines](https://developer.apple.com/ios/human-interface-guidelines/overview/themes/).
28+
29+
## Tailor your app metadata
30+
31+
- Add a great [icon](./app-icons.html). Icon requirements between iOS and Android differ and are fairly strict, so be sure and familiarize yourself with that guide.
32+
- Customize your [primaryColor](../guides/configuration.html#primarycolor).
33+
- Make sure your app has a valid iOS [Bundle Identifier](./configuration.html#bundleidentifier) and [Android Package](./configuration.html#package). Take care in choosing these, as you will not be able to change them later.
34+
- Use [versionCode](configuration.html#versioncode) and [buildNumber](configuration.html#buildnumber) to distinguish different binaries of your app.
35+
36+
## iOS-specific guidelines
37+
38+
- All apps in the iTunes Store must abide by the [App Store Review Guidelines](https://developer.apple.com/app-store/review/guidelines/).
39+
- Apple will ask you whether your app uses the IDFA. Because Expo depends on Segment Analytics, the answer is yes, and you'll need to check a couple boxes on the Apple submission form. See [Segment's Guide](https://segment.com/docs/sources/mobile/ios/quickstart/#step-5-submitting-to-the-app-store) for which specific boxes to fill in.
40+
41+
## Common App Rejections
42+
43+
- It's helpful to glance over [Common App Rejections](https://developer.apple.com/app-store/review/rejections/).
44+
- Binaries can get rejected for having poorly formatted icons, so double check the [App Icon guide](./app-icons.html).
45+
- Apple can reject your app if elements don't render properly on an iPad, even if your app doesn't target the iPad form factor. Be sure and test your app on an iPad (or iPad simulator).
46+
- Occasionally people get a message from Apple which mentions an IPv6 network. Typically this is just Apple's way of informing you what kind of network they tested on, and the actual "IPv6" detail is a red herring. All of Expo's iOS code uses `NSURLSession`, which is IPv6-compatible. [More info](https://forums.expo.io/t/ios-standalone-rejected-at-review-because-of-ipv6/7062).
47+
48+
## System permissions dialogs on iOS
49+
50+
If your app asks for [system permissions](../sdk/permissions.html) from the user, e.g. to use the device's camera, or access photos, Apple requires an explanation for how your app makes use of that data. Expo will automatically provide a boilerplate reason for you, such as "Allow cool-app to access the camera." If you would like to provide more information, you can override these values using the [ios.infoPlist](../workflow/configuration) key in `app.json`, for example:
51+
52+
```
53+
"infoPlist": {
54+
"NSCameraUsageDescription": "This app uses the camera to scan barcodes on event tickets."
55+
},
56+
```
57+
58+
The full list of keys Expo provides by default can be seen [here](https://github.com/expo/expo/blob/master/exponent-view-template/ios/exponent-view-template/Supporting/Info.plist#L28-L41). You can provide any overrides you want in the `infoPlist` configuration. Because these strings are configured at the native level, they will only be published when you build a new binary with `exp build`.
59+
60+
## Localizing system dialogs on iOS
61+
62+
If your app uses a language besides English, you can optionally provide [localized](../sdk/localization.html) strings for the system dialogs. For example, in `app.json`, you can provide
63+
64+
```
65+
"locales": {
66+
"ru": "./languages/russian.json"
67+
}
68+
```
69+
70+
...where `russian.json` looks like:
71+
72+
```
73+
{
74+
"NSContactsUsageDescription": "Hello Russian words"
75+
}
76+
```

0 commit comments

Comments
 (0)