2013-02-07 164 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

相關問題