Nija

NIJA App Store Submission Guide

Complete Step-by-Step Process for iOS & Android

Version: 2.0
Last Updated: February 9, 2026
Status: Production Ready


πŸ“‹ TABLE OF CONTENTS

  1. Pre-Submission Checklist
  2. Environment Configuration
  3. Testing & Verification
  4. Apple App Store Submission
  5. Google Play Store Submission
  6. Post-Approval Procedures
  7. Troubleshooting

🎯 PRE-SUBMISSION CHECKLIST

Complete ALL items before submission:

Code & Build

Testing

Documentation

App Store Materials


βš™οΈ ENVIRONMENT CONFIGURATION

Step 1: Enable APP_STORE_MODE

Create or update your .env file:

# For App Store Review Submission
APP_STORE_MODE=true

# Keep these DISABLED for review
LIVE_CAPITAL_VERIFIED=false
DRY_RUN_MODE=false
HEARTBEAT_TRADE=false

# Optional: Set for simulation demonstration
# DRY_RUN_MODE=true  # Can enable to show simulator

Step 2: Verify Configuration

# Check environment variables
echo $APP_STORE_MODE  # Should output: true

# Or in Python:
python -c "import os; print('APP_STORE_MODE:', os.getenv('APP_STORE_MODE'))"

Step 3: Test App Startup

# Start the app
./start.sh

# Expected output should show:
# ============================================================
# πŸ“± APP STORE REVIEW MODE ACTIVE
# ============================================================
#    FOR APP STORE SUBMISSION AND REVIEW
#    All dashboards visible (read-only)
#    Trade execution buttons DISABLED
#    Risk disclosures prominently displayed
#    Simulator/sandbox trades ENABLED
# ============================================================

πŸ§ͺ TESTING & VERIFICATION

Step 1: Run QA Test Suite

# Set environment
export APP_STORE_MODE=true

# Run full test suite (22+ tests)
python qa_app_store_mode.py --full

# Expected output:
# ============================================================
# βœ… ALL TESTS PASSED - READY FOR APP STORE SUBMISSION
# ============================================================

CRITICAL: All tests MUST pass before proceeding.

Step 2: Manual Verification

  1. Start the application:
    APP_STORE_MODE=true python bot.py
    
  2. Open the web interface:
    • Navigate to http://localhost:5000 (or your server URL)
    • Verify APP_STORE_MODE banner is visible
    • Check that all trade buttons are disabled (grayed out with lock icon πŸ”’)
  3. Test Dashboard Access:
    • Verify all metrics and charts are visible
    • Confirm data updates in real-time
    • Ensure NO trade execution is possible
  4. Verify Risk Disclosures:
    • Check risk disclaimer appears on first launch
    • Verify all required warnings are present
    • Confirm user must acknowledge before proceeding
  5. Test Simulator Mode (Optional):
    • Enable DRY_RUN_MODE alongside APP_STORE_MODE
    • Verify simulated trades work
    • Confirm no real orders are placed

Step 3: Screenshot Capture

Capture screenshots showing:

Save these for App Store submission materials.


🍎 APPLE APP STORE SUBMISSION

Phase 1: Prepare Build

  1. Xcode Project Configuration:
    cd mobile/ios
    open NIJA.xcodeproj
    
  2. Set Build Configuration:
    • Target: Generic iOS Device
    • Scheme: Release
    • Version: 1.0.0 (or your version)
    • Build Number: Increment for each submission
  3. Configure Info.plist:
    • Add privacy usage descriptions
    • Set bundle identifier
    • Configure URL schemes
  4. Archive Build:
    • Product β†’ Archive
    • Wait for build to complete
    • Validate archive

Phase 2: Upload to App Store Connect

  1. Create App in App Store Connect:
  2. Upload Build:
    • In Xcode Organizer, select archive
    • Distribute App β†’ App Store Connect
    • Upload
    • Wait for processing (15-30 minutes)
  3. Configure App Store Listing:
    • App Information
    • Pricing and Availability
    • App Privacy (CRITICAL - see below)
    • Screenshots and descriptions

Phase 3: App Privacy Configuration

CRITICAL: Accurately configure privacy settings.

Data Collected:

Data Usage:

Data Sharing:

