SlideShare a Scribd company logo
Xamarin.Mac を
これからはじめるあなたへ
2015/04/11 #JXUG
Tsubasa HIRANO - @ailen0ada
Self introduction
平野 翼 - @ailen0ada

映像ポストプロダクション
WPF + Xamarin.Mac が主戦場
Cocoa での開発は卒業研究で少しやった程度
ポスプロ is 何(ざっくり)
撮影現場から先,全ての工程が業務範囲です
編集=画つなぎ,色補正,合成…

納品=放送,Blu-ray,配信,アーカイブ…
企画 撮影 編集 納品
業務範囲
Agenda
1. Introduction
2. Xamarin.Mac をはじめる準備
3. Xamarin.Mac で Hello, world
4. Mac らしい挙動をさせる
5. フレームワークを使ってみる
6. まとめと今後
導入前に知りたかった情報を
中心にお届けします
使い方ガイドではなく、
足を踏み入れるためのとっかかりとして
Introduction
Xamarin.Mac とはなにか、導入に至った経緯
Xamarin.Mac
• ネイティブ Mac アプリケーションを

C#/F# で書ける!!
Windows UI MacOSX UI
C#/F# Shared Code
どれぐらい共通化できる?
体感4割ちょっと、工数はそれなりにかかる
ビュー
ファイルハンドリング
通信
ビュー
ビュー
ファイルハンドリング
通信
ファイルハンドリング
通信
Windows
Mac
Linux
ビュー
ファイルハンドリング
通信
ビュー
ビュー
Windows
Mac Linux
ビューのコード量がそれなりにある場合が多い
Unified API
• もうすぐXamarin.Mac 2.0として安定版リリース
• iOS とのランタイム共通化、64bit 対応
• iOS の Unified API はすでに Stable
• そちらの実装 - SGen, NewRefCount etc. を
Mac側に輸入している段階
• OSX 10.6 SnowLeopard はサポート対象外に
MonoMac ではだめ?
• サポートされているAPIレベルが違う
• MonoMac は10.6相当くらい
• Xamarin.Mac は最新に追従
• Mono ランタイムをバンドルできない
• ここがクリアできるならMonoMacでもいい
かも
• Unified API 対応はもちろんない
導入に至った経緯
ひしめくプラットフォーム
• 使用者のリテラシーも異なれば文化もまるで違う
• マシン、使いどころによりファイルシステムもバラバラ
• NTFS, HFS+, ext4, exFAT, xfs, LTFS…
• NFSでつないだりSMBでつないだり
• ファイル取り扱いの印象
• しっかり←Win < Linux < (断絶)< Mac→ゆるふわ
導入まで
• 各プラットフォーム間の差異をできる限り少な
い工数で吸収できることが求められた
• Java, Qt, Python, C++ を検討
• VisualStudio の生産性が決め手
• 開発者は3名なので障壁は低かった
• デスクトップ開発は私だけになりつつあった
Xamarin.Mac をはじめる準備
必要なものと注意点
準備するもの
• Mac - 52,800円から
• Apple Mac Developer Program - 10,800円
• Xamarin.Mac Subscription - 月額25ドルから
• コード署名用の証明書 - 無料
• 投げ出さない気持ち
証明書について
• Developer ID Application

App Store外で配布する際の証明書

Xcodeでは今発行できない様子
• 3rd Party Mac Developer Application 

(Mac App Distribution)

App Store への公開に必要

Appleが再署名するまでアプリケーションは起動不可
Business subscription
• VisualStudio って…
• われわれにはXamarin Studioがあります。大丈夫です。
• 社内向けの配布って…
• それはiOSのEnterprise Programの話です。

Macにはありません(必要もありません)。
• Xamarin.Forms って…
• もしかして:Eto.Forms
クリーンなXamMac環境を得る
1. Xcode
2. 証明書
3. Mono MDK
4. Xamarin Studio
5. Xamarin.Mac
iOS も Android もいない
美しい世界へ
Hello, Xamarin.Mac
なにはともあれ Hello, world
ウィンドウが表示されるまで
1.Main @ Main.cs

