SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Lessons from Xamarin
Development
Mark Gibaud - Developer @ JustGiving
What is Xamarin?
In the beginning
Hybrid vs Native
Initial Findings
Goodbye Resharper :-/
VS Integration Flaky
• Started talking about product features
• ..while building out technical capabilities
• Team = Team++;
• XS more stable, updates more stable
Things settled
Some utilities
• MvvmCross
• RestSharp -> ModernHttpClient + Json.NET
• SQLite.NET + Async
• Azure Mobile Services
Xamarin Bindings
• Repo of monotouch/xamarin bindings:
• https://github.com/mono/monotouch-bindings
• Make your own with ObjectiveSharpie
• We made a KissMetrics binding
• Official Xamarin Bindings not around yet, merchants
tardy
Architecture
Example: SQLite
public class Repository : IRepository
{
private readonly IPlatform _platform;
private SqliteDB _db;
public Repository(IPlatform platform)
{
_platform = platform;
_db = new SqliteDB(_platform.Path);
}
}
JG.Mobile.Core
JG.Mobile.iOS
public void Setup()
{
IoC.Bind<IPlatform,JG.Mobile.iOS.Platform>()
}
Our Architecture
Testing
• Unit Testing lite
• Automated UI Testing:
• Spiked Calabash
• Looking at TestCloud
• Xamarin.UITest
Continuous Integration
• Jenkins +
• Signing key
• Github integration
• Hipchat integration
• TestFlight integration
IB vs UI-in-code
Conclusions
• Potentially a lot to learn
• An investment
• Finding devs is harder
• Cheapest/best way to get to both platforms with
delightful user experience?
Questions?
mark.gibaud@justgiving.com
@markgibaud

Weitere ähnliche Inhalte

Was ist angesagt?

Javascript Myths and its Evolution
Javascript Myths and its  EvolutionJavascript Myths and its  Evolution
Javascript Myths and its Evolution
Deepu S Nath
 
Vert.x introduction
Vert.x introductionVert.x introduction
Vert.x introduction
GR8Conf
 

Was ist angesagt? (20)

Introduction to headless browsers
Introduction to headless browsersIntroduction to headless browsers
Introduction to headless browsers
 
An Introduction to WebAssembly
An Introduction to WebAssemblyAn Introduction to WebAssembly
An Introduction to WebAssembly
 
Production ready Vert.x
Production ready Vert.xProduction ready Vert.x
Production ready Vert.x
 
Web Assembly Big Picture
Web Assembly Big PictureWeb Assembly Big Picture
Web Assembly Big Picture
 
WebAssembly WASM Introduction Presentation
WebAssembly WASM Introduction PresentationWebAssembly WASM Introduction Presentation
WebAssembly WASM Introduction Presentation
 
Web assembly - Future of the Web
Web assembly - Future of the WebWeb assembly - Future of the Web
Web assembly - Future of the Web
 
Vertx in production
Vertx in productionVertx in production
Vertx in production
 
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
 
Javascript Myths and its Evolution
Javascript Myths and its  EvolutionJavascript Myths and its  Evolution
Javascript Myths and its Evolution
 
Nodejs
NodejsNodejs
Nodejs
 
Non-Microsoft Technologies Which Microsoft is Embracing
Non-Microsoft Technologies Which Microsoft is EmbracingNon-Microsoft Technologies Which Microsoft is Embracing
Non-Microsoft Technologies Which Microsoft is Embracing
 
Vert.x introduction
Vert.x introductionVert.x introduction
Vert.x introduction
 
Full stack application development principles
Full stack application development principlesFull stack application development principles
Full stack application development principles
 
Introduction to DVCSes with Mercurial
Introduction to DVCSes with MercurialIntroduction to DVCSes with Mercurial
Introduction to DVCSes with Mercurial
 
DotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + reactDotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + react
 
006. React - Redux framework
006. React - Redux framework006. React - Redux framework
006. React - Redux framework
 
Oleksandr Skachkov "Running С# in your Web Browser with WebAssembly"
Oleksandr Skachkov "Running С# in your Web Browser with WebAssembly"Oleksandr Skachkov "Running С# in your Web Browser with WebAssembly"
Oleksandr Skachkov "Running С# in your Web Browser with WebAssembly"
 
