A podcast by iOS developers for iOS developers, delivering news, tips, and rants for professional iOS/Mac developers, with something for enterprise and indie developers alike.

Hosted by Darryl Thomas and John Sextro.

#118: Dependencies All the Way Down

September 28, 2016 at 8:45AM • 53 minutes

Discussion: Your App Build Pipeline

  • Dependency management
    • Carthage
    • Punic - Clean room implementation of Carthage
    • CocoaPods
    • SPM
  • Build systems
    • CircleCI
    • Travis
  • XCTool from Facebook

Xcode Server

Darryl's Pick

  • Punic, Clean room implementation of Carthage

#117: Twenty Out Of Twenty Is Bad

August 24, 2016 at 11:15AM • 32 minutes

Discussion: Energy Profiler

For more info see Ep. 104, Power Struggles

  • Apple really wants us to be good citizens of the battery.
  • Apps that quickly drain the battery will be shunned by users
    • Remember the Facebook background audio “bug” (some say ploy to allow the fb app to stay alive in background)
  • “App as patient” metaphor
  • iOS Energy Gauge / Energy Report
    • provides a high-level overview of energy usage as you test your app
  • Energy logging on phone
    • Good for long periods of data collection
  • Energy Instrument
    • for best results, target an iOS device wirelessly (I wasn’t able to get this working because you need Bonjour and multicast enabled on your wireless network access point)
    • 20 / 20 is bad, 1 / 20 is good
  • Energy experts at Apple recommend
    • Do it never (Do it less)
    • Do it later
      • Use the background activity scheduler APIs
    • Do it more efficiently



#116: Jittery Moment

August 10, 2016 at 10:00AM • 51 minutes

Discussion: Time Profiler

  • But first: a brief rundown of the Instruments UI

    • Toolbar
      • Record/Stop
      • Pause
      • Target Selection
      • Status display
      • Strategy Selection
        • CPU data
        • Instrument data
        • Thread data
      • Detail/inspector toggles
    • Timeline
      • Plots data along the time your app was sampled
      • Can be filtered and zoomed
      • Disclosure arrow can toggle display of just the current run or of all runs in the trace document
    • Detail
      • Contents vary by Instrument, but this will generally be a table with some representation of the sampled data
    • Inspectors
      • Record Settings
      • Display Settings
      • Extended detail (often the heaviest stack trace)
  • What is Time Profiler?

    • An Instrument providing sample-based analysis of an application’s activity
    • Periodically samples the call stack to determine where an app is spending its time
      • These are instantaneous samples. They don’t track the duration of a function call, but rather how many times when sampled was the application currently in said function call.
      • No distinction between a fast function called many times and a slow function called few times
      • Extremely fast functions may not get sampled at all, if they happen to occur in between samples
    • Provides a detail view listing call trees, optionally separated by thread and/or state, allowing the developer to drive down into calls to identify areas that may need to be optimized
      • Weight - Percentage of samples in which a function appeared and an aggregate summary of samples (count * sample interval)
      • Self Weight - Aggregate summary of samples in which the function was at the top of the call stack
      • Symbol Name - The thing represented in the current row (may be a function, method, closure/block, thread, or app)
      • Category
      • Additional columns available:
        • Count
        • Self Count
        • Library




Alternative show title suggestions

  • Try harder
  • n squared complexity
  • my code, vs not my code
  • expected or unexpected
  • notion of runs

#115: Do the Weak-Strong Dance

July 27, 2016 at 11:30AM • 56 minutes

