Mach-Oファイル形式(Mach Object- .o
)
iOSの世界では、すべてのソースファイルがオブジェクトファイルに変換されます-ABI [About] Mach-Oファイル[About]は、最終的な実行可能バンドル(例:アプリケーション、フレームワーク...)、ファイル(例:ライブラリ...)にパッケージ化されます。その動作は[About]によって決定されMach-O type
ます
Package
それ自体がファイルとして振る舞うディレクトリです- opaque file
。これは、予期しないプログラムの動作を引き起こす可能性がある内部構造への変更を複雑にするユーザーエクスペリエンスのために作成されます。パッケージはで、Document Package
またはとともに使用されBundle
ます。Show Package Contents
Finderで使用できます
Bundle
バイナリ(実行可能コード)とそのコードのリソース(画像、nibsなど)を整理するための特定の構造を持つディレクトリです。バンドルにはInfo.plist
[About]ファイルが含まれています。バンドルは、開発者向けに作成されました。パッケージ化も可能です。バンドルにはいくつかのタイプがあります。
application bundle
- Application target
framework bundle
そしてversioned bundle
サブタイプとして-Framework Target
loadable bundle
(別名plug-in bundle
)- Bundle target
(UIテストバンドル、ユニットテストバンドル)
- その他(
dSYM
【同梱について】同梱)
Application
- .ipa
、.app
[概要] - packaged
application bundle
-起動可能プログラム。
Tests
- packaged
loadable bundle
バイナリのテストに使用されます。プラグインアーキテクチャにより、新しい機能(テストケース)を別個のモジュールとして既存のバイナリに追加できます。
ライブラリとフレームワーク
InversionOfControlに関するMartin Fowler
ライブラリは基本的に、呼び出すことができる関数のセットであり、最近では通常、クラスに編成されています。各呼び出しはいくつかの作業を行い、クライアントに制御を返します。
フレームワークはいくつかの抽象的なデザインを具体化し、より多くの動作が組み込まれています。それを使用するには、サブクラス化するか、独自のクラスをプラグインすることにより、フレームワークのさまざまな場所に動作を挿入する必要があります。フレームワークのコードは、これらのポイントでコードを呼び出します。プログラムのメインコントロールが逆になり、フレームワークに移動します。(制御の反転)
iOSのライブラリとフレームワーク
Library
1つ以上のアーキテクチャ用にコンパイルされたMach-Oオブジェクトファイルのコレクションです[静的または動的をチェック]。
Static library
- .a
(別名静的アーカイブライブラリ、静的にリンクされたライブラリの共有[ドキュメント]) -あなたがあなたのアプリケーションにそれを追加し、静的なリンカーを中にコンパイル時ライブラリからオブジェクトファイルをマージして1つの実行可能ファイルにアプリケーション・オブジェクト・ファイルと一緒にそれらをパッケージ化しますファイル。欠点は、出力ファイルが大きいことです。
Xcode 9.0以降、Swift静的ライブラリがサポートされています。
Dynamic library
- .dylib
(別名動的共有ライブラリ、共有オブジェクト、動的リンクライブラリ[doc])は、ロード時または実行時にアプリの実行可能ファイルに動的にリンクされますが、コピーされません。実際には、アプリのパッケージには、.dylib
ファイルを含むFrameworksフォルダーが含まれます。すべてのiOSおよびmacOS システムライブラリはdynamic
です。すべての動的ライブラリをコピーしてリンクする必要があるため、短所は起動時間が遅いことです。
[静的リンクと動的リンク]
Text-based stub library
- .tbd
[概要]dynamic library
は、ターゲットデバイスにあるテキストスタブです。その結果、動的ライブラリをバンドルにパッケージ化しないでください。サイズ効果があります。
Framework
別名binary framework
- .framework
は、not packaged framework bundle
(開発者がヘッダーとリソースを簡単に確認できるようにするための)で、コンパイルされたstatic or dynamic
ライブラリ、ヘッダーファイル、リソースが含まれています。
Static framework
static library
リソースとともにパッケージ化されたものが含まれています。
Dynamic framework
dynamic library
およびリソースが含まれています。それに加えて、動的フレームワークには、同じ動的ライブラリの異なるバージョンを1つのバンドルに含めることができます(versioned bundle
)
[静的vs動的フレームワーク]
Embedded framework
あるdynamic framework
アプリのサンドボックスに住んでいます。このタイプはまず、共通のコードとリソースを共有するための拡張用に作成されました。展開ターゲットがiOS 8以降の場合に使用できます。
Umbrella framework
[集計対象]は、他のフレームワークを含むフレームワークです。iOSでは正式にサポートされていないため、開発者が作成することはお勧めしません[公式ドキュメント]。実際には、サブフレームワーク(またはネストされたフレームワーク)のセットです。依存関係のあるフレームワークを作成すると、コンシューマー(アプリなど)がこの依存関係をフレームワークと共にプロジェクトに追加する必要があります。開発者として、この義務を消費者からあなたの義務に移す方法を見つけるのは自然なことです。その結果、あなたはそれUmbrella framework
が救いだと思っていますが、通常、バージョンの管理とそれを作成してサポートする複雑さの深刻な問題につながります。
Fake Framework
-は、として動作する拡張機能static library
付きのバンドルを作成するためのでの特定の操作の結果です。このテクニックは、フレームワークテンプレートがないためにXcodeがフレームワークの作成をサポートしていないときに使用されました。架空のフレームワークの実現の一つ。Xcode 6では、AppleはiOSフレームワークのサポートを追加しました。.framework
dynamic framework
Modular Framework
[概要] -@import
それが含まれているフレームワークであり.modulemap
、ファイル内部を。モジュールにはサブモジュールを含めることができます。主な利点は、を使用してビルド時間を節約できることですModular Framework
。
Universal Library or Framework
(別名Fat)[lipo] [Aggregate target]には複数のアーキテクチャが含まれています。たとえば、リリースビルドは、[ONLY_ACTIVE_ARCH]を介して規制できるいくつかのアーチをサポートする必要がありますBuild Active Architecture Only
Dependency
[概要]サードパーティのコードをターゲットの一部として使用できます。別のプロジェクト、同じワークスペース内のプロジェクト、別のターゲット、ライブラリ、フレームワークなど、多くのソースからのコードを再利用できます。
静的ライブラリを構築して使用する方法:
動的フレームワークを構築して使用する方法[静的に変更]
[Xcodeビルドシステム]
[Xcodeコンポーネント]
[ダイナミックリンカー]