集約例外処理はここ
2.DidFinishLaunching @ AppDelegate

アセンブリ読み込み完了=DIとかの登録タイミング
3.AwakeFromNib @ controller

UI初期化 コントロールへの操作が可能に
4.WindowDidLoad @ controller

表示された アニメーションをはじめる
Mac らしい挙動をさせる
最低限求められそうなもの
Mac らしさはなぜ必要?
A. ユーザーのUIに対する期待が違うから!
※当社比
期待度 大
期待度 小
今回はこんな感じなのね…
無理にUIつけなくてもいいよ、動けば
おっなんか華やかでかっこいい
やることがわかりやすいのがいいな
Finder ではこう見えるじゃん?
メニューのこれはなんで動かないの?
Safariのアレっぽくならない?( )
Mac っぽさはどこから?
https://developer.apple.com/library/mac/documentation/UserExperience/
Conceptual/OSXHIGuidelines/index.html
見えてきた傾向
• Mac はガイドラインに則っているものが多い
• 初見でもなんとなくなんとかなる
• Windows のUIはOSレベルでもアプリレベルでも
多種多様に変化を遂げてきた
• ユーザーも「いろんなやつがいる」ことに寛容
• Linux ベースシステムの業務で使用するアプリは
独自のUIを実装することが多い
Mac っぽい挙動のいくつか
• ウィンドウを閉じたとき
• シート
• 通知センター
• アニメーション
AppDelegateで抑えるポイント
• アプリケーションの動作を規定する
• ApplicationShouldTerminate

ユーザーが終了を要求した。キャンセルと延期が可能
• DidFinishLaunching

起動完了、ウィンドウを表示する準備ができた
• ApplicationShouldTerminateAfterLastWindowClosed

最後のウィンドウを閉じた時の動作
• ApplicationShouldHandleReopen

Dockアイコンを再度クリックされた時など
シート
• アラート
• NSAlert を作る
• RunSheetModal or BeginSheetForResponse
• ウィンドウ
• Window with Controllerを作る
• VisibleAtLaunch を外しておく
• StopModal まで状態維持 or CloseWindowを定義して
呼び出し側から閉じる or TaskCompletionSource
NSAlert as sheet
using(var alert = new NSAlert())
{
alert.MessageText = “タイトル”;
alert.InformativeText = “メッセージテキスト”;
alert.RunSheetModal();
}
Qiita: NSAlert編 Qiita: NSWindow編 Qiita: FileDialog編
通知センター
• NSUserNotification
• 10.8 以降 要バージョンチェック
• 通知時間、表示期間、クリック時の動作
• DidActivateNotification, DidDeliverNotification
• NSUserNotificationCenter
• 表示を予約する感じ
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);
}
フレームワークを使ってみる
深くはやりません
ReactiveUI
ReactiveUI
• MVVM + Rx で見通しはすごくいい
• ドキュメントもしっかり,ユーザーも多い
• Xamarin.Mac では様々なおまじないが必要
• おおむねNull回避,
Reflection.TargetInvocationException回避
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
Eto.Forms
• コード量は一番少なくて済む
• 各PFでやることはそのPFに合った方法で立ち上げ
るだけ
• カスタムコントロール・プラットフォームごとのスタ
イルも定義可能
• Gtk# 対応のせいでバンドルできない
• Gtk2, Gtk3両対応しててアセンブリ名が被る
• UI構築は Write & Pray
まとめ
ハマりどころと今後の展望
導入効果のあるところ
• C#/F# で書いた資産をうまく使い回したい
• 素早くMacアプリケーションを書きたい
• Xamarin Studio の生産性は Xcode より高い
• アプリケーション配布の手間を減らしたい
導入してからの変化
• Model = ビジネスロジックを各PFで動くよう
意識して書くようになった
• テストの時間・コード量が増大した
• プラットフォームごとに実行
• Windows / Mac どちらから開発しても翌週に
は同じことができる体制に
Mono ≠ .NET の再確認
• 同様の動作をすると「期待」できるだけ
• ユニットテストは全プラットフォームで
• Windows, Mac
• Linux はディストロごとに
• どうにもならなければサポートに投げる
• Businessならメールで問い合わせ可能
Xamarin.Mac 2.0
• Available during summer.
• Unified API対応 SGen, New Ref Count
• Trial 対応
• モバイルプロファイル追加
• 名前空間をiOSと統一   などなど
• OSX 10.6 がサポート対象外に
• StoryBoard は未対応
• Alpha channel で入手可能
まとめ
• Xamarin.Mac は業務にがっつり導入して問題ないレベル
にこなれてきている
• Win/Mac のデスクトップアプリケーション開発で高い生
産性を発揮できる
• フレームワークを使えばさらに共通化部分が増える
• ユーザー数も着々と増えている(と思う)
• フォーラムは要チェック
参考
• 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/

