App ID 和 bundle identifier:配置文件问题

App ID & bundle identifier: provisioning profile issues

我正在处理一个 Ionic 3 项目,现在正着手设置和测试通知。我之前没有本地 iOS 开发经验,所以我一直在遵循一些指南,了解如何获得所有正确的证书、供应配置文件和正确完成其他设置。

我有一个 Apple Developer 帐户,我已将其添加到 Xcode,到目前为止一直让 Xcode(版本 8.3.3)自动处理签名。

我正在将通知作为 Mixpanel 集成的一部分来实现,所以我一直在遵循这个指南:https://mixpanel.com/help/reference/ios-push-notifications。本指南非常完整——它引导用户创建应用程序 ID、添加推送、创建和签署所需的证书、创建配置文件,最后将它们上传到 Mixpanel。整个过程很顺利。

当我连接我的设备以尝试和测试推送通知时,我开始遇到构建问题 - 我没有在 Xcode 中添加推送通知功能,所以我这样做了 - 但是,当我这样做后,我开始在代码签名配置中收到一个错误,即我的配置文件不包含该功能。奇怪,因为在 Apple Developer 站点上我的 App ID 的详细信息中,我看到推送通知已启用开发。

经过仔细检查,我认为问题在于我的 App ID 捆绑标识符(在 Apple Dev 站点上)和 Xcode 中的捆绑标识符不匹配。我的 App ID 捆绑标识符是:

<team_ID>.com.<domain>.app

但是我在 Xcode 中的包标识符是:

com.<domain>.app

在我创建应用程序 ID 时,我认为应用程序 ID 设置中的捆绑包标识符需要 <team_ID> 前缀,但我认为这是不对的。我在 App ID 信息中单独看到前缀:

这是错误的做法吗?我感到困惑并将团队 ID 添加到我的 App ID 包标识符中的原因是因为不允许来自 Xcode (com.<domain>.app) 的包标识符。我在创建 App ID 时尝试使用它时遇到的错误:

需要说明的是,我在 Apple 开发者资料中没有其他 App ID 具有此捆绑包标识符。

我知道这个标识符应该可用,因为我在今天之前一直在 Xcode 中使用它,使用相同的签名身份。为什么不允许我使用它来创建应用程序 ID - 捆绑 ID 在 Xcode 和 Xcode 中必须相同不是重点吗?

这里(对我而言)最后一个令人困惑的地方是,我决定更改 Xcode 中的包标识符以匹配我的 App ID(以确认,一旦它们匹配,构建就可以工作)。在我这样做之后,Xcode 似乎接受了新的包标识符,但是我得到了不同的构建错误——如果我改变了我的签名身份,签名配置中出现的错误就没有意义了——他们引用不是上面 Xcode:

中那个的包标识符

具体来说,为什么错误中的包标识符与图像顶部配置中设置的不匹配?我已尝试重新启动 Xcode,但仍然如此。在这一点上,如果我删除推送功能,我什至无法使用 Xcode 构建 - 我得到一个神秘的 Apple Mach-O Linker (ID) error,在谷歌搜索时不会出现太多。

您正在使用的配置文件是为您收到的错误消息中的捆绑包标识符配置的。要解决此问题,您可以:

  • 将您的应用程序的捆绑包标识符设置为您在 错误信息
  • 使用您创建的包标识符创建另一个配置文件 想在您的应用中使用

您还需要将推送通知添加到您的个人资料中。以下是有关如何执行此操作的一些说明:

  1. 转到 Certificates, Identifiers & Profiles 并为 Mac 个应用选择 OS 从左侧的弹出菜单中选择 X。
  2. 在标识符下,select 个应用 ID。
  3. Select 与 bundle ID 匹配的显式 App ID。
  4. 推送中出现绿色圆圈后跟“已启用” 通知行和分布列。

提供的答案和评论有很好的信息,但是,唯一对我有用的是创建一个新的应用程序 ID,该 ID 与我在 Xcode 中设置的包标识符不冲突。我认为在我的第一个应用程序 ID 名称中包含我的团队前缀在这个使用中起了很大的作用,因为自从创建一个带有普通包标识符的新应用程序 ID 以来,我还没有看到这种奇怪的行为。

除了上述可能的解决方案之外,如果这些对您不起作用,或者如果您收到类似以下内容的构建错误: 'resource fork, Finder information, or similar detritus not allowed' 那么这是对我有用的解决方案:

答:这是 iOS 10、macOS Sierra、watchOS 3 和 tvOS 10 引入的安全强化更改。

代码签名不再允许应用程序包中的任何文件具有包含资源分支或 Finder 信息的扩展属性。

要查看导致此错误的文件,运行 在终端中执行此命令:

$ xattr -lr

替换为实际应用程序包的路径。

下面是这个命令的一个例子:

$ xattr -lr Foo.app /Applications/Foo.app: com.apple.FinderInfo: 00000000 00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 |................| 您还可以使用 xattr 命令从应用程序包中删除所有扩展属性:

$ xattr -cr

请注意,使用 Finder 的“显示包内容”命令浏览捆绑包中的文件可能会导致将 Finder 信息添加到这些文件中。否则,审核您的构建过程以查看在何处添加了扩展属性。

link to the original article in Apple developer library