1

我正在将我们的 Xamarin 构建基础架构移动到基于 Windows 的过程中,我遇到了一个问题,即我们的构建脚本当前使用 PlistBuddy 来读取和写入应用程序的 Info.plist 文件。

显然 PlistBuddy 不会在 Windows 上运行。

有没有人见过在 Windows 上与 Plist 文件交互的任何其他解决方案?我见过一些使用 GUI,但我们需要它来拥有 CLI。

4

1 回答 1

0

您可以通过绑定到跨 SSH 连接运行的任何通用Task/Target(您可以在 Xamarin.iOS文件中查看更好的想法)来强制构建代理在 Mac 上运行任意命令。.targets目前,这可以通过将<Exec>Task 与SessionId您的$(BuildSessionId). 以下是您可以如何执行此操作的示例:

<Exec Command="..." SessionId="$(BuildSessionId)" />

如果SessionId为空/空,则意味着我们没有连接到 Mac。如果它不是 null/empty,那么我们连接到 Mac。

然后,我们可以通过以下方式强制此条件始终在 Mac 上运行:

<Exec Command="..." SessionId="$(BuildSessionId)" Condition=" '$(BuildSessionId)' != '' " />

请注意,以下内置任务已公开用于远程执行:

  • 复制
  • 删除
  • 执行
  • 制作目录
  • 移动
  • 删除目录
  • 触碰

来源:https ://github.com/xamarin/xamarin-macios/blob/fc55e4306f79491fd269ca2495c6a859799cb1c6/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets#L74-L80

然后,您可以PlistBuddy通过此方法调用命令。

前任:

  <Target Name="_SayGoodbye">
    <Exec Command="plistbuddy ..." SessionId="$(BuildSessionId)" Condition=" '$(BuildSessionId)' != '' "/>
  </Target>

如果您想采用MSBuild自定义任务方式,您可以在此处查看以前构建的任务的示例:

https://github.com/xamarin/xamarin-macios/tree/fc55e4306f79491fd269ca2495c6a859799cb1c6/msbuild/Xamarin.iOS.Tasks.Core/Tasks

EX Plist 使用中:

https://github.com/xamarin/xamarin-macios/blob/fc55e4306f79491fd269ca2495c6a859799cb1c6/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs#L608

使用 Plist 进行EX测试:

https://github.com/xamarin/xamarin-macios/tree/fc55e4306f79491fd269ca2495c6a859799cb1c6/msbuild/tests/Xamarin.iOS.Tasks.Tests/TaskTests/GeneratePlistTaskTests

在这一点上,这更像是一个 MSBuild 自定义,但使用这些项目绝对可以做你想做的事情。

于 2016-11-15T18:36:36.507 回答