Delphiから直接CocoaのAPIを使えるようなので試してみた。
DelphiXE3でターゲットをOSXにしてコンパイル。動作させた環境はMacOSX 10.6。
cocoa_test.dpr
CocoaのNSURL、NSDataを使ってWeb上のファイルをダウンロードして保存するだけの簡単なコンソールアプリケーション。
program cocoa_test; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, Macapi.Foundation; var Pool: NSAutoreleasePool; URL: NSURL; Data: NSData; begin try if ParamCount < 1 then Exit; NSDefaultRunLoopMode; Pool := TNSAutoreleasePool.Create; try URL := TNSURL.Wrap(TNSURL.Alloc.initWithString(NSSTR(ParamStr(1)))); Data := TNSData.Wrap(TNSData.Alloc.initWithContentsOfURL(URL)); Data.writeToFile(NSSTR('output' + ExtractFileExt(ParamStr(1))), True); finally Pool.drain; end; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.
NSDefaultRunLoopModeを呼ばないと、「EObjectiveC: ObjectiveC のクラス NSString が見つかりません」というエラーになる。
NSAutoreleasePoolはメモリ管理に使われる。