記事一覧

後からカスタムUIを追加する

なんだかやたら面倒だったぞ!!
あまりに複雑だったので、とりあえず自分用にメモ。
今扱ってるプロジェクト名を MyGreatPlugin.xcodeproj と仮定します。


(1)仮プロジェクトを作る
仮プロジェクトとして、新規で Audio Unit Effect with Cocoa View プロジェクトを作る。ここから目ぼしいものをコピーして使う。

※プロジェクト名は、目的AUとかぶる部分が無いようにする。
(あとで一括置換をかけるから。たとえば対象の名前が MyGreatPlugin のときに、この仮プロジェクト名を Plugin とかにするとハマる)
ここでは仮に CocoaViewTemp.xcodeproj としておこう。

(2)仮プロジェクトから必要なものをコピー
CocoaViewTemp.xcodeproj の「グループとファイル」から、cocoaUIグループをまるごとコピー。ファイル名に CocoaViewTemp とついてる部分を全部 MyGreatPlugin に置き換える。

同じく、resources にある .xib と .plist もコピーして名前を置き換える。

(3)ソースコードに AU プロパティ関係のメソッドを追加
仮プロジェクト内の CocoaViewTemp.cpp から
virtual OSStatus getPropertyInfo( ... )
virtual OSStatus getProperty( ... )
の2つをコピーして、MyGreatPlugin.cpp の対応する位置にペースト。

CocoaViewTemp.h にこれのプロトタイプ宣言もあるので、それも MyGreatPlugin.h にコピー。

(4)仮プロジェクト由来の名前を一括置換
プロジェクト検索で CocoaViewTemp を MyGreatPlugin に一括置換。plist の中身が置換にかからないこともあるかもしれないので確認。

あと、これによって MyGreatPlugin.cpp 内の getProperty( ... ) にある
CFBundleRef bundle = CFBundleGetBundleWithIdentifier( ... )
内に書かれている識別子が正しいか確認する。
(ターゲットのプロパティの「識別子」( com.GreatCompany.MyGreatPlugin みたいなやつ)と一致していれば良い)

(5).xibファイル内の各種名前変更
MyGreatPlugin_cocoaView.xib を Interface Builder で開き、
File's Ownerのクラス名を MyGreatPlugin_CocoaViewFactoryに、ビューのクラス名を MyGreatPlugin_CocoaView 変更する

(6)バンドルのビルド設定
MyGreatPlugin.xcodeproj の「グループとファイル」にある「ターゲット」から右クリックで新規ターゲット→Loadable Bundleを選択して新しくバンドル用ターゲットを作成。
名前はとりあえず CocoaUI としておく。

ターゲットのプロパティを開いて、プロダクト名を
MyGreatPlugin_CocoaViewFactory
に変更する。

このターゲットに、ドラッグ&ドロップとかいろいろやって
▼ヘッダをコピー(2)
 MyGreatPlugin_CocoaViewFactory.h
 MyGreatPlugin_CocoaView.h
▼バンドルリソースをコピー(2)
 MyGreatPlugin_CocoaViewFactory.plist
 MyGreatPlugin_CocoaView.xib
▼ソースをコンパイル(2)
 MyGreatPlugin_CocoaViewFactory.m
 MyGreatPlugin_CocoaView.m
▼バイナリをライブラリにリンク(3)
 AudioToolbox.framework
 AudioUnit.framework
 Cocoa.framework
となるようにする。

(7)メインターゲットにバンドルを加える
メインターゲット(ここでは「ターゲット」の下の MyGreatPlugin)の下にさっき作ったターゲット "CocoaUI" をドラッグして加える。

さらに、メインターゲットに「新規コピーファイル」を追加。(デスティネーションは「リソース」のまま。)これで出来た「ファイルをコピー」の下に Productsの下にある MyGreatPlugin_CocoaViewFactory.bundle をドラッグして追加する。


たぶん以上の手順でひとまずは通る・・・かも。
書き忘れ・書き間違いが多々あると思うので。

あと、書いてる途中で思ったが、仮プロジェクトの名前を対象プロジェクトと同じにするという手もあったな・・・。
別のフォルダに作ればいいだけだもんね。その場合コピー元とコピー先を間違えないように注意だな。