今是昨非

今是昨非

日出江花红胜火,春来江水绿如蓝

Xcode14編譯失敗修改

背景#

升級 Xcode 14 後,專案編譯失敗需要進行修改,共修改了兩種編譯錯誤:

  • 一種是 bundle code sign error,Xcode 14 needs selected Development Team for Pod Bundles
  • 一種是Module compiled with Swift 5.6.1 cannot be imported by the Swift 5.7 compiler

其中第一種比較容易解決,第二種稍微麻煩一點,解決方案如下:

解決#

Xcode 14 bundle code sign error#

這個問題的解決方案很簡單,直接 Google,第一個 stackoverflow 的連結是Xcode 14 needs selected Development Team for Pod Bundles,這裡提供的解決方法是,在 Podfile 中增加下面的代碼,然後運行Pod install,將 Pod 庫的DEVELOPMENT_TEAM設置為開發者帳號的 team。

筆者有兩個專案,其中一個是以 Swift 為主,使用了下面的設置方法試了一下,可以解決問題。需要注意的是,如果專案有多個 target,且各個 target 的開發者 team 不同,需要進行區分設置,可以參考下面註釋的代碼。

post_install do |installer|
  installer.generated_projects.each do |project|
    project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings["DEVELOPMENT_TEAM"] = "Your Team ID"
#            if target.name == 'test'
#            config.build_settings["DEVELOPMENT_TEAM"] = "Your Team ID"
#          else
#            config.build_settings["DEVELOPMENT_TEAM"] = "Your Another Team ID"
#          end
         end
    end
  end
end

然而,對於筆者的另一個 OC 專案,按照這個方法設置卻一直無效,真是奇怪。所以筆者又找到了另一個解決方案,來自 CocoaPods 的 issue,Xcode 14 build failed with manual code sign and app resource bundles ,其中的解決方案之一是將CODE_SIGN_IDENTIFY設置為空,如下所示:

post_install do |installer|
  installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
          config.build_settings['CODE_SIGN_IDENTITY'] = ''
      end
  end
end

這種方法避免了區分設置DEVELOPMENT_TEAM的情況,在兩個專案中使用上述代碼都可以成功編譯。

Module compiled with Swift 5.6.1 cannot be imported by the Swift 5.7 compiler#

這個錯誤一看就知道是 Swift 版本不兼容,再仔細看錯誤,應該能看到提示的庫是第三方 SDK 的,對於筆者的專案來說是使用 Carthage 集成的 SDK。嗯,應該是使用 Carthage 編譯的 xcframeworks 導致的,所以就去重新編譯 xcframeworks,但是在編譯的過程中,Moya庫一直編譯失敗,手動編譯Moya後發現在真機上編譯成功,在模擬器上卻失敗,報錯Could not find module 'Alamofire' for target 'x86_64-apple-ios-simulator';,很難搞。在這個地方找解決方法找了很久,最後還是在Using Carthage with Xcode 12這裡找到了解決方法,這個方法可以remove arm64 simulator architecture from compiled framework

解決方法如下:

remove arm64 simulator architecture from compiled framework

順便說一下,筆者的電腦並不是Macs running Apple Silicon,而是使用 Intel 芯片的電腦。

參考#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。