close

不知道是因為更新作業系統、還是因為更新 Xcode,專案竟然一直跑出以下兩個錯誤訊息:

  • 'FirebaseCore/FirebaseCore.h' file not found
  • Could not build module 'Firebase'

處理了幾天,終於搞定,原來是把專案設定裡的 Build Settings 裡的 VALID_ARCHS 設定成下列值即可:

$(ARCHS_STANDARD)

我的該欄位原本的值是 "arm64 armv7s armv7",改成上述後,會被自動帶入 "armv7 arm64"。但是!我手上的專案,若直接設定成 "armv7 arm64" 這組字串會編譯失敗,一定要設成 "$(ARCHS_STANDARD)" 才能成功編譯。

以下記錄過程中處理的方式。


【方法一:移除暫存檔並重新產生 Pods 相關檔案】

蘋果論壇上的 "Could not build Objective-C module 'Firebase'",建議可以這麼做:

  1. 關閉 Xcode 主程式。
  2. 刪除專案的暫存檔,路徑在:
    ~/Library/Developer/Xcode/DerivedData
  3. 刪除專案檔 {ProjectName}.xcworkspace
  4. 刪除 Podfile.lock 檔案,以及 Pods 資料夾。(位於專案目錄下)
  5. 在終端機 (terminal) 視窗執行以下指令:
    pod install
  6. 開啟新的專案檔 {ProjectName}.xcworkspace,再建置一次。

但是我做完以後一樣是 Build failed.


【方法二:更新 cocoapods】

找到另一篇文章 "Could not build module Firebase",提到升級 cocoapods 版本是唯一的解法。

在終端機 (terminal) 將目錄切到專案目錄下,執行以下指令,可以在最末行看到目前的 cocoapods 版本:

cat Podfile.lock

我在最末行看到目前版本是"COCOAPODS: 1.8.4"。目前已經有 1.10.0.rc.1。

或是可以用以下指令查詢 cocoapods 版本:

  • gem which cocoapods
  • pod --version

更新 cocoapods 需要管理者權限:

sudo gem install cocoapods 

執行後我升級到 1.9.3。但升級後並沒有馬上好耶。所以我又照著前一個方法,把專案底下 Pods 相關檔案都移除掉,重新做 pod install,下載安裝了以下模組:

  • Installing Firebase (6.33.0)
  • Installing FirebaseAnalytics (6.8.3)
  • Installing FirebaseCore (6.10.3)
  • Installing FirebaseCoreDiagnostics (1.7.0)
  • Installing FirebaseInstallations (1.7.0)
  • Installing GoogleAppMeasurement (6.8.3)
  • Installing GoogleDataTransport (7.4.0)
  • Installing GoogleUtilities (6.7.2)
  • Installing PromisesObjC (1.2.10)
  • Installing nanopb (1.30906.0)

但還是出現一模一樣的錯誤訊息,沒有推進。Orz


【方法三:調整編譯設定 (Build Settings) 的 VALID_ARCHS】

因為看起來狀況是在 Xcode 11 可編譯、但在 Xcode 12 會出錯,所以查詢的方向改成查詢 Firebase 與 Xcode 12 的關係。

"SwiftUI Previews not working with Firebase" 這篇裡,提到可以在專案設定裡,設置以下內容:

  • 在 Build Settings 把 "Architectures" 裡的 "Build Active Architecture Only" 設成 "No"
  • 在 Build Settings 把 "User-Defined" 裡的 "VALID_ARCHS" 設定裡的 arm64 拿掉。

上述設定如果要用 UI 操作,可以先到專案檢視設定 (Show the Project navigator),打開專案的 *.xcodeproj,切換到 Build Settings 頁籤,找到對應的欄位執行設定。

我們原本設定了 VALID_ARCHS = "arm64 armv7s armv7",我把它全部拿掉。

這個設定之後我會出現新的錯誤訊息:
Uncategorized
PhaseScriptExecution failed with a nonzero exit code

我對著 PhaseScriptException 的錯誤訊息按了兩下後,看到長長的訊息裡有一段長成這樣:

ARCHS[@]: unbound variable

然後找到 "Xcode 12 beta 4 - error compiling for Simulator" 這篇,一開始有人提到要在 Build Settings 裡加入 "arm64"(為什麼有的人建議拿掉、有的人建議加回去啦!),後面有個叫 mvl-dxie 的人提到,要先把 VAILID_ARCHS 的值清掉,再把它整個幹掉。但我這麼做以後只消掉新的 PhaseScriptExecution 錯誤訊息,原本無法編譯 Firebase 模組的訊息又冒出來了。

最後我看到 "Xcode 12 beta 4 - error compiling for Simulator" 這篇的第二頁提到,可以在 VALID_ARCHS 設定 "$(ARCHS_STANDARD)" 這個值。我在在 Xcode 的專案檢視中,看到 Build Settings,捲到最後面找到 VALID_ARCHS,把 $(ARCHS_STANDARD) 填入。輸入後系統會自動轉換成 "armv7 arm64"。

我試過直接設定成 "armv7 arm64",一樣會編譯失敗。只有輸入 $(ARCHS_STANDARD) 才能過關。

 

arrow
arrow
    文章標籤
    ios macOS xcode app
    全站熱搜

    小攻城師 發表在 痞客邦 留言(0) 人氣()