Pushing umbraco to the limits
Pushing umbraco to the limits Pushing umbraco to the limits
Pushing umbraco to the limits
 
An introduction to Node.js
An introduction to Node.jsAn introduction to Node.js
An introduction to Node.js
 
iisnode Test Drive
iisnode Test Driveiisnode Test Drive
iisnode Test Drive
 

Andere mochten auch

Andere mochten auch (9)

Nativo vs Xamarin: pro e contro
Nativo vs Xamarin: pro e controNativo vs Xamarin: pro e contro
Nativo vs Xamarin: pro e contro
 
Xamarin Forms Custom Renderers for the Rescue...
Xamarin Forms Custom Renderers for the Rescue...Xamarin Forms Custom Renderers for the Rescue...
Xamarin Forms Custom Renderers for the Rescue...
 
2017 xamarin
2017 xamarin2017 xamarin
2017 xamarin
 
Say hello to Xamarin 3
Say hello to Xamarin 3Say hello to Xamarin 3
Say hello to Xamarin 3
 
Xamarin Mobile Leaders Summit: The Mobile Mind Shift: Opportunities, Challeng...
Xamarin Mobile Leaders Summit: The Mobile Mind Shift: Opportunities, Challeng...Xamarin Mobile Leaders Summit: The Mobile Mind Shift: Opportunities, Challeng...
Xamarin Mobile Leaders Summit: The Mobile Mind Shift: Opportunities, Challeng...
 
Xamarin Mobile Leaders Summit | Solving the Unique Challenges in Mobile DevOps
Xamarin Mobile Leaders Summit | Solving the Unique Challenges in Mobile DevOpsXamarin Mobile Leaders Summit | Solving the Unique Challenges in Mobile DevOps
Xamarin Mobile Leaders Summit | Solving the Unique Challenges in Mobile DevOps
 
Cross-platform Mobile Development with C# and Xamarin Webinar
Cross-platform Mobile Development with C# and Xamarin WebinarCross-platform Mobile Development with C# and Xamarin Webinar
Cross-platform Mobile Development with C# and Xamarin Webinar
 
Introduction to Xamarin.Forms
Introduction to Xamarin.FormsIntroduction to Xamarin.Forms
Introduction to Xamarin.Forms
 
Native i os, android, and windows development in c# with xamarin 4
Native i os, android, and windows development in c# with xamarin 4Native i os, android, and windows development in c# with xamarin 4
Native i os, android, and windows development in c# with xamarin 4
 

Ähnlich wie JustSharing: Lessons in Xamarin development

Sina App Engine - a distributed web solution on cloud
Sina App Engine - a distributed web solution on cloudSina App Engine - a distributed web solution on cloud
Sina App Engine - a distributed web solution on cloud
cong lei
 
Hot tuna - from Sean Cross
Hot tuna - from Sean CrossHot tuna - from Sean Cross
Hot tuna - from Sean Cross
Stuart Lodge
 
MvvmCross Introduction
MvvmCross IntroductionMvvmCross Introduction
MvvmCross Introduction
Stuart Lodge
 

Ähnlich wie JustSharing: Lessons in Xamarin development (20)

Putting Hadoop on any Cloud. NATI SHALOM at Big Data Spain 2012
Putting Hadoop on any Cloud. NATI SHALOM at Big Data Spain 2012Putting Hadoop on any Cloud. NATI SHALOM at Big Data Spain 2012
Putting Hadoop on any Cloud. NATI SHALOM at Big Data Spain 2012
 
Xamarin.Mac Introduction
Xamarin.Mac IntroductionXamarin.Mac Introduction
Xamarin.Mac Introduction
 
Sina App Engine - a distributed web solution on cloud
Sina App Engine - a distributed web solution on cloudSina App Engine - a distributed web solution on cloud
Sina App Engine - a distributed web solution on cloud
 
C# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCross
C# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCrossC# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCross
C# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCross
 
Hot tuna - from Sean Cross
Hot tuna - from Sean CrossHot tuna - from Sean Cross
Hot tuna - from Sean Cross
 
