SlideShare a Scribd company logo
Programming iOS in C#
Frank A. Krueger
Seattle .NET Mobile
March 4, 2014
AGENDA
•

Intro to iOS APIs

•

Intro to UIKit

•

Demo programming with Xamarin Studio
Frank
@praeclarum
http://praeclarum.org
http://github.com/praeclarum
•

.NET developer since .NET 1.1

•

First iOS app accepted to the App Store on
Dec 11, 2008

•

First apps written in Objective-C++
Frank
Frank
•

Started using MonoTouch (Xamarin.iOS)
summer 2009

•

First app released with iPad in May 2010
Frank
Frank
https://github.com
/
praeclarum/lcar
s
Frank

•

iCircuit released
July, 2010
iOS APIs
iOS APIs
Cocoa Touch
UIKit, GameKit, MapKit, …

Services
Foundation, CoreLocation,
CoreMotion, PassKit,
JavaScriptCore, Multipeer
Connectivity, …

Media
CoreGraphics, CoreAudio,
CoreImage, CoreText, OpenGL,
SpriteKit, …

Core OS
Accelerate, CoreBluetooth,
ExternalAccessory, …
Cocoa Touch
•

UIKit to create the UI

•

iAd to get rich

•

GameKit to interface with Game Center

•

MapKit for interactive 2D and 3D maps

•

AddressBookUI to access Contacts

•

EventKitUI to access the Calendar

•

MessageUI to send email or messages
Media
•

CoreGraphics to render vector graphics onto bitmaps

•

ImageIO even supports raw images

•

CoreImage hardware accelerated image processing

•

CoreAnimation for high performance realtime rendering (basis for UIKit)

•

GLKit for all your 3D needs

•

SpriteKit is a 2D sprite game engine

•

AVFoundation, AssetsLibrary, AudioToolbox, AudioUnit,
CoreAudio, CoreMIDI, CoreVideo, OpenAL, Media Player . Get the
picture?
Services
•

Foundation provides a serializable data, collections, networking, data streams,
strings (like the BCL)

•

CoreLocation provides location updates

•

CoreMotion provides orientation and activity tracking

•

Multipeer Connectivity easily create peer-to-peer and mesh networks

•

JavaScriptCore full JavaScript engine that you can embed in your app and
even bridge to your object model

•

CoreData full ORM and data store that even works over iCloud

•

Social accesses OS-level social accounts to post messages

•

PassKit to add passes to the Passbook app
Core OS
•

Accelerate super fast and efficient image and
matrix math library

•

Security provides safe places to put data

•

CoreBluetooth gives low level access to the
Bluetooth hardware

•

Exter nalAccessory gives low level access to
devices plugged into the device
iOS API
Cocoa Touch
UIKit, GameKit, MapKit, …

Media
CoreGraphics, CoreAudio,
CoreImage, CoreText, OpenGL,
SpriteKit, …

https://developer.apple.com/library/ios
Services
Foundation, CoreLocation,
CoreMotion, PassKit,
JavaScriptCore, Multipeer
Connectivity, …

Core OS
Accelerate, CoreBluetooth,
ExternalAccessory, …
Programming iOS in C#
Programming iOS in C#
Programming iOS in C#
Objective-C Declaration
- (void)presentViewController:(UIViewController *)viewControllerToPresent
animated:(BOOL)flag
completion:(void (^)(void))completion

[self presentViewController:vc animated:YES completion:^{
// Do stuff after it’s been presented
}];
Objective-C Declaration in C#
Task PresentViewControllerAsync (
UIViewController viewControllerToPresent,
bool animated)

await PresentViewController (vc, true);
// Do stuff after it’s been presented

- (void)presentViewController:(UIViewController *)viewControllerToPresent
animated:(BOOL)flag
completion:(void (^)(void))completion
Programming iOS in C#
Programming iOS in C#
Programming iOS in C#
UIKit
Single Screen App
UIApplication
Delegate

UIApplicationDelegate
Window

UIWindow
Single Screen App
UIApplication

Created by OS

Delegate

UIApplicationDelegate

Subclassed
by your app

Window

UIWindow

Created by you
Single Screen App
UIWindow

RootViewControlle
r

UIViewController
UIViewController
•

The Controller in MVC responsible for
-

monitoring and coordinating user interactions

-

to view and edit model data
UIViewController
is an MVC controller
is an MVC controller
Model

