2013-02-07 118 views
4

我在Ad-Hoc版本的空中(OTA)发行版中遇到问题。 构建基本SDK 6.1,部署目标5.0,架构armv7和armv7s的通用iPhone/iPad应用程序。相同的临时构建在iOS 6设备(3个不同的iPhone5,1个iPhone4和iPad2)上安装OTA,但未能在iOS 5设备(iPhone4S和iPad1)上安装OTA。iOS Ad-Hoc OTA发行版适用于iOS 6,但不适用于iOS 5

OTA通过IIS正确设置所有MIME类型(否则它将在iOS 6中失败)。

在iOS 5设备启动安装舒应用程序图标与进度条,第一标题是“请稍候”,然后改到应用程序的名称,则警报视图中显示出来说

无法下载应用

目前无法下载。

完成/重试

连接的设备的Xcode看到组织者日志。 控制台具有以下:

APSD [48]:用于发生流错误:错误域= NSPOSIXErrorDomain代码= 61 “操作couldn'叔-be -completed- - 连接-refused-” - UserInfo - = - 0-x-1-4-7-0-8-0 - { - }

正是这样,包括“ - ”字符。

通过iTunes同步在相同的iOS 5设备上安装相同的即席构建,按预期工作,没有错误。

帐户类型是一个“普通”开发人员帐户,而不是Enterprise。

我已经尝试从头创建所有配置文件。 没有尝试删除并创建新的证书,希望它不是必需的。

应用程序不使用iCloud或推或任何东西。没有Entitlements.plist包含在软件包中。

可能很重要的一点是,应用程序是使用CocoaPods构建的 - 这是一些构建为Pods目标的第三方库。

+0

类型的重复:http://stackoverflow.com/questions/13167915/ios-enterprise-ota-distribution-unable-to-download-application – cregox

回答

3

那么,你一定会惊讶地发现一个实际的原因。

我结束了撤销所有证书,删除配置文件,将所有的方式,从企业社会责任到建立构建环境。我对权利和“获取任务允许”等其他内容进行了试验。但是没有一个能做到这一点。

在某些时候,我决定再看看用于分发IIS服务器和plist文件。 所以在这里,问题是与plist文件。 iTunes的图形图像文件被命名为 “iTunesArtwork。PNG”,在plist文件的URL为http://hostname/Mobile/iOS/iTunesArtwork

因此,我将该文件重命名为“iTunesArtwork”(已删除的扩展名),但没有解决问题,但现在我可以看到安装进度栏几乎到了最后,状态消息从“正在下载”更改为“安装”。在此之前它一开始就失败了,之后说“等待”。

最后,我把所有的东西才能,文件名为“iTunesArtwork.png”固定网址是http://hostname/Mobile/iOS/iTunesArtwork.png

,这时候它的工作。

我只能想出如下解释:安装开始

之前,iOS的是检查是否在plist中指向有效的资源,所有的URL。如果有任何失败,iOS 5将中止安装,而iOS 6至少可以容忍无效的作品链接。

在安装过程中,iOS首先获取应用程序图标以将其显示在屏幕上,然后下载该ipa文件,最后获取图片。在这里,再一次,iOS 5有更严格的验证规则,它不会像'iTunesArtwork'这样的名称,我认为它只是不喜欢没有扩展名的文件名。如果抓取图稿失败,则iOS 5上的整个安装会中止。在这个阶段,iOS 6似乎忽略了错误。

我个人认为iOS 5是正确的。验证所有网址是否有效并且所有文件都具有适当的扩展名是一件好事。如果两个iOS版本都采用相同的方式,我会在一开始就遇到问题。

UPD

刚试过用在Mac OS X 10.8上运行的Apache Web服务器设置。 可以肯定的是,与IIS不同,apache iOS 5能够很好地容忍缺失的扩展,所以它不仅仅是iOS 5,而是iOS 5和IIS的混合,这会导致所有的麻烦。

