OSX
Delphi
iOS
FireMonkey

SDKTransform について

More than 1 year has passed since last update.


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 マネージャの使い方はこちら

SDK.png

インポート済みであれば、下記の様に 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 を自動的に取得します(環境変数より)。

sdkas.png

ソースはこちら。

Berlin でのみ試しています。

それでは!