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 & John Sextro.
Thanks to all of our listeners, sponsors, former guests and hosts and to Dan and Haddie and the rest of the 5by5 network. This will be our last episode. We hope you've enjoyed the series as much as we've enjoyed producing it.
Discussion: tvOS Development with special guest Mark Sands
Recreating the Parallax effect
3D transform Sheen (Glossy effect) Shadow Wobble
Top Shelf Extension on tvOS Open Source project
Re:Lax on GitHub
CAR Files
Compiled asset catalog
Theme Engine from Alex
CAR file inspector
Bill of Materials
Tree graph structure
Folklore.org Stories from Andy Hertzfeld about his life on the original Macitosh project tvML Blog post - tvOS App Development Changes by Jared Sinclair
Special Shoutout to Mark’s collaborated on this project James Rantanen
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
Are you using it? Let us know @iohyespodcast
Darryl's Pick
Punic, Clean room implementation of Carthage
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
Picks
John
This Week in Swift from Natasha the Robot
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
Picks
John
SelfControl
Darryl
WWDC 2016 Session 418 - Using Time Profiler in Instruments
Alternative show title suggestions
Try harder n squared complexity my code, vs not my code expected or unexpected notion of runs
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
Simulate Memory Warning (did it help, do you have anything observing for this?) I have unbounded memory growth, now what?
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.”
Picks
Darryl
Visual Debugging with Xcode WWDC 2016 Session 410 demonstrates the use of the new Memory Graph Debugger starting at about 24 minutes in
John
"Weak, Strong, Unowned, Oh My!" - a Guide to References in Swift by Hector Matos
Discussion - Notifications in iOS 10
Brief breakdown of WWDC sessions related to notifications
What’s New in the Apple Push Notification Service Introduction to Notifications Advanced 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
Picks
Darryl
New Swift, Core Data and Cocoa Books - Use Your Loaf
John
List of Public Slack Groups Mr Robot returns to USA Network July 13
John and Darryl recap and grade their WWDC wish-lists and discuss changes to the Human Interface Guidelines for iOS.
WWDC Wishlist Scorecard
John
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)
Darryl
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
Picks
Darryl
Auto Adjusting Fonts for Dynamic Type
Build Phase
John
Audio-Technica ATH-ANC7B QuietPoint Active Noise-Cancelling Closed-Back Headphones - Wired
Alternative show title suggestions
Stuck in my craw Return of bezels Cocoa-isims I hate you I’m not a fun person
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
Mars Iwai Tradition Japanese Whisky Amrut Fusion Single Malt Whisky Laphroaig Single Malt Whisky - 10 Year
Keynote
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: https://twitter.com/chockenberry/status/742422670046683137 (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 https://twitter.com/_DavidSmith/status/742425105809039360 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
Picks
Matt: Human Resource Machine Amro: Provenance
Discussion - WWDC Wish List
John
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
Darryl
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
WWDC 2015 New Year’s 2016
Picks
Darryl
Samuel Ford’s Blog - Discovered as a part of the Swift dynamism conversation. Pretty good stuff.
John
Multi-Client monitor from Dell
Discussion
Swift 3.0
To be available later this year
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
Picks
Darryl
Writing good code: how to reduce the cognitive load of your code
John
Start CareKit app for tracking the effectiveness of depression medication
Discussion
Buglife
Buglife.com
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?
Fiverr.com
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)
Picks
Dave
Making your own Passbook business card - just in time for WWDC!
Darryl
X-rite Color Munki - Display/monitor calbration (including iOS devices) Testing IBOutlets and IBActions With Curried Functions in Swift
Nolan
SwiftyBeaver - Swift based logging framework and service
John
Word Flow Keyboard New keyboard with single handed typing via swipe capabilities
Discussion
Testing normal networks (aka, not the US)
62.5% of the world’s 3.2 Billion internet users have 2G connections (or worse). That number is growing. LTE speeds aren’t going to catch up for at least a decade if not much longer. When building robust networking between your client apps and your services, the common case should be the default case. AKA: not WiFi and not LTE. Things that help a great deal:
Test on 2G and flaky networks
Helps to do real world testing in parking garages, elevators and in transit. Simulation will be the highest reproducible ROI way to test
Fail fast and accurately. Timeouts play a part in this. Be dynamic with how you handle the network.
Slower speeds should have less networking
Use modern tech, like HTTP/2 Defer, defer, defer (and prioritize) Robustly handle errors
If at first you don’t succeed, try again! And again and again. Retry policies can get you from one-9 of success to three-9s very simply.
Design your network API in a robust manner!
Simulating bad connections:
Using Network Link Conditioner - iOS and Mac Simulation over WiFi with router firmware Simulation by throttling via your network services with custom headers Simulation in your app by controlling the flow of data being received
Expert mode: drop down to the TCP level!
Timeouts
List of timeouts:
TCP: connection timeout (TLS connection timeout too), SYN timeout, keepalive/idle timeout, retransmission timeout NSURL: request timeout (max time between data being received in response - default is 60 seconds), resource timeout (time for entire transfer to complete - default is 7 days) Custom timeouts: transaction timeouts (time from initiation to completion including redirects and retries), queue timeout (how long can the request be queued without starting before it times), idle timeout (how long can a request do nothing regarding upload or download before timeout)
NSURLSession has a problem with scale. Every different configuration setting requires another NSURLSession to be maintained and managed. Timeouts, different default headers, different TLS settings, different cookie settings, different NSURLCache, cellular vs non-cellular
Robust API design
Transactional APIs Robust error codes (not just HTTP status codes!)
Retry policies to the rescue
Picks
Darryl
Pain Free Constraints with Layout Anchors - A bit of follow-up from last week’s episode. I felt like John and I were having trouble explaining anchors, and I remembered this article from a few weeks back.
Nolan
Performance Culture
Alternative show title suggestions
Just remember: You’re wrong Not all requests are made equal Item potency
Discussion
Auto Layout
Stack Views, FTW (Auto Layout without constraints) (New in iOS 9, similar to what’s available in watchOS and NSStackView, which is available from OS X 10.9) UILayoutGuide
New in iOS 9 Defines a rectangular geometry that can interact with Auto Layout Eliminates the need (in many cases, at least) for views that are included solely for layout purposes (container views, spacing views, etc) Views can still provide a greater degree of encapsulation Provide anchors that can be used to generate constraints
Anatomy of constraints
The layout of your view hierarchy is defined as a series of linear equations. Each constraint represents a single equation. Your goal is to declare a series of equations that has one and only one possible solution. Two basic types of attributes
Size attributes (for example, Height and Width) Location attributes (for example, Leading, Left, and Top) The following rules apply:
You cannot constrain a size attribute to a location attribute. You cannot assign constant values to location attributes. You cannot use a nonidentity multiplier (a value other than 1.0) with location attributes. For location attributes, you cannot constrain vertical attributes to horizontal attributes. For location attributes, you cannot constrain Leading or Trailing attributes to Left or Right attributes.
Rule of Thumb for clarity
Whole number multipliers are favored over fractional multipliers.
Positive constants are favored over negative constants. Wherever possible, views should appear in layout order: leading to trailing, top to bottom. Constraint Priorities
1000 is required < 1000 is optional
Intrinsic Content Size
Content Compression Resistance Content Hugging
Debugging Auto Layout
Error Types
Unsatisfiable Layouts. Your layout has no valid solution.
Usually 2 or more required constraints conflict
Ambiguous Layouts. Your layout has two or more possible solutions.
conflicting optional constraints
Logical Errors. There is a bug in your layout logic.
Tips and Tricks
take advantage of the logs use meaning identifiers on views and constraints Debug > View Debugging > Show Alignment Rectangles
Picks
Darryl
App Cooker & App Taster - Prototyping tool for Watch, iPhone and iPad apps
Nolan
We Haven’t Forgotten How To Program Enough
John
Mysteries of Auto Layout Part 1 and Part 2 from WWDC 2015 My choice for a smart watch, Fitbit Blaze
Discussion
Push Notification Overview
Notifications
Intended for user Certificate required Can be disabled Remote vs. Local
Local - schedule by the app on device
Best example is Reminders app Schedule by
elapsed time or exact time location based
Remote - come from your server
Actions
Interactive Notifications Categories
Text Input
New type of “Action” Behavior is “.textInput”
APNS (Apple Push Notification Service)
Device token created by APNS, need to store on server, associated with particular client app Payload must include aps, but can also include custom values, as well Payload “aps dictionary”: alert (string or dictionary), badge, sound, content-available, category Payload alert dictionary: title, body, title-loc-key, title-loc-args, action-loc-key, loc-key, loc-args, launch-image Silent notifications (content-available == 1) wakes your app in the background so that you can fetch data, etc. Feedback service, how to discover tokens that are no longer active Device tokens are 32 bytes, may be increasing to 100 bytes soon New provider API released in 2015
HTTP/2
notification requests to APNS get a response multiplexed binary
Notification requests
POST json
Notification responses
200 OK 400 BAD REQUEST with json payload and reason
Instant Feedback
Allows you to learn about inactive tokens in the notification response via 410 status code in the response
Simplified Certificate Handling
Now one certificate for all push actions
Push notifications payload size increased from 2KB to 4KB
Motivation / Staying Productive
Flow
Mihaly Csikszentmihalyi
Flow theory postulates three conditions that have to be met to achieve a flow state:
One must be involved in an activity with a clear set of goals and progress. This adds direction and structure to the task. The task at hand must have clear and immediate feedback. This helps the person negotiate any changing demands and allows them to adjust their performance to maintain the flow state. One must have a good balance between the perceived challenges of the task at hand and their own perceived skills. One must have confidence in one's ability to complete the task at hand.
Clear Distractions
What things easily distract you when you need to get work done Make a list of these things Twitter, imgur, reddit, tv, music Clear these distractions Use a distraction free setting Get comfortable Change your setting
Pairing
Workout metaphor Hard to slack Intensity Don't have to do it every day
Just 5 minutes
I use this technique with my kids for studying 5 minutes doesn't really work for me Instead I say write 5 lines Sunk cost fallacy works in our favor I'm already here. I have something started. I might as well keep going.
Push the peanut forward
You don't have to love it You recognize that you just need to make some progress Commit to sit down and get started
Free Writing
Used by writer Set a timer, at least 5 minutes Don't use the IDE Don't write actual code, just pseudo code Don't think just let the pseudo code flow
Pomodoro Method
Sit down in front of your computer Set a 20 minute timer You must take a 5 minute break The importance of the break, related to exercise
David Burns MD
Write down, on a scale of 1 to 10, how satisfied do you think that you will feel by completing the work that you need to do Write down, on a scale of 1 to 10, how painful will it be to do the work Do this before as an estimate and then after recording the actual Keep a running list and refer to it often
Discussion - Energy Efficiency for iOS Apps
Apple’s Energy Efficiency Guide
Are you telling me I have to worry about my app’s power consumption?
This is iOS. I thought Apple was taking care of that for me...right??
What is Energy?
Power is an instantaneous measurement of energy at any given point in time Energy is power used over time (Joules measured over watt-hours) Low power used over a long(er) period of time can amount to the same energy expenditure as short bursts of high power (more on this later)
Major sources of energy consumption/power draw
Device wake
Aside from being powered off, a device in its sleep state is consuming the lowest amount of energy possible Whenever possible, avoid preventing the device from sleeping or forcing it to awaken Use technologies like push and background tasks judiciously
CPU Usage
An idle CPU uses ~10x the power of a sleeping CPU Just 1% CPU use costs 10% more than idle 10% CPU use costs 200% that of an idle CPU 100% CPU can result in 1000% (10x) power draw compared to idle
Networking / Bluetooth Graphics/animation/video Sensors
Location (Wi-Fi/GPS) Accelerometer Gyroscope Magnetometer
Disk IO. Use batch operation whenever possible
Mitigating energy costs
Batching, Batching, Batching
Operations have a dynamic and fixed energy cost
Fixed cost represents the energy used while the device is waiting to enter an idle state The same amount of work, performed across multiple threads, can have a significantly lower total energy cost compared against single-threaded work requiring a longer time to execute
Network and other inter-device (BT, for example) operations require radios to be powered up. Avoid continuous communications and state polling, batching operations whenever possible Defer any operations that aren’t time-sensitive to time that the app will be otherwise active (take advantage of fixed cost you’re already having to pay)
Prioritize operations using Quality of Service Classes (iOS 8+)
Classes
User-interactive User-initiated Utility Background
Can be set on both NSOperationQueue and individual NSOperation objects GCD queues can be created with QOS class attributes
Use timers efficiently, or better yet, avoid them
GCD provides mechanisms you can use instead of timers, for example dispatch_block_wait() If you must use timers (not just NSTimer: basically anything that takes a time interval as a deadline), take advantage of APIs that allow for timer coalescing using tolerances.
Minimize I/O React to Low Power Mode (iOS 9)
NSProcessInfoPowerStateDidChangeNotification [[NSProcessInfo processInfo] isLowPowerModeEnabled]
Instruments to the Rescue
Energy Diagnostics Logging
Other Resources
Performance Tips from Apple
Picks
John
‘Operator’ font created by Hoefler & Co., a font design company
Darryl
Achieving All-day Battery Life
Alternative show title suggestions
Power Draw Contribute to Sleep Don’t write an app (You should) Get off of the main thread They DID bone it I ripped them off
Discussion
Pushing info to clients
Long Polling
Client sends request to server, waits for response or timeouts (Loop) Can send and receive information, but not full-duplex iOS Implementation
NSURLConnection sendSynchronousRequest
Common uses
Fallback from Websockets and SSE when streams are unreliable or impractical
HTTP Streams
Can only push information to your client If you need to send info back to server use standard rest approach Transported over simple HTTP Built in support for re-connection and event-id iOS Implementation
Server Sent Events (SSE) NSURLSession, NSInputStream, NSSteamEvent Setup the connection Implement code to handleEvents from the input stream
Common uses
Stock ticker streaming “Status” feed updating Push Notifications
Websockets
Designed to overcome many of the pitfalls/shortcomings described in RFC 6202 Standardized by IETF (Internet Engineering Task Force) in 2011 Can send and receive information (full-duplex pipe) Protocol based on TCP Uses HTTP only for initial handshake, while leveraging existing HTTP infrastructure iOS Implementation
CFStreamCreatePairWithSocketToHost takes url, read and write stream Cast read and write stream to NSInputStream and NSOutputStream, respectively Set delegate for input and output streams Schedule both in a run loop (Can do without but will block the execution of other code) Open connection Write code to handleEvents from the input stream Implement message sending via the output stream
Server considerations
Not as easy to get started with as a generic web server Buy one, borrow one or build one
Common uses
Chat Player vs. Player games Real time interactions
Popular Abstractions/Frameworks
TRVSEventSource from Travis Jeffery SignalR from Microsoft
At-a-glance Comparison
Websockets SSE Long Polling
Client Performance Best Best Worst
Server Performance Best Worst Worst
Complexity Highest Lowest Mid
When to Use 2-way messaging Push to Client Just getting started
Picks
Darryl
Proportional Spacing with Auto Layout
John
Google Cloud Vision API Detects types of images, landmarks, recognizes text, does image sentiment analysis and can even detect “inappropriate content” Agile and Beyond 2016 May 5-6 in Ypsilanti, MI
Alternative show title suggestions
Uncanny valley The cooker's always on Canonical Framing Technique
John and Darryl compliment each other and congratulate Nolan and Chad.
Discussion
Congratulations to the O'Brien family on the birth of Evelyn Jane!
Evelyn Jane O'Brien joined her parents and 2 sisters at 3:32am, Feb 20th 2016Baby and Mama are healthy and doing well????????????????????????????????????????— Nolan O'Brien (@NolanOBrien) February 20, 2016
Congratulations to Chad and Kim Etzel, who are expecting in August!
...and in case that tweet was too obtuse, hopefully this will clear things up ????????? pic.twitter.com/f5qSlcjlqW— Chad Etzel (@jazzychad) February 21, 2016
Discussion
HTTP/1.1 review
Widespread adoption in 1996 with full standard in 1997 RFC 2068 and later replaced with one in 1999 RFC 2616 Request (URL, method, headers, body) & Response (status code, headers, body) Inherently async Built for HyperText, makes it have problems
Head of line blocking
combining payloads to 1 response multiple connections (Connection: Keep-Alive vs Close) HTTP Pipelining
No cancellation, have to tear down connection No prioritization, round robin over connections
iOS/Mac
NSURLRequest (NSHTTPURLRequest) and NSURLResponse (NSHTTPURLResponse) NSURLConnection and NSURLSession
HTTP/2
Started by Google with SPDY (2012 - 2016), latest is SPDY/3.1 HTTP/2 is a binary protocol, where 1 and 1.1 are text Previous episode on SPDY with M Schore Reached standard in 2015 with RFC 7540 and adopted by Apple with iOS 9, Mac OS X 10.11 Resolves many issues with new features:
multiplexing (helps with head of line problem in HTTP/1.1)
cancellation header compression
Always there plain text, optimal for compression
dynamic prioritization
be responsible, set lower priority when possible
not guaranteed that the server will prioritize because it is optional in HTTP/2 spec push responses (Nolan’s not a fan)
not supported by Apple
Upgrade to HTTP/2 dynamically with Upgrade Header or ALPN
Application Layer Protocol Negotiation, ALPN is during TLS and far more efficient than Upgrade header NPN (Next Protocol Negotiation)
Picks
Nolan
Akamai HTTP/2 Demo - Good info at https://http2.akamai.com HTTP/2 Test - Test supported domains
Darryl
What Every iOS Developer Should Be Doing With Instruments - Great introduction to Instruments by Kevin Kazmeirczak
John
ClockKit Tutorial: Add Complication to an Already Existing Watch Project from Kristina Thai
Jason
RescueTime - Time management software
Thanks for sticking with us through 100 episodes!
Discussion: Complications with ClockKit
Extension running on the Watch Provides text and images for the complication, watchOS draws it Data is collected in the form of a timeline You determine how dense the timeline is Works with Time Travel feature Complication Families - CLKComplicationFamily
Modular Small Modular Large Utilitarian Small Utilitarian Large Circular Small
Complication Layout CLKComplicationTemplate
Header image Header text Body 1 text Body 2 text
CLKImageProvider CLKText Provider Timelines
CLKComplicationTimelineEntry
Contains NSDate and CLKComplicationTemplate
CLKComplicationDataSource protocol
CLKComplicationServer
Used to obtain active complications and to request refresh/update of timelines
Picks
Nolan
iOS 9.3 Beta 2 - Release Notes - Apple reserves two-letter prefixes for use in framework classes. When naming your own classes, please use a three-letter prefix. The guidelines can be reviewed here: (https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Conventions/Conventions.html)
Darryl
Cook Watcher - An extremely simple cooker simulator demonstrating the implementation of Complications
John
PipSpin A new game from my friend Matt Burton. Developed with Unity. Available on iOS and Android.
Alternative show title suggestions
Epic Episode 100 Complication Families Temporal in nature Overly complicated complications Geoduck Digging It’s Complicated
With Special Guest Dov Frankel
Discussion
UIKit Dynamics with Dov Frankel
Dov’s Blog Post
UIKit Dynamics - a brief intro “Afterglo” app updated with UIKit Dynamics Why Dov decided to go with UIKit Dynamics Technical overview of UIKit Dynamics Pros/Cons/Gotchas Designer resources
Catalog app WWDC videos
Helpful resources
Getting Started with UIKit Dynamics (WWDC 2013) Advanced Techniques with UIKit Dynamics (WWDC 2013) What's New in UIKit Dynamics and Visual Effects (WWDC 2015) UIKit Dynamics Catalog, Apple's sample code that shows a bunch of behaviors in action UICollectionView + UIKit Dynamics (objc.io's October 2013 issue) UIKit Dynamics Tutorial: Getting Started, a Ray Wenderlich tutorial, updated for Swift and iOS 8
Picks
John
A simple tip to reduce app store rejections from Brenden Mulligan at LaunchKit
Nolan
Star Wars: The Ultimate Vinyl Collection
Darryl
Paw - OS X HTTP & REST Client
Dov Frankel
Swift API Design Guidelines
Alternative show title suggestions
gravity and collisions parallax effect Delightful!! spring field just turn off autolayout!
Nolan suffers Darryl's tirades regarding what he feels are some disturbing modern software development practices.
Discussion - Darryl’s Rants
Design Patterns that fly in the face of Apple’s established practices and tooling Lulling oneself into a false sense of security through dogmatic test writing CocoaPods, Fastlane and the like (Unscrutinized code-borrowing and massive dependency chains)
Picks
John
Angel’s Envy Rye
Nolan
Argumentum Ad Ignotas Extraneus - AKA: Chad’s logical fallacy of Appealing to Rando
Darryl
Kangaroo Mobile Desktop - Very cool $99 portable PC with ~4hrs of battery and docking for expanded i/o. Comes with Windows 10 Home, runs Ubuntu well.
Alternative show title suggestions
Darryl’s Make-up Rants
(Special Note: Tweet Shoutouts section will now appear at the bottom of the show notes. We hope this improves your show notes browsing experience.)
Discussion - iOS App Developers’ Apple New Year’s Wish List
All I want for 2016 is…
The ability to develop apps on the iPad Pro
Maybe just offer a Swift REPL or Swift Playground
Better Tools
MSDN offers symbols to subscribers for debugging into Windows OS with Visual Studio, Apple should do the same for iOS and Mac OS X debugging. Let us step through the OS code in Xcode so identifying internal bugs can happen faster. Microsoft Symbol Server Info.aspx#using_the_microsoft_symbol_server)
More communication and outreach with the app developer community
Step 1, Open up the Radar system Newsletter / Community Group / Etc. App camps for girls Groups support and sponsorships
Improve on the App Stores
Nolan rants about technical underpinning of App Stores and why it will take a top down approach to fix it Monetary split
Indie devs are struggling. How about giving the devs a larger percentage of the cut, 10/90 (currently 30/70) How about a sliding scale
1 to 10000 (10/90) 10001 to 100000 (20/80) 100001+ (30/70)
Permit subscriptions and trials Trials a far more effective than “Demos” or Free versions. Permit the customer to become attached to a product that when the trial ends they realize they want to pay for it. Permit upgrade pricing
Devs can’t just support the same version forever, permit them to discount the cost of upgrading from a previous version so they maintain brand loyalty Example: Version 1 was $10, Version 2 comes out and is $10. Having Version 2 be an upgrade from Version 1 for $5 would really be a value to loyal customers.
Permit devs to address their customers’ concerns/reviews
Example 1:
Customer: Hey! The app doesn’t install when I download it, what a junk app! Dev: I’m sorry that you aren’t able to install! All installs are managed by Apple and a failure to install usually means there is an issue with the new version of the app propagating through Apple’s CDNs and it will take some time for the CDNs to hydrate properly for the install to work. Here’s an Apple support email address for you to share your concern!
Example 2:
Customer: Hey! I can’t log in anymore! I hate this app! Dev: I’m sorry to hear that, can you provide me your login name or email and I’ll be happy to look into this for you.
Good suggestion. The Google Play Store lets you do this.
Picks
Nolan
Why 2015 Was a Great Year for Humity The developing world is the future of the internet Network Link Conditioner
John
Videos from Function Swift conference BrowserTV
Darryl and Nolan take a journey of exploration through the world of Bluetooth and Core Bluetooth.
Tweet Shoutouts
@iOhYesPodcast ep.94 you guys talked about the struggle to make income as an indie dev. Is it possible for a newb dev to go indie in 2016?— Kyle Lee (@Kilo_Loco) December 9, 2015
iOhYes: 95 - Great non technical episode of @iOhYesPodcast with @jaimeejaimee I'll start my #tinychallenges in Jan https://t.co/rR2W5udvGb— You can call me Joe (@mokagio) December 10, 2015
.@iOhYesPodcast Got to listen to the podcast on my way to the tvOS tech talk. Love the tiny challenges concept. @jaimeejaimee— Jeremiah Jessel (@JCubedApps) December 10, 2015
@iOhYesPodcast Sorry to keep you gentlemen in suspense. Ep #93 was great — motivation, conference philosophy, and plenty of tips!— Greg Heo (@gregheo) December 11, 2015
@iOhYesPodcast @dh_thomas Thanks for the ep #95 pick! I enjoyed the non-tech talk — like refactoring your life rather than your code ;)— Greg Heo (@gregheo) December 11, 2015
@jaimeejaimee @iOhYesPodcast great interview! Thank you Jaimee for being so open about your life, I know I learned from #tinychallenges— Dale Fairclough (@faircoder) December 12, 2015
Discussion - News we missed
Swift is Open Source!
Apple starting to accept pull requests (notably the removal of C-style for loops) Docs are also open, and a call has been made for translations
Apple to remove headphone jacks??
Audio over Lightning? Bluetooth
Discussion - Core Bluetooth
Bluetooth’s Background
Invented by Ericsson in 1994 as a wireless alternative to RS-232 serial interfaces IEEE 802.15.1 (Bluetooth) part of IEEE 802.15 (Personal Area Network: PAN) within IEEE 802 (Local and Metropolitan Area Networking, LAN & MAN) Wikipedia Link The name is a nod to King Harald "Blåtand" Gormsson (Bluetooth is an anglicanized version of "Blåtand"). King Bluetooth is said to have united the Danish tribes into a single kingdom. The logo is a bind rune forming the initials H. B. (sort-of)
Versions
1.2
1 Mbps data rate, > 80 kbps application throughput Probably the first version considered “viable.”
2.0 + EDR
3 Mbps data rate, > 80 kbps application throughput
3.0 + HS
24 Mbps data rate, but not really: The connection is negotiated over a BT link, but 802.11 is used for data transfer
4.0 (Classic and HS) & 4.0 LE (Branded as Bluetooth Smart)
24 Mbps data rate, but not really: See 3.0 + HS and LE has extremely low throughput by design (like less than 100 kbps) Bluetooth LE
Totally new protocol specifically designed for low energy consumption and simplified communications Peripheral devices can implement just LE, just Classic or both
Bluetooth LE and Core Bluetooth
Core Bluetooth provides a layer of abstraction over the GATT profile (Generic Attribute Profile) Peripherals are “servers” Centrals are “clients” Peripherals serve one or more Service(s) Services have Characteristics (can be thought of as attributes or properties) Characteristics have a value, which may be readable, writable or notifiable
Using CBCentralManager
Instantiate the manager and then check for availability (implement the -centralManagerDidUpdateState: delegate method and check for PoweredOn state Scan for services with service UUIDs you provide using -scanForPeripheralsWithServices:options: When peripherals are discovered, the -centralManager:didDiscoverPeripheral:advertisementData:RSSI: delegate method will be called
Connect to a peripheral using -connectPeripheral:options:, which in turn will call the delegate’s -centralManager:didConnectPeripheral: method. At this point, you can start using the peripheral directly. (And get responses through the CBPeripheralDelegate protocol) Discover services with -discoverServices:, which will result in the delegate’s -peripheral:didDiscoverServices: method being called Similarly, discover characteristics of a service using -discoverCharacteristics:forService:, from which you can expect a -peripheral:didDiscoverCharacteristicsForService:error: message Depending on the peripheral’s configuration, values for a characteristic can be read, written to or monitored for changes (notified) Characteristic values are expected to be small. (Like 20 bytes or smaller.) If you need to send larger payloads, it’s possible to roll-your-own streaming protocol atop characteristics.
I don’t really recommend this, but it’s a fairly common approach I suspect some of this comes from the legacy of BT being treated as a dumb serial link Apple has recognized this trend and in recent versions of iOS/OS X, they have tried to accommodate higher throughput by negotiating higher MTUs when possible. They even demonstrate how this can be done in one of their WWDC sessions.
Picks
Nolan
Star Wars Trilogy: Despecialized Edition Star Wars Machete Order
Darryl
WWDC 2012 Session 703 - Core Bluetooth 101 WWDC 2012 Session 705 - Advanced Core Bluetooth WWDC 2012 Session 701 - iOS Accessories WWDC 2013 Session 703 - Core Bluetooth WWDC 2013 Session 307 - What's New in Core Location WWDC 2014 Session 708 - Taking Core Location Indoors WWDC 2014 Session 713 - What's New in iOS Notifications
Nolan and Darryl speak with special guest Jaimee Newberry about how she redesigned her life through tiny challenges.
Tweet Shoutouts
@iOhYesPodcast hey I'm from Belgium and I ca confirm you guys are first string here ;)— Erol (@RealBAYKAL) December 5, 2015
Hey @iOhYesPodcast I'm probably not the first to write in but the first gen iPad mini gets no flavor of multitasking love.— Vic Hudson (@vichudson1) December 3, 2015
Discussion - An Interview with Jaimee Newberry
No Excuses - tiny steps toward huge life changes
After a 15-year, award-winning design career (web & iOS), Jaimee successfully shifted focus from hands-on product creation to coaching and inspiring world-renowned product teams. Through actionable examples, relatable stories, and constant experimentation she helps companies create more compassionate teams and vastly improved digital products. She also coaches individuals experiencing career stagnance or burnout, she writes, speaks, podcasts, YouTubes, and is an independent mom.
Jaimee made this career shift by applying her typical process for designing a product (website or app) to her life, as if her life were the product. (Sometimes she tried Agile methodologies, UX methods, etc.) She started out with smaller objectives and working through side projects to clear obstacles (aka: excuses) from her path. Jaimee continues doing that through her monthly challenges, which have become playful and exploratory things that grow different skill sets and push her own boundaries of fear and comfort.
Picks
Nolan
Mailbox Shuts Down - Daring Fireball - Despite acclaim and an early acquisition, Mailbox was just not built to last. Jaimee’s Website - Jaimee’s personal site with link and video’s to talks (and monthly challenges!)
Darryl
Open-source Swift: Booleans - With the recent open-sourcing of Swift, Greg Heo dives into the details of Swift’s Bool implementation.
Jaimee \o/
Tiny Challenges - On Twitter @tinychallenges Tiny Habits - Dr BJ Fogg NaNoWriMo - National Novel Writing Month
Darryl and John sit down with Jason Kozemczak to discuss multitasking on the iPad and Jason's experience enabling an app for multitasking.
Tweet Shoutouts
@iOhYesPodcast also great final speech by @johnsextro pushing the community to present new ideas at conferences, in order to validate them— You can call me Joe (@mokagio) November 18, 2015
I ?? conferences, which means I have high expectations for this @iOhYesPodcast episode! https://t.co/eM017RTJkK— Greg Heo (@gregheo) November 19, 2015
@iOhYesPodcast I’ll have to see about putting you up. But iOhYes #australia is a great idea— Ashton Williams (@AshtonDev) November 20, 2015
@AshtonDev @iOhYesPodcast pic.twitter.com/EmZ6uahAKg— You can call me Joe (@mokagio) November 23, 2015
Here you go @iOhYesPodcast. Brand new icon for you with flat design w/ san fransico font. #ui #design #icon #ios pic.twitter.com/Eyk0sGBtHr— Rizwan (@rizzu26) November 23, 2015
Discussion - iPad Multitasking
First introduced with iOS 9 Variants
Slide-Over
supported by ALL iPads on iOS 9
Split View
Slide-Over on steroids iPad Mini 4, iPad Air 2, iPad Pro
Picture in Picture
All iPad apps opted-in
Apps with no Launch storyboard are opted out UIRequiresFullScreen in Info.plist Even “opted-out” apps are still running in a multitasking environment
Supporting multi-tasking in Instacart for iOS Are we concerned about other apps impacting the perceived performance of your own app? A push from Apple toward Universal apps?
Has multi-tasking effectively killed separate iPad / iPhone apps? Is this a further “squeeze” of indie developers? Another “platform” that needs to be supported by a single purchase (iPhone / iPad / Apple Watch / whatever comes next)
Split Views and Unexpected Keyboards - Use Your Loaf
Picks
Jason
The Effective Engineer
John
Apptimize
Darryl
Gooey Apple Pie Easy Pie Dough
John, Nolan and Darryl talk about how to get the most out of attending a conference.
Tweet Shoutouts
@vichudson1 @iOhYesPodcast haha. Nope, you can’t get rid of me that easily.— Darryl H. Thomas (@dh_thomas) November 10, 2015
@mix1009g @iOhYesPodcast it’s cool stuff! Pull requests welcomed. ;)— Darryl H. Thomas (@dh_thomas) November 11, 2015
@iOhYesPodcast Just listened to the episode with @AshtonDev got home and immediately am more productive with the breakpoint tricks. Thanks!!— Brock Taylor (@brockstaylor) November 17, 2015
Discussion: The Hitchhiker’s Guide to Attending Conferences
What conferences do we attend? Are we attending any upcoming conferences? Choosing a conference
Sure WWDC or AltConf, but what else Top 10 confs of 2015 from RayWenderlich.com
Why should I go to a conference?
Inspiration Networking Jobs Emerging technologies Training
What type of conference should I attend?
Structured Unconference (Open spaces) Vendor controlled
How to get the most from a conference
Be unique Be polite, well mannered and inclusive Prepare and practice an elevator pitch (self / project / company / app) Be outgoing, but not annoying Get outside of your comfort zone (get away from the people you already know) Participate Identify your ‘must see’ sessions If a session isn’t working for you, get out, checkout the “hallway sessions”
Sometimes the best of the conference happens in the hallways
Make arrangements to stay late Some of the best networking happens after the conference
Everything in moderation; don’t let one night of overindulgence ruin your conference experience
When possible, get a room at the venue Do you have something to promote? People love free giveaways. Stickers, buttons, pens, etc. Find out who else is attending and attempt to make plans with people that you want to meet
Picks
John
Logitech MX Master Wireless Mouse
Nolan
@Scale Conference Flight 2015 How do I write block syntax again?
Darryl
The Sin in Singleton - Ben Sandofsky
Alternative show title suggestions
Hallway sessions Vote with your feet
Nolan and Darryl discuss background operations on iOS, including some of the less-obvious pitfalls you can avoid.
Tweet Shoutouts
@iOhYesPodcast I didn’t get an Apple TV dev kit, nor will buy it. As long as @netflix & co will support rev 3 I’ll stick with it— You can call me Joe (@mokagio) November 5, 2015
@iOhYesPodcast overscan on the ?TV is killing me. Fairly old but 1080p60 tv has no adjustments! Consoles have own controls, ?TV has none ????— Ashton Williams (@AshtonDev) November 5, 2015
@AshtonDev @iOhYesPodcast and imho, the margin guides ought to be set to the content-safe borders.— Darryl H. Thomas (@dh_thomas) November 5, 2015
@dh_thomas @iOhYesPodcast yeah surprised you have to add the safe zone guides yourself https://t.co/HyW9m028Qx @jim_rutherford— Ashton Williams (@AshtonDev) November 5, 2015
@iOhYesPodcast @Plex for the new #AppleTV is fantastic. Good design and excellent PQ when running movies from my NAS. Plus, it’s #free!— BaraLabs, LLC (@BaraLabs) November 5, 2015
How do you get the WWDC videos on the new Apple TV? And the apple events?— ????? (@scottaw) November 6, 2015
@scottaw @RonnieLutes1 I do have this github link from @dh_thomas on this weeks @iOhYesPodcast to roll your own.
https://t.co/v8liidTHDZ— Vic Hudson (@vichudson1) November 6, 2015
Discussion: Background work
Getting the User’s Attention
Local Notification
Background Data Callbacks
Bluetooth Location Updates Newsstand Downloads Accessory callbacks
WWDC 2014 Session 701 - Designing Accessories for iOS and OS X
Elevated Multitasking Background Work
VoIP Audio / Airplay
This is what Facebook has been scrutinized for
Background Processing Work
[UIApplication backgroundTimeRemaining] - (10 seconds with no background tasks/fetches running) Background work is often paired with greatly diminished CPU priority and can often end up with as little as 4% of the CPU Background Tasks *[UIApplication beginBackgroundTaskWithName:expirationHandler:]
[UIApplication endBackgroundTask:] [UIApplication backgroundTimeRemaining] - (600 secs pre-iOS 7, otherwise 180 secs)
Background Fetch
Project checkbox “Background Fetch” to enable Specify [UIApplication setMinimumBackgroundFetchInterval:]
Minimum == as frequently as the OS will permit Never == disable BG fetch callbacks
[UIApplication backgroundTimeRemaining] - (~45 secs)
Push Fetch
Effectively the same behavior as background fetch
Background URL Sessions
Download to file or Upload from file Performed out of process Calls back either on completion or when authentication is needed
Remember to clean up when going into the background
No OpenGL Suspend timers Expect Network Failures Clean up Bonjour and other shared resources (Address Book, Calendar, etc) Clear sensitive info from screen Clean up alerts (if needed) Stop updating UI Save the app state Clear unneeded resources Clean up Audio Sessions (Facebook Bug)
Opt out
Set UIApplicationExitsOnSuspend to YES
Picks
Nolan
Background Modes in Swift
Darryl
Anova Precision Cooker Wi-Fi
With the recent release of the new Apple TV, John, Nolan and Darryl discuss their home media setups.
Tweet Shoutouts
Congrats @jazzychad on the new job! Your contributions to @iOhYesPodcast will be missed!— Vic Hudson (@vichudson1) October 29, 2015
@iOhYesPodcast is becoming like Game of Thrones, never know when a host you like is going to get killed. Best of luck @jazzychad— Doug Whitmore (@gooddoug) November 1, 2015
Discussion
The new Apple TV Our media setups
John
Rev 3 Apple TV Chromecast for kids FireStick for Dad
Nolan
Rev 3 Apple TV Mac Mini (Media Server)
Plex server Don Melton Scripts
400 titles
Darryl
Panasonic TV Rev 4 (New) Apple TV Sound Bar PS4 Dropped optical out on the Apple TV Misses the Front-row app
Picks
Nolan
LifeSpan Desk Treadmill - TR1200-DT3 Building Mobile Applications for Unreliable Networks - Coworker Jie Jin gives talk at Twitter Flight conference Plex HandBrake - Transcode your movies into streamable h.264 Don Melton Scripts - Scripts for transcoding video
Darryl
wwimp - worldwide instructional media player - The missing [popular developer conference] session player for AppleTV
John
Can I Stream It
Alternative show title suggestions
Get more Boos Do you listen to this show? We Have A lot of Disney DVDs Wanna rip it myself 128 game systems I think you might have a problem The most unique video game consoles Hockey puck style If it’s nerdy, I buy it
Darryl and Nolan welcome Chad back to the show and discuss iOS apps he’d like to see built.
Tweet Shoutouts
@iOhYesPodcast You are ace! Love to hear your thoughts about my videos on Swift 2 and Protocol Oriented Programming https://t.co/fp1jbMTZzi— Paul Napier MadApper (@MadApperApps) October 20, 2015
@iOhYesPodcast Hey guys! I'm a newer listener and I like the podcast. I am learning Core Data and write about it at https://t.co/ylidFm0KOo— Jeremiah Jessel (@JCubedApps) October 22, 2015
@iOhYesPodcast Thanks for the detailed response on the show! Great advice, and I'm getting out there. Heading to @SwiftSummit next week. 1/2— Sean Allen (@SeanA0400) October 21, 2015
@iOhYesPodcast I've had 3 phone and 1 tech interview out of 45 companies. Hearing your story about 14/200 companies helped a lot. Thanks!— Sean Allen (@SeanA0400) October 21, 2015
@iOhYesPodcast @johnsextro of course I have my Xcode snippets on github https://t.co/lN2zkWuUYp I think they are pretty good— Ashton Williams (@AshtonDev) October 22, 2015
Discussion - Chad’s App Ideas
A or B (push notif polls) Photo sorting (ELO ranking) Emoji social network Daily Trophy TV Water Cooler Good day/Bad day Movie/trailer rating Podcasting creation Gifs creation app Step counter (w/ watch app) - not possible yet
Picks
Nolan
Unravel, a Chrome Extension for Crashlytics
Tweet from James Reggio
Darryl
tvOS Apprentice Pre-orders
Chad
Please, Don’t Touch Anything - goofy civilization destruction indie game MVVM in Swift
Alternative show title suggestions
Steal These Ideas Black Book of Ideas Darryl Steals Chad’s Ideas
John, Nolan and Darryl discuss Xcode 7’s new support for UI tests.
Tweet Shoutouts
@iOhYesPodcast keyboard cursor on 6S, 6S+ requires a force touch, rather than two fingers— Dov Frankel (@DovFrankel) October 14, 2015
@iOhYesPodcast 3D Touch on the6S keyboard will move the cursor like iPad. 9 beta 2 had it. Removed in 3.— Shared Instance (@sharedinst) October 16, 2015
@AshtonDev @iOhYesPodcast Enjoyed Ashton's appearance on the latest epidode of iOhYes talking about hidden power features of XCode— Adam Campbell (@AnAdamInAus) October 15, 2015
@AshtonDev finally guest on @iOhYesPodcast sharing great tips to level up your Xcode skills https://t.co/CUAFA0HcPx— You can call me Joe (@mokagio) October 15, 2015
@AshtonDev @iOhYesPodcast setting default values through schemes is useful when running acceptance tests suites too— You can call me Joe (@mokagio) October 15, 2015
@iOhYesPodcast Just finished an iOS bootcamp, no CS degree, minimal developer experience. Job hunt as Jr. Dev has been rough. Any advice?— Sean Allen (@SeanA0400) October 16, 2015
@iOhYesPodcast Just finished an iOS bootcamp, no CS degree, minimal developer experience. Job hunt as Jr. Dev has been rough. Any advice?— Sean Allen (@SeanA0400) October 16, 2015
Discussion: App Testing with Xcode 7
Are you (hosts) testing your apps?
John’s philosophy on testing
Why should I test?
When should I test? Automated vs. Manual
Problems with the old, Instruments-based UI testing solution
JavaScript JavaScript JavaScript
Alternatives prior to Xcode 7
KIF Subliminal Quick Slepnir
Apple’s new UI testing in Xcode * Requires iOS 9/Mac OS X 10.11
Test Recording Leverages “Accessibility” UI Testing Targets API components Assertions, XCTAssert
Elements, XCUIElement
Proxy for UI things, exposes object type and accessibility label
Queries, XCUIElementQuery
Tree navigation, similar to XPath Relationships and Filtering “app.tables” is actually a convenience method for app.descendantsMatchingType(‘table’)
Application, XCUIApplication
Proxy for the application under test, separate and new process
Dealing with Gotchas
Simulating events
No long press, roll your own with pressForDuration No 3d touch press (AFAIK)
Wait for…
using waitForExpectationsWithTimeout without an explicit wait, a total of 3 attempts will be made to resolve a query before failing
Race conditions Item not visible to accessibility
Note: “isAccessibilityElement” does NOT need to be true in order to be “visible to accessibility”
Resources
WWDC Session UI Testing in Xcode Joe Masilotti’s UI Testing in Xcode Big Nerd Ranch’s UI Testing in Xcode 7, Part 1 Giovani Lodi’s Xcode 7 UI Testing, a first look
Picks
John
Quick BDD Framework for iOS (Swift and Obj-C) Use code snippets Apple Doc on Snippets
Nolan
Star Wars: Episode VII Got nothing for iOS, but here’s the latest Star Wars trailer
Darryl
iOS Security Guide (iOS 9 and later)
Alternative Show Title Suggestions
Javascript, Javascript, Javascript! Get the hell out of non-profits Jump on the band wagon Gotcha I Love Star Wars
Tweet Shoutouts
@iOhYesPodcast One thing I forgot to mention: taxes. Self-employment tax is shocker. As I rule I just stash 50% of every check for the gov't— Sommer Panage (@Sommer) October 7, 2015
Stumble Into Aerial Work - Inspiring episode of @iOhYesPodcast with @Sommer and with actionable tips too! https://t.co/4LWUdf0vhj— You can call me Joe (@mokagio) October 7, 2015
@dh_thomas @iOhYesPodcast glad you enjoyed my post on map and for loops ????— You can call me Joe (@mokagio) October 7, 2015
@iOhYesPodcast @sommer !!! Ok, let's work on rollercoasters together in our next career segments. I've wanted to code coaster CAD software— Chad Etzel (@jazzychad) October 9, 2015
@iOhYesPodcast LOVED the episode this week about @sommer leaving #iosdev to follow her passion. Such a unique take on a interesting topic.— Andy Obusek (@obusek) October 12, 2015
Discussion - Tips for Increasing Productivity in Xcode
About Ashton
Developer at Odecee
Enterprise application development based in Melbourne and Sydney How long have you been there? What types of projects have you worked on?
Frequent? Melbourne Cocoaheads speaker Devoted iOhYes listener and quite possibly the most prolific author of Tweet Shoutouts
Darryl and Ashton first met at WWDC’13
Social Links
@AshtonDev on Twitter Ashton-W on GitHub Blog: Ashton-W.net
Breakpoints
Beyond line-based breakpoints: categorical breakpoints Types of Breakpoints
All Exception breakpoint Stop on any and all Exceptions. Objective-C Exception breakpoint Stop on Objective-C Exceptions, eg: NSException. Swift Error breakpoint Stop on Swift Errors, e.g.: types conforming to ErrorType. New in Xcode 7.1 beta 3. Test Failure breakpoint Stop when a Test fails. XCTest and compatible frameworks only. Symbolic Breakpoints Stop on a Symbol. A symbol is a selector or method name, or a function name. Methods can be scoped to a class. eg: pathsMatchingExtensions: eg: [SKTLine drawHandlesInView] eg: people::Person::name() eg: _objc_msgForward OpenGL/ES error breakpoints Symbolic breakpoints
Particularly useful for breaking in private API Also handy for performing debugger setup in UIApplicationMain
import UIKit Load/init Reveal library (or chisel, or whatever)
Breakpoint actions
Play sound Execute LLDB command AppleScript or Shell Script Log Message - %B %H @expr@
Conditions Options: Continue User breakpoints Shared breakpoints - The only breakpoints feature Ashton doesn’t like Ashton’s User Breakpoints Ashton’s Cocoaheads talk on breakpoints Ashton’s Blog Post on Xcode Breakpoints Reveal
Scheming Defaults
Defaults domains
Apple’s NSUserDefaults Domains reference
NSUserDefaults Configuring defaults in schemes Ashton’s Cocoaheads talk on scheming defaults
Designable and Inspectable Views in Interface Builder
We’ll cover this topic on another show Ashton’s slides and sample code from /dev/world
Picks
Darryl
Automated Xcode version and build numbering via Git - Another pick from our friend @mokagio. Since we’re talking about Xcode productivity, I figured this one fit in well.
John
2 finger swipe on keyboard to move cursor xCode Keyboard Shortcut
Ashton
GammaThingy - iOS app you have to build yourself - uses private APIs to implement changing display color temperature. no jailbreak required. Flux
Alternative show title suggestions
Another Attack Vector Feature toggle Scheming Default Pro Tips You’re holding it wrong Undocumented features
Tweet Shoutouts
@iOhYesPodcast Hard 2 believe the guy who’s upset @ lower-case keyboard baseline would be able to feel micro-chgs in 6S vibration motor…????— BaraLabs, LLC (@BaraLabs) September 28, 2015
@iOhYesPodcast kudos on explaining image formats. It's good for devs to know - you don't always get a designer that knows the technical side— Ashton Williams (@AshtonDev) September 30, 2015
@iOhYesPodcast @NolanOBrien this series on JFIF/JPEG technical details from Numberphile is amazingly good https://t.co/X8YfxWWxsS— Chad Etzel (@jazzychad) September 30, 2015
Very informative episode of @iOhYesPodcast on image formats. Recommended for #iosdev https://t.co/vzLhORtFnu— You can call me Joe (@mokagio) September 30, 2015
@iOhYesPodcast Re JPEG2000 legalities: isn't en/decode supposed to be patent-free? Many open-source and proprietary implementations.— Greg Fiumara (@gfiumara) October 4, 2015
Homework Follow-up
Live Photos are indeed stored as separate .jpg and .mov files on the device, with no packaging convention. The Core Data model establishes a linkage. (Dug around using iBrowse)
Discussion
A talk with Sommer Panage - Pursuing one’s dreams while paying the bills http://www.sommerpanage.com/
Formerly worked at Apple and Twitter as a software engineer Ran off to join the circus Vertical Rope Artist
Watch Sommer’s Demo on Vimeo
Taking the plunge
How did you decide? How did you prepare?
Supplementing income
Teaching
Codepath Dave Bellona episode: iOhYes Episode 48 - Unicorn Designer
Contracting
Would you do anything differently, given your experience?
Picks
Nolan
Search WWDC Videos by term - Very cool, search the transcript and get the timestamp in the search results
Darryl
When to use map, flatMap or for loops in Swift - Giovanni Lodi (@mokagio) Momentum Habit Tracker
John
Don’t break the chain Jerry Seinfled’s Productivity Secret
Sommer
Blade Habit List
Alternative show title suggestions
Bag of Stars Vertical Rope Artist Stumble into aerial work She tripped on a rope Don’t forget the incidentals They’re getting accessibility whether they like it or not Doing my dream – or – living my dream A little nuts My heart has always been in the theme park Do what you love
Tweet Shoutouts
@iOhYesPodcast Sorry, I lied last week. As a dev & listener I like longer podcasts & rants b/c I learn so much! btw, first name -> Frank— BaraLabs, LLC (@BaraLabs) September 23, 2015
@jazzychad @iOhYesPodcast sounds like you wanted to embed a tableViewController in your tvOS storyboard, give that a try— Ashton Williams (@AshtonDev) September 23, 2015
@jazzychad @iOhYesPodcast it’s the road to awesome! Let’s you adjust the frame (of the whole tvc) and still use static cells— Ashton Williams (@AshtonDev) September 23, 2015
@jazzychad @iOhYesPodcast about overscan, you still want an edge to edge UI just make sure content in within. Insets and custom views/cells— Ashton Williams (@AshtonDev) September 23, 2015
@iOhYesPodcast my handle is pronounced “mo+ka+jo” ??
That’s due to the italian way of say “gio” that sounds like “jo”— You can call me Joe (@mokagio) September 23, 2015
Yeah, you can disable lowercase letters on iOS 9 keyboard. Thanks for the tip @iOhYesPodcast— Marián ?erný (@mariancerny) September 24, 2015
@iOhYesPodcast Late listener but about extensions: they are only syntactic sugar for external functions operating on a type, so it's ok :)— PorstUndGargel (@PorstUndGargel) September 27, 2015
Discussion
Live Photos - Combo of JPEG and MOV
JPEG
around 2.5 MB 12 MP 95% quality
MOV
around 2 MB 720p 12 FPS (up to 15 FPS?) 1.5 secs before and after JPG h.264 encoded
Formats
Bitmap
Decoded in memory representation 4 bytes per pixel (even when no alpha) - on iOS at least 1920x1080 - 8,294,400 bytes (~8MB)
Lossless vs Lossy PNG (Portable Network Graphics)
lossless (can have alpha) Will be ~3.5MB (naive compression can be poor but tools like PNG Crush can help)
JPEG (Joint Photographic Experts Group)
lossy (no alpha) ~1.1MB at 95% quality and ~650KB at 85% quality Hardware decoding support
How Apple quality vs ImageMagick interpreted quality
0.830 == 95% 0.575 == 85% 0.465 == 75% 0.400 == 65%
WebP
lossy (no alpha) or lossless (alpha) ~850KB at 95% quality and ~500KB at 85% quality ~2.6MB lossless limited support
JPEG–2000
lossy (no alpha) or lossless (alpha) over engineered (one format for all use cases) - complex ~800KB at 95% quality and ~650KB at 85% quality limited support
Progressive JPEG
~10% smaller than JPEG (~1MB at 95% and ~550KB at 85%) Using ImageIO you can get things to load progressively (iOS 8+ only) Hardware decoding support ~25% to first scan
Progressive JPEG–2000
Same size as non-progressive 5 different “progressive modes” - again complex Only RPCL and RLCP modes will work with ImageIO on Apple OSes, super fragile too (but it works) ~25% to first full frame
PVRTC Other texture graphics SVG (scalable vector graphics)
Resolution independent
GIF (Graphics Interchange Format)
Uses a palette of 256 predefined colors, limiting quality
APNG (Animated PNG)
Can get very large very fast
Picks
Darryl
Building Push-Triggered Sync - OmniGroup Dev Blog
Part 1 - Building Push-Triggered Sync, Part One: Choosing a Language Part 2 - Building Push-Triggered Sync, Part Two: First Steps Part 3 - Building Push-Triggered Sync, Part III: Connecting to APNs
John
LiveCoding.tv
Nolan
LivePhotoDemo APNGKit SwiftSVG ImageMagick iOS 9 Adoption Rate Twitter Dealing with Unreliable Networks - fixed URL from last week Shackleton Shackleton Whisky Pappy Van Winkle - $1000+ per bottle
Alternative show title suggestions
Heft of images No silver bullets I’m lazy A billion people on the Internet 0 to 255 of transparency J-FIF Make informed defaults (When you) do do WebP lawyers, no thank you brother’s babies The GOVERNMENT!
Tweet Shoutouts
Hey @iOhYesPodcast! I'm about a month into having an ?Watch. So far the health aspects really work for me.
https://t.co/DiaJy2XrRM— Vic Hudson (@vichudson1) September 20, 2015
@iOhYesPodcast there is an open source lib to simulate 3D touch on the Simulator’s SpringBoard https://t.co/3rBZO5dM2S via @_theiostimes— You can call me Joe (@mokagio) September 20, 2015
. @iOhYesPodcast Can you guys push aside the @tim_cook development team and fix their podcast App; They broke it, AGAIN!, with IOS 9— Rob Jago (@aWork_Rob) September 21, 2015
@iOhYesPodcast @fbOpenSource KVOController is the best way to use KVO imo. They have handled so many edge cases and bugs for you. Nicer API— Ashton Williams (@AshtonDev) September 21, 2015
@iOhYesPodcast you know ... @mokagio runs a regular blog, newsletter, and has done multiple awesome SWIFT conference talks :) get him on ????— Ashton Williams (@AshtonDev) September 21, 2015
Discussion
Apple TV
NextMuni Not universal app, separate binary Overscan Can’t set left and right padding on table view
3D Touch
Twitter Bookmarks Home icon shortcut menus Dynamic shortcuts are possible Will iPads support 3D touch in the future?? How to test, not supported in simulator (currently)
Homework: Long press as 3D touch press
Conrad Kramer hack on home screen for 3D
DLib talks to simulator to trigger 3D touch menu SBShortcutMenuSimulator
Impressions of iOS9
Left swipe for spotlight search and proactive Siri Proactive app suggestions Upper case / lower case letters on the keyboard itself “Back to” button 40% adoption
KVOController
Malware version of xCode (incident from this week) XcodeGhost iOS malware
Picks
Chad
SBShortcutMenuSimulator
John
Refactor Mega Controller
Alternative show title suggestions
Apple Ninjas Good??? Hate interface builder all over again The view is the table view Calibration Image Monitor Snob This is gonna bite a lot of people Deep Press Inception Tuba Beat the clock Internal 3D touch Any code is a security hole Kinda meh Tinee Tiny
Tweet Shoutouts
@iOhYesPodcast awesome discussion on indie development! #nailonthehead— MadApper (@MadApperApps) September 9, 2015
I want @AshtonDev on @iOhYesPodcast!
His talk was brilliant ???? And he’s also the one who introduced me to the podcast— Call me Joe (@mokagio) September 10, 2015
@iOhYesPodcast after that last episode I guess I have to come on the show ????— Ashton Williams (@AshtonDev) September 14, 2015
@iOhYesPodcast Good intro to KVO options in swift: http://t.co/IacWR1FsYV Curious on your preferred approach.— Ding0 Bytes (@ding0bytes) September 11, 2015
.@iOhYesPodcast Tiebreaker: shorter podcast with rant at the end. Best of both worlds! (does this tweet make me a show host now? ????)— BaraLabs, LLC (@BaraLabs) September 14, 2015
Discussion - Apple Event
Apple Watch
New designer bands New colors
iPad Pro
Pencil… $99 Keyboard $169
iPhone
6S, 6S+ Force Touch.. I mean, 3D Touch
AppleTV
Native apps TVML 10/100 ethernet (slight diversion to how crappy this is)
Picks
Nolan
@scale conference - great talks and sessions with leaders in engineering including Twitter, Facebook, Pinterest, Google, LinkedIn and more Dealing with Unreliable Networks - Jess Garms [NOTE: the video has no audio at the moment…hopefully will be fixed soon] - Practical advice coming from how the Twitter apps interact with the network.
Chad
Fastlane - tools for automating iOS development tasks
Darryl
Piwik iOS SDK - Self-hosted analytics service. Primarily for web, but has an iOS SDK. This isn’t so much a pick as a request for comment. Has anyone used this? What are your thoughts?
John
GitUp - The Git interface you’ve been missing
Alternative show title suggestions
More things…to deal with Tears of blood A Thousand Bucks Is A Lot Of Money Question Mark??? On the S-Train Don’t kill me Woe be unto thee It’s too late Licensing Dongle Gigger-bit
Tweet Shoutouts
@iOhYesPodcast Length is fine! More rants!— Rauli Rikama (@raulirikama) September 3, 2015
@iOhYesPodcast I actually have a zip library too (UnzipKit). Don’t let the name fool you, it zips also https://t.co/nDppHOge6Y— Dov Frankel (@DovFrankel) September 4, 2015
@AshtonDev Thanks for the quick PRs to add Mac OS X support to ZipUtilities. // cc @iOhYesPodcast— Nolan O'Brien (@NolanOBrien) September 5, 2015
Note: He actually added Mac OS X Framework, iOS Dynamic Framework, Carthage and CocoaPods support!
Note: The conference Ashton spoke at that Darryl mentioned is DevWorld. He spoke about designable and inspectable views. Ashton’s slides/code can be found here: https://github.com/Ashton-W/devworld-designables
Discussion
What are some nice patterns or not-so-nice anti-patterns/bugs you notice in iOS apps? How can devs go about fixing those problems?
Nolan notices
Requiring login/signup to use the app
My wife’s personal pet-peeve Old Fab.com app vs Zappos app
Suboptimal table views
Stuttering
Get off the main thread: includes networking and UIImage rendering
Content flashing in once it scrolls into view
Prefetch content before it comes on screen: can be easy with table view buffering
Requesting all permissions on first app launch with no context!
On demand prompting Interstitial
Even better: don’t indicate they will be prompted, rather outline the feature and why it needs the permissions and have the user explicitly ask to grant permissions (Periscope does something like this )
Example: (User selects post a photo) Prompt says something like: “A picture is worth a thousand words. We’d like for you to be able to share any of you iPhone’s photos. By enabling us to access your photo library, you can choose from photos you already have to share with friends and family.” Below is a empty checkmark with text “Enable access to photo library” and below that is a “Close” button. Hitting the checkmark will ask for access and user knows exactly why they were prompted. Hitting close will save the setting as “on” or “off” based on if the checkmark was successfully checked.
Chad notices
Social login (FB/Twitter) only to ask for username/password/email afterward anyway Bad pull-to-refresh implementations (Apple, Twitter)
Darryl notices
Lack of accessibility Not conforming to the design language of the platform (Note that I didn’t say HIG) Re-inventing system-provided controls/mechanisms for the provider’s gain, not the user’s Facebook/Twitter/SocialMediaX sign-in as the only option Crappy validation. Example: + is perfectly legal in email addresses Collecting address book information to build a social graph
Picks
Chad
Reverse-Engineering iOS Apps: Hacking on Lyft Recall - new iOS Game by Chad
Darryl
Protocol Oriented Programming in the Real World - Matthew Palmer talks about his experience rewriting Locksmith to be Protocol-oriented.
Nolan
GitHub - nixzhu/Proposer - Proposer - Swift 1.2 project for asking for permission Racing the Beam - By Nick Montfort and Ian Bogost
Platform Studies - MIT Press
Alternative show title suggestions
Chad’s Right My Two Favorite Words I agree with Chad Stop Crapping Up Your Apps
Tweet Shoutouts
@iOhYesPodcast platitude: 1/3 of our 'productive years' are spent working -> If we make someones job easier we improve .33 of their life :)— Ding0 Bytes (@ding0bytes) August 17, 2015
@iOhYesPodcast my vote would be shorter, more focused episodes. Then just let loose on the new @jazzychad rants podcast ;)— Mark DeLaVergne (@markdelavergne) August 19, 2015
@iOhYesPodcast Longer episodes, more rants!!!— Andy Obusek (@obusek) August 20, 2015
@iOhYesPodcast ep. 81. Result type is useful for async calls. Cannot use throw there.— Kedar Vaidya (@kedarv) August 22, 2015
Note:The keyword Darryl was having trouble recalling is indirect.
@iOhYesPodcast Do you have any suggestions for tools like Uncrustify, but for swift?— Amanda (@_ukebox) August 24, 2015
Discussion
So you want to develop an app…
So you want to be an indie app developer? Why? Are you crazy???
Similarities to Indie music
Examples
Fully independent Indies
Daniel Jalkut Red Sweater Gus Mueller Flying Meat Tapbots
Former Indies that have grown into larger companies
Omnigroup Panic
What motivates a person to develop an app independently?
Hobby Scratch own itch Can anyone really make a living? Get a foot in the door with another company Win the lottery (a la Flappy Bird) Have all of the really good ideas for apps been taken?
Picks
Chad
ZipUtilities Open Source Zip library for iOS (and OS X eventually) by Nolan Twitter Bookmarks Recall
Darryl
$44 iVapo Stainless Steel Apple Watch Band Is your app iOS 9 ready? - a last-minute survival guide for stressed mobile PMs written by Harry Fuecks
John
Swift Interview Questions from RayWenderlich.com
Nolan
what if? - Randall Munroe Both hilarious and fascinating Appbot App reviews into insights. For iOS, Mac, Android, Amazon and Windows apps.
Tweet Shoutouts
"@mtjc_podcast is just a bunch of Canadians being happy and friendly and taking about IOS" LOL @iOhYesPodcast— Jack Wu (@JackTripleU) August 12, 2015
@JackTripleU @iOhYesPodcast we're actually 50/50 US/CDN. The yanks were absent on Canada Day, eh?— MTJC Podcast (@mtjc_podcast) August 12, 2015
@JackTripleU @iOhYesPodcast Oh and thanks for the mention. A case of maple syrup is on the way. BTW how do you say OS X? Asking for a friend— MTJC Podcast (@mtjc_podcast) August 12, 2015
@iOhYesPodcast inspiring story about how accessibility enabled someone to grocery shops themselves for the first time— Andy Obusek (@obusek) August 13, 2015
Discussion - UIStackView
Referred to by Apple as “your first stop for interfaces built with Auto Layout” in the description of WWDC15 Session 218 Manages the constraints of a vertical or horizontal linear layout Easy migration of IB-based layouts using the new “Embed in Stack View” button Subviews that are to be managed by the stack view are added to the arrangedSubviews property. This allows decorative views to be added directly to subviews without affecting the arrangement.
Potential pitfall: Removing a view from the arrangedSubviews array does not remove it as a subview. The stack view no longer manages the view’s size and position, but the view is still part of the view hierarchy, and will be rendered on screen if it is visible.
Multiple distribution styles
UIStackViewDistributionFill - A layout where the stack view resizes its arranged views so that they fill the available space along the stack view’s axis. When the arranged views do not fit within the stack view, it shrinks the views according to their compression resistance priority. If the arranged views do not fill the stack view, it stretches the views according to their hugging priority. UIStackViewDistributionFillEqually - A layout where the stack view resizes its arranged views so that they fill the available space along the stack view’s axis. The views are resized so that they are all the same size along the stack view’s axis. UIStackViewDistributionFillProportionally - A layout where the stack view resizes its arranged views so that they fill the available space along the stack view’s axis. Views are resized proportionally based on their intrinsic content size along the stack view’s axis. UIStackViewDistributionEqualSpacing - A layout where the stack view positions its arranged views so that they fill the available space along the stack view’s axis. When the arranged views do not fill the stack view, it pads the spacing between the views evenly. If the arranged views do not fit within the stack view, it shrinks the views according to their compression resistance priority. UIStackViewDistributionEqualCentering - A layout that attempts to position the arranged views so that they have an equal center-to-center spacing along the stack view’s axis, while maintaining the spacing property’s distance between views. If the arranged views do not fit within the stack view, it shrinks the spacing until it reaches the minimum spacing defined by its spacing property. If the views still do not fit, the stack view shrinks the arranged views according to their compression resistance priority.
Picks
Chad
Thoughts on Swift 2 Errors
Darryl
WWDC15 Session 218 WWDC15 Session 219 The Genius of Protocols - Wooji Juice
Alternative show title suggestions
Your first stop Not your final destination Beefing it up Microphone Hungry
Tweet Shoutouts
@iOhYesPodcast A sample of my Swift JSON code. Every field is optional, though. Took trial and error on some types http://t.co/SqYehQXhpo— Dov Frankel (@DovFrankel) August 6, 2015
@dh_thomas @iOhYesPodcast I can’t believe you read it all out... ???? Did you use kCFStringTransformToUnicodeName ?— Ashton (@AshtonDev) August 6, 2015
@iOhYesPodcast Really enjoyed the discussion on developer / programmer / hacker / software engineer / keyboard-head-banger in episode 78— Mark DeLaVergne (@markdelavergne) August 6, 2015
Discussion
What has Jason been up to? Sharing economy + Mobile (is there anything else on this topic? Chad, if so could you tee up with Jason - ok will do) * What’s different today as opposed to the days of Cosmo.com and Webvan? Why does Instacart work now?
Picks
Chad
A Eulogy for Objective-C
John
Question to ask yourself before including a third-party library
Nolan
Announce baby O’Brien #3 CODE: The Hidden Language of Computer Hardware and Software - by Charles Petzhold
Jak
The Death and Life of Great American Cities Jobs @ Instacart
Alternative show title suggestions
I’ll never admit to that Maybe we’ve already talked about this 7 months and 1 day later Those were not the steaks I dressed up as a shark Close to many, many years We’re all like stooges Some things really matter to people, and other things don’t Picking produce is hard Those goldfish I’m not some kind of grocery expert Admittedly, I’m an engineer The tables have turned! We don’t share that much code We have broken windows N minus 1 Buy all THE things! Bananas and Whisky Searching for Bananas You can’t do all the things I do all the things Comfortable My door is plenty secure
Tweet Shoutouts
@iOhYesPodcast +1 for Code Poet ????— Sabes™ (@GarySabo) July 29, 2015
@iOhYesPodcast re Hacker vs Engineer- Nice article from @jaredsinclair on "Judicious Use of Shitty Code." http://t.co/tS1YknL05e— Andy Obusek (@obusek) July 30, 2015
@iOhYesPodcast ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????— Ashton (@AshtonDev) July 29, 2015
@iOhYesPodcast looks like we have an opensource book writing tool http://t.co/HhkQa6Pi30— Ashton (@AshtonDev) July 31, 2015
@iOhYesPodcast My degree says Computer Science. My job title says Mobile Engineer. My time-sheets say Senior Software Engineer. I make apps.— Ashton (@AshtonDev) July 30, 2015
@iOhYesPodcast Yep - objects aren't equatable.Just having one of my adversarial swift days, thank you for listening:) http://t.co/tlIvSVECgy— Ding0 Bytes (@ding0bytes) July 30, 2015
@iOhYesPodcast definitely FTEquivalent in my experience. Useful for commoditised services (ie servicedesks with 200 headcount but 150 FTE.)— Ding0 Bytes (@ding0bytes) July 30, 2015
@iOhYesPodcast lack of clarity yesterday still bothering me: FTE is useful as a means of describing the capacity of a project or a service.— Ding0 Bytes (@ding0bytes) July 31, 2015
..but it should not be used to describe individual people, unless alienation is the express objective of the exercise.— Ding0 Bytes (@ding0bytes) July 31, 2015
@iOhYesPodcast @NolanOBrien that flew under my OpenRadar. I’m sure you’ll bring some interesting __attributes to the show.— Nick Takayama (@ntakayama) July 31, 2015
@iOhYesPodcast @NolanOBrien @5by5 @jazzychad @dh_thomas @johnsextro Wow, what an upgrade! ????????????— Jason Kozemczak (@jak) July 31, 2015
Discussion
Swift 2.0 in Practice (continued)
Custom Subclasses
throwaway required initializers
Property observers (will/didSet etc) and initialization redundancy JSON Parsing
SwiftyJSON Argo Another way Roll your own? What’s wrong with NSJSONSerialization? JSON in Swift - article talking about NSJSONSerialization vs SwiftyJSON vs Argo
Picks
Chad
Configuring App Transport Security Exceptions in iOS 9 and OSX 10.11
Darryl
Swift Error Handling and Objective-C Interop in Depth - Benjamin Encz More Than Just Code Podcast
Nolan
Dirty Coding Tricks More Dirty Tricks from Game Developers
Thanks Amro Mousa @amdev for the article(s)
Boxes: Organize. Discover. Buy. Sell.
Shameless plug for a startup I advised
Also Mentioned
Build Phase Podcast Making Crash Bandicoot - All Things Andy Gavin
Alternative show title suggestions
Shoot Me Now Judicious use of gritty code Bumps in the road Whack Whack Colon Whack Whack
Tweet Shoutouts
@dh_thomas @jazzychad @iOhYesPodcast In the last few years I’ve been of the mindset that models should be dumber. Easy to bloat them.— Amro Mousa (@amdev) July 22, 2015
@iOhYesPodcast how come show notes aren’t as detailed as they once were. Would always go there for Twitter names and Pick links ????— Ashton (@AshtonDev) July 23, 2015
@iOhYesPodcast I’m using CoreData just fine from a framework written in Swift for bike2Go (for Philly bike share) https://t.co/IBcRpXT9O6— Andy Obusek (@obusek) July 23, 2015
@iOhYesPodcast found you guys a month ago and love the show! But now I'm all caught up on new episodes and am having withdrawals #iOhNo!— Dale Fairclough (@faircoder) July 25, 2015
@iOhYesPodcast I haven't had any issues using it, but to be fair my model is very simple.— Giovanni Lodi (@mokagio) July 26, 2015
@iOhYesPodcast Wait... we still don't have .contains on Swift arrays without using a protocol? NSMutable FTW. Again. http://t.co/ff7a8RwwOP— Ding0 Bytes (@ding0bytes) July 27, 2015
Discussion
Programmer vs. Developer vs. Engineer discussion
Re: Episode 76 Episode 76 had a great topic that was really thought provoking regarding Programmer vs Developer vs Engineer. Everyone can probably has an opinion on what those titles mean Fascinating: we’re inclined to rank things Their all title for someone who makes software or code Maybe “Software Producer” or “Talent” is less biased Code Poet is my favorite (thx John)
Alternate views
Instead, I like to examine the skills Instead of Programmer vs Developer vs Engineer; look at Programming, Development and Engineering as buckets of skills
Full-time Equivalent
The 5 skills
Hacking * bringing together a system of potentially disparate computer apps/tools/functions to achieve a goal * Gluing together anything you can get your hands on to build a workflow or solution takes talent and skill * Often the goal of Hacking is really “discovery” or “exploration” Movie Reference: Hackers Programming
writing code/scripts to pull together potentially disparate functionality and/or frameworks to achieve a goal You create a whole that is more valuable than the sum of its parts amassing and consuming huge amounts of knowledge about APIs and Frameworks that are available and then using them effectively
Development
the process of bringing together talent, ideas and requirements to build a new application or feature Deals with other people and takes input from all over to build something new it’s inherently collaborative and requires other skills like interpersonal skills and communications skills often called soft skills which I find ironic because it’s so hard
Engineering
the use of science and creativity to solve complex problems It needs an academic foundation combined with creativity and ingenuity to solve hard problems These skills get amplified in value when complemented by others who can fill in any knowledge or skill gaps
Architecture
the design of a large complex system or application that requires numerous contributors to fully implement it is a skillset that can envision, design, and clearly document and communicate a complex system in a cogent way that everyone tasked with implementing the system are able to apply their skills to succeed with little or no impediment?
Picks
Darryl
Swift’s Type System - Ole Begemann A response to Brent Simmons’ blog post, Solving Problems I Don’t Have, Except that I Do Have Them, in which he points out the things he likes most about Swift, of which static type checking is probably the least significant.
Chad
deferring (haha) to Nolan
John
Hacking with Swift - A load of free tutorials with Swift from Paul Hudson @twostraws Twelve South Dual Screen Wallpaper Collection
Nolan
Apple Radar
Everyone should file bugs and feature requests
Open Radar
Dupe any bugs/requests that you can to open radar Be a community Share your Open Radar with us. Any radar we can get on board with we will mention on the show and dupe to Apple Radar ourselves.
Quick Radar
Makes filing radars easier Easily can file to both Apple and Open radars Can automatically Tweet the radar out too First radar plug: My own Radar
Asking Apple for @defer support in Objective-C https://twitter.com/NolanOBrien/status/618098575826751488 Anyone interested in using a macro for defer support until Xcode supports it can look at the Open Radar for the code on how to Special thanks to Ashton @AshtonDev for the inspiration
Alternative show title suggestions
SequenceType Feedback from Ding0bytes Full-time Equivalent Spam Killer Hex Editor Not the Southern Kind of Cracker Soft skills are hard Software is easy, people are hard Sell yourself I’m a svengali Getting my hemispheres correct All the ripples String this racket Skin this cat Made with catgut I Try To Avoid Titles I make people smile and sometimes cry
We discuss specifics regarding value types and references, including how to use them and when to use them. Chad sheds some light on his struggles getting familiar with Protocol-Oriented Programming.
We discuss what it means to be a software developer and the differences between programmer, developer and engineer (if there really are any differences). Do you think there's a difference or should there be a difference in those terms? Let us know. Send a tweet to @iohyespodcast
We interview Greg Heo about his work as Swift Lead for RayWenderlich.com and discuss the latest on Swift 2.
We talk with author and app developer Jeff Kelley about his new book, Developing for Apple Watch (Your App on Their Wrists). We grill him on the book writing process, the difficulties of writing the book before he had the watch and things to come with WatchOS.
We wrap up the finals bits of discussion on Chad's overall WWDC experience and then move on to discuss the evolution of Storyboards and the uptake in adoption.
Chad and Darryl are joined by Nolan O'Brien and Jason Harris to discuss the recent announcements at WWDC and to drink whisky. (But mostly to drink whisky.)
We continue our discussion of Swift by covering Operators and spend a little time talking about things we like to see at WWDC.
Automatic Reference Counting (ARC) including what's new (not much) and suggestions for when to use weak vs. unowned.
Optional Chaining including Nil protection, multiple optional calls chained and the Law of Demeter.
Generics including generic functions, generic types, associated type, type constraints and the use of the Where clause.
Darryl finishes up some homework assignments and address some corrections. He covers Overriding private methods, private methods in notification selectors, factory methods and follow-up on initializers.
Chad and Darryl continue our series on Swift. This time they take a look at Inheritance, Initializer and Deinitializers.
We cover the tweet shoutouts, homework assignments and wrap things up with our picks of the episode.
We welcome special guest Kim Etzel (wife of host Chad Etzel) to the show to discuss ResearchKit from the perspective of someone in the research community with an interest in gaining the benefits of ResearchKit.
ResearchKit
Build surveys for modal presentation on an iOS device. Use customizable visual consent templates to explain the details of your study and obtain a signature from the participant. Be sure to get your visual consent flow approved by your institutional review board (IRB) or ethics committee. Use active tasks to invite users to perform activities under semi-controlled conditions, using iPhone sensors to collect data.
Related Open Source
AppCore
Dashboard with progress graphs Data storage back end JSON serialization and deserialization Integration with Sage Bionetworks' Bridge service
GlucoSuccess Asthma Health mPower Share the Journey
AthenaCareNetwork.org
Swift Methods, including instance methods, type methods, self and mutating structs and enums. Subscripts Access Control, public internal and private
This week we pickup where we left off with our deep dive into swift. We identify a few corrections that you helped us with and then we dive deep into properties.
We follow that up with a discussion of Methods, Self and Visibility
Apple Watch
Pre-order starts this Friday April 10
Models/Prices Are you getting one? Which model? Apple marketing “how to” videos
“Guided Tour” - http://www.apple.com/watch/guided-tours/
Writing a watch app with WatchKit - https://github.com/jazzychad/FlickrWatch
FlickrWatch app
Interface Builder woes Obj-C version Swift version Interop from Obj-C to Swift Network calls? https://github.com/jazzychad/FlickrWatch/issues/1
Louie Mantia’s see-through watch face concept
Swift
Follow-up/Corrections 2 episodes ago, Darryl mistakenly referred to Swift 1.3 beta. He meant to say 1.2 beta.
Tuples
Contents can be decomposed in a manner very similar to the decomposition of an enum value’s associated values Elements can be accessed using dot notation with its zero-based index.
Particularly useful as the return value of functions
Group values into a single compound value. Values need not be of the same type Multiple ways of getting at the composed values
“_” can be used to ignore parts of a tuple.
Elements of a tuple can be named, and subsequently accessed by name using dot syntax. If the data structure is likely to persist beyond a temporary scope, consider a class or structure instead.
Functions
syntax parameters
local vs. external parameter names variadic in-out default parameter values
return
multiple return values option tuple return types void defined as empty tuple ()
function types
syntax as parameters as return types
Closures
terseness Types
Global Functions Nested Functions Closure Expressions
Trailing Closures
Swift
Data
value types
enums
can have initializers, can be extended and can conform to protocols Swift enums do NOT get default integer values
structs
auto-gen’ed memberwise initializers (not so in classes) No ref counting, since value type
reference types
classes
very similar to structs (but ref type) inheritance Ref count for memory management
Swift Diff: dot syntax allows us to directly set sub-properties without intermediate assignment (reduces instance creation and malloc) Rookie Question: What is the key deciding factor between creating a struct vs. class or class vs. struc?
The Discussion
Swift
Syntax
variable / constant declaration / type inference if/for loops switch statements optionals
Tweet Shoutouts
@iOhYesPodcast #57 marketing tip- I heard I needed to market myself as well as my apps so I created an ios dev blog - http://t.co/m5Sif9HtQr
— Darrell Nicholas (@dwnicholas) March 3, 2015
@iOhYesPodcast yet another good episode http://t.co/FxrcP7g9HH. The conversation bridges with the "t-shaped people" from @thisagilelife
— Giovanni Lodi (@mokagio) March 4, 2015
The Discussion
Sprite Kit using Swift
Sprite Kit Basics
Projects are organized into Scenes The Scene Editor
Allows you to visually layout sprites and components of a scene.
SKView - like other views but contains a sprite kit scene SKScene SKSpriteNode SKAction Comes with a physics engine built right in….Niiiiice!
Physics World
Included in Scenes by default Configurable Gravity Physics Bodies Contact Delegate for collision detection
Implement SKPhysicsContactDelegate
Sprite Kit and Scene Kit
3d vs 2d
Sprite Kit vs. Unity
Sprite Kit
Native Free
Unity
Cross-platform Superior visual scene designer Built-in asset store More powerful??? Than sprite kit / scene kit
Chad’s Recommendations for Sprite Kit best practices Tutorial at RayWenderlich.com Apple’s SpriteKit Programming Guide
Open Source Project of the Week
HLSpriteKit from Karl Voskuil Includes gesture target, layout manager, custom SKNode subclasses, extended scene
Picks
Chad
10 More Bullets - http://www.newgrounds.com/portal/view/627247 rlite - https://github.com/seppo0010/rlite - self-contained, serverless, zero-configuration, transactional redis-compatible database engine.
John
Citizenfour, documentary about Edward Snowden. (Shhh. The NSA is listening) Top 70 Programming Quotes of All Time
Alternative show title suggestions
Kids These Days 10 More Bullets
Tweet Shoutouts
@iOhYesPodcast also tips for good ways for indie devs to market a new app on a budget. I got it all wrong on my first app QuickSchedule...
— Darrell Nicholas (@dwnicholas) February 18, 2015
JNCO Jeans are about to make a comeback!! (@jak @iOhYesPodcast) http://t.co/dp80hI7wMW
— Kim Etzel (@KimEtzel84) February 20, 2015
@iOhYesPodcast nice chat on #reactjs native. I guess we'll just have to wait till it's open source to play with it... http://t.co/SCj6UShf0Y
— Giovanni Lodi (@mokagio) February 22, 2015
@iOhYesPodcast finally, regarding remote logging, I've implemented this simple remote logger https://t.co/hh4UzTAg0v, what do you think?
— Giovanni Lodi (@mokagio) February 22, 2015
The Discussion
Generalization vs Specialization
Back to Work #209: Habitual Ritual What causes some folks to collect hobbies/interests while others focus on and master one thing? Opinion: Is It Better to Specialize or Generalize? - Nora Dunn (no, not the SNL Nora Dunn) What type are we?
John
Restless. I like to learn a little bit about a lot of stuff. I wish that I could learn a lot about a large number of things, but I don’t have the time nor the mental capacity. I believe in the axiom that “Someone always knows more ‘Karate’” and that frustrates my efforts to go deep in any one area.
Chad
Cop-out. Somewhere in the middle.
Darryl
Generalist. I have always collected hobbies and dabbled in things superficially. This has transferred over to my professional life with two major (but complementary) career changes.
How does this serve us with regard to iOS development? How has this hindered us?
Open-Source Project of the Week
DDAntennaLogger - Giovanni Lodi Giovanni asked what we thought of his simple remote logger. I was unfamiliar with both CocoaLumberjack and Antenna, so I’m passing the question along to our listeners. What do you folks think? Open up some issues/pull requests for Giovanni.
Picks
Chad
Origami
Darryl
Slender from MartianCraft is one of those rare tools that fits neatly between development and design. Slender will scan your Xcode or Web projects and provide information on how image assets are being used. Exposing retina issues, unused assets, wasted space, and designer mistakes.
John
TaimurAyaz/TAOverlay, Simple overlays with a minimalistic design. Other World Computing, for Mac upgrades
Alternative show title suggestions
Not a hater Collecting hobbies Cop-out OCD Thing Systems on a hole In Love with what they do The way the winds are blowing Saxophone I really, really like bowling...a lot Baby Carrots Dark and Brooding Competent and Confident Grammar show Going to the model moon Question mark?
Tweet Shoutouts
@iOhYesPodcast I'm an ATM tech by day, iOS dev after work,Trying to switch away from ATM to iOS FullTime,Your show helps get me thru the day
— Darrell Nicholas (@dwnicholas) February 11, 2015
The Discussion
React Native -http://jlongster.com/First-Impressions-using-React-Native
What is React.js? - http://facebook.github.io/react/ What is React Native? https://twitter.com/andy_matuschak/status/560511204867575808
“I say with confidence as a former UIKit author: React's model for the UI layer is vastly better than UIKit's. React Native is a huge deal.”
Flexbox - http://css-tricks.com/snippets/css/a-guide-to-flexbox/
Reimplemented in C, Java, JS https://github.com/facebook/css-layout
React Native Videos
https://www.youtube.com/watch?v=KVZ-P-ZI6W4 https://www.youtube.com/watch?v=7rDsRXj9-cU
Stated pros of React over similar JS->native libs
JS layer runs async batches operations NOT write once run anywhere Instead, Learn once write anywhere
Open-Source Project of the Week
Teleport-NSLog
Picks
Chad
Controlling Complexity in Swift
Darryl
Changes to the Swift Standard Library in 1.2 beta 1
Provides a really good summary of the changes in Swift 1.2 with a bonus section on how to implement CopyOnWrite collections using isUniquelyReferenced (as well as a plea to consider using ManagedBuffers instead).
John
InVision - turn your graphic mockups into a prototype.
Alternative show title suggestions
Violent agreement Mmmm Master stroke Perilous Dear Internet JS Threading is hard Panacea for Multithreading Super Against It Dogmatism How Comprehensive Maschetti Order One other point Log All the Things JS No fighting here Copy on assign
Tweet Shoutouts
@iOhYesPodcast my ideal workspace: my own office. I need a dedicated space that's mine with a door so I can choose the noise level. #ep52
— Kim Etzel (@KimEtzel84) January 30, 2015
@iOhYesPodcast @dh_thomas @johnsextro I thought it was a great episode. I'll have to listen again to get more of the detailed parts
— Nolan O'Brien (@NolanOBrien) February 2, 2015
The Discussion
Continuous Delivery Challenges in Mobile Development
CD (Continuous Deliver) is well accepted and understood in web development.
What is the view of CD in iOS development? Is the review process “barrier” just too long and uncertain to make it viable? At what frequency do app updates become bothersome to users?
Is Apple trying to help solve this with the “Autoupdate” capability?
If CD doesn’t work for Prod releases is it worth setting up for “user acceptance testing” purposes? Tool support?
Other reference articles
http://sdtimes.com/year-agile-devops-continuous-delivery-took-life-cycle/ http://appdevelopermagazine.com/1519/2014/6/4/Simplifying-Mobile-Application-Development-with-Continuous-Delivery/
Open-Source Project of the Week
Spring (Written by Meng To, a self taught UI/UX developer living in San Francisco) A library that can help you add animations to your app.
Written in Swift. They have a demo app that lets you play with the animations. Works with Storyboards as well.
Picks
Chad
NEOColorPicker
Darryl
Random Swift Things - Brent Simmons
John
Battle of Brothers, The one year game dev duel. (from Ilea Cristian) Herman Miller Living Office, great ideas for improving on the open-plan office space.
Alternative show title suggestions
No Windows 3.1 Release Anticipation Discredit Tech Buzz Boxed Software or Box Software Gold Master Maniacal Focus on Quality Unit Test Hater Bleeding Edge Waiting is Terrible Spoilers
Tweet Shoutouts
Super shoutout to iCatcher by @joeisanerd , @iOhYesPodcast , and other software-development podcasts: https://t.co/Vaj2Vp7o2h
— Josh Adams (@vermont42) January 21, 2015
@johnsextro @iOhYesPodcast Sooner or later I'll run into you, and when that time comes, our TDD planning will commence! — marksands (@marksands) January 26, 2015
The Discussion
SceneKit
For a discussion of Apple’s Metal Framework, see Episode 44
@iOhYesPodcast Hello from Romania, Europe! Very nice podcast:) If you accept topic suggestions I would like to hear about SpriteKit/SceneKit
— Ilea Cristian (@ileacristian) October 22, 2014
Here you go, Ilea, this one’s for you…
What is SceneKit?
Objective-C framework for building apps and games that use 3D graphics High-performance rendering engine High-level, descriptive API Supports animation based on the Core Animation framework with defined animatable properties Abstracts away the rendering algorithms used to display a scene, meaning you don’t need to worry about things like:
Object ordering Culling Shaders (though you can write your own if you like)
What is SceneKit not?
A game engine (you must provide your own logic) An escape from linear algebra Cross-platform (but who wants to support Android anyway?) A fully-featured substitute for solutions like Unity3D
Why use SceneKit?
Very easy way to get your feet wet with 3D graphics Suitable for simple games Rapid implementation of visualization apps
Major features
Available on Mac OS X and iOS Integrated inspection (model viewer, material editor, particle editor) and debugging in Xcode COLLADA importing Supports geometries, materials, lights and cameras Animatable properties LoD substitution (level-of-detail, allowing for variable geometry complexity) Actions (allows for animation triggers, sound effects, etc) Skinning and Deformations Static/dynamic shadowing Physics, including joints and inverse kinematics Particles Ray casting/hit testing Custom OpenGL shader programs JavaScriptCore bridging SpriteKit overlays for performant 2D UI elements that don’t require an additional compositing pass
The basics (iOS-specific)
Assets are contained within a Scene Assets container in your Xcode project Xcode performs optimizations at build-time (up-axis correction, vertex interleaving, PVRTC image format favoring, etc) Scenes can be imported from COLLADA (in Xcode. The dae file is converted to a bplist [retaining the .dae extension] before it is put on the device) or un-archived from plists. Scenes consist of a graph of nodes.
Root node: defines the world’s coordinate space sub-Nodes: populate the world with visible content by attaching:
Cameras Lights Geometries
Scenes can be built-up (or modified after load) programmatically. sub-Nodes from other scenes can be added to a scene, but a root node must not be added to another scene. Important classes
SCNView - a view that displays SceneKit content SCNScene - The container for all SceneKit content SCNNode - The basic building block of a scene SCNGeometry - A three-dimensional object that can be attached to a node. Also known as a mesh or model. SceneKit has several built-in primitives that can be used, or custom meshes can be imported or built from vertex data. Surface appearance is defined by materials attached to the geometry. SCNMaterial - A reusable definition of surface appearance properties for an object SCNLight - A light source that can be attached to a node, providing shading in the rendered scene SCNCamera - A virtual camera that can be attached to a node, providing a point of view for rendering a scene.
Open-Source Project of the Week
iOS-8-SceneKit-Globe-Test - @schwa iOS 8 Scene Kit (swift!) project showing a spinning (earth) globe with diffuse, ambient, specular and normal materials. Also cloud layer. Yum.
Picks
John Follow @johnsextro
“As I learn WatchKit” (AILW) series, by _DavidSmith
Darryl Follow @dh_thomas
SceneKit Sample Projects
Bananas: A simple SceneKit platforming game SceneKit slides for WWDC 2014 SceneKit Vehicle Demo
Alternative show title suggestions
Shader writing Lots of polygons bones and joints inverse kinematics draw call, draw call, draw call root node for the world particle emitters hold on to the root node root node the maths skin is a reserved not a geologist camera bob the one with the monkeys
With our Special Guest, Nolan O'Brien
Tweet Shoutouts
@iOhYesPodcast Loved the dive into BDD and the UICV tricks last episode. I'm determined to see @jazzychad embrace testing sooner or later :D
— marksands (@marksands) January 20, 2015
@iOhYesPodcast Congrats on your partnership with 5 By 5 Network! Also, your name iohyes is fantastically clever. — Ninjevade (@Ninjevade) January 18, 2015
The Discussion
Time Estimation and Deadlines for development projects/tasks
What are your techniques? Are they effective/accurate? Estimating with a team vs. by yourself If you’re doing UI work (w/ or w/o a designer) vs. non-UI work How often do you reassess your estimation? When do you admit that your estimation is wrong or you won’t make your deadline? How to prioritize tasks when a deadline is looming and not everything will get done?
Open-Source Project of the Week
CocoaMarkdown - Markdown parsing and rendering in Objective-C
Picks
Nolan O'BrienFollow @nolanobrien
SimPholders 2.0
A rewrite of simpholders in Swift. A tool for viewing your iOS Simulator folders, the apps installed and what was recently run. Great tool now that Simulators are unreadable GUIDs.
Darryl Follow @dh_thomas
NSHipster (Nate Cook) - JavaScriptCore A deep dive into using JSContext and related classes to evaluate JavaScript on iOS. Among the many use cases for JavaScriptCore is game scripting (although LUA is perhaps a more popular solution), which may come in handy for a future episode of iOhYes.
Chad @jazzychad
“How to Ship Without a Deadline”
John Follow @johnsextro
#NoEstimates
http://noestimates.org/blog/ (Neil Killick) http://twitter.com/noestimates http://twitter.com/woodyzuill
Alternative show title suggestions
Modus Operandi Soto Brothers Coding Soto Brothers Fungibility Wa-gile-fall #vague tweets Its “Super” In and out triangle Marty you’re not thinking 4th dimensionally Gold master Stamping CDs Agreeing Snicker I look up to you Chad
Hosts: John Sextro, Chad Etzel and Darryl H. Thomas Audio Engineer and Post-Producer: Darryl H. Thomas
Released Friday, January 16, 2015
Tweet Shoutouts
@jak @iohyespodcast why oh why!
— Soheil (@soheil) January 9, 2015
@jon_m_hill @iOhYesPodcast you're too good to me
— Jason Kozemczak (@jak) January 10, 2015
@iOhYesPodcast just found out @jak is leaving. Not cool man
— Doug Whitmore (@gooddoug) January 11, 2015
The Discussion
The Open-Office Trap published in the New Yorker, by Maria Konnikova
1997 - The University of Calgary study (before, 4 weeks after and 6 months after)
Disruptive, stressful, cumbersome, dissatisfied, resentful Productivity fell
2005 Study
When workers couldn’t change the way that things looked, adjust the lighting and temperature, or choose how to conduct meetings, spirits plummeted.
johnsextro This article sounds like a bunch of crying from a pretentious primadonna http://t.co/x3jDzAerwC Types of open floor plans
the blank slate - just tables and chairs moveable walls - rolling or sliding walls/whiteboards used to create separation Team Area / Pit / Bullpen - semi-private partitions, not easily reconfigured
John’s opinions
Cubicles, they suck
False sense of privacy They don’t contain nor block noise They get in the way and are a waste of space
Offices, slight better but still bad
They can contain and block noise But they are a terribly inefficient use of space Stifling to collaboration and fascist
Darryl’s opinions (read: facts)
Open floor plans, they suck
Amusing article (http://verynicewebsite.net/2015/01/be-yourself-as-long-as-its-your-best-self/) Workers are left with no sense of personal space as a company grows The universally proposed “solution” to noise is headphones, read: OTHER NOISE People feel free to interrupt your workflow in person, as if IM and email wasn’t bad enough Note: I think this actually works well for teams up to 10 quiet people (no phone calls, etc), beyond that, it’s untenable My favored compromise solution: Bullpen cubes (cubes that can accommodate teams of 4-5 people)
Cubicles, I hated them until I no longer had them
I miss my partitions Cubes actually do affect noise levels: they discourage yelling across the room and deflect and diffuse/absorb audio a bit (when built properly)
Shared offices, I love ‘em
Office with up to 3 occupants Can get cramped, but with good office-mates, it’s pretty harmonious Especially good if your office mate is always going to meetings (and you aren’t)
Open-Source Project of the Week
Sleipnir, BDD framework
Sleipnir is not dependent of NSObject Sleipnir is not using XCTest
Picks
Darryl Follow @dh_thomas
30th Annual International Technology and Persons with Disabilities Conference (#csun15, San Diego, March 2-6, 2015) As the name implies, this is a conference related to technology and how we make it accessible to those with disabilities. I’ll be attending for the first time. Traditionally web-heavy, there are a few iOS-specific sessions this year in addition to several sessions that are universally useful regardless of platform. Early-bird registration ($455) ends February 3, 2015
Chad @jazzychad
UICollectionView initial content offset sol’n
John Follow @johnsextro
Ninjevade - developed by a friend of mine, Matt Burton. He just recently released it to iTunes.
Alternative show title suggestions
Rail against the environment Bullpen 5by5 Code of Conduct Rage coding Do that thing You and your damn physics There was a ‘B’ somewhere Those germs can move
Hosts: Jason Kozemczak, John Sextro and Chad Etzel Audio Engineer and Post-Producer: Darryl H. Thomas
Released Friday, January 9, 2015
Tweet Shoutouts
@jazzychad @_dml your @iOhYesPodcast from earlier this year on your games/failure/marketing challenges was particularly painful. Shit's hard
— Darshan Shankar (@DShankar) December 12, 2014
@Javi @iOhYesPodcast pic.twitter.com/NpjLgsQvpL — Nacho Soto (@NachoSoto) December 13, 2014
Finally subscribed to @iOhYesPodcast
— Amro Mousa (@amdev) December 27, 2014
The Discussion
Farewell to Jason
Chad’s story John’s story
How to get started as an iOS app developer today
Open-Source Project of the Week
Design Patterns in Swift
Includes behavioral, creational and structural patterns Includes an example implementation of each pattern and then how to use the code implemented via the pattern.
Picks
Jason Follow @jak
Design Details podcast, hosted by Brian Lovin and Brynn Jackson Episode 1 is out now, featuring Sam Soffes riffing on freelancing, equity as payment, motorcycles, selling apps, and more
Chad Follow @jazzychad
Getting interactivePopGestureRecognizer dismiss callback/event
John Sextro Follow @johnsextro
SnapPower, the nightlight reinvented
Alternative show title suggestions
Farewell Jason Dubius Introduction Insane in all the right ways - ce That’s Chad Twitter Arguments Calling HR One new thing
Tweet Shoutouts
Listening @iOhYesPodcast new episode while traveling to the Pacific Ocean side of the city. http://t.co/2eCdvxMyFO
— Yoshimasa Niwa (@niw) December 6, 2014
Listened to @iOhYesPodcast on my evening walk. @superme's typography reminds me of titles from a Lynch movie. //@jazzychad @dh_thomas @jak
— Jon Gary (@recordtronic) December 8, 2014
@iOhYesPodcast finally, an honest discussion and overview of dev'ing and product. Thanks @jazzychad — Nolan O'Brien (@NolanOBrien) December 8, 2014
The Discussion
WatchKit / Pebble
WatchKit design decisions: code runs in the phone, not on the watch. API is synchronous, but with no getters. The big success of WatchKit is making the API transport-agnostic: no mention of Bluetooth.
It may even use Ad-Hoc Wifi to send larger amounts of data.
General confusion around the limitations of WatchKit:
It’s NOT the API to make watch apps, but a way to extend iOS apps by “projecting” data to the watch. Native apps coming later.
A win of making watch apps extensions is that, at least for now, the user doesn’t need to manage which apps you install on the watch, eliminating one of the frictions of the Pebble.
Another consequence is it eliminates the need to log into apps separately for the watch, like you have to do with Pebble apps. Apple needs to get App Store discovery right.
beta 2 released today (Dec. 10); API changes in 8.2b2
[WKInterfaceController +openParentApplication:reply:] [UIApplicationDelegate -application:handleWatchKitExtensionRequest:reply:]
From the docs: “A dictionary containing data to return to the WatchKit app. The contents of the dictionary must be serializable to a property list file. The contents of this dictionary are at your discretion and you may specify nil.” (emphasis our own)
Default row appearance in WKInterfaceTable, which can be overridden by specifying bg color, margin, corner radius and height in IB Blog post by _DavidSmith
Lister example app updated today w/ Watch extension (app and glance)
Open-Source Project of the Week
Fox, A property based testing library for Objective-C and Swift, by Jeff Hui (@jeffhui) Docs / examples / more info at http://fox-testing.readthedocs.org/en/latest/
Picks
Jason Follow @jak
Bobler, a micro-podcasts app (Instagram for audio?) follow Jason (@jak_)
Darryl Follow @dh_thomas
Build Phase, a weekly technical podcast discussing iOS development and design. Hosted by Thoughtbot developers Mark Adams and Gordon Fontenot. Lots of discussions related to TDD, architectural design and an exploration of functional programming with Swift.
Javier Soto Follow @javi
MMWormhole, a clever cross-process message passing implementation
John Sextro Follow @johnsextro
Day One, Journaling App Serial, Podcast
Alternative show title suggestions
Burrito Soto Thanks Chad “Is that French?” Feed your feed Feed you podcast fever “Underscore? That’s a cool name”
Tweet Shoutouts
Just listened @iOhYesPodcast. I thought Swift is not good for beginners since at this moment, it adds extra complexity on UIKit ObjC APIs...
— Yoshimasa Niwa (@niw) November 25, 2014
@dh_thomas @niw @iohyespodcast would be interesting to get @sandofsky's take, or someone who took his class (@allidryer @franklin_ho) — Evan Davis (@wahoo) November 25, 2014
@wahoo @dh_thomas @niw @iohyespodcast I'm going all-swift on new projects. Anecdotally, big companies with existing code aren't moving.
— Ben Sandofsky (@sandofsky) November 25, 2014
@wahoo @dh_thomas @niw @iOhYesPodcast @sandofsky @allidryer I found the APIs straightforward with Swift. Definitely good for beginners. — Franklin Ho (@franklin_ho) November 25, 2014
The Discussion
Super
Implementation UI Design/effects Custom components Tests
Open-Source Project of the Week
ZLSwipeableView - https://github.com/zhxnlai/ZLSwipeableView
Interesting example of ui dynamics in action with a good readme and a good delegate protocol
Picks
Jason Follow @jak
“A week of iOS bugs” post by Alex Dieulot
Darryl Follow @dh_thomas
Tom Harrington - Sharing data between iOS apps and app extensions Overview of file-based data sharing. When I originally read this article and marked it as pick-worthy, there was considerably more information about how to use file coordination as a notification mechanism between apps and extensions. It turns out, Apple has specifically warned against using file coordination in extensions (Tech note 2408). The article has been updated accordingly.
Chad Etzel Follow @jazzychad
Super - https://super.me/
Alternative show title suggestions
The Floodgate of Nerd Hatred Gesture Privilege Crazy Chess Game Snow iOS
Tweet Shoutouts
@iOhYesPodcast love the first 5 minutes of glorious nonsense in the latest episode. Well done.
— Jon Hill (@jon_m_hill) November 14, 2014
@iOhYesPodcast #Hockeyapp Android / iOS, group and user level permission, crash logging / tracking, github integration, user feedback, etc.
— James Parker (@parkej60) November 15, 2014
Listened to @iOhYesPodcast #46 hoping for C languages as a topic, got a great discussion on OO design. More Gang-of-Four Design Patterns!
— Nolan O'Brien (@NolanOBrien) November 18, 2014
The Discussion
WatchKit has been released: we’ll cover this in-depth in a later episode, but let’s discuss initial reactions briefly. Learning to program in Swift from a designer’s perspective
Why learn to program? (12 min)
Does learning to program help the designer communicate with engineers?
What is recommendation for mockups to other designers (18 min) What approach are you taking?
Codepath Somewhat similar program in St. Louis called LaunchCode
Will this knowledge help you understand the trade offs between out of the box UI and custom? (28 min)
Facebook Groups AsyncDisplayKit, originally designed to make “Paper” possible
How do you deal with MVP demands in UI design? (38 min)
Key interactions
Base level functionality UX
Closed loop system Open loop system
What has been the most surprising aspect of learning Swift? (44 min) Difference: learning Obj-C vs. Swift (47 min) What pitfalls have you run into, and how have you overcome them? How can we as engineers better communicate in terms a designer will relate to?
Open-Source Project of the Week
A great open-source resource was my classmates work on Github. We had to submit work using Github and it quickly became a great resource for looking at other classmates’ code. If you search for “CodePath” and filter for Swift on Github, you’ll find many of the designer and engineering assignments for the Swift classes.
Picks
Jason Follow @jak
Flashlight - unofficial Spotlight plugin system / manager You can download an alpha build from its Github page. Python-based plugins w/ customizable icons, command pattern-matching, and HTML-based UI. You can browse and download plugins from the source on Github.
John Follow @johnsextro
Anker 5 port High Speed Desktop USB Charger $25.99 “Design is One”, documentary on Massimo Vignelli Follow on pick offered by Dave, Architect and the Painter
Darryl Follow @dh_thomas
Dash API Docs for iOS The API documentation you know and love from OS X is now available as an iOS app. Personally, I don’t find myself searching API docs on mobile devices all that frequently, but I see this as another way to support Bogdan Popescu’s efforts. I use the Mac app all the time.
Dave Bellona Follow @davidbellona
Matthew Sander’s iOS posts on animations, custom segues, and adaptive layouts in Swift. He’s a designer at Us Two, the firm that developed Monument Valley. Great resource for for beginners and intermediate designers who code. Ivo Mynttinen’s iOS Design Guidelines is a solid breakdown of screen resolutions, design elements, and patterns on iOS 8.
Alternative show title suggestions
The why Slow code Modal Segue Hidden behind the longpress Farting out apps / Facebook farting out apps Bourbon guy Fix that redundancy Red dots with white circles Thank you Swift Accent grave Accent aigu Obj-C for 2nd graders
Tweet Shoutouts
@iOhYesPodcast Great discussion last podcast. Can you guys go deeper into SOLID in a future-sode? Please overclock @jazzychad when you do.
— Sir Adam Huda (@thinktopdown) November 1, 2014
my favorite trope from @iOhYesPodcast: @dh_thomas insults @jak and @jazzychad laughs hysterically. i want more moments just like this please — Kim Etzel (@KimEtzel84) October 31, 2014
The Discussion
TestFlight Beta Testing
Getting started
Xcode iTunes Connect
Inviting Beta Testers
Internal vs. External
Does this mean that other beta testing services are “Sherlocked”?
HockeyApp, etc.
Should people using other beta testing tools migrate?
Are there advantages to being part of this ecosystem? Are there advantages to staying away from TestFlight? Does TestFlight give you anything special that you can’t get from another service?
Open-Source Project of the Week
2048, An open source version of the game “2048”
git clone https://github.com/ik/2048.git
Is this damaging to the original developer of the game or does this follow the old adage, “There’s no such thing as bad publicity”
Darryl’s opinion:
Article on the “Threes ripped off by 1024, which is in turn ripped off by 2048” “controversy”: 2048’s Massive Popularity Triggers Cloning Controversy - Kotaku At what point does a game define a new genre, which makes cloning inevitable? If game mechanics vary slightly, is that enough of a distinction? (I think so, but there are many who would consider the game mechanics to be every bit as much of the “art” as the game’s content.)
Jason's opinion:
The market usually doesn’t care about fairness. Being an indie developer means running a business. Businesses must always be evolving to “put themselves out of business” or else your competitors or copycats will.
Picks
Jason Follow @jak
Dave Verwer’s iOS dev weekly
Weekly (obviously) curated iOS development videos / articles / stories Sponsored job postings from great companies Available by email (recommended) and the web
John Follow @johnsextro
Armchair - App Review Manager written in Swift for iOS and OS X
Similar to UAAppReviewManager and Appirater but 100% Swift, works on iOS and OS X Prompts the user to rate your app only after passing the rules that you have established. Very configurable
Chad Follow @jazzychad
Mike Ash articles
“Let’s Build NSZombie” “Let’s build NSAutoreleasePool”
Darryl Follow @dh_thomas
Follow-up from previous pick: Wolf Rentzsch discussed KZPlayground in depth in Edge Cases episode 110, “Scripting with C” Use Your Loaf: Continuous Integration with Xcode Server How-to article for setting up CI covering everything from OS X Server installation to key management to Bot configuration
Alternative show title suggestions
Cordial Cherry Dr. Jak Shut up Break my own rule Recused Piecemeal solutions Defining Genre Autorelease pool Leak out Cascading Pool Draining
Tweet Shoutouts
@iOhYesPodcast Have been happily using Storyboards in a team of 8 developers. 100+ screens, 20+ storyboards. Enterprise ready!
— Ashton (@AshtonDev) October 20, 2014
@iOhYesPodcast Great show with Adam! Speaking of Adam, When can I expect to hear an iOhYes show on threading, Mr. Axe? POSIXtively exciting!
— Adam Hitt (@nibsandxibs) October 21, 2014
@iOhYesPodcast Hello from Romania, Europe! Very nice podcast:) If you accept topic suggestions I would like to hear about SpriteKit/SceneKit
— Ilea Cristian (@ileacristian) October 22, 2014
Send us your shoutouts: @iohyespodcast
John is on “special assignment” this week, so we have decided to play for you a previously unreleased discussion we think you all will enjoy.
The Discussion
OO Inheritance vs Composition (w/ iOS related examples)
The problems of Inheritance in things like UIViewControllers
ViewController vs TableViewController split inheritance tree problem
Composition
What is it? How is it different than Inheritance? Chad’s Twitter Login Helper example Axiom - Prefer composition over inheritance
Dependency injection SOLID
Single Responsibility principle (SRp) Open closed principle (OCp) Liskov Substitution principle (LSp) Interface Segregation principle (ISp) Dependency inversion principle (DIp), depend on abstraction, not concretions.
Advanced User Interfaces with Collection Views - WWDC 2014 Session 232
Open-Source Project of the Week
https://github.com/mattt/euler Euler - unicode mathematic operators in Swift Is this ok/operator overloading opinions?
Picks
Jason Follow @jak
Matthew Cheok’s latest “design teardown”: Tweetbot-style “tip” alerts
Chad Follow @jazzychad
https://gitgo.io/ - Private git hosting
Darryl Follow @dh_thomas
Playgrounds for Objective-C - Kryzsztof Zablocki Uses the iOS simulator to provide quick prototyping/parameter tweaking similar to Swift Playgrounds (but faster). Includes a demonstration video. Source available on GitHub and as a CocoaPod, if you’re into that kind of thing.
Alternative show title suggestions
OO in the dark ages Is-A vs. Has-A Don’t use this in production Late to the composition train Everything implements Rectangle Throw out the baby with the bath water Let’s talk about biology A dog has legs Overclock with Coffee SOLID You’re fired I don’t want you to use Emoji
Tweet Shoutouts
@iOhYesPodcast Hi guys, you have a very cool podcast! Thanks for mentioning my LNNotificationsUI framework!
— Leo Natan (@LeoNatan) October 9, 2014
@dh_thomas @jazzychad @iOhYesPodcast "We can fix it in post processing"
— Brandon Carpenter (@bhcarpenter) October 9, 2014
@iOhYesPodcast Re: Photo Extensions - seems like they can only be launched from the Photos App. In other news, you're awesome. — Gavin Aiken (@gavaiken) October 8, 2014
Very interesting discussion of OpenGL and Metal by @dh_thomas on @iOhYesPodcast — Ashton (@AshtonDev) October 14, 2014
Send us your shoutouts: @iohyespodcast
The Discussion
Sextro Apologizes to Lastpass What apps are using size classes with great success?
Adam’s experience
Story boards/XIBs Scaling/Sizing Death to Paper Prototypes Turning IB over to UI Designers Previews Problems with keeping designs in sync
Mobile Payments
Who are the big players / competitors?
Google Wallet, PayPass, PayWave, ISIS (LOL)
Technologies
NFC
Samsung, Motorola, HTC, Nokia, Blackberry, now Apple w/ Apple Pay
Secure Enclave and Secure Element - Apple Security Docs, pp 24-29
Secure Enclave - Coprocessor on A7 Secure Element - Java on the iPhone!??!
EMV/JavaCard - EuroPay, Mastercard, Visa, how most CC transactions are made outside of US. Coming to US 2015.
Apple Pay
Coming in iOS 8.1? (not available in Beta 2 still, only available for select partners) When to use Apple Pay
In-App Contactless
How do people get started?
developer.apple.com/apple-pay PKPaymentAuthorizationViewController merchant identifier
Apple Pay Guidelines Apple Pay App Review Guidelines
Open-Source Project of the Week
Apple Pay Stubs from Stripe
Provides a mock payments ViewController (w/ test credit cards, addresses, etc.) for testing integration with PassKit / Apple Pay.
git clone https://github.com/stripe/ApplePayStubs.git
Android Ink
Picks
John Follow @johnsextro
iWerkz Foldable Bluetooth Keyboard
Jason Follow @jak
Dart Scoreboard Pro by Jon Hill (@jon_m_hill)
2 - 4 player games Cricket / Cut Throat 301/501 game style coming soon
Adam Follow @adamaxe
3 and 4 party Payment Networks Badass games Vidgets
Alternative show title suggestions
Band back together There are no bugs I’m back. I gotta whole new earring. Soft Crash Right now Big PITA Miscommunication abounds A large team, like an 8-person team ;) Philosophical hump Pixel-perfectness Diff with Diff Special Applesauce Super-dork
Tweet Shoutouts
NONE
Send us your shoutouts: @iohyespodcast
The Discussion
Quick revisit of Widgets and Extensions
What “Today view” widgets are you using?
Darryl - Transit, Pedometer++. I wish I could move the Tomorrow Summary above 3rd party widgets John - Paste+ Jason - Omnifocus, Yahoo News Digest, Duolingo Chad - e*trade
What extensions are you using?
Darryl - ¯\_(?)_/¯ Jason - Camera+ photo editing, 1Password Safari extension Chad - 1Password, Transmit
What do you still want to see exist?
Jason - VSCO CAM photo editing, more 3rd-party 1Password integration Chad - Better YouTube support
Metal - Low-overhead GPU access for iOS 8
What is Metal?
Modern, Thin API for GPU programming (graphics and simd compute) Designed for A7 and newer SoCs (iPhone 5S and newer) Shader/kernel language based on C++11
Who should/will use Metal?
In-house/roll-your-own 3D engines/frameworks
For most folks, using Metal or OpenGL directly is overkill (but fun!) Alternative, higher-level APIs include SceneKit (3D) and SpriteKit (2D), which provide much more than just graphics rendering support, including graph management
Third-party 3D engines/frameworks Compute-heavy applications and filters with highly parallelizable work
DSP Image filters Protein folding? Note: Swift currently doesn’t support importing C unions or SIMD vector types. Chris Lattner acknowledged this, citing feature prioritization (so it’s reasonable to be hopeful it’s coming in the not-so-distant future). In the meantime, if you need to work with SIMD, you may want to stick with Objective-C when using Metal.
Practical differences between Metal and OpenGL ES
In Metal, command buffers are exposed, giving control over when the commands are sent to the GPU to the application and putting the onus of asynchronous framing on the application Most state is stored in immutable state objects that are created at setup, not in each draw cycle, allowing for quick state change that doesn’t require expensive recompilation of shaders/validation Streamlined API. OpenGL provides many ways to do (effectively) the same task largely due to its evolution. Metal sheds many of the legacy techniques. Metal provides direct access to the A7’s shared memory. Thread safety/synchronization is the responsibility of the app.
Additional resources
AnandTech : Some Thoughts on Apple’s Metal API Rendering Pipeline: What’s the Big Deal with Apple’s Metal API? Unity Blog: Metal, A New Graphics API for iOS 8 Obligatory Ray Wenderlich link: iOS 8 Metal Tutorial with Swift Metal By Example
Open-Source Project of the Week
ScrimpyCat's Metal Examples
There are surprisingly few open source projects using Metal so far, but here’s a repo with some sample code illustrating the use of basic Metal APIs and shaders.
git clone https://github.com/ScrimpyCat/Metal-Examples.git
Picks
John Follow @johnsextro
Razer Tartarus a game controller repurposed (note: I’m actually using an older version called the Nostromo N52)
Darryl Follow @dh_thomas
Mike Ash: Swift and C Swift provides rich facilities for OO and functional programming, but it also allows extensive bridging to C APIs. Learn all about how to call C functions, work with "unsafe" pointers, manage memory, and more.
Chad Follow @jazzychad
AWS iOS SDK AWS Mobile Analytics
“100 million free events per month” “$1.00 per million events per month”
Jason Follow @jak
UX Companion iOS app A glossary of user experience terms, with links on how to apply and learn more about each topic. Basically, a phrase book for speaking to designers that you work with.
Alternative show title suggestions
You are ruining his segue The patron saint of brown-nosers Sudo OCD Drunk Darryl Are you learning English? Emoticon for shrugging shoulders Too old a man Long story short Boy have they Sure Are you using the knob at all? That’s a lot of letters
Tweet Shoutouts
@dh_thomas @jak @iOhYesPodcast @johnsextro I did it so I'd have something for those form fields.
— Brent Engels (@ebrent) September 28, 2014
@johnsextro @jak @iOhYesPodcast @dh_thomas Something like "Scaled Points the Game as it climbed to 10,000 daily unique users" — marksands (@marksands) September 29, 2014
@iOhYesPodcast @johnsextro @dh_thomas my CV is heavily edited. 2 - 3 accomplishments (w/ numbers if possible) per position
— Jason Kozemczak (@jak) September 28, 2014
@iOhYesPodcast @johnsextro @dh_thomas Schools are optimized at the top of the funnel (recruiting / financial aid); alumni network sometimes
— Jason Kozemczak (@jak) September 28, 2014
@iOhYesPodcast @johnsextro @dh_thomas choose higher Ed for learning / personal growth, not for securing a job. — Jason Kozemczak (@jak) September 28, 2014
Send us your shoutouts: @iohyespodcast
The Discussion
Apple’s Black Box...The App Store review process
“Apple Takes Down an Indie Dev” “Transparency and Due Process” “Seeing the App Store Forest for the Trees”
Open-Source Project of the Week
In-app notifiers!
https://www.cocoacontrols.com/controls/dtitoastcenter-swift https://github.com/jazzychad/CENotifier https://github.com/LeoNatan/LNNotificationsUI Caution that native-looking in-app notifs could get you in trouble with Apple!
Picks
John Follow @johnsextro //
thatthinginswift.com How Objective-C patterns we already know translate into Swift
Darryl Follow @dh_thomas
Oyster - Your Regex IDE Oyster helps you interactively build and test regular expressions, storing each “pearl” in an easy to access library. //
Chad Follow @jazzychad
CAEmitterLayer reference CAEmitterCell reference //
Jason Follow @jak
Functional Programming in Swift from objc.io folks out now
eBook ($39) and paperback ($59) available Paperbook + eBook available for $69 includes playgrounds / spreadsheet sample project
Alternative show title suggestions
Its a trap Fairness more than transparency Opaque is the same as black Go Indie Not entirely true Evangelists Evangelists, They exist They exist Poke the bear Launch into Obscurity Trusted ecosystem I want a unicorn That’s why they need the spaceship I really dig it
Tweet Shoutouts
@jazzychad StarbuckFeedViewController is the harbinger of death? @iohyespodcast #diversifyshoutouts
— Kim Etzel (@KimEtzel84) September 22, 2014
Send us your shoutouts: @iohyespodcast
The Discussion
Getting Hired
Getting a foot in the door
Networking
IRL
Family Friends Former Co-workers
Online
Twitter Facebook LinkedIn IRC
Local events, meetups, hack nights Alumni Open Source Consulting, contracting and freelance
Interviewing
Your resume
Length Content Detail Cover letter References
How to dress
Socks are optional
Stretching the truth
John says go for it, but stay within bounds. Darryl says don’t do it!! Honesty is the best policy. Instead, demonstrate/document your ability to learn quickly.
Open-Source Project of the Week
Github Resume Generate a resume based on your work as documented and stored on GitHub, http://resume.github.io/
Picks
Darryl (@dh_thomas)
Core Intuition Jobs Board - Focused job site for Cocoa developers Daniel Jalkut explains his (and Manton Reece’s) motivations on Bitsplitting
John (@johnsextro)
What Color is Your Parachute? 2014, by Richard N. Bolles
Alternative show title suggestions
Socks Are Optional Wear a Tuxedo All the Gold Things
Tweet Shoutouts
@iOhYesPodcast +1 for Hopper. It's what made the Internet hate me for a day http://t.co/Akz4gwXdTe /cc @dh_thomas
— marksands (@marksands) September 13, 2014
@dh_thomas @iOhYesPodcast is good stuff :)
— Ashton (@AshtonDev) September 15, 2014
@AshtonDev @iOhYesPodcast and I keep thinking about network reachability
— dbradby (@dbradby) September 15, 2014
Send us your shoutouts: @iohyespodcast
The Discussion
iOS 8 released today
Mixpanel’s iOS 8 real-time adoption graph
Currently ~ 9.8% iOS 8 Data may be biased (User agent visits to sites that use Mixpanel)
Lots of excitement around extensions
1Password, Yahoo! Weather, PCalc, etc. Last-minute fixes by Apple around extension
“The App Store appears to be mangling code signing of these extensions (which are signed separately to their parent applications), causing the bug.”
What Tumblr learned building their Extension
Healthkit woes
Inside the Airbnb iOS Brand Evolution
Branching strategy
Merge to master often w/ separate target Using macros to “hide” WIP Code names for symbols? Good idea? Refactor Through Deletion
Picks
Chad (@jazzychad)
Disk Maker X Transmit for iOS by Panic
Jason (@jak)
Vangogh - “Vangogh is an iOS library for testing how well an application works for people with various kinds of color vision deficiencies.”
John (@johnsextro)
Frustrated by Evernote’s lack of support for Markdown, I’m evolving my note taking and writing workflow. It’s currently a work in progress, so I’ll provide future updates here as it evolves.
Sublime Text 2 Marked 2 MarkdownEditing, from Brett Terpstra (SublimeText package), A markdown editing package for SublimeText 2 & 3 Editorial, universal app for iPhone and iPad markdown writing Dropbox as the backend repo
Alternative show title suggestions
Reachability confusion Reachability disambiguation I don’t feel bad That’s why they make chocolate and vanilla Does that make it better? We all know how the sausage is made It’s probably a Core Data issue Skinning a cat with long-lived branches Make rows Feature Drivers Project Starbuck [[9C858B84-0732-4652-952C-8AD2D537AB0 alloc] init] #If and #Elses Everything is made of spit and duct tape I’m not a maven on AirBNB Why not just throw it away Burning it down with fire Negative lines of code John2005 Future John Sometimes it’s good to start fresh Straight to mah bukket Eye opening Sure
Tweet Shoutouts
We have 7/11s in San Francisco!!! They're stand alone stores like at market/3rd. @iOhYesPodcast @johnsextro @jazzychad @jak @dh_thomas
— Kim Etzel (@KimEtzel84) September 5, 2014
@jazzychad dang Chad! Now I have to come up with a use for http://t.co/tFYN9A7xWY which I wasn't prepped for ;) CC: @iOhYesPodcast
— Nolan O'Brien (@NolanOBrien) September 5, 2014
Send us your shoutouts: @iohyespodcast
The Discussion
iPhone 6 (4.7”) and iPhone 6 Plus (5.5”)
[caption id="" align="alignright" width="190"] JNCO Jeans[/caption]
Retina HD
326ppi @ 1334x750 (compare to iPhone 5: 1136x640, same ppi) 401ppi @ 1920x1080 Apps that have not been updated for adaptive layout are scaled up
Dual domain pixels - accurate colors at wider angles of view Plus has 185% more pixels than 5s
Does the Plus have the GPU horsepower to drive this, or are we in the same situation as the first Retina iPad? We’re probably in good shape: the 5s has oodles of GPU to spare, and the A8 has up to 50% greater performance, according to Apple. Screen not all that different from an iPad Air, which had an A7 in it Relevant: http://www.anandtech.com/show/8514/analyzing-apples-a8-soc-gx6650-more
Very thin, but at the cost of a protruding camera. They both have a bump? What do you get with a ridiculously large phone?
Need a pair of JNCO Jeans to fit the 6 Plus in your pocket Plus leverages adaptive layout to provide "regular" size-class content when in landscape. (Referred to as 2-up in the keynote) Expanded keyboard in landscape: Cut, copy, paste, etc Springboard supports landscape Sleep/wake button moves to the side Reachability slides the top of the screen down so you can reach it.
Is this a necessary concession of ridiculous phone size? Will we see the iPad adopt this?
A8 SoC
2 billion transistors (up from 1 billion) 20-nanometer process 13% smaller than A7 Looks like the performance gain curve may be beginning to flatten (but we need more data) …but maybe it’s a conscious trade-off to gain 50% greater energy efficiency??
Obligatory game demo
Super Evil Megacorp - Vainglory Was that the singer from Tears for Fears playing the demo?
M8 Motion Coprocessor
Adds a barometer for relative elevation Can estimate distance
Carrier Aggregation for faster LTE Voice Over LTE (VoLTE) - Simultaneous voice and data WiFi Calling (T-Mobile & EE for now) Better camera (Surprise!!!!) and better processing
Pretty significant improvements. Too many to enumerate Plus supports optical image stabilization
Apple Pay
$12B/year in cc/debit transactions in the U.S. Contrived video showing how difficult using a card is
She even fumbled while removing her card from its sleeve Is paying with a card really so inconvenient
Followed by a video showing how easy Apple Pay is “Secure Element” chip stores device-specific payment info on the device
Credit card number is not stored
Single-use payment numbers and dynamic security codes for each transaction!
Darryl has wanted this to be the standard for quite a while (Tweets from 2011)
Apple does not collect transaction details Developer APIs available via PassKit (Getting started with Apple Pay PDF) Nick Arnott (@noir): 9/10/14, 7:11 AM 220,000 locations sounds like a lot until you realize that’s out of roughly 14.26 million credit card terminals in the US. Long way to go. Very clear write-up by Nick Arnott on iMore: Apple Pay and security: What you need to know
Apple Watch (One more thing…)
Starts at $350, iPhone required - This is definitely an accessory item Flexible Retina display - single-crystal-thick sapphire
Touch- and force-sensitive
Gyroscope and accelerometer built in, but location relies on phone, so you’ll still need to bring it with you when you exercise Really interesting input/navigation “Glances” mini-widgets LOLling at the zoomed-out photo collection view Was Yo on to something? Apple seems to think so, given their “communicate with taps” feature Is this watch thin enough? Apple has always limited its product lines to simplify purchase decisions. Is this lineup too broad? Why the emphasis on +/- 50ms accuracy? WatchKit (No link available yet)
Actionable notifications Apps Glances
Picks
Chad (@jazzychad)
Points - The Game
Darryl (@dh_thomas)
Hopper Hopper is a reverse engineering tool for OS X and Linux, that lets you disassemble, decompile and debug your 32/64bits Intel Mac, Linux, Windows and iOS executables. Static Analysis: Following Along at Home with Hopper’s Decompiler Feature by Melissa Elliott (@0xabad1dea), A bit out-of-date, but very useful walk-through of Hopper
Jason (@jak)
Product Hunt on iOS
John (@johnsextro)
Flappy Bird recreated in Swift from FullStackEDU.com they claim that they will be offering a course in game programming with Swift in the near future.
Alternative show title suggestions
Bigger Than a Pop Tart You’ve got your damn phablet now. I hope you’re happy. Ridiculous JNCO Jeans iPad Mini, Mini I cried the whole rest of the day You’ve made a bad choice, John You’re fired They both have a bump? So contrived Somewhat mentally deficient Seems like a non-brainer Yo was on to something Send my heartbeat to chad Time you get out of the thing Balked out loud
Tweet Shoutouts
@iOhYesPodcast @jazzychad got myself a new handle, thanks Chad! @chewybyte aka @NolanOBrien
— @chewybyte (@chewybyte) August 30, 2014
Send us your shoutouts: @iohyespodcast
The Discussion
Extensions
What are they
Turns out..."Extensions" is not a single concept. Multiple flavors known as extension points. App Extension lets you extend custom functionality and content beyond your app and make it available to users while they’re using other apps. App Extensions are a separate binary that runs independent of your app.
Extensions Points
Today - interact with the “Today” view of notification center Share - Post to sharing website (twitter) or share content with others Action - manipulate or view content within the context of another app Photo Editing - edit a photo with Photos app Finder (OS X only) won’t discuss Document Provider - manager files Custom Keyboard - replace custom keyboard
Apple is really stressing “Trust” as a key when creating a custom keyboard. Your users are giving you access to everything they type including passwords and other sensitive data.
App extension must exactly match one of the types of extensions. You can’t create a generic extension that matches more than one extension points. What can’t they do
Access a sharedApplication object Use any API marked in header files with the NS_EXTENSION_UNAVAILABLE macro Access camera or mic Perform background tasks Receive data via AirDrop
Distribution
App Extensions must be delivered via a Containing App on iOS.
Common Needs
Sharing data with containing app requires special considerations. Need to use a share container. Watch out for data corruption/ Deploying to older version of iOS
Need to take advantage of conditional linking Use dlopen command if systemVersion return iOS 8.0 or later
Open-Source project of the week
https://github.com/ioscreator/ioscreator
Contains tons, and I do mean tons, of code samples for doing just about everything under the sun on iOS. Great for someone looking to try something new or for those just getting started with iOS development.
Picks
Chad (@jazzychad)
Desert Golfing, $0.99
Darryl (@dh_thomas)
Let’s Write Some x86-64 - Nick Desaulniers (@LostOracle)
An easy-to-follow introduction to x86-64 assembly
Synalyze It!
Synalyze It! allows you to create a grammar for your binary files interactively (or you can download shared grammars for common file formats). Unlike in regular hex editors or viewers the files are interpreted automatically for you. Additionally Synalyze It! is a full-featured Hex Editor for Mac OS X allowing you to edit files of unlimited size and interpret the bytes with dozens of text encodings.
Jason (@jak)
OmniFocus 2 (Mac and iOS), OmniFocus + Getting Things Done helps me stay sane.
John (@johnsextro)
iOS8 Day-by-Day, from shinobicontrols - a series of blog posts covering new technologies and APIs available in iOS8
Alternative show title suggestions
Touch the User Hope for the best while expecting the worst Get the eyeballs Beigher Hole 287 Zen and the art of golfing Hone assembly skills Hex editor on speed I wanna go lower level I don’t get anything done You had ONE job Put a bird on it apps
Tweet Shoutouts
@dh_thomas @iOhYesPodcast @shelly Enjoyed the show with @Sommer. Good job, guys.
— Steven Aquino (@steven_aquino) August 22, 2014
@dh_thomas @iOhYesPodcast Perfect timing, thx! #ios #appdev
— Brent Engels (@ebrent) August 22, 2014
Send us your shoutouts: @iohyespodcast
The Discussion
“On the feasibility of Large Scale Infections of iOS Devices”
2 Security Issues
the iTunes syncing process is vulnerable to Man-in-the-Middle (MitM) attacks an iOS device can be stealthily provisioned for development through USB connections. This weakness allows a compromised computer to arbitrarily remove installed third-party apps from connected iOS devices and install any app signed by attackers in possession of enterprise or individual developer licenses issued by Apple.
CloudKit
Cost model - https://developer.apple.com/icloud/documentation/cloudkit-storage/
Any hard numbers yet?
vs. Parse
Parse supports JS, Android, Java, etc. Cloudkit - iOS 8+ / OS X 10.10+ devices CKRecord == PFObject, CKQuery == PFQuery, CKAsset == PFFile? What’s the difference in pricing? CK doesn’t have any server-side capabilities (just data storage + pub/sub on changes)
This seems like potential tech-debt
CKDiscoverAllContactsOperation
https://developer.apple.com/library/prerelease/ios/documentation/CloudKit/Reference/CKDiscoverAllContactsOperation_class/index.html#//apple_ref/occ/cl/CKDiscoverAllContactsOperation “The search of the user’s address book does not return any personal data about the user’s contacts. The search returns only the IDs of the corresponding user records, which contain only data that your app puts there.” Requires user permission Implications: if this is successful, Apple will have a giant graph of users’s contacts.
Open-Source project of the week
Signal from Whisper Systems (source: https://github.com/WhisperSystems/Signal-iOS)
Background
Moxie’s former(?) company/organization is compatible w/ RedPhone, their secure call Android app “Signal provides end-to-end encryption for your calls, securing your conversations so that nobody can listen in.” Available on the App Store: https://itunes.apple.com/app/id874139669
Secure text messaging to come
Picks
Chad (@jazzychad)
Weird iOS -- Really weird iOS apps sfxr -- Random sound effect generating app
Jason (@jak)
YouTab - “The Wiki of Chords and Lyrics,” synchronized to recordings / Youtube videos. Play along with and learn your favorite songs, right in your web browser. Built-in editor for adding new songs. 1Password app extension
John (@johnsextro)
Do you use Core Data? Checkout Core Data Editor
Alternative show title suggestions
Sniffing your SMS Let’s see what happens A big bad way A fart in the wind If it doesn’t happen now Zombie botnet apocalypse I was being the studio audience We don’t need a studio audience The ultimate lock-in I don’t know when to quit
Tweet Shoutouts
@iOhYesPodcast great episode - filled my wait in the airport. Great topics and discussion. I think an all Jazzy Chad episode is overdue ;)
— Nolan O'Brien (@NolanOBrien) August 4, 2014
@iOhYesPodcast @jazzychad @jak just listened to my first podcast episode, good stuff guys! (and this coming from an Android guy)
— Michael Shafrir (@mcs) August 10, 2014
Send us your shoutouts: @iohyespodcast
The Discussion
Mobile Accessibility - getting into the details
iOhYes Podcast Episode 35 - Includes a discussion with Neem Serra about the importance of making apps accessible
The basics
UIAccessibility protocol reference
Advanced APIs
UIAcessibilityContainer protocol reference
UIAccessibilityAction protocol reference
UIAccessibilityPostNotification() reference
Thoughts on accessible design
What considerations should be made in terms of information density? How do we maintain accessibility as design trends toward gesture-driven UI? How does one strike a balance between avoiding too many user preferences and providing adaptability for special needs?
New stuff in iOS 8
Accessibility on iOS - WWDC 2014
Additional resources
Apple’s Accessibility Developer Portal Verifying App Accessibility on iOS iOS Best Practices - via Web Accessibility
Open-Source project of the week
Riemann Sum: UIAccessibility Demo - Sommer Panage on GitHub
The application allows the user to model one of 3 functions in a graph and select the number of rects to approximate the integral using a Riemann Sum. (This demo uses the Left Riemann Sum.)
This app has been made fully accessible to demonstrate the use of Apple's UIAccessibility protocols / classes. It demonstrates basic accessibility additions via customization of accessibilityLabel properties thru more advanced accessibility via custom accessibility containers.
git clone https://github.com/spanage/riemann_sum_ax_ios
Picks
Chad (@jazzychad)
That Thing In Swift: http://thatthinginswift.com/
Darryl (@dh_thomas)
Vovis: Soon-to-be-available project. An out-of-band VoiceOver visualizer to help identify potential accessibility issues. I’ll be sharing it on GitHub soon. (Hopefully before the next episode.)
Beyond Visual Interfaces with Kevin Jones at Madison+ UX
Kevin Jones demonstrates the challenges of navigating 2-dimensional interfaces designed for sighted users when using screen readers, which may be considered 1-dimensional, and provides suggestions as to how design might be optimized for screen readers.
Sommer (@sommer)
Tommy Edison: a lot of us don't actually know a blind person. Tommy does 2 awesome YouTube series: one answering common questions sighted people have for blind people and the other reviewing films from the blind perspective. Each is a quick and interesting:
https://www.youtube.com/user/TommyEdisonXP
https://www.youtube.com/user/BlindFilmCritic Flesky: https://itunes.apple.com/us/app/fleksy-keyboard-happy-typing/id520337246?mt=8 incredible keyboard for sighted and non-sighted users alike. Shows promise for learned custom gestures.
Announcements
We discontinued the news segment of the show to allow us to focus more on creating meaningful and deep discussions on topics affecting iOS developers.
Tweet Shoutouts
None :(
Send us your shoutouts: @iohyespodcast
The Discussion
Making Money in the App Store
http://blog.jaredsinclair.com/post/93118460565/a-candid-look-at-unreads-first-year http://www.marco.org/2014/07/28/app-rot http://txt.jazzychad.net/gist/19a05ad4e7ef77072b44
Open-Source project of the week -- SGImageCache
http://chairnerd.seatgeek.com/a-lightweight-ios-image-cache/ https://github.com/seatgeek/SGImageCache
Picks
John (@johnsextro)
Cloak, personal VPN Overcast, new podcast listening app from Marco Arment
Jason (@jak)
NPR One
Chad (@jazzychad)
Mobile Animations showcase Controling animation timing
Announcements
We discontinued the news segment of the show to allow us to focus more on creating meaningful and deep discussions on topics affecting iOS developers.
Tweet Shoutouts
@iOhYesPodcast i want to meet the person who has spent more than 30 minutes in Swift who is not worried about this ... or maybe i don't ... — @johndoooooooooooooe (@johndoe) July 3, 2014
@iOhYesPodcast I’m mostly ignoring swift for the next year or so. — Keith Slater (@_keithslater) July 3, 2014
@iOhYesPodcast there will be problems. The question is will the benefits of Swift be worth the pain of dealing with those problems. — JARinteractive (@JARinteractive) July 3, 2014
Send us your shoutouts: @iohyespodcast
The Discussion
Accessibility for Apps
Neem and Darryl
Advocates for blind, deaf want more from Apple Power of Selective Quoting Marco Arment's response: Apple’s App Review Should Test Accessibility xScope 4 - A powerful set of tools that are ideal for measuring, inspecting & testing on-screen graphics and layouts. (Including tools for testing for color blindness issues) Craig Hockenberry's comments on Twitter@gruber Doing VoiceOver in Twitterrific wasn't easy/cheap, but was the right thing to do. The only "profit" is hearing how it helps people.https://twitter.com/chockenberry/status/487281074863497217@gruber As making a profit with apps gets harder every day, doing the extra accessibilty work is the first thing to get chopped.https://twitter.com/chockenberry/status/487281329323528194@gruber Apple CAN do something about making it profitable to implement accessibilty. Surprising that there's no App Store section for it…https://twitter.com/chockenberry/status/487281751153057793 Maccessibility PodcastMaccessibility is devoted to connecting, compiling, and providing easy access to the best resources for blind, visually impaired, and other disability groups using Apple products. It is maintained by a dedicated group of visually impaired volunteers, who are Apple enthusiasts themselves. Apple: Accessibility for Developers
Jason and John
The categories of disablement
Sight (Blindness, low visibility, color blindness) Hearing Touch Interaction Voice Interaction
Neem says, “People don’t care about accessibility.” Is that true? What factors affect our caring? Should we really put accessibility of apps into the same category as wheelchair ramps, mother’s nursing rooms and other legislation driven solutions? Why is this different from making applications on computers accessible? Is it different? Are there apps that should be required to be “accessible”?
Should Apple enforce accessibility for these apps? What about a self rating system allowing a developer to indicate a yes/no for accessibility.
Picks
John (@johnsextro)
HiRise, Twelve South Free Training, Effective Agile Coaching with John Sextro
Jason (@jak)
Realm (http://realm.io) - mobile, soon-to-be cross platform, database
Not built on SQLite Migrations, thread-safety, querying Standalone desktop app for browsing /updating DBs Android coming soon
News
“Yo” gets $1.2M in venture capital Google announces new design language Material Apple ending development on Aperture
Tweet Shoutouts
@iOhYesPodcast maybe Slingshot wants to distance itself from Facebook to target a younger audience?
— Keith Slater (@_keithslater) June 23, 2014
@iOhYesPodcast I have 700+ contacts on my phone. It's my primary method to keep track of people. Is slingshot going to spam my contacts?
— Kim Etzel (@KimEtzel84) June 23, 2014
@iOhYesPodcast I'm worried bc I have business contacts in my phone. A spam from Facebook is less harmful bc those contacts are all friends.
— Kim Etzel (@KimEtzel84) June 23, 2014
Send us your shoutouts: @iohyespodcast
The Discussion
Elevate
Quick description What did launch day/week look like for you and the team? Getting featured on iTunes. How many iOS developers worked on this app? 2 dev, 2 UI, 2 Android, 5 game devs
How did you break up work?
Game devs write the games in Lua
Any technical challenges related to working on the app with other devs?
Any tips for others?
Try to break things up in a way so that pieces can be independently developed
Knowing that you’re starting from scratch, what frameworks/technologies/stacks do you make sure you incorporate early? RAC, Mantle, Kiwi
Why?
Tell us about your product development / design / development process
What’s your process for working with designers / product managers? How do balance what’s possible vs. what’s cost-effective.
Elevate has some great animations / interactions that make the app feel alive as you use it. There were likely other interactions etc. that didn’t make it into the app. How do you decide what stays and what goes?
What’s one feature of the app that looks complicated, but isn’t. Why? Particles!
NSBSpriteSheetLayer
What’s one feature of the app that looks simple, but isn’t. Why?
Picks
Chad (@jazzychad)
DateTools - https://github.com/MatthewYork/DateTools HPGrowingTextView - https://github.com/HansPinckaers/GrowingTextView
John (@johnsextro)
Swift Cheat Sheet from Ray Wenderlich My “Swift testing” pick of the show, http://iosunittesting.com/ a site with dedicated to the dicussion of unit testing your iOS development.
Nacho Soto (@nachosoto)
New 1Password Beta with Touch ID support Swift AL DSL. The future is here: https://github.com/indragiek/SwiftAutoLayout
News
Facebook Labs releases “Slingshot” iOS 8 beta 2 and Xcode DP 2 released today
iOS 8 beta impressions so far.
New emojis. Emojipedia goes down under the load of visitors to checkout the new emjois.
new emoji list
Tweet Shoutouts
No shoutouts :(
Send us your shoutouts: @iohyespodcast
The Discussion
Trend of contact-graph login in social apps
Swift cottage industry (new websites, books, communities, opportunities)
Decision making process to use Swift/Obj-C in a project
Picks
Chad (@jazzychad)
iOS Version history chart
Jason (@jak)
http://www.swiftcast.tv/
Swift screencasts 1st screencast on July 1st
John (@johnsextro)
TDD katas with Swift
http://swiftdd.com/ http://codekata.com/
WWDC Keynote Flashcast
We're departing from our usual format this episode to bring you a special post-keynote roundtable discussion of Apple's exciting announcements.
Apologies for the audio quality: we had some difficulties, but we wanted to get this episode to you as quickly as possible.
Tweet Shoutouts
@NolanOBrien - great show this week. @goaway was a great guest to have. @jazzychad tcp/ip com as a service instead of HTTP? I like it!
Send us your shoutouts: @iohyespodcast
The Discussion
WWDC - What’s the show floor like? iOS 8 - Extensions, Widgets, TouchID API,
Compatibility - iPad 2, 4s. wow Enterprise - Peer to Peer Airplay, no Wifi necessary Kits - Cloudkit, HomeKit, HealthKit, PhotoKit, SceneKit Hand-Off
Swift - Hoo boy. Who saw this coming?
Why? Playground
XCode 6 - IB Live rendering, View Debugging, Performance Tests, iOS Dynamic Framework support
View Debugging - So good. Basically revealapp Cocoa Touch Framework - built in support Application Extension list - Action, custom keyboard, doc picker, share, today Previewing - orientations, localizations No refactoring, No mocking
CloudDrive - Amazon Competitor?
Picks
Adam (@adamaxe)
Swift Programming Language
Darryl (@dh_thomas)
All of Yosemite
Neem (@teamneem)
Fish Have No Souls
John (@schwa)
Waterlogue
The News
Apple rumored to buy Beats for $3.2B Apple planning iPad split screening in iOS 8
Tweet Shoutouts
Send us some @iohyespodcast
The Discussion
SPDY overview, http://www.chromium.org/spdy/ Why is SPDY important to mobile / iOS developers?
Why not just straight HTTP?
TCP “Slow Start” helps protect the network, but isn’t really necessary anymore and is a shortcoming of HTTP today.
Reduce round trips Multiplexes requests
prioritization interleaving gets rid of “head of line” blocking
Header compression
headers are bloated and redundant
Server Push (pseudo duplexing)
CocoaSPDY https://github.com/twitter/CocoaSPDY
How does one integrate it into existing apps? Any gotchas?
CRIME Attack Content hinting by size of the compression
Downsides?
Need a server that supports SPDY
netty jetty apache (with mod_spdy) nginx Tengine
Any improvements / new features on the way?
“Server Push” coming soon
In theory...works with AFNetworking How can developers contribute?
Github https://github.com/twitter/CocoaSPDY @goaway
Recommended server implementations? “SPDY does not clearly outperform HTTP over cellular networks” - http://conferences.sigcomm.org/co-next/2013/program/p303.pdf
Heterogeneous nature of mobile networks makes it difficult to quantify performance
Picks
Mike (@goaway)
CocoaAsyncSocket
Jason (@jak)
Viewfinder open sources entire stack (including iOS app)
John
40 Secrets to Making Money with In-App Purchases, by Riccardo D’Antoni
Chad
iOS Bytes podcast
The News
Facebook releases Pop OSX Beta program
Tweet Shoutouts
@iOhYesPodcast Nice to see that there's an iOS podcast out of St. Louis
— Keith Slater (@_keithslater) April 28, 2014
.@iOhYesPodcast great episode. Really enjoyed the discussion on com patterns. I'm totally a delegate pattern first guy...
— Nolan O'Brien (@NolanOBrien) April 28, 2014
The Discussion
AppDelegate responsibilities and breaking them out
related: https://github.com/JaviSoto/JSDecoupledAppDelegate
Permission Dialogs Push Notifications
Picks
Chad (@jazzychad)
PushServer Letters
Jason (@jak)
http://x-callback-url.com/
The News
iPhone 6 Leaks? Article on Mac Rumors OpenSSL redux
Tweet Shoutouts
@dh_thomas @iOhYesPodcast no need to apologize to providing an addict with his vice. For me, pedantic discussion on tech.
— Nolan O'Brien (@NolanOBrien) April 3, 2014
@iOhYesPodcast I'm surprised following the inheritance article no one mentioned EventKit as their (least)favorite API #3LevelsDeep
— marksands (@marksands) April 4, 2014
The Discussion
Communication Pattern, from Objc.io
Leaving out pub-sub, other non-ios paradigms ESCObservable
Picks
John (@johnsextro)
pttrns.com, Mobile user interface patterns dribbble.com, (Yes, 3 b’s) Show and tell for designers. Not just mobile, color palettes, icons, web, etc.
Shoutout to Alex Garibay for pointing me to pttrns and dribbble
#noestimates on Twitter
Adam (@adamaxe)
Half-Life on github Optimizely - AB Testing
Luther (@lutherbaker)
http://www.industriallogic.com/blog/stop-using-story-points/, by Joshua Kerievsky http://www.cregle.com/pages/ipen2
Eric (@theknlght)
Spotify iOS SDK John's add-on pick, "How Spotify builds products"
The News
Apple’s $2bn lawsuit against Samsung started this week Microsoft releases Office for iPad suite
Tweet Shoutouts
If apple released a music streaming service would it be able to beat out spotify? cc @iOhYesPodcast http://t.co/jkWlR16pZe
— Kim Etzel (@KimEtzel84) March 26, 2014
Wish I had an @iOhYesPodcast to listen to while waiting for my flight... #BoredOfFreakonomicsRadioReruns
— Nolan O'Brien (@NolanOBrien) March 31, 2014
The Discussion
“Class Hierarchies: don’t do that!” by Ragan Wald
Super classes as brittle dependencies Interfaces + Composition? What’s the trade-off?
What’s your least favorite and most favorite iOS API?
Least - Address Book Least - Core Audio
Picks
John (@johnsextro)
iOS 7 Design Cheat Sheet
Jason (@jak)
Pencil Case
Adam (@adamaxe)
ObjC.io - I know we already picked it, but it is just that good :D Anti-pick - April Fools Day
Alternative Show Titles
by Darryl Thomas
Stuck in my craw Most Hipster Thing Ever I like my subclasses 3 deep
The News
iOS 7.1 update announcement from Apple
Article from The Verge CarPlay announced TestFlight acquired by Apple @iOhYesPodcast A good discussion topic next episode would be https://t.co/jtrVqhrXZF and alternative solutions to TF "just in case".
— marksands (@marksands) February 21, 2014 Alternative Tools ota.io vessel.io appblade.com hockeyapp.com HockeyKit DeployGate Crashlytics Labs Beta - http://www.crashlytics.com/blog/from-crashlytics-labs-announcing-our-beta-distribution-tool/
Tweet Shoutouts
@iOhYesPodcast @adamaxe I say flappy bird never comes back, crazy marketing stunt for his next game.
— Eric Jones (@TheKnlght) February 28, 2014
@jacksonh @kastiglione @iOhYesPodcast I’ve been toying with the idea of making OGS an OSS project which is friendly to newbs.
— T-Slice (@swizzlr) March 7, 2014
Listening to @iOhYesPodcast got me thinking, I bet I could write a webapp with my phone.
— Roderic Campbell (@roderic) February 27, 2014
The Discussion
Background process memory limits on iOS 7 (or, Why do my apps keep restarting all the time?) Should we drop iOS 6 support in light of the TLS bug to be responsible developers?
Picks
John (@johnsextro)
4k is for Programmers The 4k TV/Monitor that I’m using
Jason (@jak)
@codereviewapp by @jacksonh
Chad
objc.io, A periodical about best practices and advanced techniques in Objective-C. Letters, new iOS game Chad created.
Alternative Show Titles
by Darryl Thomas
What Are You Thinking? Chad's 13" Tube
The News
OmniGroup Open Sources OmniGraphSketcherFree Flesky, a keyboard app with an SDK StackMob sudden end of life New Apple device configuration options
Tweet Shoutouts
@marksands - Unfair to call Flappy Bird Crappy Bird?
The Discussion
Worm in the Apple, Apple TLS bug - Discussion of what this means to support of iOS 6.
Actual Source What is it? Description of bug, Deep Dive Description
“Note the two goto fail lines in a row. The first one is correctly bound to the if statement but the second, despite the indentation, isn't conditional at all. The code will always jump to the end from that second goto, err will contain a successful value because the SHA1 update operation was successful and so the signature verification will never fail.” Lack of curly braces on single line conditional to blame, or lack of testing the code?
What does it mean for users? How could this have happened and gone undiscovered for so long?
Background User Input recording discovered - Reported Monday night. Ars Article
Can you actually infer keyboard touch events? Potential attackers can use such information to reconstruct every character the victim inputs
Note that the demo exploits the latest 7.0.4 version of iOS system on a non-jailbroken iPhone 5s device successfully
The only way to prevent attacks is to open the iOS task manager and stop questionable apps from running in the background
Picks
John (@johnsextro)
MindNode for mind mapping on the Mac and iPad. Allows for document sharing via Dropbox and MyMindNode
Joe Hainline (@josephhainline)
Rookiesapp.com of course!
Neem Serra (@teamneem)
Ray Wenderlich’s blog - Simplified tutorials that are easy to follow with complex results Xscope - measuring, inspecting & testing on-screen graphics and layouts, $30 but very helpful for making apps match the mocks. Cool color blindness testing!
Adam Hitt
bitfulsoftware.com - Fluxboard - Kanban board for your GitHub issues.
https://projecteuler.net - Ultimate Code Kata resource!
The News
Saga of Flappy Bird Stackmob shutting down? - pastebin
The Discussion
Are we in a “web 2.0” of iOS apps?
See: Yahoo suite, Storehouse, FB Paper, iOS Weather, Tweet Bot, Rdio, etc. How long will this “fad” last? What aspects do you like about this trend? What do you dislike? These apps are "flat", but they're skeueomorphic in other ways (subtle animations, "sticky" modals, etc.)
Are largely gesture-based apps "useable" (e.g. Storehouse, FB Paper, etc.)
Certainly beautiful. Few affordances Deference to content vs. intuitive feel
Picks
Chad (@JazzyChad)
NSHipster: Associated Objects
Jason (@jak)
Bolts Framework (like Promises/Futures, available for several platforms)
Adam (@adamaxe)
Leankit
The News
Mac Turns 30 Apple's First Quarter Financial Results
The Discussion
Human-Computer Interaction and Wearable Computing
"Her", the movie Siri Google Now Wearables
Google Glass Google Contact Lenses Pebble watch Fitbit/Fuelband
Listener Feedback, Send a Tweet to @iOhYesPodcast
Redux: Kim Etzel - @kimetzel84 - haha! The next @iOhYesPodcast should be titled "How Santa Forced Me To Upgrade To 7"
Picks
Chad (@JazzyChad)
Core Animation Programming Guide
John (@jcsextro)
Distimo
The News
Infinite Scrolling from Kane Bennett We never get to the end of news, tweets, etc iOS App Switcher from Vinh Phuc Dinh Interesting take on customizing screenshot shown in app switcher view
The Discussion
Auto Layout
Xib VFL Constraints 3rd Party - Masonry
Listener Feedback, Send a Tweet to @iOhYesPodcast
Hector Zarate - iOSCowboy - guys when is the next episode coming? Christmas special?
Kim Etzel - @kimetzel84 - haha! The next @iOhYesPodcast should be titled "How Santa Forced Me To Upgrade To 7Picks
Adam (@adamaxe)
iOS7 Tech Talks
Eric (@TheKnlght)
NSURLProtocol NSHipster about NSURLProtocol
Luther (@LutherBaker)
ELMLayoutManagement The Transformation Priority Premise
John (@jcsextro)
Google Alerts Notifications on relevant Tweets, tweetbeep.com, tweetalarm.com, twilert.com, I pay for and use HootSuite.com.
The News
Apple Released the iPad Air and iPad Mini Retina Those iOS 7 icons zoom at you doing 20 miles/hour
The Discussion
Downsides to iOS 7 app auto-updates from the developers perspective. A tale of 2 Games
Different revenue models
Free In App Purchase Paid
Download Numbers Press Getting Featured Tetra
Free, in "Board games and puzzles" Tried to get press. Sent out pitch emails, but no traction Released the week before Burning Man Showed up in an AppAdvice article Featured in International App stores 24,400 Downloads
5,000 in US/UK 19,000 Other International
138 unlock purchases, half from US/UK, other half from other international users.
WordGrid
No press 197 purchases of the app #16 top paid word game
Library created for social gaming, not publicly available, more to come in the future. Are paid apps dead?
Listener Feedback, Send a Tweet to @iOhYesPodcast
Hector Zarate - @hecktorzr: “Love your show. I listen to it while commuting to the office. Best from Warsaw, Poland.”
We'd love to hear from you if you are using a co-lo Mac Mini or are running iPhone 4 with iOS 7, please tweet us.
Picks
Chad (@jazzychad)
The Mantle Project by GitHub WordGrid
Jason (@jak)
Anti-pick: Cocoapods
John (@johnsextro)
Transporter, your own private cloud TapForTap, ad network
The News
iPhone 5s and 5c (5s outpacing 5c ~ 3:1) App Store offers “last compatible version” install iOS 7 at ~ 65%, less than 1 week after release
The Discussion
“Made for iOS 7”
Has the new design language of iOS 7 made it even more difficult to differentiate apps from one another? Do we think these apps “take advantage” of the iOS 7 hotness? Do Apple’s apps take advantage of these? (blur / depth / etc.) Do Apple’s own apps realize the “promise of iOS 7”? “Confusing UI in iOS7"
isYoMamaWearsCombatBootsSupported 64-bit migration
What are the pain points? What are the wins? Could this mean more RAM in future devices on the IOS platform?
Future-proofing your app
How far do we go to manage API changes, DB migrations, etc. How much is too much? Best strategies for deprecating builds?
What every iOS dev should do day 1
Setup logging/analytics Setup crash reporting Monitor your app rating
Listener Feedback, Send a Tweet to @iOhYesPodcast We'd love to hear from you and if we like your Tweet we will talk about it on the next episode of iOhYes. Picks
Chad (@jazzychad)
iOS 7 before and after
Jason (@jak)
Reveal.app by Itty Bitty Apps