• Coming Soon on App Store
  • Home
  • Contents
    • Articles
    • Videos
  • Channels

Nav Menu

  • Home
  • Articles
  • Videos
  • Channels

Copyright By SoftSky App LTD - 2025

  • Contact Us
  • Terms of Use
  • Privacy Policy

We are a small team of two software engineers who love creating native apps for Apple platforms, Natalia Panferova and Matthaus Woolard. Beyond building great apps, we’re dedicated to sharing our expertise and contributing to the tech community.

RSShttps://nilcoalescing.com/feed.rss
  • beginner
  • By Nil Coalescing
  • Oct 6

Avoiding text truncation in SwiftUI with Dynamic Type

Dynamic Type can cause SwiftUI Text to truncate at large sizes even in a ScrollView. Fix by applying fixedSize(horizontal: false, vertical: true) to let text wrap horizontally and expand vertically. Ensure the layout can grow vertically at accessibility sizes.

  • intermediate
  • By Nil Coalescing
  • Oct 4

Introducing Breve: an arty coffee app built for iOS 26

Launch recap for Breve shares iOS 26 SwiftUI techniques: immersive headers with backgroundExtensionEffect, a stretchy header via visualEffect, a Search tab (searchable) with Core Spotlight indexing, Liquid Glass sheets with morphing transitions, and AlarmKit timers + Live Activity. Notes: partial detents needed; no in‑app countdown API.

  • intermediate
  • By Nil Coalescing
  • Sep 9

SwiftUI Liquid Glass sheets with NavigationStack and Form

Forms and pushed views obscure SwiftUI Liquid Glass sheets. Hide Form with .scrollContentBackground(.hidden) at partial detents and toggle via presentationDetents(selection: $currentDetent). For destinations and navigationLink pickers, add .containerBackground(.clear, for: .navigation).

  • intermediate
  • By Nil Coalescing
  • Aug 21

Corner concentricity in SwiftUI on iOS 26

Explains SwiftUI’s new ConcentricRectangle (iOS 26): create via ConcentricRectangle or .rect(corners:.concentric), and define parent geometry with containerShape. Covers corner radius resolution, using isUniform for balanced corners (e.g., popovers), minimum radius fallback, and RoundedRectangularShape requirement.

  • intermediate
  • By Nil Coalescing
  • Aug 11

Core Spotlight integration for Spotlight and internal app search

Use Core Spotlight to surface app data in Spotlight and power in‑app search: index with CSSearchableItem/Index (async), deep link via onContinueUserActivity, avoid repeats with batch client state, improve rank via lastUsedDate/isUpdate, add a reindexing extension, and query with CSUserQuery (debounce, correct init, ranking).

  • intermediate
  • By Nil Coalescing
  • Jul 28

SwiftUI Search Enhancements in iOS and iPadOS 26

SwiftUI on iOS/iPadOS 26 adds Liquid Glass search placements: use searchable() on NavigationStack/SplitView, restore .sidebar, or attach to detail. New DefaultToolbarItem(.search)+ToolbarSpacer and searchToolbarBehavior(.minimize). Tab(role: .search) + TabView.searchable inside a NavigationStack.

  • intermediate
  • By Nil Coalescing
  • Jul 18

Presenting Liquid Glass sheets in SwiftUI on iOS 26

iOS 26 adds Liquid Glass sheets in SwiftUI. Include a partial detent in presentationDetents (e.g., .medium) to get the default look. Avoid presentationBackground(). For morphing, use matchedTransitionSource + navigationTransition(.zoom); needs NavigationStack. Beta 3 glitches.

  • intermediate
  • By Nil Coalescing
  • Jul 3

Schedule a countdown timer with AlarmKit

