Upload
aleksander-piotrowski
View
686
Download
2
Embed Size (px)
Citation preview
Xamarinfor not only Android developers
Aleksander Piotrowski@pelotasplus
What platform needsto be a rockstar platform
IDE
Visionary
Documentation
Jake Wharton
Testing tools/services
Emulator
Third-party components Library
Events
Blogs/podcasts
Programing Language
Historya rising star
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 Attachmate0000 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
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
sou
rce:
wik
iped
ia
Pricingnot free for personal use
command linesupport
good IDE
x2 if targeting both iOS and
Android
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
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: -
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”
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
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
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/
IDEone to rule them all
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
Let’s codeand have fun hopefully
Let’s code in C# and F#
var i = 10; // implicitly typed
int i = 10; // explicitly typed
#define preprocessor
directive
ulong, ushortunsigned types
async/await for asynchronous programming
mandatory break in switch
Lambda expression
Generics with runtime type
supportnamespaces
properties
F#
F#
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
Project^wSolution structure
Solution structure
● References - base .Net classes
● Components
● Packages
● Assets
● Properties
● Resources
● our code
● and even maybe tests...
Code sharing
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
source: https://xamarin.com/forms
Code Sharing
● Shared Project
● Portable Class Library
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”
source: http://developer.xamarin.com/guides/cross-platform/application_fundamentals/shared_projects/
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
source: http://developer.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/sharing_code_options/
source: http://developer.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/sharing_code_options/
UI design
Xamarin Forms
source: https://xamarin.com/forms
source: video @ https://xamarin.com/forms
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
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
source: https://xamarin.com/forms
source: https://xamarin.com/forms
Pros
● data entry apps● prototypes & proof-of-
concept apps● little platform-specific
APIs● code sharing over
custom UI
Cons
● specialized interaction required
● highly polished design● many platform-
specific APIs● custom UI above code
sharing
Emulatoror is it simulator
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
Xamarin Player
● x86 virtual machine with HW acceleration
● VT-x AMD-V
● OpenGL 2.0
● uses VirtualBox 5.0.4
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
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
Documentationfor C#, Android, iOS, and ...
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”
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
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
Third-party librariesmaven, pip, apt, cocoapods, npm, we want more!
Third-party libraries
● components via Xamarin Components Store
● packages via NuGet package manager
● libraries & UI components
● easily to be added to a project
Components
● HockeyApp
● Crittercism
● SQLCipher 499$
● Facebook SDK by Xamarin Inc.
● Parse SDK by Parse Inc.
● Tip of the Day
Packages
● for Android, iOS, or both
● native C#
● via NuGet packages by .NET Foundation
● 44,015 packages
Packages
● Android Support Library, Design Library,
RecyclerView by Xamarin
● Android Picasso by jacksierkstra
● iOS SVProgressHUD (wrapper)
● iOS FloatLabelEntry (native)
● Parse.com in 6 versions
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
datamodel
network servicein our app
AFNetworking Retrofit
Retrofitmanuallyas a dict
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
Testingin case you have time for that
Testing
● Xamarin Test Cloud
● Calabash
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
source: https://xamarin.com/test-cloud
source: https://xamarin.com/test-cloud
Calabash
● automated UI tests
● using Behavior Driven Development approach
● written in Ruby, or Cucumber, or Gherkin
source: http://developer.xamarin.com/guides/testcloud/introduction-to-test-cloud/
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/
Communityand expensive conference
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/
IDE
Visionary
Documentation
Jake Wharton
Testing tools/services
Emulator
Third-party components Library
Events
Blogs/podcasts
Programing Language
IDE
Visionary
Documentation
Jake Wharton
Testing tools/services
Emulator
Blogs/podcasts
Third-party components Library
Events
Paul C Betts
Xamarin Studio
Xamarin Podcast
Miguel de Icaza
Awesome docs
Evolve
Xamarin Android Player
Components & packages
Test Cloud & Calabash
Programing LanguageC#, F#, support native