All blogs / Mobile / iOS / Android
Ole Begemann
Mobile / iOS / AndroidDev tools / editors / IDEsConcurrencyEngineering blogs
- Posts
- 361 from 10 Jul 2009 to 16 Dec 2025
- Posting
- now and then (2 in the last year)
- Kind
- personal blog
- Feed
- https://oleb.net/blog/atom.xml
2025 2
2024 2
2023 6
2022 12
- Understanding SwiftUI view lifecycles
- clipped() doesn’t affect hit testing
- When .animation animates more (or less) than it’s supposed to
- Xcode 14.0 generates wrong concurrency code for macOS targets
- Where View.task gets its main-actor isolation from
- Experimenting with Live Activities
- How @MainActor works
- AttributedString’s Codable format and what it has to do with Unicode
- A heterogeneous dictionary with strong types in Swift
- Advanced Swift, fifth edition
- Synchronous functions can support cancellation too
- Cancellation can come in many forms
2021 4
2020 13
- My favorite books 2020
- Thinking in SwiftUI
- Where is end-to-end encryption for iCloud?
- as, as?, and as!
- Sanitizing GPX files for public sharing
- Linking to text fragments in web pages
- Testing UIKit accessibility in unit tests
- Automatic test discovery in Swift on Linux
- Testing Swift packages on Linux using Docker
- Sheets don’t inherit the environment
- Enumerating elements in ForEach
- TopLevelEncoder and TopLevelDecoder in Combine
- URLSession.DataTaskPublisher’s failure type
2019 3
2018 26
- My favorite books 2018
- Small Fry
- Splitting a Swift Sequence into head and tail
- Roy Fielding’s REST dissertation
- PhotoKit’s data model
- It’s wrappers all the way down
- The 2018 Macbook Pro
- Why you’re not supposed to call description
- An iOS alert view with a text field and a “smart” OK button
- Migrating an Objective-C class to Swift using subclassing
- Migrating an Objective-C class to Swift: a piecemeal approach
- Nullability warnings with libextobjc’s @keypath macro
- Thoughts on @dynamicMemberLookup
- Enumerating enum cases in Swift
- Random numbers in Swift
- Playground: What’s new in Swift 4.2
- How I do analytics
- App Architecture book
- Swift 4.1
- Making illegal states unrepresentable
- How to make a copy of a Core Data SQLite database
- A helper for working with temporary files in Swift
- XCTKVOExpectation for native Swift key paths
- A better NSManagedObjectContext.performAndWait
- A script to save the last backup date in SuperDuper
- Do you have to manually unregister block-based NotificationCenter observers?
2017 24
- Swift imports fixed-size C arrays as tuples
- A hack for fixed-size arrays in Swift
- How to import a C library in Swift using the Swift Package Manager
- Why Dictionary sometimes encodes itself as an array
- Strings in Swift 4
- Advanced Swift, third edition
- Injecting side effects into chained Sequence operations
- Mental models in API design
- Customizing the file header comment and other text macros in Xcode 9
- Chris Lattner on the Realm WWDC 2017 Swift panel
- Optimizing Collections
- Playground: What’s new in Swift 4
- Swift Package Manager macOS deployment target override
- How to test a Swift package on Linux using Docker
- Keeping XCTest in sync on Linux
- Swift releases have themes
- Safeguarding Equatable implementations
- Enums, Equatable, and exhaustiveness
- A Sorted Array Implementation in Swift
- Why String.CharacterView is not a MutableCollection
- Being a Mutable Collection is not Sufficient to be a MutableCollection
- Fun with String Interpolation
- Working with Asynchronous Objective-C APIs in Swift
- Accessing Dictionaries with Key Paths
2016 33
- Protocols are more than Bags of Syntax
- Emoji 4.0
- Optionals and String Interpolation
- The RawRepresentable Protocol in Swift
- How to Read the Swift Standard Library Source
- Passing an Array of Strings from Swift to C
- Generic Range Algorithms
- Optional Non-Escaping Closures
- Advanced Swift, Second Edition
- _playgroundPrintHook
- Option Sets in Swift
- What’s in a Collection?
- Ranges in Swift 3
- Strings in Swift 3
- Measurements and Units with Phantom Types
- Putting the Physics Into Measurements and Units
- Measurements and Units, Part 3
- Measurements and Units in Foundation
- WWDC 2016 Retrospective
- Swift 3
- Swift Talk
- Daniel Steinberg: A Time Lapse Look at Swift
- Ellen Shapiro: Outside In – Using UI Tests to Start Improving Your App
- Method Dispatch in Protocol Extensions
- The UIKonf Bike Tour
- Protocol-Oriented Logging, or: Default Arguments in Swift Protocols
- Apple Watch, One Year In
- Thoughts on the Apple TV After Six Months
- Fake Ads as a Business Model
- Camera.app Pauses Audio Playback
- Advanced Swift
- Collaborative Writing on GitHub
- ICU Text Transforms in Foundation
2015 23
- Lazy Properties in Structs
- The Core Data Book
- Deleting RSS Feed Items
- You Can Rationalize Anything
- More Pattern Matching Examples
- Ranges and Intervals in Swift
- Pattern Matching in Swift
- How to Use updateConstraints
- Swift Compiler Diagnostics
- Is it Immoral to not Block Ads?
- Swift’s Type System
- UIKonf 2015
- C Callbacks in Swift
- Redesign
- WWDC 2015
- Accessibility at the Apple Design Awards
- Swift Standard Library.playground
- The Public Library and the Web
- Thoughts on Google
- Truncated Text in Mobile UIs
- The Minus Sign
- A Proposal for Better Browser Window Management
- Code vs. Poetry
2014 40
- iPhone 6 Plus Pixel Peeping Follow-Up
- Dan Grossman’s Programming Languages Course
- Out of Touch
- iPhone 6 Plus Pixel Peeping
- Lisa Melton: A Decade at the Fruit Company
- Podcasts I Like
- Backblaze Review
- Work Habits at Apple
- iPhone 6 Plus First Impressions
- Replacing Launch Images With Storyboards
- Value-Added Tax
- Instance Methods are “Curried” Functions in Swift
- Strings in Swift Updated
- UIKonf 2014 Talks
- Strings in Swift 1
- Keep it Simple: The Early Design Years of Apple
- One for the Unicode Nerds
- Apple’s Take on App Architecture
- The Power of iOS 8
- Swift Support in CodeRunner
- Core Data Concurrency Debugging
- Apple Has (Partly) Lifted the NDA for Beta Releases
- Clarification on Beta App Review
- Apple on App Analytics and Privacy
- How Dropbox Uses C++ for Cross-Platform iOS and Android Development
- Scroll Views Inside Scroll Views
- Inertia, Bouncing, and Rubber-Banding
- Parallax Scrolling
- Understanding UIScrollView
- NSProgress
- How I Learned to Stop Worrying and Love Cocoa Auto Layout
- Handling Default Values With NSUserDefaults
- How Do Alarm Clock Apps Work on iOS?
- objc.io #9
- A Geocoding Service for OS X
- Sunlit Gives You Control Over Your Data
- Copyrightable APIs Are Not a Good Thing
- Storehouse
- Preserving the Read Status of Your RSS Feed When Switching Publishing Systems
- My Favorite Tech Blogs
2013 26
- My Favorite Cocoa Programming Blogs
- Apple's App Store Rules on Data Collection and Privacy
- Apple's Inter-App Sharing Dilemma
- Android's Storage Access Framework
- My Experience With CrashPlan
- Choosing a MacBook Pro
- Mac & i: iOS 7 unter der Haube
- Rob Rix on Postmodern Programming
- UIKonf 2014
- objc.io #3
- Parallelize Your for Loops With GCD
- NSArray Binary Search
- On NSURLConnection API Design
- Differences Between Xcode Project Templates for iOS Apps
- Starting With Bluetooth Low Energy Development on iOS
- Compiler Warnings for Objective-C Developers
- Logitech Tablet Keyboard Review
- 10 Things You Need to Know About Cocoa Auto Layout
- There is a Bug in the NSFetchedResultsControllerDelegate Documentation
- Automating Strings Extraction From Storyboards for Localization
- iOS Passbook Tutorial
- Building a Blocks-Based Object System in (Objective-)C
- iOS Apps: Disable the Sleep Timer for Long-Running Tasks
- New Undocumented APIs in iOS 6.1
- How to Obtain Undocumented API Diffs Between iOS Versions
- Mac Sandboxing: Location Services Access Requires Outgoing Connections
2012 42
- Accessing and Pretty-Printing the Elements of a CGPath
- Prevent Layers From Snapping Back to Original Values When Using Explicit CAAnimations
- Update on Remote View Controllers
- More on Remote View Controllers
- Remote View Controllers in iOS 6
- Learnable Programming
- The State of Sharing in iOS 6
- NSHipster on UICollectionView
- UDID Replacement APIs in iOS 6
- UICollectionView
- Utf 8
- Do Not Track Plus
- Book Review: iOS 5 Programming – Pushing the Limits
- On Estimating
- Please Don't Use URL Shorteners on Twitter
- Book Review: Test-Driven iOS Development
- Book Review: Insanely Simple
- Book Review: iOS Hacker's Handbook
- WWDC Videos 2004-2008
- “Enlightened, Relevant, Context-Rich Push Notifications”
- Pythonista
- The Case for Selective Restore from iCloud Backups
- Progress
- OBSlider Now Available on CocoaPods
- In Praise of Google Maps
- Steve Jobs Confirmed Native iPhone Apps in 2007
- Steve Jobs on Native Apps
- Steve Jobs on the File System
- Creating and Deleting Calendars in iOS
- 15-inch MacBook Pro (mid-2010) Crashing to Black Screen
- Checking Code Signing and Sandboxing Status in Code
- Passing Data Between View Controllers
- What iOS Should Learn From Android and Windows 8
- Share Sheets: Only Half Way There
- Revisiting the App Launch Sequence on iOS
- CGPath Hit Testing
- Schulung iOS-Entwicklung für Einsteiger im März 2012
- DocSets App for iOS
- New Videos at developer.apple.com
- Gesture Recognition on iOS With Attention to Detail
- initWithNibName:bundle: Breaks Encapsulation
- iOS and Mac Development Link Roundup: December 2011
2011 57
- UIRequiredDeviceCapabilities Cannot Be Changed in App Updates
- Diamond Dash for iOS
- Tutorial: How to Sort and Group UITableView by Date
- How to Restrict Your iOS App to Modern Hardware
- iOS and Mac Development Link Roundup: November 2011
- Date and Time Handling in Cocoa Cheat Sheet
- Working with Date and Time in Cocoa (Part 2)
- Working with Date and Time in Cocoa (Part 1)
- iOS 5 Tech Talk: Michael Jurewitz on Performance Measurement
- iOS 5 Tech Talk: Allan Schaffer on OpenGL ES with GLKit
- iOS 5 Tech Talk: Michael Jurewitz on iCloud Storage
- iOS 5 Tech Talk: Mark Kawano on iOS User Interface Design
- CodeRunner
- Accessing Image Properties Without Loading the Image Into Memory
- How to Replace the UDID
- iOS and Mac Development Link Roundup: August 2011
- What's New for Developers in Mac OS X Lion (Part 3)
- What's New for Developers in Mac OS X Lion (Part 2)
- iOS and Mac Development Link Roundup: July 2011
- What's New for Developers in Mac OS X Lion (Part 1)
- “Just when you think things couldn't get any worse”
- Apple Changed App Store Prices
- Thoughts on Google+ vs. Twitter
- Working for the Empire
- iOS and Mac Development Link Roundup: June 2011
- iPhone 4 im Ausland gekauft? Hol dir die Umsatzsteuer zurück
- The App Launch Sequence on iOS
- WWDC 2011 Sessions Videos Now Available
- Creating Outlets and Actions Via Drag and Drop in Xcode 4
- Code Signing Changes in Xcode 4
- Book Review: Learn iPhone and iPad cocos2d Game Development
- How Developers Should Handle All the Stuff Apple Introduced at WWDC
- On Teaching iOS Programming
- Thoughts on Lodsys, Patents and Apple
- Best iOS and Mac Development-Related Links: May 2011
- On Git Support in Xcode 4
- Book Review: 97 Things Every Programmer Should Know
- Faking Instance Variables in Objective-C Categories With Associative References
- Using Cocoa to Convert Images From RGB to CMYK
- At What Time Is an App Released on the App Store When Set to a Specific Release Date?
- Apple's System of Fixed Exchange Rates in the App Store, or: How a Customer From Japan Can Be Worth 75% More Than One From the UK
- Inspecting Core Data Attributes
- Best iOS and Mac Development-Related Links: April 2011
- Updated OBShapedButton
- Where Apple Would Stand Without the iPhone and iPad
- John Siracusa: A Dark Age of Objective-C
- Schulung iOS-Entwicklung für Einsteiger im Mai 2011
- Best iOS and Mac Development-Related Links: March 2011
- Blue Planet 1.1 Now Available
- What's New in iOS SDK 4.3
- Best iOS and Mac Development-Related Links: February 2011
- Announcing Blue Planet for Mac
- New Site Design, Now Proudly Serving Static HTML
- iOS Development Highlights: January 2011
- iOS Hackathon Berlin
- OBSlider, a UISlider Subclass With Variable Scrubbing Speed
- The Importance of a Unified Buying Experience
2010 35
- iOS Development Highlights: December 2010
- “You Should Really Write an Alarm Clock App”
- My Wish: Syntax Additions to Objective-C for Object Literals
- Picture Effects 1.1 Now Available
- Animating the Drawing of a CGPath With CAShapeLayer
- Method Names in Objective-C
- iOS Development Highlights: November 2010
- What's New in iOS SDK 4.2
- iOS Development Highlights: October 2010
- iOS Development Highlights: September 2010
- iOS Development Highlights: August 2010
- iOS Development Highlights: July 2010
- WWDC 2010 Videos Already Available. And Free!
- App Store-Safe Page Curl Animations
- UIWebView's Weird PDF Display Bug on the iPad
- World Cup 2010 Tracker Spreadsheet
- How to Debug an App That Was Launched by Push Notification or URL Handler
- iPhone SDK Beta to Beta API Diffs
- Set the Zoom Level of MKMapView
- I'm Available for Contract Work
- OBGradientView: A Simple UIView Wrapper for CAGradientLayer
- Picture Effects Is Now $0.99
- How to Specify Two Icons for a Universal iPhone/iPad App
- Steve Jobs: “Think of the children”
- Apple Bans Cross-Compilers for iPhone Development
- New Opportunities for Developers in iPhone OS 4.0
- Universal App != Universal Binary
- What's New in Xcode 3.2.2
- What's New in iPhone SDK 3.2
- Announcing Picture Effects for iPad and iPhone
- Video: Picture Effects for iPad
- If You Want to Learn Cocoa...
- Porting RRGlossCausticShader to the iPhone
- Book Review: Coders at Work
- Book Review: Cocoa Design Patterns
2009 13
- CHDataStructures on the iPhone
- Mutable Properties of Immutable Objects
- OBShapedButton: Non-Rectangular Buttons on the iPhone
- The Apple Symbols Font: A Great Repository for iPhone Button Icons
- Updated iTunes Connect Financial Reports to HTML Script
- Managing the Network Activity Indicator
- Formatting iTunes Connect Financial Reports
- Songtext Stopped Working
- I Removed Songtext From the App Store
- LyricWiki is Down, Songtext Showing Errors
- Lyrics Apps for the iPhone: A Market Overview
- The Music Player Framework in iPhone SDK 3.0
- Announcing Songtext: Lyrics for the iPhone