Spring in the Cloud - using Spring with Cloud Foundry
Spring in the Cloud - using Spring with Cloud FoundrySpring in the Cloud - using Spring with Cloud Foundry
Spring in the Cloud - using Spring with Cloud Foundry
 
Tips for Developing and Testing IBM HATS Applications
Tips for Developing and Testing IBM HATS ApplicationsTips for Developing and Testing IBM HATS Applications
Tips for Developing and Testing IBM HATS Applications
 
Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]
 
Xamarin.iOS中引用自製Objective-C的Class Library
Xamarin.iOS中引用自製Objective-C的Class LibraryXamarin.iOS中引用自製Objective-C的Class Library
Xamarin.iOS中引用自製Objective-C的Class Library
 
Plone FSR
Plone FSRPlone FSR
Plone FSR
 
OpenWhisk JavaOne
OpenWhisk JavaOneOpenWhisk JavaOne
OpenWhisk JavaOne
 
MvvmCross Introduction
MvvmCross IntroductionMvvmCross Introduction
MvvmCross Introduction
 
MvvmCross Seminar
MvvmCross SeminarMvvmCross Seminar
MvvmCross Seminar
 
C# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCross
C# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCrossC# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCross
C# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCross
 
Highlights from the Xamarin Evolve 2016 conference
Highlights from the Xamarin Evolve 2016 conferenceHighlights from the Xamarin Evolve 2016 conference
Highlights from the Xamarin Evolve 2016 conference
 
Putting hadoop on any cloud big data spain
Putting hadoop on any cloud  big data spainPutting hadoop on any cloud  big data spain
Putting hadoop on any cloud big data spain
 
Mobile Backend Apps and APIs meetup London overview of BaaS APIs and discussi...
Mobile Backend Apps and APIs meetup London overview of BaaS APIs and discussi...Mobile Backend Apps and APIs meetup London overview of BaaS APIs and discussi...
Mobile Backend Apps and APIs meetup London overview of BaaS APIs and discussi...
 
State of the Platforms
State of the PlatformsState of the Platforms
State of the Platforms
 
Make it compatible
Make it compatibleMake it compatible
Make it compatible
 
Visual Studio 2017 Launch Event
Visual Studio 2017 Launch EventVisual Studio 2017 Launch Event
Visual Studio 2017 Launch Event
 

