我有一个Xamarin.iOS解决方案,其中包括一个库项目和一个可执行文件。该解决方案不使用Xamarin形式,即它是所谓的";Xamarin Native";解决方案
我想将其升级为.net 6解决方案。不幸的是,我看到的所有示例和文档都只解释了如何将Xamarin Forms解决方案升级为使用MAUI的.net 6解决方案(这是Xamarin Form的演变)
因此:
- 如何将我的解决方案更新为.net 6";"本地";iOS解决方案
- 由于.net 6也支持Mac Catalyst,我如何配置我的解决方案,使其在iOS之外也能在Mac Catalyst上运行
方法#1:
iOS Application (Preview)
查看可用类型的VS projects
,您可以执行以下操作:VS 2022预览/新项目/语言=c#,平台=ios。滚动到列表底部附近,选择iOS Application (Preview)
。然后在解决方案资源管理器中,右键单击项目/属性。结果的目标是";。NET 6.0";以及";iOS"-你想要的。
从.csproj
来看,它具有预期的<TargetFramework>net6.0-ios</TargetFramework>
您可以手动添加;net6.0-maccatalyst
。
但是:
- 文件夹没有设置为多目标
- 这可能是因为存在其他与多目标相关的代码行和xml设置缺失的症状
- [可选]即使您没有使用Maui作为UI,但使用
Maui.Essentials
可能会很有用。我认为需要在应用程序启动过程中添加一些内容来初始化它
我现在不推荐方法#1,尤其是因为你也希望以Mac为目标;你必须知道你在做什么,以便以一种简化开发过程的方式组织一切。
除非有人能指出在没有毛伊岛的情况下运行multi-platform net6
的详细说明。
方法#2:Maui Application (Preview)
。然后删除所有你不需要的东西,因为你没有使用毛伊岛用户界面。
就我个人而言,我现在会这样做,让代码在iOS和Mac上运行。一旦你看到它起作用,你就可以积极删除内容。
- 修改
iOS
和Mac
文件夹中的启动代码。启动一个";"本地";根视图控制器,而不是maui应用程序生成器。就像你今天在Xamarin.iOS
做的一样
您可以推迟删除Maui UI代码和引用,直到Maui最终发布。那时,multi-platform net6
应该更容易获得,而不依赖于Maui框架。
一句话:感觉multi-platform net6
没有被强调(短期),除了作为毛伊岛的一部分。尽管net6 on iOS
(和其他平台)确实在代码库中独立存在。所以"随波逐流;直到一切都变得坚实。
我设法升级到.net7:
- 将库(取决于iOS)csproj升级为新格式:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrameworks>net7.0-ios;net7.0-maccatalyst</TargetFrameworks> <OutputType>Library</OutputType> <AssemblyName>MYASSEMBLYNAME</AssemblyName> <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">12.0</SupportedOSPlatformVersion> <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">13.1</SupportedOSPlatformVersion> </PropertyGroup> ... </Project>
- 升级您的应用程序csproj:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrameworks>net7.0-ios;net7.0-maccatalyst</TargetFrameworks> <OutputType>Exe</OutputType> <UseMaui>true</UseMaui> <SingleProject>true</SingleProject> ... <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)'))== 'ios'">13.0</SupportedOSPlatformVersion> <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)'))== 'maccatalyst'">14.0</SupportedOSPlatformVersion> <ApplicationTitle>MYAPPTITLE</ApplicationTitle> <ApplicationId>a.b.c</ApplicationId> <ApplicationIdGuid>aaadfffffaa....</ApplicationIdGuid> <ApplicationDisplayVersion>12.0</ApplicationDisplayVersion> <ApplicationVersion>12.0.0</ApplicationVersion> </PropertyGroup> ... </Project>
2.2从csproj中删除所有.cs文件以及所有xib、情节提要文件。或者不要添加它们,它们会自己添加。
2.3使用上下文菜单将所有xib、故事板文件的构建操作更改为"界面定义"。
- 从info.plist中删除min-os键值(因为它现在在csproj中)
3.1更改信息.plist UIRequiredDeviceCapabilities从armv7到arm64
3.2从maccatalyst信息.plist 中删除LSRequiresIhoneOS
-
创建文件夹Platforms/iOS和Platforms/MacCatalyst。将info.plist移动并复制到这些文件夹中。(否则,您将无法使用通常的(应用程序)视图编辑信息plist)。
-
尽管它说我们使用茂宜岛,但实际上我们并没有使用茂宜,但它允许我们使用、编译多目标应用程序。如果删除它,您将无法选择要部署的Catalyst目标。您可以使用另一种方法,即复制应用程序csproj,并在第二个csproj中只为Catalyst保留目标,它也可以工作。
-
将特定于平台的代码放在上面的文件夹中,它们可能具有相同的类名和签名,并且将仅针对特定平台进行编译。