XCodeの環境変数の一覧
以前、Scripting Bridgeついて調べていたときBridge用のヘッダファイルを生成するのにXCodeのビルドフェーズでカスタムスクリプトを追加してScripting Bridge用のヘッダーファイルを生成するというテクニックがAppleのサンプルにあって、それは
sdef "$INPUT_FILE_PATH" |
sdp -fh -o "$DERIVED_FILES_DIR" --basename "$INPUT_FILE_BASE"
--bundleid `defaults read "$INPUT_FILE_PATH/Contents/Info" CFBundleIdentifier`というものだったのですが、デバッグ時に$INPUT_FILE_PATHとか$DERIVED_FILES_DIR・$INPUT_FILE_BASEとかの環境変数の具体的な値がわからず往生した記憶があって「カスタムシェルを実行する場合、ある程度環境変数を抑えておかないと不便だよなぁーって」ずっと気になっていたのですが、ようやく調べてみました。
なお、環境変数の詳しい一覧はXcode Build Setting Reference: Build Setting Referenceにあります(わからなかったのは具体的な値です、念のため)。適当なプロジェクト(showvar)をでっち上げ、環境変数をechoして${DERIVED_FILE_DIR}/xcode_env_variables.txtにリダイレクトするシェルを食わせました。もちろん、xcode_env_variables.txtファイルは検索しましたよ。(ホラ、困るでしょ?)
最初はひとつひとつリストアップしていたのですが、さすがに面倒だし、perlの勉強中ということもあるので
#!/usr/bin/perl
use strict;
use URI::Fetch;
use HTML::TagParser;
my $html
= HTML::TagParser->new(
"http://developer.apple.com/documentation/DeveloperTools/Reference/
XcodeBuildSettingRef/100-Build_Setting_Reference/
build_setting_ref.html#//apple_ref/doc/uid/TP40003931-CH3-SW105"
);
foreach my $elem ($html->getElementsByTagName("h3"))
{
my $tagname = $elem->tagName;
my $text = $elem->innerText;
next if $text eq "";
$text =~ s/(\w)(\s\(.+\))/$1/;
print "echo $text:\${$text} >> \${DERIVED_FILE_DIR}/xcode_env_variables.txt\n";
}で、リストアップ。これをカスタムスクリプトのエディットに貼り付けました。
XCodeはノーマルなインストール。プロジェクトは${HOME}/temp/showvarに作成してます。キャッシュディレクトリなど意味のないところもありますがね、個人的には気になっていたのでスッキリしました。
ところで、スクリプトを書いて少しスッキリした頭にフト浮かんだのはenv。時間をかけてスクリプトなんて書いている暇はありませんよ。envでXcodeビルド時の完全な環境変数が取得できました。
env > ${DERIVED_FILE_DIR}/xcode_env_variables.txt
やれやれ。先に考えつかないところがダメですなぁ。






Comments