如何以Xamarin.iOS传统方式,用Storyboard启动iOS MAUI应用?
核心实现逻辑
MAUI默认以跨平台XAML页面作为启动入口,要复用Xamarin.iOS的Storyboard原生启动逻辑,需直接修改iOS平台的原生入口代码,绕开MAUI默认的跨平台启动流程。
具体操作步骤
添加并配置Storyboard文件
将原Xamarin.iOS项目中的Storyboard文件(如Main.storyboard)复制到MAUI项目的Platforms/iOS目录下,设置文件的Build Action为BundleResource,同时确保Storyboard内已勾选初始ViewController的Is Initial View Controller选项。修改iOS项目的Info.plist
在Info.plist中添加或修改UIMainStoryboardFile键,将值设为你的Storyboard文件名(无需.storyboard后缀);移除或注释掉MAUI默认的UIApplicationDelegateClassName配置,避免启动逻辑冲突。替换iOS平台启动代码
打开Platforms/iOS/AppDelegate.cs,重写FinishedLaunching方法,完全使用原生逻辑启动:using UIKit; namespace YourAppNamespace.iOS; [Register("AppDelegate")] public class AppDelegate : UIApplicationDelegate { public override UIWindow? Window { get; set; } public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions) { // 初始化应用窗口 Window = new UIWindow(UIScreen.MainScreen.Bounds); // 从Storyboard加载初始视图控制器 var storyboard = UIStoryboard.FromName("Main", null); var initialVC = storyboard.InstantiateInitialViewController(); Window.RootViewController = initialVC; // 显示窗口 Window.MakeKeyAndVisible(); return true; } }删除或注释掉原文件中与
MauiProgram、CreateMauiApp相关的代码,彻底脱离MAUI默认启动流程。可选:兼容MAUI跨平台功能
若后续需要在原生页面中调用MAUI的跨平台API,可在FinishedLaunching方法中初始化MAUI环境(需放在设置RootViewController之前):MauiProgram.CreateMauiApp().Build().Run(null);
Xamarin.iOS原生项目迁移注意点
- 原项目中的ViewController、View等原生代码可直接复制到MAUI的
Platforms/iOS目录下,保持原有命名空间和结构即可运行。 - 原生依赖库(如CocoaPods)的配置方式与Xamarin.iOS项目一致,直接在MAUI的iOS项目中同步配置即可。
内容的提问来源于stack exchange,提问作者Agat

