今是昨非

今是昨非

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

Xcode14のコンパイル失敗の修正

背景#

Xcode 14 にアップグレード後、プロジェクトのコンパイルが失敗しました。修正したコンパイルエラーは 2 種類です:

  • 一つは 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

最初のエラーは比較的簡単に解決できますが、2 つ目は少し手間がかかります。解決策は以下の通りです:

解決#

Xcode 14 bundle code sign error#

この問題の解決策は、直接 Google で検索し、最初の stackoverflow のリンクはXcode 14 needs selected Development Team for Pod Bundlesです。ここで提案されている解決方法は、Podfile に以下のコードを追加し、Pod installを実行して、Pod ライブラリのDEVELOPMENT_TEAMを開発者アカウントのチームに設定することです。

筆者は 2 つのプロジェクトを持っており、そのうちの一つは Swift が主で、以下の設定方法を試したところ、解決できました。プロジェクトに複数のターゲットがあり、ターゲットの開発者チームが異なる場合は、設定を区別する必要があります。以下のコメントのコードを参考にしてください。

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 チップのコンピュータです。

参考#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。