Your task before coming to this session: know C# and .NET. Your mission during this session: learn how you can leverage your C# knowledge to build iOS apps. If you decide to accept this mission: be prepared to see how in just 60 minutes, a complete iOS app will appear in front of you. All using C#. This session will destroy itself after 60 minutes.
3. Hi, I’m Gill!
Gill Cleeren
MVP and Regional Director
.NET Practice Manager @ Ordina
Trainer & speaker
@gillcleeren
gill@snowball.be
4. I’m a Pluralsight author!
• Courses on Windows 8, social and HTML5
• http://gicl.me/mypscourses
5. 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
6. Targets of this talk
• Understanding the fundamentals of iOS app development with
Xamarin
• See how a fully working app can be built
7. The demo scenario
• iOS Coffee Store Manager
• List of coffee
• Navigation to details page
10. 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
11. Write Everything in C#
iOS, Android, Windows, Windows Phone, Mac
Billions of Devices covered!
13. Xamarin.iOS
Anything you can do in Objective-C/Swift/XCode can be done in
C# and Visual Studio (or Xamarin Studio) with Xamarin!
14. 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
15. 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
18. 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
20. iOS development on Windows
• Required: a Mac with latest OSX!
• There are no iOS simulators on Windows!
Windows
Visual Studio
Xamarin iOS plugin in
Visual Studio
Mac with OSX
Xamarin Build
Host
iOS SDK
XCode
Interface Builder
Device
iOS
Simulator
22. 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
27. 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
28. 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!
29. 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…
30. Main.cs
• Entry point for the application
• Contains static Main
• Creates the app
• Passes name of application delegate
32. 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
34. 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!
36. 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
• …
37. 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”
39. 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()
43. 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
46. 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
50. 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);
51. 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
54. 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
55. Navigation with the UINavigationController
• Allows us to navigate to second screen
• New views are pushed on the stack
Add to
stack
56. 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 from
stack
58. 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
59. 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
60. Actual navigation: Segues
• Adding segues can be done in the storyboard designer
• Gives choice of desired action
61. 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
70. 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
71. 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!
72. 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!
76. 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.