{"id":42327051,"url":"https://github.com/softwareone-platform/mpt-mobile-platform","last_synced_at":"2026-02-23T18:14:52.284Z","repository":{"id":319808563,"uuid":"1075944953","full_name":"softwareone-platform/mpt-mobile-platform","owner":"softwareone-platform","description":"The official mobile application for Marketplace Platform by SoftwareOne","archived":false,"fork":false,"pushed_at":"2026-02-20T15:31:57.000Z","size":2296,"stargazers_count":3,"open_issues_count":9,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-20T15:55:54.974Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://platform.softwareone.com","language":"TypeScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/softwareone-platform.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-14T07:44:20.000Z","updated_at":"2026-02-20T15:15:58.000Z","dependencies_parsed_at":"2025-10-30T02:13:03.450Z","dependency_job_id":null,"html_url":"https://github.com/softwareone-platform/mpt-mobile-platform","commit_stats":null,"previous_names":["softwareone-platform/mpt-mobile-platform"],"tags_count":83,"template":false,"template_full_name":null,"purl":"pkg:github/softwareone-platform/mpt-mobile-platform","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwareone-platform%2Fmpt-mobile-platform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwareone-platform%2Fmpt-mobile-platform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwareone-platform%2Fmpt-mobile-platform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwareone-platform%2Fmpt-mobile-platform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/softwareone-platform","download_url":"https://codeload.github.com/softwareone-platform/mpt-mobile-platform/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwareone-platform%2Fmpt-mobile-platform/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29750170,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-23T07:44:07.782Z","status":"ssl_error","status_checked_at":"2026-02-23T07:44:07.432Z","response_time":90,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-27T13:12:41.459Z","updated_at":"2026-02-23T18:14:52.253Z","avatar_url":"https://github.com/softwareone-platform.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# React Native Expo App - Cross-Platform Development\n\n## Project Overview\n\nA comprehensive React Native mobile application built with Expo, featuring Auth0 authentication, multi-platform navigation, and modern development patterns. Includes a Swift reference implementation for iOS developers.\n\n## Project Structure\n\n### React Native App\n- **Platform**: iOS \u0026 Android (React Native 0.81 + Expo SDK 54)\n- **Authentication**: Auth0 integration with secure token storage\n- **Navigation**: React Navigation v7 with tab and stack navigation\n- **State Management**: React Context + TypeScript\n\n## Platform Compatibility\n\n**iOS 17 \u0026 iOS 18**: Fully supported  \n**Android 14 \u0026 Android 15**: Fully supported\n\n## Key Features\n\n- **Auth0 Authentication**: OAuth2/OIDC with OTP verification\n- **Multi-Account Support**: Account switching and profile management  \n- **Cross-Platform UI**: Tab navigation with 5 main sections (Spotlight, Search, Chat, Service Desk, Analytics)\n- **Secure Storage**: Keychain/Keystore integration with fallbacks\n- **Real-time Data**: API integration with search, filtering, and state sync\n\n## Quick Setup\n\n### Prerequisites\n- **Node.js**: LTS version (20.19.4 or later)\n- **Expo CLI**: `npm install -g @expo/cli`\n- **Development Tools**:\n  - iOS: Xcode and iOS Simulator\n  - Android: Android Studio and Android Emulator\n- **Android Emulator**:\n   - Start the emulator so it is available for expo\n\n### Installation Steps\n\n1. **Clone and Navigate**\n   ```bash\n   git clone \u003crepository-url\u003e\n   cd mpt-mobile-platform\n   ```\n\n2. **Configure Environment**\n   - Copy `.env.example` to `.env`\n   - Download `.env` file for this project from [Keeper Vault](https://keepersecurity.eu/vault/)\n   - Add all necessary variables from downloaded file to your local `.env` file\n   - Add your Auth0 configuration (see [Auth0 Setup](#auth0-configuration))\n\n3. **Start Development**\n   ```bash\n   npx expo run:ios\n   npx expo run:android\n   ```\n\n### Android Emulator Setup (if needed)\n\nIf Android option doesn't work:\n\n```bash\n# Navigate to Android SDK emulator directory\ncd ~/Library/Android/sdk/emulator\n# for Windows\ncd %LOCALAPPDATA%\\Android\\Sdk\\emulator\n\n# List available emulators\n./emulator -list-avds\n\n# Start specific emulator (replace with your emulator name)\n./emulator -avd Pixel_5_API_34\n```\n\n### NPM Registry Setup for @swo packages\n\n```bash\n# Create .npmrc in project directory\ncat \u003e .npmrc \u003c\u003c EOF\nregistry=https://registry.npmjs.org/\n@swo:registry=https://softwareone-pc.pkgs.visualstudio.com/_packaging/PyraCloud/npm/registry/\nalways-auth=true\nEOF\n\n# Install and run authentication tool\nnpm install -g vsts-npm-auth\nvsts-npm-auth -config .npmrc\n\n# Install packages\nnpm install\n```\n\n## Auth0 Configuration\n\n### Required Environment Variables\n```env\nAUTH0_DOMAIN=your-domain.auth0.com\nAUTH0_CLIENT_ID=your-client-id\nAUTH0_AUDIENCE=your-api-audience\nAUTH0_SCOPE=openid profile email offline_access\nAUTH0_API_URL=your-api-url\nAUTH0_OTP_DIGITS=6\nAUTH0_SCHEME=your-app-scheme\n```\n\nPlease ask team members to share specifics\n\n### Auth0 Dashboard Settings\n\n**Bundle Configuration:**\n- **iOS Bundle ID**: `com.softwareone.marketplaceMobile`\n- **Android Package**: `com.softwareone.marketplaceMobile`\n\n**Callback URLs:**\n```\n# Production\nsoftwareone.playground-platform-navigation://login-dev.pyracloud.com/ios/com.softwareone.marketplaceMobile/callback\nsoftwareone.playground-platform-navigation://login-dev.pyracloud.com/android/com.softwareone.marketplaceMobile/callback\n```\n\n\u003e **Note**: Leave `TEMPORARY_AUTH0_TOKEN` empty unless debugging.\n\n## Zscaler Configuration\n\nIf you're working in a corporate environment with Zscaler, please make sure that your Zscaller policies are up to date.\n\n## Development Workflow\n\n### Environment Variables\n\n\u003e **⚠️ Important:** After changing values in the `.env` file, you must clear Metro's cache and restart:\n\u003e ```bash\n\u003e # Stop any running Metro process\n\u003e npx expo start --clear #(shut it down after ready Ctrl+C)\n\u003e # Then rebuild your app\n\u003e npx expo run:ios   \n\u003e npx expo run:android\n\u003e ```\n\u003e This is required because environment variables are injected at bundle time by Babel, not at runtime.\n\n### iOS Simulator Deployment (Recommended)\n\nWe provide automated scripts for building and deploying to the iOS Simulator. These scripts handle the complete build cycle: cleaning, building, and deploying.\n\n#### Quick Deploy to iOS Simulator\n```bash\n# Deploy with verbose output\n./scripts/deploy-ios.sh --verbose\n\n# Deploy with specific simulator\n./scripts/deploy-ios.sh --simulator \"iPhone 15 Pro\"\n\n# Deploy with logs\n./scripts/deploy-ios.sh --logs\n\n# Deploy in release mode\n./scripts/deploy-ios.sh --release\n```\n\n**Prerequisites:** .env file must exist in app/ directory with Auth0 configuration\n\n**Script Options:**\n- `-r, --release`: Build in release mode (default: debug)\n- `-s, --simulator NAME`: Specify simulator (default: iPhone 16 Pro)\n- `-f, --force-boot`: Force boot simulator\n- `-l, --logs`: Show app logs after launch\n- `-v, --verbose`: Show detailed output\n- `-h, --help`: Show help message\n\n#### Hot Reload Development (Fastest Iteration)\n\nFor rapid development with hot reload:\n\n```bash\n# Start development server with hot reload\n./scripts/hot-reload.sh\n\n# Clear cache and start\n./scripts/hot-reload.sh --clear\n\n# Auto-open iOS Simulator\n./scripts/hot-reload.sh --ios\n\n# Auto-open Android Emulator\n./scripts/hot-reload.sh --android\n```\n\nOnce the server starts:\n- Press `i` for iOS Simulator\n- Press `a` for Android Emulator\n- Press `r` to reload\n- Press `Ctrl+C` to stop\n\n#### Cleanup Build Artifacts\n\n```bash\n# Standard cleanup\n./scripts/cleanup.sh\n\n# Deep clean (removes node_modules, reinstalls)\n./scripts/cleanup.sh --deep\n```\n\n### Manual Development Build (Alternative)\n\nIf you prefer to use Expo commands directly:\n\n```bash\n# iOS\nnpx expo run:ios\n\n# Android\nnpx expo run:android\n```\n\n## Local Build - iOS\nFor detailed setup and configuration, please refer to [Local Build - iOS](documents/LOCAL_BUILD_IOS.md)\n\n## CI/CD Workflows\n\nThis project uses GitHub Actions for continuous integration and deployment.\n\n### Automated Workflows\n\n#### PR Build Workflow\n- **Triggers:** Pull requests to `main` branch\n- **What it does:**\n  - Installs dependencies (with caching)\n  - Runs ESLint (`npm run lint:check`)\n  - Runs Jest tests (`npm test`)\n- **Runner:** Ubuntu (cost-effective)\n- **Duration:** ~2-5 minutes\n- **Purpose:** Fast validation without expensive iOS builds\n\n#### Main Branch CI Workflow\n- **Triggers:** Push to `main` branch\n- **What it does:**\n  - Runs validation (lint + tests) on Ubuntu runners\n  - **Automatically builds iOS app** after validation succeeds\n  - Creates iOS .app artifact (7-day retention)\n- **Runners:** Ubuntu (validation) + macOS-14 (iOS build)\n- **Duration:** ~25-35 minutes total\n- **Purpose:** Ensures main branch always passes tests AND has working iOS build\n\n#### iOS Build Workflow (Auto on Main + Manual)\n- **Triggers:**\n  - **Automatic:** Runs on every push to `main` branch (after validation)\n  - **Manual:** Can be triggered manually via GitHub Actions UI\n- **What it does:**\n  - Runs tests\n  - Generates native iOS project with Expo prebuild\n  - Builds iOS app (Debug or Release, unsigned)\n  - Uploads .app artifact (7-day retention)\n  - **Does NOT** deploy to TestFlight\n  - **Does NOT** increment version numbers\n- **Runner:** macOS-14 (~$0.08/min)\n- **Duration:** ~20-30 minutes\n- **Purpose:** Build verification, ensures main branch always has working iOS build\n\n#### iOS TestFlight Workflow (Manual - Full Deployment)\n- **Triggers:** Manual dispatch only (via GitHub Actions UI)\n- **What it does:**\n  - Runs tests\n  - Auto-increments version/build number\n  - Generates native iOS project with Expo prebuild\n  - Builds and signs iOS app for App Store\n  - Uploads to TestFlight\n  - Commits version bump and creates git tag\n  - Uploads IPA and dSYMs as artifacts (30-day retention)\n- **Runner:** macOS-14 (~$0.08/min)\n- **Duration:** ~30-45 minutes\n- **Purpose:** Complete deployment to TestFlight for internal/external testing\n- **Requires:** TestFlight environment secrets configured\n\n### When to Use Which Workflow\n\n**iOS Build (Automatic on Main):**\n- **Runs automatically** on every push to `main` branch\n- Verifies iOS build succeeds after merging PRs\n- Creates .app artifact from main branch\n- Can also be triggered manually for testing\n\n**iOS Build (Manual Trigger):**\n- Testing build configuration changes\n- Verifying builds before creating PR\n- Testing on feature branches\n\n**iOS TestFlight (Always Manual):**\n- Deploying to internal/external testers\n- Creating release candidates\n- Publishing builds for testing\n- Only trigger when ready to distribute\n\n### Caching\n\nAll workflows use dependency caching to speed up builds:\n- **npm dependencies:** Cached based on `package-lock.json`\n- **CocoaPods:** Cached based on `Podfile.lock` (iOS builds only)\n\n### TestFlight Deployment\n\n#### Automated TestFlight Workflow\n\nThe project includes a complete TestFlight deployment workflow (`.github/workflows/ios-testflight.yml`).\n\n**To deploy to TestFlight:**\n\n1. Navigate to **Actions** tab in GitHub\n2. Select **iOS TestFlight Deployment** workflow\n3. Click **Run workflow**\n4. Configure options:\n   - **Version bump type:** Choose build (increment build number) or patch/minor/major (increment version)\n   - **Environment:** Choose test or production (affects Auth0 configuration)\n5. Click **Run workflow**\n6. Wait ~30-45 minutes for complete deployment\n7. Check App Store Connect for the new build in TestFlight\n\n**What the workflow does:**\n\n1. Runs all tests to ensure code quality\n2. Increments version/build number in `app.config.js` based on selection\n3. Generates native iOS project with Expo prebuild\n4. Configures code signing with distribution certificate\n5. Archives iOS app in Release mode\n6. Exports signed IPA for App Store distribution\n7. Uploads to TestFlight via App Store Connect API\n8. Creates a PR with the version bump (for merging back to main)\n9. Creates a git tag for the release (e.g., `v1.3.0-build3`)\n10. Uploads IPA and dSYMs as artifacts (30-day retention)\n\n**Build artifacts available:**\n- Signed IPA file for App Store distribution\n- dSYM files for crash symbolication\n- Available for 30 days after deployment\n\n#### Required Secrets\n\nAll secrets must be configured in the `TestFlight` GitHub environment:\n\n**To configure secrets:**\n1. Go to Settings → Environments → TestFlight\n2. Add environment secrets\n\n**Required secrets in TestFlight environment:**\n- App Store Connect API: `APP_STORE_CONNECT_API_KEY_ID`, `APP_STORE_CONNECT_ISSUER_ID`, `APP_STORE_CONNECT_API_KEY_CONTENT`\n- Code Signing: `IOS_DISTRIBUTION_CERTIFICATE_P12_BASE64`, `IOS_DISTRIBUTION_CERTIFICATE_PASSWORD`, `IOS_PROVISIONING_PROFILE_BASE64`\n\n**Required secrets/variables in target environment (test/prod):**\n- Secret: `AUTH0_CLIENT_ID`\n- Variables: `AUTH0_DOMAIN`, `AUTH0_AUDIENCE`, `AUTH0_API_URL`, `AUTH0_SCOPE`, `AUTH0_OTP_DIGITS`, `AUTH0_SCHEME`\n\n**Important Note on Secrets:**\n- GitHub secrets are read-only and cannot be copied between repositories\n- All secrets must be manually recreated in the TestFlight environment\n- Contact team member who has the original secret values locally\n- Reference PoC repository for secret names: https://github.com/softwareone-platform/mpt-mobile-reactnative-poc/settings/secrets/actions\n\nFor detailed documentation on secrets and deployment process, see:\n- [CLAUDE.md - TestFlight Deployment](CLAUDE.md#testflight-deployment)\n- [TestFlight Setup Checklist](.github/TESTFLIGHT_SETUP.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftwareone-platform%2Fmpt-mobile-platform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoftwareone-platform%2Fmpt-mobile-platform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftwareone-platform%2Fmpt-mobile-platform/lists"}