Using SwiftUI and WidgetKit to Make Your App Content Indispensable
By using a combination of SwiftUI and WidgetKit, you can increase the visibility of your app’s content and enhance the user experience by placing one or more “widgets” on the user’s iOS Home screen, macOS...
Deep Dive into Swift 5.5’s Async/await Concurrency Model
In designing the async/await construct, Apple is hoping to increase the readability, and thus maintainability, of implementing concurrency/parallelism in Swift. What I see in it are attempts: to make asynchronous/parallel code...
Deploying Mac Apps Outside App Store: How to Remember User Intent for Folders
When a macOS user specifically grants a sandboxed app access to a file/folder outside of that app’s container, that special access only survives until the app is closed. If the user reopens the app and wants to again read...
Using Packages to create an installer for distributing macOS apps outside of the Mac App Store
macOS developers will most likely be faced with the requirement to build an installer for apps they want to — or must — distribute outside of the Mac App Store (MAS). There is also substantial economic incentive to...
Beyond App Sandbox: Going outside of the macOS app container
Did you know that a macOS app can read and write outside of its container when sandboxed? Did you know that a non-sandboxed macOS app has no container? Were you aware that you can sell and distribute non-sandboxed macOS apps...
Beyond the Sandbox: Signing and distributing macOS apps outside of the Mac App Store
Since the advent of OS X Mojave and especially Catalina and the requirement for app notarization, some of us old-time macOS developers are concerned that Apple will pull the plug on the apps that we distribute ourselves. Many of...
Using App Groups for communication between macOS/iOS apps from the Same Vendor
Apple’s “app group” technology allows a collection of macOS (or iOS) apps from the same development team, developer, vendor, etc., to all communicate with each other, coordinate functionality, share resources,...
How to Use Git Pull Requests to Improve Code Quality and Developer Participation
Today, we’ll talk about a feature of several well-known Git tools that I prefer to call a “merge request,” but tends often to be referred to as a “pull request,” for example, on sites like GitHub and...
How to Use Xcode Instrument to Optimize Your Swift Code
I still run across curmudgeons who flat out reject techniques like object-oriented programming (especially inheritance and polymorphism), protocols and protocol-oriented programming (especially composition), generics, and...
Dividing and Conquering Your Xcode Projects with Targets
In this tutorial, I’ll show you how to leverage Xcode targets to control the massive complexity involved in building iOS (and macOS, watchOS, and tvOS) apps. A lot of time can be saved when developers realize that not...