4. Building apps for the Mobile Space
Developer
User
Experience
productivity
Security &
privacy
Distribution:
Public or private
Corporate?
Which
platforms?
Application
Lifecycle
Management
8. Xamarin History
Over a Decade of Enterprise Production Use
450,000
Reach 200,000
Developers
Developer
100+ Partners
Mark
100+ Components
2000
Ximian
Founded
2001
2003
2009
2011
Mono
Launches
Ximian
Acquired
by Novell
First iOS
product (now
Xamarin.iOS)
launches
2013
Xamarin
Founded
2012
First
Xamarin 2.0
release of
Xamarin.Mac Component
First
Store
Release of
Launch
Xamarin Test
Xamarin.Android Partner
Cloud
Program
Evolve 2013
Microsoft
Partnership
9. Anything you can do in Objective-C or Java can be
done in C# and Visual Studio with Xamarin.
10. Native Performance
Xamarin.iOS does full Ahead Of
Time (AOT) compilation to produce
an ARM binary suitable for Apple’s
App Store.
Xamarin.Android takes advantage
of Just In Time (JIT) compilation
on the Android device.
11. Accelerate Development with Code
Sharing
Code sharing statistics from production Xamarin app: real-time
circuit simulator and editor used to design analog and digital
circuits
12. Completely Up-to-Date with Device OS releases
Always up-to-date with the
latest APIs from Apple and
Google.
Track record of offering sameday support: iOS 5, iOS 6, iOS
✔
6.1 and iOS 7.
13.
14. UIKit
3rd party app
Tap app icon
main()
AppDelegate
UIApplicationMain()
FinishedLaunching
Event loop
HandleEvent
Quit foreground msg
OnActivated
OnResignActivation
Background
DidEnterBackground
WillTerminate
Restart tasks
Reload state
Refresh
Pause tasksUI
Throttle down
frame rates
Save state
Save data
Free resources
21. Mono for Android
Architectural picture of Mono for Android
.NET APIs
Android
Bindings
Mono (.NET Runtime)
MCW
ACW
Linux Kernel
Android.
*
Java.*
Dalvik (Java Runtime)
22. App model - Activity lifecycle
Activity
Launched
Restore
state here
Initialize
layout here
onCreate()
User navigates to
the activity
onStart()
onRestart()
onResume()
Another activity
App process comes into the
foreground
killed
Activity
running
The activity is no longer visible
Apps with higher state
The activitySave
is finishing or being onPause()
priority need
destroyed by the system
memory here
onStop()
onDestroy()
Activity shut
down
User returns to
the activity
User navigates to
the activity
23. Building apps on android
Intent
Intent
Activity
Intent
Content
Provider
View
Intent
Activity
Intent
View
Service
Intent
Broadcast
Receiver
26. Platform UI
Design Patterns for Reuse
Data
Serialization
Caching
Security
Application Business Logic
AuthN/AuthZ
Encryption
Data Self Destruction
Utilities
Platform Agnostic API
Device services
Analytics
Logging
Glue together the
application layers
29. Model Implementation
We implement the Model as a Singleton
Model Implements INotifyPropertyChanged
Easy to enlist subscribers
Facilitate automatic databinding in XAML
Model contains rich features such as filtering and
advanced selections
Easy to share logic
30. Model Implementation
public class MainModel : INotifyPropertyChanged
{
private static MainModel _model;
private static object _lockHandle = new object();
// Facilitates Windows Phone app resume
public void RestoreState(MainModel state)
{
_model = state;
}
public static MainModel Current
{
get {
if (_model == null) {
_model = new MainModel();
}
return _model;
}
}
public IEnumerable<Event> ActualEvents {
get {
// E.g. Complex linq stuff
}
}
}
// Model Usage:
var foo = MainModel.Current.ActualEvents;
31. Check your water level
XAML /
Device Specific
ValueConverter
Reusable Business Logic
Model Property
Value
Transformation
32.
33. public class ISKEController
{
private static ISKEController _instance;
private ISKEDomainServicesoap _proxy;
public static ISKEController Current
{
get {
if (_instance == null) {
_instance = new ISKEController();
}
return _instance;
}
}
private void GetActualEvents (Action<object> OnSuccess, Action<Exception> OnFail)
{
// do some logic, or service call
// use actions to report result or trigger UI action
}
}
34. S
F
UIViewControlle
r
S
F
XAML View
Activity
public void OnSuccess(object
data)public void OnFailed(Exception
{
e)
//{Do something with data
Shared Controller
// Notify user
// Do GetActualEvents
something with error
}
}
(Action<object> OnSuccess,
Action<Exception> OnFail)
Web Services
S
F
Model
PropertyChanged(“Events”)
;
39. A.cs
partial class A
{
// Half of the implementation
}
A.extra.cs
partial class A
{
// The other half
}
40. A.cs
A.iOS.cs
partial classAlways private and returns
A
{
void
// Declare the method here
partial void DoSomethingEx();
partial class A
{
// Provide the implementation here
partial void DoSomethingEx()
{
public void DoSomething()
// Do something iOS specific
{
}
// Some shared logic be used from shared
}
Can
Leaves room for specific
DoSomethingEx();
logic
implementation
}
}
43. Summary
Xamarin provides Native Cross platform
capabilities
– Best of all worlds
Use the power of C#
– BCL, LINQ, ASYNC, etc
Keep abstractions as simple as possible
– Avoid IOC, Big frameworks
– Remember your on a mobile device, each cycle
counts!
Hinweis der Redaktion
Rhodes – rhomobile ; Ruby + HTML; MVC architectuur met extra framework zakenvoor sync en ORMAntenna: Appcellerator: pure javascriptoplossing met cross platform API. Wel: native UI bindings. Interpreted door meegedeployde interpreter
Data Self Destruction: when a device gets compromised, you’d want some way built into the app to enable data self destruction. This might be some generic security class that is able to wipe the data portion of the application based on some (remote) signal.
Controller acts as a Mediator in Cocoa interpretation of MVC
Photo Credit: <a href="http://www.flickr.com/photos/45409431@N00/3499224439/">marfis75</a> via <a href="http://compfight.com">Compfight</a> <a href="http://creativecommons.org/licenses/by-sa/2.0/">cc</a>