Static, Dynamic Framework


皆さんこんにちはdvhuniです!
2022年の最初のPostは….简単に始めたい
モジュール化の勉強をしているとき、私は一つの感じがします.
静的フレームワークと動的フレームワークが分からない場合は、
勉强している资料の内容を理解するのは难しいです.
Framework/Libraryわかりました...Static? Dynamic? Framework .. 😖 これは何ですか.あくまで.
それは.さあ!西.
今回は、Frameworkについてさらに詳しくまとめてみました.一緒に見ましょう.👀

Framework


Frameworkは、Libraryとは異なるリソースをパッケージにカプセル化する階層化されたファイルディレクトリです.
必要に応じてリソースをメモリにロードし、可能な場合はすべてのアプリケーションでリソースのコピーを共有します.
Frameworkは、静的および動的共有ライブラリなどの機能を提供します.
これは、アプリケーションが特定の操作を実行するために呼び出すことができるルーチンを提供することを意味します.

Dynamic Framework



ダイナミックフレームワークは、複数のフレームワークまたはプログラムで同時に共有できるため、メモリを効率的に使用できます.
ダイナミック接続により、バージョン全体を再構築することなく、新しいフレームワークを使用できます.
Static Linker経由  Dynamic Library Referenceアプリケーションコードにアクセスし、モジュールを呼び出すとStackのライブラリにアクセスします.
💡 XcodeでFrameworkを作成する場合、デフォルトでは動的Frameworkとして作成されます.

Static Framework



静的フレームは、静的リンクによって静的ライブラリコードをアプリケーションコードに格納し、heapメモリに格納します.
これにより、静的ライブラリがコピーされ、静的フレームが複数のフレームで使用されている場合、コードが重複します.
このライブラリはFrameworkのコピー先ではなく静的ライブラリにあるため、Bundleの場所は静的Frameworkの場所ではなく静的ライブラリです.
したがって、バンドルにアクセスするには、外部から Bundleの場所を入力することをお勧めします.
したがって
ダイナミックフレームワークを使用すると、ソースコードをコピーする静的フレームワークよりもよく見えます.
しかし、動的Frameworkの過度な使用はApp Launch時間を増加させる.
💡 LibraryとFrameworkの単語が混ざっていると混同される可能性があるので言っておきましょう
Libraryは実行可能なコードにすぎません.
Frameworkは、共有ライブラリ、ヘッダ、その他のリソースを含むサブディレクトリの束(ディレクトリ構造)です.

App Launch Time


Apple’s Reducing Your App’s Launch Time articleは正確な数字に言及しなかった.
ダイナミックモジュールでは、Total App Launch Timeを追加する方法について説明します.
App Launch Timeでは、Apple’s Logging Dynamic Loader Eventsのオプションを使用してチェックできます.
あるいはメーターを使って検査することもできます.
(自分でやってみましたが...あまりよくありません...へへへ...これをもう一度やってみます.また、位置を決めてあげます.🥲)
Total pre-main time:  95.07 milliseconds (100.0%)
	         dylib loading time:  25.00 milliseconds (26.3%)
	        rebase/binding time:  19.75 milliseconds (20.7%)
	            ObjC setup time:   6.85 milliseconds (7.2%)
	           initializer time:  43.45 milliseconds (45.7%)
	       slowest intializers :
	         libSystem.B.dylib :   8.43 milliseconds (8.8%)
 libBacktraceRecording.dylib :   9.00 milliseconds (9.4%)
  libMainThreadChecker.dylib :  22.05 milliseconds (23.1%)
LanuchTimeを減らすには、動的Frameworkの数を制限し、StaticFrameworkの使用を推奨する必要があります.

CocoaPods


もしそうなら、多くのプロジェクトがCoCoPodsに依存しているのではないかと疑っています.
CocoaPodsはどのように構成されているのでしょうか
デフォルトでは、CocoaPodsはすべての依存項目をStatic Libraryにリンクして構築します.use_frameworks!キーワードをpdofileに追加する場合は、動的Frameworkを使用してリンクおよび構築を行います.
あとuse_frameworks! :linkage => :static  キーワードはStatic Frameworkのようにリンクされ、構築されます.
詳細は文書を参照してください.
ちなみにSWIFT Package Managerを見てみましょう

Swift Package Manager


SPMではリンクや構築方法の設定はできません.
SPMはすべてStatic Library
Package.swiftファイルで設定できます.パッケージのownerだけが設定できるので、ユーザーが設定しても無駄です.

终わりの时..。


Building a dynamic modular iOS architecture
👆上の文章を参考にして、モジュール化の研究を行っています.フレームワークを説明して...
あまり理解していなかったので通り過ぎてしまいました…内容についていけない.
でも今は少し分かったような...へへへ:)
今日は简単にポスター终わりました!(生で食べる)
しかし、私はまたアプリケーションの実行速度に影響する要素を知っています!!
私たちのアプリはどれくらいLaunch Timeがあるのか~~~見に行きます🏃‍♂️
この文章を読んでくれてありがとう!🙇
次の文章では👋
いつでも質問やアドバイスを歓迎します😉
関連項目:
https://minsone.github.io/ios/mac/ios-framework-part-1-static-framework-dynamic-framework
https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Frameworks.html#//apple_ref/doc/uid/10000183-SW1
https://bpoplauschi.github.io/2021/10/25/Advanced-static-vs-dynamic-libraries-and-frameworks.html