Kürzlich hochgeladen

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Kürzlich hochgeladen (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 

JustSharing: Lessons in Xamarin development

Hinweis der Redaktion

  1. Quick show of hands: Who’s heard of Xamarin? Who played around with it at home? Who’s developing in professional capacity in Xamarin?
  2. Who are JustGiving? We have charities, we have people wanting to raise money for them by doing events We connect people with the causes that they care about Charities are a more managed relationship Naturally we have a heavy focus on the consumer side of things (our fundraisers), and this extends to mobile platforms So far used AGENCIES for app dev with mixed results Mature Public API to leverage
  3. About 3 1/2 years old now, still feels new though Based on Mono (open source implementation of C#, over a decade old) Surfaces all the native APIs, and actually adds a little bit here and there to improved things, eg. strongly-typed collections, combines two delegates into one. Google Glass development kit!
  4. Hybrid vs Native: JS Slow / Native more responsive ‘LCD’ presentation/views Native quicker to keep up with new device capabilities Solution to a problem that not everyone has (limited budget to get onto both platforms) Late last year we started the conversation Up till then only agency apps - may be kind to say “mixed results” Xamarin looked like a good bet, so we spiked something in a couple of weeks, then when my project ended I moved onto laying more foundations, get up and running with the toolset etc.
  5. Got up and running Jan/Feb this year Starting out wasn’t that easy Coming from mature web app codebase where everything worked including mature toolset etc Working with two laptops over network feedback loop too slow VS would drop the connection to the Mac build Xamarin.iOS Build Host improved things VS had some quirks that you could only figure out from the forums XS would handle resource files properly XS no nuget support Xamarin upgrades would also break things in interesting ways Eventually moved over to mac entirely, using Xamarin Studio XS was a learning curve SUSPECT still the least friction way to build on iOS if you have the time and patience to adapt to a new IDE? Key observation here: not much code being banged out (with the right tools)! PLUS I think Mac’s are better machines than windows laptops.
  6. Let fundraisers manage their own fundraising pages Get notifications of donations Get Design and UX involved at that point for prototyping Spikes: Database Storage, Notifications backend infrastructure, getting some 3rd party stuff integrated like New Relic (APM) and KissMetrics (Analytics) Also include: X-Plat from start (Android); async/await for responsive UI From dev perspective, it was good to have a bit of time to lay the foundations properly without having to deliver finished features Team ++; (Contractor) Had to build everything from scratch, spike out some things, figure out an architecture that worked, swap out some tools when we figured they weren’t quite right, etc. - all this free from having to deliver finished features. XS fewer crashes, nuget support, PCL situation ironed out
  7. MvvmCross: No doubt helpful, thoughts are evolving. Definitely recommended for your first app. RestSharp (non PCL) -> ModernHttpClient ModernHttpClient uses native implementations for Http (NSUrl*, OkHttp) Important for APM stuff as well Looked at CouchBaseLite (I secretly hope for MongoDB) SQLite no FK support etc. & I hate relational DBs, so for now end we’ve gone for a one-table two-column solution; No alter scripts; Simpler with the right serialisation Azure Mobile Services (Notifications): Was a cinch. Big fan of Azure. NodeJS -> C# (Notification Hubs) etc
  8. - Another benefit of Xamarin just being C# wrapper over ObjC is Xamarin Bindings Repo includes Analytics, App Deployment libraries like TestFlight, HockeyApp, etc. Obviously prefer native .NET wrappers when you can find them, eg. Facebook
  9. Some 3rd parties libraries can go straight into PCL, eg. Facebook (just an OAuth wrapper) - Miguel de Icaza calls this “Pure PCL” “Advanced PCL” - Best use of IoC since testability
  10. - Popular way to supply your packages on mobile now - Azure Mobile Services also uses this - ModernHttpClient (NSUrl* stuff gets injected etc) - all packaged up in one assembly
  11. Platform services - include things like Backgrounding / iBeacon - not view related but platform specific
  12. Not too bothered with Unit Testing some isolated bits where it makes sense Automated UI Testing Spike code that has been rewriting Automated UI testing with Calabash: Ruby heterogenic? TestCloud: What it says on the tin Looks compelling Xamarin.UITest wrapper around the same HTTPServer that Calabash uses only available with TestCloud atm Not cheap!
  13. Happy story: A situation where you can bring the maturity of other tools to the mobile space Command line tools work pretty well mdtool does the hard work (runs several more command line tools) Some potential gotchas: Export signing key from a devs machine, uses a license seat (get 4), Xamarin build license.
  14. - Not very mature yet; Introductory /intermediate stuff They are promising some good stuff coming soon; That said - pick up a lot of little tips between the cracks, “oh btw use this tool to do” Office hours (30 min code reviews?)
  15. - Never been a fan of WSYWIG editors Ultimately, we’ve used it sparingly UI-in-code (some table cells in IB) Autolayouts - rubbish in Xcode 4.0 apparently Just learn the code Like GUI vs CommandLine debate
  16. Xamarin is potentially a lot to learn (Macs, xamarin.NET/PCLs, XS, CocoaTouch, ObjC) Buying: Macbooks/iMacs, Apple Developer Licenses, Xamarin per platform per developer per year licenses, Xamarin University subscriptions, TestCloud subscriptions, etc Finding devs proving to be harder Traditional Mobile devs won’t come to the .Net platform just to get 2 platforms Traditional .NET devs for whatever reason not interested in Mobile dev (lots of exciting things happening in web world)
  17. Xamarin is potentially a lot to learn (Macs, xamarin.NET/PCLs, XS, CocoaTouch, ObjC) Buying: Macbooks/iMacs, Apple Developer Licenses, Xamarin per platform per developer per year licenses, Xamarin University subscriptions, TestCloud subscriptions, etc Finding devs proving to be harder Traditional Mobile devs won’t come to the .Net platform just to get 2 platforms Traditional .NET devs for whatever reason not interested in Mobile dev (lots of exciting things happening in web world)