Info.plistからビルド環境を調べる

アプリやライブラリをリリース後、不具合修正が必要になったときに、当時のビルド環境が必要になることがあります。通常は修正時点での最新版の環境を使用すれば問題ないでしょう。しかし、例えば次のような理由で当時のビルド環境が必要なことがあります。

  • 影響範囲をできるだけ狭めた上で特定の不具合だけを修正したい
  • 動作環境の都合でどうしても最新版のXcodeを使用できない
  • ライブラリの依存関係に問題がある
  • Xcodeに組み込んだサードパーティのコンパイラが正式対応しているXcodeのバージョンが必要

私はビルド環境を書いたドキュメントをコードリポジトリに入れておいたり、リリースノートや配布資料と一緒に入れておくなどして、記録を残すようにしています。

この記事では、記録を残していなかったときに、調べる方法について解説します。

目次

Xcodeのバージョンが異なると何が変わる

Xcodeのメジャーバージョンが異なると、Xcodeに付属しているクロスプラットフォームSDKのバージョンが異なります。クロスプラットフォームSDKはUIKitやAppKitなど、OSが提供しているフレームワークを利用するためのSDKです。

ビルド時に使用したクロスプラットフォームSDKのバージョンが異なると、同じOS上でもアプリの動作が変わることがあります。過去に筆者の経験では、NSTableViewのテーブルヘッダのデザインや余白が変わった事がありました。NSBitmapImageRepでデコードされたときに、ビットマップの垂直方向の格納方法が上下逆になったこともありました(macOS 10.5とかのときです。特定のファイルフォーマット限定だったと思います)。macOS 11で動かしたときに、取得できるOSバージョンが古いSDKでリンクしていると、10.16となり、新しいSDKでは11.0となることもありました。

Xcodeのリリースノートにはこれらについて書かれていることが多いですが、書かれていない場合もあります。

Info.plistファイルについて

macOSやiOSなどのApple Platform上では、アプリは.appという拡張子を持ったアプリケーションパッケージになっています。また、フレームワークは.frameworkという拡張子を持ったバンドル形式になっています。

これらのバンドルにはInfo.plistファイルが入っています。Info.plistファイルは開発時にバージョン番号をなどを入れてビルドします。開発者が入力した情報が書かれていますが、その他に、コンパイラやリンカが追加した情報があります。自動的に追加された情報の中にビルド環境に関する情報があります。

ビルド環境に関する情報

Info.plistファイルに追加されるビルド環境に関する情報は以下の通りです。私の予想になっているものは「?」を付けています。

キー説明
BuildMachineOSBuildビルド時のOSのビルド番号
DTCompilercom.apple.compilers.llvm.clang.1_0
DTPlatformBuildプラットフォームSDKのツールチェーンバージョン?
DTPlatformNameプラットフォームSDKのプラットフォーム名
DTPlatformVersionプラットフォームSDKの対象バージョン
DTSDKBuildプラットフォームSDKのビルド番号
DTSDKNameプラットフォームSDKの名前
DTXcodeXcodeのバージョン
DTXcodeBuildXcodeのビルド番号
ビルド環境に関する情報

macOSアプリの例

私がビルドしたあるmacOSアプリの例です。次のようにInfo.plistに書き込まれていました。

キー説明
BuildMachineOSBuild21G217
DTCompilercom.apple.compilers.llvm.clang.1_0
DTPlatformBuild14A400
DTPlatformNamemacosx
DTPlatformVersion12.3
DTSDKBuild21E226
DTSDKNamemacosx12.3
DTXcode1401
DTXcodeBuild14A400
macOSアプリの例

このアプリをビルドした環境は、macOS 12.6.1 + Xcode 14.0.1 です。

WikipediaにOSのビルド番号の一覧があり、確認すると、21G217macOS 12.6.1という記載があります。また、DTXcodeは上位2桁がメジャーバージョン、3桁目がマイナーバージョン、4桁目がリビジョンなので、140114.0.1です。

iOSアプリの例

私がビルドしたiOSアプリの例です。次のようにInfo.plistに書き込まれていました。

キー説明
BuildMachineOSBuild21G217
DTCompilercom.apple.compilers.llvm.clang.1_0
DTPlatformBuild20A360
DTPlatformNameiphonesimulator
DTPlatformVersion16.0
DTSDKBuild20A360
DTSDKNameiphonesimulator16.0
DTXcode1401
DTXcodeBuild14A400
iOSアプリの例

このアプリをビルドした環境は、macOS 12.6.1 + Xcode 14.0.1 です。

WikipediaにOSのビルド番号の一覧があり、確認すると、21G217macOS 12.6.1という記載があります。また、DTXcodeは上位2桁がメジャーバージョン、3桁目がマイナーバージョン、4桁目がリビジョンなので、140114.0.1です。

また、DTPlatformNameiphonesimulatorとあるように、iOSシミュレータ用にビルドしています。また、SDKはDTPlatformVersion16.0になっていので、iOS 16用のSDKが使われていることがわかります。

著書紹介

Authored Books

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Akira Hayashi (林 晃)のアバター Akira Hayashi (林 晃) Representative(代表), Software Engineer(ソフトウェアエンジニア)

アールケー開発代表。Appleプラットフォーム向けの開発を専門としているソフトウェアエンジニア。ソフトウェアの受託開発、技術書執筆、技術指導・セミナー講師。note, Medium, LinkedIn
-
Representative of RK Kaihatsu. Software Engineer Specializing in Development for the Apple Platform. Specializing in contract software development, technical writing, and serving as a tech workshop lecturer. note, Medium, LinkedIn

目次