Я ввел профиль предоставления кода и ключ знака кода в свой проект CS, как показано ниже.
<PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|iPhone' "><DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\iPhone\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
<ConsolePause>false</ConsolePause>
<CodesignKey>iPhone Distribution: Companyname, Inc. (USER ID)</CodesignKey>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<CodesignProvision>MyAppProvision</CodesignProvision>
<CreatePackage>false</CreatePackage> </PropertyGroup>
Но когда я запускаю конвейер Azure под задачей публикации DotNet, он показывает, что в цепочке ключей не найден действительный ключ подписи кода iOS.
Также я добавил такой аргумент в задачу публикации DotNet как -p:CodesignKey="iPhone Distribution: Companyname, Inc. (USER ID)" , но возвращает ошибку как Switch: Distribution или ошибку: Property not valid Switch: Inc. (USER) ИДЕНТИФИКАТОР)
Привет @AjitK! Есть ли у тебя возможность проверить мой ответ ниже, чтобы установить сертификат .p12
во время сборки конвейера? Надеюсь, что это поможет решить вашу проблему в этом посте. Спасибо, что уделили время и поделились.
Я попробовал, но мой ключ кодового знака имеет запятую (,) в середине, которая обнаруживает ключ кодового знака, как и перед запятой, и не включает ключ после запятой.
Проблема не справилась с задачей InstallAppleCertificate@2
? Каков будет результат, если вы запустите bash: echo "APPLE_CERTIFICATE_SIGNING_IDENTITY is $(APPLE_CERTIFICATE_SIGNING_IDENTITY)"
после установки сертификата?
Я получаю, что APPLE_CERTIFICATE_SIGNING_IDENTITY — это распространение iPhone: Companyname, Inc. (USER ID) в этой задаче Bash.
Я думаю, что, если напрямую использовать <CodesignKey>iPhone Distribution: Companyname, Inc. (USER ID)</CodesignKey>
в вашем .csproj, не передавая -p:CodesignKey = "$(APPLE_CERTIFICATE_SIGNING_IDENTITY)"
. Кстати, вы использовали агент, размещенный в Microsoft, для запуска этого конвейера? Воспроизводилась ли проблема, если вы запускали dotnet publish
на локальном Mac?
Да, только в публикации в dotnet, а также, когда я запускал в cs proj, он говорит, что действительный сертификат подписи не найден.
Таким образом, значение $(APPLE_CERTIFICATE_SIGNING_IDENTITY)
в bash было правильным. Казалось необходимым экранировать значение в dotnetCLI. Не могли бы вы попробовать использовать -p:CodesignKey = "\"$(APPLE_CERTIFICATE_SIGNING_IDENTITY)\""
, как предложено здесь.
Привет @AjitK, я обновил ответ в соответствии с моим тестом и вижу, что ,
экранируется при передаче -p:CodesignKey = "\"$(APPLE_PROV_PROFILE_UUID)\""
. Надеюсь, это сработает и для вас. Удачи в предстоящей работе!
Привет @AlvinZhao-MSFT. Я могу это исправить, перейдя по указанной ссылке, спасибо за ваш ценный ответ и усилия. Большое спасибо
Согласно последующей проблеме, аргумент CodesignKey
не был передан правильно из-за запятой ,
в удостоверении сертификата,
мы могли бы избежать значения, добавив \"
к $(APPLE_CERTIFICATE_SIGNING_IDENTITY)
. Вот пример синтаксиса задачи DotNetCoreCLI@2
.
- task: DotNetCoreCLI@2
displayName: Build iOS App
inputs:
command: 'publish'
publishWebProjects: false
projects: '**/*.sln'
arguments: >
-f net8.0-ios -c Release
-p:ApplicationDisplayVersion=${{ parameters.ApplicationDisplayVersion }} -p:ApplicationVersion=$(Build.BuildId)
-p:ArchiveOnBuild=true -p:RuntimeIdentifier=ios-arm64
-p:CodesignKey = "\"$(APPLE_PROV_PROFILE_UUID)\"" -p:CodesignProvision = "$(APPLE_PROV_PROFILE_UUID)"
zipAfterPublish: false
modifyOutputPath: false
Я мог воспроизвести ту же ошибку, когда сертификат разработчика Apple не был установлен в агенте сборки, например, в агенте, размещенном в Microsoft.
Вы можете попробовать выполнить следующие действия, чтобы экспортировать и загрузить сертификат в библиотеку конвейера, чтобы мы могли установить необходимые защищенные файлы во время сборки.
.p12
из приложения Keychain Access на Mac пользователя; запомните пароль при сохранении macOS-14
сертификата;
.p12
;.p12
для получения и установки сертификата во время сборки конвейера; вам также может потребоваться загрузить и установить профиль обеспечения с помощью задачи $(P12PWD)
;stages:
- stage: BuildiOS
dependsOn: []
jobs:
- job: BuildiOS
pool:
vmImage: macOS-14
steps:
- task: InstallAppleCertificate@2
inputs:
certSecureFile: 'appledeveloper.p12'
certPwd: '$(P12PWD)'
keychain: 'temp'
- task: InstallAppleProvisioningProfile@1
inputs:
provisioningProfileLocation: 'secureFiles'
provProfileSecureFile: 'DotNetMauiAppDemoProfile.mobileprovision'
- bash: |
echo "APPLE_CERTIFICATE_SIGNING_IDENTITY is $(APPLE_CERTIFICATE_SIGNING_IDENTITY)"
echo "APPLE_PROV_PROFILE_UUID is $(APPLE_PROV_PROFILE_UUID)"
displayName: Check profile
- task: UseDotNet@2
displayName: .NET Version
inputs:
packageType: 'sdk'
version: '${{ parameters.DotNetVersion }}'
- task: Bash@3
displayName: Install MAUI
inputs:
targetType: 'inline'
script: |
dotnet nuget locals all --clear
dotnet workload install maui --source https://api.nuget.org/v3/index.json
- task: DotNetCoreCLI@2
displayName: Build iOS App
inputs:
command: 'publish'
publishWebProjects: false
projects: '**/*.sln'
arguments: >
-f net8.0-ios -c Release
-p:ApplicationDisplayVersion=${{ parameters.ApplicationDisplayVersion }} -p:ApplicationVersion=$(Build.BuildId)
-p:ArchiveOnBuild=true -p:RuntimeIdentifier=ios-arm64
-p:CodesignKey = "$(APPLE_CERTIFICATE_SIGNING_IDENTITY)" -p:CodesignProvision = "$(APPLE_PROV_PROFILE_UUID)"
zipAfterPublish: false
modifyOutputPath: false
InstallAppleCertificate@2
и InstallAppleProvisioningProfile@1
, сгенерированных двумя задачами на предыдущем шаге, и передать их в качестве аргументов $(APPLE_CERTIFICATE_SIGNING_IDENTITY)
из $(APPLE_PROV_PROFILE_UUID)
;
Работал ли ваш конвейер на агенте macOS, размещенном на Microsoft или на локальном сервере, для создания проекта MAUI? При использовании локального агента казалось, что сертификат разработчика Apple не установлен на этом компьютере.