2016-05-29 61 views
2

當前的AppStore版本的應用程序正在查看數百個用戶的崩潰情況,在這些用戶中無法找到捆綁的框架。這並沒有出現在測試中,無論是在設備清理還是全新安裝,還是在現有版本上安裝,我都無法重現該問題,無論是在模擬器還是設備上。iOS:未找到嵌入式框架,但僅在* some *安裝

我已經從用戶處獲取的錯誤日誌說明:

Dyld Message: Library not loaded: @rpath/OMGHTTPURLRQ.framework/OMGHTTPURLRQ 
Referenced from: /var/containers/Bundle/Application/BB320110-3C64-4772-9A3A-208F4CAD84B5/PicTapGo.app/PicTapGo 
Reason: image not found 

然而,經審查,該框架肯定是包含在已發送到App Store,在框架文件夾中的實際束。在Xcode項目中,運行時搜索路徑包含'@ executable_path/Frameworks',這就是框架捆綁在一起的地方。這是我們第一次鏈接到一個動態庫(這是必須的,因爲lib包含Swift代碼),所以有可能(甚至可能)我錯過了一些關於嵌入式框架的重要內容這裏。

同樣,奇怪的是,我可以擦拭我的iPhone清潔,並從App Store重新安裝此版本,並不會發生錯誤。在我測試過的每個配置中(包括我們的beta測試者),該庫加載得很好。這意味着僅有部分用戶缺少該框架。此外,似乎沒有任何押韻或失敗的原因。它發生在所有iOS設備上,包括所有版本的iOS 9(儘管我沒有看到Xcode組織者列出的任何iOS 8崩潰)。我完全無法重現該問題,但對於受影響的用戶而言,它始終如一地發生。

任何想法爲什麼只有一些設備將無法找到捆綁框架?在某些情況下,應用程序商店是否使用您的捆綁軟件配置?

+1

與動態框架有相同的問題。我給蘋果打電話,並要求他們提供解決方案。這是iOS 9.3.1中的一個錯誤。如果用戶升級到iOS 9.3.2,則應該修復並運行。該應用不會超過啓動畫面。用戶必須進行全新安裝,即使這樣,有時仍然無法正常工作。這就是爲什麼你在iOS-8上看不到問題的原因。 – Brandon

+0

當然似乎是合理的(好吧,似乎_ludicrous_該錯誤將在那裏結束,但合理的是,它將是一個iOS的東西)。將看看我能否讓客戶嘗試驗證。謝謝! –

回答

1

經過一番調查,似乎確實消失。窺探發送到App Store的實際庫二進制文件,他們最終只能爲arm64構建。仍然在如何這發生了(也許一些CocoaPods怪異),但這很好地解釋了在野外的dyld失敗。對於arm64體系結構(iPhone 5s及更高版本),一切都是A-OK。對於4s,5c,5c和更老的iPad,dyld找不到該lib。顯然,App Store strips out non-compatible architectures在處理應用程序時,該部分軟件包在armv7設備上顯然缺失。查看可用的崩潰報告,它們都不在arm64設備上。

所有的「未找到的庫」崩潰,像上面提到的日誌,都在iOS9上。 iOS 8上有類似的崩潰,但有不同的消息。我假設它是我能夠在本地重現的那個(「no suitable image found... Did find <somelib>: mach-o, but wrong architecture」),這與iOS8設備將獲得全雙工二進制文件的想法相吻合。 Lib會在那裏,但沒有arm7。

iOS Architectures by device

這種不良的正常發育過程中並不明顯。我使用iPhone 6作爲主要測試設備,而我的測試團隊顯然也都在較新的設備上。我曾依靠模擬器在舊設備上進行測試。看起來這是一個糟糕的想法™至少有一個原因,我現在可以引用。將來,我會在將事情發送到世界之前,在實際的,事實上的armv7設備上進行測試。

因此,對於任何人在未來遇到問題,這是另一件需要尋找的事情。如果事實並非如此,將會更新。

編輯:從屍體解剖,爲後人更多 - 我們結束與arm64-只在AppStore構建的方式是捆綁調試版本的庫,而不是AppStore版本。我通過創建一個新的Copy階段來捆綁框架,並從CocoaPods的Products組中拖動框架。但是,以這種方式配置複製階段時獲得的實際二進制文件取決於您當前處於活動狀態的方案。如果您的Debug方案處於活動狀態,那麼您將獲得庫的調試版本。如果您有一個AppStore方案處於活動狀態,您將獲得一個AppStore版本。這是Xcode項目中的硬編碼路徑,無論您將來爲主項目的構建選擇哪種方案,都會捆綁您最初拖動的版本。

默認情況下,Debug build只構建活動架構,這意味着Debug庫缺少armv7支持。