Swift App : 一個意料之外的崩潰理由

同步:ckitakishi.com

這是一個發(fā)生在去年年底的故事。背景是一個新規(guī) Swift 應用處于準備發(fā)布階段,證書由開發(fā)測試用更替為發(fā)布用, 這是兩份 Team 不同的企業(yè)版證書。

應用功能本身十分簡單,開發(fā)測試階段也比較順利,幾乎沒有發(fā)生崩潰。然而在更替證書之后,真機測試應用時卻陷入了無限崩潰的境地。

Log 類似下面這樣:

dyld: Library not loaded: @rpath/libswiftCore.dylib
  Referenced from: ...
  Reason: no suitable image found.  Did find:
  ...

有很多原因會導致提示這個錯誤,作為 Trouble Shooting 記錄下來:

  • 可能存在緩存,****Clean**** 工程
  • 很多時候該問題發(fā)生在 Swift 與 Objective-C 混編的時候,所以需要檢查 Building SettingEmbeedded Content Contains Swift Code 的設置是否已經(jīng)為 ****YES****。
  • 依然是配置,檢查 Building Setting 中的 Runpath Search Paths 是否正確,通常是:****@executable_path/Frameworks****。
  • 重置證書 (注銷再新建) 。

實際的生產(chǎn)過程中,首先 check 了前三項,最終強烈懷疑是證書問題。關于 “l(fā)ibswiftCore.dylib 崩潰“這個話題,很容易能看到這篇 Q&A,其中提到要運行 Swift 應用必須使用 iOS 8 Released 之后創(chuàng)建的證書。對比手中的兩份證書,除了 Team 不同之外,最大的差別在于創(chuàng)建時間,分別為 2016 年夏天,和 2014 年夏天。所以更新證書之后,問題也幸運地解決了。

關于 libswiftCore.dylib 文件還想再多扯幾句,看名字就能夠猜到是 Swift 動態(tài)庫,具體說來它其實是 Swift 的運行時庫,但是該文件和證書有什么關系呢?原因在于目前 Swift 的版本升級還不穩(wěn)定,如果將這些運行時庫直接放到系統(tǒng)中,很可能會導致每次 Swift 升級都導致應用不再能夠使用,而作為這個問題的解決方案,Apple 選擇將運行時庫打包進應用中,這樣就保證了開發(fā)與應用的 Swift 版本一致。由于 libswiftCore.dylib 屬于應用的一部分,所以也是需要簽名的,而像上一段所說,能夠為 Swift 的運行時庫簽名的證書必須創(chuàng)建于 iOS 8 Released 之后。這一切,都是為了提高 Swift 的兼容性,關于兼容性,強烈推薦這條 Tip

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,232評論 4 61
  • 這個新年也終于在各種悲喜交加的情緒中過完了。看著晚輩們一天又一天的長大,看著長輩們一年又一年的變老,看著朋友們一個...
    雷紫閱讀 783評論 6 2
  • 制藥173 劉莉 本文參加#我是電影迷#活動,本人承諾,文章內(nèi)容為原創(chuàng),且未在其他平臺發(fā)表過。 開篇,雪。不潔...
    青春永不言敗閱讀 549評論 0 2
  • 成長新技能——微習慣。 如果你也像我一樣,總是三分鐘熱度,卻找不到“解救”的方法,那么微習慣可能是拯救你我的一個法...
    圓子淺灰閱讀 138評論 0 0
  • 昨天,我終于開始跨出準備買房的第一步,雖然這么久了一直都在陸陸續(xù)續(xù)的關注買房和貸款相關的東西,但有時候它就是像臥薪...
    小宇宙_cw閱讀 132評論 0 0