Help us understand the problem. What is going on with this article?

SDKTransform について

More than 3 years have 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 でのみ試しています。

それでは!

pik
シリアルゲームズ取締役 エンバカデロ・テクノロジーズ Delphi MVP Delphi で iOS / Android / Windows / macOS / Linux のアプリを作ったりしてるみたい。 たまに C#, .NET, Unity も使ってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした