如何在XCode 6.3 iOS项目中找到权利plist文件

时间:2015-05-13 14:23:27

标签: ios xcode provisioning-profile enterprise entitlements

我有一个相对复杂的问题,下面针对上下文进行了描述。解决方案似乎可以归结为手动编辑权利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关于相关问题,应该可以重新引入对缺失权利的依赖。我想如果我可以将权利添加到当前应用程序,重新生成它,然后为其生成新的配置文件,问题可能会得到解决。

1 个答案:

答案 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