Articles Projects About Subscribe
← All issues Newsletter

iOS Dev Weekly — Issue #38

Opening

Mac apps are quietly being stressed by an interface tweak: menu labels, ordering and icons might change across macOS experiments, and that’s not just cosmetic. Teams that expose automation hooks, keyboard shortcuts, or rely on assistive discovery need an explicit migration plan — not a last-minute string swap. This week I’ll walk through what to inventory, what to keep stable, and how to test the cutover.


This Week’s Big Story

macOS 27 Menu Redesign Impact for Mac App Teams

Menu text and layout changes in macOS 27 can break runtime wiring for shortcuts, AppleEvents/AppleScript, and accessibility discovery in ways that only show up in production. Treat menu redesigns as migrations: preserve command identity, add compatibility shims, and instrument usage before and after the change. If you care about automation or keyboard-driven workflows, this is the engineering problem you must own now.


Trend Signals

• Sweet Jeebus, macOS 27 Golden Gate Removes the Dumb Icons from Menu Items — community reaction suggests interface experiments are reaching shipped betas and will affect apps relying on icon affordances. [Source: HackerNews]

• “Apple didn’t revolutionize power supplies; new transistors did” — a reminder that user-facing changes often rest on deeper platform shifts, and historical context matters when planning compatibility work. [Source: HackerNews]

• Announcing the Networking Workgroup — the Swift ecosystem continues to formalize cross-project efforts, signaling more civil infrastructure work that teams can build on. [Source: Swift.org Blog]

• Swift 6.4 Just Eliminated a Hidden Performance Cost — language-level wins keep showing up and can change micro-architecture decisions; keep your dependency and performance tests current. [Source: Medium]


Swift Snippet of the Week

import UIKit
import Foundation

enum AppCommand: String {
    case exportPDF = "com.example.command.exportPDF" // stable identifier (semantic)
    case toggleSidebar = "com.example.command.toggleSidebar"
}

struct MenuManager {
    static func mainMenu() -> UIMenu {
        // Titles may change across OS versions / experiments — keep identifiers stable.
        let export = UIAction(
            title: localizedTitle(for: .exportPDF),
            image: UIImage(systemName: "doc.fill"),
            identifier: UIAction.Identifier(AppCommand.exportPDF.rawValue),
            handler: { _ in handle(.exportPDF) }
        )
        let sidebar = UIAction(
            title: localizedTitle(for: .toggleSidebar),
            image: UIImage(systemName: "sidebar.left"),
            identifier: UIAction.Identifier(AppCommand.toggleSidebar.rawValue),
            handler: { _ in handle(.toggleSidebar) }
        )
        // Grouping/ordering can change without losing semantic identity.
        return UIMenu(title: "", children: [export, sidebar])
// … (truncated for newsletter)

This encodes a practice: separate visible text from a stable semantic identifier so you can reorder or relabel menu items without breaking automation, shortcuts, or telemetry.


Community Picks

Sweet Jeebus, macOS 27 Golden Gate Removes the Dumb Icons from Menu Items — sharp community thread highlighting why seemingly small UI experiments force compatibility work.

Apple didn’t revolutionize power supplies; new transistors did (2012) — good historical thinking: platform changes layer on top of deeper engineering shifts.

Swift 6.4 Just Eliminated a Hidden Performance Cost — useful to track language-level wins that can change how you optimize hot paths.


Until Next Time

Inventory your automation-critical commands this week, add stable identifiers and a short compatibility shim layer, and add smoke tests that exercise AppleEvents, shortcuts, and accessibility selection. Hit reply with one example from your app (what command, how you’ll detect harmless removal of shims) or forward this to a teammate who owns automation. I’ll share interesting responses in the next issue.