VIEW
CONTROLLER

Cloud Data
User Data
Services
Device Sensors

Label
Table
Edit Box
UIViewController
•

A Screen of UI
-

on iPhone, takes up the majority of the screen

-

on iPad, can take up the whole screen or have
children view controllers in a layout

-

designed to work with parent UINavigationController
with navigation actions and toolbar actions

-

present or otherwise transitions to other view
controllers
Single Screen App
UIWindow

RootViewControlle
r

UIViewController

Model

View

UIView
Single Screen App
UIWindow

RootViewControlle
r

UIViewController

View

UIView
Subviews

Model

UILabel
UIButton
…
Multi Screen App
UIWindow

UIViewController

View

RootViewControlle
r

UIViewController

Subviews
ChildViewController
s

UIViewController
Model

UIView

UILabel
UIButton
View

UIView
Subviews

UILabel
UIButton
UIView
•

“Dumb” - should not interact with the Model directly

•

Responsible for drawing itself

•

Contains subviews to layout

•

Receives touch events, can be assigned
gesture recognizers

•

Participates in the responder chain for user input
(keyboard, pop-up menus)
UIViews
•

Output

•

Input

•

Big Scrolling Complicated Things

•

Custom
Output Views
UILabel
Displays rich-text

UIImageView
Displays images

UIBezierPath
Displays vector graphics

UIActivityIndicatorVie
w
Animates a circle to
indicate activity

UIProgressView
A linear progress bar
Input Views
UIButton
You know what it does

UISwitch
On/Off toggle

UITextField
Single-line text input
UISegmentedContro
l
Modern radio buttons
UIStepper
Two-button action

UISlider
Discrete or continuous
number selection
UIScrollView
•

Scroll and zoom subviews

•

Responsible for velocity scroll
and bounce effects

•

Can also page through views

•

Scroll views within scroll views
are supported

•

Basis for many full screen
views
UITableView
•

Scroll view designed to display
a long vertical list of cells

•

Used everywhere in iOS from
login forms, status feeds,
episode lists…

•

MonoTouch.Dialog simplifies
the interface
UICollectionView
•

Versatile and efficient view to
display large amount numbers
of views arranged and sized in
any fashion

•

Introduced in iOS 6, these are
meant to replace UITableViews
to create richer UIs

•

Pluggable layout engine with
built-in flow layout

•

Advanced transition and
physical animations built into
iOS 7
UIWebView
•

Practically an entire web
browser in a UIView

•

You can control its cookies and
cache

•

You can execute JavaScript
code against the DOM

•

You can feed it raw HTML or
point it to a URL
UITextView

•

Multiline rich text editor
UIPickerView

•

UIDatePicker is a ready-to-use
UIPickerView
Custom UIViews
Composition through Subviews
•

Need to layout using auto layout
constraints or old-fashioned
rectangle setting
class MyView : UIView {
public MyView () {
AddSubviews (Time, Progress, Title, Author);

}

}

Time.Frame = new RectangleF (
20, 20, 300, 40);
Progress.Frame = new RectangleF (
20, 200, 300, 40);
Title.Frame = new RectangleF (
20, 300, 300, 80);
Author.Frame = new RectangleF (
20, 380, 300, 80);
EasyLayout https://gist.github.com/praeclarum/6225853
class MyView : UIView {
public MyView () {
AddSubviews (Time, Progress, Title, Author);
this.ConstrainLayout (() =>
Time.Frame.Left == this.Frame.Left + 20 &&
Time.Frame.Right == this.Frame.Right - 20 &&
Time.Frame.Top == this.Frame.Top + 20 &&
Progress.Frame.GetMidX () == Time.Frame.GetMidX () &&
Progress.Frame.Top
== Time.Frame.Bottom &&
Title.Frame.GetMidX () == this.Frame.GetMidX () &&
Title.Frame.Top
== PlayPause.Frame.Bottom &&
Title.Frame.Width
<= TitleMaxWidth &&

}

}

Author.Frame.GetMidX () == this.Frame.GetMidX () &&
Author.Frame.Top
== Title.Frame.Bottom &&
Author.Frame.Width
<= TitleMaxWidth);
Custom UIViews
Custom Drawing
public override void Draw (RectangleF rect)
{
var c = UIGraphics.GetCurrentContext ();
var b = Bounds;
c.SetLineWidth (1.0f);
c.SetRGBStrokeColor (202/255.0f, 202/255.0f, 202/255.0f, 1);
c.MoveTo (0, 0);
c.AddLineToPoint (0, b.Height);
c.StrokePath ();
c.MoveTo (b.Width, 0);
c.AddLineToPoint (b.Width, b.Height);
c.StrokePath ();
c.SetRGBStrokeColor (176/255.0f, 176/255.0f, 176/255.0f, 1);

}

