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

xcodebuild Unsigned IPA - Missing Push Notification Entitlement (Work when signing directly the App in XCode)

上下文: 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 时会收到这些错误(应用商店错误、推送通知错误)吗?

看起来有点像这个问题: 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 部分包含这些行... 我不明白为什么这个工具让它起作用

我终于解决了我的问题。我用于生成 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 页面上找到了这些参数,但我不知道为什么要使用它们。