Install
$ agentstack add skill-davidortinau-maui-skills-xamarin-ios-migration ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
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
- Create new .NET for iOS/macOS/tvOS project (same name, copy code into it)
- Update MSBuild properties (see
references/ios-migration-api.md) - Move
MinimumOSVersionfrom Info.plist →SupportedOSPlatformVersionin csproj - Copy code, resources, storyboards, entitlements
- Update NuGet dependencies
- Migrate binding libraries (if applicable)
- Replace Xamarin.Essentials with
true - Remove
.dll.configfiles (not supported in .NET) - 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.
⚠️ CodeSigningKey → CodesignKey Rename
Apple Distribution: My Company
Apple Distribution: My Company
Also rename MtouchEnableSGenConc → EnableSGenConc.
⚠️ No .dll.config or .exe.config Support
.dll.config and ` 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
| Pitfall | Impact | Mitigation | |---------|--------|------------| | iOS/Mac NuGet packages not backward-compatible | Build failures for packages targeting xamarinios | Recompile or find .NET-compatible alternatives | | CodeSigningKey silently ignored | App fails to sign but no clear error | Rename to CodesignKey | | MtouchArch not converted | Wrong architecture targeted | Convert to RuntimeIdentifier(s) — see reference tables | | MinimumOSVersion left in Info.plist | Ignored — uses csproj value | Move to SupportedOSPlatformVersion | | Entitlements path wrong | Build succeeds but runtime failures | Verify CodesignEntitlements points to correct file | | .dll.config files present | Silently ignored at runtime | Remove and migrate to alternatives |
Binding Library Migration Tips
- Use SDK-style project format with
net8.0-iosTFM - 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
| Situation | Action | |-----------|--------| | You own the package | Recompile with .NET TFMs | | Package has preview .NET version | Use preview | | No compatible version | Replace with .NET-compatible alternative | | .NET Standard library (no platform deps) | ✅ Still works |
Build Troubleshooting
| Issue | Fix | |-------|-----| | Namespace not found | Most UIKit namespaces are unchanged — verify against .NET for iOS API surface | | Linker errors | Update LinkDescription XML files — linker is stricter in .NET | | Code signing failure | Verify CodesignKey, CodesignProvision, CodesignEntitlements | | Entitlements mismatch | Ensure 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
- ☐ Created new .NET for iOS/macOS/tvOS project
- ☐ Set
TargetFrameworktonet8.0-ios(or-macos/-tvos) - ☐ Moved
MinimumOSVersion→SupportedOSPlatformVersionin csproj - ☐ Converted
MtouchArch→RuntimeIdentifier(s) - ☐ Converted
HttpClientHandler→UseNativeHttpHandler - ☐ Renamed
CodeSigningKey→CodesignKey - ☐ Renamed
MtouchEnableSGenConc→EnableSGenConc - ☐ Copied source, resources, storyboards, entitlements
- ☐ Updated NuGet dependencies (no backward compat with Xamarin TFMs!)
- ☐ Added
UseMauiEssentials+Platform.Init()if using Essentials - ☐ Removed
.dll.configfiles - ☐ Deleted
bin/andobj/folders - ☐ Verified code signing and provisioning
- ☐ Tested on physical device
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: davidortinau
- Source: davidortinau/maui-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.