c.MoveTo (0, b.Height);
c.AddLineToPoint (b.Width, b.Height);
c.StrokePath ();
UIGestureRecognizer
•

Easy recognition of single and multitouch events

•

Multiple recognizers can be added to a view

•

Can coordinate with other gesture recognizers
UIXGestureRecognizer
•

LongPress

•

Pan

•

Pinch

•

Rotation

•

ScreenEdgePan

•

Swipe

•

Tap
UIMyGestureRecognizer
•

Making your own is easy

•

Just Respond to these events:
TouchesBegan
TouchesMoved
TouchesEnded
TouchesCancelled
UIViewController
•

To implement a screen of your app, inherit from
UIViewController

•

But there are built-in view controllers
UINavigationController
•

Maintains a stack of
UIViewController like a web
browser

•

Provides a navigation bar and
a toolbar for actions

•

Fundamental controller for
iPhone UI

•

UIViewControllers are
designed to work well within a
UINavigationController
UITabBarController
•

Up to 5 discrete view
controllers accessible by
buttons at the bottom of the
screen

•

Often these view controllers
are UINavigationControllers
UISplitViewController
•

Only available on iPad

•

Must be the window’s
RootViewController

•

Provides automatic handling of
master-detail type UIs
UIPageViewController

•

Built-in page turn effect
UITableViewController &
UICollectionViewController
Controller
UIPopoverController

•

Not a UIViewController, not a
UIView, but works with them

•

Only works on the iPad (crash
on iPhone)
Reacting to events
UIViewController

View

UIView
Subviews

Model

Service
Service
Events
Events

UILabel
UIButton
…

User Events
User Events
Many event sources
•

.NET events

•

Overridable methods

•

Async tasks

•

NSNotificationCenter

•

Responder Chain

•

Delegate objects
Delegate objects
•

Instead of many events that can be subscribed to
by many different objects,

•

Events are overridable methods on an object that
get called as if they were events

•

Can also be used to pass data back to the calling
object
Delegate objects
UISplitViewController splitVC = …;
splitVC.Delegate = new SplitDelegate ();
class SplitDelegate : UISplitViewControllerDelegate
{
public override bool ShouldHideViewController (UISplitViewController svc,
UIViewController viewController,
UIInterfaceOrientation inOrientation)
{
return true;
}
public override void WillHideViewController (UISplitViewController svc,
UIViewController aViewController,
UIBarButtonItem barButtonItem,
UIPopoverController pc)
{
}

}

public override void WillShowViewController (UISplitViewController svc,
UIViewController aViewController,
UIBarButtonItem button)
{
}
Reusable Views
In order to be fast and lean,
views with potentially many subviews
recycle offscreen views
(Virtual list mode in WinForms)
Reusable Views
Usually these views have a

DataSource
property that is responsible for creating and data
binding reusable subviews
UITableView.DataSource
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
var cell = tableView.DequeueReusableCell (EpisodeTableViewCell.ReuseId)
as EpisodeTableViewCell;
if (cell == null) {
cell = new EpisodeTableViewCell ();
}
cell.Episode = Controller.episodes [indexPath.Row];
}

return cell;

When a cell goes offscreen, it is removed from the view hierarchy and
stored in a cache
When the table view needs a new cell to display, your code should take
from this cache
UICollectionView.DataSource
collectionView.RegisterClassForCell (typeof(EpisodeCell), EpisodeCell.ReuseId);

public override UICollectionViewCell GetCell (UICollectionView collectionView,
NSIndexPath indexPath)
{
var cell = (EpisodeCell)collectionView.DequeueReusableCell (
EpisodeTableViewCell.ReuseId, indexPath)
cell.Episode = Controller.episodes [indexPath.Row];
}

return cell;
UIPageView
&
UIPickerView
UIPickerView
UIPickerView
Theming
•

Theming is supported at the OS level

•

Meant to be set once

•

