web-dev-qa-db-ja.com

Xcodeプロジェクトで静的ライブラリターゲットをフレームワークターゲットに変換する

静的ライブラリを生成するXcodeプロジェクトがあります。私のチームはSwiftですべての新しい開発を計画しています。 Swiftファイルを静的ライブラリプロジェクトに追加することはできません 。iOS 7のサポートを終了しているため、iOSアプリにフレームワークを含めることができるようになりましたしたがって、静的ライブラリプロジェクトをフレームワークプロジェクトに変換するつもりです。

調べましたが、この変換を実行するためのツールやアドバイスは見つかりません。静的ライブラリが大きい(100を超える.mファイル)。

新しい並列フレームワークターゲットを作成するよりも良い答えを期待しています。私はこれを2回試みました。 Swiftターゲットとしては初めてですが、すべてのObjective Cファイルを簡単にインポートすることはできませんでした。次に、Objective Cターゲットとして、.pchがなくなりました。

21
Jeffery Thomas

静的/動的リンクフレームワークを静的リンクライブラリから変換するには、

  1. 既存の静的リンクライブラリプロジェクトにTARGETとして新しいCocoaタッチフレームワークを追加します。
  2. ビルドフェーズで、すべての.m、.mm、.c、.cpp、.metalなどを静的リンクフレームワークターゲットの「\ビルドフェーズ\コンパイルソース」フェーズに追加します。
  3. 公開するヘッダーを「\ Build Phases\Headers」に配置します。
  4. 動的にリンクされたフレームワークについては、ビルド設定のMach-Oタイプ設定を必ず確認してください。 Swiftを使用する場合は、Mach-Oタイプがダイナミックリンクフレームワークになるようにダイナミックライブラリとして設定する必要があります。静的リンクフレームワークの場合、Mach-Oタイプを静的ライブラリとして設定する必要がありますが、変換された静的リンクフレームワークではSwiftを使用できません(objective-c、objective-c ++、 C++、Cなどを使用できます)。

次に、このフレームワークを使用するアプリの場合は、#importとしてヘッダーを含め、フレームワークをアプリターゲットの「Build Phases\Link Binary With Libraries」に追加するだけです。変換されたフレームワークがダイナミックリンクフレームワークである場合は、それを「組み込みバイナリ」に配置する必要があります。

10
joseph

誰かが手動でフレームワークを作成し、module.frameworkファイルを作成して、すべてのヘッダーファイルをmodule.framework/Headersフォルダーにコピーしているのを見ました。このソリューションは機能しているようです。プロジェクトはファイルを正しくインポートし、フレームワークとして正しく認識できます。

これがタフな最善の方法であるかどうかはわかりませんが、ATMがcocoapodsを介して静的ライブラリをインポートしているという大きなプロジェクトで試していますが、一部のクラスの可視性に問題があるようですフレームワークを使用します。

2
Andrea Cresta