Coming soon to a (small|big) screen near you

Coming soon to a (small|big) screen near you

Yet again, this year has been huge for iOS developers. Not only did Apple release Apple Watch, and brought apps to small displays attached to your wrist, but they are also going after your big screens with the imminent launch of new app-enabled Apple TV.

In this keynote, Paul will discuss the recent Apple announcements – like the the new tvOS, iPad Pro and Pencil – and where all of these fit within Apple’s yearning for your hearts and abode. We will also discuss the various changes in the Apple SDKs, tools and business, and try predicting next year’s developments – HomeKit anyone?!

B726bf6980ae838cb19d2f0ee2cec9ef?s=128

Paul Ardeleanu

October 07, 2015
Tweet

Transcript

  1. 2.

    Coming soon to a screen near you (small | big)

    Paul Ardeleanu Software Engineer @ LUPO
  2. 3.
  3. 5.
  4. 6.
  5. 7.
  6. 11.
  7. 13.
  8. 15.

    What is this talk’s purpose? • Overview of the Apple

    platform • the WHY? • 2015 additions & updates • the HOW? • Predictions • the WHAT?
  9. 17.
  10. 18.
  11. 20.
  12. 21.
  13. 22.
  14. 23.
  15. 24.
  16. 25.
  17. 26.
  18. 29.
  19. 30.

    Swift history 1.0 unveiled at WWDC 14 - official Sept

    2014 1.1 - Oct 14 1.2 - April 15 2.0 - WWDC 15 - official Sept 2015
  20. 31.

    struct MyAppAccount { let latch = Latch(service: (NSBundle.mainBundle().bundleIdentifier ?? "com.example.MyApp"))

    var username: String? { get { return getValueForKey("username") } set(newObject) { setValueForKey("username", value: newObject) } } var password: String? { get { return getValueForKey("password") } set(newObject) { setValueForKey("password", value: newObject) } } private func getValueForKey(key: String) -> String? { guard let data = latch.dataForKey(key), let value = NSString(data: data, encoding: NSUTF8StringEncoding) else { return nil } return value as String } private func setValueForKey(key: String, value: String?) { if let value = value where value.characters.count > 0, let data = value.dataUsingEncoding(NSUTF8StringEncoding) { latch.setObject(data, forKey: key) } else { latch.removeObjectForKey(key) } } } var account = MyAppAccount() account.username = "email@example.com" account.password = "password"
  21. 32.

    Benefits • Safety • type safe language - type checks

    performed at compilation • Optimisation • compiler optimised for performance • language optimised for development • Expressivity (a.k.a. Magic)
  22. 33.

    Optionals var answer1 = 42 var answer2: Int = nil

    var theAnswer: Int? ❗ theAnswer = 42 ✔ nil {Some 42}
  23. 34.

    Closures sortedFilters = filters.filter({ (filter) -> Bool in return filter.parent

    == nil }).sort({ (filter1: Filter, filter2: Filter) -> Bool in return filter1.displayOrder < filter2.displayOrder })
  24. 35.

    Generics func swapTwoStrings(inout a: String, inout _ b: String) {

    let temporaryA = a a = b b = temporaryA } func swapTwoDoubles(inout a: Double, inout _ b: Double) { let temporaryA = a a = b b = temporaryA }
  25. 36.

    Generics func swapTwoStrings(inout a: String, inout _ b: String) {

    let temporaryA = a a = b b = temporaryA } func swapTwoDoubles(inout a: Double, inout _ b: Double) { let temporaryA = a a = b b = temporaryA } func swapTwoValues<T>(inout a: T, inout _ b: T) { let temporaryA = a a = b b = temporaryA }
  26. 37.
  27. 38.
  28. 43.
  29. 44.
  30. 45.
  31. 47.
  32. 49.

    iOS 9 API changes • Contacts (Added) • ContactsUI (Added)

    • CoreSpotlight (Added) • GameplayKit (Added) • MetalKit (Added) • MetalPerformanceShaders (Added) • ModelIO (Added) • ReplayKit (Added) • simd (Added) • WatchConnectivity (Added)
  33. 50.
  34. 51.
  35. 52.

    iOS 9.1 to tvOS 9.0 API Differences https://developer.apple.com/library/prerelease/tvos/releasenotes/General/tvOS90APIDiffs/index.html • Accelerate

    • Accounts (Removed) • AddressBook (Removed) • AddressBookUI (Removed) • AssetsLibrary (Removed) • AudioToolbox • AudioUnit • AVFoundation • AVKit • CloudKit • Contacts (Removed) • ContactsUI (Removed) • CoreAudioKit (Removed) • CoreBluetooth • CoreData • CoreFoundation • CoreGraphics • CoreLocation • CoreMIDI (Removed) • CoreMotion (Removed) • CoreSpotlight • NotificationCenter (Removed) • ObjectiveC • PassKit (Removed) • Photos (Removed) • PhotosUI (Removed) • PushKit (Removed) • QuickLook (Removed) • ReplayKit (Removed) • SafariServices (Removed) • simd • Social (Removed) • StoreKit • Swift • TVMLKit (Added) • TVServices (Added) • Twitter (Removed) • UIKit • VideoToolbox (Removed) • WatchConnectivity (Removed) • WatchKit (Removed) • WebKit (Removed) • CoreTelephony (Removed) • Darwin • EventKit (Removed) • EventKitUI (Removed) • ExternalAccessory (Removed) • Foundation • GameController • GameKit • GSS (Removed) • HealthKit (Removed) • HomeKit (Removed) • iAd (Removed) • LocalAuthentication (Removed) • MachO • MapKit (Removed) • MediaPlayer • MessageUI (Removed) • Metal • MultipeerConnectivity (Removed) • NetworkExtension (Removed) • NewsstandKit (Removed)
  36. 54.

    2 ways of building TV apps • TVMLKit : XML

    & Javascript • Native : UIKit, TVServices, Metal, CloudKit, etc.
  37. 55.

    TVML Templates var Template = function() { return `<?xml version="1.0"

    encoding="UTF-8" ?> <document> <loadingTemplate> <activityIndicator> <text>Loading...</text> </activityIndicator> </loadingTemplate> </document>` } https://developer.apple.com/library/prerelease/tvos/ documentation/TVMLJS/Reference/TVJSFrameworkReference/
  38. 56.

    application.js App.onLaunch = function(options) { var javascriptFiles = [ `${options.BASEURL}js/ResourceLoader.js`,

    `${options.BASEURL}js/Presenter.js` ]; evaluateScripts(javascriptFiles, function(success) { if (success) { resourceLoader = new ResourceLoader(options.BASEURL); var index = resourceLoader.loadResource(`${options.BASEURL}templates/Index.xml.js`, function(resource) { var doc = Presenter.makeDocument(resource); doc.addEventListener("select", Presenter.load.bind(Presenter)); navigationDocument.pushDocument(doc); }); } else { /* Be sure to handle error cases in your code. You should present a readable, and friendly error message to the user in an alert dialog. See alertDialog.xml.js template for details. */ var alert = createAlert("Evaluate Scripts Error", "There was an error attempting to evaluate the external JavaScript files.\n\n Please check your network connection and try again later."); navigationDocument.presentModal(alert); throw ("Playback Example: unable to evaluate scripts."); }
  39. 59.
  40. 62.
  41. 65.

    +

  42. 66.
  43. 67.
  44. 68.
  45. 69.
  46. 71.
  47. 73.

    Car

  48. 74.
  49. 76.
  50. 78.

    My predictions • autonomous electric car • on the market

    in 3-5 years • direct sales only • starting at $150,000
  51. 79.
  52. 81.
  53. 82.
  54. 83.
  55. 84.
  56. 88.
  57. 89.
  58. 93.