Xcode 的功能和您在 Apple Developer Portal 中看到的 AppID 功能之间不应该存在 1-1 关系吗?

Shouldn’t there be a 1-1 relationship between Xcode’s capabilities and AppID capabilities you see in Apple Developer Portal?

我正在研究 Dev 门户中的 AppID 功能……

Xcode的能力和AppID的能力不应该是一对一的关系吗? 如果我尝试添加功能,我会在 Xcode 中看到钥匙串共享。

但是我在 AppID 的 Apple 开发者门户中没有看到这样的功能。为什么?

感谢 Dave Lyon 给我这个答案:

非常混乱!

In the dev portal you're requesting specific entitlements, but not all entitlements need to be baked in to your profile, so they don't all show up.

您在 AppID 的配置文件中看到的每项功能都需要授权。

您在 Xcode 中添加的每项功能并非如此。因此,您会在 Xcode 中找到更多功能。其中一些可能需要权利,而另一些可能不需要。

特别是在您的情况下,钥匙串共享 不需要授权,因此您在配置 App ID 时看不到它们。

编辑: 找到 docs from Apple

You can set many entitlements using the Summary tab [I think that's now done using the 'Signing and Capabilities' tab] of the Xcode target editor. Other entitlements require editing a target’s entitlements property list file. Finally, a few entitlements are inherited from the iOS provisioning profile used to run the app.

☝️ 很重要,但又很神秘。这就是为什么 Apple 告诉我们代码签名权利所依赖的非常复杂并且取决于各种输入

Check the Built Binary

The first step in debugging code signing entitlement problems is to check the actual entitlements of the binary. Xcode’s process for setting entitlements is quite complex, and it depends on various inputs, so it’s important to start by checking the output rather than looking at just the inputs.

To check the entitlements in your binary run the following command:

$ codesign -d --entitlements :- NetworkExtensionSample.app

Source: Apple Forums


这个页面也值得一看。它经历了权利过程。

https://developer.apple.com/library/archive/technotes/tn2415/_index.html#//apple_ref/doc/uid/DTS40016427-CH1-SOURCES

有很多很好的解释。确保你把它从里到外读完了。

When a profile is used for code signing, Xcode transfers the profile’s associated entitlements to the resulting code signature of the .app.

During code signing, the entitlements corresponding to the app’s enabled Capabilities/Services are transferred to the app’s signature from the provisioning profile Xcode chose to sign the app.

权利来源和权利目的地下还有两个部分

具体在 Entitlement Destination 下:

  • 应用程序的签名
  • 应用程序的嵌入式配置文件

这意味着配置文件已嵌入,但应用最终可能会拥有不同的 权利。基本上,如果权利是需要通过配置文件提供的那种,并且您的应用程序正在使用它,那么您需要在您的配置文件中拥有该权利,否则它会在代码签名时出错。