Comprehensive guide to Apple's new AlarmKit framework introduced at WWDC 2025. Shows how to implement countdown timers that bypass silent mode and Focus restrictions, unlike standard notifications. Covers authorization flow with NSAlarmKitUsageDescription, creating AlarmAttributes with custom alerts, scheduling timers with AlarmManager, and building Live Activities for countdown display. Includes Dynamic Island integration with progress views and in-app timer management using alarmUpdates sequence. Key gotcha: requires nonisolated AlarmMetadata conformance in Xcode 26.

  • intermediate
  • By Nil Coalescing
  • Jun 24

Using enumerated() with SwiftUI List and ForEach to show item numbers

Swift 6.2 (iOS 26) makes enumerated() directly usable in SwiftUI List/ForEach via SE‑0459, which gives EnumeratedSequence Collection conformances. Show row numbers without Array(...). Don’t treat offset as an index or as id; use stable identity (e.g., id: \.element or \.element.id).

  • intermediate
  • By Nil Coalescing
  • Jun 16

Stretchy header in SwiftUI with visualEffect()

Create a stretchy header in SwiftUI using visualEffect() instead of tracking offsets in state. In the modifier, read GeometryProxy.frame(in: .scrollView).minY, clamp to ≥0, compute a scale from current height, and apply scaleEffect(anchor: .bottom). Reusable, no extra state; use in a ScrollView ignoring top safe area.

  • intermediate
  • By Nil Coalescing
  • Jun 11

Create immersive backgrounds in SwiftUI with backgroundExtensionEffect()

Explores SwiftUI’s new backgroundExtensionEffect() to extend mirrored, blurred content behind control layers. Demos: a NavigationSplitView detail image and card headers that use safeAreaInset with a gradient overlay for legibility. Reminder to test across themes/images.

  • beginner
  • By Nil Coalescing
  • May 26

Enable scrolling based on content size in SwiftUI

Wrap views in ScrollView for Dynamic Type, but default bounce feels odd when content fits. On iOS 16.4+, use scrollBounceBehavior(.basedOnSize) on the ScrollView or its container to disable bounce until scrolling is needed—cleaner, more accessible SwiftUI layouts.

  • intermediate
  • By Nil Coalescing
  • May 19

Mesh gradients in SwiftUI

Guide to SwiftUI MeshGradient (iOS 18/macOS 15): build 2×2+ grids with points/colors in 0–1 space (can go outside), set background fill, tweak opacity, sculpt with BezierPoint controls, keep x/y ordering per row/column to avoid seams, and animate points via TimelineView.

  • beginner
  • By Nil Coalescing
  • May 8

Formatting data inside SwiftUI Text views

Format values inline in SwiftUI Text via string interpolation. Use LocalizedStringKey’s format/style: .list for string arrays, .measurement for Measurement, .dateTime for static dates, .relative/.timer for live dates. Locale-aware output; apply monospacedDigit() to avoid jitter.

  • beginner
  • By Nil Coalescing
  • May 2

Format long parameter lists into separate lines in Xcode

Quick Xcode tip: To make long function/initializer calls readable, put the cursor inside the parentheses and press Control (⌃)+M to split each argument onto its own line. If you first select the entire expression, Xcode also formats closures and collections.

  • beginner
  • By Nil Coalescing
  • Apr 30

Embedding a custom font into a macOS app bundle

Embed a custom font in a macOS app: add the font to Xcode (no target membership), copy it via a Copy Files build phase to Resources/Fonts, set ATSApplicationFontsPath=Fonts in Info.plist, then use NSFont(name:size:) or SwiftUI Font.custom. Use the font’s internal name.

  • intermediate
  • By Nil Coalescing
  • Apr 23

Create a fully custom About window for a Mac app in SwiftUI

Replace the default About panel with a fully custom SwiftUI window: build AboutView, show it via a Window scene and Environment.openWindow, and override CommandGroup(.appInfo). Fine‑tune using containerBackground, windowBackgroundDragBehavior, windowResizability(.contentSize), windowMinimizeBehavior(.disabled), and restorationBehavior(.disabled). Some APIs require newer macOS.

  • beginner
  • By Nil Coalescing
  • Apr 16

