Malcolm Hall

  • About
  • Research
  • Consultancy
  • Products
    • AppRecorder
    • Apps Using Location
    • Clipboard Monitor
    • Common Rocks Reference
    • Core Location Info
    • Friendify
    • Grape Stomper
    • HomeMenu
    • iBeacon Scanner
    • Insomnia
    • Navigate from Maps
    • Nickname
    • Plate Smasher
    • Plugged In
    • Readster
    • Resize Image
    • Read★
    • ScreenshotMenu
    • Sleep Display
    • SleepFX
    • Stealth Cam
    • TV Tube Sleep
    • UDID Calculator
    • WiFi Booster
    • WiFi Passwords

SwiftUI

Concurrency

CLMonitor singleton to workaround the “Monitor named is already in use” exception

If you attempt to init another instance of CLMonitor with the same name it crashes with: Since I wanted to use the same monitor from different tasks I needed to turn it into a singleton and came up with this: This allows this kind of thing to work without crashing: Read more

By malhal, 2 years15th May 2024 ago
Concurrency

A simple calculator using @Observable, withObservationTracking and AsyncStream

Following on from my previous post on this topic I found a forum post with someone struggling to build a calculator using @Observable and thought maybe my technique of wrapping withObservationTracking in AsyncStream might help and came up with the code below which appears to work. Obviously this code comes Read more

By malhal, 2 years14th May 2024 ago
SwiftUI

Observable does not conform with Equatable (and Hashable)

I noticed a snag when using NavigationLink(value:label:) and .navigationDestination(for:destination:) with the new @Observable vs the old Combine ObservableObject (which “just worked™️”). There are 2 compilation errors: Fortunately it is relatively simple to add Hashable conformance to an @Observable class by implementing a static func == and a func hash that Read more

By malhal, 2 years23rd April 2024 ago
SwiftUI

@Observable vs ObservableObject in SwiftUI

In SwiftIUI, when requiring the reference semantics of a class and wanting to upgrade from Combine’s ObservableObject and @StateObject to the new @Observable it requires a bit more work to get the life-cycle correct. The reason for this is we have to store the object in @State which is designed Read more

By malhal, 2 years22nd April 2024 ago
SwiftUI

SwiftUI: Sharing AppStorage across the whole app

Sharing @AppStorage without having to pass it into every feature of the app is simply done in the same way it’s done for anything else you want to share: EnvironmentKey. It lets you share a source of truth into a View hierarchy without needing to pass it into every View. Read more

By malhal, 2 years10th April 2024 ago
SwiftUI

Make a Simple Circular Button in SwiftUI

I came across this interesting Stack Overflow question How can I make a simple circular button in SwiftUI in macOS? It’s interesting because all of the proposed solutions required hard-coding a frame size. I decided to experiment with how to make a circle that dynamically resizes to the size of Read more

By malhal, 3 years1st June 2023 ago
SwiftUI

Learn SwiftUI’s View struct: value semantics, diffing and dependency tracking

Learning SwiftUI can be tricky because it has a very different design to previous UI frameworks. Many make the mistake of trying to apply old design patterns which are not really compatible because of SwiftUI’s use of value semantics and its diffing algorithm – most developers from UIKit, Java or Read more

By malhal, 3 years23rd March 2023 ago
SwiftUI

NavigationSplitView with List selection of different types

I came across an interesting Stack Overflow question about how to support List selection of different types when using NavigationSplitView when in regular width, e.g. on iPad landscape. This problem doesn’t arise with NavigationStackView because multiple ForEach can simply iterate an array of each value and then there is a Read more

By malhal, 3 years12th January 2023 ago
SwiftUI

Multiple sheets in SwiftUI using subviews

If you need to show multiple sheets in SwiftUI it is best to use the framework features to your advantage. Rather than try to abstract the problem into a generic coordinator object, which you then have to unbundle again to customise each circumstance, you can simply create multiple small subview Read more

By malhal, 4 years29th November 2022 ago
SwiftUI

Nested Property Wrappers in Swift

I designed a better way to nest property wrappers than other examples I’ve seen in this article and this Stack Overflow question. The sample below is a redesigned version of the code in the question, which I also posted as an answer. Rather than use multiple property wrappers on the Read more

By malhal, 4 years18th November 2022 ago

Posts pagination

Previous 1 2 3 Next
Recent Posts
  • How to Bulk Delete Unavailable iOS Simulators via Terminal
  • How to Sandbox SwiftData Edits in .sheet
  • Stopping TextFields From Overwriting Your Nil Model When Editing Ends
  • The “Resilient” @Query — Handling Failures in SwiftData
  • The Most Confusing Chapter in SwiftUI’s History: The iOS 17 Beta 5 Betrayal
Recent Comments
  • SwiftUI 2: the way to open view in new window on Open window / scene in SwiftUI 2.0 on macOS
  • Why Does URL Scheme/onOpenURL In SwiftUI Always Open A New Window? - Programming Questions And Solutions Blog on Open window / scene in SwiftUI 2.0 on macOS
  • Ken Carroll on Enabling iOS 9.3 SDK in Xcode 8 for iOS 10
  • Mr WordPress on Welcome to my Developer Blog
Archives
  • June 2026
  • March 2026
  • February 2026
  • January 2026
  • November 2025
  • July 2025
  • June 2025
  • February 2025
  • November 2024
  • October 2024
  • July 2024
  • May 2024
  • April 2024
  • March 2024
  • January 2024
  • December 2023
  • October 2023
  • June 2023
  • May 2023
  • April 2023
  • March 2023
  • January 2023
  • November 2022
  • June 2022
  • December 2020
  • May 2018
  • October 2017
  • September 2017
  • August 2017
  • January 2017
  • July 2016
  • May 2016
Categories
  • AppIntents
  • CloudKit
  • Concurrency
  • CoreData
  • CoreLocation
  • Mac
  • MapKit
  • NSOperation
  • Objective-C
  • Swift
  • SwiftData
  • SwiftUI
  • Synology
  • UIKit
  • Uncategorised
  • Xcode
Meta
  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
Hestia | Developed by ThemeIsle