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 中直接签名应用程序时工作)的主要内容,如果未能解决你的问题,请参考以下文章