Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
davidortinau avatar

Xamarin Ios Migration

  • 21 installs
  • 163 repo stars
  • Updated July 6, 2026
  • davidortinau/maui-skills

Guides migrating Xamarin.iOS, Xamarin.Mac, and Xamarin.tvOS native apps to .NET for iOS/macOS/tvOS, covering SDK-style project conversion and code signing.

About

Walks through converting Xamarin.iOS/Mac/tvOS projects to modern .NET, updating MSBuild properties, Info.plist, NuGet dependencies, binding libraries, and code-signing settings. A developer uses it when upgrading a legacy Xamarin Apple app to .NET SDK-style projects.

  • Covers MtouchArch to RuntimeIdentifier and CodeSigningKey to CodesignKey renames
  • Flags that Xamarin iOS/Mac NuGet packages have no backward compatibility

Xamarin Ios Migration by the numbers

  • 21 all-time installs (skills.sh)
  • Ranked #105 of 153 .NET & C# skills by installs in the Skillselion catalog
  • Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/davidortinau/maui-skills --skill xamarin-ios-migration

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs21
repo stars163
Last updatedJuly 6, 2026
Repositorydavidortinau/maui-skills

What it does

Guides migrating Xamarin.iOS, Xamarin.Mac, and Xamarin.tvOS native apps to .NET for iOS/macOS/tvOS, covering SDK-style project conversion and code signing.

Files

SKILL.mdMarkdownGitHub ↗

Xamarin.iOS / Xamarin.Mac / Xamarin.tvOS → .NET Migration

For SDK-style project templates, MSBuild property tables, RuntimeIdentifier conversion tables, and namespace mappings, see references/ios-migration-api.md.

Migration Workflow

1. Create new .NET for iOS/macOS/tvOS project (same name, copy code into it) 2. Update MSBuild properties (see references/ios-migration-api.md) 3. Move MinimumOSVersion from Info.plist → SupportedOSPlatformVersion in csproj 4. Copy code, resources, storyboards, entitlements 5. Update NuGet dependencies 6. Migrate binding libraries (if applicable) 7. Replace Xamarin.Essentials with <UseMauiEssentials>true</UseMauiEssentials> 8. Remove .dll.config files (not supported in .NET) 9. Delete bin//obj/, build, verify code signing, test on device

Strategy: Create a new project and copy code into it — don't edit the existing project file.

Critical Gotchas

⚠️ No Backward Compatibility for iOS/Mac NuGet Packages

Unlike Android, there is no backward compatibility with old Xamarin iOS/Mac TFMs. Packages targeting monotouch, xamarinios, xamarinios10, monomac, or xamarinmac will not work — they must be recompiled for net8.0-ios etc.

⚠️ CodeSigningKeyCodesignKey Rename

<!-- ❌ Old property name — silently ignored -->
<CodeSigningKey>Apple Distribution: My Company</CodeSigningKey>

<!-- ✅ Renamed property -->
<CodesignKey>Apple Distribution: My Company</CodesignKey>

Also rename MtouchEnableSGenConcEnableSGenConc.

⚠️ No .dll.config or .exe.config Support

.dll.config and <dllmap> are not supported in .NET Core. Migrate configuration to appsettings.json, embedded resources, or platform preferences.

⚠️ watchOS Is Not Supported

Xamarin.watchOS has no .NET equivalent. Bundle Swift extensions with .NET for iOS apps instead.

⚠️ OpenGL (iOS) Is Not Supported

OpenTK is unavailable in .NET for iOS. Migrate to Metal or SceneKit.

⚠️ Linker Behavior Is Stricter

Update LinkDescription XML files if custom linker configuration was used. The linker in .NET is stricter and may trim symbols that the Xamarin linker preserved.

Platform-Specific Pitfalls

PitfallImpactMitigation
iOS/Mac NuGet packages not backward-compatibleBuild failures for packages targeting xamariniosRecompile or find .NET-compatible alternatives
CodeSigningKey silently ignoredApp fails to sign but no clear errorRename to CodesignKey
MtouchArch not convertedWrong architecture targetedConvert to RuntimeIdentifier(s) — see reference tables
MinimumOSVersion left in Info.plistIgnored — uses csproj valueMove to SupportedOSPlatformVersion
Entitlements path wrongBuild succeeds but runtime failuresVerify CodesignEntitlements points to correct file
.dll.config files presentSilently ignored at runtimeRemove and migrate to alternatives

Binding Library Migration Tips

  • Use SDK-style project format with net8.0-ios TFM
  • The binding generator and API definitions work the same way
  • Verify native frameworks are updated for the target iOS version
  • Test thoroughly — binding edge cases are common in .NET migrations

NuGet Compatibility Decision

SituationAction
You own the packageRecompile with .NET TFMs
Package has preview .NET versionUse preview
No compatible versionReplace with .NET-compatible alternative
.NET Standard library (no platform deps)✅ Still works

Build Troubleshooting

IssueFix
Namespace not foundMost UIKit namespaces are unchanged — verify against .NET for iOS API surface
Linker errorsUpdate LinkDescription XML files — linker is stricter in .NET
Code signing failureVerify CodesignKey, CodesignProvision, CodesignEntitlements
Entitlements mismatchEnsure entitlements file matches provisioning profile

API Currency Warning

If your migrated app will also adopt .NET MAUI controls (e.g., via UseMaui), check the maui-current-apis skill for deprecated MAUI APIs to avoid (ListView, Frame, Device.*, etc.).

Quick Checklist

1. ☐ Created new .NET for iOS/macOS/tvOS project 2. ☐ Set TargetFramework to net8.0-ios (or -macos/-tvos) 3. ☐ Moved MinimumOSVersionSupportedOSPlatformVersion in csproj 4. ☐ Converted MtouchArchRuntimeIdentifier(s) 5. ☐ Converted HttpClientHandlerUseNativeHttpHandler 6. ☐ Renamed CodeSigningKeyCodesignKey 7. ☐ Renamed MtouchEnableSGenConcEnableSGenConc 8. ☐ Copied source, resources, storyboards, entitlements 9. ☐ Updated NuGet dependencies (no backward compat with Xamarin TFMs!) 10. ☐ Added UseMauiEssentials + Platform.Init() if using Essentials 11. ☐ Removed .dll.config files 12. ☐ Deleted bin/ and obj/ folders 13. ☐ Verified code signing and provisioning 14. ☐ Tested on physical device

Related skills

.NET & C#backendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.