PAYATHON 2026

fastlane 生成的 IPA 为什么无法安装到 iPhone?

数据小陈

结论

先检查最终 IPA 实际使用的 provisioning profile 和签名证书。开发者门户里的 profile、ProvisionQL 显示的信息,以及 Xcode 项目当前选中的签名设置,都不能单独证明安装时检查的 IPA 与它们一致。

日志中的 Error 0xe8008015: A valid provisioning profile for this executable was not found 表示设备拒绝安装该应用的签名。结合 Xcode 提示的证书信息和设备不在 profile 中的情况,应重点核对应用标识、签名证书、设备 UDID 和构建配置是否匹配。distribution build 发布成功,也无法证明 development build 能安装到指定设备。

检查 IPA 内嵌的 profile 和签名

先解压实际交给 install_on_device 的 IPA:

mkdir -p /tmp/myapp-ipa-check
unzip -q /Users/ralf/myAppBuild/platforms/ios/build/Debug-iphoneos/myapp.ipa -d /tmp/myapp-ipa-check

查看应用的签名信息和 entitlements:

codesign -dv --verbose=4 /tmp/myapp-ipa-check/Payload/myapp.app
codesign -d --entitlements :- /tmp/myapp-ipa-check/Payload/myapp.app

然后解码 IPA 中实际嵌入的 profile:

security cms -D \
  -i /tmp/myapp-ipa-check/Payload/myapp.app/embedded.mobileprovision \
  -o /tmp/myapp-profile.plist

/usr/libexec/PlistBuddy -c 'Print :UUID' /tmp/myapp-profile.plist
/usr/libexec/PlistBuddy -c 'Print :Name' /tmp/myapp-profile.plist
/usr/libexec/PlistBuddy -c 'Print :TeamIdentifier' /tmp/myapp-profile.plist
/usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' /tmp/myapp-profile.plist
/usr/libexec/PlistBuddy -c 'Print :ProvisionedDevices' /tmp/myapp-profile.plist

确认 ProvisionedDevices 包含目标 iPhone 的 UDID,并且 application-identifier 与应用的 Team ID 和 bundle identifier 匹配。开发安装使用的 profile 还必须适用于 development 签名。如果检查结果与预期不符,应继续追查构建过程如何选择 profile,不能只依据门户中同名 profile 的信息判断。

核对证书和构建设置

Xcode 报错指出的证书是 iPhone Developer: Created via API (3T455GJWK6)。确认构建使用的签名证书包含在 IPA 内 profile 的 DeveloperCertificates 中,并且对应的私钥已安装在构建机的 keychain 中。还需确认本地安装的是当前 profile,而不是过期或同名的旧版本。

检查 Xcode 为实际构建配置解析出的设置:

xcodebuild \
  -project /Users/ralf/myAppBuild/platforms/ios/myapp.xcodeproj \
  -scheme myapp \
  -configuration Debug \
  -showBuildSettings | grep -E 'PRODUCT_BUNDLE_IDENTIFIER|DEVELOPMENT_TEAM|CODE_SIGN_IDENTITY|PROVISIONING_PROFILE_SPECIFIER'

核对 PRODUCT_BUNDLE_IDENTIFIER、DEVELOPMENT_TEAM、CODE_SIGN_IDENTITY 和 PROVISIONING_PROFILE_SPECIFIER 是否与 IPA 内的 profile 一致。如果 Xcode 检查项目时报告 profile 不包含当前证书或设备,即使门户中的 profile 页面显示包含,也要检查本机缓存的 profile、构建所用配置和最终产物是否一致。

建议的修复顺序

  1. 从最终 IPA 解码 embedded.mobileprovision,确认其中的名称、UUID、应用标识和设备 UDID。
  2. 确认该 profile 的 DeveloperCertificates 包含最终 IPA 使用的签名证书,并检查构建机 keychain 中是否有对应私钥。
  3. 检查 Xcode Debug 构建配置和 Ionic 构建实际使用的 bundle identifier、团队、签名证书及 profile。问题中的 update_code_signing_settings 设置了项目签名,还需确认 Ionic 构建没有采用其他配置或覆盖这些设置。
  4. 如果本地 profile 已过期或内容不一致,使用 fastlane match 同步正确的 development profile 和证书,然后重新构建 IPA 并检查新产物。
  5. 将确认过的 IPA 路径传给 install_on_device,避免安装旧构建产物。

不要只凭 profile 名称判断是否匹配。同名 profile 可能有不同的 UUID 或内容。现有信息不足以确定唯一根因;以上检查可以帮助判断问题来自 IPA 内嵌了旧 profile、证书不匹配、设备 UDID 未包含,还是构建时使用了不同的签名配置。

备注:内容仅供参考。