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
Cross-Platform Mobile Development with C# (Monk...
Search
Greg Shackles
October 18, 2012
Programming
1.8k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Cross-Platform Mobile Development with C# (MonkeySpace 2012)
Greg Shackles
October 18, 2012
More Decks by Greg Shackles
See All by Greg Shackles
Building Modern Services with .NET Core 3 and gRPC
gshackles
0
210
Observability-Driven Development: What DevOps is Really About
gshackles
1
330
Monitoring Your Mobile Apps in the Wild
gshackles
1
120
Building Scalable Applications with the Actor Model
gshackles
0
690
Creating a Voice-Driven TV Remote with Azure and Alexa
gshackles
0
160
Build 2017 Recap for Xamarin Developers
gshackles
0
150
Going Serverless: Event-Driven Architecture Without The Infrastructure
gshackles
0
220
Evolve 2016 Redux
gshackles
0
160
Instrumenting Your Mobile Monitoring Strategy
gshackles
0
4.8k
Other Decks in Programming
See All in Programming
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.7k
テーブルをDELETEした
yuzneri
0
140
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
270
Google Apps Script で Ruby を動かす
kawahara
0
150
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
170
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
150
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
230
React本体のコードリーディング
high_g_engineer
1
140
FDEが実現するAI駆動経営の現在地
gonta
2
280
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
360
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
190
Featured
See All Featured
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
350
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Design in an AI World
tapps
1
280
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
The SEO Collaboration Effect
kristinabergwall1
1
520
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
320
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
200
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Navigating Team Friction
lara
192
16k
Transcript
Greg Shackles Cross-platform mobile development with c#
About Me Greg Shackles Senior Software Engineer OLO Online Ordering
email
[email protected]
twitter @gshackles github github.com/gshackles blog gregshackles.com Slides speakerdeck.com/u/gshackles
nycmobiledev.net @NYCMobileDev
the Book oreil.ly/Lp5smR Discount Code: AUTHD Print Book: 40% Off
E-Book: 50% Off
Market Share (US): August 2012 Google Apple RIM Microsoft Symbian
52.6% Android 34.3% Apple 8.3% RIM 3.6% Microsoft Source: comScore
native platform Languages Objective-C Java C#
Write once, run anywhere
"The biggest mistake we made as a company was betting
too much on HTML5 instead of native." - Mark Zuckerberg
Embrace the differences != !=
c# Everywhere MonoTouch Mono for Android Native
The Power of C# •Base Class Library •LINQ •Parallel LINQ
•Memory Management •Task Parallel Library •Dynamic •Skill Reuse
xamarin Tools •Access to full platform SDKs •100% Native •Linker
•Debugging •frequent releases •active community •Improved API
C# CFStringRef keys[] = { kCTFontAttributeName,
kCTForegroundColorAttributeName }; CFTypeRef bval[] = { cfListLineCTFontRef, CGColorGetConstantColor(kCGColorBlack) }; attr = CFDictionaryCreate ( kCFAllocatorDefault, (const void **) &keys, (const void **) &bval, sizeof(keys) / sizeof(keys[0]), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); astr = CFAttributedStringCreate( kCFAllocatorDefault, CFSTR("Hello World"), attr); obj-c var attr = new CFStringAttributes { Font = listLineCTFont, ForegroundColor = UIColor.Black.CGColor }; var astr = new NSAttributedString ("Hello World", attrs);
C# <activity android:name=".SampleActivity" android:label="@string/app_name">
<intent-‐filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-‐filter> </activity> findViewById(R.id.button).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { // handle click } } ); Java [Activity(Label="@string/AppName", MainLauncher=true)] FindViewById<Button>(Resource.Id.Button).Click += delegate { // handle click };
- - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UI and Platform Code Shared Code
What code can be shared? * with some limitations •Most
non-UI or platform code •Core application logic •Entities •LINQ (objects, XML) •Network access •File / Database Access *
sharing techniques •File Linking •Abstraction •Observer Pattern •Partial Classes and
Methods •Conditional Compilation •portable class libraries
library: xamarin.mobile Supports iOS, Android and Windows Phone xamarin.com/mobileapi
None
Case Study: iCircuit
http://praeclarum.org/post/31799384896/icircuit-code-reuse-the-fourth-edition 16% 84% Shared Platform 31% 69% 13% 87% iOS
WP7 Mac 19% 81% Android Case Study: iCircuit
Case Study: TouchDraw
http://lipsky.me/2012/9/11/touchdraw-code-reuse-updated 39% 61% Shared Platform 24% 76% 28% 72% iOS
Mac Android Case Study: TouchDraw
SignalR Client Libraries http://github.com/gshackles/SignalR C# To Go Mono.CSharp http://github.com/gshackles/CSharpToGo Case
Study: Class Libraries
Questions?