今是昨非

今是昨非

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

Xcode14のコンパイルエラーの修正

背景#

Xcode 14 をアップグレードした後、プロジェクトのコンパイルエラーを修正しました。2 つの種類のコンパイルエラーを修正しました:

  • 1 つはバンドルのコード署名エラーで、Xcode 14 needs selected Development Team for Pod Bundlesというエラーメッセージが表示されます。
  • もう 1 つはModule compiled with Swift 5.6.1 cannot be imported by the Swift 5.7 compilerというエラーメッセージが表示されます。

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

解決策#

Xcode 14 バンドルのコード署名エラー#

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

筆者は 2 つのプロジェクトを持っており、1 つは主に 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 です。その中の解決策の 1 つは、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の設定を区別する必要がなくなります。2 つのプロジェクトで上記のコードを設定すると、いずれも正常にコンパイルできます。

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という手法でarm64 simulator architectureを削除します。

解決策は以下の通りです:

remove arm64 simulator architecture from compiled framework

ちなみに、筆者のコンピュータはMacs running Apple Siliconではなく、Intel チップのコンピュータです。

参考#

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