Complete Setup & Publishing Guide
A step-by-step guide covering everything from initial setup to publishing your app on Google Play Store and Apple App Store, and connecting it to your Botble e-commerce website so products display automatically.
Table of Contents
Part 1: Prerequisites — What You Need Before Starting
Accounts You Need
| Account | Cost | Required For | Sign Up |
|---|---|---|---|
| Expo | Free | Building the app | expo.dev/signup |
| Google Play Developer | $25 one-time | Publishing on Android | play.google.com/console |
| Apple Developer | $99/year | Publishing on iOS | developer.apple.com |
Start with Google Play
If you're on a budget, start with Google Play ($25 one-time). Apple requires a yearly subscription ($99/year) and a Mac computer for iOS builds.
Software Requirements
| Software | Version | Download |
|---|---|---|
| Node.js | 18 or higher | nodejs.org |
| npm | Comes with Node.js | — |
| Git | Latest | git-scm.com |
| Code editor | Any (VS Code recommended) | code.visualstudio.com |
What You Need From Your Website
Before starting, make sure you have:
- ✅ A Botble e-commerce website up and running (e.g.,
https://yourstore.com) - ✅ Products, categories, and brands already added to your website
- ✅ An API key from your Botble admin panel
- ✅ Your Envato purchase code (from CodeCanyon)
- ✅ Your brand assets: logo (1024x1024 PNG), app icon, brand colors
Part 2: Getting the App Working (Step by Step)
Step 1: Install Node.js
- Go to nodejs.org
- Download the LTS version (18 or higher)
- Run the installer and follow the prompts
- Verify installation — open your terminal and run:
node --version
# Should show v18.x.x or higher
npm --version
# Should show 9.x.x or higherStep 2: Install Required Tools
# Install EAS CLI (for building & publishing to app stores)
npm install -g eas-cliExpo CLI
You do not need to install expo-cli globally. The project includes @expo/cli as a local dependency — all Expo commands run through npm scripts (e.g., npm start) or via npx expo.
Step 3: Get the App Source Code
- Go to CodeCanyon
- Find "Botble Ecommerce Mobile App" in your purchases
- Click Download → All files & documentation
- Extract the downloaded ZIP to a folder on your computer
- Open terminal and navigate to the app folder:
cd path/to/ecommerce-mobile-appStep 4: Install Dependencies
npm installIf you see errors
Try with the legacy peer deps flag:
npm install --legacy-peer-depsStep 5: Enable API & Get Your API Key
- Log in to your Botble admin panel (e.g.,
https://yourstore.com/admin) - Navigate to Settings → API Settings
- Enable the API — make sure the API toggle/checkbox is turned ON
- Find or generate your API Key
- Copy it — you'll need it in the next step
Important
The API is disabled by default in Botble. You must enable it in Admin → Settings → API Settings before the mobile app can connect to your website. Without this, all API requests will fail.
Step 6: Configure the App
Open the .env file in the root of your project and update these values:
# REQUIRED: Your website URL (no trailing slash, no /api/v1)
API_BASE_URL=https://yourstore.com
# REQUIRED: Your API key from Botble admin
API_KEY=your-api-key-here
# App name displayed to users
APP_NAME=Your Store Name
# Your Envato purchase code (for development license)
LICENSE_CODE=your-envato-purchase-codeCritical
API_BASE_URLmust be your website URL without/api/v1— the app adds this automatically- Use
https://(nothttp://) for production websites - The
LICENSE_CODEis only needed during development. See License Activation for details
Step 7: Test the Connection
Before running the app, verify your API works:
# Test in terminal (replace with your URL)
curl https://yourstore.com/api/v1/ecommerce/productsYou should see JSON data with your products. If you see an error, check:
- Is your website online?
- Is the URL correct?
- Is the API enabled on your Botble website?
Step 8: Run the App
# Start the development server
npm startYou'll see a QR code in the terminal. Then choose how to test:
| Method | Command | Requirements |
|---|---|---|
| Physical phone (recommended) | Scan QR code with Expo Go app | Install Expo Go on your phone |
| iOS Simulator via Expo Go | npm run ios:go | Mac + Xcode installed |
| Android Emulator via Expo Go | npm run android:go | Android Studio installed |
| Web browser | npm run web | Any modern browser |
Easiest way to test
Install the Expo Go app on your phone (iOS / Android), then scan the QR code. Your phone and computer must be on the same Wi-Fi network.
npm run ios / npm run android vs npm run ios:go / npm run android:go
npm run iosandnpm run androidrun native builds (expo run:ios/expo run:android) — these require a full native development setup (Xcode for iOS, Android Studio + SDK for Android) and generate a development build on the simulator/emulator.npm run ios:goandnpm run android:golaunch the app using Expo Go — easier to get started, no native tooling required beyond the simulator/emulator.- For beginners, Expo Go (via
npm start+ QR code) is the simplest option.
Step 9: Verify Everything Works
Test these features to make sure your app is connected properly:
- [ ] Products appear on the home screen
- [ ] Categories show your website's categories
- [ ] Search finds products from your website
- [ ] You can log in with an account from your website
- [ ] Adding items to cart works
- [ ] Wishlist saves products
- [ ] Checkout opens correctly
If products appear, your app is connected to your website! 🎉
Part 3: How Products Automatically Display in the App
How the Connection Works
The app connects to your Botble website through its REST API. Here's the flow:
Your Botble Website (yourstore.com)
↓
REST API (/api/v1)
↓
Mobile App fetches data
↓
Products, categories, brands displayedWhat Syncs Automatically
Once configured, the app automatically pulls data from your website:
| Data | How It Syncs | API Endpoint |
|---|---|---|
| Products | Real-time on each visit | /api/v1/ecommerce/products |
| Categories | Real-time on each visit | /api/v1/ecommerce/product-categories |
| Brands | Real-time on each visit | /api/v1/ecommerce/brands |
| Banners/Ads | Real-time on each visit | /api/v1/ads |
| Orders | Real-time when customer views | /api/v1/ecommerce/orders |
| Cart | Real-time, synced with website | /api/v1/ecommerce/cart |
| Wishlist | Real-time, synced with website | /api/v1/ecommerce/wishlist |
| User accounts | Shared login with website | /api/v1/login |
What This Means for You
- Add a product on your website → it appears in the mobile app automatically
- Update a price on your website → the app shows the new price immediately
- Customer places an order in the app → it appears in your website admin panel
- No separate product management — everything is managed from your Botble website admin panel
Configuring What Appears on the Home Screen
You can customize the homepage content through environment variables in .env:
# Show specific banners only (comma-separated ad keys from your admin panel)
AD_KEYS=banner-home-1,banner-home-2
# Product section layout: "slider" (horizontal) or "grid" (2-column)
PRODUCT_SECTION_LAYOUT=slider
# Products per section (default: 6)
PRODUCT_SECTION_NUMBER_OF_PRODUCTS=6
# Product image size: small, medium, large, thumb
PRODUCT_IMAGE_THUMBNAIL_SIZE=smallTo find your ad keys: Botble Admin → Ads → Ads → note the "Key" column.
Part 4: Customize Your App Before Publishing
Before publishing, customize the app with your branding. Each step takes 5-15 minutes:
| Step | Guide | What to Change |
|---|---|---|
| 1 | Theme Colors | Brand colors throughout the app |
| 2 | App Font | Typography |
| 3 | App Name | Display name on home screen |
| 4 | App Logo | App icon and splash screen |
| 5 | Translations | Language settings |
Update App Identifiers
This project uses app.config.js (a JavaScript-based Expo config, not app.json). Open app.config.js and update the bundle identifiers:
// app.config.js
module.exports = ({ config }) => ({
...config,
name: process.env.APP_NAME || "Your Store Name",
slug: "your-store-name",
// ...
ios: {
// ...
bundleIdentifier: "com.yourcompany.yourstore", // ← Change this
},
android: {
// ...
package: "com.yourcompany.yourstore", // ← Change this
},
});The default values are com.botble.ecommerce — you must change these to your own unique identifiers before publishing.
Important
bundleIdentifier(iOS) andpackage(Android) must be unique — they cannot be changed after publishing- Use reverse domain format:
com.yourcompany.appname - Only use lowercase letters, numbers, and dots
Part 5: Publishing to Google Play Store
Step 1: Create a Google Play Developer Account
- Go to play.google.com/console
- Sign in with your Google account
- Pay the $25 one-time registration fee
- Complete identity verification (may take 1-2 days)
- Accept the Developer Distribution Agreement
Step 2: Create Your App in Google Play Console
- Open Google Play Console
- Click "Create app"
- Fill in:
- App name: Your store name
- Default language: Your primary language
- App or game: App
- Free or paid: Free (or Paid)
- Accept the declarations and click "Create app"
Step 3: Complete the Store Listing
Navigate to Grow → Store presence → Main store listing and fill in:
| Field | What to Write |
|---|---|
| App name | Your store name (max 30 characters) |
| Short description | Brief tagline (max 80 characters) |
| Full description | Detailed description of your store (max 4000 characters) |
| App icon | 512×512 PNG |
| Feature graphic | 1024×500 PNG |
| Phone screenshots | At least 2 screenshots (recommended 4-8), min 320px, max 3840px |
| Tablet screenshots | Optional but recommended |
Writing a Good Description
Include: what your store sells, key features (easy browsing, secure checkout, order tracking), and a call to action. Use keywords your customers might search for.
Step 4: Complete Content Rating Questionnaire
- Go to Policy → App content → Content rating
- Click "Start questionnaire"
- Select IARC and answer the questions (for a shopping app, most answers will be "No")
- Submit — you'll get a rating like "Everyone" or "Rated for 3+"
Step 5: Set Up Pricing & Distribution
- Go to Monetize → Products → App pricing
- Select "Free" (or set a price)
- Select countries where your app should be available
Step 6: Configure Data Safety
- Go to Policy → App content → Data safety
- Answer questions about what data your app collects:
- Personal info: Name, email, address (for account & orders)
- Financial info: Payment handled via web checkout (WebView)
- Location: Not collected (unless you add location features)
- Submit the form
Step 7: Set Up EAS and Build for Android
# Login to Expo
eas login
# Configure EAS (first time only)
eas build:configureStep 8: Set Environment Variables for Production
Critical — Do This Before Building
Your .env file does NOT work in production builds. You must use EAS Secrets:
# Set each required variable
eas secret:create --name API_BASE_URL --value "https://yourstore.com"
eas secret:create --name API_KEY --value "your-api-key"
eas secret:create --name APP_NAME --value "Your Store Name"
eas secret:create --name APP_ENV --value "production"Or configure in eas.json:
{
"build": {
"production": {
"env": {
"API_BASE_URL": "https://yourstore.com",
"API_KEY": "your-api-key",
"APP_NAME": "Your Store Name",
"APP_ENV": "production"
}
}
}
}APP_ENV=production is required
Without this, your app will show a "License Required" dialog on startup. Setting APP_ENV=production disables the development-only license check.
Step 9: Build the Android App (AAB)
eas build --platform android --profile productionWhat happens:
- Your code uploads to Expo's cloud servers
- The build runs remotely (10-15 minutes first time)
- When complete, you get a download link for the
.aabfile
Build Locally Instead
If you prefer building on your machine (requires Java JDK 17 + Android SDK):
npx expo prebuild --platform android --clean
cd android && ./gradlew bundleReleaseOutput: android/app/build/outputs/bundle/release/app-release.aab
See Deploying App - Local Build for full local build instructions.
Step 10: Upload to Google Play
- Download the
.aabfile from the EAS build link - Go to Google Play Console → your app
- Navigate to Release → Production
- Click "Create new release"
- Upload the
.aabfile - Add release notes (e.g., "Initial release - Mobile shopping app for [Your Store]")
- Click "Review release"
- Click "Start rollout to Production"
Step 11: Submit for Review
Google reviews your app (typically takes 1-3 days for new apps). You'll receive an email when:
- ✅ Approved — your app is live on Google Play!
- ❌ Rejected — review the feedback, fix issues, and resubmit
Part 6: Publishing to Apple App Store
Requirements
- A Mac computer (required for iOS development and submission)
- Apple Developer Account ($99/year)
- Xcode installed (free from Mac App Store)
Step 1: Create an Apple Developer Account
- Go to developer.apple.com
- Click "Account" → "Sign In" or create an Apple ID
- Enroll in the Apple Developer Program ($99/year)
- Complete identity verification (may take 1-2 days for individuals, longer for organizations)
Step 2: Create Your App in App Store Connect
- Go to appstoreconnect.apple.com
- Click "My Apps" → "+" → "New App"
- Fill in:
- Platforms: iOS
- Name: Your store name
- Primary language: Your language
- Bundle ID: Select the one matching your
bundleIdentifier(e.g.,com.yourcompany.yourstore) - SKU: A unique identifier (e.g.,
yourstore-ios-1)
- Click "Create"
Bundle ID
If your Bundle ID doesn't appear, you need to register it first:
- Go to developer.apple.com/account/resources/identifiers
- Click "+" → "App IDs" → "App"
- Enter your Bundle ID (must match
bundleIdentifierinapp.config.js) - Click "Register"
Step 3: Complete the App Store Listing
In App Store Connect, go to your app and fill in:
| Field | Requirements |
|---|---|
| App name | Max 30 characters |
| Subtitle | Max 30 characters |
| Description | Detailed description of your app |
| Keywords | Comma-separated, max 100 characters total |
| Support URL | Your support/contact page |
| Privacy Policy URL | Required — a URL to your privacy policy |
| Screenshots | Required for each device size (6.7", 6.5", 5.5" iPhones; iPad) |
| App icon | 1024×1024 PNG (no transparency, no rounded corners) |
Privacy Policy
Apple requires a privacy policy URL. Create one that covers:
- What data you collect (name, email, address for orders)
- How you use the data
- Third-party services used
- Contact information
You can host it as a page on your Botble website.
Step 4: Set App Privacy Details
In App Store Connect → App Privacy:
- Click "Get Started"
- Answer data collection questions:
- Contact Info: Name, email, phone (for account registration and orders)
- Identifiers: User ID
- Purchases: Purchase history
- For each data type, specify:
- Data use: App functionality, product personalization
- Linked to identity: Yes (tied to user account)
Step 5: Build for iOS
Make sure your EAS Secrets are configured (same as Android step), then:
eas build --platform ios --profile productionFirst time setup:
- EAS will ask you to log in with your Apple Developer account
- It will create necessary certificates and provisioning profiles automatically
- Follow the prompts (usually just pressing Enter for defaults works)
The build takes about 15-30 minutes.
Step 6: Submit to App Store
Option A: Using EAS Submit (Recommended)
eas submit --platform iosThis uploads your build directly to App Store Connect.
Option B: Manual Upload
- Download the
.ipafile from EAS - Open Transporter app on your Mac (free from Mac App Store)
- Sign in with your Apple ID
- Drag and drop the
.ipafile - Click "Deliver"
Step 7: Submit for Review in App Store Connect
- Go to appstoreconnect.apple.com
- Select your app
- Under the latest version, select the build you uploaded
- Fill in any remaining required fields
- Under "App Review Information", provide:
- A demo account (login credentials for the reviewer)
- Contact information
- Notes for the reviewer (e.g., "This is an e-commerce app that connects to [yourstore.com]")
- Click "Add for Review"
- Click "Submit to App Review"
Step 8: Wait for Apple Review
Apple reviews typically take 1-3 days (sometimes up to 7 days for new apps). You'll receive an email when:
- ✅ Approved — your app is live on the App Store!
- ❌ Rejected — read the detailed feedback, fix issues, rebuild, and resubmit
Common Rejection Reasons
- Missing privacy policy
- App crashes during review
- Login doesn't work (provide demo credentials!)
- In-app purchase issues (checkout must work properly)
- Incomplete metadata/screenshots
- Content not appropriate for stated age rating
Part 7: Post-Launch Checklist
After Publishing
- [ ] Download your app from the store and test it on a real device
- [ ] Verify products load correctly
- [ ] Test the full purchase flow (browse → cart → checkout)
- [ ] Verify login works for existing website customers
- [ ] Check push notifications (if enabled)
- [ ] Share the store link with customers
Updating Your App
When you make changes and need to publish an update:
Version numbers auto-increment — this project's
eas.jsonhas"autoIncrement": trueand"appVersionSource": "remote"configured for the production profile. EAS automatically incrementsbuildNumber(iOS) andversionCode(Android) on each build. You only need to manually update the user-visibleversioninapp.config.js(viaAPP_VERSIONenv variable) when releasing a new major/minor version.Build new versions:
basheas build --platform all --profile productionSubmit updates:
basheas submit --platform ios eas submit --platform android
Over-the-Air Updates (Skip Store Review)
For JavaScript-only changes (no native code changes), push updates instantly:
eas update --branch production --message "Fix: updated product display"This updates the app without going through store review.
Quick Reference: Complete Workflow Summary
Here's the entire process at a glance:
1. PREPARE
├── Install Node.js + EAS CLI
├── Get source code from CodeCanyon
├── npm install
└── Configure .env (API_BASE_URL, API_KEY)
2. TEST LOCALLY
├── npm start
├── Scan QR code with Expo Go
└── Verify products appear
3. CUSTOMIZE
├── Theme colors, logo, app name
├── Set bundle identifier in app.config.js
└── Update app.config.js
4. BUILD
├── eas login
├── eas build:configure
├── Set EAS Secrets (API_BASE_URL, API_KEY, APP_ENV=production)
├── eas build --platform android --profile production
└── eas build --platform ios --profile production
5. PUBLISH
├── Google Play: Upload AAB → Create release → Submit
└── App Store: eas submit → Configure listing → Submit for review
6. MAINTAIN
├── Build numbers auto-increment; update APP_VERSION for new releases
├── Use eas update for quick JS fixes
└── Rebuild for native changesFrequently Asked Questions
Do I need to manually add products to the app?
No. The app pulls all products automatically from your Botble website via API. Just manage products on your website — the app displays them in real-time.
Can customers who registered on my website log in to the app?
Yes. The app shares the same user database. Customers use the same email/password on both your website and the mobile app.
Do I need a Mac to publish on both stores?
- Google Play: No — you can build and submit from any OS using EAS cloud builds
- Apple App Store: Technically no for building (EAS builds in the cloud), but you'll need Apple Developer account and some steps are easier on a Mac
How long does app review take?
- Google Play: 1-3 days (new apps may take up to 7 days)
- Apple App Store: 1-3 days (new apps may take up to 7 days)
My app shows a blank/white screen after building
This usually means environment variables weren't set. Make sure you configured EAS Secrets or eas.json env before building. See Environment Variables (Critical).
My app shows "License Required" dialog
Set APP_ENV=production in your eas.json or EAS Secrets. See License Activation.
Can I build an APK for testing before publishing?
Yes! First, add APK output to your eas.json preview profile:
{
"build": {
"preview": {
"distribution": "internal",
"android": {
"buildType": "apk"
}
}
}
}Then build:
eas build --platform android --profile previewThis creates an APK you can install directly on any Android device. No Google Play account needed for testing.
TIP
The default preview profile produces an AAB (Android App Bundle), which can only be installed via the Play Store. Adding "buildType": "apk" makes it output a directly-installable APK file instead.
Need Help?
- API Documentation: ecommerce-api.botble.com/docs
- EAS Documentation: docs.expo.dev/eas
- Troubleshooting: Troubleshooting Guide
- FAQ: Frequently Asked Questions
- Support: Support & Contact