Phase 4: Submission Notes for Apple

Include this in β€œNotes for Reviewer”:

NIJA - Automated Trading App
Review Mode Configuration

IMPORTANT: This app is submitted with APP_STORE_MODE=true

What This Means:
- All dashboards and metrics are VISIBLE (read-only demonstration)
- All trade execution buttons are DISABLED (grayed out with lock icon)
- Risk disclosures are prominently displayed
- Simulator/sandbox trades are ENABLED to demonstrate functionality
- NO REAL TRADING is possible in this review mode

For Testing:
1. Launch the app
2. You will see "πŸ“± APP STORE REVIEW MODE" banner
3. All features are visible but trade execution is disabled
4. Risk disclaimers appear before any configuration
5. Simulator mode shows how trading logic works (no real money)

Technical Details:
- Environment variable: APP_STORE_MODE=true
- Safety controller prevents all live trading
- Backend enforces read-only mode
- Frontend disables all action buttons

After Approval:
- Production builds will have APP_STORE_MODE=false
- Users must explicitly enable trading (multi-step process)
- Full risk acknowledgment required for live trading

Documentation:
- See APP_STORE_SUBMISSION_GUIDE.md in code repository
- Review APPLE_APP_REVIEW_SUBMISSION_NOTES.md for details
- REVIEWER_EXPERIENCE_MAP.md shows exact reviewer flow

Contact: support@nija.app for any questions

Before full App Store submission:

  1. Create TestFlight Group:
    • App Store Connect β†’ TestFlight
    • Create internal testing group
    • Add test users
  2. Upload Beta Build:
    • Same process as App Store upload
    • Select for TestFlight testing
    • Add testing instructions
  3. Test with Real Users:
    • Invite beta testers
    • Collect feedback
    • Verify APP_STORE_MODE works correctly
    • Fix any issues before App Store submission
  4. Review TestFlight Results:
    • Check crash reports
    • Review user feedback
    • Test on multiple iOS versions
    • Verify on different device sizes

Phase 6: Submit for Review

  1. Final Checks:
    • All screenshots uploaded
    • App description finalized
    • Privacy policy URL working
    • Support URL working
    • Reviewer notes added
    • Age rating set correctly (17+)
  2. Submit:
    • Click β€œSubmit for Review”
    • Confirm all information
    • Wait for review (typically 24-48 hours)
  3. Monitor Status:
    • Check App Store Connect daily
    • Respond to any reviewer questions promptly
    • Be prepared to provide demo account if needed

πŸ€– GOOGLE PLAY STORE SUBMISSION

Phase 1: Prepare Android Build

  1. Build Configuration:
    cd mobile/android
    ./gradlew assembleRelease
    
  2. Sign APK/AAB:
    jarsigner -verbose -sigalg SHA256withRSA \
      -digestalg SHA-256 \
      -keystore nija-release-key.keystore \
      app/build/outputs/bundle/release/app-release.aab
    
  3. Generate Upload Key:
    • Use Google Play App Signing
    • Upload key to Play Console

Phase 2: Create App in Play Console

  1. Go to Play Console:
  2. Upload Build:
    • Production β†’ Create new release
    • Upload AAB file
    • Add release notes
  3. Configure Store Listing:
    • Screenshots (phone, tablet, TV if applicable)
    • App description (4000 char max)
    • Short description (80 char max)
    • App icon (512x512px)
    • Feature graphic (1024x500px)

Phase 3: Data Safety Form

CRITICAL: Accurately fill out Data Safety section.

Data Collected:

Data Usage:

Data Sharing: None (except with user’s exchange)

Phase 4: Content Rating

Use IARC questionnaire:

Phase 5: Submission Notes

Add to β€œNotes for Reviewer”:

This app is configured with APP_STORE_MODE=true for review.
All trading functionality is disabled - only read-only dashboards
and risk disclosures are shown. See included documentation for details.

Phase 6: Submit for Review

  1. Complete all sections:
    • Store listing
    • App content
    • Pricing & distribution
    • App content
    • Data safety
  2. Submit:
    • Review all information
    • Click β€œSend for review”
    • Wait for review (typically 1-3 days)

βœ… POST-APPROVAL PROCEDURES

When Apple/Google Approves

