Ошибки с публикацией в dotnet
Я использовал эти ресурсы, чтобы узнать, как опубликовать приложение MAUI:
https://docs.microsoft.com/en-us/dotnet/maui/ios/deployment/обзор
https://github.com/dotnet/maui/issues/4397
https://github.com/dotnet/sdk/issues/21877
Исходя из этого, я пробовал разные варианты публикации, но ни один из них не работает:
dotnet publish -f:net6.0-ios -c:Release /p:RuntimeIdentifier=ios-arm64
ошибка: RuntimeIdentifier «ios-arm64» недействителен.
dotnet publish -f:net6.0-ios -c:Release /p:RuntimeIdentifier=ios-arm64 --no-restore
ошибка NETSDK1032: платформа RuntimeIdentifier «ios-arm64» и PlatformTarget «x64» должны быть совместимы.
dotnet build -f:net6.0-ios -c:Release /p:RuntimeIdentifier=ios-arm64 /p:BuildIpa=true
ошибка: RuntimeIdentifier «ios-arm64» недействителен.
dotnet build -f:net6.0-ios -c:Release /p:RuntimeIdentifier=ios-arm64 /p:BuildIpa=true --no-restore
ошибка NETSDK1032: платформа RuntimeIdentifier «ios-arm64» и PlatformTarget «x64» должны быть совместимы.
Среда обновления
: Windows 10 Домашняя — 21H2
VS 2022, версия 17.3.0, предварительная версия 1.1
Обновление 2.
На основе ответов, которые у меня есть сейчас, этот файл csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net6.0-ios</TargetFrameworks>
<OutputType>Exe</OutputType>
<RootNamespace>MonkeyFinder</RootNamespace>
<UseMaui>true</UseMaui>
<SingleProject>true</SingleProject>
<ImplicitUsings>enable</ImplicitUsings>
<!-- Display name -->
<ApplicationTitle>MonkeyFinder</ApplicationTitle>
<!-- App Identifier -->
<ApplicationId>com.testapp.monkeyfinder</ApplicationId>
<ApplicationIdGuid>E46570A0-D087-4FC2-ADFE-58FEAB0BEBB9</ApplicationIdGuid>
<!-- Versions -->
<ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
<ApplicationVersion>1</ApplicationVersion>
<!-- Required for C# Hot Reload -->
<UseInterpreter Condition="'$(Configuration)' == 'Debug'">True</UseInterpreter>
</PropertyGroup>
<PropertyGroup Condition="$(TargetFramework.Contains('-ios')) and '$(Configuration)' == 'Release'">
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
<CodesignKey>xxx</CodesignKey>
<CodesignProvision>Development Test Provisioning</CodesignProvision>
<ArchiveOnBuild>true</ArchiveOnBuild>
<TcpPort>58181</TcpPort>
<ServerAddress>xxx</ServerAddress>
<ServerUser>xxx</ServerUser>
<ServerPassword>xxx</ServerPassword>
<_DotNetRootRemoteDirectory>/Users/xxx/Library/Caches/Xamarin/XMA/SDKs/dotnet/</_DotNetRootRemoteDirectory>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net6.0-android|AnyCPU'">
<MtouchDebug>True</MtouchDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net6.0-android|AnyCPU'">
<MtouchDebug>True</MtouchDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net6.0-ios|AnyCPU'">
<MtouchDebug>True</MtouchDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net6.0-ios|AnyCPU'">
<MtouchDebug>True</MtouchDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net6.0-maccatalyst|AnyCPU'">
<MtouchDebug>True</MtouchDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net6.0-maccatalyst|AnyCPU'">
<MtouchDebug>True</MtouchDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net6.0-windows10.0.19041|AnyCPU'">
<MtouchDebug>True</MtouchDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net6.0-windows10.0.19041|AnyCPU'">
<MtouchDebug>True</MtouchDebug>
</PropertyGroup>
<ItemGroup>
<!-- App Icon -->
<MauiIcon Include="Resources\appicon.svg" ForegroundFile="Resources\appiconfg.svg" Color="#512BD4" />
<!-- Splash Screen -->
<MauiSplashScreen Include="Resources\appiconfg.svg" Color="#512BD4" />
<!-- Images -->
<MauiImage Include="Resources\Images\*" />
<!-- Custom Fonts -->
<MauiFont Include="Resources\Fonts\*" />
<!-- Raw Assets (also remove the "Resources\Raw" prefix) -->
<MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>
А затем я опробовал эти команды на основе более собранной информации с тех пор со следующими результатами:
Чтобы опубликовать этот проект, необходимо указать идентификатор среды выполнения для архитектуры устройства.iossimulator-x64 — это архитектура симулятора.
dotnet build -c:Release /p:BuildIpa=true
Успешно, но нет файла *.ipa в bin/Release/net6.0-ios/ios-arm64/publish
Я также удалил другие теги PropertyGroup, но это ничего не изменило. Ожидайте при удалении первого, тогда ошибка:
ошибка NETSDK1013: значение TargetFramework не распознано. Это может быть написано с ошибкой. Если нет, то свойства TargetFrameworkIdentifier и/или TargetFrameworkVersion должны быть указаны явно.
А также проект больше не загружается должным образом.
Обновление 3:
когда я создаю новый проект .NET MAUI из шаблона, он начинает компилироваться с помощью команды
dotnet publish -f:net6.0-ios -c:Release
Но даже когда я копирую xml в файл csproj из рабочего проекта в нерабочий, я получаю сообщение об ошибке:
Чтобы опубликовать этот проект, необходимо указать идентификатор среды выполнения для архитектуры устройства. «iossimulator-x64» — это симулятор
Я предполагаю, что это указывает на то, что причина ошибки на самом деле не в файле csproj, а где-то еще?
3 ответа
Мое решение - запустить его на Mac. Не запускайте его на своем компьютере с Windows.
На данный момент вы можете установить Visual Studio 2022 Preview для Mac и открыть терминал вашего проекта. Затем запустите команду с помощью sudo.
Пример:
sudo dotnet publish -f:net6.0-ios -c:Release
Примечание. Я установил все свои свойства в PropertyGroup в проекте Maui.
Работал как чемпион!
Вот YAML, который работал для нашего конвейера сборки. Мне потребовалось много времени, чтобы заставить его работать, надеюсь, это поможет кому-то сэкономить время.
- task: DotNetCoreCLI@2
displayName: Build app and publish ipa file
inputs:
command: publish
publishWebProjects: false
projects: '**/*ProjectName.csproj'
custom: 'publish '
arguments: '--no-restore -r ios-arm64 -c Release -p:ArchiveOnBuild=true -p:ApplicationId=$(AppStore.CFBundleIdentifier) -p:CodesignKey=$(APPLE_CERTIFICATE_SIGNING_IDENTITY) -p:CodesignProvision=$(APPLE_PROV_PROFILE_UUID) '
zipAfterPublish: false
modifyOutputPath: false
Эта документация поможет вам опубликовать файл ipa для выпуска. Возможно, вам не хватает следующих параметров: -rio ios-arm64 -p:ArchiveOnBuild=true.
ИСПРАВЛЕНИЕ 1
Попробуйте включить RuntimeIdentifier через условную группу свойств в , а не в командной строке.
Из Добавить подпись кода....
.csproj:
<PropertyGroup Condition="$(TargetFramework.Contains('-ios')) and '$(Configuration)' == 'Release'">
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
<CodesignKey>iPhone Distribution: John Smith (AY2GDE9QM7)</CodesignKey>
<CodesignProvision>MyMauiApp</CodesignProvision>
<ArchiveOnBuild>true</ArchiveOnBuild>
</PropertyGroup>
Командная строка:
dotnet publish -f:net6.0-ios -c:Release
ИСПРАВЛЕНИЕ 2
На данный момент при публикации для ios удалите другие целевые платформы из
.csproj
. ПРИМЕЧАНИЕ. В этом нет необходимости, поскольку вы указываете структуру через
-f
, но попробовать стоит.
Изменять:
<TargetFrameworks>net6.0-android;net6.0-ios;net6.0-maccatalyst</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net6.0-windows10.0.19041.0</TargetFrameworks>
К:
<TargetFrameworks>net6.0-ios</TargetFrameworks>