Appearance attributes can be set per class or
per object
Theming
UINavigationBar.Appearance.SetTitleVerticalPositionAdjustment (-1, UIBarMetrics.Default);
UINavigationBar.Appearance.SetTitleVerticalPositionAdjustment (-4, UIBarMetrics.LandscapePhone);
UINavigationBar.Appearance.SetTitleTextAttributes (new UITextAttributes {
TextColor = BarTextColor,
TextShadowColor = BarTextShadowColor,
TextShadowOffset = BarTextShadowOffset,
Font = UIFont.FromName (TitleFontName, BarTitleFontSize),
} );
Maps
View Controller Hierarchy
UINavigationController
MapViewController

View Hierarchy
UIWindow
UINavigationBar
UIButton
UISearchBar
UIButton
MKMapView
MKMapOverlay[]
UIToolbar
UIButton[]
Maps
View Controller Hierarchy
UINavigationController
MapViewController

View Hierarchy
UIWindow
UINavigationBar
UIButton
UISearchBar
UIButton
MKMapView
MKMapOverlay[]
UIToolbar
UIButton[]
Maps
class MapViewController : UIViewController
{
override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Set our View to the interactive map
View = new MKMapView ();
// Set (top) navigation bar buttons
NavigationItem.LeftBarButtonItem =
new UIBarButtonItem (
UIImage.FromBundle ("Directions.png"),
HandleDirections);

}

}

// Set (bottom) toolbar buttons
ToolbarItems = new[] {
new UIBarButtonItem (
UIImage.FromBundle ("Location.png"),
HandleLocation);
};

Window.RootViewController =
new UINavigationController (
new MapViewController ());
Demo
Programming iOS in C#
Ad

More Related Content

Similar to Programming iOS in C# (20)

Appcelerator Titanium at Mobile 2.0
Appcelerator Titanium at Mobile 2.0Appcelerator Titanium at Mobile 2.0
Appcelerator Titanium at Mobile 2.0
Jeff Haynie
 
Mobile 2.0 Event: Mobile for the rest of us using Appcelerator Titanium
Mobile 2.0 Event: Mobile for the rest of us using Appcelerator TitaniumMobile 2.0 Event: Mobile for the rest of us using Appcelerator Titanium
Mobile 2.0 Event: Mobile for the rest of us using Appcelerator Titanium
Jeff Haynie
 
Mobile for the rest of us
Mobile for the rest of usMobile for the rest of us
Mobile for the rest of us
Axway Appcelerator
 
Real-time Chat Backend on AWS IoT 20160422
Real-time Chat Backend on AWS IoT 20160422Real-time Chat Backend on AWS IoT 20160422
Real-time Chat Backend on AWS IoT 20160422
akitsukada
 
Introduction to MonoTouch
Introduction to MonoTouchIntroduction to MonoTouch
Introduction to MonoTouch
Jonas Follesø
 
iPhone Development Intro
iPhone Development IntroiPhone Development Intro
iPhone Development Intro
Luis Azevedo
 
iOS Development Survival Guide for the .NET Guy
iOS Development Survival Guide for the .NET GuyiOS Development Survival Guide for the .NET Guy
iOS Development Survival Guide for the .NET Guy
Nick Landry
 
Session 210 _accessibility_for_ios
Session 210 _accessibility_for_iosSession 210 _accessibility_for_ios
Session 210 _accessibility_for_ios
cheinyeanlim
 
Xamarin and azure iot
Xamarin and azure iotXamarin and azure iot
Xamarin and azure iot
Puja Pramudya
 
MOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentMOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app development
anistar sung
 
Medium TechTalk — iOS
Medium TechTalk — iOSMedium TechTalk — iOS
Medium TechTalk — iOS
jimmyatmedium
 
Terence Barr - beyond smartphones - 24mai2011
Terence Barr  - beyond smartphones - 24mai2011Terence Barr  - beyond smartphones - 24mai2011
Terence Barr - beyond smartphones - 24mai2011
Agora Group
 
Declarative UI on iOS without SwiftUI (中文)
Declarative UI on iOS without SwiftUI (中文)Declarative UI on iOS without SwiftUI (中文)
Declarative UI on iOS without SwiftUI (中文)
Shih-Ting Huang
 
201507_NeoHsu_Portfolio
201507_NeoHsu_Portfolio201507_NeoHsu_Portfolio
201507_NeoHsu_Portfolio
Neo Hsu
 
