Windows 上的 PlistBuddy
Posted
技术标签:
【中文标题】Windows 上的 PlistBuddy【英文标题】:PlistBuddy on Windows 【发布时间】:2016-11-15 09:26:48 【问题描述】:我正在将我们的 Xamarin 构建基础架构迁移到基于 Windows 的过程中,我遇到了一个问题,即我们的构建脚本当前使用 PlistBuddy 来读取和写入应用程序的 Info.plist 文件。
显然 PlistBuddy 无法在 Windows 上运行。
有没有人见过任何其他在 Windows 上与 Plist 文件交互的解决方案?我见过一些使用 GUI,但我们需要它来拥有 CLI。
【问题讨论】:
为什么在 Windows 上需要 PlistBuddy?你的 CI 需要一个安装了 ios-SDK 的 macOS 来创建和签署 ipa。 可以,但这都是通过 Visual Studio 和 MSBuild 处理的,这并不意味着构建脚本可以在 OS X 机器上运行。 【参考方案1】:您可以强制构建代理在 Mac 上运行任意命令,方法是绑定到跨 SSH 连接运行的任何通用 Task/Target
(您可以在 Xamarin.iOS .targets
文件中查看更好的想法)。目前可以通过另一种方法使用<Exec>
任务和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
EX 使用 Plist 进行测试:
https://github.com/xamarin/xamarin-macios/tree/fc55e4306f79491fd269ca2495c6a859799cb1c6/msbuild/tests/Xamarin.iOS.Tasks.Tests/TaskTests/GeneratePlistTaskTests
此时这更像是一个 MSBuild 自定义,但使用这些项目绝对可以完成您想要做的事情。
【讨论】:
以上是关于Windows 上的 PlistBuddy的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Windows 10 上的容器连接到 docker 主机(Docker for Windows)
Windows 上的 WaitOnAddress() 在 Linux 上的完全等价物是啥?