Use 'git mv' to record filename case changes in Git
Explains why 'git mv' is essential for tracking filename case changes on case-insensitive file systems like macOS and Windows.
Ole Begemann — iOS and macOS developer based in Berlin, working primarily as a contractor. He writes thoughtfully about software development and is the co-author of Advanced Swift, a widely respected book on modern Swift programming. His work focuses on clarity, correctness, and deep understanding of Apple platforms.
19 articles from this blog
Explains why 'git mv' is essential for tracking filename case changes on case-insensitive file systems like macOS and Windows.
Explains how Git handles file renames via heuristics and offers a best practice for ensuring rename tracking works.
A guide to using nightly Swift toolchains on macOS for testing bug fixes and upcoming language features like Embedded Swift.
Explains how the Swift compiler uses a syntax check to automatically apply @MainActor isolation to closures passed to DispatchQueue.main.async.
Explains how SwiftUI's relative sizing modifier behaves within HStack and VStack layouts, detailing the layout algorithm and order dependencies.
A tutorial on creating a custom SwiftUI layout modifier to size views relative to their container's dimensions, using percentages.
A guide to creating a custom keyboard shortcut for the Export Unmodified Original command in macOS Photos app using a Bash script.
A developer fixes and updates an Alfred workflow for searching Swift Evolution proposals, adding new features like copy actions.
Explains how Swift's Foundation framework uses the ~= operator for concise pattern matching against specific error codes in catch blocks.
Explains SwiftUI view lifecycles, the render tree, and how state is managed, with a companion app for observation.
Explains how SwiftUI's clipped() modifier affects visual rendering but not hit testing, and how to fix it using contentShape().
Explores unexpected behaviors and edge cases of SwiftUI's .animation modifier, detailing when animations apply to more or less of the view tree than intended.
Xcode 14.0 can generate buggy concurrency code for macOS apps due to a Swift compiler and SDK version mismatch.
Explains how SwiftUI's .task modifier inherits its actor isolation context, focusing on @MainActor and @_inheritActorContext.
A developer's experience implementing iOS 16's Live Activities API to create a live bike computer speedometer on the lock screen.
Explains how Swift's @MainActor annotation works, detailing its implementation using global actors and custom executors to ensure code runs on the main thread.
Explores the challenges of designing a Codable format for Swift's AttributedString, focusing on Unicode complexities like grapheme clusters and normalization.
A guide to creating a type-safe heterogeneous dictionary in Swift, similar to SwiftUI's environment, with custom keys and value types.
Announcing the fifth edition of Advanced Swift, updated for Swift 5.6 with new concurrency content, property wrappers, and a hardcover print edition.