Building your first iOS app using Xamarin

Post on 28-Jul-2015

474 views 4 download

Transcript of Building your first iOS app using Xamarin

Building your first iOS app using XamarinGill Cleeren - @gillcleeren

Hi, I’m Gill!

Gill CleerenMVP and Regional Director.NET Practice Manager @ OrdinaTrainer & speaker

@gillcleeren

gill@snowball.be

I’m a Pluralsight author!

• Courses on Windows 8, social and HTML5• http://gicl.me/mypscourses

Agenda

• Overview of Xamarin and Xamarin.iOS• Preparing for iOS development• Xamarin.iOS fundamentals• TableViews in iOS• Adding navigation• Optimizing the application• Preparing for store deployment

Targets of this talk

• Understanding the fundamentals of iOS app development with Xamarin• See how a fully working app can be built

The demo scenario

• iOS Coffee Store Manager• List of coffee• Navigation to details page

DEMOLooking at the finished application

Overview of Xamarin and Xamarin.iOS

Hello Xamarin

• Xamarin enables developers to reach all major mobile platforms!• Native User Interface• Native Performance• Shared Code Across Platforms• C# & .NET Framework

• Toolset on top of Visual Studio• Enables VS to create native iOS and Android apps

• Commercial product

Write Everything in C#

iOS, Android, Windows, Windows Phone, Mac

Billions of Devices covered!

The Xamarin platform

Xamarin

Xamarin.Android Xamarin.iOS Xamarin Forms

Xamarin.iOS

Anything you can do in Objective-C/Swift/XCode can be done in C# and Visual Studio (or Xamarin Studio) with Xamarin!

iOS Runtime model

• Native ARMx code – no JIT is being used here• Mono runtime provides system services such as Garbage Collection• Full access to iOS frameworks such as MapKit as well as .NET BCL

A word on code-sharing

• Xamarin brings development time through the use of code-sharing• Possible (currently!) using• Shared projects:

• allows organizing the shared code• #if directives for platform specific code

• PCL• “include” the platforms we want to support• Abstract to interfaces where platforms have specific implementations

Target architecture for a Xamarin app

Preparing for iOS development

What you need for Xamarin.iOS development• Xamarin license (Xamarin.iOS)• PC or Mac or Mac only• Visual Studio or Xamarin Studio (Mac)• XCode SDK (free)• Optionally, a VM (VMWare or Parallels) with Windows 7 or 8• Optionally, a device• Optionally, a developer account

Installing Xamarin.iOS

iOS development on Windows

• Required: a Mac with latest OSX!• There are no iOS simulators on Windows!

WindowsVisual Studio

Xamarin iOS plugin in

Visual Studio

Mac with OSX

Xamarin Build Host

iOS SDKXCode

Interface Builder

Device iOSSimulator

Connecting Windows & Mac

Developing on the Mac? Xamarin Studio!• Optimized for cross-platform

mobile development

• Explore native APIs with code completion

• World class Android and iOS designers

• Powerful debugging on simulator or device

Xamarin setup

DEMOA quick look at the development setup for Xamarin.iOS

Xamarin.iOS fundamentals

File New Project

File New Project

Fundamental #1: Application structure• Main.cs• Entry point of the application• Main app class is passed: AppDelegate

• AppDelegate.cs• Main application class• Builds the window• Listens for OS events

• MainStoryboard.storyboard• Visual design of the app and the flow between the screens

Application structure

• ****ViewController.cs• Powers the view of the app• View controller handles the interactions between

the user and the view

• ****ViewController.designer.cs• Auto-generated file• Glue between controls in the View and

representations in View controller• Don’t edit this file yourself!

Application structure

• Info.plist• Property list file• Contains app properties such as app name, icons,

splash screen images…

• Entitlements.plist• Allows specifying with capabilities the app is

receiving• PassKit, iCloud…

Main.cs

• Entry point for the application• Contains static Main• Creates the app• Passes name of application delegate

Application delegate

Fundamental #2: Views & Storyboards• Views are most commonly created using a Storyboard• Alternatives: code or *.xib files (XCode)

• Designer can be used to edit the Storyboard• A Storyboard is a file that contains the visual designs of our application’s

screens as well as the transitions and relationships between the screens• A screen inside a Storyboard is a Scene

• Each Scene represents a controller and the views it manages (content view hierarchy)• Most templates create a new storyboard automatically

• An app can have more than one storyboard

Storyboard designer

Auto-generation of the *.designer.cs file• Controller.cs contains our code• Handles all that happens in the View

• Controller.designer.cs maps Storyboard controls to C# objects• Glue to make controls available in code

• Never edit this file manually!

The *.designer.cs file

Fundamental #3: Controllers

• iOS apps follow MVC pattern• Actual code lives in View Controller classes• Each ViewController inherits from UIViewController• Different “base” view controllers exist• NavigationViewController• TabViewController• SplitViewController• …

Linking the view and the view controller• When selecting a screen, we can select the black bar at the bottom• Points to the View Controller• Is an instance of UIViewController

• “Code behind”

Types of view controllers

Handling events in the view controller• Controller needs to respond to user interaction• Button press, navigation…

