Suche senden
Hochladen
Xcode4 project template
•
0 gefällt mir
•
1,993 views
Wataru Kimura
Folgen
Xcode 4のプロジェクトテンプレートの構成とそのカスタマイズ方法について。 2012-09-01 Cocoa勉強会 #54
Weniger lesen
Mehr lesen
Melden
Teilen
Melden
Teilen
1 von 8
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm
Hiramatsu Ryosuke
OS X DYLD_* environments
OS X DYLD_* environments
Wataru Kimura
リマインダーの繰り返しを自由に設定する (EventKit)
リマインダーの繰り返しを自由に設定する (EventKit)
Wataru Kimura
Clang Modules
Clang Modules
Wataru Kimura
Xcode4 project template (slide)
Xcode4 project template (slide)
Wataru Kimura
Applinkで「選べる」アプリ
Applinkで「選べる」アプリ
Wataru Kimura
new Objctive-C literal syntax
new Objctive-C literal syntax
Wataru Kimura
Three20 lint
Three20 lint
Wataru Kimura
Empfohlen
Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm
Hiramatsu Ryosuke
OS X DYLD_* environments
OS X DYLD_* environments
Wataru Kimura
リマインダーの繰り返しを自由に設定する (EventKit)
リマインダーの繰り返しを自由に設定する (EventKit)
Wataru Kimura
Clang Modules
Clang Modules
Wataru Kimura
Xcode4 project template (slide)
Xcode4 project template (slide)
Wataru Kimura
Applinkで「選べる」アプリ
Applinkで「選べる」アプリ
Wataru Kimura
new Objctive-C literal syntax
new Objctive-C literal syntax
Wataru Kimura
Three20 lint
Three20 lint
Wataru Kimura
Macos services
Macos services
Wataru Kimura
InputMethodKit超入門
InputMethodKit超入門
Wataru Kimura
Quickcursorに見る、アプリケーション間通信
Quickcursorに見る、アプリケーション間通信
Wataru Kimura
PSMTabBarControl
PSMTabBarControl
Wataru Kimura
Precipitateに見る、外部リソースのSpotlight化
Precipitateに見る、外部リソースのSpotlight化
Wataru Kimura
Hotkeyslib3 Cocoaでホットキー
Hotkeyslib3 Cocoaでホットキー
Wataru Kimura
値変換
値変換
Wataru Kimura
らくらくアップデートSparkle
らくらくアップデートSparkle
Wataru Kimura
ClangでObjective-Cを静的解析
ClangでObjective-Cを静的解析
Wataru Kimura
SIMBLでCocoaアプリをパワーアップ
SIMBLでCocoaアプリをパワーアップ
Wataru Kimura
Three20のTTURLRequest
Three20のTTURLRequest
Wataru Kimura
InputMethodKitで入力プログラムをつくろう
InputMethodKitで入力プログラムをつくろう
Wataru Kimura
Weitere ähnliche Inhalte
Mehr von Wataru Kimura
Macos services
Macos services
Wataru Kimura
InputMethodKit超入門
InputMethodKit超入門
Wataru Kimura
Quickcursorに見る、アプリケーション間通信
Quickcursorに見る、アプリケーション間通信
Wataru Kimura
PSMTabBarControl
PSMTabBarControl
Wataru Kimura
Precipitateに見る、外部リソースのSpotlight化
Precipitateに見る、外部リソースのSpotlight化
Wataru Kimura
Hotkeyslib3 Cocoaでホットキー
Hotkeyslib3 Cocoaでホットキー
Wataru Kimura
値変換
値変換
Wataru Kimura
らくらくアップデートSparkle
らくらくアップデートSparkle
Wataru Kimura
ClangでObjective-Cを静的解析
ClangでObjective-Cを静的解析
Wataru Kimura
SIMBLでCocoaアプリをパワーアップ
SIMBLでCocoaアプリをパワーアップ
Wataru Kimura
Three20のTTURLRequest
Three20のTTURLRequest
Wataru Kimura
InputMethodKitで入力プログラムをつくろう
InputMethodKitで入力プログラムをつくろう
Wataru Kimura
Mehr von Wataru Kimura
(12)
Macos services
Macos services
InputMethodKit超入門
InputMethodKit超入門
Quickcursorに見る、アプリケーション間通信
Quickcursorに見る、アプリケーション間通信
PSMTabBarControl
PSMTabBarControl
Precipitateに見る、外部リソースのSpotlight化
Precipitateに見る、外部リソースのSpotlight化
Hotkeyslib3 Cocoaでホットキー
Hotkeyslib3 Cocoaでホットキー
値変換
値変換
らくらくアップデートSparkle
らくらくアップデートSparkle
ClangでObjective-Cを静的解析
ClangでObjective-Cを静的解析
SIMBLでCocoaアプリをパワーアップ
SIMBLでCocoaアプリをパワーアップ
Three20のTTURLRequest
Three20のTTURLRequest
InputMethodKitで入力プログラムをつくろう
InputMethodKitで入力プログラムをつくろう
Xcode4 project template
1.
Xcode 4のプロジェクトテンプレート
Xcode 4のプロジェクトテンプレート Cocoa勉強会 #54 2012.09.01(土) 木村 渡 はじめに プロジェクトテンプレートが必要になる機会はあまりないのですが、独自フレームワーク を作成していて(例えばRubyCocoaとか)、それを配布する場合などはテンプレートを同 梱すると便利です。毎回フレームワークを追加したり、コードを書き換えしたりが必要なの はわずらわしいものです。 テンプレート自体は昔のProject Builder時代からありましたが、Xcode 4で大きく変わっ たため詳しいことを知らない人も多いかと思います。そこで今回は、Xcode 4のプロジェク トテンプレートがどのようになっているかについて説明します。 おことわり 基本的にAppleのドキュメントはありません。"AS IS"で「試してみたらこうなった」とい う結果ですのでご了承ください。Xcode 4.2とXcode 4.4でだいたい確認しています。 テンプレートとは あまり説明する必要もないとは思いますが、「新規プロジェクト」や「新規ファイル」の ときに選択するのがテンプレートです。 大きく分けて、 プロジェクトテンプレート ファイルテンプレート ページ 1
2.
Xcode 4のプロジェクトテンプレート
の2種類があります。今日は、プロジェクトテンプレートについて説明します。ファイル テンプレートについては、後述の参考情報に詳しいサイトを載せましたのでそちらを参照く ださい。 テンプレートの構成 Xcode 4.4のテンプレート は、/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templatesに置か れています。 Xcode 3と比べてみよう Xcode 3のテンプレートと比べてみましょう。 Xcode 3はそのまんま、って感じですね。それに比べて、Xcode 4はテンプレートのファ イルは生成されるプロジェクトに対してファイルが少ないように見えます。 テンプレートの継承・機能追加(インジェクション) Xcode 4では、別のテンプレートを継承して新しいテンプレートを作成したり、テンプレ ートに機能追加(インジェクション/注入)する内容を別のテンプレートとして作成することが できます。その機能に関連するplistのキーは次の3つになります。 AAnncceessttoorrss 継承する親をIdentifierで指定します。複数指定できます。 IInnjjeeccttiioonnTTaarrggeettss インジェクションする対象をIdentifierで指定します。 CCoonnccrreettee 実体のテンプレートかどうかを指定します。この値がtrueのものだけが、Xcodeの 「新規プロジェクト」に表示されます。 たとえば、Cocoa Applicationは次のように構成されています。 ページ 2
3.
Xcode 4のプロジェクトテンプレート
Cocoa Application - Concrete: true - Ancestors: + Cocoa Application Base - Ancestors: < Objective-C Application < Bundle Base < Base < Mac Base < Prefixable Core Data Spotlight Application - Concrete: false (default) - InjectionTargets: Cocoa Application - Ancestors: < Core Data Application < Cocoa Document-based Application 大きく分けて、Cocoa ApplicationとCore Data Spotlight Applicationの2つで構成され ています。Cocoa Applicationは素のアプリを、それの拡張をCore Data Spotlight Applicationで定義定義しています。ここは、プロジェクト作成時の画面を見たほうが分かり やすいでしょう。 試しに、Core Data Spotlight ApplicationのInjectionTargets要素をコメントアウトして みると、次のようになります。 ページ 3
4.
Xcode 4のプロジェクトテンプレート
"Include Unit Tests"はCocoa Document-based Applicationで定義されているのでこれ も消えてしまっていますね。 では、ここで新しいテンプレートファイルをつくって実験してみましょう。以下のファイ ルを作成し、 /Library/Developer/Xcode/Templates/Project Templates/Mac/Application/にCocoa Application+QuartzCore.xctemplate/TemplateInfo.plistとして配置します。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Kind</key> <string>Xcode.Xcode3.ProjectTemplateUnitKind</string> <key>Identifier</key> <!-- define unique id --> <string>jp.nifty.i.kimuraw.dt.unit.TestTmpl</string> <key>InjectionTargets</key> <array> <!-- inject into "Cocoa Application" --> <string>com.apple.dt.unit.cocoaApplication</string> </array> <key>Options</key> <array> <dict> <key>Identifier</key> <string>linkQuartzCoreFramework</string> <key>Name</key> <string>link QuartzCore framework</string> ページ 4
5.
Xcode 4のプロジェクトテンプレート
<key>Description</key> <string>Whether linking QuartzCore.framework or not</string> <key>Type</key> <string>checkbox</string> <!-- add a checkbox --> <key>SortOrder</key> <integer>1</integer> <key>Default</key> <string>false</string> <key>Units</key> <dict> <key>true</key> <!-- when the checkbox is on, inject the following settings --> <array> <dict> <key>Targets</key> <array> <dict> <key>Frameworks</key> <array> <string>QuartzCore</string> </array> </dict> </array> </dict> </array> </dict> </dict> </array> </dict> </plist> すると、新規プロジェクトでCocoa Applicationを選択したときのオプションに Cocoa Applicationにチェックボックスが追加される チェックするとQuartzCore.frameworkにリンクしたプロジェクトが作成される となります。 同様の手順で、フレームワークを追加やビルドオプションの設定を追加できますので、よ く行う設定があればテンプレートを作成しておくと便利かもしれません。 ページ 5
6.
Xcode 4のプロジェクトテンプレート plistからのファイル、プログラム生成
先に触れたように、Xcode 4ではplistからファイルやその内容のプログラムを生成するこ とができます。この機能に関連するplistのキーは次の2つになります。 DDeeffiinniittiioonnss 生成する内容の定義です。一種の辞書のようなものです。詳しくは後述の説明で。 NNooddeess 生成するファイルとその内容を指定します。Definitionsで定義した内容を利用できま す。 Definitionsはdict要素で構成され、以下のパターンがあります。 string: 指定した文字列をファイルの内容として利用します。 dict - Path: 指定したパスの外部ファイルを内容として利用します。 dict - Group: 生成したファイルのグループを指定します。 それでは実際の内容を見ていきましょう。 // Cocoa Application Base.xctemplate/TemplateInfo.plist <key>en.lproj/Credits.rtf</key> <dict> <key>Path</key> <string>Credits.rtf</string> <key>Group</key> <string>Supporting Files</string> </dict> これはテンプレートのバンドル内にあるCredits.rtfというファイルを、 en.lproj/Credits.rtfというキーで定義しています。 // Base/Objective-C Application.xctemplate/TemplateInfo.plist <key>main.m:main</key> <dict> <key>Beginning</key> <string>int main(int argc, char *argv[]) {</string> <key>End</key> <string>}</string> <key>Indent</key> <integer>1</integer> </dict> と // Cocoa Application Base.xctemplate/TemplateInfo.plist <key>Definitions</key> <dict> : <key>main.m:main:NSApplicationMain</key> <string>return NSApplicationMain(argc, (const char **)argv);</string> ページ 6
7.
Xcode 4のプロジェクトテンプレート
の2つを組み合わせて、 // Cocoa Application Base.xctemplate/TemplateInfo.plist <key>Nodes</key> <array> <string>main.m:main:NSApplicationMain</string> が int main(int argc, char *argv[]) { NSApplicationMain(argc, (const char **)argv); } になります。実際にはコメントやimportなどもありますが、そちらはBase/Objective-C Application.xctemplateで定義されています。 また、より複雑なケースとしてはCocoa Document-based Application.xctemplateのド キュメントクラスがどのように構成されているかを確認してみてください。きっと頭が痛く なるはずです。 DefinitionsとNodesを利用したテンプレートの操作はコードを書き換えるよりも、自社の ロゴなど毎回追加するリソースファイル群をテンプレートとして定義して、インジェクショ ンにより追加するといった用途が実用的ではないかと思います。 RubyCocoaでやったこと RubyCocoaのプロジェクトでは、通常のCocoaアプリのプロジェクトとは以下の点が異 なります。 RubyCocoa.frameworkにリンク main.mでrubyインタプリタ・RubyCocoaの初期化処理を行う rb_main.rbを追加 クラスの実装ファイルがObjective-C(.h, .m)でなくRuby(.rb) 結局、Cocoa Application Baseから一式コピーして次のような構成となりました。 Ruby-Cocoa Application Base Ruby-Cocoa Application Ruby-Cocoa Document-based Application Ruby-Core Data Application Ruby-Core Data Spotlight Application ドキュメントのクラスなどはplist中で定義しようとしたらワケわからなくなったので、.rb ファイルを外部ファイルとして用意するようにしました。 Ruby-Cocoa Document-based Application/ Document.rb Document.xib ページ 7
8.
Xcode 4のプロジェクトテンプレート
MainMenuDoc.xib TemplateInfo.plist ___PACKAGENAMEASIDENTIFIER___AppDelegate.rb 今回整理したことを応用すると、少なくともRuby-Cocoa Application Baseはなくすこ とができると考えています。 まとめ Xcode 4のプロジェクトテンプレートの構成とその内容、新しいテンプレートの作成例に ついて説明しました。Xcode 4のテンプレートでは 継承ができる 別テンプレートでの定義をインジェクションできる plistからファイルを生成できる という機能があり、Xcode 3よりも柔軟にテンプレートを作成できるようになっていま す。その分、複雑にもなっています。 まだまだ調べているところであり、おもしろいこと・わからないことなどありましたらぜ ひお知らせください。 参考情報 CCrreeaattiinngg CCuussttoomm XXccooddee 44 FFiillee TTeemmppllaatteess ((22001122年33月の記事)) http://www.bobmccune.com/2012/03/04/creating-custom-xcode-4-file- templates/ ファイルテンプレートの詳細な説明です。マクロやオプションはプロジェクトでも同様 ですので参考になります。 連絡先 きりかノート 2冊め: http://d.hatena.ne.jp/kimuraw/ twitter id: @kimuraw ページ 8
Jetzt herunterladen