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

使用msbuild为Xamarin iOS service extension签名的相关问题咨询

核心问题解答

Notification Service Extension 不需要单独调用 msbuild 命令构建,只要你的 iOS 主项目已经正确添加了扩展项目的引用,主项目构建时会自动触发扩展的构建并将其打包到最终的 IPA 包内。你遇到的「App integrity couldn't be verified」错误是因为 msbuild 传递签名参数时,默认不会自动应用到关联的扩展项目上,你本地手动分别签名主项目和扩展可以正常运行也验证了这一点。

现有脚本问题分析

你当前的构建脚本只给主项目指定了签名配置,扩展项目虽然在 csproj 里写了<CodesignKey>和<CodesignProvision>,但命令行传递的参数优先级高于 csproj 内的配置,且扩展项目不会自动继承主项目的命令行签名参数,导致扩展最终签名异常,包完整性校验失败。

修复方案

你需要在 msbuild 命令中显式为扩展项目也指定签名参数,修改后的构建命令示例如下,假设你的扩展项目名为Project.NotificationExtension.iOS:

msbuild /p:Configuration="Ad-Hoc" \
/p:Platform="iPhone" \
/p:IpaPackageDir="%env.PackageDirectory%" \
/p:CodesignKey="你的AdHoc签名证书名称" \
/p:CodesignProvision="主项目AdHoc描述文件名称" \
/p:ExtensionCodesignKey_Project.NotificationExtension.iOS="你的AdHoc签名证书名称" \
/p:ExtensionCodesignProvision_Project.NotificationExtension.iOS="扩展项目的AdHoc描述文件名称" \
/t:Build Project.iOS.sln

参数规则说明:

  • 扩展签名参数的格式为ExtensionCodesignKey_<扩展项目名称>和ExtensionCodesignProvision_<扩展项目名称>,项目名称要和你实际的扩展 csproj 文件名完全一致(不带.csproj后缀)
  • 需确保你的扩展项目的 Bundle ID 和主项目是同一组 ID 前缀,且扩展的描述文件的 Bundle ID 和扩展自身的 Bundle ID 完全匹配,描述文件也要包含所有测试设备的 UDID

验证方法

构建完成后可以手动解压 IPA 包,检查Payload/你的App.app/PlugIns目录下是否存在扩展的.appex文件,然后用命令行分别校验主 app 和扩展的签名:

codesign -vvvv Payload/你的App.app
codesign -vvvv Payload/你的App.app/PlugIns/你的扩展.appex

两个命令都返回valid on disk和satisfies its Designated Requirement就说明签名正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:36:05