iOS
iOSiOS
iOS
Scott Leberknight
 
Cross Platform Mobile Development using Flutter by Wei Meng Lee at Mobile foc...
Cross Platform Mobile Development using Flutter by Wei Meng Lee at Mobile foc...Cross Platform Mobile Development using Flutter by Wei Meng Lee at Mobile foc...
Cross Platform Mobile Development using Flutter by Wei Meng Lee at Mobile foc...
DevClub_lv
 
Getting started with Appcelerator Titanium
Getting started with Appcelerator TitaniumGetting started with Appcelerator Titanium
Getting started with Appcelerator Titanium
Techday7
 
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyRed Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Mark Proctor
 
Modeveast Appcelerator Presentation
Modeveast Appcelerator PresentationModeveast Appcelerator Presentation
Modeveast Appcelerator Presentation
Aaron Saunders
 
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularNativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
Todd Anglin
 
Appcelerator Titanium at Mobile 2.0
Appcelerator Titanium at Mobile 2.0Appcelerator Titanium at Mobile 2.0
Appcelerator Titanium at Mobile 2.0
Jeff Haynie
 
Mobile 2.0 Event: Mobile for the rest of us using Appcelerator Titanium
Mobile 2.0 Event: Mobile for the rest of us using Appcelerator TitaniumMobile 2.0 Event: Mobile for the rest of us using Appcelerator Titanium
Mobile 2.0 Event: Mobile for the rest of us using Appcelerator Titanium
Jeff Haynie
 
Real-time Chat Backend on AWS IoT 20160422
Real-time Chat Backend on AWS IoT 20160422Real-time Chat Backend on AWS IoT 20160422
Real-time Chat Backend on AWS IoT 20160422
akitsukada
 
Introduction to MonoTouch
Introduction to MonoTouchIntroduction to MonoTouch
Introduction to MonoTouch
Jonas Follesø
 
iPhone Development Intro
iPhone Development IntroiPhone Development Intro
iPhone Development Intro
Luis Azevedo
 
iOS Development Survival Guide for the .NET Guy
iOS Development Survival Guide for the .NET GuyiOS Development Survival Guide for the .NET Guy
iOS Development Survival Guide for the .NET Guy
Nick Landry
 
Session 210 _accessibility_for_ios
Session 210 _accessibility_for_iosSession 210 _accessibility_for_ios
Session 210 _accessibility_for_ios
cheinyeanlim
 
Xamarin and azure iot
Xamarin and azure iotXamarin and azure iot
Xamarin and azure iot
Puja Pramudya
 
MOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentMOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app development
anistar sung
 
Medium TechTalk — iOS
Medium TechTalk — iOSMedium TechTalk — iOS
Medium TechTalk — iOS
jimmyatmedium
 
Terence Barr - beyond smartphones - 24mai2011
Terence Barr  - beyond smartphones - 24mai2011Terence Barr  - beyond smartphones - 24mai2011
Terence Barr - beyond smartphones - 24mai2011
Agora Group
 
Declarative UI on iOS without SwiftUI (中文)
Declarative UI on iOS without SwiftUI (中文)Declarative UI on iOS without SwiftUI (中文)
Declarative UI on iOS without SwiftUI (中文)
Shih-Ting Huang
 
201507_NeoHsu_Portfolio
201507_NeoHsu_Portfolio201507_NeoHsu_Portfolio
201507_NeoHsu_Portfolio
Neo Hsu
 
Cross Platform Mobile Development using Flutter by Wei Meng Lee at Mobile foc...
Cross Platform Mobile Development using Flutter by Wei Meng Lee at Mobile foc...Cross Platform Mobile Development using Flutter by Wei Meng Lee at Mobile foc...
Cross Platform Mobile Development using Flutter by Wei Meng Lee at Mobile foc...
DevClub_lv
 
Getting started with Appcelerator Titanium
Getting started with Appcelerator TitaniumGetting started with Appcelerator Titanium
Getting started with Appcelerator Titanium
Techday7
 
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyRed Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Mark Proctor
 
Modeveast Appcelerator Presentation
Modeveast Appcelerator PresentationModeveast Appcelerator Presentation
Modeveast Appcelerator Presentation
Aaron Saunders
 
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularNativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
Todd Anglin
 

More from Frank Krueger (8)

