正如 cmets 中所指出的,我一直在玩这个,我总是完成所有的事情并创建一些内容,但还没有完全完成。
首先;这在当时或从 UI 编写时是不可能的。当然,这将在 .NET MAUI 发布之前,但目前您需要命令行,特别是 dotnet publish。
您已经发现此命令通常用于创建 nupkg,但为了统一所有内容,现在也将使用此命令发布您的 .NET MAUI 应用程序。
问题是我们现在有一个可以用于各种目标的单一项目:iOS、Android、Windows、macOS,那么我们如何知道dotnet publish 应该发布什么?
您需要指定目标框架。对于将我们带到这里的 Android:
dotnet publish -f:net6.0-android -c:Release
这应该会生成一个您可以使用的 APK。我还不确定的一件事是如何将您的密钥库文件添加到组合中并实际对其进行正确签名以在 Play 商店中使用。
为了使事情更完整,对于 iOS,命令和过程有点复杂。来自 Windows 的命令看起来更像这样:
dotnet publish -f:net6.0-ios -c:Release /p:ServerAddress=192.168.1.77 /p:ServerUser=jfversluis /p:TcpPort=58181 /p:ArchiveOnBuild=true /p:_DotNetRootRemoteDirectory=/Users/{your username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/
只有在从 Windows 构建时才需要几个参数:/p:ServerAddress={Mac build host IP address} /p:ServerUser={Mac username} /p:TcpPort=58181 如果您从未连接到此构建主机,您还应该添加 /p:ServerPassword={your password}。但是,您可以进入 Visual Studio,从那里连接到构建主机一次,您就会知道连接有效并且省略了密码参数。有关 Mac 构建主机功能的更多信息是 here。
但我们还没有到那里!在csproj 文件中,我们需要添加一点以添加RuntimeIdentifier 和一些东西以使IPA 文件的签名工作。
<PropertyGroup Condition="$(TargetFramework.Contains('-ios')) and '$(Configuration)' == 'Release'">
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
<CodesignEntitlement>Entitlements.plist</CodesignEntitlement>
<CodesignKey>Apple Development: Gerald Versluis (BLABLAID)</CodesignKey>
<CodesignProvision>VS: WildCard Development</CodesignProvision>
</PropertyGroup>
Entitlements.plist 文件还不是默认模板的一部分,因此只需从 Xamarin.Forms 项目中获取一个,它可以是默认模板,当然,如果您确实需要它,也可以配置它,但它无论哪种方式,您似乎都需要它。
您需要从 Apple 证书中获取的代码签名值。这也是我还不完全清楚的部分。有关代码签名和配置的更多信息是here,这可能有助于您走得更远。
对于 iOS 命令,还可以查看背景故事here。如此链接所示,您可能还需要从 Platforms/iOS/Resources 文件夹中删除 LaunchScreen.xib 文件,并可能在发布命令中包含 /p:EnableAssemblyILStripping=false 标志以解决一些错误。它们都已修复但尚未发布。
免责声明:我尚未向商店发布任何内容,因此此处可能存在空白,请随时添加一些 cmet 与您的发现。