ホームページ>開発ツール>Xojo Cocoa Plugin 覚書・基礎編
Xojo Cocoa Plugin 覚書
目次
基礎編
はじめに
Cocoaのプラグインについては、既に別記事でも触れてはいるのですが、
(1) Warning対策が不十分だった。
(2) 以前作ったMach-O対応版(Carbon版)と同等の機能を持つCocoa版を作ってみたい。
等の理由から、改めて実験を行って、その結果を纏めておくことにしました。
テスト環境
・Mac mini mid 2010 (intel)
・Mac OS X 10.9.4
・Xojo 2014 Release 2
・Xcode 5.1.1
基本方針
- プラグインの作成にはXcodeを使用する
ただし、Xcodeだけで直接プラグインを作成することはできません。
Xcodeはdylib形式でのビルド迄で、その後、Xojoが提供するコンバートツールでpbx形式に変換することになります。
- ひな形は自分で用意する
以前は、新規プロジェクトが作成し易いよう、Plugins SDK内にXcode用のテンプレートが用意されていたのですが、最近のものには添付されていないようです。
なのでここでは、(以前の記事でも触れたように)Examplesフォルダ内のHostedPluginExampleをベースに使いました。
具体的な作業内容は、次項の「dylibをビルドする」で記述します。
- Warningは対策する
以前の記事では、Warningは敢えて無視しましたが、全て対策することを目指します。
ただし、一点注意することがあります。
添付のXcodeプロジェクトを5.1.1で開くと、以下の様にアップデートを促すWarningが出ます。
この対策を実行してしまうと、Xojo側からプラグインのエントリーが見えなくなってしまいます。
これは、アーキテクチャが「Standard Architectures (64-bit Intel) (x86_64)」に変更されてしまうのが原因のようで、ここだけ元々の「32-bit Intel (i386)」に戻してやれば、再び見えるようになります。
- MethodはやめてModuleを使う
Mach-O版でこれまで使ってきた「Method」は、既にDeprecatedなので、別のものを使う必要があります。
ざっと検索してみたところ、Moduleを使え、という感じだったので、Moduleを使ってみることにしました。
なお、Moduleは、Methodの他にPropertyやConstantも持てるようになっていますが、ここでは使わないので、以下はMethodのみの記述となっています。
dylibをビルドする
今回は、プラグイン作成ルートの確定が目的なので、処理内容は(以前の記事と同じく)「与えられた二つの文字列を連結して返す」という、極めてシンプルなものとしました。
まずはXcodeを用いてdylibを作成します。手順は以下の通りです。
DerivedData/PluginModule1/Build/Products/Debug に libPluginModule1.dylib ができていればOK。
- Xojo 2014 Release 2/Extras内のPluginsSDKフォルダを、適当な場所にコピー
- Examplesフォルダ内のHostedPluginExampleフォルダを複製し、適当な名前(ここでは、PluginModule1)にリネーム
- HostedPluginExample.xcodeprojをXcode 5.1.1で開く
- REALExampleLevelIndicator.hとREALExampleLevelIndicator.mmを削除
- プロジェクト名をPluginModule1にリネーム(やり方は、例えば参考サイト(1)を参照。Project NameとManage Schemes..のみ必須。)
- HostedPluginExample.cppをPluginModule1.cppにリネーム(ファイル名選択後、もう一度クリックして名前を変更)
- ここでプロジェクトを一旦閉じ、再び開く(そうしないと、名前の変更がビルドの結果に正しく反映されない場合がある。)
- 前項のWarning対策
- PluginModule1.cppの中身を全文削除後に、以下をペースト
注1)前回使用したREALCStringはDeprecatedなので、REALCopyStringCFStringに変更した。#include "rb_plugin.h" static REALstring CatString( REALstring str1, REALstring str2 ); REALmethodDefinition PluginModule1Methods[] = { { (REALproc)CatString, REALnoImplementation, "CatString(str1 as string, str2 as string) as string", REALconsoleSafe | REALScopeGlobal }, }; REALmoduleDefinition PluginModule1Definition = { kCurrentREALControlVersion, "PluginModule1", PluginModule1Methods, sizeof( PluginModule1Methods ) / sizeof( REALmethodDefinition ), nil, // PluginModule1Constants, --> No Use nil, // sizeof( PluginModule1Constants ) / sizeof( REALconstant ), --> No Use nil, // PluginModule1Properties, --> No Use nil, // sizeof( PluginModule1Properties ) / sizeof( REALproperty ), --> No Use }; static REALstring CatString( REALstring str1, REALstring str2 ) { NSString* nsstr1 = (NSString *)REALCopyStringCFString(str1); NSString* nsstr2 = (NSString *)REALCopyStringCFString(str2); NSString* nsstr3 = [NSString stringWithFormat:@"%@ %@",nsstr1, nsstr2]; const char* cstr3 = [nsstr3 UTF8String]; return REALBuildString(cstr3, ::strlen(cstr3)); } void PluginEntry( void ) { REALRegisterModule( &PluginModule1Definition ); }
注2)Cocoa以外のAPIを混在させる場合は、Cocoa部分を#if COCOA〜#endifで囲む。今回はCocoa以外の利用は考えていないので、何もしていない。- まずCleanを実行
- 次にBuildを実行
pbx形式に変換する
上記ステップで作成したdylibをpbx形式に変換します。
変換にはPlugin Converterを用います。
- libPluginModule1.dylib(作成場所は前項参照)を、以下の構成をもつフォルダにコピーする。
(詳細は、Plugin SDK内のPluginPackaging.rtf、Plugin Converter内のPlugin Converter Read Me.txtを参照)+- PluginModule1 // Folder +- Build Resources // Folder +- Mac Cocoa // Folder ( for Cocoa ) +- libPluginModule1.dylib // dylib- Plugin SDK/Plugin Converter/Plugin Converter.rbpで、プラグイン形式(rbx)に変換
(コンソールアプリのライセンスを持っていなくても実行は可能。「-f <フォルダへのパス>」は「共有>Debug>Command Line Arguments」で指定。)- できたPluginModule1.pbxをXojoのpluginsフォルダに移動する。
動作テストする
動くかどうか、テストします。
- Xojoを起動する。
- Window1にPushButtonを置き、Actionイベントに以下を記述。
注)メソッドではメソッド名のみの記述だったが、モジュールは「モジュール名.メソッド名」となる。MsgBox PluginModule1.CatString("Hello","World")
- 実行する。
- PushuButtonを押す。ダイアログに「Hello World」と表示されればOK。
おわりに
今回は基礎編ということで、まずは「プラグイン作成ルートの確定」について書き留めました。
ルートが確定すれば、内容に集中することができます。
内容については、次回以降あらためて触れてみたいと思います。
注)上述のサンプルはあくまで動作確認用で、配布を前提としたものではありません。(配布用とするにはいくつかの配慮が必要なようです。)
お世話になったサイト
貴重な情報をご提供頂いている皆様に、お礼申し上げます。(以下、順不同)
参考サイト(1):Xcode4のプロジェクト名変更方法 : NAGAOKA STATION
更新履歴
2014.08.09 新規作成
[Home] [MacSoft] [Donation] [History] [Privacy Policy] [Affiliate Policy]