Open Source CLRs - Seattle Mobile .NET
Open Source CLRs - Seattle Mobile .NETOpen Source CLRs - Seattle Mobile .NET
Open Source CLRs - Seattle Mobile .NET
Frank Krueger
 
Asynchronous Application Patterns in C# - MonkeySpace
Asynchronous Application Patterns in C# - MonkeySpaceAsynchronous Application Patterns in C# - MonkeySpace
Asynchronous Application Patterns in C# - MonkeySpace
Frank Krueger
 
Programming Augmented Reality - Xamarin Evolve
Programming Augmented Reality - Xamarin EvolveProgramming Augmented Reality - Xamarin Evolve
Programming Augmented Reality - Xamarin Evolve
Frank Krueger
 
3 Mobile App Dev Problems - Monospace
3 Mobile App Dev Problems - Monospace3 Mobile App Dev Problems - Monospace
3 Mobile App Dev Problems - Monospace
Frank Krueger
 
Algorithms - Future Decoded 2016
Algorithms - Future Decoded 2016Algorithms - Future Decoded 2016
Algorithms - Future Decoded 2016
Frank Krueger
 
How I Made Zoom In and Enhance - Seattle Mobile .NET
How I Made Zoom In and Enhance - Seattle Mobile .NETHow I Made Zoom In and Enhance - Seattle Mobile .NET
How I Made Zoom In and Enhance - Seattle Mobile .NET
Frank Krueger
 
Overview of iOS 11 - Seattle Mobile .NET
Overview of iOS 11 - Seattle Mobile .NETOverview of iOS 11 - Seattle Mobile .NET
Overview of iOS 11 - Seattle Mobile .NET
Frank Krueger
 
Mocast Postmortem
Mocast PostmortemMocast Postmortem
Mocast Postmortem
Frank Krueger
 
Open Source CLRs - Seattle Mobile .NET
Open Source CLRs - Seattle Mobile .NETOpen Source CLRs - Seattle Mobile .NET
Open Source CLRs - Seattle Mobile .NET
Frank Krueger
 
Asynchronous Application Patterns in C# - MonkeySpace
Asynchronous Application Patterns in C# - MonkeySpaceAsynchronous Application Patterns in C# - MonkeySpace
Asynchronous Application Patterns in C# - MonkeySpace
Frank Krueger
 
Programming Augmented Reality - Xamarin Evolve
Programming Augmented Reality - Xamarin EvolveProgramming Augmented Reality - Xamarin Evolve
Programming Augmented Reality - Xamarin Evolve
Frank Krueger
 
3 Mobile App Dev Problems - Monospace
3 Mobile App Dev Problems - Monospace3 Mobile App Dev Problems - Monospace
3 Mobile App Dev Problems - Monospace
Frank Krueger
 
Algorithms - Future Decoded 2016
Algorithms - Future Decoded 2016Algorithms - Future Decoded 2016
Algorithms - Future Decoded 2016
Frank Krueger
 
How I Made Zoom In and Enhance - Seattle Mobile .NET
How I Made Zoom In and Enhance - Seattle Mobile .NETHow I Made Zoom In and Enhance - Seattle Mobile .NET
How I Made Zoom In and Enhance - Seattle Mobile .NET
Frank Krueger
 
Overview of iOS 11 - Seattle Mobile .NET
Overview of iOS 11 - Seattle Mobile .NETOverview of iOS 11 - Seattle Mobile .NET
Overview of iOS 11 - Seattle Mobile .NET
Frank Krueger
 
Ad

Recently uploaded (20)

Design pattern talk by Kaya Weers - 2025 (v2)
Design pattern talk by Kaya Weers - 2025 (v2)Design pattern talk by Kaya Weers - 2025 (v2)
Design pattern talk by Kaya Weers - 2025 (v2)
Kaya Weers
 
Developing Product-Behavior Fit: UX Research in Product Development by Krysta...
Developing Product-Behavior Fit: UX Research in Product Development by Krysta...Developing Product-Behavior Fit: UX Research in Product Development by Krysta...
Developing Product-Behavior Fit: UX Research in Product Development by Krysta...
UXPA Boston
 
Crazy Incentives and How They Kill Security. How Do You Turn the Wheel?
Crazy Incentives and How They Kill Security. How Do You Turn the Wheel?Crazy Incentives and How They Kill Security. How Do You Turn the Wheel?
Crazy Incentives and How They Kill Security. How Do You Turn the Wheel?
Christian Folini
 
