Blog Archive 2024 Relay 10: Built to Endure July 29 2024 Defensive and Skeptical June 07 2024 The Best Advice June 04 2024 Weird Wishes for WWDC June 04 2024 Craftsmanship & Consideration May 15 2024 Developing An Inclusive Mindset April 22 2024 Super-Resolution iPhone Panoramas for Vision Pro February 26 2024 Independent as in Freedom, not Independent as in Alone January 23 2024 2023 Pedometer++ 5.3: The Ultimate Hiking Companion December 04 2023 Matching the Modular Ultra watch face with SF Font Alternatives November 13 2023 Calculating a Smooth Clock Hands Animation November 06 2023 visionOS Friday: Tinting a Glassy Ornament November 03 2023 Animatable Dual Axis Graph November 01 2023 Introducing visionOS Fridays October 27 2023 Design Evolution: Offline Map Downloader October 26 2023 Upstream Decisions October 24 2023 Widgetsmith 5: Interactive Widgets for iOS 17 September 18 2023 Pedometer++ 5.2: Beautiful for watchOS 10 September 18 2023 Tips for Vision Pro Labs July 27 2023 Designing a Weather app for visionOS July 12 2023 First Attempt at Designing for visionOS July 10 2023 A Developer’s View of Vision Pro June 12 2023 Designing a Step Goal Live Activity May 11 2023 Ghostly Corners with Overlaid Shapes May 10 2023 Changing Corners May 09 2023 Speedrun Design: Heart Rate Zone View in SwiftUI April 24 2023 Stretched April 14 2023 Speedrun Design: Now Playing Screen in SwiftUI March 27 2023 The Ebb and Flow of Fitness March 25 2023 Spot the Difference March 22 2023 Pixel Perfection March 16 2023 Widgetsmith += 100,000,000 March 08 2023 Getting Unstuck after a Launch March 07 2023 Scaling Customer Support March 06 2023 Accessibility: Try, then Listen March 03 2023 Pedometer++ v5.0: A Passion for the Wilderness March 01 2023 Indispensable Tools February 28 2023 Learning from my Mistakes February 25 2023 Finding Beauty in Randomness and Nature February 24 2023 Video: Design Process for Fast Map/Metrics Switching February 23 2023 Arbitrary SwiftUI Linear Gradient Rotation February 22 2023 DND 23: Scaling UI Sizes with Dynamic Type February 09 2023 DND 22: Calculating Offline Map Tiles February 07 2023 DND 21: Byte Compression for Watch Connectivity February 03 2023 PodSearch Reborn February 02 2023 Reasons for a Staycation Greycation January 30 2023 DND 19: Designing for Smaller Dynamic Type Sizes January 24 2023 DND 18: Creating Custom SF Symbols January 23 2023 DND 17: Kind, Friendly Designs January 20 2023 DND 16: Building Custom Controls January 19 2023 DND 15: Ruthlessly Limiting Scope January 13 2023 The Tyranny of the Churn Equation January 12 2023 DND 14: Building an Accessible Chart January 11 2023 DND 13: Checking the Weather January 10 2023 2022 Activating Automatic Backtrack in watchOS 9 December 22 2022 DND 12: Sparkle Magic December 20 2022 DND 11: Better Dynamic Type Designs December 19 2022 DND 10: Designing lots of Live Activities December 15 2022 Design Notes Diary #9 December 14 2022 Design Notes Diary #8 December 13 2022 Design Notes Diary #7 December 12 2022 Design Notes Diary #6 December 09 2022 Design Notes Diary #5 December 08 2022 Design Notes Diary #4 December 02 2022 Design Notes Diary #3 December 01 2022 Design Notes Diary #2 November 30 2022 Design Notes Diary #1 November 29 2022 Production Notes: making an iPhone Video in the Field October 04 2022 Two Suggestions for the Apple Watch Ultra September 30 2022 Testing an Apple Watch Ultra in the Scottish Highlands September 28 2022 iPhone 14 Pro Photographs in Scotland September 27 2022 WWDC 2022, A Tangible Demonstration of Care June 10 2022 On This Day, Air Quality and Pollen Widgets April 19 2022 Widgetsmith 3.0: Spring Collection & Weather Tool March 01 2022 Sleep++ : Introducing Readiness Score January 24 2022 2021 Wearing an Apple Watch in Glencoe November 22 2021 A Plain GMT Face April 30 2021 Pedometer++ Complications Overhaul April 29 2021 Following the Shortbread Crumbs April 21 2021 Ian’s Awesome Counter April 14 2021 Watchsmith 2.0, Dev notes April 08 2021 Watchsmith 2.0 April 08 2021 2020 Widgetsmith 2.0 November 17 2020 Request: Provide a non circular option for Extra Large Complications June 30 2020 The Gentlest of Sherlockings June 24 2020 Building Maps for watchOS and Watchsmith 1.3 June 08 2020 Choosing Fitness May 18 2020 Opportunities for watchOS 7 May 15 2020 An Outlet for my Custom Watch Faces May 07 2020 Apple Watch: 38,299 hours on my wrist April 25 2020 Watchsmith Walkthrough Video April 22 2020 Under the Radar #189: Watchsmith April 15 2020 Introducing Watchsmith April 08 2020 Exploring SwiftUI Apple Watch Performance January 07 2020 2019 Project Geneva: Watch Half-Full October 09 2019 Geneva Moon, a better lunar complication September 26 2019 Seamless Light Complications September 13 2019 The Popularity of the 4.7″ iPhone June 24 2019 WWDC 2019 Themes and Insights June 11 2019 Pedometer++ 4.0 — Our most personal update, ever. May 28 2019 Intentional Subscriptions — Ideas for better subscriptions on iOS May 28 2019 Calzones 1.0.4: Tasty Icons May 24 2019 Introducing CalZones: A Timezone Savvy Calendar April 17 2019 Wishing for a Low-End Apple Watch January 28 2019 Phased vs Regular Update Adoption Rates January 22 2019 2018 Under the Radar #145: Custom Apple Watch Faces October 17 2018 Exploring Custom watchOS Watch Faces October 12 2018 Considering Low Contrast Complications October 05 2018 Under the Radar #143: Implementing Step-Counting October 04 2018 Under the Radar #142: Passion Projects September 26 2018 Pedometer++’s Apple Watch Overhaul September 17 2018 Under the Radar #140: The Mad Rush September 14 2018 Under the Radar #139: Taking Breaks September 07 2018 Pedometer += 5,000,000 April 25 2018 Generating Testing Device Wallpapers April 25 2018 Automatic Sleep Tracking with Sleep++ 3.0 March 20 2018 Apple Watch Adoption March 14 2018 2017 Introducing Workouts++ 2.0 December 12 2017 The Tesla Flat Tire Process October 10 2017 Apple Watch Apps Head to College September 13 2017 Introducing Pedometer++ 3.0 August 29 2017 A favorite hack July 07 2017 Pedometer++ 2.5.2 Release Diary May 22 2017 Inevitable Sherlocking January 18 2017 Basic watchOS Analytics January 16 2017 Podcast Search - A Random Side Project January 12 2017 Dev Notes for Workouts++ 1.0.1 January 10 2017 2016 Introducing Workouts++ December 21 2016 Christmas Wish: AirPod Double-Tap to Skip December 19 2016 Discontinuing support for Check the Weather October 17 2016 iOS 10 / watchOS 3 Updates September 13 2016 App Store Name Lengths September 06 2016 Evolving App Store Business Models September 05 2016 A Sizeable Cleanup September 03 2016 Speaking at CocoaConf Yosemite July 21 2016 Historical iPhone Screen Sizes May 02 2016 A Year Wearing an Apple Watch April 25 2016 Under the Radar #24: Should You Register for a WWDC Ticket? April 19 2016 iPad : Mac :: Digital : Film? April 19 2016 Introducing Activity++ April 07 2016 A Nerd’s Review of the Tesla Model S April 04 2016 Under the Radar #15: Marketing at Launch February 17 2016 Watch Apps Worth Making February 12 2016 Under the Radar #14: Linux Servers for App Developers February 12 2016 Introducing Sleep++ 2.0 February 11 2016 Under the Radar #12: Apps With Personality January 29 2016 2015 Under the Radar #7: Building New Features - Relay FM December 18 2015 Pedometer++ 2.3: Embracing the Apple Watch December 03 2015 Under the Radar #3: Ergonomics November 18 2015 Under the Radar #2: Time for Swift November 11 2015 Developing a New Perspective November 04 2015 Introducing LiveToGIF November 03 2015 How to wear your Apple Watch 24/7 September 21 2015 16GB is a Bad User Experience September 10 2015 The Growing iOS SDK September 03 2015 Impact of iOS 9’s Space Requirement June 23 2015 As I Learn watchOS June 11 2015 Start-to-Finish: Building an App June 01 2015 A Humble Suggestion for Activity Rings May 28 2015 Pedometer += 1,000,000 May 11 2015 AILW: Thinking about Load Time April 30 2015 AILW: First WatchKit Review Guideline April 28 2015 Learning to Ride a Bicycle, Again. April 27 2015 Random Apple Watch Observations April 27 2015 My WatchKit Apps April 20 2015 Pending an Apple Release April 10 2015 Telling. April 06 2015 iPhone Timelapses April 06 2015 Appearance: Mobile Couch #54 April 06 2015 Connected #33: The RoboCop of Apple Watches April 03 2015 Speaking at Release Notes. March 23 2015 WatchSim March 13 2015 AILW: Adding a Touch of Liveliness March 04 2015 Life After Cancer: How the iPhone Helped Me Achieve a Healthier Lifestyle March 03 2015 #212: Four Phases of a Gold Rush. February 27 2015 AILW: Spring Forward Event Announced February 26 2015 AILW: Prettier Status Bar Trick February 24 2015 AILW: A few interviews. February 24 2015 AILW: WatchCon 2 February 20 2015 Apple Watch Event Puns February 19 2015 My First Feature February 17 2015 The Making and Effectiveness of an App Preview February 12 2015 AILW: Tap Distance February 03 2015 AILW: Beta 5 Documentation Changes February 02 2015 AILW: Displaying Tabular Data (Video) January 30 2015 #210: Polymaths. January 30 2015 Guessing the Apple Watch Release Date January 27 2015 Default Podcasts January 27 2015 #209: Not so Fast. January 23 2015 AILW: Understanding WatchKit Layout (Video) January 22 2015 AILW: Ubiquitous Time January 21 2015 AILW: WatchKit UI Component Walkthrough (Video) January 15 2015 AILW: A Day Spent Designing a WatchKit UI January 14 2015 AILW: Beta 4 Documentation Changes January 12 2015 AILW: Inquisitive #21: Exploit the Constraints January 07 2015 AILW: Bezel and xScope January 06 2015 2014 AILW: Immediacy December 15 2014 AILW: WatchKit Data Sharing (Video) December 11 2014 The Talk Show Bond Anthology December 10 2014 AILW: openParentApplication:reply: December 10 2014 AILW Link: Introducing MMWormhole December 10 2014 #205: AILW - Economics of WatchKit Apps. December 05 2014 AILW: Building a basic WatchKit App (Video) December 05 2014 AILW: Learning in the Dev Forums December 02 2014 AILW: Visualizing Watch Apps December 01 2014 Introducing As I Learn WatchKit (AILW) December 01 2014 Getting Started with WatchKit November 18 2014 Initial Impressions for WatchKit November 18 2014 Expectations for WatchKit November 06 2014 Understanding the Promise of the AppleWatch November 05 2014 Invisible iOS Home Screen Icons October 15 2014 Glance the Weather October 06 2014 Introducing Emoji++ October 02 2014 Typical iPhone Adoption Rates September 10 2014 App Store Longevity and Freshness August 04 2014 A Few Podcast Appearances June 16 2014 A Fundamental Tension June 10 2014 Opportunities, not Obligations June 05 2014 Introducing Audiobooks 6.0 May 26 2014 My Travel Coffee Kit May 22 2014 The Right Way to Copy May 18 2014 Towards a Better App Store April 16 2014 Can You Get Private SSL Keys Using Heartbleed? April 11 2014 The Invention of the AeroPress March 06 2014 Please Don’t Push Me February 28 2014 Expansion Followed By Consolidation February 20 2014 An Unexpected Botnet February 14 2014 Slow Updater Purchasing Habits February 13 2014 A Collection of Smurfs February 12 2014 Effectiveness of Localizing Pedometer++ February 11 2014 Why Indie Developers Go Insane February 11 2014 Interesting Lessons from Building a Pedometer January 31 2014 Saying Goodbye to my Wallet January 30 2014 iOS Language Cheat Sheet January 21 2014 Visualizing Display Resolutions January 09 2014 iOS Device Stats Update January 08 2014 2013 Degradation or Aspiration December 16 2013 Creating Animated GIFs for Documentation December 02 2013 Feed Wrangler News Blog November 26 2013 Five Years in the App Store November 08 2013 Kinda Fixing Badge Truncation October 09 2013 Pod Wrangler - Podcasts Made Easy September 24 2013 NSHipster on iOS 7 September 23 2013 Updating Check the Weather for iOS 7 September 19 2013 My experience with the CODE Keyboard September 06 2013 iTunes Affiliate Linking August 19 2013 Aggressive Adoption August 14 2013 The Forgotten Home of Coffee July 31 2013 The App Store Problem Is Not Price July 29 2013 Honest In-App Purchases July 23 2013 Apple’s Answer on Upgrade Pricing July 16 2013 Clockwork Updates June 06 2013 Feed Wrangler, The First Month May 29 2013 A History of Selling Out April 26 2013 An Incredible Incomparable April 03 2013 Human Intervention as a Competitive Advantage March 23 2013 Purging the Back Catalog March 21 2013 Human Scale Problems March 18 2013 My Secret Project: Feed Wrangler March 13 2013 Linkbait March 12 2013 Focusing on the wrong things March 09 2013 No-Host Bar Dot Net March 08 2013 Perfect Things #1: Fleece 5.0 March 07 2013 Really Hard Work March 06 2013 Adventures in Home Roasting March 05 2013 Inspiration vs Imitation March 04 2013 Doubling Down March 04 2013 Reading The Magazine on a Kindle February 27 2013 App.net’s Free Tier February 25 2013 Prioritising Features February 24 2013 The Indy February 22 2013 Debug 8: Grant Paul aka chpwn February 22 2013 Utility Pricing for Cellular February 20 2013 Why Android first? February 20 2013 The Realities of App.net App Pricing February 19 2013 Fighting Spam Callers on the iPhone February 18 2013 Negotiating for Nerds February 13 2013 Mapping Developing Perspective February 07 2013 Finding your own Tastes January 25 2013 The Only Numbers That Matter To Me January 23 2013 2012 Christmas 2012 Device Stats December 28 2012 2012 5by5 Showbot Rundown December 26 2012 The Hypercritical Way December 21 2012 Export your Instagram Photos December 18 2012 Aeropressing Snob Blend* December 13 2012 My 2012 Compatibility Lab November 07 2012 Instapaper on the Kindle Paperwhite October 11 2012 Implementing Smart App Banners September 20 2012 Cleaning up your Twitter Tokens August 27 2012 A Crack in Twitter’s Garden Wall August 26 2012 Twitter: The Tail That Wags the Dog August 17 2012 Daring Fireball Ten Years Later August 13 2012 An up-to-date iOS Version Dashboard July 09 2012 The Talk Show July 06 2012 Hacking Paid Upgrades in the App Store June 20 2012 iOS 6 NDA Cheatsheet June 18 2012 Millions of pixels: Visualizing the Retina MacBook Pro June 18 2012 Comparing the Ivy Bridge MacBooks June 13 2012 Kremlinology: Analyzing WWDC Labs June 07 2012 iAd’s Hopefully Long Future May 31 2012 Calculated Risks: Airfoil Touch May 25 2012 Introducing Audiobooks 5.0 May 15 2012 iOS 5.1.1 Upgrade Stats May 11 2012 Extrapolation vs Speculation May 09 2012 Patience May 09 2012 Universal iPhone Dark Mode April 19 2012 Space Shuttle Discovery comes to DC April 17 2012 Cinch: An Amateur Photographer’s Review April 14 2012 InstaBackup: Backup all your Instagram Photos April 09 2012 A truly post-PC experience. March 15 2012 iOS 5.1 Upgrade Stats March 10 2012 Techniques for Shrinking App Size March 05 2012 Caring where things come from March 03 2012 More iOS Version Stats February 17 2012 Mountain Lion: Developer Reactions February 16 2012 iPad OS Version Stats February 15 2012 HashContacts: an iOS Address Book Wrapper February 15 2012 Unexpected Parenting Essentials February 11 2012 Visualizing the iPad 3 Screen February 10 2012 Address Book Security February 09 2012 Understanding iOS Privacy February 07 2012 Concept for Point-and-Shoot’s Future February 01 2012 Understanding Japanese App Store Withholding February 01 2012 Apple’s Results and Developers January 25 2012 Truly Unprecedented in iBooks 2 January 19 2012 Some Things Change, Others Don’t January 18 2012 Instapaper on the Kindle January 13 2012 Kindle Reading Lights January 10 2012 Forcing Quiet into my Day January 02 2012 5by5 in 2011 January 02 2012 2011 It’s a Trap December 29 2011 User Friendly iTunes Affiliate Links December 28 2011 The App Store Christmas Bump December 27 2011 The Itch December 19 2011 Estimating Kindle Sales December 17 2011 5by5: An In-Depth Review December 12 2011 Twitter: Vacuum or Airlock December 09 2011 Bias and Feel December 08 2011 An Allegory of Two Valleys December 08 2011 My iOS Version Strategy December 06 2011 My 2011 Compatibility Lab December 03 2011 iPhone 4S Transparent Back Panel December 03 2011 The Future of the MacBook December 02 2011 Updated 5.0.1 upgrade numbers November 21 2011 Evaluating the Kindle Fire Objectively November 18 2011 A clarification, A correction, but no Apology November 17 2011 A punch to the gut always hurts November 16 2011 Kindle Fire is ‘just’ a big iPod touch November 15 2011 iOS 5.0.1 OTA Update Rate November 14 2011 A fitting tribute. November 07 2011 Introducing FiveLive November 07 2011 5% off everything. August 31 2011 One Last Thing… August 29 2011 What Steve really did. August 25 2011 Kindle Cloud. Almost but not quite. August 10 2011 The Cost of Independence August 02 2011 App Store Sales Volatility July 27 2011 Is Compilation CPU Bound? July 27 2011 Mac Value Analysis July 26 2011 Developer Machine Landscape July 21 2011 iAd isn’t dead. July 14 2011 A Tale of Three App Stores July 06 2011 Aeropress coffee without a sink. May 17 2011