Ошибки с публикацией в 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>
Другие вопросы по тегам