Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Porting Windows Forms App to Xamarin.Mac
Search
ailen0ada
May 07, 2016
Programming
3.8k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Porting Windows Forms App to Xamarin.Mac
2016/5/7 JXUGC #13 の発表資料です。
ailen0ada
May 07, 2016
More Decks by ailen0ada
See All by ailen0ada
How we create our app using Xamarin;
ailen0ada
3
2.3k
.NET Conf 2017 Tokyo, Japan
ailen0ada
1
230
Say hello to Cocoa development with Xamarin.Mac
ailen0ada
1
200
Other Decks in Programming
See All in Programming
Foundation Models frameworkで画像分析
ryodeveloper
1
500
その節約、円になってますか?
isamumumu
1
670
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
160
Google Apps Script で Ruby を動かす
kawahara
0
130
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
520
「人を評価する AI」の設計と実装
ryoyanara
0
130
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
130
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
140
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
200
VibeCodingからAgenticWorkflowへ
starfish719
0
130
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
180
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.8k
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Chasing Engaging Ingredients in Design
codingconduct
0
260
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
320
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
560
HDC tutorial
michielstock
2
770
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
330
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
450
Accessibility Awareness
sabderemane
1
170
Done Done
chrislema
186
16k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
650
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Transcript
Porting Windows Forms App to Xamarin.Mac Cuminas Corporation Tsubasa HIRANO
@ailen0ada 2016/5/7 JXUGC#13
About me 平野 翼 a.k.a. Xamarin.Macの人 ◦ クミナス株式会社 と 五反田の会社
◦ Xamarin 3年生 ◦ Blog: http://aile.hatenablog.com/ ◦ Facebook: ailen0ada ◦ Twitter: @ailen0ada 2016/5/7 JXUGC #13 TOKYO 2
Agenda 1. Did you know Xamarin.Mac? 2. Remember Windows Forms
3. Introducing Gochiusearch 4. Develop strategy of porting App 5. Summary 2016/5/7 JXUGC #13 TOKYO 3
Xamarin.Mac nowadays 2016/5/7 JXUGC #13 TOKYO 4
Xamarin.Mac is... C# という共通言語でMac プラットフォームとお話しできる =ほとんどフルの.NET Framework + OSX API
Binding Mac向けアプリケーション開発環境 ◦ Xamarin.Forms 非対応 ◦ VisualStudio 非対応 ◦ Xamarin University クラスなし 2016/5/7 JXUGC #13 TOKYO 5
Windows Forms 意外と強力なクロスプラットフォームフレームワーク ◦ Mono の互換実装 WinForms により Linux, Mac
でも動作可能 ◦ Windows でビルドした exe ファイルを Mono 経由で叩くだけ ◦ Wine との相性も◎ 標準コントロールだけの業務アプリなら別にこれでよし? 2016/5/7 JXUGC #13 TOKYO 6
Gochiusearch アニメご注文はうさぎですか?全画像約100万枚を対象とした 検索エンジン 2016/5/7 JXUGC #13 TOKYO 7
Gochiusearch 選定の理由 Mac といえば Cocoa ◦ ココアさん推しです Windows Forms で作られている
◦ 3 プラットフォームで共通のUIで動作する 大きすぎず,適度な難易度 ◦ グラフィックス周り ◦ ドラッグ&ドロップ(ファイル&ブラウザ) とにかく堂々と発表できる事例が作りたかった 2016/5/7 JXUGC #13 TOKYO 8
Demo MONO,MONOMAC,APPSTORE 2016/5/7 JXUGC #13 TOKYO 9
そりゃまあ動くけど Macでのユーザーインタフェースは問題だらけ ◦ メニューバーがクリックできない ◦ アプリケーション名がmono, アイコンも変更できない ◦ フォントレンダリングがちょっと… ◦
ブラウザからのドラッグ&ドロップに対応できない 動作するのと,快適に使うことができるかは別問題 2016/5/7 JXUGC #13 TOKYO 10
試作: MonoMac で薄くラップする バンドル化の機能を使う ◦ mkbundle でもできるはず,うまくいかなかった ◦ MainForm.cs のドラッグ&ドロップ周りだけオーバーライドする
ユーザーインタフェースの問題は解決しない ◦ WinForms には変わりない ◦ ただ Mac アプリっぽく振る舞うことはできるようになる コレジャナイ 2016/5/7 JXUGC #13 TOKYO 11
Xamarin! Xamarin! Xamarin! 1. Windows プラットフォーム依存コードを洗い出す ◦ System.Drawing, System.Windows 名前空間への依存
2. ユーザーインタフェースを xib で実装 ◦ Storyboard を使うと 10.9 で起動できなくなる 3. ImageSearch はそのままに,まず Full Mono で実装 4. ImageSearch を PCL 化,Xamarin.Mac Mobile に移行 5. AppStore 提出 2016/5/7 JXUGC #13 TOKYO 12
Xamarin.Mac Mobile Framework 可能な限りこのフレームワークを使う ◦ ランタイムがiOS向けチューンされたものと同等になる ◦ ライブラリのリンクが可能,バイナリサイズの削減=起動時間の短縮 ◦ .NETアセンブリはPCL限定,Cocoa
側はフルに利用可能 ImageSearch ライブラリのPCL化 System.Drawing.Graphics の排除 2016/5/7 JXUGC #13 TOKYO 13
ImageSearch を移植可能に 2016/5/7 JXUGC #13 TOKYO 14 ImageSearchEngine DB読み込み 画像
読み込み 画像の縮小 ビット ベクトル 算出 ハミング 距離 算出 DBの検索 入 力 出 力 System.IO.FileStream System.Drawing.Bitmap System.Drawing.Rectangle プラットフォーム依存なし System.Drawing.Graphics
ImageSearch を移植可能に 2016/5/7 JXUGC #13 TOKYO 15 ImageSearchEngine.Portable DB読み込み 画像の縮小
ビット ベクトル 算出 ハミング 距離 算出 DBの検索 入 力 出 力 PCLStorage XMSearch 画像 読み込み CGImage 経由で画像の読み込み 32bppARGB のバイト列に展開
Sandboxing セキュリティの向上,AppStore 提出基準への適合 ◦ ユーザーが指定したファイル・フォルダのみ読み書き可能 ◦ ネットワークアクセスなども制限 ◦ アプリケーションの生成したファイルはすべてコンテナフォルダへ ◦
~/Library/Containers/{app bundle name}/Data ◦ Environment.SpecialFolderも影響を受ける SecurityException は送出されない ◦ 行おうとした操作によって例外は異なる コンソールで特定 ◦ ex) Outgoing connectionを許可していなかった場合はWebException – 名前解決エラー ◦ mDNSResponderへのアクセスが拒否されるため 2016/5/7 JXUGC #13 TOKYO 16
Cocoaの使いどころ 画像かどうかの判定 ◦ 元ソースでは拡張子による判定 ◦ Macではシステムがある程度判別してくれる=Uniform Type Identifier ◦ UTI
が画像だったら CGImage も大体作れる パスの分解・結合をNSString/NSUrl にやらせる ◦ PathComponents を使って部分パスの取得や追加ができる CGImageによる画像読み込み,ローカライゼーション 無理に共通化にこだわらない ◦ プラットフォームAPIを使った方が高速,便利な場面を見極める 2016/5/7 JXUGC #13 TOKYO 17
Practice まず Full Mono で動くところまで持って行く ◦ ユーザーインタフェースをXcodeで作って,元ソースを切り貼りする ◦ MessageBoxなどコモンダイアログ系はこの段階で移行 Mobile
Frameworkに変更してみる ◦ 動けばよし,動かない点をピックアップする ◦ データアクセス部分をPCLにしていけばほぼ終わり どうにもならないときだけ Xamarin.Mac 4.5 Framework ◦ PCL として配布されてないNuGet パッケージに依存している場合で, 代替もないときに限られるはず 2016/5/7 JXUGC #13 TOKYO 18
Unleash the power of Xamarin.Mac .NET と Cocoa のいいとこ取りができる ◦
すべてを .NET Framework 内で完結する必要はない ◦ Mac には Mac の流儀がある! ◦ もちろん共通項は PCL にまとめておける フル機能の Mono を使うこともできる ◦ System.Drawing とか System.Configuration に依存していても大丈夫 ◦ 期待通りに動作しない部分だけ Cocoa を使えばいい デバッグが高速,シミュレータなんて不要!すぐ試せます 2016/5/7 JXUGC #13 TOKYO 19
Now available on the App Store 2016/5/7 JXUGC #13 TOKYO
20
Thank you. より詳細なステップバイステップはブログで http://aile.hatenablog.com/ 2016/5/7 JXUGC #13 TOKYO 21