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