• We need to wire up code in the controller to listen for interaction with a control• To write code against controls, they are wired up in the *.designer.cs• From then, we can work with them in the controller classes

• Controls are available for wiring up in the ViewDidLoad()

Responding to user interaction

DEMOCreating our first iOS application together!

Adding a list using UITableView

I’d like an app for this please.

The UITableView

• Lists of data can be visualized using the UITableView• Can also be used for detail screens

• Contains cells (individual rows)• Can have index and grouping (headers and footers)• Can be placed in editing mode to allow data management• Similar to Android: works with intermediate: UITableViewSource

Typical visualizations of the UITableView

Plain Index Grouped Edit

Participating classes

• UITableView• UITableViewCell• UITableViewSource• UITableViewController

Loading data in the UITableView

• Each UITableView is assigned a UITableViewSource• Table queries the source to learn how it should be rendered

• How many rows• How high are the rows (if not default)

• Source supplies each cell view, populated with data

• 2 methods are required to show data• RowsInSection

• returns an int count of the total number of rows of data the table should display• GetCell

• return a UITableCellView populated with data for the corresponding row index passed to the method

DEMOLoading a list of data

I’d like an app for this please.

Changing the appearance of the cells• iOS comes with 4 built-in styles• We can create our own styles as well

Built-in styles

Default Subtitle Value1 Value2

Using a built-in styles

cell = new UITableViewCell (UITableViewCellStyle.Default, cellIdentifier);cell = new UITableViewCell (UITableViewCellStyle.Subtitle, cellIdentifier);cell = new UITableViewCell (UITableViewCellStyle.Value1, cellIdentifier);cell = new UITableViewCell (UITableViewCellStyle.Value2, cellIdentifier);

Creating your own cell layout

• It’s possible to provide an entirely different cell• Different color• Different control layout

• We need to create a new UITableViewCell• Implements

• Constructor• Creates the UI controls and sets the custom style properties

• UpdateCell • Method for UITableView.GetCell to use to set the cell’s properties

• LayoutSubviews • Set the location of the UI controls• Possible to have more than one layout and create them based on content being displayed

DEMOChanging our table view

Navigation

Navigation with the UINavigationController• NavigationController is a lookless controller (UINavigationController)• Is special type of UIViewController• Allows navigating from one screen to another

• Doesn’t really manage a Content View Hierarchy• Instead manages other View controllers• + A specific, own view hierarchy including a navigation bar, title, back button…

• VERY common pattern in iOS

Navigation with the UINavigationController• Allows us to navigate to second screen• New views are pushed on the stack

Add tostack

Navigation with the UINavigationController• Can provide a back button on the title bar• Pops the current controller off the back stack• Loads previous one again

Remove fromstack

The NavigationController

• Automatically provides a title bar• Can be used to display controller title

Concept of the root view controller

• Navigation controller is lookless• Needs to be paired with a Root View Controller

• Root view controller is first controller in the stack• Loads the first content view hierarchy into the window

Actual navigation: Segues

• Navigation/transition to another view is done (mostly) through the use of Segues (pronounced Segways)• Shown using arrow between views

• A storyboard can contain a segue with no source: Sourceless segue

• This view will get loaded when the application starts

Actual navigation: Segues

• Adding segues can be done in the storyboard designer• Gives choice of desired action

Passing data with segues

• PrepareForSegue is called before transition is executed• We can access the next view controller using the DestinationViewController

property on the Segue

DEMOAdding a second screen and navigation

Optimizing the application

Application properties: info.plist

Application image resources

Icon sizes

• Icons (and other images) are required to be added in different resolutions

iOS 5/6 iOS 7/8 iOS 8 (6plus)

1x 2x 1x 2x 3x

App icon 57x57 114x114 Not supported 120x120 180x180

Spotlight 29x29 58x58 80x80 120x120

Settings 29x29 58x58 - - 87x87

entitlements.plist

DEMO

Adding application icons

Store deployment

Deploying your apps to the store

• Store deployment involves 3 major parts• Provisioning

• Creating a profile that includes code-signing information used to publish the app• iTunes Connect information settings

• Online tool to add information that will be used for the application’s page in the App Store

• Application Submission• Signed binary can be uploaded to Apple for review• Will be published in the store soon after that

Things to do before submitting

• App needs to meet Apple’s guidelines for quality and content• Can be rejected• Must be fixed and resubmitted

• Guidelines can be found at https://developer.apple.com/app-store/review/guidelines/ • Test the app for crashes under normal circumstances• Make sure the description matches what the app does!

Summary

• Xamarin.iOS leverages your C# knowledge to build apps for Android• iOS is further from regular .NET development• Getting your head around UI paradigms will take time!

Thanks!

Q&A

Building your first iOS app using XamarinGill Cleeren - @gillcleeren

Your feedback is important!Scan the QR Code and let us know via the TechDays App.

Laat ons weten wat u van de sessie vindt via de TechDays App!Scan de QR Code.

Bent u al lid van de Microsoft Virtual Academy?! Op MVA kunt u altijd iets nieuws leren over de laatste technologie van Microsoft. Meld u vandaag aan op de MVA Stand. MVA biedt 7/24 gratis online training on-demand voor IT-Professionals en Ontwikkelaars.