xcodebuild 未签名 IPA - 缺少推送通知权利(在 XCode 中直接签名应用程序时工作)

Posted

技术标签:

【中文标题】xcodebuild 未签名 IPA - 缺少推送通知权利(在 XCode 中直接签名应用程序时工作)【英文标题】:xcodebuild Unsigned IPA - Missing Push Notification Entitlement (Work when signing directly the App in XCode) 【发布时间】:2021-01-12 15:52:31 【问题描述】:

上下文: XCODE 12.0.1

我在 Ionic 中使用推送通知。配置没问题。我在 Signing and Capabilities 中添加了推送通知功能。 我构建了我的应用程序并执行npx cap open ios,然后执行Product > Archive,然后它要求我签署应用程序,我签署它,然后就可以了。 当我测试通知时,一切正常。

问题:我需要为我的客户生成unsigned IPA with xcodebuild。他想自己签。 但是当我生成xcarchive(未签名的IPA)时,他告诉我签名后通知不起作用,当他尝试将其上传到App Store时收到此消息:

缺少推送通知权利 - 您的应用似乎注册了 Apple 推送通知服务,但应用签名的权利不包括“aps-environment”权利。如果您的应用程序使用 Apple 推送通知服务,请确保您的应用程序 ID 在配置门户中启用推送通知,并在使用包含“aps-environment”权利的分发配置文件签署您的应用程序后重新提交。 Xcode 不会在构建时自动从配置文件中复制 aps-environment 权利。这种行为是故意的。要使用此权利,请在项目编辑器的“功能”窗格中启用推送通知,或手动将权利添加到您的权利文件中。欲了解更多信息,请参阅https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#//apple_ref/doc/uid/TP40008194-CH6-SW1.

我如何生成 xcarchive : xcodebuild -workspace ios/App/App.xcworkspace -allowProvisioningUpdates -scheme App -sdk iphoneos -configuration Release -destination generic/platform=iOS -archivePath output/ios/App.xcarchive archive CODE_SIGNING_REQUIRED="NO" CODE_SIGNING_ALLOWED="NO"

手动或自动签名都不能解决问题。

你知道为什么我在使用 xcodebuild 时会出现这些错误(App Store 错误,推送通知错误)吗?

看起来有点像这个问题: Missing Push Notification Entitlement: While Resigining ipa

你知道我是否以错误的方式使用 xcodebuild 吗?

编辑 1: 如果我使用这个软件 https://github.com/maciekish/iReSign 来辞职我的 xcarchive,它可以工作...... 但是客户不会同意使用一些神秘的软件。 我试图将我的“通常 XCODE 签名”.ipa 与该软件签名的 .ipa 进行比较。唯一不同的是第二种情况下文件夹中有entitlements.plist文件。 这个文件看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>**TEAMID*.*APP-ID*</string>
    <key>aps-environment</key>
    <string>production</string>
    <key>com.apple.developer.applesignin</key>
    <array>
        <string>Default</string>
    </array>
    <key>com.apple.developer.team-identifier</key>
    <string>**TEAM ID**</string>
    <key>get-task-allow</key>
    <false/>
    <key>keychain-access-groups</key>
    <array>
        <string>TeamID.*</string>
        <string>com.apple.token</string>
    </array>
</dict>
</plist>

但我可以在embedded.mobileprovision 文件的“正常签名”ipa 中找到它,entitlements 部分包含这些行... 我不明白为什么这个工具可以工作

【问题讨论】:

【参考方案1】:

我终于解决了我的问题。我用于生成 xcarchive 的命令行是错误的。我只是幸运地在没有“SIGNING”参数的情况下测试了这条线:

xcodebuild -workspace ios/App/App.xcworkspace -allowProvisioningUpdates -scheme App -sdk iphoneos -configuration Release -destination generic/platform=iOS -archivePath output/ios/App.xcarchive archive

我在一些 Medium 页面中找到了这些参数,但我不知道为什么要使用它们。

【讨论】:

以上是关于xcodebuild 未签名 IPA - 缺少推送通知权利(在 XCode 中直接签名应用程序时工作)的主要内容,如果未能解决你的问题,请参考以下文章

xcodebuild和xcrun自动化编译ipa包 笔记

为啥我收到此警告“缺少推送通知权利”

修复 iOS ipa 文件(缺少代码签名证书)

xcode 8 xcodebuild 从命令行对多个配置文件进行手动代码签名

AirWatch 是不是对未签名的 ipa 文件进行签名?

无法从 Xcode 5 导出未签名的 IPA