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.
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
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.
./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-
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.
The manifest declares the plugin structure with id com.salesforce.
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><engines>
<engine name="cordova-ios" version="7.1.1" />
<engine name="cordova-android" version="15.0.0" />
</engines>-
<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.
-
<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.
These scripts run automatically when a developer executes cordova plugin add com.salesforce.
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;');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.
| 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
-
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 no
This 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
- 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
Salesforce Mobile SDK License. See LICENSE.md for details.