web-dev-qa-db-ja.com

静的ライブラリとモジュールマップファイルをSwiftで使用する方法

Swiftプロジェクトにサードパーティの静的ライブラリを含めようとしています。他にも数ある中で、これら2つのファイルがあります。

GoogleConversionTrackingSDK/ACTReporter.h GoogleConversionTrackingSDK/libGoogleConversionTracking.a

ターゲットの「リンクされたフレームワークとライブラリ」セクションに.aファイルを追加しました。次に、プロジェクトにmodule.mapファイルを次のように作成しました。

module GoogleConversionTracking {
    header "../../Libs/GoogleConversionTrackingSDK/ACTReporter.h"    
    export *
}

そしてSwiftファイルで私は今それを参照することができます:

import GoogleConversionTracking

しかし、リンク時にエラーが発生します。

ld:-lGoogleConversionTrackingのライブラリが見つかりません
clang:エラー:リンカーコマンドが終了コード1で失敗しました(-vを使用して呼び出しを確認してください)
注:-lGoogleConversionTrackingのライブラリが見つかりません

これをどのように修正しますか?ブリッジヘッダーを使用せずに、可能であれば、これらのモジュール定義ファイルを使用します。

6
Rob N

モジュールマップは私のトラブルの代名詞です!ブリッジヘッダーは機能しませんが、ほとんどの場合に機能します。とにかく、次のことを確認してください。

  • 構成Swift_INCLUDE_PATHS – Swiftコンパイラが追加のSwiftモジュールを検索するパスのリスト。これにより、Xcodeにモジュールマップの場所が通知されます。
  • 構成LIBRARY_SEARCH_PATHS –これは、製品が使用するライブラリーのリンカーが検索するフォルダーへのパスのリストです。 Xcodeは、モジュールのバイナリがどこにあるかを知る必要があります。

また、ヘッダーだけでなく、アンブレラヘッダーを使用することもできます。詳細は documentation を参照してください。また、modulemap拡張子を使用することをお勧めします。module.mapが違いをもたらすかどうかはわかりませんが、ほとんどのプロジェクトでそれを確認して使用したことを覚えています。

Omar Abdelhafithはこの問題について邪悪な ブログ投稿 を持っています。また、そのようなことを扱うときに 他の人がそれを行う方法 を確認するのにも役立ちます。

4
Ian Bytchek