Top 5 Qualities to Look for in Salesforce Partners in 2025
Top 5 Qualities to Look for in Salesforce Partners in 2025Top 5 Qualities to Look for in Salesforce Partners in 2025
Top 5 Qualities to Look for in Salesforce Partners in 2025
Damco Salesforce Services
 
AI x Accessibility UXPA by Stew Smith and Olivier Vroom
AI x Accessibility UXPA by Stew Smith and Olivier VroomAI x Accessibility UXPA by Stew Smith and Olivier Vroom
AI x Accessibility UXPA by Stew Smith and Olivier Vroom
UXPA Boston
 
Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...
Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...
Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...
Maarten Verwaest
 
Kit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdf
Kit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdfKit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdf
Kit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdf
Wonjun Hwang
 
AI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamsonAI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamson
UXPA Boston
 
Building a research repository that works by Clare Cady
Building a research repository that works by Clare CadyBuilding a research repository that works by Clare Cady
Building a research repository that works by Clare Cady
UXPA Boston
 
Cybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and MitigationCybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and Mitigation
VICTOR MAESTRE RAMIREZ
 
React Native for Business Solutions: Building Scalable Apps for Success
React Native for Business Solutions: Building Scalable Apps for SuccessReact Native for Business Solutions: Building Scalable Apps for Success
React Native for Business Solutions: Building Scalable Apps for Success
Amelia Swank
 
Top Hyper-Casual Game Studio Services
Top  Hyper-Casual  Game  Studio ServicesTop  Hyper-Casual  Game  Studio Services
Top Hyper-Casual Game Studio Services
Nova Carter
 
Who's choice? Making decisions with and about Artificial Intelligence, Keele ...
Who's choice? Making decisions with and about Artificial Intelligence, Keele ...Who's choice? Making decisions with and about Artificial Intelligence, Keele ...
Who's choice? Making decisions with and about Artificial Intelligence, Keele ...
Alan Dix
 
Harmonizing Multi-Agent Intelligence | Open Data Science Conference | Gary Ar...
Harmonizing Multi-Agent Intelligence | Open Data Science Conference | Gary Ar...Harmonizing Multi-Agent Intelligence | Open Data Science Conference | Gary Ar...
Harmonizing Multi-Agent Intelligence | Open Data Science Conference | Gary Ar...
Gary Arora
 
Building the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdfBuilding the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdf
Cheryl Hung
 
Multi-Agent AI Systems: Architectures & Communication (MCP and A2A)
Multi-Agent AI Systems: Architectures & Communication (MCP and A2A)Multi-Agent AI Systems: Architectures & Communication (MCP and A2A)
Multi-Agent AI Systems: Architectures & Communication (MCP and A2A)
HusseinMalikMammadli
 
Build With AI - In Person Session Slides.pdf
Build With AI - In Person Session Slides.pdfBuild With AI - In Person Session Slides.pdf
Build With AI - In Person Session Slides.pdf
Google Developer Group - Harare
 
Refactoring meta-rauc-community: Cleaner Code, Better Maintenance, More Machines
Refactoring meta-rauc-community: Cleaner Code, Better Maintenance, More MachinesRefactoring meta-rauc-community: Cleaner Code, Better Maintenance, More Machines
Refactoring meta-rauc-community: Cleaner Code, Better Maintenance, More Machines
Leon Anavi
 
Mastering Testing in the Modern F&B Landscape
Mastering Testing in the Modern F&B LandscapeMastering Testing in the Modern F&B Landscape
Mastering Testing in the Modern F&B Landscape
marketing943205
 
Digital Technologies for Culture, Arts and Heritage: Insights from Interdisci...
Digital Technologies for Culture, Arts and Heritage: Insights from Interdisci...Digital Technologies for Culture, Arts and Heritage: Insights from Interdisci...
Digital Technologies for Culture, Arts and Heritage: Insights from Interdisci...
Vasileios Komianos
 
Design pattern talk by Kaya Weers - 2025 (v2)
Design pattern talk by Kaya Weers - 2025 (v2)Design pattern talk by Kaya Weers - 2025 (v2)
Design pattern talk by Kaya Weers - 2025 (v2)
Kaya Weers
 
