ObjCで文字列を取得し、コードであるかのように評価したいと考えています。たとえば、以下のようなメークアップ機能があります。Objective-Cで文字列を実行可能なコードに変換/コンパイル
NSString *[email protected]" if (10>5) NSLog(@"Test"); ";
MyClass.Run(Cmd);
出力ログに "Test"と表示されます。私は多くのコードサンプルとライブラリを検索し、テストしましたが、まだ良い結果はありません。
の1- libClangフレームワークとclang_Cursor_Evaluate機能:
は、私は、実行時にコンパイルのためにこれらの2つのライブラリになってしまいました。https://www.mikeash.com/pyblog/friday-qa-2014-01-24-introduction-to-libclang.html
https://github.com/root-project/cling
-2-にObjC-EVALフレームワーク。
https://github.com/antipax/objc-eval/blob/master/README.mdown
私はlibClangと何もできませんでした。今のように残しましたが、2つ目のフレームワークでは、フレームワークを正常にコンパイルし、実際には単純なプロジェクトで使用しましたが、まだ適切な出力はありませんでした。
#import <Foundation/Foundation.h>
#import "OEEvaluation.h"
void main()
{
Code1:OEEvaluation *evaluation = [OEEvaluation evaluationWithCode:@"retun @\"Hello World!\" ;" delegate:nil];
Code2://OEEvaluation *evaluation = [OEEvaluation evaluationWithCode:@"NSLog(@\"Hello World!\");" delegate:nil];
NSLog([evaluation evaluateSynchronously]);
NSLog(@"Test");
}
CODE1とコード2と出力なし:なし(ナル)、エラーなし、まったくヒント...何もありません。
コード1は、フレームワークのドキュメントの正確なサンプルです。
多分私は間違っていますが、私が見つけた解決策は私の研究の間の答えに最も近いものだと思います。
は今の質問は以下のとおりです。
1-どのように私は(実行可能コードの実行可能行に文字列を変換する)このアイデアを実現することができますか?
2 objc-eval.frameworkを動作させるにはどうすればよいですか?
答えの最も重要な部分は最後の部分です。 objc-eval.framworkがiphoneデバイスで動作しないということですか? Xcodeがインストールされていないので、私はこのプロジェクトがiphoneデバイス上で動作する必要があります。 @CRM – Mrjm
@Mrjm - objc-evalフレームワークは、他のオプションlibClangと同様にXcodeがインストールされていることを前提としているため、どちらもiOSでは動作しません。 Objective-Cは通常コンパイルされた言語であり、たとえあなたがインタプリタを見つけたり書き込んだりしても、AppleのiOSルールは出荷用アプリケーションでそれを許可しないことがあります。私はObjective-Cを動的にコンパイルするために、自分が何をやっているのか、またその要件を再評価する必要があると思います。 – CRD
@ CRD-ありがとう、私は多くの時間を節約しました - 今は、このアイデアをJavascriptで実現しようとしています。 https://github.com/evgenyneu/ios-javascriptcore-demoを見つけました。 その小さな、クリーン、良い、うまく動作しますが、単純なJsコードのみのようで、ネイティブコードとデバイス機能へのアクセスはありません。それについてのアイデアや提案はありますか? – Mrjm