Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Xamarin.Mac をこれからはじめるあなたへ

13,365 views

Published on

JXUG #4での発表。
50分では到底収まらなかった。
サンプルコードを追加してあります。

Published in: Software
  • Be the first to comment

Xamarin.Mac をこれからはじめるあなたへ

  1. 1. Xamarin.Mac を これからはじめるあなたへ 2015/04/11 #JXUG Tsubasa HIRANO - @ailen0ada
  2. 2. Self introduction 平野 翼 - @ailen0ada
 映像ポストプロダクション WPF + Xamarin.Mac が主戦場 Cocoa での開発は卒業研究で少しやった程度
  3. 3. ポスプロ is 何(ざっくり) 撮影現場から先,全ての工程が業務範囲です 編集=画つなぎ,色補正,合成…
 納品=放送,Blu-ray,配信,アーカイブ… 企画 撮影 編集 納品 業務範囲
  4. 4. Agenda 1. Introduction 2. Xamarin.Mac をはじめる準備 3. Xamarin.Mac で Hello, world 4. Mac らしい挙動をさせる 5. フレームワークを使ってみる 6. まとめと今後
  5. 5. 導入前に知りたかった情報を 中心にお届けします 使い方ガイドではなく、 足を踏み入れるためのとっかかりとして
  6. 6. Introduction Xamarin.Mac とはなにか、導入に至った経緯
  7. 7. Xamarin.Mac • ネイティブ Mac アプリケーションを
 C#/F# で書ける!! Windows UI MacOSX UI C#/F# Shared Code
  8. 8. どれぐらい共通化できる? 体感4割ちょっと、工数はそれなりにかかる ビュー ファイルハンドリング 通信 ビュー ビュー ファイルハンドリング 通信 ファイルハンドリング 通信 Windows Mac Linux ビュー ファイルハンドリング 通信 ビュー ビュー Windows Mac Linux ビューのコード量がそれなりにある場合が多い
  9. 9. Unified API • もうすぐXamarin.Mac 2.0として安定版リリース • iOS とのランタイム共通化、64bit 対応 • iOS の Unified API はすでに Stable • そちらの実装 - SGen, NewRefCount etc. を Mac側に輸入している段階 • OSX 10.6 SnowLeopard はサポート対象外に
  10. 10. MonoMac ではだめ? • サポートされているAPIレベルが違う • MonoMac は10.6相当くらい • Xamarin.Mac は最新に追従 • Mono ランタイムをバンドルできない • ここがクリアできるならMonoMacでもいい かも • Unified API 対応はもちろんない
  11. 11. 導入に至った経緯
  12. 12. ひしめくプラットフォーム • 使用者のリテラシーも異なれば文化もまるで違う • マシン、使いどころによりファイルシステムもバラバラ • NTFS, HFS+, ext4, exFAT, xfs, LTFS… • NFSでつないだりSMBでつないだり • ファイル取り扱いの印象 • しっかり←Win < Linux < (断絶)< Mac→ゆるふわ
  13. 13. 導入まで • 各プラットフォーム間の差異をできる限り少な い工数で吸収できることが求められた • Java, Qt, Python, C++ を検討 • VisualStudio の生産性が決め手 • 開発者は3名なので障壁は低かった • デスクトップ開発は私だけになりつつあった
  14. 14. Xamarin.Mac をはじめる準備 必要なものと注意点
  15. 15. 準備するもの • Mac - 52,800円から • Apple Mac Developer Program - 10,800円 • Xamarin.Mac Subscription - 月額25ドルから • コード署名用の証明書 - 無料 • 投げ出さない気持ち
  16. 16. 証明書について • Developer ID Application
 App Store外で配布する際の証明書
 Xcodeでは今発行できない様子 • 3rd Party Mac Developer Application 
 (Mac App Distribution)
 App Store への公開に必要
 Appleが再署名するまでアプリケーションは起動不可
  17. 17. Business subscription • VisualStudio って… • われわれにはXamarin Studioがあります。大丈夫です。 • 社内向けの配布って… • それはiOSのEnterprise Programの話です。
 Macにはありません(必要もありません)。 • Xamarin.Forms って… • もしかして:Eto.Forms
  18. 18. クリーンなXamMac環境を得る 1. Xcode 2. 証明書 3. Mono MDK 4. Xamarin Studio 5. Xamarin.Mac iOS も Android もいない 美しい世界へ
  19. 19. Hello, Xamarin.Mac なにはともあれ Hello, world
  20. 20. ウィンドウが表示されるまで 1.Main @ Main.cs
 集約例外処理はここ 2.DidFinishLaunching @ AppDelegate
 アセンブリ読み込み完了=DIとかの登録タイミング 3.AwakeFromNib @ controller
 UI初期化 コントロールへの操作が可能に 4.WindowDidLoad @ controller
 表示された アニメーションをはじめる
  21. 21. Mac らしい挙動をさせる 最低限求められそうなもの
  22. 22. Mac らしさはなぜ必要? A. ユーザーのUIに対する期待が違うから! ※当社比 期待度 大 期待度 小 今回はこんな感じなのね… 無理にUIつけなくてもいいよ、動けば おっなんか華やかでかっこいい やることがわかりやすいのがいいな Finder ではこう見えるじゃん? メニューのこれはなんで動かないの? Safariのアレっぽくならない?( )
  23. 23. Mac っぽさはどこから? https://developer.apple.com/library/mac/documentation/UserExperience/ Conceptual/OSXHIGuidelines/index.html
  24. 24. 見えてきた傾向 • Mac はガイドラインに則っているものが多い • 初見でもなんとなくなんとかなる • Windows のUIはOSレベルでもアプリレベルでも 多種多様に変化を遂げてきた • ユーザーも「いろんなやつがいる」ことに寛容 • Linux ベースシステムの業務で使用するアプリは 独自のUIを実装することが多い
  25. 25. Mac っぽい挙動のいくつか • ウィンドウを閉じたとき • シート • 通知センター • アニメーション
  26. 26. AppDelegateで抑えるポイント • アプリケーションの動作を規定する • ApplicationShouldTerminate
 ユーザーが終了を要求した。キャンセルと延期が可能 • DidFinishLaunching
 起動完了、ウィンドウを表示する準備ができた • ApplicationShouldTerminateAfterLastWindowClosed
 最後のウィンドウを閉じた時の動作 • ApplicationShouldHandleReopen
 Dockアイコンを再度クリックされた時など
  27. 27. シート • アラート • NSAlert を作る • RunSheetModal or BeginSheetForResponse • ウィンドウ • Window with Controllerを作る • VisibleAtLaunch を外しておく • StopModal まで状態維持 or CloseWindowを定義して 呼び出し側から閉じる or TaskCompletionSource
  28. 28. NSAlert as sheet using(var alert = new NSAlert()) { alert.MessageText = “タイトル”; alert.InformativeText = “メッセージテキスト”; alert.RunSheetModal(); } Qiita: NSAlert編 Qiita: NSWindow編 Qiita: FileDialog編
  29. 29. 通知センター • NSUserNotification • 10.8 以降 要バージョンチェック • 通知時間、表示期間、クリック時の動作 • DidActivateNotification, DidDeliverNotification • NSUserNotificationCenter • 表示を予約する感じ
  30. 30. NSNotification sample public static void Raise(string message, string title){ var not = new NSUserNotification (); not.Title = title; not.InformativeText = message; not.Subtitle = DateTime.Now.ToShortDateString (); not.DeliveryDate = NSDate.Now; var center = NSUserNotificationCenter.DefaultUserNotificationCenter; center.DidActivateNotification += (s,e ) => //クリックされた center.ShouldPresentNotification = (c, n) => true; // 表示を継続 center.ScheduleNotification (not); }
  31. 31. フレームワークを使ってみる 深くはやりません
  32. 32. ReactiveUI
  33. 33. ReactiveUI • MVVM + Rx で見通しはすごくいい • ドキュメントもしっかり,ユーザーも多い • Xamarin.Mac では様々なおまじないが必要 • おおむねNull回避, Reflection.TargetInvocationException回避
  34. 34. Gtk# WPF Xamarin.Mac UI library w/Eto.Forms Core Business logic Xamarin.iOS Xamarin.Android Xaml Eto.Forms A cross platform desktop/mobile user interface framework by Curtis Wensley, Vivek Jhaveri - BSD like license As you like System Eto Eto.Forms Eto.Drawing System Eto.Forms WIP
  35. 35. Eto.Forms • コード量は一番少なくて済む • 各PFでやることはそのPFに合った方法で立ち上げ るだけ • カスタムコントロール・プラットフォームごとのスタ イルも定義可能 • Gtk# 対応のせいでバンドルできない • Gtk2, Gtk3両対応しててアセンブリ名が被る • UI構築は Write & Pray
  36. 36. まとめ ハマりどころと今後の展望
  37. 37. 導入効果のあるところ • C#/F# で書いた資産をうまく使い回したい • 素早くMacアプリケーションを書きたい • Xamarin Studio の生産性は Xcode より高い • アプリケーション配布の手間を減らしたい
  38. 38. 導入してからの変化 • Model = ビジネスロジックを各PFで動くよう 意識して書くようになった • テストの時間・コード量が増大した • プラットフォームごとに実行 • Windows / Mac どちらから開発しても翌週に は同じことができる体制に
  39. 39. Mono ≠ .NET の再確認 • 同様の動作をすると「期待」できるだけ • ユニットテストは全プラットフォームで • Windows, Mac • Linux はディストロごとに • どうにもならなければサポートに投げる • Businessならメールで問い合わせ可能
  40. 40. Xamarin.Mac 2.0 • Available during summer. • Unified API対応 SGen, New Ref Count • Trial 対応 • モバイルプロファイル追加 • 名前空間をiOSと統一   などなど • OSX 10.6 がサポート対象外に • StoryBoard は未対応 • Alpha channel で入手可能
  41. 41. まとめ • Xamarin.Mac は業務にがっつり導入して問題ないレベル にこなれてきている • Win/Mac のデスクトップアプリケーション開発で高い生 産性を発揮できる • フレームワークを使えばさらに共通化部分が増える • ユーザー数も着々と増えている(と思う) • フォーラムは要チェック
  42. 42. 参考 • Xamarin.Mac - Advanced Topics
 APIデザインやネイティブバインディング,例外の見方など
 http://developer.xamarin.com/guides/mac/advanced_topics/ • Mac Samples
 ADCのサンプル移植がほとんど C#っぽくないコードはそのせい
 https://developer.xamarin.com/samples/mac/all/ • ReactiveUI
 http://reactiveui.net/ • Eto.Forms
 https://github.com/picoe/Eto/

×