使用XCode 4进行Ad Hoc分发时iPhone的授权问题

18

我已经重新阅读了所有关于Ad Hoc分发的文档和帖子,但仍存在问题。如果我尝试使用“无线”分发(使用Safari下载.plist和.ipa文件),应用程序开始下载,图标正确绘制,名称从“安装中...”更改,但在完成约90%时会出现“无法下载...”警报。

如果我使用iTunes传输应用程序,则会显示“未在iPhone上安装应用程序“xx”,因为授权不正确。”

Q1:我已阅读过,您不再需要单独添加.mobileprovision文件,因为XCode(我正在使用4.0.1)将其添加到包中-这是真的吗?

Q2:当我在iPhone的Safari中“下载”.mobileprovision时,它仅显示为文本。这是否是我的问题的症状或无关紧要?

Q3:此问题是否涉及Entitlements.plist?我找不到任何来自苹果或任何博客的文档与我在使用XCode 4.0.1编辑此文件时看到的相关内容。如果我按照说明操作(新建→新文件→代码签名→授权),我将获得一个默认文件,其中仅有一个“可以调试”键。我尝试了将其设置为NO、添加get-task-allow键(替换现有的-可能是可以调试相同的键?)、添加我的应用程序标识符以及添加一个包含上述两个键的iPhone授权字典(根据苹果的文档)。

Q4:尝试使授权和代码签名工作的iPhone开发人员自杀率是多少?

为了缩小类似问题的建议范围: 我已将代码签名授权设置为我的分发和发布Entitlements.plist。 我尝试重新启动XCode、重建、存档等 我尝试重新启动iPhone 我回到了iPhone

更新:在XCode 4.0.1中,在编辑Entitlements.plist时有一个菜单选项(Editor-> Show Raw Keys and Values),它将切换密钥从“Can be debugged”到“get-task-allow”


谢谢。关于第一点,是的,似乎已经在那里了。关于第三点,我把其他所有东西都清除了,是的,它似乎可以使用“无法调试”(我可以通过iTunes传输,但不能使用无线方法)。 - wheeliebin
6
Q4:iPhone开发者在尝试使授权和代码签名正常工作时的自杀率是多少?-- 哈哈 :-) - Mike Morearty
7个回答

13

权限文件应该是:

<?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>

这也适用于无线设备。
为什么默认值不包含所有这些,只有苹果才能回答。 我无法在Xcode中编辑plist的原始文本,因此在TextEdit中进行了编辑。


3
您可以在XCode中右键单击.plist文件,然后选择“打开方式”>“源代码”选项。无需离开XCode。 - Chuck Smith
4
自 Xcode 4 开始,不再需要使用“权限(Entitlements)”。实际上,它被建议避免使用,因为它会增加代码出现问题的可能性。参考链接:http://developer.apple.com/library/ios/#technotes/tn2250/_index.html%23//apple_ref/doc/uid/DTS40009933-CH1-TROUBLESHOOTING_GUIDE-CODE_SIGNING_ENTITLEMENTS - Olie
天啊,找到这个信息花了好长时间 - 谢谢。我没有使用XCode进行构建。对于那些不知道$(AppIdentifierPrefix)$(CFBundleIdentifier)是什么意思的人,这里有一个例子:B123PR5C23.com.startup.killerapp。您可以从苹果开发者门户网站的APP ID下获取AppIdentifierPrefix。 - Pirkka Esko

7

6

1

我尝试设置权限参数为“开”或“关”,重新下载我的Ad-hoc Provisional,这个Provisional已经使用了很长时间,并尝试了数百种其他组合。直到我去Provisional Portal并重新创建一个新的Provisional才成功。

让我熬夜到凌晨4点,浪费了我本来没有的时间的原因是我如何创建Ad hoc Provisional。在苹果的iOS Provisional Portal页面上,如果您点击左侧边栏上的“Provisioning”,您将看到4个选项卡:“Development”、“Distribution”和另外两个。我曾经使用在“Development”选项卡下创建的Provisional,并添加了所有测试用户的电话UUID。这对我来说已经有效多年了,直到xCode 4出现,而我太愚蠢了,太快跟进了。每次xCode更新时,苹果工程师总会给我一个惊喜的“午夜”派对。他们会等足够长的时间让我忘记这个经历并发布下一个版本。

我的解决方案是在分发选项卡下创建一个临时文件。在此处创建新的临时文件时,您可以选择“Ad Hoc”作为“分发方式”的选项。在将此临时文件用于xCode项目和目标构建设置后,并在授权中关闭“可调试”,我就可以通过iTunes或OTA安装了。希望这个提示能帮助某些人节省一些灰色头发。

在分发选项卡下创建配置文件,并选择 ad-hoc 也对我有用。在开发选项卡下创建将导致我遇到与授权相关的错误描述 (0xE8008016)。 - yeforriak

1

需要在项目中添加Entitlements.plist文件,并且里面应该只有get-task-allow键。

使用开发者配置文件在设备上进行调试时,应该勾选它。

使用Ad-HocDistribution配置文件构建时,应该取消勾选。

关于Q4:如果你愿意,可以通过简单的操作来增加它...但我不建议这样做。


谢谢。我刚刚尝试从资格文件中删除除“可以调试”之外的所有内容,并取得了一些进展,现在我可以使用iTunes进行传输,但无法使用“无线”方法进行下载。 - wheeliebin

1

如果你在项目导航器中右键点击plist文件,然后选择“打开方式”,再选择“源代码”,就可以将其作为纯文本进行编辑。


1
也许他们在xcode4中制作了Entitlements.plist的缩短版本。默认的Entitlements.plist不包含'application-identifier'和'keychain-access-groups'键,但是如果您通过'ASCII属性编辑器'更改'Can be debugged'键的值,它确实会在后台更改'get-task-allow'键的值...

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