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 页面上找到了这些参数,但我不知道为什么要使用它们。
上下文: 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 页面上找到了这些参数,但我不知道为什么要使用它们。