应用 ID 和捆绑标识符:配置文件问题

Posted

技术标签:

【中文标题】应用 ID 和捆绑标识符:配置文件问题【英文标题】:App ID & bundle identifier: provisioning profile issues 【发布时间】:2017-08-09 22:48:06 【问题描述】:

我正在开发一个 Ionic 3 项目,现在开始着手设置和测试通知。我之前没有原生 ios 开发经验,因此我一直在遵循一些指南,了解如何正确完成所有适当的证书、配置文件和其他设置。

我有一个 Apple 开发者帐户,我已将其添加到 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

在我创建 App ID 时,我认为 &lt;team_ID&gt; 前缀是 App ID 设置中的捆绑标识符所必需的 - 但我认为这是不对的。我在 App ID 信息中单独看到了前缀:

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

需要明确的是,我在 Apple 开发人员配置文件中没有具有此捆绑标识符的其他 App ID。

我知道这个标识符应该是可用的,因为我今天之前一直在 Xcode 中使用它,具有相同的签名身份。为什么不允许我使用它来创建 App ID - 这不是说 bundle ID 在那个和 Xcode 中都必须相同吗?

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

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

【问题讨论】:

无法创建的原因是其他苹果开发者账号已经注册并使用了com..app app ID。注册开发者帐户以使用该应用 ID 后,您将无法将其添加到您的帐户中。您正在使用自动代码签名,您是否可能最初使用不同的开发者帐户登录。如果是这样,Xcode 可能已经在该其他帐户上创建/保留了您的捆绑 ID。我相信一旦注册到开发者帐户,它就会保留 120 天。 您有团队帐户和个人免费帐户吗?现在我正在查看它,您似乎在您的免费开发人员帐户下注册了捆绑 ID(不适用于推送通知),但可能是团队帐户的开发人员,没有捆绑 ID 保留(您的个人帐户通过您在更换团队时采取的一些行动接管了这一点)。我会将您的团队更改为付费开发者帐户,将您的捆绑 ID 更改为新的,它可能会起作用。 【参考方案1】:

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

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

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

    转到Certificates, Identifiers & Profiles,对于 Mac 应用程序,选择 左侧弹出式菜单中的 OS X。 在标识符下,选择应用 ID。 选择与捆绑包 ID 匹配的显式应用 ID。 Push 中出现一个绿色圆圈,后面跟着“已启用” 通知行和分发列。

【讨论】:

我没有遵循您所说的第 1 点的意思。将我在 Xcode 中的应用程序的包标识符设置为我在错误消息中看到的那个?情况已经如此——我在创建 App ID 时尝试使用 Xcode 中的包标识符,这时我收到了错误消息。 @dkhaupt 试试这里:developer.apple.com/account/ios/certificate 并确保您的开发配置文件具有“推送通知功能” 我的配置文件确实有“推送通知”。我认为这与捆绑标识符有关,而且似乎我在 Xcode 中拥有的任何捆绑标识符在创建新的 App ID 时都不可用。我想我需要创建一个新的 App ID,暂时更改我的 Xcode 捆绑标识符,然后在创建 App ID 并进行正确设置后将其改回【参考方案2】:

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

【讨论】:

【参考方案3】:

除了上述可能的解决方案之外,如果这些解决方案不适合您,或者您收到类似以下内容的构建错误: '不允许资源分叉、Finder 信息或类似的碎屑' 那么这是对我有用的解决方案:

答:这是一项在 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 的 Show Package Contents 命令浏览捆绑包中的文件可能会导致将 Finder 信息添加到这些文件中。否则,请审核您的构建过程以查看在何处添加了扩展属性。

link to the original article in Apple developer library

【讨论】:

以上是关于应用 ID 和捆绑标识符:配置文件问题的主要内容,如果未能解决你的问题,请参考以下文章

与配置文件不同的捆绑标识符。

获得批准后,我可以在我的应用中更改捆绑标识符吗?

如何通过与之关联的目标名称或捆绑标识符来查找配置文件的名称?

Xcode 错误:没有具有与捆绑标识符匹配的有效签名身份的配置文件

无法编辑捆绑标识符

如何从配置文件中提取捆绑标识符?