MarketingCloudSDK.Net.iOS
11.0.2.1-beta.2.3
See the version list below for details.
dotnet add package MarketingCloudSDK.Net.iOS --version 11.0.2.1-beta.2.3
NuGet\Install-Package MarketingCloudSDK.Net.iOS -Version 11.0.2.1-beta.2.3
<PackageReference Include="MarketingCloudSDK.Net.iOS" Version="11.0.2.1-beta.2.3" />
<PackageVersion Include="MarketingCloudSDK.Net.iOS" Version="11.0.2.1-beta.2.3" />
<PackageReference Include="MarketingCloudSDK.Net.iOS" />
paket add MarketingCloudSDK.Net.iOS --version 11.0.2.1-beta.2.3
#r "nuget: MarketingCloudSDK.Net.iOS, 11.0.2.1-beta.2.3"
#:package MarketingCloudSDK.Net.iOS@11.0.2.1-beta.2.3
#addin nuget:?package=MarketingCloudSDK.Net.iOS&version=11.0.2.1-beta.2.3&prerelease
#tool nuget:?package=MarketingCloudSDK.Net.iOS&version=11.0.2.1-beta.2.3&prerelease
MarketingCloudSDK.Net.iOS
.NET for iOS bindings for the Salesforce Marketing Cloud MobilePush framework (MarketingCloudSDK) — push registration, inbox, in-app messages and location messaging — at the v11 Unified SDK generation.
dotnet add package MarketingCloudSDK.Net.iOS
using MarketingCloudSDK;
using SFMCSDK;
var pushConfig = new SFMarketingCloudSdkConfigBuilder("your-app-id")
.SetAccessToken("your-access-token")
.SetMarketingCloudServerUrl("https://your-tenant.device.marketingcloudapis.com/")
.SetMid("your-mid")
.Build();
var config = new SFMCSdkConfigBuilder().SetPushFeature(pushConfig).Build();
SFMCSdk.InitializeSdk(config, statuses => { });
// The sfmc_* category surface lives on MobilePushSDK (renamed from MarketingCloudSDK at v11):
var sdk = MobilePushSDK.SharedInstance;
sdk.Sfmc_setContactKey("contact-key");
The SFMC SDK core (SFMCSDK.Net.iOS) and the AppGroupSDK payload (MarketingCloudSDK.Net.AppGroupSDK.iOS) arrive as dependencies of this package, mirroring the native package manifests. Android lives in the sibling MarketingCloudSDK.Net.Android; a cross-platform ergonomic layer lives in MarketingCloudSDK.Net.
Contents
- Packages
- What is bound, and how
- Installing
- Push prerequisites
- How this repository works
- Building locally
- Tests
- Upgrading the SFMC SDK
- Releasing
- Troubleshooting
- Licence
Packages
| Package | Wraps | Depends on | What it is for |
|---|---|---|---|
MarketingCloudSDK.Net.iOS |
MarketingCloudSDK.xcframework 11.0.2 |
SFMCSDK.Net.iOS, MarketingCloudSDK.Net.AppGroupSDK.iOS |
Push registration, inbox, in-app messages, location |
MarketingCloudSDK.Net.AppGroupSDK.iOS |
AppGroupSDK.xcframework 1.0.0 |
— | Payload-only: the internal app-group storage layer v11 requires; no API projected |
Versions are <MarketingCloudSDK version>.<binding revision> — 11.0.2.1 is MarketingCloudSDK 11.0.2, binding revision 1. Both packages version together; AppGroupSDK's own native line (1.0.0) is pinned in Directory.Build.props.
What is bound, and how
By hand, never by Sharpie, descending from the hand-curated 8.x binding, ported to 11.0.2 by header diff and verified with a bidirectional selector-parity check (every selector in all ten headers bound, no stale selectors). The packed binding passes live smoke tests on a simulator — all three frameworks load together and the module-configured initialization completion fires.
What changed at v11, for consumers of the old 8.x packages:
- The
sfmc_*category surface moved from classMarketingCloudSDKtoMobilePushSDK— same selectors, new class name. PushConfig/PushConfigBuilder/SFMCSdkPushModuleare replaced bySFMarketingCloudSdkConfig(Builder)attached viaSFMCSdkConfigBuilder.SetPushFeature, andSFMarketingCloudSdkwithRequestSdk(Action<IMarketingCloudSdkInterface>).- The URL-handling and event delegates left this framework (v4 SFMCSDK carries event-based replacements —
SFMCSdkPushURLHandlingEventand friends — and the newsfmc_handle*Event:hooks here feed them). - Device-token and notification-request setters left the category surface (the SDK observes them itself); the readers remain.
Installing
<PackageReference Include="MarketingCloudSDK.Net.iOS" Version="11.0.2.1" />
Target frameworks: net8.0-ios18.0, net9.0-ios18.0, net10.0-ios26.0. Floor: iOS 12.2.
Push prerequisites
The binding does not change what MobilePush itself needs: an APNs-entitled app (aps-environment), a UNUserNotificationCenter authorization request, RegisterForRemoteNotifications, and MobilePush app credentials. Never commit credentials; the sample takes them as runtime input.
How this repository works
Nothing native is committed. Salesforce commits the built xcframeworks into the repository trees (MarketingCloudSDK-iOS, app-group-internal-sdk) and attaches nothing to releases, so build/FetchXcFrameworks.sh downloads both tag archives and verifies every slice binary against the SHA-256 pins in build/checksums.txt — pins over binaries, not archives, because GitHub tag archives are not byte-stable.
build/BuildNugets.sh packs twice (net9 band, then net10 from a scratch global.json) and build/merge-packages.py grafts the net10 assets into each package. The native payloads ship as compressed .resources.zip.
Layout
| Path | What |
|---|---|
src/Sfmc.Binding.props |
TFM bands, xcframework validation, packaging — a one-file port from the sibling SFMCSDK.Net.iOS |
src/MarketingCloudSDK.Net.iOS/ |
ApiDefinitions.cs + StructsAndEnums.cs, hand-maintained |
src/MarketingCloudSDK.Net.AppGroupSDK.iOS/ |
The payload-only sibling; its ApiDefinitions deliberately binds nothing |
build/ |
Fetch, checksum, pack and upgrade scripts; packages.tsv is the roster |
tests/ |
PackageTests and DeviceTests (a bare UIKit app driving the real SDK on a simulator) |
samples/ |
A MAUI app driving configuration and registration |
.github/workflows/ |
pr, release, auto-release, upstream-drift |
Building locally
./build/FetchXcFrameworks.sh # populate ./libs, checksum-verified
./build/BuildNugets.sh # packs 11.0.2.1 into ./artifacts
dotnet test tests/MarketingCloudSDK.Net.iOS.PackageTests
SFMCSDK.Net.iOS restores from nuget.org, or from ./artifacts if you drop the sibling's package there.
Tests
dotnet test tests/MarketingCloudSDK.Net.iOS.PackageTests
./.github/scripts/run-simulator-tests.sh 11.0.2.1 net9.0-ios18.0
The simulator tests run without credentials on purpose: all three frameworks load, the module-configured initializeSdk completion fires with real statuses (the block bridge the core repository's zero-module tests cannot reach), and the MobilePushSDK category surface answers.
Upgrading the SFMC SDK
./build/BumpNativeVersion.sh 11.1.0
then port the header diff into ApiDefinitions.cs by hand — the script prints what it does not automate. Bump the sibling SFMCSDK.Net.iOS first when sfmc-sdk-ios moved; upstream-drift watches both repositories this package binds.
Releasing
Merging a file named docs/release-notes/<four-part-version>.md to main is the release: auto-release tags it, release packs with verification off and publishes to nuget.org via trusted publishing. Every PR publishes a -beta.<pr>.<run> prerelease.
Troubleshooting
MarketingCloudSDK.xcframework is missing. Run ./build/FetchXcFrameworks.sh — nothing native is committed, and packing does not fetch.
Migrating 8.x code: MarketingCloudSDK (the class) does not exist. It is MobilePushSDK at v11 — the sfmc_* members are unchanged. See What is bound, and how for the config-builder replacement.
Xcode version errors building the net10 sample locally. The net10 iOS workload pins an exact Xcode line (CI selects Xcode_26.0); with a newer local Xcode, build the net9-band device tests instead.
Licence
The binding code in this repository is MIT. The native frameworks inside the packages are © Salesforce, BSD-3-Clause. The package licence expression is MIT AND BSD-3-Clause and both texts ship in every package under licenses/.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-ios18.0 is compatible. net9.0-ios was computed. net9.0-ios18.0 is compatible. net10.0-ios was computed. net10.0-ios26.0 is compatible. |
-
net10.0-ios26.0
- MarketingCloudSDK.Net.AppGroupSDK.iOS (>= 11.0.2.1-beta.2.3)
- SFMCSDK.Net.iOS (= 4.0.1.1)
-
net8.0-ios18.0
- MarketingCloudSDK.Net.AppGroupSDK.iOS (>= 11.0.2.1-beta.2.3)
- SFMCSDK.Net.iOS (= 4.0.1.1)
-
net9.0-ios18.0
- MarketingCloudSDK.Net.AppGroupSDK.iOS (>= 11.0.2.1-beta.2.3)
- SFMCSDK.Net.iOS (= 4.0.1.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on MarketingCloudSDK.Net.iOS:
| Package | Downloads |
|---|---|
|
MarketingCloudSDK.Net
One cross-platform API for Salesforce Marketing Cloud MobilePush: awaitable initialization with real credentials, identity (contact key and attributes) via the SFMC SDK core, registration reads and tag/attribute edits on Android and iOS from shared code, over the MarketingCloudSDK.Net.Android and MarketingCloudSDK.Net.iOS bindings. Restores on plain target frameworks too, so shared class libraries and unit tests need no platform conditionals. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 11.0.2.3 | 154 | 7/30/2026 |
| 11.0.2.3-beta.7.11 | 52 | 7/30/2026 |
| 11.0.2.2 | 129 | 7/30/2026 |
| 11.0.2.2-beta.6.10 | 51 | 7/30/2026 |
| 11.0.2.2-beta.5.7 | 46 | 7/30/2026 |
| 11.0.2.2-beta.4.6 | 56 | 7/30/2026 |
| 11.0.2.1-beta.2.3 | 56 | 7/30/2026 |
| 8.1.3.8 | 1,954 | 10/30/2024 |
| 8.1.3.6 | 196 | 10/7/2024 |
| 8.1.2.10 | 186 | 7/12/2024 |
| 8.1.2.4 | 180 | 7/12/2024 |
| 8.1.2.3 | 214 | 5/20/2024 |
| 8.1.2.2 | 219 | 5/17/2024 |
| 8.1.1.81 | 497 | 2/28/2024 |
| 8.1.1.80 | 195 | 2/28/2024 |
| 8.1.1.79 | 219 | 2/22/2024 |
| 8.1.1.71 | 219 | 2/7/2024 |
## What's changed
First release of the rebuilt binding, at the v11 Unified SDK generation.
- Binds **MarketingCloudSDK 11.0.2** (was 8.x in the retired `sfmc-net-bindings-mobile`
packages) and ships the new **AppGroupSDK 1.0.0** requirement as a payload-only sibling
package, both fetched from tag archives with per-binary SHA-256 pins.
- Depends on **SFMCSDK.Net.iOS 4.0.1.1** for the core, mirroring the native package manifests.
- The hand-curated `ApiDefinitions.cs` was ported 8.1.x → 11.0.2 by header diff with a
bidirectional selector-parity check; the packed binding passes live simulator smoke tests,
including the module-configured initialization completion.
- Migrating from `8.x`: the `sfmc_*` category class is now `MobilePushSDK`;
`PushConfig(Builder)`/`SFMCSdkPushModule` became `SFMarketingCloudSdkConfig(Builder)` +
`SFMarketingCloudSdk` attached via `SFMCSdkConfigBuilder.SetPushFeature`; the URL-handling and
event delegates are replaced by the v4 SFMCSDK event surface fed through the new
`sfmc_handle*Event:` hooks; device-token/notification-request setters left the category
surface (readers remain).