1

コンパイラに入る前にコードをインターセプトして変更し、その後ファイル/Xcodeで同じままにする方法が必要です。

ビルド スクリプトは一種のストリーム インターセプトだと思っていましたが、そうではないようです。別の方法は、ビルドの前後にスクリプトを実行することです。これには、私が知っておくべき影響がありますか?

- - - 編集 - - -

なんで?特定のコメント構文に基づく自動ログ システムのアイデアがあります。ビルド時に、特定の文字列を解析してログ機能に置き換えることができるようにしたいのですが、コードは変更されません。出来ますか?

- - - アップデート - - -

カスタムコンパイラ、または少なくとも現在のLLVMのclangをラップするプラグインが前進する可能性があるようです. 私はこれを調査してきました。興味のある方への関連する質問は次のとおりです。Xcode custom compiler which wraps and dos a passthru to clang

4

1 に答える 1

2

「ビルド時」とは、実際にコードをコンパイルする前を意味する場合、スクリプトを実行するたびに Xcode を開く必要があることを意味します。これを行う方法があるとは思いません。ただし、Automator を使用してコードを実行する前に文字列を受け取ることはできますが、Automator を使用してアプリをビルドする必要があり、制限があります。もう 1 つの方法は、アプリに 2 つのクラスを作成することです。実行前クラスとメイン クラスです。事前実行クラスは、ユーザーにプロンプ​​トを表示するか、ファイル (またはそのようなもの) を読み取って文字列を取得し、文字列に応じて特別な方法でメイン クラスを実行します。

編集:コメントへの応答

Objective-C でこれを行う方法はわかりませんが、いつでもメイン ファイルの名前を main.mm (.mm ファイルには C++ と Objective-C コードの両方が含まれています) に変更し、C++ コードを追加することができます。ただし、これはコンソールを使用しています。

using namespace std // all  (this line is optional)
string s = ""; //      this
cin >> s; //           is C++  (if you omitted the optional line above, the correct code is std::cin >> s;
MainClass mc = //constructor for your "main class" here in Objective-C
if(s == someCertainString){ //hypothetical string and C++ condition checking for a C++ string
    [mc doThisACertainWay:];
}else if(s == someOtherString){ // again, hypothetical string that you need to declare
    [mc doThisADifferentWay];
}

今はPCではないのでコードは確認できませんが、C++やObj-Cでファイルを読み書きする方法を検索してみてください。私が今できる唯一のヒントは#include <iostream>、ファイルの読み取り/書き込みに C++ を使用する場合、最初に必要だということです。

コンソールを使用したくない場合 (これを公開したい場合は正常です)、ダイアログを作成することもできます。この例では、C++ は必要ないため、メイン ファイルの名前を変更しません。起動時に表示される新しいウィンドウ (以降はこれと呼びますtheDialog) を作成し、メインのグラフィカル インターフェイスが起動時に表示されないようにします。にテキスト フィールドを追加しtheDialog、名前を付けます (この例ではtf)。テキスト フィールドに入力する内容をユーザーに伝えるラベルを追加します。ボタンを追加してアクションにリンクします。このアクションでは、次のコードを挿入します。

MainClass mc = // constructor here
NSString *str = [self.tf stringValue];
if([str equalsString:someString]){ // hypothetical string and possible error in the condition checking, I'm new to Obj-C
    [mc doThisInACertainWay];
} else {
    [mc doThisInADifferentWay];
}
于 2013-10-06T15:14:29.760 に答える