読者です 読者をやめる 読者になる 読者になる

Pragmatic ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

iOSのFrameworkのVersionについて

Frameworkにはversionがいくつかあってそれらの違いの雑な説明です。

その1

ひとつはお馴染みのinfo.plistに書くやつ これはちょっと省きます

その2

Umbrella Headerに書いてあるやつ

FOUNDATION_EXPORT double FwVersionNumber;
FOUNDATION_EXPORT const unsigned char FwVersionString[];

Build SettingsのCurrent Project Versionがこれにあたります

Frameworkをコンパイルするとわかるんですが、 (ここでは例としてFwというframeworkをつくります)

Compile Fw_vers.c

というcのファイルが勝手に生成されてコンパイルされてます。 中身を見てみると

 extern const unsigned char FwVersionString[];
 extern const double FwVersionNumber;

 const unsigned char FwVersionString[] __attribute__ ((used)) = "@(#)PROGRAM:Fw  PROJECT:Fw-10" "\n";
 const double FwVersionNumber __attribute__ ((used)) = (double)10.;

とこんな感じでxxVersionNumberとxxVersionStringが定義されてます。

Umbrella Headerではこれらをexternしているので、Frameworkを利用しているプログラムはこれらの変数を使うことができます。

その3

Framework VersionのAとかはFrameworkの中身のフォルダ構成を見ての通りでCurrentさしているディレクトリになります

Anatomy of Framework Bundles

その4

current library versionとcompatibility versionについてですが、

Link時のビルドログをみるとわかるようにこれらの値はclangのオプションとして渡されて使われる感じになります。

clang ...  -compatibility_version 1 -current_version 1

詳しくはこの辺を読むと良いのではないでしょうか

developer.apple.com

現場からは以上です。