Discussion - Allocations and Leaks instruments

  • Extraordinarily hard to spot
  • Tough to find offending code without help from tools

  • Unbounded Memory Growth (memory growth without a chance to collect (deallocate) memory

  • True Leaks (retain cycles)

  • Allocations

    • Generation Analysis
    • Tracks allocations still resident when the generation is marked
        - As you do multiple generations you will see only the new allocations since the last generations
    • Simulate Memory Warning (did it help, do you have anything observing for this?)
    • I have unbounded memory growth, now what?
        - Look for the biggest offenders (sorting)
        - Drill into the code and look for ways to release unnecessary allocations
    • Good ‘ol fashion memory management
    • If you’re intentionally holding onto objects, consider implementing an observer for UIApplicationDidReceiveMemoryWarningNotification to release them
  • Leaks / Retain Cycles aka. Strong Reference Cycles

    • Persistent vs. Transient
    • Static Code Analyis
    • Narrow list to your code
    • Use / Observe (detective work)
    • “You’re in the ballpark” now what?
      • Reference counting
      • Weak and Unowned
        • Closure example with capture list; weak and unowned
      • Apple says, “Use a weak reference whenever it is valid for that reference to become nil at some point during its lifetime. Use an unowned reference when you know that the reference will never be nil once it has been set during initialization.”



  • Visual Debugging with Xcode WWDC 2016 Session 410 demonstrates the use of the new Memory Graph Debugger starting at about 24 minutes in


#114: It's All Unified

July 13, 2016 at 1:15PM • 47 minutes

Discussion - Notifications in iOS 10

  • Brief breakdown of WWDC sessions related to notifications
  • New stuff
    • APNS Token-based authentication
    • UserNotifications (and UserNotificationsUI) Framework (Unifies Remote and Local Notifications)
    • Access to user-defined notification settings
    • Expanded content
      • Titles
      • Subtitles
      • Media attachments
    • Scheduling and handling within Extensions
    • In-app presentation
    • Removal/update of pending notifications
    • Dismissal actions
    • Service Extensions
  • APNS Token-based authentication
    • Uses JSON Web Tokens (libraries widely available to assist with token generation)
    • For server-side solutions where using a certificate isn’t practical/feasible
    • Addresses issue of certificate expiration (though tokens also expire, new ones can be generated on the fly)
  • UserNotifications Framework

    • Provides a single notifications API across iOS, watchOS and tvOS
      • iOS: Full support for scheduling and management of notifications
      • watchOS: Support for forwarded notifications and local notifications on the watch
      • tvOS: Support for badging app icons
    • Key components/concepts:
      • UNUserNotificationCenter
        • Authorization requests
        • Scheduling via requests (by providing content and triggers)
      • UNNotificationRequest
        • Identifier
        • Content
        • Trigger
      • UNMutableNotificationContent
      • UNNotificationAttachment
        • Audio
        • Images
        • Video
      • Triggers
        • Push (UNPushNotificationTrigger is not instantiated by apps)
        • UNTimeIntervalNotificationTrigger
        • UNCalendarNotificationTrigger
        • UNLocationNotificationTrigger
      • UNUserNotificationCenterDelegate Protocol
        • userNotificationCenter:willPresentNotification:withCompletionHandler:
        • userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler
      • UNNotificationCategory - defines a type of notification, allows actionable notifications and content extensions
      • UNNotificationAction - represents a task you can perform in response to a notification
      • UNNotificationServiceExtension - Entry point for service extensions. Allows you to process the payload of a push notification before it is presented (eg: end-to-end encryption or notification attachments). Use in conjunction with “mutable-content: 1” in the aps portion of an APNS payload.
  • UserNotificationsUI Framework

    • Provides the UNNotificationContentExtension protocol
    • View controllers adopt this protocol, using the VC’s view to display the notification contents
    • Custom content is sandwiched between a header with the application icon and title and the default notification payload (default payload can be hidden using an attribute in the Info.plist)
    • No user interaction
    • Actions are displayed and extensions can respond to them by intercepting action responses
    • Protocol provides a didRecieveNotification: method you can use to set up UI in response to the notification




#113: Qualified Yeses

June 29, 2016 at 9:30AM • 59 minutes

John and Darryl recap and grade their WWDC wish-lists and discuss changes to the Human Interface Guidelines for iOS.

WWDC Wishlist Scorecard


  • Get serious about home automation, maybe make Apple TV an automation hub (Half Credit)
  • Siri as a Service (3rd party integration) (Yes)
  • Refactoring for Swift (in Xcode) (No)
  • Announce date to sunset Obj-C (No)
  • Xcode for iPad Pro (Half Credit)


  • More voice command vocabulary. Something like AppleScript (Half Credit)
  • Make Buttons Great Again (Quarter Credit)
  • Better accessibility hierarchy visualization tools built into Xcode (Three Quarters Credit)
  • Additional accessibility tools for checking things like color contrast. (TBD)
  • Improved dynamic font API (Yes, but not what I’d hoped for)
  • Upgrade pricing/trials (No: but we got clarification on subscriptions on The Talk Show)
  • Faster watch app loading. A way of deferring the most expensive parts? (Yes!)
  • Simulators and Xcode bots for Linux? (Lol)

iOS 10 HIG Changes

  • Widgets
    • Available on “Search” and above “Quick Action List” when you 3D touch an icon on Home screen
    • Panning/Scrolling not supported
    • Avoid backgrounds / no background images
    • Allow jump to app, but no “Open App” button. Allow interaction via content
  • Messages
    • Can now integrate with Message by providing a messaging extension
    • Content with Focus and Value
    • Constrained space
    • Simple/Intuitive interface
  • Integration with Siri
    • Don’t
      • Advertise
      • Impersonate Siri
    • Do
      • Minimize visual/touch interactions
      • Respond quickly
      • Take people directly to content
      • Improve accuracy via custom vocabulary
      • Provide example requests
  • Expanded Notifications
    • Detail view
    • Actions that make sense
    • There be dragons, destructive actions




Alternative show title suggestions

  • Stuck in my craw
  • Return of bezels
  • Cocoa-isims
  • I hate you
  • I’m not a fun person

#112: Wonderful Whisky Drinking Chat 2016

June 14, 2016 at 6:30PM • 3 hours 18 minutes

Darryl and Nolan are joined by Amro Mousa and Matt Massicotte to discuss the WWDC 2016 Keynote and Developer State of the Union. Also, Whisky.

The Whiskies


  • Pre-keynote observation

    • Hated the music
    • Apple TV Events app worked fine
  • Tim takes the stage

    • Talks about Orlando, offering sypathies. Called it an act of terrorism and hate.
    • Talks about Apple's diversity
    • Stream restarted
    • Moment of silence where there would normally be an energizing video
    • Bill Graham Auditorium
    • 27th WWDC
    • 13 Million Registered devs, growth of 2M y-t-y
    • 72% first-time attendies
    • 2 Million Apps on App Store
    • $50 Billion paid to developers
  • watchOS (Kevin Lynch)

    • Optimizations to App Launch time!!!
    • Instant response in watchOS 3
    • Apps stay in memory, support background updates
    • App dock replaces contacts!
    • Swipe up is now Control Center
    • Streamlined notification response workflow
    • Scribble! Handwriting (grafitti?) recognition
    • Improved watch faces
      • Minnie Mouse watch face
      • Activity watch face in 3 variants. Acts kinda like a full-screen complication
      • Numerals
      • Improved face switching with edge to edge swipe
    • Demo
      • Time to first woman on stage: approx. 15 minutes
      • Timer improvements
      • Reminders improvements
      • Find my Friends
    • SOS
      • Press and hold side button, and 911 is called after a countdown, notifies emergency contacts withlocation
      • Watch shows Medical ID info
      • Works internationally (calls the right emergency number)
    • Jay (Blahnic?) Activity sharing: allows you to view friends' activity and send messages
    • Support for Wheelchair users
      • Changes algorithms used to detect movement
      • "Time to roll" notification
      • Wheelchair-specific workouts
    • Breath App
      • Simple deep breathing sessions to calm and reduce stress
      • Supports reminder notifications
      • 1 to 5 minute sessions
      • Supports haptic feedback
      • Summary with time and heart rate
    • New APIs
      • In-app Apple Pay
      • Background workout info
      • SpriteKit & SceneKit
      • Native Events
      • Speaker Audio
      • Inline video
      • Game Center
    • Preview available today, release in Fall
  • tvOS (Eddy Cue)

    • 1300 Video Channels
    • 6000 Apps
    • New Remote App! w/ all the features of the physical remote
    • Siri
      • Search Movies by topic
      • Search YouTube!
      • Live Tune-In ("Watch ESPN 2")
        • iPad and AppleTV
    • Better authentication with Single sign-on
      • Also available on iOS
    • Dark Mode
    • ReplayKit
    • PhotoKit
    • HomeKit
    • Multiplayer Game sessions and more controller support
  • OS X (now macOS) (Craig)

    • Sierra
    • Continuity
      • AutoUnlock - proximity-based unlock of Mac
      • Universal Clipboard
    • iCloud Drive
      • 10 Billion documents today
      • Desktop syncing (and available on iOS)
      • Storage optimization (purges recoverable/unneeded files)
    • Apple Pay on the web
      • Authenticates using TouchID on iPhone
    • Tabs
      • System-wide support for tabs for all multi-windowed apps
    • Picture in Picture
    • Siri
      • Siri button/icon on dock
      • File search with filterable results
      • 200% more snark
      • Result pinning
    • Craig doesn't blink at paying $140 for movie tickets
    • Developer preview today, public beta in July, Release Fall
  • iOS

    • Biggest iOS release ever
    • Experience
      • Redesigned lock screen
        • Raise to wake a la watchOS
        • Notification redesign
        • 3d touch on notifications
        • Rich notification content
        • Clear all
        • Quicker access to camera, widgets and control center
      • 3d touch now supports display of widgets from app icons
    • Siri
      • 2 Billion requests a week
      • Developer API!!!
        • Messaging
          • Slack WhatsApp WeChat
        • Photosearch
        • Workouts
        • Payments
        • VoIP calling
        • Sounds like it's not a complete opening
    • QuickType Intelligent keyboard
      • Deep learning (LSTMs) for completion suggestions
        • Example: "Where are you?" provides option to send location
      • Contextual event creation
    • Photos
      • Places map view
      • Face recognition
      • Object and scene recognition
      • Memories clusters photos into collections that may be relevant
        • Automatically creates a slideshow movie of photos and videos
        • Provides length and mood controls to change editing and music of movie
      • Also on macOS
    • Maps
      • Proactive destinations
      • Destination filtering
      • Continued use of carosel (like the Memories stuff) Accessibility impact?
      • Destinations along your route
      • Alternative routes with time-saving estimations
      • CarPlay gets instrument panel turn-by-turn
      • Map Extensions!!
        • Book Reservations
        • Request a ride
    • Music
      • 15 Million paid subscribers
      • All new design
        • Clarity and simplicity
        • Improved library UI
      • Lyrics
      • Don't make developers participate!!!
    • News
      • 2000 publications, 60 million readers
      • Redesigned
        • For you is categorized, with smart topics
      • Subscriptions
      • Breaking news notifications
    • HomeKit
      • Home app
        • Access to scenes and individual accessory control
      • Integrated into control center
      • Interactive notifications
      • iPhone, iPad, Watch
    • Phone
      • Voicemail Transcription (Kinda like Google Voice)
      • Extension API (detect spam, etc)
      • VoIP API!
      • Side note: (Buttons look more like buttons)
    • Messages
      • Most-frequently used app on iOS
      • Rich links
      • Different camera and photo picker.
      • Big emoji (shit)
      • Emojifier
      • Bubble effects
      • Tap-back quick responses
      • Handwriting
      • Digital touch
      • Fullscreen effects
      • Annoying demo
      • iMessage Apps
        • Stickers
        • Annoying photo manipulation
        • Payment
        • Can I block Jibjab?
    • Differential privacy
    • One more thing: a video :(
    • Developer preview Today, public beta July, release Fall
  • Developers (Tim)

    • Swift playgrounds on iPad
      • (get insight from Amro re: hour of code with his 6 yr old)
      • Developer keyboard
      • Released today with the beta
      • Free
    • First "emotional" Apple video in a while to actually make me emotional

Developer State of the Union

  • iMessage Apps

    • Extensions
      • App Store
      • iMessage App Store
    • "Get app" link
    • Sticker art, UIKit
    • Display in the same space as the keyboard would, but can be expanded to fullscreen
    • MSSession, MSConversation, MSMessage
    • Privacy measures
    • Simulator support for viewing both sides of a conversation
  • Siri

    • SiriKit (first version)
    • Speech, Intent, Action, Response
    • Vocabulary
      • Plist for app vocabulary, code for user vocab
    • AppLogic, User Interface
      • Extension, NSUserActivity
    • Example: Hologram
    • Domain, Intent, Recipent, Content
  • Swift 3

  • Swift on iPad

    • File Format Docs
    • Lesson materials
    • Record sessions
    • Compatible with Xcode playgrounds
  • Xcode 8

    • Source Editor
      • Active line highlighting
      • Swift color literals
      • Swift image literals
      • Markup generation
      • App Extensions
        • Selection
        • Transforms
        • Pasteboard modification
      • Unified API Reference
        • Fully available offline
    • Interface Builder
      • Design-time effects
      • Device size configuration bar
      • Improved size-class support
      • Canvas operations at any zoom level!!
    • Captured crash logs
    • Test without building
    • Runtime issues
      • UI
      • Threads
        • Thread sanitizer
        • Identify race conditions and more
      • Memory
        • Display object graph
        • Identifies leaks with backtraces to where captures happen
        • Reference Cycle graph
    • Provisioning
      • New signing actions
      • Configuration and issue details
      • Actionable messages
      • Provisioning report
      • Automatic code signing with a dedicated profile
      • Customized code signing per build configuration
  • Platform

    • Compression
      • Open-sourcing lczse
    • Traffic prioritization
    • Logging
      • Unified
      • Levels
      • In memory trace
      • Privacy
      • New console application
    • File Systems
      • HFS+ 18+ years old
      • Apple File System
        • Scalable
        • Modern
          • Flash/SSD
          • Resilient
          • 64-bit
          • Encryption
        • Cloning (copy on write)
          • Fast
          • Zero space
          • File and directories
        • Snapshots
          • Full volume
          • Mountable
          • Supports reverting
        • Coming "Soon". Not specified
    • Differential Privacy
      • Adds noise to individual responses so that individual responses can't be identified
      • Privacy budget limits submissions per period
  • iOS

    • Share app from homescreen via 3D touch
    • Activity based integration
    • Extensions
      • Notifications
        • Service Extension
          • Modifies push payload before notification surfaces. Allows encryption or additional content downloads.
        • Content extensions
      • Widgits
        • New vibrant look
        • Additional compact size
  • iCloud available to all signed apps on macOS Sierra, not just App Store

  • CloudKit Sharing

    • Allows control over who can access data
    • CKShare class governs permissions
  • watchOS

    • Glanceable
    • Actionable
    • Responsive
    • Glances are no longer "necessary"
    • Workout apps run continuously during a workout even with screen off or when in another app
    • Raw access to crown events
    • Gesture recornizers
    • Gyroscope
    • Complications gallery
    • SceneKit/SpritKit
  • tvOS

    • Talking about stuff we already knew, but which wasn't discussed in WWDC2015
      • Focusable elements
      • TVMLKit
      • Handoff
    • Multipeer connectivity
    • 4 simultaneous game controllers
    • Updated controller policy: can require game controllers
  • Graphics

    • Color
      • Wide Color (P3) gamut
        • APIs
        • Sharing
        • PDF/print
        • System apps
        • Cameras capture deep color
        • API to access DNGs
        • API to capture LivePhotos
    • Metal
  • Games
    • ReplayKit streaming
    • GameCenter invitations via sharing
    • GameCenter sessions
    • GameplayKit


#111: Make Buttons Great Again

June 1, 2016 at 5:30PM • 1 hour 1 minute

Discussion - WWDC Wish List


  • Get serious about home automation, maybe make Apple TV an automation hub
  • Siri as a Service (3rd party integration)
  • Refactoring for Swift (in Xcode)
  • Announce date to sunset Obj-C
  • Xcode for iPad Pro


  • More voice command vocabulary. Something like AppleScript dictionaries?
  • Make Buttons Great Again
  • Better accessibility hierarchy visualization tools built into Xcode
  • Additional accessibility tools for checking things like color contrast.
  • Improved dynamic font API, better support for font replacement in IB
  • Upgrade pricing/trials
  • Faster watch app loading. A way of deferring the most expensive parts?
  • Simulators and Xcode bots for Linux?

Past Wish Lists



  • Samuel Ford’s Blog - Discovered as a part of the Swift dynamism conversation. Pretty good stuff.


#110: Caveat Apptor

May 18, 2016 at 12:30PM • 1 hour 4 minutes


  • Swift 3.0
    • To be available later this year
        * [Winding Down the Swift 3 release - Chris Lattner](
            * New “blue sky” proposals will be considered for post-3.0 development (~August)
            * Generics features (among other dependencies) are preventing the previously-planned ABI stability
            * ABI stability will come in a later release and is considered of “highest priority”
  • CareKit
    • Why use it?
      • enable people to actively manage their own medical conditions through app-based care plans, and symptom and medication monitoring, while sharing insights with care teams and others you trust
      • Examples:
        • Surgery recovery app
        • Depression treatment app
        • High blood pressure treatment app
    • What is it?
      • open source framework
      • can integrate with ResearchKit
      • able to access HealthKit data, when granted permission
    • ((Opinion)) Why the focus from Apple on Health Apps? Is this a legacy from Steve Jobs?
    • Components of CareKit
  • Care Card
  • Symptom and Measurement Tracker
  • Care Plan Store
  • Insights
  • Documents
  • Connect
  • Privacy concerns
    • Downloader beware. Make sure you understand the privacy policy for the app.
    • Make sure the app is from a reputable source




  • Start CareKit app for tracking the effectiveness of depression medication

#109: Mistakes Were Made

May 4, 2016 at 11:15AM • 45 minutes



  • What is it?
  • What was the motivation?
  • How do we incorporate it into our apps?
  • Pricing
    • Core product is free
    • Planned introduction of paid plans for enterprise teams
    • How did you arrive at this strategy?
  • Who did the voiceover for your demo video?

Creating a 3rd-party service and framework for iOS apps

  • You’re not only the primary engineer but also a PM. What is your process for user research and determining a roadmap?
  • Are there any key (and perhaps unexpected) differences from developing first-party applications?
  • How do you obtain information about framework stability as a third-party? (crashes, logging, etc)