More Related Content

PDF
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
PDF
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
PPTX
Xamarin.formsでのmvvm利用のコツ
PDF
Xamarin で今日から始めるクロスプラットフォーム開発
PDF
この辺でXamarin導入による 効果と限界をしっかり把握してみよう MVP Community Camp 2015
PPTX
Xamarin ~ iOS/Android/Windows アプリを C# で作ろう~
PDF
Visual Studio + xamarin で始めるモバイル アプリ開発
PPTX
Xamarin の救世主 Unity !
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin.formsでのmvvm利用のコツ
Xamarin で今日から始めるクロスプラットフォーム開発
この辺でXamarin導入による 効果と限界をしっかり把握してみよう MVP Community Camp 2015
Xamarin ~ iOS/Android/Windows アプリを C# で作ろう~
Visual Studio + xamarin で始めるモバイル アプリ開発
Xamarin の救世主 Unity !

What's hot (20)

PDF
Xamarin によるクロスプラットフォームモバイルアプリ開発
PPTX
Xamarin Overview
PDF
Prism + ReactiveProperty入門
PDF
Xamarin 概要 2015年5月版
PPTX
Xamarin 101 ~環境構築からビルド・テストまで~
PPTX
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
PPTX
Xamarin で Prism を使いたい! ~「正式対応」 まで待てない人のための Prism 利用 Tips~
PDF
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
PPTX
Xamarin+MVVMCross のあれこれ
PPT
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
PPTX
Visual Studio 2015 + Xamarin
PPTX
いまさら学ぶMVVMパターン
PDF
Xamarin + Visual Studio によるマルチプラットフォーム対応アプリ開発 - iOS, Android, Windows に対応しよう
KEY
塹壕よりLivetとMVVM
PDF
BoxViewの美味しい食べ方
PDF
iOSやAndroidアプリ開発のGoodPractice
PPTX
MVVM入門
PDF
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
PPTX
ゆるふわ Xamarin Tips
PPTX
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
Xamarin によるクロスプラットフォームモバイルアプリ開発
Xamarin Overview
Prism + ReactiveProperty入門
Xamarin 概要 2015年5月版
Xamarin 101 ~環境構築からビルド・テストまで~
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Xamarin で Prism を使いたい! ~「正式対応」 まで待てない人のための Prism 利用 Tips~
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
Xamarin+MVVMCross のあれこれ
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
Visual Studio 2015 + Xamarin
いまさら学ぶMVVMパターン
Xamarin + Visual Studio によるマルチプラットフォーム対応アプリ開発 - iOS, Android, Windows に対応しよう
塹壕よりLivetとMVVM
BoxViewの美味しい食べ方
iOSやAndroidアプリ開発のGoodPractice
MVVM入門
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
ゆるふわ Xamarin Tips
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
Ad