但是,如果我将诸如http://hostname/Mobile/iOS/NoSuchFile之类的东西放在plist中代替原图,则iOS 5将无法安装OTA,而iOS 6甚至不会注意到某件事情并继续安装。

+2

令人难以置信的捕获,如果这确实是这样的 –

+0

嗯,我可能是错误的指责在iOS上的所有。这可能是由于IIS设置造成的一小部分麻烦。 我希望我有一些时间,并从OS X服务器测试OTA并检查问题是否仍然存在。 – i4niac

+0

尝试Diawi。不能相信他们使用IIS :)应该更快 –

0

尝试这个选择所有第三方库,不包括您在xcode中的项目,并在构建设置中将跳过安装设置为yes。

+0

该标志设置,cocoapods在生成Pods项目文件时执行此操作。 – i4niac

2

将权利文件添加到您的项目,并将其“get-task-allow”设置为“NO”。我有类似的问题,直到我这样做; OTA有时会工作,有时候不会。尽管苹果说它应该没有权利文件,但似乎不再是这种情况。

确保您将“get-task-allow”设置回“YES”以进行正常的开发/调试。

仅供参考,这里是权利文件的内容:

<?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>keychain-access-groups</key> 
    <array> 
     <string>$(AppIdentifierPrefix)com.yourCompany.yourAppname</string> 
    </array> 
    <key>get-task-allow</key> 
    <false/> 
</dict> 
</plist> 
当然

,你需要与你的应用标识符来代替“yourCompany.yourAppname”的东西。

+0

明天再试试看看。我可以确定没有权利文件,所以这可能会起作用,至少我希望如此。 – i4niac

+1

没有工作。我尝试将get-task-allow设置为YES,NO,完全删除,没有解决。 我明显错过了与iOS 5和iOS 6相关的东西,但我不知道到目前为止是什么。 – i4niac

+0

@fishinear我遇到的问题与我的OTA有时会起作用,有时候不会。当您添加权利时,您是否保留$(AppIndentifierPRefix)? – Alan

1

我遇到了diawi或testflight这个问题。 一旦开始无法正常工作,您应该清除设备上部分下载的应用程序。

您是否曾尝试在ipa之前发送和安装证书?

+0

你的意思是配置文件?是的,也试过了,没有运气。我至少拥有三款我从来没有使用过的设备,只是获得了他们的UDID并将这些设备添加到专用配置文件中,甚至没有向这些人分享配置文件。他们能够毫无问题地安装OTA,当然所有的iPhone都运行iOS 6.在我的情况下,很显然iOS 6的工作原理和iOS 5都没有。 – i4niac

1

从我的经验,有几个步骤来照顾这个问题我们许多人都经历过的;

  1. 确保您的设备UDID已在供应门户中注册并链接到您正在使用的供应配置文件。

  2. 在签名应用程序之前(使用“归档”选项编译时),刷新到可用的最新配置文件,可能通过擦除管理器中显示的旧配置文件并按下底部的“刷新”进入您的开发者帐户。

  3. 设置签名身份“分配”(特设)。如果您使用“Build”编译并上传到Diawi这样的服务,这至少会起到帮助。如果您确实使用Diawi这样的服务,请上传您签署的移动配置文件(Ad-Hoc文件),并让用户在安装应用程序之前通过Diawi提供的界面安装它。

  4. 登录应用程序与特设“分销”的个人资料,而不是“发展”的空间 - 这是至关重要的!

祝你好运!

+1

我检查了整个例程不止一次。就目前而言,我可以赌一笔,说这些步骤是正确的。如果我在其中任何一个出现错误,那么iOS5和iOS6都会失败,即使是纯粹的iTunes同步也会失败,但事实并非如此。 – i4niac

+0

总是在这里帮忙,无论有没有艺术作品PNG的:)!但是,我很高兴你找到了正确的解决方案,无论如何你的情况。 –

+0

如果你想要一个更大的清单:http://stackoverflow.com/a/19661276/274502 – cregox

相关问题