Developing Product-Behavior Fit: UX Research in Product Development by Krysta...
Developing Product-Behavior Fit: UX Research in Product Development by Krysta...Developing Product-Behavior Fit: UX Research in Product Development by Krysta...
Developing Product-Behavior Fit: UX Research in Product Development by Krysta...
UXPA Boston
 
Crazy Incentives and How They Kill Security. How Do You Turn the Wheel?
Crazy Incentives and How They Kill Security. How Do You Turn the Wheel?Crazy Incentives and How They Kill Security. How Do You Turn the Wheel?
Crazy Incentives and How They Kill Security. How Do You Turn the Wheel?
Christian Folini
 
Top 5 Qualities to Look for in Salesforce Partners in 2025
Top 5 Qualities to Look for in Salesforce Partners in 2025Top 5 Qualities to Look for in Salesforce Partners in 2025
Top 5 Qualities to Look for in Salesforce Partners in 2025
Damco Salesforce Services
 
AI x Accessibility UXPA by Stew Smith and Olivier Vroom
AI x Accessibility UXPA by Stew Smith and Olivier VroomAI x Accessibility UXPA by Stew Smith and Olivier Vroom
AI x Accessibility UXPA by Stew Smith and Olivier Vroom
UXPA Boston
 
Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...
Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...
Limecraft Webinar - 2025.3 release, featuring Content Delivery, Graphic Conte...
Maarten Verwaest
 
Kit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdf
Kit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdfKit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdf
Kit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdf
Wonjun Hwang
 
AI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamsonAI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamson
UXPA Boston
 
Building a research repository that works by Clare Cady
Building a research repository that works by Clare CadyBuilding a research repository that works by Clare Cady
Building a research repository that works by Clare Cady
UXPA Boston
 
Cybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and MitigationCybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and Mitigation
VICTOR MAESTRE RAMIREZ
 
React Native for Business Solutions: Building Scalable Apps for Success
React Native for Business Solutions: Building Scalable Apps for SuccessReact Native for Business Solutions: Building Scalable Apps for Success
React Native for Business Solutions: Building Scalable Apps for Success
Amelia Swank
 
Top Hyper-Casual Game Studio Services
Top  Hyper-Casual  Game  Studio ServicesTop  Hyper-Casual  Game  Studio Services
Top Hyper-Casual Game Studio Services
Nova Carter
 
Who's choice? Making decisions with and about Artificial Intelligence, Keele ...
Who's choice? Making decisions with and about Artificial Intelligence, Keele ...Who's choice? Making decisions with and about Artificial Intelligence, Keele ...
Who's choice? Making decisions with and about Artificial Intelligence, Keele ...
Alan Dix
 
Harmonizing Multi-Agent Intelligence | Open Data Science Conference | Gary Ar...
Harmonizing Multi-Agent Intelligence | Open Data Science Conference | Gary Ar...Harmonizing Multi-Agent Intelligence | Open Data Science Conference | Gary Ar...
Harmonizing Multi-Agent Intelligence | Open Data Science Conference | Gary Ar...
Gary Arora
 
Building the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdfBuilding the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdf
Cheryl Hung
 
Multi-Agent AI Systems: Architectures & Communication (MCP and A2A)
Multi-Agent AI Systems: Architectures & Communication (MCP and A2A)Multi-Agent AI Systems: Architectures & Communication (MCP and A2A)
Multi-Agent AI Systems: Architectures & Communication (MCP and A2A)
HusseinMalikMammadli
 
Refactoring meta-rauc-community: Cleaner Code, Better Maintenance, More Machines
Refactoring meta-rauc-community: Cleaner Code, Better Maintenance, More MachinesRefactoring meta-rauc-community: Cleaner Code, Better Maintenance, More Machines
Refactoring meta-rauc-community: Cleaner Code, Better Maintenance, More Machines
Leon Anavi
 
Mastering Testing in the Modern F&B Landscape
Mastering Testing in the Modern F&B LandscapeMastering Testing in the Modern F&B Landscape
Mastering Testing in the Modern F&B Landscape
marketing943205
 
Digital Technologies for Culture, Arts and Heritage: Insights from Interdisci...
Digital Technologies for Culture, Arts and Heritage: Insights from Interdisci...Digital Technologies for Culture, Arts and Heritage: Insights from Interdisci...
Digital Technologies for Culture, Arts and Heritage: Insights from Interdisci...
Vasileios Komianos
 
Ad

Programming iOS in C#