Viewers also liked (19)

PDF
10分でわかる無料になったXamarin
PDF
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
PDF
前略,Xamarin.Mac使いより
PDF
Xamarin.forms入門
PPTX
20分でできる!Xamarin.Forms入門
PDF
Xamarin バッドノウハウ大全
PDF
Xamarin 基礎講座
PDF
XAML入門
PDF
Xamarinをこれから始める皆様へ
PPTX
Xamarin 実戦投入時に気をつけたいことあれこれ
PPTX
Fri. March 24th Pine River Announcements
PDF
Formación continua online para profesores de idiomas
PPTX
Cult Marketing - Instameet
PDF
Br20,br30 ,br40 led light
PDF
Distribution and ex dividend dates-upto 22 mar-2017
PDF
Filippo, Plain simple reality of entropy
PPTX
El polimorfismo 894G>T en el gen NOS3 y su relación con prehipertensión en po...
PDF
Searchmetrics eCommerce Ranking Factors Online Workshop
PPT
文献調査をどのように行うべきか?
10分でわかる無料になったXamarin
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
前略,Xamarin.Mac使いより
Xamarin.forms入門
20分でできる!Xamarin.Forms入門
Xamarin バッドノウハウ大全
Xamarin 基礎講座
XAML入門
Xamarinをこれから始める皆様へ
Xamarin 実戦投入時に気をつけたいことあれこれ
Fri. March 24th Pine River Announcements
Formación continua online para profesores de idiomas
Cult Marketing - Instameet
Br20,br30 ,br40 led light
Distribution and ex dividend dates-upto 22 mar-2017
Filippo, Plain simple reality of entropy
El polimorfismo 894G>T en el gen NOS3 y su relación con prehipertensión en po...
Searchmetrics eCommerce Ranking Factors Online Workshop
文献調査をどのように行うべきか?
Ad

Similar to Xamarin.Mac をこれからはじめるあなたへ (20)

PDF
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
PDF
2020年4月版_Xamarin.Forms 入門 (Mac での開発編)
PDF
WPF開発者がXamarin.Macを触るその前に
PDF
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
PPTX
私とXamarinと。
PPTX
Macで始めるxamarin(続編)
PDF
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
PDF
これから始めるXamarin開発
PDF
DevLOVE iPhoneアプリ勉強会
PDF
Xamarin 概要 2014年08月版
PPTX
Xamarin.iOS の仕組みを理解しよう!
PDF
Introduction Xamarin forms mac
PDF
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
PPTX
第1回 Japan Xamarin User Group Conference - Xamarin 概要
PDF
Work with Xamarin.Mac - #JXUG 2014/11/22
PPTX
Xamarin基礎講座 Xamarinハンズオン(2016.09 浜松) #JXUG #jaghama
PDF
Xamarin 概要 2017/01/15
PDF
Xamarin によるクロスプラットフォームモバイルアプリ開発(2014.06)
PDF
5分で(は終わらなかった)分かるXamarin(開発者向け)
PDF
Xamarin.iOS
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
2020年4月版_Xamarin.Forms 入門 (Mac での開発編)
WPF開発者がXamarin.Macを触るその前に
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
私とXamarinと。
Macで始めるxamarin(続編)
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
これから始めるXamarin開発
DevLOVE iPhoneアプリ勉強会
Xamarin 概要 2014年08月版
Xamarin.iOS の仕組みを理解しよう!
Introduction Xamarin forms mac
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
第1回 Japan Xamarin User Group Conference - Xamarin 概要
Work with Xamarin.Mac - #JXUG 2014/11/22
Xamarin基礎講座 Xamarinハンズオン(2016.09 浜松) #JXUG #jaghama
Xamarin 概要 2017/01/15
Xamarin によるクロスプラットフォームモバイルアプリ開発(2014.06)
5分で(は終わらなかった)分かるXamarin(開発者向け)
Xamarin.iOS

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