web-dev-qa-db-ja.com

iOSは静的または動的なフレームワークですか?

これはばかげた質問のように聞こえるかもしれませんが、サードパーティのParty.frameworkファイルがある場合、それが静的か動的かわかりますか?つまり、中を見ると違うと思いますか?

41
MyFlashLab

どちらでもかまいません。

ただし、iOS8 +のみがApp Bundleで動的フレームワークを許可します。

見つける方法は、.frameworkを調べて、メインファイルでfileコマンドを使用することです。

$ cd iOS/Crashlytics.framework
$ ls -l
total 9984
-rwxr-xr-x  1 andy  staff  4710656 11 Sep 17:11 Crashlytics
drwxr-xr-x  8 andy  staff      272 11 Sep 17:11 Headers
-rw-r--r--  1 andy  staff     1553 11 Sep 17:11 Info.plist
drwxr-xr-x  3 andy  staff      102 11 Sep 17:11 Modules
-rwxr-xr-x  1 andy  staff   146164 11 Sep 17:11 run
-rwxr-xr-x  1 andy  staff   241688 11 Sep 17:11 submit
$ file Crashlytics 
Crashlytics: Mach-O universal binary with 5 architectures
Crashlytics (for architecture armv7):   current ar archive random library
Crashlytics (for architecture armv7s):  current ar archive random library
Crashlytics (for architecture i386):    current ar archive random library
Crashlytics (for architecture x86_64):  current ar archive random library
Crashlytics (for architecture arm64):   current ar archive random library

ここで、ar archiveは「静的ライブラリ」を意味します。

または、「動的」フレームワークは次のようになり、動的にリンクされていることを明示的に示します。

$ cd /Library/Frameworks/iTunesLibrary.framework/
$ ls -l
total 40
lrwxr-xr-x  1 root  wheel   24 10 Sep 17:38 Headers -> Versions/Current/Headers
lrwxr-xr-x  1 root  wheel   24 10 Sep 17:38 Modules -> Versions/Current/Modules
lrwxr-xr-x  1 root  wheel   26 10 Sep 17:38 Resources -> Versions/Current/Resources
drwxr-xr-x  4 root  wheel  136 10 Sep 17:41 Versions
lrwxr-xr-x  1 root  wheel   22 10 Sep 17:38 XPCServices -> Versions/A/XPCServices
lrwxr-xr-x  1 root  wheel   30 10 Sep 17:38 iTunesLibrary -> Versions/Current/iTunesLibrary
$ file Versions/Current/iTunesLibrary 
Versions/Current/iTunesLibrary: Mach-O universal binary with 2 architectures
Versions/Current/iTunesLibrary (for architecture i386): Mach-O dynamically linked shared library i386
Versions/Current/iTunesLibrary (for architecture x86_64):   Mach-O 64-bit dynamically linked shared library x86_64
95
trojanfoe

このコマンドを使用して、フレームワークのリストを含むパスからすべての静的フレームワークをリストします。

find -E . -type f -iregex ".*\.framework\/[^./]*" -exec file {} \; | grep ': current ar archive' | sed 's/.*\/\(.*.framework\).*/\1/'
0

ありがとう@trojanfoe

短い答えは file コマンドを使用することです。単純に、アーキテクチャの詳細、オブジェクトファイル形式などを含むファイルのタイプを出力します。

file <path_to_binary>
file <name>.a //static library
file <name>.dylib //dynamic library
file .../<framework_name>.framework/<framework_name>

current ar archive random library-静的ライブラリ
dynamically linked shared library-動的ライブラリ

静的vs動的
語彙

0
yoAlex5