应用标识符许可证未正确格式化 - iOS Xcode 4

9
我已经迁移到Xcode 4,无法将应用程序提交到App Store。每次我通过Xcode或Application Loader提交时,都会收到相同的错误消息:

"the application-identifier entitlement is not formatted correctly ... "

搜索发现问题出在Entitlements.plist文件中,其中application-identifier键应该与我的应用程序包ID匹配:例如J1234567885.com.domain.appName

问题是,它确实匹配。我的app.plist和Entitlements.plist中的bundle identifier是相同的!我做错了什么?这是我的Entitlements.plist文件(回顾过去从未更改):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>J1234567885.com.domain.appName</string>
    <key>get-task-allow</key>
    <true/>
</dict>
</plist>

我已经更改了上面的标识符,但只是为了给你一个想法...

4个回答

9
我遇到了mootymoots描述的相同问题。我通过向Entitlements.plist添加一些额外参数来解决这个问题。
我使用TestFlight将应用程序部署到测试组,因此我觉得紧密遵循TestFlight的使用Xcode 4 生成IAP的说明非常重要。完全删除Entitlements.plist似乎是一个hack而不是一个解决方案。
当我使用“新建文件…”向导创建Entitlements.plist时,它生成了以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>get-task-allow</key>
  <true/>
</dict>
</plist>

当我尝试创建存档时,它抛出了“应用标识符权利未正确格式化...”警告。
通过一些谷歌搜索,我意识到plist需要两个额外的参数,其中包含Xcode变量作为其值。请参见下面的代码片段,其中包括application-identifier和keychain-access-groups。(虽然我不认为后者与我遇到的问题有任何关系)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>get-task-allow</key>
  <false/>
  <key>application-identifier</key>
  <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
  <key>keychain-access-groups</key>
  <array>
      <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
  </array>
</dict>
</plist>

一旦我添加了这些参数,存档就不再抛出警告,并且我能够使用TestFlight进行分发。


6

事实证明,现在在 Xcode 4+ 中,你的 Release 构建中不需要一个 Entitlements.plist 文件(或者至少,Xcode 4 对它进行了一些奇怪的处理,而 Xcode 3 没有)。

无论如何,为了解决我的问题,我只需在构建设置的“代码签名权利”下删除我对 Entitlements.plist 的引用即可。

构建、存档、验证、提交到 iTunes Connect。


1
我会在iTunesConnect上检查您应用程序的二进制细节。您需要将其设置为get-task-allow = FALSE以进行发布构建。 - jschmidt

1
在我的情况下,这是由于使用分发配置文件的通配符应用程序ID(com.mycompany.*)引起的。使用绝对应用程序ID的配置文件替换它可以解决此问题。

0
在Xcode 4中,您的entitlements文件不应包含应用程序标识符。只需在您的Target->摘要选项卡上设置即可。此外,对于AppStore提交,get-task-allow应设置为False。
要修复此问题,我会删除当前的entitlements.plist文件,并使用文件->新建->新文件创建一个新文件。只需使用键get-task-allow = FALSE并尝试即可。确保将应用程序标识符放在Target->摘要选项卡上。

好的,所以我已经将get-task-allow设置为false。Target->Summary是完整的包标识符。现在我收到了相同的错误,但只引用J1234567885.*? - mootymoots
你尝试过先删除实际的授权文件,然后再创建一个新的吗? - jschmidt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接