2016-05-08 14 views
16

Xcodeでは、Objective-Cヘッダーについては、Generated Interfaceを表示できます。これは、InteropでSwiftがどのように見えるかを示しています。コマンドラインからObjective-CヘッダーからSwiftインターフェイスを生成

コマンドラインから生成したいと思います。どのようにそれを行うにはどのようなアイデア?

ボーナスタスク:最初にヘッダーをプリコンパイルする必要があります。したがって、#importをすべて置き換える必要があります。

+0

多分これは助けることができますか? https://github.com/apple/swift/blob/master/test/IDE/print_clang_header.swift – fabb

+0

またはこれ? https://github.com/jpsim/SourceKitten – fabb

+0

またはこれ? 'export SOURCEKIT_LOGGING = 1 &&/Applications/Xcode.app/Contents/MacOS/Xcode' – fabb

答えて

2

検査しようとしているモジュールのインタプリタコマンド:type lookupを呼び出します。

header.hという名前のヘッダーファイルがあるとします。インタプリタがそれをモジュールとして認識するように、別のディレクトリに置きます。同じディレクトリにmodulemapも作成します。のは、このディレクトリModを呼ぶことにしましょう:

./ 
./Mod/ 
    /header.h 
    /module.modulemap 

以下とmodulemapに入力します。

module Mod { 
    header "./header.h" 
    export * 
} 

に行うのならば、このようなコマンドを発行します。

また
echo "import Mod\n:type lookup Mod" | swift -I./Mod | tail -n+2 >| generated-interface.swift 

、あなたが望むかもしれません同等の効果を持つこのようなコマンドを使用してください:

echo "import Mod\n:print_module Mod" | swift -deprecated-integrated-repl -I./Mod >| generated-interface.swift 

次のように壊れています:

  • まず、我々は実行するスクリプトエコー:インポートモジュールおよびタイプ・ルックアップし、それを。
  • 私たちはインタプリタを起動し、それにスクリプトを送ります。 -I引数は私たちのモジュールを見つけるのに役立ちます。
  • 次に、「Welcome to Swift」の部分をテール
  • で切り取り、generated-interface.swiftに書き込みます。

上記のコマンドを実行している間は、作業ディレクトリがModディレクトリよりも1レベル上に設定されていることを確認してください。

出力はXcodeとまったく同じではないかもしれませんが、非常に似ています。あなたはスウィフトファイルからインターフェイスを作成したい場合は


は、念のために、それはちょうどこのです:

swiftc -print-ast file.swift 
+0

すばらしいバージョンをお使いですか?私は安定した3を使用します。1であり、両方のコマンドラインで '\ n 'の' 'invalid character in source file'というエラーを受け取ります。 – fabb

+1

3.1と4-betaでチェックしただけでうまくいきました。 '\ n'が改行に展開されていることを確認してください。あなたのシェルの一重引用符と二重引用符の間に問題があるかもしれません。 –

関連する問題