Automatic image accessibility labels from localized strings in SwiftUI

In SwiftUI, Image("name") defaults VoiceOver to the asset name. Add a localized string whose key equals the image name (via Localizable.strings or a String Catalog) and SwiftUI will use it as the accessibility label automatically—no accessibilityLabel() needed.

  • intermediate
  • By Nil Coalescing
  • Apr 15

Ways to customize text color in SwiftUI

SwiftUI text color options: use foregroundStyle (ShapeStyle, gradients, hierarchical levels; iOS 15+) instead of deprecated foregroundColor. AttributedString colors ranges (solid only). tint affects controls/links, not plain Text. textRenderer (iOS 18) enables advanced glyph effects.

  • advanced
  • By Nil Coalescing
  • Apr 8

"Swift Gems" book update: new techniques from recent and past Swift releases

Swift Gems gets a major update for Swift 6.0/6.1, adding advanced tips on noncopyable types, static dispatch, metatype key paths, AsyncStream, TaskGroup, and typed throws—plus refreshed guidance on optionals/generics and collection/runtime performance. Targeted at experienced Swift devs.

  • intermediate
  • By Nil Coalescing
  • Apr 1

Text concatenation vs Text interpolation in SwiftUI

SwiftUI Text concatenation (+) breaks localization: segments are translated separately, spaces are fragile, and translators can’t reorder. Use string interpolation in one Text so the String Catalog adds placeholders; you can still style the interpolated Text.

  • advanced
  • By Nil Coalescing
  • Mar 28

Method dispatch mechanisms in Swift: static and dynamic dispatch

Swift method dispatch: Dynamic uses V-Tables (classes), witness tables (protocols), and Obj-C/C++ virtuals. Static for value types, final/private, and non-requirement protocol extension methods. Optimize with final/private, fewer protocol requirements, WMO; avoid Obj-C; profile in Instruments.

  • intermediate
  • By Nil Coalescing
  • Mar 21

Adapting images and symbols to Dynamic Type sizes in SwiftUI

How to adapt images to Dynamic Type in SwiftUI: let SF Symbols scale with the view’s font (avoid resizable() to keep symbol behavior). Scale custom images via @ScaledMetric(relativeTo:). Use dynamicTypeSize and isAccessibilitySize to remove decorative images; use high‑res assets.

  • beginner
  • By Nil Coalescing
  • Mar 13

Custom environment values in SwiftUI

Custom SwiftUI environment values: pre–Xcode 16 you wrote an EnvironmentKey + EnvironmentValues extension. In Xcode 16, @Entry declares entries with defaults. Set via environment(_:_:); read with @Environment. Back-deploys to iOS 13+/macOS 10.15+.

  • intermediate
  • By Nil Coalescing
  • Mar 7

Customizing modal presentation background and color scheme in SwiftUI

Customize SwiftUI modal backgrounds with presentationBackground(_:), or a custom view via presentationBackground(alignment:content:). For Lists/Forms, reveal translucency using scrollContentBackground(.hidden) + listRowBackground(.clear). Control contrast with preferredColorScheme(_:). Translucency is stronger in sheets/covers than popovers.

  • advanced
  • By Nil Coalescing
  • Mar 3

Designing a custom lazy list in SwiftUI with better performance

Standard SwiftUI List/Lazy stacks stutter on very large macOS lists. Build a recyclable list: track visible rows with onScrollGeometryChange, place them via a custom Layout (OffsetLayout) + LayoutValueKey, and reuse views using fragment IDs. Reset local @State when IDs change. Faster, lower memory; works on iOS with fixed row height.

  • beginner
  • By Nil Coalescing
  • Mar 1

Detecting the focused window on macOS in SwiftUI

