MarketingCloudSDK.Net.AppGroupSDK.iOS
11.0.2.1-beta.2.3
See the version list below for details.
dotnet add package MarketingCloudSDK.Net.AppGroupSDK.iOS --version 11.0.2.1-beta.2.3
NuGet\Install-Package MarketingCloudSDK.Net.AppGroupSDK.iOS -Version 11.0.2.1-beta.2.3
<PackageReference Include="MarketingCloudSDK.Net.AppGroupSDK.iOS" Version="11.0.2.1-beta.2.3" />
<PackageVersion Include="MarketingCloudSDK.Net.AppGroupSDK.iOS" Version="11.0.2.1-beta.2.3" />
<PackageReference Include="MarketingCloudSDK.Net.AppGroupSDK.iOS" />
paket add MarketingCloudSDK.Net.AppGroupSDK.iOS --version 11.0.2.1-beta.2.3
#r "nuget: MarketingCloudSDK.Net.AppGroupSDK.iOS, 11.0.2.1-beta.2.3"
#:package MarketingCloudSDK.Net.AppGroupSDK.iOS@11.0.2.1-beta.2.3
#addin nuget:?package=MarketingCloudSDK.Net.AppGroupSDK.iOS&version=11.0.2.1-beta.2.3&prerelease
#tool nuget:?package=MarketingCloudSDK.Net.AppGroupSDK.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
- No dependencies.
-
net8.0-ios18.0
- No dependencies.
-
net9.0-ios18.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on MarketingCloudSDK.Net.AppGroupSDK.iOS:
| Package | Downloads |
|---|---|
|
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. Successor to the sfmc-net-bindings-mobile packages. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 11.0.2.3 | 120 | 7/30/2026 |
| 11.0.2.3-beta.7.11 | 49 | 7/30/2026 |
| 11.0.2.2 | 135 | 7/30/2026 |
| 11.0.2.2-beta.6.10 | 51 | 7/30/2026 |
| 11.0.2.2-beta.5.7 | 63 | 7/30/2026 |
| 11.0.2.2-beta.4.6 | 62 | 7/30/2026 |
| 11.0.2.1-beta.2.3 | 54 | 7/30/2026 |
## 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).