我正在开展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
在我创建应用程序ID时,我认为应用程序ID设置中的包标识符需要<team_ID>
前缀 - 但我不认为这是对的。我在App ID信息中单独看到前缀:
这是错误的做法吗?我感到困惑并将团队ID添加到我的App ID包标识符的原因是因为我的Xcode(com.<domain>.app
)的包标识符不允许。在创建App ID时尝试使用它时出现的错误:
要清楚 - 我在Apple Developer配置文件中没有其他应用程序ID以及此捆绑包标识符。
我知道这个标识符应该可用,因为我在今天之前已经在Xcode中使用它,具有相同的签名身份。为什么不允许我使用它来创建应用程序ID?在该代码和Xcode中,捆绑ID必须相同?
这里(对我而言)的最后一个令人困惑的地方是我决定更改Xcode中的包标识符以匹配我的App ID(确认一旦匹配,建立就可以了)。在我这样做之后,Xcode似乎接受了新的捆绑标识符,但是我得到了不同的构建错误 - 如果我更改了我的签名身份,那么签名配置中显示的错误就没有意义 - 他们引用了捆绑包标识符不是Xcode中的标识符:
具体来说,为什么错误中的包标识符与图像顶部配置中的设置不匹配?我尝试重新启动Xcode,但仍然会发生这种情况。此时,如果我删除了推送功能,我甚至无法使用Xcode构建 - 我得到一个神秘的Apple Mach-O Linker (ID) error
,在谷歌搜索时不会出现太多。
答案 0 :(得分:1)
您正在使用的配置文件配置为您收到的错误消息中的软件包标识符。要解决此问题,您可以:
您还需要将推送通知添加到您的个人资料中。以下是有关如何执行此操作的一些说明:
答案 1 :(得分:0)
提供的答案和评论有很好的信息,但是,对我来说唯一有用的是创建一个新的App ID,它与我在Xcode中设置的bundle标识符没有冲突。我认为在我的第一个应用程序ID名称中包含我的团队前缀在这个用途中发挥了很大作用,因为自从创建具有正常包标识符的新App ID以来我没有看到这种奇怪的行为。
答案 2 :(得分:0)
除了上述可能的解决方案之外,如果这些解决方案对您不起作用或出现以下类似的生成错误: “不允许使用资源分叉,Finder信息或类似碎屑” 那么这是对我有用的解决方案:
A:这是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信息添加到这些文件中。否则,请审核您的构建过程以查看扩展属性的添加位置。