DO NOT immediately switch APP_STORE_MODE=false in production!

Step 1: Prepare Production Configuration

  1. Create Production Environment:
    cp .env.example .env.production
    
  2. Configure Production Settings:
    # .env.production
    APP_STORE_MODE=false  # Disable review mode
    LIVE_CAPITAL_VERIFIED=false  # Still require explicit user enable
    DRY_RUN_MODE=false
       
    # Production credentials
    KRAKEN_PLATFORM_API_KEY=your_production_key
    KRAKEN_PLATFORM_API_SECRET=your_production_secret
       
    # Security
    JWT_SECRET_KEY=your_production_jwt_secret
    ALLOWED_ORIGINS=https://app.yourdomain.com
    

Step 2: Deploy Production Build

  1. Build Production Version:
    • iOS: New build with APP_STORE_MODE=false
    • Android: New AAB with APP_STORE_MODE=false
  2. Test Production Build:
    • TestFlight (iOS) or Internal Testing (Android)
    • Verify trading functionality works
    • Confirm safety controls work
    • Test with small real amounts
  3. Gradual Rollout:
    • iOS: Phased release (automatic)
    • Android: Staged rollout (10% β†’ 50% β†’ 100%)

Step 3: Monitor Post-Launch

  1. Track Metrics:
    • Crash reports
    • User feedback
    • Trading performance
    • Safety control effectiveness
  2. Be Ready to Respond:
    • Bug fixes
    • User support
    • Performance improvements

Step 4: Merge to Main Branch

# After successful production deployment
git checkout main
git merge copilot/disable-trade-buttons-read-only
git push origin main

# Tag release
git tag -a v1.0.0 -m "App Store approved release"
git push origin v1.0.0

Step 5: Keep Review Mode Ready

IMPORTANT: Keep APP_STORE_MODE functionality for future updates!

Every app update goes through review. You’ll need to:


πŸ”§ TROUBLESHOOTING

Common Issues

Issue: Tests Fail

Solution:

# Verify environment
echo $APP_STORE_MODE

# Reinstall dependencies
pip install -r requirements.txt

# Run tests with verbose output
python qa_app_store_mode.py --full --verbose

Issue: Trade Buttons Not Disabled

Check:

  1. JavaScript loaded: Open browser console, check for errors
  2. CSS applied: Inspect button elements, look for .app-store-disabled class
  3. API response: Check /api/safety/status returns app_store_mode: true

Fix:

// In browser console
fetch('/api/safety/status')
  .then(r => r.json())
  .then(d => console.log('APP_STORE_MODE:', d.app_store_mode))

Issue: Reviewer Can’t Access App

Common Causes:

Solution:

Issue: App Rejected for Financial Functionality

Response Template:

Thank you for the review. NIJA is a trading automation tool,
not a payment/financial service. We:

