2017-10-24 13 views
3

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を動作させるにはどうすればよいですか?

答えて

1

どのようにしてobjc-eval.frameworkを動作させることができますか?

完全なソースが入手できます。

tarアーカイブをアンパックし、そのプロジェクトをコンパイルするためにxcodebuildを呼び出してから、コンパイルされたコードを動的にロードして実行することによって、Xcodeプロジェクトにコードをスプライスすることによってコードが実行されることがわかります。

最初の問題は、tarアーカイブの方が古く、Xcodeの最新バージョンの更新が必要であることです.Xcodeはこれを行うオプションを提供しています。プロジェクトがコンパイルされると、コンパイルされたコードは、このフレームワークがそれを見つけようとしている場所ではないことがわかります。これは、デフォルトでは、Xcodeの最新バージョンでは製品の場所を設定するプロジェクト設定が上書きされるからです。あなたはXcodeののPreferences…、プロジェクトのBuild Locations設定、xcodebuildコマンドが取る引数、そしてあなたがそれをしたいので、コンパイルされたバイナリの枠組みを取得するどの設定を決定するコンパイルされたバイナリをロードするフレームワークのコードを探求する必要が

それにアクセスすることができます。

これを実行すると、フレームワークが機能することがわかります。これが動作するには、アプリケーションが動作するシステムにXcodeをインストールする必要があります。

は、お楽しみに!

HTH

+0

答えの最も重要な部分は最後の部分です。 objc-eval.framworkがiphoneデバイスで動作しないということですか? Xcodeがインストールされていないので、私はこのプロジェクトがiphoneデバイス上で動作する必要があります。 @CRM – Mrjm

+0

@Mrjm - objc-evalフレームワークは、他のオプションlibClangと同様にXcodeがインストールされていることを前提としているため、どちらもiOSでは動作しません。 Objective-Cは通常コンパイルされた言語であり、たとえあなたがインタプリタを見つけたり書き込んだりしても、AppleのiOSルールは出荷用アプリケーションでそれを許可しないことがあります。私はObjective-Cを動的にコンパイルするために、自分が何をやっているのか、またその要件を再評価する必要があると思います。 – CRD

+0

@ CRD-ありがとう、私は多くの時間を節約しました - 今は、このアイデアをJavascriptで実現しようとしています。 https://github.com/evgenyneu/ios-javascriptcore-demoを見つけました。 その小さな、クリーン、良い、うまく動作しますが、単純なJsコードのみのようで、ネイティブコードとデバイス機能へのアクセスはありません。それについてのアイデアや提案はありますか? – Mrjm

関連する問題