#SdkTransform
10.1 Berlin から SdkTransform.exe というコマンドラインツールが増えています。
…が!
説明が全くありません(正確には SDKTransform.exe が簡易ヘルプを出力してくれる)。
ここでは使い方を説明します。
(このページを参考にしました [杂谈] SDKTransform 试用笔记)
#OC2OP ではない
かつて Java2OP と同じように OC2OP が提供されると期待されていました。
しかし、提供されたのは SdkTransform.exe…
つまり!
SDKTransform は OC2OP ではないのです。
名前から判るとおり SDK へアクセスするための Object Pascal ソースコードを吐き出すツールなのです。
任意の Objective-C コードを Object Pascal コードに変換する物ではありません!
#SDKTransformRun.bat
SdkTransform.exe を動かすためのバッチファイルが同梱されています。
それが SdkTransoformRun.bat です。
もちろん、SdkTransform.exe 単体で動くのですが、コマンドラインスイッチがやたらと長いため自分でコマンドラインから起動するのは現実的ではありません。
SdkTransformRun.bat を使わないと難しいでしょう。
#SdkTransformTypes.txt
SDKTransform が参照する型の対応表です。
例えば
char=Byte
char*=MarshaledAString
short=SmallInt
などと書いてあります。
#準備
SdkTransformRun.bat の3ヶ所を編集します。
##CLANG
26行目にある
set CLANG=c:\clang3.5\llvm\tools\clang
を変更して正しく clang のある場所を指すようにします。
Delphi では Android NDK の導入と同時に clang も導入されています。
デフォルトのままであれば多分↓のようになるでしょう。
set CLANG=C:\Program Files (x86)\Embarcadero\Studio\18.0\PlatformSDKs\android-ndk-r9c\toolchains\llvm-3.3\prebuilt\windows\lib\clang\3.3\include
##CC_OPTS
SdkTransformRun.bat では↓のように clang 配下に \lib\Headers\ というディレクトリが期待されています。
(44行目 および 62行目の2ヶ所あります)
set CC_OPTS=%CC_OPTS% -isystem "%CLANG%"\lib\Headers\
ですが、上記の CLANG 変数が指す先には \lib\Headers\ という構造はありません。
そのまま include を指すように編集します(\lib\Headers\ を削除します)。
set CC_OPTS=%CC_OPTS% -isystem "%CLANG%"
##SDK_ROOT
使う SDK のパスを指すように変更します。
iOS と OSX それぞれあるので、それを変更します。
ここで、注意!
SDK マネージャで導入済みの SDK しか使えません!
インポート済みであれば、下記の様に SDK の場所を設定します。
iOS用 36行目
set SDK_ROOT=c:\SDKs\iPhoneOS8.3.sdk
を↓のように
set SDK_ROOT=C:\Users\ユーザー名\Documents\Embarcadero\Studio\SDKs\iPhoneOS9.3.sdk
OSX用 53行目
set SDK_ROOT=c:\SDKs\MacOSX10.10.3.sdk
を↓のように
set SDK_ROOT=C:\Users\ユーザー名\Documents\Embarcadero\Studio\SDKs\MacOSX10.11.sdk
変更します。
#使い方
準備が終わったらコマンドを実行するだけです。
SdkTransformRun.bat iOS --out:<ディレクトリ名>
最初の引数は iOS か OSX を渡します。
2番目の --out には吐き出すディレクトリを指定します。
たとえば、"C:\Temp\SDKs" などです。
#使いどころ
デフォルトでインストールされない SDK を使いたいときに SdkTransform を使うと、Objective-C Bridge ファイルが生成されるので、自分で移植せずに使えます。
たとえば、Security.framework や HealthKit.framework などです。
これらを使うときに SdkTransform があるとないとでは作業工数が変わってくるハズです。
#めんどくさいよお!
作りました。
GUI で楽々!!
しかも SdkTransoform.exe, clang, SDKRoot を自動的に取得します(環境変数より)。
ソースはこちら。
Berlin でのみ試しています。
追記
2020/10/20 Rio, Sydney で動作するようにしました。
それでは!