iOhYes Retired

iOhYes

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

Hosted by Darryl Thomas and John Sextro.



#90: I Will Steal Your Idea

October 28, 2015 at 11:45AM • 1 hour 7 minutes

Darryl and Nolan welcome Chad back to the show and discuss iOS apps he’d like to see built.

Tweet Shoutouts

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

Darryl

Chad

Alternative show title suggestions

  • Steal These Ideas
  • Black Book of Ideas
  • Darryl Steals Chad’s Ideas


#89: All About UI Testing

October 21, 2015 at 10:00AM • 1 hour 15 minutes

John, Nolan and Darryl discuss Xcode 7’s new support for UI tests.

Tweet Shoutouts

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

Picks

John

Nolan

Darryl

Alternative Show Title Suggestions

  • Javascript, Javascript, Javascript!
  • Get the hell out of non-profits
  • Jump on the band wagon
  • Gotcha
  • I Love Star Wars


#88: Default Default Value

October 14, 2015 at 9:00AM • 56 minutes

Tweet Shoutouts

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

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

Designable and Inspectable Views in Interface Builder

Picks

Darryl

John

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


#87: Stumble Into Aerial Work

October 7, 2015 at 10:00AM • 48 minutes

Tweet Shoutouts

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

Picks

Nolan

Darryl

John

Sommer

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


#86: One Format to Rule Them All

September 30, 2015 at 10:00AM • 1 hour 2 minutes

Tweet Shoutouts

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

John

Nolan

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!


#85: Overscan

September 23, 2015 at 9:45AM • 60 minutes

Tweet Shoutouts

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
  • 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

John

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


#84: Not on the S-Train

September 17, 2015 at 9:00PM • 1 hour 20 minutes

Tweet Shoutouts

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


#83: My Name is not Johnny Droptables

September 9, 2015 at 11:30AM • 56 minutes

Tweet Shoutouts

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

Darryl

Nolan

Alternative show title suggestions

  • Chad’s Right
  • My Two Favorite Words
  • I agree with Chad
  • Stop Crapping Up Your Apps


#82: Heisenapp

September 2, 2015 at 12:00PM • 1 hour 3 minutes

Tweet Shoutouts

Note:The keyword Darryl was having trouble recalling is indirect.

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
  • 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

Darryl

John

Nolan


#81: Just Do It In Code

August 19, 2015 at 10:00AM • 42 minutes

Tweet Shoutouts

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

Darryl

Alternative show title suggestions

  • Your first stop
  • Not your final destination
  • Beefing it up
  • Microphone Hungry