2016-11-15 1 views
0

Я в процессе перемещения нашей инфраструктуры построения Xamarin на Windows, и я столкнулся с проблемой в том, что наши скрипты сборки в настоящее время используют PlistBuddy для чтения и записи в файл Info.plist приложение.PlistBuddy на Windows

Очевидно, что PlistBuddy не будет работать в Windows.

Кто-нибудь видел какое-либо другое решение для взаимодействия с файлами Plist в Windows? Я видел несколько, которые используют графический интерфейс, но нам нужно, чтобы он имел CLI.

+0

Зачем вам PlistBuddy в Windows? Вашему CI нужен MacOS с установленным iOS-SDK для создания и подписания ipa в любом случае. –

+0

Он делает это, но все это обрабатывается через Visual Studio и MSBuild, это не значит, что скрипты сборки выполняются в ящике OS X. – user3617723

ответ

0

Вы можете заставить Build Agent выполнять произвольные команды на Mac через привязку к любому родовому Task/Target (вы можете посмотреть в файлах Xamarin.iOS .targets для лучшей идеи здесь), которая проходит через соединение SSH. В настоящее время это доступно другим способом, используя задачу <Exec> с SessionId вашего $(BuildSessionId). Вот пример того, как можно это сделать:

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

Если SessionId равно нулю/пусто, то это означает, что мы не подключены к Mac. Если это не null/empty, мы подключаемся к Mac.

Затем мы можем заставить это условие всегда выполняется на Mac с помощью:

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

Пожалуйста, обратите внимание, что следующие встроенные задачи подвергаются для удаленного выполнения:

  • Copy
  • Удалить
  • Exec
  • MakeDir
  • Move
  • RemoveDir
  • касания

Источник: https://github.com/xamarin/xamarin-macios/blob/fc55e4306f79491fd269ca2495c6a859799cb1c6/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets#L74-L80

Вы можете вызвать PlistBuddy Command с помощью этого метода.

EX:

<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 в этой точке, но это, безусловно, можно делать то, что вы пытаетесь сделать, используя эти пункты.

Смежные вопросы