如何将普通的Xamarin.iOS解决方案(没有Xamarin Forms)更新为.net 6(没有MAUI)以在iOS



我有一个Xamarin.iOS解决方案,其中包括一个库项目和一个可执行文件。该解决方案不使用Xamarin形式,即它是所谓的";Xamarin Native";解决方案

我想将其升级为.net 6解决方案。不幸的是,我看到的所有示例和文档都只解释了如何将Xamarin Forms解决方案升级为使用MAUI的.net 6解决方案(这是Xamarin Form的演变)

因此:

  1. 如何将我的解决方案更新为.net 6";"本地";iOS解决方案
  2. 由于.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上运行。一旦你看到它起作用,你就可以积极删除内容。

  • 修改iOSMac文件夹中的启动代码。启动一个";"本地";根视图控制器,而不是maui应用程序生成器。就像你今天在Xamarin.iOS做的一样

您可以推迟删除Maui UI代码和引用,直到Maui最终发布。那时,multi-platform net6应该更容易获得,而不依赖于Maui框架。

一句话:感觉multi-platform net6没有被强调(短期),除了作为毛伊岛的一部分。尽管net6 on iOS(和其他平台)确实在代码库中独立存在。所以"随波逐流;直到一切都变得坚实。

我设法升级到.net7:

  1. 将库(取决于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>
  1. 升级您的应用程序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、故事板文件的构建操作更改为"界面定义"。

  1. 从info.plist中删除min-os键值(因为它现在在csproj中)

3.1更改信息.plist UIRequiredDeviceCapabilities从armv7到arm64

3.2从maccatalyst信息.plist 中删除LSRequiresIhoneOS

  1. 创建文件夹Platforms/iOS和Platforms/MacCatalyst。将info.plist移动并复制到这些文件夹中。(否则,您将无法使用通常的(应用程序)视图编辑信息plist)。

  2. 尽管它说我们使用茂宜岛,但实际上我们并没有使用茂宜,但它允许我们使用、编译多目标应用程序。如果删除它,您将无法选择要部署的Catalyst目标。您可以使用另一种方法,即复制应用程序csproj,并在第二个csproj中只为Catalyst保留目标,它也可以工作。

  3. 将特定于平台的代码放在上面的文件夹中,它们可能具有相同的类名和签名,并且将仅针对特定平台进行编译。

相关内容

  • 没有找到相关文章

最新更新