通过Xcode bot创build的IPA无法为APNS运行,但是如果通过Xcode本身手动构build或通过Xcode构build为归档

我有一个CI构build机器运行Xcode服务器,并使用机器人来生成一个构build,但是通过机器人构build的.ipa无权注册APNS令牌。

具体地说,didFailToRegisterForRemoteNotificationsWithError被调用,并且运行时警告“”应用程序没有find有效的“aps-environment”授权string“。

但是,如果我在一个separte开发PC上构build应用程序,或者我在CI机器上独立于bot创build它,那么一切都很好。

我已经在多个应用程序中广泛使用了推送通知,所以如果应用程序没有使用正确的configuration文件进行签名,则始终会显示消息“无效的”aps-environment“应用程序的权利string”。 然而,我绝对100%确认,应用程序正在构build相同的configuration文件,当作为机器人构build的一部分运行时,我手动构build。

我也知道Xcode在机器人下运行时为运行的用户下载configuration文件到不同的位置,我也知道,当我手动构build时,机器人作为系统运行而不是login用户。 我考虑了所有这些差异,但仍然无法让bot构build工作。

更重要的是我已经使用这个完全相同的CI机器以前build立这个应用程序使用jenkins(也作为系统运行)启用推,它的工作!

这是我所做的/检查:

1)手动将项目下载到桌面,在Xcode中打开并检查在构build设置中被起诉的签名身份和供应configuration文件。 使用Xcode手动构build和运行 – >它的工作原理作为集成运行的一部分,通过机器人间接地下载项目。 在Xcode中打开由Bot下载的项目(Xcode服务器将其下载到:/ Library / Server / Xcode / Data / BotRuns // Cache / NNNN)。 做同样的事情,检查签名标识和configuration文件。 它们与我在桌面上构build时所使用的相同

好,所以问题不是由于使用的实际签名身份和configuration文件的差异造成的。

2)手动运行Xcode时,将configuration文件下载到位置X,但是Bot将configuration文件下载到位置Y.因此,我检查了X和Y的内容,以确保Y没有丢失(如果有但是构build实际上会失败,而不是)。

为了使它们完全相同,我已经将X的全部内容复制到Y中,并再次运行机器人(它们不会被机器人覆盖) – 所以现在机器人和桌面版本使用完全相同的configuration文件仍然存在.ipa执行时有所不同。

顺便提一句,X的位置是〜/ Library / MobileDevice / Provisioning Profiles,Y的位置是/ Library / Server / Xcode / Data / ProvisioningProfiles。

3)当我手动build立它是作为login用户,但是当机器人build立它是系统。 所以在钥匙串中,我尝试将用户钥匙串中的所有证书和密钥复制到系统钥匙串中。 是的,这仍然没有什么区别,由build bot创build的.ipa无法正常运行,而通过Xcode手动创build的build确实运行。

这让我很生气,已经浪费了几天时间,还有什么我可能错过了或者可以尝试解决这个问题?

任何build议或想法?

在这里输入图像说明

我已经find了确切的原因,至于原因背后的原因,我不知道,因此我把我的标记作为接受的答案,因为它至less是遇到同样问题的任何人的解决方法。 我很想知道这个原因是由于机器人系统中的一个错误,这个错误的预期是一个权利文件。

我发现bot构build失败的原因是因为bot没有将aps-environment权限放入.app文件,即使该权限位于embedded.mobileprovision内。 但是,如果手动构build或构build存档,XCode会将其插入到.app文件中。

另外我发现,如果我使用Entitlements.plist,我可以强制bot将必要的授权和相关信息放入.app文件。

但是这是使用Xcode 5 – entitlement.plist文件是过去的事情,所以它不应该有必要使用一个只是迫使机器人将权利放入.app,因此,为什么我怀疑它可能是一个机器人错误。

您是否试图解压缩.ipa并检查embedded.mobileprovision它们应该是相同的。 也只是为了确保你不使用开发人员configuration文件发布在bot / xcode的构build。

在黑暗中拍摄:

虽然你说当你手动运行构build时供应configuration文件工作得很好,你是否尝试过从头开始创build一个新的供应configuration文件,并使用机器人在CI构build机器上使用它?