Xcode 内のバイナリを手当たり次第に探してヘッダーファイルを抽出する。

Xcode Plugin プログラミング

Xcode のプラグインを作っていて知らないオブジェクトに出会ったときに、都度それが持つ機能を調べなくても良いように、Xcode アプリ内のバイナリから手当たり次第にヘッダーファイルを抽出するスクリプトを作ってみました。

Xcode.app 内のバイナリからヘッダーファイルを抽出するスクリプト

Xcode のプラグインを作っていると、Xcode の機能を作るオブジェクトの数々が非公開なものだから、知らないものにたくさん出会います。

そんなとき、それがどのフレームワークで提供されていて、どんな機能が実装されているかを都度探さなくてもいいように、Xcode アプリの中にあるバイナリを手当り次第に探してヘッダーファイルを抽出するスクリプトを作ってみました。

言語 スクリプト (GitHub)
Swift 1.2 GenerateFrameworkHeadersInXcode
Swift 1.1 GenerateFrameworkHeadersInXcode

このスクリプトでは、バイナリファイルからヘッダー情報を抽出するコマンドclass-dump を使用します。このコマンドのインストール方法はこちら で紹介しています。

スクリプトの動作

このスクリプトを実行すると、カレントディレクトリに Xcode-Header ディレクトリが作られて、その中に /Applications/Xcode.app 内にあるバイナリを手当たり次第に探して、見つかったバイナリの実装がヘッダーファイルに抽出されます。

生成されるヘッダーファイルの名前は /Applications/Xcode.app よりも下のパス情報をハイフンで連結して、最後にバイナリファイル名.h という名前で保存されます。

生成対象のバイナリは、このスクリプト内で拡張子で指定してあります。必要なバイナリのヘッダーファイルが生成されない場合は、そのバイナリの拡張子を追加するなどしてください。

使用方法

このスクリプトは、ターミナルで次のようにして実行できます。

swift GenerateFrameworkHeaders.swift

こうすることで、Xcode アプリ内にあるバイナリの実装が書かれたヘッダーファイルが Xcode-Headers フォルダーに抽出されます。

なお、このスクリプトは C による中断の機能を実装していません。全てのヘッダーファイルを抽出するのにそこそこ時間がかかるので気をつけてください。

あらかじめ chmod +x GenerateFrameworkHeaders.swift を実行して実行権限を設定しておけば、./GenerateFrameworkHeaders.swift として使用できます。