唯一の安全な解決策 (これをまったく行わないこと以外) は、すべてのシンボルにプレフィックスを付けて依存関係を構築することです。
接頭辞を付ける最も簡単な方法は、古典的な「検索と置換」です。これはエラーが発生しやすいので、.a をヒットし、nm -a
プレフィックスのないシンボルがないか結果を精査することをお勧めします。
2 番目のより安全な方法は、2 パスのコンパイル プロセスを使用することです。
- 最初のパスは依存プロジェクトをビルドし、実行
nm
してすべてのシンボルをヘッダー ファイルにダンプします。
- 2 番目のパスでは、依存プロジェクトが再度ビルドされますが、今回は生成されたプレフィックス ヘッダー ファイルがプリコンパイル済みヘッダーにインポートされます。このプレフィックス ヘッダーは、名前が変更されたシンボルを適切に参照するために、フレームワーク内の依存関係からシンボルを参照する任意の場所で使用する必要があります。
参考までに、これをNimbusで使用して Nimbus プレフィックス ヘッダーを生成します:
https://github.com/jverkoey/nimbus/blob/master/scripts/generate_namespace_header
これにより、プレフィックス付きのバージョンの Nimbus が埋め込まれた .framework を配布できます。
結果の .a をフレームワークにリンクし、サード パーティの開発者が必然的に依存関係の独自のバージョンをプロジェクトにリンクするときに、リンカーの競合を安全に回避できます。