Trying to find the answer if Xamarin is a rockstar platform. Comparing to current Android offerings. Making sure all tools that we developers need (IDE, documentation, community on stackoverflow, etc.) are provided by Xamarin platform.
5. 2000 Microsoft announces .NET Framework
2001 Mono project launched by Ximian
2003 Ximian bought by Novell
2004 Mono first release
2009 MonoTouch 1.0
2011 MonoAndroid first release
2011 Novell acquired by Attachmate
0000 Xamarin is founded
2012 Xamarin.Mac
2013 Xamarin Studio
.NET is 15 years old
mono is 11 years old
Xamarin.iOS is 7 years old
Xamarin.Android is 4 years old
modern Xamarin is 2 years old
6. Miguel de Icaza
● never received a degree
● free software developer since 1992
● Midnight Commander
● early Wine contributor
● worked on Linux Sun SPARC
● later on Linux for SGI Indy
● almost did Internet Explorer port to SPARC
● started GNOME project and created
Gnumeric
● started Mono project to implement .NET on
Linux
source: wikipedia
10. Write once run
everywhere*
* that to run your app on every device make sure it
contains nothing else but white background without
any other UI elements
11. Supported platforms
● target:
○ Android, iOS, Mac
○ Windows Phone by sharing C# code between projects
● development:
○ Mac: for all platforms excluding Windows
○ Windows: for all platforms by using remote Mac
○ Linux: -
12. What is
● single language for all platforms - C#
● single base library - .NET Base Class Library
plus specific libraries for target platforms
MonoTouch or Mono.Android
● single runtime for all targeted platforms
iOS, Android, Windows Phone
● “performant enough even for demanding games”
13. What is not
● write once and run anywhere
● use one one platform (Mac or Windows)
to target them all (iOS, Android, Windows)
● one UI for all target platforms
14. Native vs non-native
iOS
● native code at the end
● AOT compiler converts Xamarin app to native ARM code
Android
● no final native code
● Xamarin compiler creates IL (Intermediate Language) which is executed at
runtime on the device
15. Fat binary vs slim debug build
● Hello world + Base Class Library: 15.8MB
● Hello world + BCL after Linking: 2.9MB
● Hello world debug release: 6KB + Mono Shared components: 10MB
source: used to be here http://developer.xamarin.com/guides/android/advanced_topics/linking/
18. IDE
● have to switch manually between iOS and Android
in multiplatform projects
● ultra annoying “app is running, are you sure you want to stop it and install
new version?”
● cannot even compare to IntelliJ aka IDEA
● Visual Studio to the rescue
● horror when overriding methods CMD-I
20. Let’s code in C# and F#
var i = 10; // implicitly typed
int i = 10; // explicitly typed
#define
preprocessor
directive
ulong, ushort
unsigned types
async/await for
asynchronous
programming
mandatory
break in switch
Lambda
expression
Generics with
runtime type
support
namespaces
properties
23. Let’s code in Java or Objective-C
● using Java Native Interface (JNI), or
● using bindings for Java code
● with Objective-C creating binding
● straightforward process, for the second time
29. Layers
● Data Layer
SQLite
● Data Access Layer
create, read, update, delete
● Business Logic
data model and business logic
● Service Access Layer
access REST, parsing JSON
● Application Layer
platform specific code but not UI-related
● User Interface Layer
UI-related code
shared
not
shared
shared
shared
shared
not
shared
32. Shared Project
● no .dll as an output
● “compiled into” referencing project
● not compiled, if not used
● platform specific code via #if statements
○ #if __MOBILE__
○ #if __ANDROID__
● “for personal use only”
34. Portable Class Library
● using a subset of BCL called Profile
● targets many different (supported) platforms
● no platform-specific libraries allowed
● refactoring of PCL affects all referencing projects
● good for sharing with others
43. Forms
● single app screen called a Page
● Page contains layouts (StackLayout, GridLayout) and
UI elements (Button, Image, SearchBar, WebView)
● connect actions (click event, long press event) to code
which is shared across all platforms
● at the end at run-time all UI elements are mapped to native platform-
specific UI components
44. Forms
● can be written in pure code
○ sounds a bit like old school iOS style
● or in XAML layout files
○ sounds more like Android style
○ not supporting existing XAML editor :-/
○ layouts have supporting class, so called CodeBehind class
● using MVVM pattern
54. Xamarin Player
● simulate, debug, demo or run Android apps in our fast and hassle-free
environment.
only Android apps
● integrated with Xamarin Studio and Visual Studio
● native UI on Windows and Mac
● widgets for location and battery
● easy screenshot taking
55. Xamarin Player
● x86 virtual machine with HW acceleration
● VT-x AMD-V
● OpenGL 2.0
● uses VirtualBox 5.0.4
56. Xamarin Player
● can install non-Xamarin native Android APKs?
YES
● supports Google Play Services?
YES via installing third-party provided ZIP file
● hmm, sounds like a Genymotion clone?
YES indeed
57. Xamarin Player
● free
● less widgets
● better drag & drop
● fixed aspect window scaling
● couple of device configurations
● paid
● more widgets
● drag & drop
● window scaling
● lots of device configurations
59. Documentation
● for all targeted platforms
Xamarin.Android, Xamarin.iOS, Xamarin.Forms, Xamarin.Mac and Windows
● Android developer could learn iOS app architecture
● explains not only C# or Xamarin-related aspects but also basics of the
platforms
● always with “download as PDF”
60. Documentation
● iOS app fundamentals
http://developer.xamarin.com/guides/ios/application_fundamentals/
Protocols, Events, and Delegates
● iOS user interface
http://developer.xamarin.com/guides/ios/user_interface/
UIKit, Tables and cells, Storyboards
● platform features
http://developer.xamarin.com/guides/ios/platform_features/
Newsstand, HealthKit, and iOS 9 introduction
61. Documentation
● Android app fundamentals
http://developer.xamarin.com/guides/android/application_fundamentals/
API levels, Activity lifecycle, Handling rotation
● Android user interface
http://developer.xamarin.com/guides/android/user_interface/
Actionbar, Splash screen, List view & adapters, RecyclerView
● platform features
http://developer.xamarin.com/guides/android/platform_features/
Fragments, ContentProvider, new Android versions
63. Third-party libraries
● components via Xamarin Components Store
● packages via NuGet package manager
● libraries & UI components
● easily to be added to a project
67. Packages
● for Android, iOS, or both
● native C#
● via NuGet packages by .NET Foundation
● 44,015 packages
68. Packages
● Android Support Library, Design Library,
RecyclerView by Xamarin
● Android Picasso by jacksierkstra
● iOS SVProgressHUD (wrapper)
● iOS FloatLabelEntry (native)
● Parse.com in 6 versions
69. Packages
● get data from RESTful API and store it
in data model
● refit by paulcbetts
● one C# code for Android, iOS and .NET
RESTful API
data
model
network service
in our app
AFNetworking Retrofit
Retrofitmanually
as a dict
70. Packages
● get data from network
● iOS AFNetworking
● Android OkHttp latest is 2.5.0
● Xamarin ModernHttpClient
on iOS NSURLSession
on Android OkHttp 2.4.0
73. Xamarin Test Cloud
● 1,800 devices and adding 100 monthly
● stars at 1,000 USD/month paid annually … for 2 apps
● 5,000 USD for 5 apps
● NUnit or Calabash tests
● screenshots, device performance for every step of every test
78. Scenario: Credit card number too short
Given I am on the Credit Card Validation Screen
When I enter a credit card number that's 16 digits long
And I click on the Validate button
Then I should see a validation error
source: http://developer.xamarin.com/guides/testcloud/calabash/introduction-to-calabash/
80. Community
● blogs
● developer advocates and their apps
James Montemagno https://github.com/jamesmontemagno
● podcast - Xamarin Podcast
http://pca.st/9cXF
● their own WWDC, also quite pricey 1,499$
Xamarin Evolve
● Paul C. Betts and his libraries https://github.com/paulcbetts/