.NET 8 MAUI iOS项目window属性不匹配编译错误求助
.NET 8 MAUI iOS真机构建错误:window属性属性不匹配解决方法
问题概述
在连接Mac上的iOS真机构建调试.NET 8 MAUI iOS应用时,出现clang编译失败,核心问题是自动生成的Objective-C头文件registrar.h中,window属性被错误定义为assign修饰符,与UIApplicationDelegate要求的retain/strong不匹配,触发以下警告并导致编译错误:
warning: 'retain (or strong)' attribute on property 'window' does not match the property inherited from 'UIApplicationDelegate' [-Wproperty-attribute-mismatch]
已尝试的无效方案:
- 在AppDelegate中添加带
[Export("window")]标记的重写Window属性 - 项目csproj中设置
<MtouchLink>SdkOnly</MtouchLink> - 删除obj、bin目录后重新构建
解决方案
1. 用[StronglyTyped]特性修正属性生成
在AppDelegate的Window属性上添加[StronglyTyped]特性,强制生成Objective-C属性时使用strong修饰符:
using Foundation; using UIKit; namespace TIMS; [Register("AppDelegate")] public class AppDelegate : MauiUIApplicationDelegate { [Export("window")] [StronglyTyped] public override UIWindow? Window { get; set; } protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); }
修改完成后,清理项目(删除obj、bin)并重新构建,此时生成的registrar.h中window属性会变为@property (nonatomic, strong) UIWindow * window;,与UIApplicationDelegate的定义匹配。
2. 禁用特定警告临时规避
若方法1无效,可在项目csproj文件中添加以下配置,禁用导致错误的属性不匹配警告:
<PropertyGroup> <MtouchExtraArgs>-Wno-property-attribute-mismatch</MtouchExtraArgs> </PropertyGroup>
此方法属于临时解决方案,仅用于快速通过构建,建议优先使用方法1从根源修复问题。
3. 更新.NET MAUI SDK到最新补丁版本
该问题可能是.NET 8 MAUI iOS SDK的已知缺陷,尝试更新到最新的.NET 8 MAUI iOS SDK补丁版本(如18.0.x的后续更新包),官方可能已修复自动生成属性修饰符的问题。
内容的提问来源于stack exchange,提问作者Cole Perry
相关产品推荐
相关产品推荐