On macOS with SwiftUI, controlActiveState is deprecated in macOS 15. Use the appearsActive EnvironmentValue (true when the window is focused). Access via @Environment(.appearsActive) and observe with onChange to update UI or trigger actions when focus changes.

  • intermediate
  • By Nil Coalescing
  • Feb 18

SwiftUI Fundamentals: a deeper look into the framework

Announcing SwiftUI Fundamentals, a book that dives into how SwiftUI works under the hood: view updates, data flow, layout/size negotiation, state-driven navigation, animations and gestures, and key APIs/design patterns across iOS/macOS—so you can write efficient, maintainable code.

  • intermediate
  • By Nil Coalescing
  • Feb 13

Build a macOS menu bar utility in SwiftUI

Create a macOS menu bar–only app with SwiftUI MenuBarExtra: replace WindowGroup, use .menuBarExtraStyle(.window), and host your UI in ContentView. Hide from Dock via Info.plist LSUIElement. Add a Quit overlay (NSApp.terminate). Use custom icon; resize NSImage before Image.

  • beginner
  • By Nil Coalescing
  • Feb 5

Testing SceneStorage state persistence in Xcode

How to verify SwiftUI SceneStorage persists UI state (e.g., selected tab) across launches. In Simulator: run, change state, press Home, stop from Xcode, rerun. Force‑quitting from the app switcher clears SceneStorage, so avoid it when testing.

  • intermediate
  • By Nil Coalescing
  • Feb 2

Capture UUID values with regex in Swift

Create a reusable CaptureUUID that conforms to RegexComponent to type-safely capture UUIDs with Swift’s RegexBuilder. It matches hex-digit UUID groups, transforms the capture to UUID(uuidString:), throws on invalid input, and composes with Reference to extract IDs from paths.

  • beginner
  • By Nil Coalescing
  • Jan 29

Managing WebSocket messages concurrently with detached actions

WebSocket consumers in Django Channels handle one message at a time, so long-running async work blocks the queue. Using Django Channels Rest Framework, mark actions as detached with @action(detached=True) in an AsyncAPIConsumer to run them concurrently and keep other messages responsive.

  • intermediate
  • By Nil Coalescing
  • Jan 28

Provide macOS system-wide services from your app

Expose macOS Services from your app: implement an NSObject provider with @objc methods that read/write NSPasteboard, register via NSApplication.shared.servicesProvider, and declare NSServices in Info.plist. Verify with pbs -dump_pboard. Only one servicesProvider per app.

  • beginner
  • By Nil Coalescing
  • Jan 24

Show a popover on iPhone in SwiftUI

SwiftUI’s popover() defaults to a sheet on iPhone. On iOS 16.4+, apply presentationCompactAdaptation(.popover) to the view inside the popover’s content to prefer a popover in compact size classes. Example: ingredients list button. Takeaway: keep popovers on iPhone.

  • beginner
  • By Nil Coalescing
  • Jan 17

Add launch at login setting to a macOS app

Add Launch at Login to a macOS SwiftUI app using SMAppService. Toggle calls mainApp.register()/unregister(). Check mainApp.status onAppear and when appearsActive changes to sync UI. Default off to meet App Review; read system status instead of persisting.

  • beginner
  • By Nil Coalescing
  • Jan 13

Handle plurals in SwiftUI Text views with inflection

Pluralize in SwiftUI Text with Foundation’s automatic grammar agreement—fewer localized strings, no manual plural logic. Use the Markdown attribute: ^[\(count) book](inflect: true). SwiftUI parses LocalizedStringKey and inflects at render. iOS 15+, broader language support in iOS 18.

  • intermediate
  • By Nil Coalescing
  • Jan 7

Codable conformance for Swift enums

Guide to Codable for Swift enums: automatic synthesis for raw-value, case-only, and associated-value cases (unlabeled -> _0, _1; optionals omitted). Customize case and associated keys via CodingKeys, exclude values (need defaults), or implement encode/init for nonstandard formats.