Сценарий посткомпиляции AppCenter - попытка собрать Xamarin.UITest перед его выполнением
Я установил CI для своего проекта iOS и droid xamarin через Центр приложений Visual Studio. Все было хорошо, пока я не попытался настроить тестовый запуск пользовательского интерфейса. Я создал скрипт пост-сборки для android и iOS, который в данный момент находится в папке вместе с файлом решения (appcenter-post-build.sh, который необходим для того, чтобы я смог построить все решение [включая проект Xamarin.UITest]).
Я был успешен с iOS, так как центр приложений позволяет мне выбрать решение для сборки, но это не было разрешено на Android (appcenter-post-build.sh, который находится в той же папке, что и droid.csproj). Итак, мой обходной путь - создать еще один пост-сценарий appcenter специально для Android. Я пытаюсь собрать Xamarin.UITest после сборки Android.
Всякий раз, когда я выполняю это в своем скрипте пост-сборки, где я пытаюсь собрать Xamarin.UITest:
/Library/Frameworks/Mono.framework/Versions/5_12_0/bin/msbuild $APPCENTER_SOURCE_DIRECTORY/MyDirectory/UITests/Project.UITests.csproj /p:Configuration=Debug
Эта ошибка возвращается в журналах сборки:
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets: error : The specified iOS provisioning profile 'SampleProvisioningProfile' could not be found
Похоже, что он пытается построить проект iOS, что и должно быть. Любые предложения по этому вопросу. Я пытался заставить это работать на прошлой неделе.
0 ответов
Вот сценарий после сборки, который я использую для этого приложения: https://github.com/brminnick/FaceOff
Для App Center Build я рекомендую создавать только конкретные .csproj
файл, потому что этот скрипт пост сборки соберет ваш проект UITest.
Скрипт пост-сборки iOS
#!/usr/bin/env bash
if [ "$APPCENTER_XAMARIN_CONFIGURATION" == "Debug" ];then
echo "Post Build Script Started"
SolutionFile=`find "$APPCENTER_SOURCE_DIRECTORY" -name [Your Solution File].sln`
SolutionFileFolder=`dirname $SolutionFile`
UITestProject=`find "$APPCENTER_SOURCE_DIRECTORY" -name [Your UITest CSProj file].csproj`
echo SolutionFile: $SolutionFile
echo SolutionFileFolder: $SolutionFileFolder
echo UITestProject: $UITestProject
chmod -R 777 $SolutionFileFolder
msbuild "$UITestProject" /property:Configuration=$APPCENTER_XAMARIN_CONFIGURATION
UITestDLL=`find "$APPCENTER_SOURCE_DIRECTORY" -name "[Your UITest Output File Name].dll" | grep bin`
echo UITestDLL: $UITestDLL
UITestBuildDir=`dirname $UITestDLL`
echo UITestBuildDir: $UITestBuildDir
UITestVersionNumber=`grep '[0-9]' $UITestProject | grep Xamarin.UITest|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,10\}\-'dev`
echo UITestPrereleaseVersionNumber: $UITestVersionNumber
UITestVersionNumberSize=${#UITestVersionNumber}
echo UITestVersionNumberSize: $UITestVersionNumberSize
if [ $UITestVersionNumberSize == 0 ]
then
UITestVersionNumber=`grep '[0-9]' $UITestProject | grep Xamarin.UITest|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'`
echo UITestVersionNumber: $UITestVersionNumber
fi
TestCloudExe=`find ~/.nuget | grep test-cloud.exe | grep $UITestVersionNumber | head -1`
echo TestCloudExe: $TestCloudExe
TestCloudExeDirectory=`dirname $TestCloudExe`
echo TestCloudExeDirectory: $TestCloudExeDirectory
DSYMFile=`find "$APPCENTER_SOURCE_DIRECTORY" -name *.dsym | head -1`
DSYMDirectory=`dirname $DSYMFile`
npm install -g appcenter-cli
appcenter login --token token
appcenter test run uitest --app "[Your App Center App Name]" --devices "[Your App Center iOS Deivce List]" --app-path $IPAFile --test-series "master" --locale "en_US" --build-dir $UITestBuildDir --dsym-dir $DSYMDirectory --uitest-tools-dir $TestCloudExeDirectory --async
fi
Скрипт пост-сборки Android
#!/usr/bin/env bash
if [ "$APPCENTER_XAMARIN_CONFIGURATION" == "Debug" ];then
echo "Post Build Script Started"
SolutionFile=`find "$APPCENTER_SOURCE_DIRECTORY" -name [Your Solution File].sln`
SolutionFileFolder=`dirname $SolutionFile`
UITestProject=`find "$APPCENTER_SOURCE_DIRECTORY" -name [Your UITest CSProj File].csproj`
echo SolutionFile: $SolutionFile
echo SolutionFileFolder: $SolutionFileFolder
echo UITestProject: $UITestProject
chmod -R 777 $SolutionFileFolder
msbuild "$UITestProject" /property:Configuration=$APPCENTER_XAMARIN_CONFIGURATION
UITestDLL=`find "$APPCENTER_SOURCE_DIRECTORY" -name "[Your UITest Output DLL].dll" | grep bin`
echo UITestDLL: $UITestDLL
UITestBuildDir=`dirname $UITestDLL`
echo UITestBuildDir: $UITestBuildDir
UITestVersionNumber=`grep '[0-9]' $UITestProject | grep Xamarin.UITest|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,10\}\-'dev`
echo UITestPrereleaseVersionNumber: $UITestVersionNumber
UITestVersionNumberSize=${#UITestVersionNumber}
echo UITestVersionNumberSize: $UITestVersionNumberSize
if [ $UITestVersionNumberSize == 0 ]
then
UITestVersionNumber=`grep '[0-9]' $UITestProject | grep Xamarin.UITest|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'`
echo UITestVersionNumber: $UITestVersionNumber
fi
TestCloudExe=`find ~/.nuget | grep test-cloud.exe | grep $UITestVersionNumber | head -1`
echo TestCloudExe: $TestCloudExe
TestCloudExeDirectory=`dirname $TestCloudExe`
echo TestCloudExeDirectory: $TestCloudExeDirectory
APKFile=`find "$APPCENTER_SOURCE_DIRECTORY" -name *.apk | head -1`
npm install -g appcenter-cli
appcenter login --token token
appcenter test run uitest --app "[Your App Center App Name]" --devices "[Your Appcenter Android Device List]" --app-path $APKFile --test-series "master" --locale "en_US" --build-dir $UITestBuildDir --uitest-tools-dir $TestCloudExeDirectory --async
fi
Я понимаю, что это происходит примерно с 18-месячным опозданием, но я только что столкнулся с той же проблемой, и я нашел способ заставить вещи хорошо работать в Центре приложений, даже если у вас есть ссылки на проекты для конкретных платформ в проекте тестирования пользовательского интерфейса.
- Это проблема только в проекте Android, где мы должны специально создать проект теста пользовательского интерфейса, чтобы запускать тесты пользовательского интерфейса в Test Cloud.
Исходное сообщение @mindOfAI, отмеченное с использованием appcenter-post-build.sh
script (дополнительная информация о сценариях сборки App Center) для создания проекта теста пользовательского интерфейса после сборки проекта Android для подготовки к запуску тестов пользовательского интерфейса для Android. Проблема в том, что если вы хотите установить свои "Тестовые приложения" в Visual Studio для Mac для проекта тестирования пользовательского интерфейса, ссылки будут добавлены в проект теста пользовательского интерфейса для конкретных проектов платформы.
Если проект теста пользовательского интерфейса ссылается на проект iOS, он попытается построить проект iOS как зависимость от проекта теста пользовательского интерфейса. Для сборки проекта iOS требуется действующий сертификат iOS и профиль подготовки, поэтому сборка завершится ошибкой.
По сути, нам нужны ссылки там, чтобы нам было легче запускать тесты пользовательского интерфейса на нашем локальном компьютере, но мы хотим, чтобы они были в Центре приложений, чтобы не тратить время на создание ненужных проектов и, что наиболее важно, чтобы нам не понадобилось сертификат iOS и профиль подготовки при создании проекта тестирования пользовательского интерфейса для Android.
Чтобы решить эту проблему, я использовал appcenter-pre-build.sh
сценарий и dotnet remove reference
команда для удаления ссылок в Центре приложений перед созданием проекта тестирования пользовательского интерфейса для Android:
Псевдокод
dotnet remove "Path/To/UITest/Project.csproj" reference "path/to/iOS_project.csproj" "path/to/Android_project.csproj"
Пример appcenter-pre-build.sh для Android
#!/usr/bin/env bash
echo "**************************************************************************************************"
echo "**** Custom Pre Build Script -- Android Edition"
echo "**************************************************************************************************"
set -e # Exit immediately if a command exits with a non-zero status (failure)
# In order to run UI tests on local dev machines without manually installing the latest version of the app on each platform device
# you are using, the UI test project must contain references to the Android and iOS projects.
# However, in MS App Center, if the iOS reference is there for the Android build, the build will fail since there is no certificate
# nor provisioning profile to satisfy its build requirements. This next step removes the references before building for App Center
# so that we can have the best of both worlds:
echo "Removing project references to Android and iOS projects"
dotnet remove "$APPCENTER_SOURCE_DIRECTORY/MyCoolApp.UITests/MyCoolApp.UITests.csproj" reference "$APPCENTER_SOURCE_DIRECTORY/MyCoolApp.iOS/MyCoolApp.iOS.csproj" "$APPCENTER_SOURCE_DIRECTORY/MyCoolApp.Android/MyCoolApp.Android.csproj"
- НОТА:
$APPCENTER_SOURCE_DIRECTORY
- это встроенная переменная среды, предоставляемая центром приложений.
Надеюсь, это поможет кому-то найти решение намного быстрее, чем я =)