2

大きなプロジェクト (A としましょう) があり、アプリ B を使用している一部の人が、私のアプリの一部を自分のアプリに入れたいと考えていたので、彼らのアプリに追加するフレームワークを作成しました。それを作成する手順は、自分のアプリのコードをきれいにして、必要なものに関連するものだけを残して、そこからフレームワークを作成し、フレームワークを使用してデバッグしてすべてが機能することを確認するサンプルアプリを作成することでした. これまで、フレームワークに関して私が行ったことは、アプリ (A) のすべてのフレームワークをサンプル アプリに追加したことでした。

今、私はフレームワークとサンプルアプリから物事や残り物を一掃するところまで来ました.Bアプリの人に送る前に. そのため、サンプル アプリからフレームワークを 1 つずつ削除し始めました。デバイスでビルドして実行するたびに、すべてが完璧に機能するたびに。2〜3フレームごとに停止してビルドクリーンを行い、iPhoneからアプリを削除しましたが、それでもすべてが機能します。Aアプリフレームワーククラスの1つに具体的にインポートした特定のフレームワークを削除してしまいましたが、引き続き機能します。私の最後の手段は、UIKit フレームワークと Foundation フレームワークの両方を削除することでした。それでも完璧に動作します。ディープ クリーンを実行し、iPhone からアンインストールし、DerivedData フォルダーの内容を削除し、コンピューターを再起動しましたが、すべてがコンパイル、ビルド、動作します。

私の知る限り、フレームワークを使用せずに A アプリのフレームワークをコンパイルしています (フレームワーク内でフレームワークをコンパイルすることさえ可能ですか?)。私のフレームワークは、このすばらしい git で構築されています: iOS Universal Framework Mk 8 (偽物ではなく本物のフレームワークを作成しています)。

どのフレームワークが役に立たず、削除できるかを確認したいので、基本的にこれらすべてに関心があります。私のプロジェクトは大きすぎて、フレームワークを使用しているかどうか、誰が使用しているかを確認できません。

を使用してXcode 5.0.1, ios7 SDK, iphone5cいます。削除したすべてのフレームワークがセクションに残っていないことを確認しましたLink binary with Libraries...

これらは、サンプル アプリ プロジェクトから削除したフレームワークです: CoreGraphics CFNetwork SystemConfiguration MobileCoreServices QuartzCore CoreData StoreKit AdSupport( <-赤くなったことに対して応答を得た唯一のフレームワーク)AVFoundation CoreText XCTest UIKit Foundation

ヘルプやアイデアをお寄せいただきありがとうございます (:

4

2 に答える 2

0

C でコードからバイナリに移行するプロセスは、複数のステップからなります。前処理、コンパイル、リンク、ロード。

  1. ソース (.c/.m) は前処理されて .i ファイルになります (コメントの削除、マクロの評価など)。
  2. 前処理されたコード (.i) は、lexed、解析され、アセンブリ (.s) にコンパイルされます。
  3. アセンブリ (.s) は、オブジェクトまたはライブラリ ファイル (.o/.so/.a) のマシン コードにコンパイルされます。
  4. オブジェクト ファイル (.o/.a) は、1 つのバイナリにリンクされます。
  5. 実行時に、システムは実行可能ファイルに必要な共有ライブラリ (.so) を特定し、それらをロードします。

ライブラリを構築していると、ステップ 3 の後にコンパイルが停止するため、実際にライブラリ バイナリを用意する必要はありません。必要なのは、関数 (および typedef、構造体、マクロなど) を宣言するためのヘッダー ファイルだけです。ただし、ライブラリを使用する人は手順 4 と 5 を実行するため、ライブラリ バイナリが必要になります。

于 2013-10-30T14:48:30.323 に答える