The distribution and tooling hub for the Salesforce Mobile SDK. This repository provides command-line tools, a Salesforce CLI plugin, testing framework, and release automation for creating and maintaining Salesforce mobile applications.
This repository serves three primary functions:
- CLI Tools - Standalone command-line tools for creating mobile apps
- SFDX Plugin - Salesforce CLI integration for Mobile SDK
- SDK Infrastructure - Testing, packaging, and release automation
The following NPM packages enable developers to create Salesforce mobile applications:
| Tool | Package | Purpose |
|---|---|---|
| forceios | @npmjs | Create iOS native apps (Swift or Objective-C) |
| forcedroid | @npmjs | Create Android native apps (Kotlin or Java) |
| forcehybrid | @npmjs | Create hybrid apps using Cordova (iOS and/or Android) |
| forcereact | @npmjs | Create React Native apps (iOS and/or Android) |
Install globally via NPM:
npm install -g forceios forcedroid forcehybrid forcereactEach tool supports multiple commands:
# Create an app from the standard template
forceios create --appname=MyApp --packagename=com.mycompany.myapp --organization="My Company"
# List available templates
forceios listtemplates
# Create an app from a specific template
forceios createwithtemplate --templaterepouri=iOSNativeSwiftTemplate --appname=MyApp ...
# Show SDK version
forceios version
# Validate SmartStore/MobileSync config
forceios checkconfig --configpath=config.json --configtype=storeReplace forceios with forcedroid, forcehybrid, or forcereact for other platforms.
Optionally provide External Client App credentials to auto-configure OAuth:
forceios create \
--appname=MyApp \
--packagename=com.mycompany.myapp \
--organization="My Company" \
--consumerkey=<consumer-key> \
--callbackurl=sfdc://oauth/success \
--loginserver=https://login.salesforce.comUse custom templates from a git repository or local path:
# From git URL with optional #branch
forceios createwithtemplate \
--templatesource=https://github.com/myorg/my-templates#main \
--template=MyTemplate \
--appname=MyApp ...
# From local path
forceios createwithtemplate \
--templatesource=/path/to/templates \
--template=MyTemplate \
--appname=MyApp ...The sfdx-mobilesdk-plugin integrates Mobile SDK commands into the Salesforce CLI.
sf plugins install sfdx-mobilesdk-pluginThe plugin provides sf mobilesdk commands that mirror the standalone CLI tools:
# iOS commands
sf mobilesdk ios create --appname=MyApp --packagename=com.mycompany.myapp ...
sf mobilesdk ios listtemplates
sf mobilesdk ios createwithtemplate --templaterepouri=<template> ...
# Android commands
sf mobilesdk android create --appname=MyApp ...
sf mobilesdk android listtemplates
# Hybrid commands
sf mobilesdk hybrid create --platform=ios,android --appname=MyApp ...
sf mobilesdk hybrid listtemplates
# React Native commands
sf mobilesdk reactnative create --platform=ios,android --appname=MyApp ...
sf mobilesdk reactnative listtemplatesFor detailed plugin documentation, see sfdx/README.md.
- Node.js: 20 or higher
- npm: 10 or higher
- Git: 2.13 or higher
Clone the repository and install dependencies:
git clone https://github.com/forcedotcom/SalesforceMobileSDK-Package.git
cd SalesforceMobileSDK-Package
npm install# Run forceios from source
./ios/forceios.js create --appname=MyApp ...
# Run forcedroid from source
./android/forcedroid.js create --appname=MyApp ...
# Run forcehybrid from source
./hybrid/forcehybrid.js create --appname=MyApp ...
# Run forcereact from source
./react/forcereact.js create --appname=MyApp ...# Generate OCLIF command classes (required after changes to shared/constants.js)
cd sfdx
node generate_oclif.js
# Link plugin for local development
sf plugins link sfdx
# Use the plugin
sf mobilesdk ios --help
sf mobilesdk android --help
sf mobilesdk hybrid --help
sf mobilesdk reactnative --helpRun Jest tests for shared utilities:
npm testTests are located in unittests/ and cover:
- Utility functions
- Argument parsing
- Template helpers
- Config validation
The test/test_force.js script performs comprehensive app generation testing:
# Test all CLI tools
./test/test_force.js --cli=forceios,forcedroid,forcehybrid,forcereact
# Test specific tools
./test/test_force.js --cli=forceios
./test/test_force.js --cli=forcedroid
# Test with SFDX plugin
./test/test_force.js --cli=forceios --use-sfdx
# Override plugin repo (for testing unreleased versions)
./test/test_force.js --cli=forcehybrid --pluginrepouri=https://github.com/user/SalesforceMobileSDK-CordovaPlugin#branch
# Override SDK dependencies (for testing custom SDK branches)
./test/test_force.js --cli=forceios --sdkdependencies='{"ios":"https://github.com/user/SalesforceMobileSDK-iOS#branch"}'The integration tests verify:
- ✅ App generation succeeds for all app types
- ✅ All required files are created
- ✅ Project structure is correct
- ✅ OAuth configuration is applied (if provided)
- ✅ Both CLI and SFDX plugin work
App Types Tested:
- iOS:
native(Objective-C),native_swift(Swift) - Android:
native(Java),native_kotlin(Kotlin) - Hybrid:
hybrid_local,hybrid_remote - React Native:
react_native,react_native_typescript
Create distributable NPM packages:
# Package all CLI tools
./pack/pack.js --cli=forceios,forcedroid,forcehybrid,forcereact
# Package specific tools
./pack/pack.js --cli=forceios
# Package SFDX plugin
./pack/pack.js --sfdx-pluginOutput: <name>-<version>.tgz files in the current directory.
The release/release.js script orchestrates releases across all 11 Mobile SDK repositories:
- SalesforceMobileSDK-Shared
- SalesforceMobileSDK-Android
- SalesforceMobileSDK-iOS
- SalesforceMobileSDK-iOS-Hybrid
- SalesforceMobileSDK-iOS-Specs
- SalesforceMobileSDK-iOS-SPM
- SalesforceMobileSDK-CordovaPlugin
- SalesforceMobileSDK-ReactNative
- SalesforceMobileSDK-Templates
- SalesforceMobileSDK-Package (this repo)
./release/release.jsThe script will interactively prompt for:
- Work directory
- GitHub organization
- Branch names (master/dev/gh-pages)
- Version being released
- Next version
- Android version code
For each repository:
- Clone or pull latest code
- Merge dev → master (unless patch release)
- Update version numbers in source files
- Generate documentation (Android Javadoc, iOS docs)
- Build XCFrameworks (iOS-SPM)
- Update podspecs (iOS-Specs)
- Run update scripts (CordovaPlugin)
- Commit and tag release
- Push to GitHub
- Update dev branch for next version
After release.js completes, follow the instructions to:
-
Test the packages:
cd <work-dir>/SalesforceMobileSDK-Package ./test/test_force.js --cli=forceios,forcedroid,forcereact,forcehybrid --pluginrepouri=<github-url>
-
Publish to NPM:
npm publish forceios-<version>.tgz npm publish forcedroid-<version>.tgz npm publish forcehybrid-<version>.tgz npm publish forcereact-<version>.tgz npm publish sfdx-mobilesdk-plugin-<version>.tgz npm publish salesforce-mobilesdk-cordova-plugin-<version>.tgz
-
Publish to Maven Central (Android):
cd <work-dir>/SalesforceMobileSDK-Android ./publish/publish.sh
SalesforceMobileSDK-Package/
├── ios/ # forceios CLI tool
│ ├── forceios.js # Entry point
│ └── package.json # NPM package definition
├── android/ # forcedroid CLI tool
│ ├── forcedroid.js # Entry point
│ └── package.json
├── hybrid/ # forcehybrid CLI tool
│ ├── forcehybrid.js # Entry point
│ └── package.json
├── react/ # forcereact CLI tool
│ ├── forcereact.js # Entry point
│ └── package.json
├── sfdx/ # SFDX plugin (sf mobilesdk)
│ ├── generate_oclif.js # Generates OCLIF command classes
│ ├── package.json # Plugin package definition
│ └── README.md # Plugin documentation
├── shared/ # Shared utilities (symlinked into tools)
│ ├── constants.js # SDK version, tool requirements
│ ├── createHelper.js # App creation logic
│ ├── templateHelper.js # Template handling
│ ├── configHelper.js # CLI argument parsing
│ └── utils.js # File operations, git, shell
├── test/ # Testing framework
│ └── test_force.js # Integration tests
├── release/ # Release automation
│ ├── release.js # Main release orchestrator
│ └── common.js # Release utilities
├── pack/ # NPM packaging
│ └── pack.js # Creates .tgz packages
├── unittests/ # Unit tests
│ └── *.test.js # Jest tests
└── package.json # Root package definition
All CLI tools share common code via the shared/ directory:
- Entry Points (
ios/forceios.js, etc.): Minimal wrappers that callcreateHelper.createApp() - Constants (
shared/constants.js): Defines SDK version, tool requirements, CLI configurations - Create Helper (
shared/createHelper.js): Main app creation logic for native and hybrid workflows - Template Helper (
shared/templateHelper.js): Template discovery, listing, and execution
Templates are fetched from the SalesforceMobileSDK-Templates repository.
Each template has:
template.js- Defines app type and prepare functiontemplate.json- Optional schema for custom properties- Template files - Boilerplate code with placeholders
When creating an app:
- Clone template repository (or use local path)
- Copy template files to project directory
- Run
template.jsprepare function (substitutes values, renames files) - For hybrid apps: Use Cordova CLI to create project structure
- Print next steps for opening in IDE
The SDK version is defined in shared/constants.js:
var VERSION = '13.2.0';This version:
- Appears in all CLI tools (
forceios version) - Gets embedded in generated apps
- Determines which template repo tags to use
- Gets updated during releases
Contributions are welcome! Please:
- Read CLAUDE.md for development guidelines
- Run tests before submitting:
npm testand./test/test_force.js - Follow existing code style
- Test changes with all CLI tools and SFDX plugin
- Update documentation as needed
- CLAUDE.md: Comprehensive development guide for AI-assisted development
- sfdx/README.md: SFDX plugin installation and usage
- Mobile SDK Developer Guide: Official documentation
- SalesforceMobileSDK-iOS - iOS native SDK
- SalesforceMobileSDK-Android - Android native SDK
- SalesforceMobileSDK-Templates - App templates
- SalesforceMobileSDK-Shared - Hybrid JavaScript libraries
- SalesforceMobileSDK-CordovaPlugin - Cordova plugin
- SalesforceMobileSDK-ReactNative - React Native libraries
- SalesforceMobileSDK-iOS-Hybrid - iOS hybrid bridge
- SalesforceMobileSDK-iOS-Specs - CocoaPods specs
- SalesforceMobileSDK-iOS-SPM - Swift Package Manager distribution
Salesforce Mobile SDK License. See LICENSE for details.
- Issues: GitHub Issues
- Questions: Salesforce Developer Community
- Stack Overflow: Tag questions with
salesforce-mobile-sdk