1. Do NOT handle user funds (funds stay on user's exchange)
2. Do NOT process payments
3. Do NOT provide financial advice
4. Require extensive risk disclosures
5. Have APP_STORE_MODE for review (no real trading)

Please see our detailed response in APPLE_APP_REVIEW_SUBMISSION_NOTES.md
which explains our independent trading model and safety controls.

We're happy to provide additional information or clarification.

Issue: Privacy Policy Concerns

Ensure Your Policy States:

Issue: Build Fails

Check:

  1. Xcode version compatible
  2. Certificates valid
  3. Provisioning profiles up to date
  4. Dependencies installed

Fix:

# iOS
cd mobile/ios
pod install
pod update

# Android
cd mobile/android
./gradlew clean
./gradlew build

πŸ“ž SUPPORT

Resources

Before Contacting Support

  1. Run QA tests: python qa_app_store_mode.py --full --verbose
  2. Check logs for errors
  3. Review relevant documentation
  4. Prepare specific questions with:
    • What you tried
    • What happened
    • Expected vs actual behavior
    • Screenshots if applicable


Last Updated: February 9, 2026
Version: 2.0
Status: Production Ready


πŸŽ‰ Good luck with your App Store submission! πŸŽ‰

APP STORE SUBMISSION GUIDE

NIJA Trading Bot - Apple App Store Submission


Quick Start: 3-Step Submission

Step 1: Build for Review

# Set App Store review mode
export APP_STORE_MODE=true

# Verify mode is active
python -c "from bot.app_store_mode import is_app_store_mode_enabled; print('βœ… Ready' if is_app_store_mode_enabled() else '❌ Not Ready')"

# Run QA verification
python qa_app_store_mode.py --full

# Expected output: "βœ… ALL QA TESTS PASSED"

Step 2: Submit to Apple

  1. Upload build to App Store Connect
  2. Add reviewer notes (see template below)
  3. Submit for review

Step 3: Post-Approval

# Switch to production mode
export APP_STORE_MODE=false

# Build production version
# ... your build process

# Submit updated build to App Store

Detailed Submission Process

Pre-Submission Setup

1. Environment Configuration

Create .env file with:

# APP STORE REVIEW MODE
APP_STORE_MODE=true

# SAFETY CONTROLS
LIVE_CAPITAL_VERIFIED=false
DRY_RUN_MODE=false

# Other settings...

2. Verify Implementation

# Run comprehensive QA
python qa_app_store_mode.py --full

# Should output:
# Total Tests: 22
# Passed: 22
# Failed: 0
# βœ… ALL QA TESTS PASSED

3. Build Application

# Install dependencies
pip install -r requirements.txt

# Run tests
python test_app_store_mode.py

# Build app (adjust for your platform)
# iOS: Use Xcode build
# Android: Use gradle build
# Web: Build frontend assets

App Store Connect Setup

1. App Information

App Name: NIJA Trading Bot

Subtitle: Automated Cryptocurrency Trading

Category: Finance

Age Rating: 17+ (Financial Risk)

2. App Description

NIJA - Automated Cryptocurrency Trading

INDEPENDENT TRADING MODEL
Each account trades independently using the same algorithmic strategy.
NO trade copying between accounts.

FEATURES
β€’ Automated market scanning
β€’ Dual RSI strategy (RSI_9 + RSI_14)
β€’ Dynamic position management
β€’ Automatic profit targets
β€’ Risk management controls
β€’ Multi-exchange support

IMPORTANT DISCLAIMERS

RISK WARNING
Trading involves substantial risk of loss. You may lose all invested capital.
Only invest money you can afford to lose.

NOT FINANCIAL ADVICE
NIJA is a software tool, not a financial advisor. We do not provide
investment advice or recommendations.

YOUR RESPONSIBILITY
β€’ You maintain full control of exchange accounts
β€’ You are responsible for all trades
β€’ Monitor your account regularly
β€’ Understand the strategy before use

REQUIREMENTS
β€’ 18+ years old (21+ in some jurisdictions)
β€’ Valid exchange API credentials
β€’ Minimum $50 USD recommended
β€’ Stable internet connection

SUPPORTED EXCHANGES
β€’ Kraken
β€’ Coinbase
β€’ Alpaca (stocks)

3. Keywords

cryptocurrency, trading, automated, bitcoin, ethereum, crypto, finance, investment, algo trading, kraken

4. Screenshots

Prepare screenshots showing:

Important: Screenshots should show APP_STORE_MODE is active

5. Privacy Policy URL

Include link to your privacy policy that covers:


Reviewer Notes Template

Copy this into β€œNotes for Review” in App Store Connect:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
APP STORE REVIEW MODE - IMPORTANT INFORMATION
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

This build is configured for safe App Store review with APP_STORE_MODE enabled.

βœ… WHAT YOU CAN TEST:

1. Full Dashboard & UI
   β€’ View account balances (simulated data for demo)
   β€’ Browse trading history
   β€’ See performance metrics
   β€’ Navigate all screens

2. Risk Disclosures
   β€’ Independent trading model explanation
   β€’ Financial risk warnings
   β€’ User responsibility statements
   β€’ Terms of service
   β€’ Privacy policy

3. Functionality Demo
   β€’ Market scanning visualization
   β€’ Trading signal generation (simulated)
   β€’ Position management display
   β€’ Settings and preferences

❌ WHAT'S SAFELY BLOCKED:

β€’ Live trading execution (hard-blocked at code level)
β€’ Real money transactions (impossible to execute)
β€’ Exchange API order placement (blocked)
β€’ Any financial risk during review

πŸ”’ TECHNICAL IMPLEMENTATION:

β€’ APP_STORE_MODE=true environment flag
β€’ Multi-layer execution blocking:
  - Layer 0: Broker execution layer
  - Layer 1: Hard controls layer
  - Layer 2: Safety controller layer
β€’ All blocking attempts are logged
β€’ Simulated responses for demonstration

πŸ“‹ COMPLIANCE:

β€’ Apple Guideline 2.3.8: Fully functional app βœ…
β€’ Guideline 5.1.1: Risk disclosures present βœ…
β€’ No in-app purchases βœ…
β€’ Users connect their own exchange accounts βœ…

🎯 POST-APPROVAL OPERATION:

After approval, production users will:
β€’ Set APP_STORE_MODE=false for live trading
β€’ Connect their own exchange API credentials
β€’ Enable LIVE_CAPITAL_VERIFIED flag individually
β€’ Maintain full control of their funds

The app NEVER handles user money directly.
All trades execute on user's own exchange accounts.

πŸ“§ QUESTIONS?

For any questions during review:
β€’ Email: [your-support-email@domain.com]
β€’ Documentation: APP_STORE_MODE_IMPLEMENTATION.md
β€’ Test Results: qa_app_store_mode.py --full (22/22 passing)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
VERIFICATION: Build tested and verified safe for review
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Common Review Questions

Q: β€œHow does the app generate revenue?”

A: The app is provided to users who want automated trading on their own accounts. Revenue model (if any) would be via subscription or one-time purchase, NOT taking commission on trades. The app operates on user’s own exchange accounts.

Q: β€œCan users lose money?”

A: Yes, and this is clearly disclosed. Trading involves substantial risk. Multiple risk warnings are shown throughout the app. Users must acknowledge they understand the risks before proceeding.

Q: β€œWhy does the app need exchange API access?”

A: The app needs to:

All access is via user’s own API credentials. The app does not store or access user funds directly.

Q: β€œWhat happens if the app malfunctions?”

A: The app has multiple safety controls:

Users maintain full control and can disable the app or close positions manually via their exchange.


Before full App Store submission, use TestFlight:

1. Upload to TestFlight

# Ensure APP_STORE_MODE=true
export APP_STORE_MODE=true

# Upload build via Xcode or Application Loader
# or
# Use fastlane: fastlane beta

2. Internal Testing

Invite internal testers to verify:

3. External Testing (Optional)

Invite external beta testers to:

4. Fix Issues

If issues found:


Post-Approval Workflow

Switching to Production Mode

After Apple approval:

1. Update Configuration

# Production .env
APP_STORE_MODE=false
LIVE_CAPITAL_VERIFIED=false  # Users enable individually

2. Build Production Version

# Verify production mode
python -c "from bot.app_store_mode import is_app_store_mode_enabled; assert not is_app_store_mode_enabled(), 'Should be disabled'"

# Run tests
python test_app_store_mode.py

# Build
# ... your build process

3. Submit to App Store

4. User Onboarding

Users will:

  1. Download app from App Store
  2. Connect exchange API credentials
  3. Review risk disclosures
  4. Enable live trading (set LIVE_CAPITAL_VERIFIED=true)
  5. Start trading

Maintenance & Future Updates

For Future App Store Updates

Always use APP_STORE_MODE for submissions:

# Before each submission
export APP_STORE_MODE=true
python qa_app_store_mode.py --full

# Build and submit
# ...

# After approval
export APP_STORE_MODE=false
# Build production version

Keep Documentation Updated

When making changes:


Troubleshooting

Build Fails QA Verification

# Check mode
echo $APP_STORE_MODE

# Should be 'true' for review submission
# If not, set it:
export APP_STORE_MODE=true

# Re-run QA
python qa_app_store_mode.py --full

Reviewer Asks About Live Trading

Point them to:

Rejection Due to β€œIncomplete Features”

Explain:


Success Checklist

Before submitting to Apple:


Expected Timeline


Contact & Support

If you encounter issues during submission:

Technical Issues:

Reviewer Questions:


Submission Prepared By: Development Team
Date: February 9, 2026
Status: βœ… Ready for Submission
QA Status: βœ… All Tests Passing (22/22)