我遇到Ad-Hoc版本的无线(OTA)分发问题。 使用基本SDK 6.1,部署目标5.0,架构armv7和armv7构建通用iPhone / iPad应用程序。同样的ad-hoc构建在iOS 6设备(3种不同的iPhone5,一种iPhone4和iPad2)上安装OTA,但无法在iOS 5设备(iPhone4S和iPad1)上安装OTA。
OTA通过IIS发生,所有MIME类型都设置正确(否则iOS 6会失败)。
在iOS 5设备上,它启动安装showin app图标,带有进度条,第一个标题是“Waiting ...”,然后更改为app name,然后警报视图显示
无法下载应用程序
目前无法下载。
完成/重试
将设备连接到Xcode以查看组织者中的日志。 控制台具有以下内容:
APSD [48]:发生流错误:错误域= NSPOSIXErrorDomain代码= 61 “的操作couldn'叔-be -completed- - 连接-refused-。” -UserInfo - = - O-X-1 -4-7-0-8-0 - { - }
完全相同,包括“ - ”字符。
通过iTunes同步在相同的iOS 5设备上安装相同的ad-hoc版本按预期工作,没有错误。
帐户类型是“普通”开发者帐户,而不是企业帐户。
我已经尝试从头开始创建所有配置文件。 没有尝试删除和创建新证书,希望它不是必需的。
应用程序不使用iCloud或Pushes,或任何其他内容。没有Entitlements.plist包含在捆绑包中。
可能很重要的是提到应用程序是使用CocoaPods构建的 - 一堆构建为Pods目标的第三方库。
答案 0 :(得分:3)
嗯,你肯定会惊讶地发现原因是什么。
我最终撤销了所有证书,删除了个人资料,从CSR一直到建立一个构建环境。我确实尝试了权利和'get-task-allow'等内容。但这一切都没有成功。
在某些时候,我决定再看看用于分发的IIS服务器和plist文件。
所以在这里,问题在于plist文件。
iTunes艺术作品图像文件名为“iTunesArtwork。 png ”,plist文件中的网址为http://hostname/Mobile/iOS/iTunesArtwork
。
所以我将文件重命名为“iTunesArtwork”(删除了扩展名),但没有解决问题,但我现在可以看到安装进度条几乎到了最后,状态消息从“正在下载”变为“正在安装” ”。在此之前,它在一开始就失败了,就在说“等待”之后。
最后,我按顺序放置所有内容,将文件命名为“iTunesArtwork.png”,将固定网址命名为http://hostname/Mobile/iOS/iTunesArtwork.png
这就是它运作的时候。
我只能提出以下解释:
在安装开始之前,iOS正在检查plist中的所有网址是否指向有效资源。如果其中任何一个失败,iOS 5将中止安装,而iOS 6至少可以容忍无效的艺术品URL。
在安装过程中,iOS首先获取应用程序图标以在屏幕上显示,然后下载ipa文件,最后获取图稿。在这里,同样,iOS 5有更严格的验证规则,它不会像'iTunesArtwork'这样的名字,我认为它只是不喜欢没有扩展名的文件名。如果提取图稿失败,则iOS 5上的整个安装将中止。 iOS 6似乎在此阶段忽略了错误。
我个人认为iOS 5是正确的。验证所有URL是否有效以及所有文件都具有适当的扩展名是一件好事。如果两个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甚至不会注意到任何事情并继续安装。
答案 1 :(得分:2)
将权利文件添加到项目中,并将其“get-task-allow”设置为“NO”。在我这样做之前,我遇到过类似的问题; OTA有时可以工作,有时也不工作。尽管Apple表示它应该在没有权利文件的情况下工作,但似乎不再是这种情况了。
确保将“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”内容替换为您的应用标识符。
答案 2 :(得分:1)
我用diawi或testflight遇到了这个问题。 一旦开始不起作用,您应该删除设备上部分下载的应用程序。
您是否尝试过在ipa之前发送和安装证书?
答案 3 :(得分:1)
根据我的经验,有几个步骤可以解决我们许多人所经历的这个问题;
确保您的设备UDID已在配置门户中注册,并链接到您正在签署的配置文件。
在签署应用程序之前(使用“存档”选项进行编译),刷新到可用的最新配置文件,可能是通过删除组织者中显示的旧配置文件并按下底部的“刷新”,登录您的开发者帐户。
将签名标识设置为“分发”(Ad hoc)。如果您使用“Build”进行编译并上传到Diawi等服务,这至少会有所帮助。如果你确实使用像Diawi这样的服务,请上传你签署的移动配置文件(Ad-Hoc one),让用户在安装应用程序之前通过Diawi提供的界面安装它。
使用Ad-Hoc“分发”配置文件而不是“开发”配置文件对应用进行签名 - 这一点至关重要!
祝你好运!
答案 4 :(得分:0)
尝试此选择在xcode和构建设置中排除项目的所有第三方库,将skip install设置为yes。