> For the complete documentation index, see [llms.txt](https://docs.rhecanyx.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rhecanyx.com/docs/react-native-docs-for-mobile-apps/signing-and-publishing.md).

# Signing and Publishing

{% stepper %}
{% step %}

### Android (Google Play)

<pre class="language-shellscript" data-overflow="wrap"><code class="lang-shellscript"><strong>#Go JDK in terminal
</strong>cd /Library/Java/JavaVirtualMachines/jdkX.X.X_XXX.jdk/Contents/Home

<strong>#Create keystore and alias for signature
</strong>sudo keytool -genkey -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

<strong>#Copy the following part, paste it to ~/.gradle/gradle.properties file or android/gradle.properties file and adjust it according to the keystore
</strong>MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

<strong>#Paste the code I showed you into your project's android/app/build.gradle file.
</strong>...
android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
<strong>                storeFile file(MYAPP_UPLOAD_STORE_FILE)
</strong><strong>                storePassword MYAPP_UPLOAD_STORE_PASSWORD
</strong><strong>                keyAlias MYAPP_UPLOAD_KEY_ALIAS
</strong><strong>                keyPassword MYAPP_UPLOAD_KEY_PASSWORD
</strong>            }
        }
    }
    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}
...

<strong>#for ABB
</strong>cd android &#x26;&#x26; ./gradlew bundleRelease
#After this process, .aab will be created in android/app/build/outputs/bundle/release/app.aab and is ready to be uploaded to Google Play.

<strong>#for APK
</strong>cd android &#x26;&#x26; ./gradlew app:assembleRelease
#After completing the steps, you will see the APKs in android/app/build/outputs/apk/release
</code></pre>

{% endstep %}

{% step %}

### iOS (App Store)

To publish your app to the App Store, you must first open it in Xcode (the .xcworkspace folder). After making any necessary changes, you can distribute it to App Store Connect by clicking Archive. <mark style="color:red;">**You must open the .xcworkspace file of the iOS project.**</mark>
{% endstep %}
{% endstepper %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.rhecanyx.com/docs/react-native-docs-for-mobile-apps/signing-and-publishing.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
