2

会社の内部で使用するために、4つの異なるアプリをフォークするプロジェクトがあります。

メインのプロジェクトコアは同じです。最初は4つのターゲットで大きなアプリを作成することを考えましたが、一部のチームがエンジンだけで作業でき、他のプログラマーが各ターゲットで作業できるように、エンジンをターゲットから離しておく必要があります。

プロジェクトをプロジェクト内に埋め込むことができ、4つのターゲットを持つより大きなプロジェクト内に、すべてのターゲットに共通のエンジン部分を埋め込むことができれば便利だと誰かが教えてくれました。

出来ますか?

それ、どうやったら出来るの?それを行う方法を説明するチュートリアルはありますか?

ありがとう

4

2 に答える 2

1

既存の回答とコメントには、異なるはずのいくつかのものが混在していると思うので、私の回答...

あなたはすでにそれを理解しているように見えるので、私はあなたのアプリプロジェクトの複数のターゲット部分を意図的に除外していることに注意してください。私の答えは、ライブラリを構築するサブプロジェクトの使用に集中しています。

プロジェクト内にプロジェクトを埋め込むことができ、すべてのターゲットに共通のエンジン部分を、4 つのターゲットを持つより大きなプロジェクト内に埋め込むことができれば便利だろうと誰かに言われました。

サブプロジェクトは Xcode の優れた機能です。これを行うには、最初にスタティック ライブラリ テンプレートを使用するプロジェクトを作成することをお勧めします。

ここに画像の説明を入力

次に、コア エンジンを作成するために必要なすべてのファイルをその新しいプロジェクトに追加します。これをさらに engine-library-project と呼びます。

それが完了したら、アプリを作成する新しいプロジェクトを作成します。既存のプロジェクトを使用することもできますが、そのプロジェクトからすべてのエンジン実装ファイルを削除してください (リンカー エラーを防ぐため)。

ここで、engine-library-project と app-project の 2 つのプロジェクトを作成したとします。

次に、組み合わせ部分です。まず、engine-library-project が閉じられていることを確認し、app-project が Xcode 内で開かれていることを確認します。

engine-library-project バンドル (.xcodeproj) をファインダーから app-project に直接ドラッグします。

ここに画像の説明を入力

あとは、app-project が engine-library にリンクしていることを確認するだけです。これを行うには、 Link Binary With Librariesタブの下部にある小さなプラス記号をタップする必要があります。

ここに画像の説明を入力

ポップアップする選択ダイアログには、ライブラリが最初のオプションとしてリストされます。

ここに画像の説明を入力

ここで、すべての engine-library ヘッダーがヘッダー検索パスに追加して、アプリ プロジェクトに表示されるようにします。

ここに画像の説明を入力

すべてを正しく実行し、重要な手順を省略していなければ (省略していたらすみません)、アプリはライブラリ サブプロジェクトを使用して完全に正常にビルドされるはずです。

これらの手順がすべて適切に完了したら、エンジン ライブラリを他の開発者に配布するためのオプションを検討することもできます。source-project で git-submodule を使用することもできますが、結果のライブラリのみで git-submodule を使用することもできます。そうすれば、他の開発者がエンジン ライブラリをいじることができなくなります。これは、(多くの場合、私の経験から) 良いことです。

于 2013-03-16T20:44:16.387 に答える
1

はい 可能です。6 つの異なるターゲットを持つプロジェクトを作成しました。ええと、ここでは、すべてのターゲットに共通のクラスを追加できますが、特定のターゲットに関連する個別または固有の機能を実行するクラスは、対応するターゲットに追加できます。エンジンは共通にする必要があると言う部分がわかりません。 (すべてのターゲットに共通のクラスを追加するだけです)。iOS では、エンジンとは AppDelegate クラスのことだと思います。

エンジン (AppDelegate) のターゲットを認識し、それに応じて関数をカスタマイズするには、プリプロセッサ フラグとその他の C フラグのビルド設定に値を指定して、プリプロセッサ ディレクティブを追加する必要があります。

ただし、ほとんどのことが各ターゲット間で共通であり、他のターゲットのカスタマイズがほとんど必要ない場合は、このような概念を実装するのが賢明です。

于 2013-03-16T19:37:59.587 に答える