SlideShare a Scribd company logo
What is new on Xamarin.iOS
Xamarin Inc
New in Xamarin.iOS
• Features added in the last year
– Based on the Mono 2.10/Silverlight-ish stack
• Features based on the Beta channel:
– Mono 3.0-based stack
– SGen GC
– Based on the .NET 4.5 API surface
Released
Beta
Visual Studio!
Released
F# Support
• Functional Programming comes to iOS!
• The pitch is simple:
– Fewer bugs
– Focus on intent
– Reuse C# libraries, experience
– More features, less time
Beta
SIZE REDUCTIONS
TweetStation – Reference App
• Comprehensive app
• Networking
• SQL
• Background
• Retina artwork
• Full (unlinked)
MonoTouch.Dialog
TweetStation Size Reduction
6,200
6,400
6,600
6,800
7,000
7,200
7,400
7,600
4.2.2 5.0.4 5.2.13 5.4.1 6.0.10
iOS 6
6.2.1 6.3.3.2
Async
(Mono3)
Size in KB
Size in KB
Released
New: SmartLink
• By default, all native code is linked-in
• SmartLink merges Mono and System linker
– Only code that is directly referenced is included
– Caveat: dynamic Objective-C code can fail
– Big savings:
Beta
SmartLink effect on Samples
-
2,000
4,000
6,000
All code
Smart Linking
Beta
Size Savings
0
100,000
200,000
300,000
400,000
500,000
Savings
RUNTIME IMPROVEMENTS
Generic Value Type Sharing
• Reduces these kinds of errors:
Unhandled Exception: System.ExecutionEngineException: Attempting to
JIT compile method
• By generating generics code that can be shared across
value types
– like reference types today
• Enables more LINQ, RX and other generic-rich apps to run
without changes, or without manual static stubs
Beta
Source of the Error
• Static compiler is unable to infer that certain
generic methods will be used at runtime with
a specific value type.
• Because the instantiations are delayed until
runtime.
Beta
Generic Sharing
• Consider: List<T>.Add (T x)
• If “T” is a reference type:
– Code can be shared between all reference types
– Only one List<RefType>.Add (RefType x) exists
– Because all reference types use same storage (one
pointer).
Beta
Generics and Value Types
• Value types use different storage:
– byte – 1 byte
– int – 4 bytes
– long – 8 bytes
• List<byte>.Add (byte x) has different code
than List<long>.Add (long x)
Beta
Generic Sharing Today
• Using string, Uri, object, int, long on Add:
– Generates one shareable for Uri, object, string
– Generates one for int
– Generates one for long
With new Generic Value Type Sharing
• Using string, Uri, object, int, long on Add:
– Generates one shareable for Uri, object, string
– Generates one for int
– Generates one for long
– Generates a value-type shareable
• Can be used by dynamic users of Add<ValueType>
Beta
Shareable Value Type Generic
• Runtime fallback for generic instantiations that
could not be statically computed
• Uses a “fat” value type
• Generates code that copies “fat” value types
• Limitation: large value types can not be shared
• You can disable if not needed:
– -O=-gsharedvt
Beta
Cost of Value Type Sharing
6,200
6,400
6,600
6,800
7,000
7,200
7,400
7,600
4.2.2 5.0.4 5.2.13 5.4.1 6.0.10
iOS 6
6.2.1 6.3.3.2
Async
(Mono3)
VT
Sharing
Size in KB Size in KB
394 Kb
Today: For TweetStation, the cost is 394kb
We are working to reduce this
Beta
Native Crypto
• System.Security.Cryptography now
powered by iOS native CommonCrytpo
• Covers
– Symmetric crypto
– Hash functions
• Hardware accelerated
– AES and SHA1 (when plugged)
• Made binaries using crypto/https 100k lighter
Released
SGen
• SGen can now be used in production on iOS
• It is no longer slower than Boehm
• And much faster on most scenarios
Beta
DEBUGGING AIDS
NSObject.Description
• New API that provides Objective-C “ToString”
• NSObject.ToString() calls Description
• Sometimes overwritten
– You can always call NSObject.Description
Released
Helping you write Threaded Apps
• UIKit is not thread safe
– No major commercial UI toolkit is thread safe
– Thread safety is just too hard for toolkits
• Very few UIKit methods are thread safe
• During debug mode, you get an exception
Released
UIApplication.CheckForIllegalCrossThreadCalls
• If set, accessing UI elements
– Throws UIKitThreadAccessException
• Most UIKit classes/methods
• UIViewController implemented outside UIKit
• Checks enabled on Debug, disabled on Release builds
– Force use: --force-thread-check
– Force removal: --disable-thread-check
Released
Thread Safe APIs
Thread Safe Classes
• UIColor
• UIDocument
• UIFont
• UIImage
• UIBezierPath
• UIDevice
Key Thread Safe Methods
• UIApplication.SharedApplica
tion, Background APIs
• UIView.Draw
See API docs for
[ThreadSafe] attribute
Released
ASYNC
Async Support
• Base Class Libraries:
– Expect all the standard Async APIs from .NET BCL
– Coverage is .NET 4.5 Complete for BCL
• MonoTouch specific:
• 114 methods on the beta
• Easy to turn ObjC methods into Async ones
– Details on the Objective-C bindings talk
Beta
Async Synchronization Contexts
• For UI thread, we run a UIKit Sync Context
– What you get from the main thread
– Code resumes execution on UIKit thread
– Using async just works
– Transparent
• Grand Central Dispatch Sync Context
– If you are running on a GCD DispatchQueue
– Will resume/queue execution on the current queue
Beta
General Async Pattern
• Methods with the signature:
void Operation (…, Callback onCompletion)
• Become:
Task OperationAsync (…)
Beta
API IMPROVEMENTS
More Strong Type Constructors
• Where you saw
– NSDictionary options
• We now support strongly typed overloads
– Give preference to strongly typed overloads
– Reduce errors
– Trips to the documentation
– Unintended effects
Released
Screen Capture
• To capture UIKit views:
– UIScreen.Capture ()
• To capture OpenGL content:
– iPhoneOSGameView.Capture ()
Released
UIGestureRecognizers
Before
void Setup ()
{
var pan= new UIPanGestureRecognizer (
this, new Selector (”panHandler"));
view.AddGestureRecognizer (pan);
}
[Export(”panHandler")]
void PanImage (UIPanGestureRecognizer rec)
{
// handle pan
}
Problems:
• Error prone: Parameter of PanImage must be right type
• No checking (mismatch in selector names)
Now
void Setup ()
{
var pan = new UIPanGestureRecognizer (PanImage);
view.AddGestureRecognizer (pan);
}
void PanImage (UIPanGestureRecognizer rec)
{
// handle pan
}
Pros:
• Compiler enforced types
• No selectors to deal with
Released
UIAppearance
• Previously:
var appearance = CustomSlider.Appearance;
appearance.SetMaxTrackImage (maxImage, UIControlState.Normal);
– Problem: does not work for subclasses
• Now:
var appearance = CustomSlider.GetAppearance<CustomSlider> ();
appearance.SetMaxTrackImage (maxImage, UIControlState.Normal);
Released
Notifications
• Used in iOS/OSX to broadcast messages
– Untyped registration
– Notification payload is an untyped NSDictionary
• Typically require a trip to the docs:
– To find out which notifications exist
– To find what keys exist in the dictionary payload
– To find out the types of the values in dictionary
Released
Xamarin.iOS Notifications
• Discoverable, nested “Notifications class”
• For example: UIKeyboard.Notifications
• Pattern:
– Static method ObserveXXX
– Returns observer token
– Calling Dispose() on observer unregisters interest
Released
Example – Full Code Completion
notification = UIKeyboard.Notifications.ObserveDidShow ((sender, args) => {
// Access strongly typed args
Console.WriteLine ("Notification: {0}", args.Notification);
// RectangleF values
Console.WriteLine ("FrameBegin", args.FrameBegin);
Console.WriteLine ("FrameEnd", args.FrameEnd);
// double
Console.WriteLine ("AnimationDuration", args.AnimationDuration);
// UIViewAnimationCurve
Console.WriteLine ("AnimationCurve", args.AnimationCurve);
});
// To stop listening:
notification.Dispose ();
Released
NSAttributedString
• On iOS 5:
– Introduced for use in CoreText
• On iOS 6:
– It became ubiquitous on UIKit
– UIKit views use it everywhere
• Cumbersome to create
Released
NSAttributedString
• Standard Objective-C esque approach:
//
// This example shows how to create an NSAttributedString for
// use with UIKit using NSDictionaries
//
var dict = new NSMutableDictionary () {
{ NSAttributedString.FontAttributeName,
UIFont.FromName ("HoeflerText-Regular", 24.0f), },
{ NSAttributedString.ForegroundColorAttributeName, UIColor.Black }
};
• Error prone:
– Get right values for keys
– Get right types for values
– Requires documentation trips
Released
NSAttributedString – C# 4 style
var text = new NSAttributedString (
"Hello, World",
font: UIFont.FromName ("HoeflerText-Regular", 24.0f),
foregroundColor: UIColor.Red);
• Uses C# named parameters
• Uses C# optional parameter processing
• Use as many (or few) as you want
Released
AudioToolbox, AudioUnit, CoreMidi
• Completed MIDI support
– Our CoreMIDI binding is OO, baked into system
– Equivalent to what 3rd party APIs people use
• AudioUnit
– Now complete supported (since 6.2)
– Full API coverage
• AudioToolbox
– Improved support for multiple audio channels
– Strongly typed APIs
Released
CFNetwork-powered HttpClient
• Use Apple’s CFNetwork for your HttpClient
– Avoid StartWWAN (Url call)
– Turns on Radio for you
– Integrates with Async
• Replace:
var client = new HttpClient ()
• With:
var client = new HttpClient (new CFNetworkHandler ())
Beta
New Dispose Semantics
• Changes in NSObject() Dispose
• If native code references object:
– Managed object is kept functional
– Actual shut down happens when native code
releases the reference.
• Allows Dispose() of objects that might still be
used by the system.
Released
Razor Integration
• Sometimes you want to generate HTML
• Razor offers a full template system
– Blend HTML and C#
– Code completion in HTML
• Easily pass parameters from C# to Template
Released
New File -> Text Template -> Razor
Released
Razor
• Creating template, passing data:
– Model property, typed in cshtml file
var template = new HtmlReport () { Model = data };
• Run:
class HtmlReport {
string GenerateString ()
void Generate (TextWriter writer)
}
Released
THANK YOU

More Related Content

Similar to What's new in Xamarin.iOS, by Miguel de Icaza (20)

PDF
Eclipse e4
Chris Aniszczyk
 
PDF
Cincom smalltalk roadmap 2015 draft3
ArdenCST
 
PDF
Hyperloop
Conny Svensson
 
PDF
Hyperloop
Jigar Maheshwari
 
PPTX
Getting Started with XCTest and XCUITest for iOS App Testing
Bitbar
 
PDF
A Framework Driven Development
정민 안
 
PDF
From MEAN to the MERN Stack
Troy Miles
 
PDF
Kubernetes Robotics Edge Cluster System
Tomoya Fujita
 
PPTX
Top 10 python ide
Saravanakumar viswanathan
 
PDF
Janus Workshop @ ClueCon 2020
Lorenzo Miniero
 
PDF
C++ Windows Forms L01 - Intro
Mohammad Shaker
 
PDF
Introduction to Cross Platform Development with Xamarin/ Visual Studio
IndyMobileNetDev
 
PPTX
Optimizing mobile applications - Ian Dundore, Mark Harkness
ozlael ozlael
 
PDF
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Mark Proctor
 
KEY
C# on the iPhone with MonoTouch Glasgow
Chris Hardy
 
PPTX
iOS Application Exploitation
Positive Hack Days
 
PPTX
Learn Electron for Web Developers
Kyle Cearley
 
PPTX
IE10 PP4 update for W3C HTML5 KIG
Reagan Hwang
 
PDF
iOS Application Security
Egor Tolstoy
 
Eclipse e4
Chris Aniszczyk
 
Cincom smalltalk roadmap 2015 draft3
ArdenCST
 
Hyperloop
Conny Svensson
 
Hyperloop
Jigar Maheshwari
 
Getting Started with XCTest and XCUITest for iOS App Testing
Bitbar
 
A Framework Driven Development
정민 안
 
From MEAN to the MERN Stack
Troy Miles
 
Kubernetes Robotics Edge Cluster System
Tomoya Fujita
 
Top 10 python ide
Saravanakumar viswanathan
 
Janus Workshop @ ClueCon 2020
Lorenzo Miniero
 
C++ Windows Forms L01 - Intro
Mohammad Shaker
 
Introduction to Cross Platform Development with Xamarin/ Visual Studio
IndyMobileNetDev
 
Optimizing mobile applications - Ian Dundore, Mark Harkness
ozlael ozlael
 
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Mark Proctor
 
C# on the iPhone with MonoTouch Glasgow
Chris Hardy
 
iOS Application Exploitation
Positive Hack Days
 
Learn Electron for Web Developers
Kyle Cearley
 
IE10 PP4 update for W3C HTML5 KIG
Reagan Hwang
 
iOS Application Security
Egor Tolstoy
 

More from Xamarin (20)

PDF
Xamarin University Presents: Building Your First Intelligent App with Xamarin...
Xamarin
 
PDF
Xamarin University Presents: Ship Better Apps with Visual Studio App Center
Xamarin
 
PDF
Get the Most Out of iOS 11 with Visual Studio Tools for Xamarin
Xamarin
 
PDF
Get the Most out of Android 8 Oreo with Visual Studio Tools for Xamarin
Xamarin
 
PDF
Creative Hacking: Delivering React Native App A/B Testing Using CodePush
Xamarin
 
PDF
Build Better Games with Unity and Microsoft Azure
Xamarin
 
PDF
Exploring UrhoSharp 3D with Xamarin Workbooks
Xamarin
 
PDF
Desktop Developer’s Guide to Mobile with Visual Studio Tools for Xamarin
Xamarin
 
PDF
Developer’s Intro to Azure Machine Learning
Xamarin
 
PDF
Customizing Xamarin.Forms UI
Xamarin
 
PDF
Session 4 - Xamarin Partner Program, Events and Resources
Xamarin
 
PDF
Session 3 - Driving Mobile Growth and Profitability
Xamarin
 
PDF
Session 2 - Emerging Technologies in your Mobile Practice
Xamarin
 
PDF
Session 1 - Transformative Opportunities in Mobile and Cloud
Xamarin
 
PDF
SkiaSharp Graphics for Xamarin.Forms
Xamarin
 
PDF
Building Games for iOS, macOS, and tvOS with Visual Studio and Azure
Xamarin
 
PDF
Intro to Xamarin.Forms for Visual Studio 2017
Xamarin
 
PDF
Connected Mobile Apps with Microsoft Azure
Xamarin
 
PDF
Introduction to Xamarin for Visual Studio 2017
Xamarin
 
PDF
Building Your First iOS App with Xamarin for Visual Studio
Xamarin
 
Xamarin University Presents: Building Your First Intelligent App with Xamarin...
Xamarin
 
Xamarin University Presents: Ship Better Apps with Visual Studio App Center
Xamarin
 
Get the Most Out of iOS 11 with Visual Studio Tools for Xamarin
Xamarin
 
Get the Most out of Android 8 Oreo with Visual Studio Tools for Xamarin
Xamarin
 
Creative Hacking: Delivering React Native App A/B Testing Using CodePush
Xamarin
 
Build Better Games with Unity and Microsoft Azure
Xamarin
 
Exploring UrhoSharp 3D with Xamarin Workbooks
Xamarin
 
Desktop Developer’s Guide to Mobile with Visual Studio Tools for Xamarin
Xamarin
 
Developer’s Intro to Azure Machine Learning
Xamarin
 
Customizing Xamarin.Forms UI
Xamarin
 
Session 4 - Xamarin Partner Program, Events and Resources
Xamarin
 
Session 3 - Driving Mobile Growth and Profitability
Xamarin
 
Session 2 - Emerging Technologies in your Mobile Practice
Xamarin
 
Session 1 - Transformative Opportunities in Mobile and Cloud
Xamarin
 
SkiaSharp Graphics for Xamarin.Forms
Xamarin
 
Building Games for iOS, macOS, and tvOS with Visual Studio and Azure
Xamarin
 
Intro to Xamarin.Forms for Visual Studio 2017
Xamarin
 
Connected Mobile Apps with Microsoft Azure
Xamarin
 
Introduction to Xamarin for Visual Studio 2017
Xamarin
 
Building Your First iOS App with Xamarin for Visual Studio
Xamarin
 
Ad

Recently uploaded (20)

PDF
Ampere Offers Energy-Efficient Future For AI And Cloud
ShapeBlue
 
PDF
TrustArc Webinar - Data Privacy Trends 2025: Mid-Year Insights & Program Stra...
TrustArc
 
PPTX
Building and Operating a Private Cloud with CloudStack and LINBIT CloudStack ...
ShapeBlue
 
PDF
Market Wrap for 18th July 2025 by CIFDAQ
CIFDAQ
 
PDF
visibel.ai Company Profile – Real-Time AI Solution for CCTV
visibelaiproject
 
PDF
Bitcoin+ Escalando sin concesiones - Parte 1
Fernando Paredes García
 
PDF
Apache CloudStack 201: Let's Design & Build an IaaS Cloud
ShapeBlue
 
PPTX
Building a Production-Ready Barts Health Secure Data Environment Tooling, Acc...
Barts Health
 
PDF
Integrating IIoT with SCADA in Oil & Gas A Technical Perspective.pdf
Rejig Digital
 
PDF
Meetup Kickoff & Welcome - Rohit Yadav, CSIUG Chairman
ShapeBlue
 
PDF
2025-07-15 EMEA Volledig Inzicht Dutch Webinar
ThousandEyes
 
PPTX
Lecture 5 - Agentic AI and model context protocol.pptx
Dr. LAM Yat-fai (林日辉)
 
PDF
NewMind AI Journal - Weekly Chronicles - July'25 Week II
NewMind AI
 
PDF
The Past, Present & Future of Kenya's Digital Transformation
Moses Kemibaro
 
PDF
Shuen Mei Parth Sharma Boost Productivity, Innovation and Efficiency wit...
AWS Chicago
 
PDF
UiPath on Tour London Community Booth Deck
UiPathCommunity
 
PDF
How a Code Plagiarism Checker Protects Originality in Programming
Code Quiry
 
PDF
How Current Advanced Cyber Threats Transform Business Operation
Eryk Budi Pratama
 
PDF
Building Resilience with Digital Twins : Lessons from Korea
SANGHEE SHIN
 
PPTX
AI Code Generation Risks (Ramkumar Dilli, CIO, Myridius)
Priyanka Aash
 
Ampere Offers Energy-Efficient Future For AI And Cloud
ShapeBlue
 
TrustArc Webinar - Data Privacy Trends 2025: Mid-Year Insights & Program Stra...
TrustArc
 
Building and Operating a Private Cloud with CloudStack and LINBIT CloudStack ...
ShapeBlue
 
Market Wrap for 18th July 2025 by CIFDAQ
CIFDAQ
 
visibel.ai Company Profile – Real-Time AI Solution for CCTV
visibelaiproject
 
Bitcoin+ Escalando sin concesiones - Parte 1
Fernando Paredes García
 
Apache CloudStack 201: Let's Design & Build an IaaS Cloud
ShapeBlue
 
Building a Production-Ready Barts Health Secure Data Environment Tooling, Acc...
Barts Health
 
Integrating IIoT with SCADA in Oil & Gas A Technical Perspective.pdf
Rejig Digital
 
Meetup Kickoff & Welcome - Rohit Yadav, CSIUG Chairman
ShapeBlue
 
2025-07-15 EMEA Volledig Inzicht Dutch Webinar
ThousandEyes
 
Lecture 5 - Agentic AI and model context protocol.pptx
Dr. LAM Yat-fai (林日辉)
 
NewMind AI Journal - Weekly Chronicles - July'25 Week II
NewMind AI
 
The Past, Present & Future of Kenya's Digital Transformation
Moses Kemibaro
 
Shuen Mei Parth Sharma Boost Productivity, Innovation and Efficiency wit...
AWS Chicago
 
UiPath on Tour London Community Booth Deck
UiPathCommunity
 
How a Code Plagiarism Checker Protects Originality in Programming
Code Quiry
 
How Current Advanced Cyber Threats Transform Business Operation
Eryk Budi Pratama
 
Building Resilience with Digital Twins : Lessons from Korea
SANGHEE SHIN
 
AI Code Generation Risks (Ramkumar Dilli, CIO, Myridius)
Priyanka Aash
 
Ad

What's new in Xamarin.iOS, by Miguel de Icaza

  • 1. What is new on Xamarin.iOS Xamarin Inc
  • 2. New in Xamarin.iOS • Features added in the last year – Based on the Mono 2.10/Silverlight-ish stack • Features based on the Beta channel: – Mono 3.0-based stack – SGen GC – Based on the .NET 4.5 API surface Released Beta
  • 4. F# Support • Functional Programming comes to iOS! • The pitch is simple: – Fewer bugs – Focus on intent – Reuse C# libraries, experience – More features, less time Beta
  • 6. TweetStation – Reference App • Comprehensive app • Networking • SQL • Background • Retina artwork • Full (unlinked) MonoTouch.Dialog
  • 7. TweetStation Size Reduction 6,200 6,400 6,600 6,800 7,000 7,200 7,400 7,600 4.2.2 5.0.4 5.2.13 5.4.1 6.0.10 iOS 6 6.2.1 6.3.3.2 Async (Mono3) Size in KB Size in KB Released
  • 8. New: SmartLink • By default, all native code is linked-in • SmartLink merges Mono and System linker – Only code that is directly referenced is included – Caveat: dynamic Objective-C code can fail – Big savings: Beta
  • 9. SmartLink effect on Samples - 2,000 4,000 6,000 All code Smart Linking Beta
  • 12. Generic Value Type Sharing • Reduces these kinds of errors: Unhandled Exception: System.ExecutionEngineException: Attempting to JIT compile method • By generating generics code that can be shared across value types – like reference types today • Enables more LINQ, RX and other generic-rich apps to run without changes, or without manual static stubs Beta
  • 13. Source of the Error • Static compiler is unable to infer that certain generic methods will be used at runtime with a specific value type. • Because the instantiations are delayed until runtime. Beta
  • 14. Generic Sharing • Consider: List<T>.Add (T x) • If “T” is a reference type: – Code can be shared between all reference types – Only one List<RefType>.Add (RefType x) exists – Because all reference types use same storage (one pointer). Beta
  • 15. Generics and Value Types • Value types use different storage: – byte – 1 byte – int – 4 bytes – long – 8 bytes • List<byte>.Add (byte x) has different code than List<long>.Add (long x) Beta
  • 16. Generic Sharing Today • Using string, Uri, object, int, long on Add: – Generates one shareable for Uri, object, string – Generates one for int – Generates one for long
  • 17. With new Generic Value Type Sharing • Using string, Uri, object, int, long on Add: – Generates one shareable for Uri, object, string – Generates one for int – Generates one for long – Generates a value-type shareable • Can be used by dynamic users of Add<ValueType> Beta
  • 18. Shareable Value Type Generic • Runtime fallback for generic instantiations that could not be statically computed • Uses a “fat” value type • Generates code that copies “fat” value types • Limitation: large value types can not be shared • You can disable if not needed: – -O=-gsharedvt Beta
  • 19. Cost of Value Type Sharing 6,200 6,400 6,600 6,800 7,000 7,200 7,400 7,600 4.2.2 5.0.4 5.2.13 5.4.1 6.0.10 iOS 6 6.2.1 6.3.3.2 Async (Mono3) VT Sharing Size in KB Size in KB 394 Kb Today: For TweetStation, the cost is 394kb We are working to reduce this Beta
  • 20. Native Crypto • System.Security.Cryptography now powered by iOS native CommonCrytpo • Covers – Symmetric crypto – Hash functions • Hardware accelerated – AES and SHA1 (when plugged) • Made binaries using crypto/https 100k lighter Released
  • 21. SGen • SGen can now be used in production on iOS • It is no longer slower than Boehm • And much faster on most scenarios Beta
  • 23. NSObject.Description • New API that provides Objective-C “ToString” • NSObject.ToString() calls Description • Sometimes overwritten – You can always call NSObject.Description Released
  • 24. Helping you write Threaded Apps • UIKit is not thread safe – No major commercial UI toolkit is thread safe – Thread safety is just too hard for toolkits • Very few UIKit methods are thread safe • During debug mode, you get an exception Released
  • 25. UIApplication.CheckForIllegalCrossThreadCalls • If set, accessing UI elements – Throws UIKitThreadAccessException • Most UIKit classes/methods • UIViewController implemented outside UIKit • Checks enabled on Debug, disabled on Release builds – Force use: --force-thread-check – Force removal: --disable-thread-check Released
  • 26. Thread Safe APIs Thread Safe Classes • UIColor • UIDocument • UIFont • UIImage • UIBezierPath • UIDevice Key Thread Safe Methods • UIApplication.SharedApplica tion, Background APIs • UIView.Draw See API docs for [ThreadSafe] attribute Released
  • 27. ASYNC
  • 28. Async Support • Base Class Libraries: – Expect all the standard Async APIs from .NET BCL – Coverage is .NET 4.5 Complete for BCL • MonoTouch specific: • 114 methods on the beta • Easy to turn ObjC methods into Async ones – Details on the Objective-C bindings talk Beta
  • 29. Async Synchronization Contexts • For UI thread, we run a UIKit Sync Context – What you get from the main thread – Code resumes execution on UIKit thread – Using async just works – Transparent • Grand Central Dispatch Sync Context – If you are running on a GCD DispatchQueue – Will resume/queue execution on the current queue Beta
  • 30. General Async Pattern • Methods with the signature: void Operation (…, Callback onCompletion) • Become: Task OperationAsync (…) Beta
  • 32. More Strong Type Constructors • Where you saw – NSDictionary options • We now support strongly typed overloads – Give preference to strongly typed overloads – Reduce errors – Trips to the documentation – Unintended effects Released
  • 33. Screen Capture • To capture UIKit views: – UIScreen.Capture () • To capture OpenGL content: – iPhoneOSGameView.Capture () Released
  • 34. UIGestureRecognizers Before void Setup () { var pan= new UIPanGestureRecognizer ( this, new Selector (”panHandler")); view.AddGestureRecognizer (pan); } [Export(”panHandler")] void PanImage (UIPanGestureRecognizer rec) { // handle pan } Problems: • Error prone: Parameter of PanImage must be right type • No checking (mismatch in selector names) Now void Setup () { var pan = new UIPanGestureRecognizer (PanImage); view.AddGestureRecognizer (pan); } void PanImage (UIPanGestureRecognizer rec) { // handle pan } Pros: • Compiler enforced types • No selectors to deal with Released
  • 35. UIAppearance • Previously: var appearance = CustomSlider.Appearance; appearance.SetMaxTrackImage (maxImage, UIControlState.Normal); – Problem: does not work for subclasses • Now: var appearance = CustomSlider.GetAppearance<CustomSlider> (); appearance.SetMaxTrackImage (maxImage, UIControlState.Normal); Released
  • 36. Notifications • Used in iOS/OSX to broadcast messages – Untyped registration – Notification payload is an untyped NSDictionary • Typically require a trip to the docs: – To find out which notifications exist – To find what keys exist in the dictionary payload – To find out the types of the values in dictionary Released
  • 37. Xamarin.iOS Notifications • Discoverable, nested “Notifications class” • For example: UIKeyboard.Notifications • Pattern: – Static method ObserveXXX – Returns observer token – Calling Dispose() on observer unregisters interest Released
  • 38. Example – Full Code Completion notification = UIKeyboard.Notifications.ObserveDidShow ((sender, args) => { // Access strongly typed args Console.WriteLine ("Notification: {0}", args.Notification); // RectangleF values Console.WriteLine ("FrameBegin", args.FrameBegin); Console.WriteLine ("FrameEnd", args.FrameEnd); // double Console.WriteLine ("AnimationDuration", args.AnimationDuration); // UIViewAnimationCurve Console.WriteLine ("AnimationCurve", args.AnimationCurve); }); // To stop listening: notification.Dispose (); Released
  • 39. NSAttributedString • On iOS 5: – Introduced for use in CoreText • On iOS 6: – It became ubiquitous on UIKit – UIKit views use it everywhere • Cumbersome to create Released
  • 40. NSAttributedString • Standard Objective-C esque approach: // // This example shows how to create an NSAttributedString for // use with UIKit using NSDictionaries // var dict = new NSMutableDictionary () { { NSAttributedString.FontAttributeName, UIFont.FromName ("HoeflerText-Regular", 24.0f), }, { NSAttributedString.ForegroundColorAttributeName, UIColor.Black } }; • Error prone: – Get right values for keys – Get right types for values – Requires documentation trips Released
  • 41. NSAttributedString – C# 4 style var text = new NSAttributedString ( "Hello, World", font: UIFont.FromName ("HoeflerText-Regular", 24.0f), foregroundColor: UIColor.Red); • Uses C# named parameters • Uses C# optional parameter processing • Use as many (or few) as you want Released
  • 42. AudioToolbox, AudioUnit, CoreMidi • Completed MIDI support – Our CoreMIDI binding is OO, baked into system – Equivalent to what 3rd party APIs people use • AudioUnit – Now complete supported (since 6.2) – Full API coverage • AudioToolbox – Improved support for multiple audio channels – Strongly typed APIs Released
  • 43. CFNetwork-powered HttpClient • Use Apple’s CFNetwork for your HttpClient – Avoid StartWWAN (Url call) – Turns on Radio for you – Integrates with Async • Replace: var client = new HttpClient () • With: var client = new HttpClient (new CFNetworkHandler ()) Beta
  • 44. New Dispose Semantics • Changes in NSObject() Dispose • If native code references object: – Managed object is kept functional – Actual shut down happens when native code releases the reference. • Allows Dispose() of objects that might still be used by the system. Released
  • 45. Razor Integration • Sometimes you want to generate HTML • Razor offers a full template system – Blend HTML and C# – Code completion in HTML • Easily pass parameters from C# to Template Released
  • 46. New File -> Text Template -> Razor Released
  • 47. Razor • Creating template, passing data: – Model property, typed in cshtml file var template = new HtmlReport () { Model = data }; • Run: class HtmlReport { string GenerateString () void Generate (TextWriter writer) } Released