You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Pipelines构建MAUI iOS应用及扩展的配置问题求解

解决Azure Pipelines构建带推送通知扩展的MAUI iOS应用的签名与SDK问题

问题概述

构建过程中遇到三个核心问题:

  • iOS应用找不到指定的provisioning profile('Ad Hoc com.cin.app')
  • 通知扩展的keychain中缺少iOS代码签名密钥('Apple Distribution: Cin')
  • Azure Pipelines自带的.NET 5.x SDK引发版本兼容性问题

一、修复Provisioning Profile匹配与签名密钥缺失问题

1. 为应用和扩展明确指定签名参数

当前dotnet publish未区分应用与扩展的配置文件,导致系统无法自动匹配。修改DotNetCoreCLI@2任务的arguments,添加针对性签名参数:

- task: DotNetCoreCLI@2
  displayName: 'dotnet publish $(BuildConfiguration)'
  inputs:
    command: 'publish'
    publishWebProjects: false
    projects: '**/YourMainApp.csproj' # 明确指定主应用项目,避免扩展项目单独构建
    arguments: '-f:$(iOSVersion) -c:$(BuildConfiguration) -p:ArchiveOnBuild=true -p:RuntimeIdentifier=ios-arm64
    -p:ApplicationProvisioningProfile="apple_ad_hoc_com.mobileprovision"
    -p:ExtensionProvisioningProfile="Development_Notification_Extension.mobileprovision"
    -p:CodesignKey="Apple Distribution: Cin"
    -p:CodesignProvision="Ad Hoc com.cin.app"'
    zipAfterPublish: false
    modifyOutputPath: false
  env:
    DISABLE_BITCODE: 'yes'

注意:CodesignKey必须与P12证书中的签名身份完全一致,CodesignProvision要和主应用provisioning profile的名称精准匹配。

2. 确保证书与配置文件的关联性

  • 检查apple_prod_signing_cert.p12证书是否包含Apple Distribution: Cin签名身份,且该证书已被添加到应用和扩展的provisioning profile中。
  • 验证两个provisioning profile的Entitlements配置:主应用需包含aps-environment推送权限,通知扩展也需配置对应推送相关权限。

3. 修复密钥链访问问题

在InstallAppleCertificate@2任务中添加密钥链密码参数,确保密钥链正确解锁,避免签名密钥无法被访问:

- task: InstallAppleCertificate@2
  displayName: 'Install Apple P12 Cert'
  inputs:
    certSecureFile: 'apple_prod_signing_cert.p12'
    certPwd: '$(AppleCertificatePassword)'
    keychain: 'temp'
    keychainPassword: '$(AppleCertificatePassword)' # 添加此参数解锁密钥链

二、解决.NET SDK兼容性问题

1. 锁定.NET SDK版本

在项目根目录创建global.json文件,强制构建使用.NET 8 SDK,避免Azure Pipelines自动选择.NET 5.x:

{
  "sdk": {
    "version": "8.0.100",
    "rollForward": "latestMinor",
    "allowPrerelease": false
  }
}

将该文件提交到代码仓库,UseDotNet@2任务会优先遵循此配置加载指定版本的SDK。

2. 精准安装匹配版本的MAUI Workload

修改Install Maui Workload任务的脚本,指定与.NET 8匹配的workload版本:

- task: CmdLine@2
  displayName: 'Install Maui Workload'
  inputs:
    script: 'dotnet workload install maui --sdk-version 8.0.100'

三、优化构建配置的辅助验证步骤

添加签名资产验证步骤,提前确认证书和配置文件是否正确加载:

- task: CmdLine@2
  displayName: 'Verify Signing Assets'
  inputs:
    script: |
      # 列出可用的代码签名身份
      security find-identity -v -p codesigning
      # 列出已安装的provisioning profile
      ls -la ~/Library/MobileDevice/Provisioning\ Profiles/

内容的提问来源于stack exchange,提问作者victor sanchez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:20:10