我有一个相对复杂的问题,下面针对上下文进行了描述。解决方案似乎可以归结为手动编辑权利plist文件。
我在项目中找不到任何entitlements.plist文件,但在我找到的其他plist文件中找不到任何“权利”部分。
问题是,如何找到权利plist文件?
现在是背景故事:
我需要为我们部署的企业应用程序创建新的配置文件(旧版本将很快过期)。有几个版本在不同的环境中运行(都具有相同的应用程序ID)。由于某种原因,当前版本的应用程序不再包含权利“com.apple.developer.team-identifier”。续订配置文件时,此权利也会自动从配置文件中删除。这会导致应用程序的所有旧版本停止工作。他们无法在控制台日志中以此错误开始:
entitlement 'com.apple.developer.team-identifier' has value not permitted by provisioning profile 'My Profile'
根据Apple支持,我们必须将所有这些应用程序更新到最新版本,这当然是不可能的,因为有些应用程序在较旧的环境中生产并且并不完全兼容最新功能。 (我们不打算给所有客户免费升级)。因此,Apple的官方解决方案不是一种选择。
根据this comment关于相关问题,应该可以重新引入对缺失权利的依赖。我想如果我可以将权利添加到当前应用程序,重新生成它,然后为其生成新的配置文件,问题可能会得到解决。
答案 0 :(得分:1)
<强>答案强>
我的应用使用默认功能,在这种情况下没有entitlements.plist文件。我可以通过在UI中添加一些功能(然后再次删除它们)来添加一个。
跟进
最后,这并没有解决我的问题,因为这个权利已经在之前生成的配置文件中(具有默认功能),因此结果不同。在比较生成的配置文件时,我只注意到了这一点(它们是相同的)。
控制台日志中的错误似乎是由plist中的差异引起的:
以前的配置文件:
lazy val myService = new Service()
val routes =
path("api") {
get {
complete {
handleTry {
myService.run()
}
}
}
} ~
path("api" / LongNumber) { (num: Long) =>
get {
complete {
handleTry {
myService.run(num)
}
}
}
}
private def handleTry(operation: Try[_]):HttpResponse = operation match {
case Failure(t) =>
HttpResponse(status = StatusCodes.BadRequest, entity = t.getMessage)
case Success(_) =>
HttpResponse(status = StatusCodes.OK, entity = successMessage)
}
新配置资料:
<key>com.apple.developer.team-identifier</key>
<array>
<string>SomeIdentifier</string>
</array>
可以通过添加额外的团队标识符来再次使供应配置文件兼容,以便它再次成为一个数组,但这是一个不同的问题,我asked here。