Cordova Plugin for Salesforce Mobile SDK
June 6, 2026 · View on GitHub
This repository is an aggregation-only distribution package. Source code is NOT developed here. The plugin assembles JavaScript from SalesforceMobileSDK-Shared, iOS bridge code from SalesforceMobileSDK-iOS-Hybrid, iOS resources from SalesforceMobileSDK-iOS, and the entire Android SDK from SalesforceMobileSDK-Android into a single Cordova plugin distributed via npm.
Repository Structure
SalesforceMobileSDK-CordovaPlugin/
├── www/ # JavaScript (copied from Shared repo)
│ ├── com.salesforce.plugin.oauth.js
│ ├── com.salesforce.plugin.network.js
│ ├── com.salesforce.plugin.sdkinfo.js
│ ├── com.salesforce.plugin.smartstore.js
│ ├── com.salesforce.plugin.smartstore.client.js
│ ├── com.salesforce.plugin.sfaccountmanager.js
│ ├── com.salesforce.plugin.mobilesync.js
│ ├── com.salesforce.util.bootstrap.js
│ ├── com.salesforce.util.event.js
│ ├── com.salesforce.util.exec.js
│ ├── com.salesforce.util.logger.js
│ ├── com.salesforce.util.promiser.js
│ └── com.salesforce.util.push.js
│
├── src/ios/
│ ├── classes/ # Objective-C bridge (copied from iOS-Hybrid)
│ │ ├── AppDelegate.m
│ │ ├── InitialViewController.h
│ │ ├── InitialViewController.m
│ │ ├── UIApplication+SalesforceHybridSDK.h
│ │ └── UIApplication+SalesforceHybridSDK.m
│ └── resources/ # Assets (copied from iOS SDK)
│ ├── Images.xcassets
│ ├── SalesforceSDKAssets.xcassets
│ └── SalesforceSDKResources.bundle
│
├── src/android/libs/mobile_sdk/ # Entire Android repo (pruned)
│ ├── libs/
│ │ ├── SalesforceSDK/
│ │ ├── SmartStore/
│ │ ├── MobileSync/
│ │ └── SalesforceHybrid/
│ ├── settings.gradle.kts
│ └── ...
│
├── plugin.xml # Cordova plugin manifest
├── package.json # npm package definition
│
├── tools/
│ ├── update.sh # Copies source files from upstream repos
│ ├── postinstall-ios.js # Runs after `cordova plugin add` on iOS
│ └── postinstall-android.js # Runs after `cordova plugin add` on Android
│
├── gradle/ # Gradle wrapper (copied from Android)
├── gradlew
├── gradlew.bat
└── gradle.properties
tools/update.sh -- The Update Pipeline
This script clones source repositories and copies their files into this repo. It must be run manually after changes in source repos, and is also called automatically by release/release.js in the Package repo at release time.
Usage
./tools/update.sh -b <branch> -o <ios|android|all>
Examples:
./tools/update.sh -b dev -o all # Update both platforms from dev
./tools/update.sh -b dev -o ios # Update only iOS
./tools/update.sh -b v14.0.0 -o all # Update from a release tag
What it does, step by step
-
Clones source repos at the specified branch (shallow, single-branch):
SalesforceMobileSDK-SharedSalesforceMobileSDK-iOS-HybridSalesforceMobileSDK-iOSSalesforceMobileSDK-Android
-
Wipes both
src/ios/andsrc/android/regardless of the-oflag, then recreates only the directories matching the requested platform. -
Copies iOS bridge code from iOS-Hybrid:
iOS-Hybrid/shared/hybrid/AppDelegate.m->src/ios/classes/iOS-Hybrid/shared/hybrid/UIApplication+SalesforceHybridSDK.{h,m}->src/ios/classes/iOS-Hybrid/shared/hybrid/InitialViewController.{h,m}->src/ios/classes/
-
Copies iOS resources from iOS SDK:
iOS/shared/resources/Images.xcassets->src/ios/resources/iOS/shared/resources/SalesforceSDKAssets.xcassets->src/ios/resources/iOS/shared/resources/SalesforceSDKResources.bundle->src/ios/resources/
-
Copies Android SDK:
- Copies entire Android repo ->
src/android/libs/mobile_sdk/ - Prunes
native/,hybrid/, andlibs/SalesforceReactdirectories - Removes those pruned modules from
settings.gradle.kts - Removes symlinks (npm cannot handle them)
- Copies Gradle wrapper files (
gradle.properties,gradlew,gradlew.bat,gradle/) to the repo root
- Copies entire Android repo ->
-
Copies JavaScript from Shared:
Shared/gen/plugins/com.salesforce/*.js->www/
-
Deletes the cloned temp directories.
plugin.xml -- The Cordova Manifest
The manifest declares the plugin structure with id com.salesforce.
JavaScript modules
Six plugin modules plus smartstore.client, plus six utility modules -- all served from www/. The <clobbers> element sets global JS names:
<js-module src="www/com.salesforce.plugin.smartstore.js" name="plugin.smartstore">
<clobbers target="navigator.smartstore" />
</js-module>
<js-module src="www/com.salesforce.plugin.smartstore.client.js" name="plugin.smartstore.client">
<clobbers target="navigator.smartstoreClient" />
</js-module>
Engine requirements
<engines>
<engine name="cordova-ios" version="7.1.1" />
<engine name="cordova-android" version="15.0.0" />
</engines>
iOS platform section
-
<feature>entries map service names to Objective-C classes:<feature name="com.salesforce.oauth"><param name="ios-package" value="SalesforceOAuthPlugin"/></feature> <feature name="com.salesforce.smartstore"><param name="ios-package" value="SFSmartStorePlugin"/></feature> -
<podspec>block pullsSalesforceHybridSDKfrom iOS-Hybrid and the full iOS SDK pod chain (MobileSync,SmartStore,SalesforceSDKCore,SalesforceAnalytics,SalesforceSDKCommon) from GitHub:<podspec> <pods use-frameworks="true"> <pod name="SalesforceHybridSDK" git="https://github.com/forcedotcom/SalesforceMobileSDK-iOS-Hybrid" branch="dev" /> <pod name="MobileSync" git="https://github.com/forcedotcom/SalesforceMobileSDK-iOS" branch="dev" /> ... </pods> </podspec> -
Source and resource files from
src/ios/. -
Post-install hook:
tools/postinstall-ios.js.
Android platform section
-
<feature>entries map service names to Kotlin/Java classes:<feature name="com.salesforce.oauth"><param name="android-package" value="com.salesforce.androidsdk.phonegap.plugin.SalesforceOAuthPlugin"/></feature> <feature name="com.salesforce.smartstore"><param name="android-package" value="com.salesforce.androidsdk.phonegap.plugin.SmartStorePlugin"/></feature> -
Manifest edits set
SalesforceDroidGapActivityas the main activity andHybridAppas the application class. -
Gradle/Kotlin version preferences:
<preference name="GradleVersion" value="9.4.1" /> <preference name="AndroidGradlePluginVersion" value="9.1.1"/> <preference name="GradlePluginKotlinEnabled" value="true" /> <preference name="GradlePluginKotlinVersion" value="2.1.21" /> -
Post-install hook:
tools/postinstall-android.js.
Post-Install Hooks
These scripts run automatically when a developer executes cordova plugin add com.salesforce.
postinstall-ios.js
Patches project.pbxproj to redirect AppDelegate.m to Plugins/com.salesforce/AppDelegate.m, so the SDK's bootstrap app delegate is used instead of the default Cordova stub:
replaceTextInFile(projectFile,
'path = AppDelegate.m;',
'name = AppDelegate.m; path = Plugins/com.salesforce/AppDelegate.m;');
postinstall-android.js
Performs four operations on the generated Cordova Android project:
-
Fixes
CordovaLib/cordova.gradle-- Adds a missingimport groovy.xml.XmlParser(workaround for a cordova-android 15.0.0 bug). -
Patches
settings.gradle-- Removesinclude ":CordovaLib"and adds anincludeBuildpointing tomobile_sdk/SalesforceMobileSDK-Android, so the Android SDK is consumed as a composite build instead of CordovaLib. -
Patches
app/build.gradle-- Adds packaging exclusions for duplicate META-INF files, and replacesimplementation(project(path: ":CordovaLib"))withapi 'com.salesforce.mobilesdk:SalesforceHybrid:14.0.0'. -
Copies Gradle wrapper files (
gradle.properties,gradlew,gradlew.bat,gradle/) from the plugin into the app project directory.
What NOT to Edit Here
| Path | Source repo | Go there for changes |
|---|---|---|
www/*.js | SalesforceMobileSDK-Shared | gen/plugins/com.salesforce/ |
src/ios/classes/ | SalesforceMobileSDK-iOS-Hybrid | shared/hybrid/ |
src/ios/resources/ | SalesforceMobileSDK-iOS | shared/resources/ |
src/android/ | SalesforceMobileSDK-Android | (entire repo) |
Only edit these files directly in this repository:
plugin.xmltools/update.sh,tools/postinstall-ios.js,tools/postinstall-android.jspackage.json
Release Workflow
-
Run the update script against the release tag:
./tools/update.sh -b v14.0.0 -o all -
Verify copied files look correct (diff against prior release).
-
Run
setversion.shto update the version number across all files:# On dev branch (pre-release): ./setversion.sh -v 14.0.0 -d yes # On master branch (after merging dev → master at release): ./setversion.sh -v 14.0.0 -d noThis updates
package.json, bumpsSalesforceHybrid:<version>inpostinstall-android.js, and switchesplugin.xmlpod references betweenbranch="dev"andtag="v14.0.0". -
Commit, tag, push:
git add . git commit -m "Release v14.0.0" git tag v14.0.0 git push origin dev git push origin v14.0.0 -
Publish:
npm publish
Related Repositories
- SalesforceMobileSDK-Shared -- JavaScript source
- SalesforceMobileSDK-iOS-Hybrid -- iOS bridge source
- SalesforceMobileSDK-iOS -- iOS SDK
- SalesforceMobileSDK-Android -- Android SDK
- SalesforceMobileSDK-Package -- CLI tools and release automation
- SalesforceMobileSDK-Templates -- App templates that consume this plugin
License
Salesforce Mobile SDK License. See LICENSE.md for details.