ios – 通过Xcode bot创建的IPA无法为APNS运行,但如果通过Xcode本身手动构建或通过Xcode构建为存档,则运行

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

具体来说,didFailToRegisterForRemoteNotificationsWithError被调用,并且有一个运行时警告“”没有为应用程序找到有效的“aps-environment”授权字符串.

但是,如果我在一个separte开发PC上构建应用程序,或者我实际上在CI机器上构建它,而不是机器人,那么一切都很好.

我已经在多个应用程序中广泛使用推送通知,所以知道如果应用程序尚未使用正确的配置文件签名,则会始终显示消息“无效”aps-environment“应用程序找到的授权字符串”.但是,我绝对100%确认,当我手动构建机器人构建的一部分时,应用程序正在使用相同的配置文件.

我也知道,Xcode下载配置文件到不同的位置运行在机器人下运行时为用户,我也知道机器人作为系统运行,而不是登录用户手动构建.我已考虑到所有这些差异,但仍然无法使机器人构建工作.

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

这些是我做的/检查的:

1)
将项目手动下载到桌面,在Xcode中打开,并检查在构建设置中被起诉的签名身份和配置文件.使用Xcode手动构建并运行它 – >有用
作为其集成运行的一部分,通过机器人间接下载项目.打开由Xcode下载的项目(Xcode服务器将其下载到:/ Library / Server / Xcode / Data / BotRuns //缓存/ NNNN).做同样的事情,检查签名身份和配置文件.他们在桌面上构建时使用的标识符

OK,所以这个问题并不是因为使用的实际签名身份和配置文件的差异.

2)当您手动运行Xcode时,将配置配置文件下载到位置X,但是Bot将配置配置文件下载到位置Y.因此,我已经检查了X和Y的内容,以确保从Y中没有任何内容(如果有的话)然而,构建实际上会失败,它不会).

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

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

3)当我手动构建它是作为登录用户,但当机器人构建它是作为系统.所以在钥匙扣内,我尝试将用户钥匙扣中的所有证书和密钥复制到系统钥匙串中.是的,仍然没有任何区别,构建机器人创建的.ipa无法正常运行,而通过Xcode手动创建的构建运行.

这正在驱使我生气,已经浪费了天数,还有什么可以错过或可以尝试解决这个问题?

任何建议或想法?

解决方法

我发现了确切的原因,因为我不知道的原因,所以我把我的标记作为公认的答案,因为至少是遇到同样问题的人的解决方法.我很想,原因是由于机器人系统中的错误,这是错误地期望有一个权利文件.

我发现机器人构建失败的原因是因为机器人不会将aps环境授权放置在.app文件中,即使该权限在embedded.mobileprovision内.但XCode将其插入.app文件,如果手动构建或归档构建.

此外,我发现如果我使用Entitlements.plist,我可以强制机器人将必要的权利和相关信息放入.app文件中.

但是这是使用Xcode 5 – authorizationlement.plist文件是过去的事情,所以不必使用一个只是强迫机器人将权限放置到.app中,因此我怀疑它可能是一个机器人错误.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...