Xcode 10 使用了新的 build system,導致有使用 Crashlytics 框架的專案,其整合方式需要作些微調整。在說明之前,先看看以下引用自 Fabric 官方文件的片段:
Warning
If you’re using Xcode 10 on a new project, Xcode 10 adopts a new build ordering that is independent of the ordered list in the Build Phases of Xcode. Put "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)" into your Fabric Run Script’s “Input Files” section to ensure your installation of Fabric goes smoothly.
主要是因為在 Xcode 10 的 Build Phases 中,Run Script 若是彼此之間沒有相依性,或是它所依賴的目標檔案已經可取得,那麼這些 Run Script 將會以平行處理的方式執行。在 Xcode 10 的
Build System Release Notes 中寫了這麼一段:
- In the new build system, shell scripts can't rely on the state of build artifacts not listed in other build phases (for example, the Info.plist file or .dSYM files.) Add files the script build phase depends on as explicit input dependencies to the shell script build phase. (40852184)
因此像 Fabric 的 Run Script 需要參考 Info.plist,或是其他
需要參考 .dSYM 的案例,都必須在 Run Script 的 Input Files 中加入參考檔案的路徑。以 Crashlytics 為例,就是加入
$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH) 。不加的話很可能目標檔案的最終版本還沒產生,Run Script 就已經被執行了。
關於新的 build system 細節可以參考
這篇文章。
當然開發者也可以參照
這篇將 Workspace Settings 改成 Legacy Build System,但相對的就無法發揮 Xcode 10 新的 build system 的最大效用了。
我是 Lefty,一位低調的 iOS 開發者。
我的 Medium:https://medium.com/@lefty.
我的 vocus:https://vocus.cc/user/@lefty