Archive for June 2023

Friday, June 30, 2023

macOS Apprentice

Sarah Reichelt (Mastodon):

I’ve written another book! This one is for people who want to get started in macOS development and here it is: macOS Apprentice, published by (formerly

If you’re a beginner or near-beginner who wants to start learning Swift, SwiftUI and AppKit for building Mac apps, then this is the book for you.

It’s good to have an updated beginner book. When to use AppKit vs. SwiftUI, and how to mix them, is an area that Apple itself hasn’t discussed much. Her recommendation:

  • To support old versions of macOS, use AppKit.
  • For long-form text editing or for thousands of records, use AppKit.
  • For existing AppKit apps, add SwiftUI gradually.
  • For everything else, start with SwiftUI and include AppKit as needed.

I have not seen a comprehensive survey of which features are unavailable in each environment.


Paste 4

John Voorhees:

Paste feels like the kind of clipboard manager Apple might make, especially version 4.0, which was released today.


Each clipboard item is depicted as a square card with a header that includes an editable title, the date it was copied, and the icon of the app from which it was copied when viewed using the app’s largest UI option. The main body of the card displays the copied content. For me, that’s often text, but it can include a preview of an image or video, a rich preview of a URL, and more. At the bottom of the card is more information about the item, like a title and URL for links and the character count for text. To find an item in your clipboard history, you can scroll the strip of items or use the app’s search field, which searches the contents of your history and associated metadata.


The app also features more keyboard shortcuts than before, allowing users to access virtually every feature from the keyboard whether you’re renaming, editing, copying, or doing something else with a clipboard item.


iOS and iPadOS impose some limits on Paste that you won’t find on the Mac, but the app makes it easy to get data into those versions via the share sheet and clipboard. Also, because everything syncs via iCloud, your clipboard history and pinboards will be available everywhere, which makes moving between devices a breeze.

I’ve been happily using LaunchBar for my clipboard and snippet needs, but I like seeing different takes on this space. The iCloud syncing is interesting.

Thursday, June 29, 2023

Why Has Mastodon Adoption Stalled?


A lot of that influx has not stuck around. Everyone is very aware at this point that active user numbers have dropped off a cliff.


These are people and organisations who were engaged with Mastodon and fediverse to the point of investing real time and resources into it, but simply dropped out without a trace some time between November 2022 and now. I know multiple people who tried it and then gave up, due to lack of engagement with what they were posting, lack of people to follow, inability to deal with the platform’s technical foibles, or worse because they found the experience actively unpleasant. Something has gone badly wrong.


As it exists at the moment, Mastodon functions essentially as Twitter did in about 2008. In some ways, that’s nice. The userbase is calmer, the DiscourseTM does not get spun up as easily.


So what does Mastodon bring to the table in addition to Twitter, that might justify someone deciding to take the plunge and move to it? There are a few unique things about the platform, but they generally fall into the broad category of “things users don’t care about”. Chief among these is decentralisation.

Via John Gruber:

I would like to see Mastodon thrive. But the platform’s ideological zealotry is obviously holding it back and seemingly isn’t going to change. That’s why I’m much more optimistic about Bluesky’s long-term prospects.

The Mac and iOS developer community has largely moved over to Mastodon. But most others have not, and there’s enough happening on Twitter (both with developer content and questions about my apps) that I still feel the need to check it. This isn’t so easy without a client app. For now, I’m using Fluid to make an app for each account. I need this because Twitter’s e-mail notifications have never worked for me, and the Web site doesn’t show all the mentions if you aren’t logged in.

Mastodon works OK, but I haven’t found much to like about it other than that it’s not Twitter. Maybe there’s less drama, but that hadn’t been a problem with my feed. Overall, I would say that almost everything about the Mastodon user experience is worse. Search is just terrible in comparison with Twitter. The best parts are that it works with RSS (like old Twitter) and that, although pages require JavaScript, they do load completely and so can be easily saved and searched offline.


SD Notary 2

Shane Stanley:

We are pleased to announce the release of SD Notary 2, the application for notarizing applets and other files. SD Notary 2 replaces SD Notary, which is still available but uses a method Apple intends to discontinue in the near future.

We advise all users of SD Notary to download and use the new application, which is based on Apple software that is faster and more reliable. The exception is those running versions of macOS before 11.3. Just be aware that those older systems will soon lose the ability to notarize for good.

Mark Alldritt:

SD Notary 2 uses a newer tool, notarytool, instead of the deprecated altool used by the original SD Notary. This requires changes to how you set up the app, how it logs progress, and how it interacts with Apple’s servers, but it does not change what it does, and how you configure the various notarization options.


The State of Mac PDF Software


Just wondered if Preview (and other PDF apps for that matter) are considered “stable” at the moment?

I know the story above is from some time ago, but still in 2022 I have editing issues in all my PDF applications where markup gets screwed-up, with even Preview being continually unreliable for marking-up documents that need to be accessed and used days/weeks/years after their creation.

For me, at least, Preview works fine these days, in that the previously discussed bugs, form saving, and progressive rendering weirdness have been fixed. I think my biggest issue is that copying the selected text doesn’t always work well.

It seems to me users are caught in a bit of a trap here. While Adobe giveth in open-sourcing PDF format years ago, they then taketh-away, as ultimately they have (reliable!) control of PDF editing software compared to every other app out there. And seemingly they know it, as the price they continue to charge for using Acrobat remains excessively high years later… even Standard DC is $13/mth, while Pro DC is just 2 bucks more at $15/mth (both provided you take an annual commitment), so even if you only need the Standard tools it’s $156 (making $180 for Pro little more!) – but that’s PER YEAR, so pretty expensive for average users.

Adobe Reader no longer has a good interface, but from what I hear for many uses it’s the only option. Fortunately, I only work with basic PDFs. Howard Oakley has a series of posts about PDF without Adobe.


That being said, my PDF viewer/notator of choice on macOS is Skim. It is free, open source, fast, lightweight and has many customizable features. Skim started in the scientific/education/research area but is very useful for daily PDF wrangling. Unfortunately, it is dependent on PDFKit, so do not use it for editing and sharing important forms (that should always be done in Acrobat Reader or Pro).


I have to admit my first interaction with support re. PDFpenPro since their acquisition from Nitro was less than satisfactory. I was attempting to edit a form originally created in Acrobat Pro by adding a new form field and found myself unable to edit the field’s border (or for that matter, any of the previously created form fields’ borders). I’ve tried 3 times now to submit a ticket on their support page[…]

David Buckley:

I recently experienced the issue of form filled out in Preview simply did not stay filled when shared. Super broken and really problematic as it was a form I REALLY needed to have filled out properly and usable by recipient.


So it seems there is basically no clear answer here on best app usage. I suppose things are open to constant change with each app update, contributing to making such hard-and-fast determinations difficult anyway, along with each user’s individual needs & usage.

The things I’ve heard here and elsewhere seem to be[…]

David Weintraub:

Apple’s Preview software does what 97% of their users need. It can open most PDFs, allow you to mark them up, and even fill some of them out.


If I need people to fill out forms and gather information, I use web based solutions like Google Forms, MailChimp, or SquareSpace Forms.

Adam Engst:

My understanding from talking to a friend at Adobe (but some time ago, so I might be misremembering) who knows more about PDF than anyone on the planet is that PDF truly is a standard, but there are lots of implementations of various versions of the standard, many of which don’t do a good job. Apple’s implementation falls into that category. And interoperating between multiple mediocre implementations can cause headaches.

Adobe Acrobat is probably the closest you can get to a reference implementation. I’m not fond of the app, but it’s the best bet for any tricky PDFs.

Marcel Weiher:

Acrobat Reader is a 360 MB download, 1.12 GB on disk.

My cube had a 400MB drive. That included DPS and And TeX. And Sybase. And the developer tools, Project Builder, Interface Builder etc. Improv.


Update (2023-07-17): Pierre Igot:

Apparently, in macOS Ventura, the search feature in the Preview app is broken as soon as you try searching for a keyword containing… an accented char. I have lots of PDFs in French. I open one containing 2 occurrences of “René” with an accent and 8 occurrences of “rene” (without an accent) inside French words. When I type “ren”, I get a (predictably) longer list of hits. As soon as I type “é”, I get a system beep and… this. So it finds the 2 occurrences, but lists them as “not found”.

If I type “rene” in the same PDF without the accent, I get the 2 + 8 = 10 matches, but the 2 occurrences of “rené” are not highlighted properly and they only show because Preview found “ren” in them. Similarly, in another PDF containing 7 occurrences of “décennie”, matches for “décen” are all listed, but with “not found”, with a system beep, and no way to highlight them.

Wednesday, June 28, 2023

Git Tower 10


We understand how much developers value syntax highlighting, so we took our time to make sure we got it right.

This update supports nearly 200 languages, ensuring comprehensive syntax coloring coverage.

I’d like to see support for .plist, .strings, .stringsdict, and .pbxproj files.

Furthermore, the “Text” dialog offers two additional noteworthy customization options[…]


View Clipping Changes in macOS 14

WWDC 2023 session 10054:

NSViews clip their drawing contents to their bounds. That sometimes leads to drawing not displaying the way you want, like the bottom of this Hindi glyph in a FreeForm alert window.

Common places this can occur is with font rendering, shadows, or other sub-view accents, like a badge or a flame on that “hot” item for sale. There are ways to solve this. For example, embed the combined views as siblings in a larger view. However, each technique has its own drawbacks. In this case, combining the enclosing view with a button in a simple horizontal stack doesn’t line up the base lines of the text by default. And now you have another problem to solve.

There is a better way. When linked on macOS Sonoma, most NSViews no longer clip to their bounds by default. Hit testing remains unchanged and is determined by the geometry of the view. Of course, you can override hitTest to change this. Now that a view may draw outside of its bounds, its calculated visibleRect may also extend past its bounds. Review any code that uses visibleRect and adjust accordingly. This also impacts the dirtyRect parameter of the draw function. Specifically, the dirtyRect is not constrained by a view’s bounds.

AppKit reserves the right to pass a dirtyRect that is larger than the view’s bounds. AppKit also reserves the right to subdivide drawing into as many rectangles as it needs. What this means for you is that you should use the dirtyRect to decide what to draw, not where to draw.

See also: the release notes.

Daniel Jalkut (Mastodon):

Apple announced that a long-present internal property, “clipsToBounds”, is now public. In tandem with this change, they are changing the default value for this property to false for apps that link against the macOS 14 SDK.


What’s happening here is my custom calendar view is filling the “dirtyRect” with its background color before continuing to draw the rest of its content. Unfortunately, what Apple promised in the excerpt above has come to pass: the dirtyRect encompasses nearly the entire window! So when my calendar view redraws, it is evidently overwriting the “OK” button, as well as a date picker that is supposed to appear below the calendar.


The fix is relatively simple in this case: because I don’t anticipate the view being very large, and filling a rect is a pretty cheap operation, I simply changed it to fill “self.bounds” instead of “dirtyRect”.

Daniel Jalkut:

Even though this took my surprise, and even though I do think it’ll be the most pervasive source of 3rd-party bugs in Sonoma, I do think it’s a good change. The collective time wasted working around subtle clipping issues is far greater than the time spent working around this one-time change.

Erik Schwiebert:

I think best-practice if you have a custom control that doesn’t draw outside its bounds is to set the clipToBounds property to YES, and let the OS decide the optimal rect to hand you like it always did. If you do have a control that draws outside its bounds, then the new behavior makes things much easier—instead of playing games with nested views etc to get more drawing space you can just do it directly in the actual control!

Update (2023-10-30): See also: Core Intuition.

Update (2023-12-19): Andy Lee:

“Recognizes”? “Vastly”? Do most people agree with this? Can someone please point to examples where this change made their life easier? I’m genuinely confused.

Tuesday, June 27, 2023

YouTube Playables Gaming Service

Miles Kruppa:

Google recently invited employees to begin testing a new YouTube product called Playables, which gives users access to games on mobile devices or desktop computers, according to the email, which was viewed by The Wall Street Journal.

The games available for testing include titles such as Stack Bounce, an arcade game in which players attempt to smash layers of bricks with a bouncing ball, according to a screenshot of the product. Users would be able to play the games instantly via the YouTube site on web browsers or the YouTube app via devices running Google’s Android and Apple’s iOS mobile systems, according to the email.

Juli Clover:

Playables does not offer the same cloud based gaming as Stadia, focusing on simple games rather than console titles.

Tim Sweeney:

Apple will let YouTube host streaming games in the YouTube app while blocking Microsoft XCloud and NVIDIA GeForce NOW?


Triangulation Exploit

Howard Oakley:

Most of the flurry of updates is in response to recent reports from Kaspersky about malware, in what they refer to as Triangulation or TriangleDB. Its researchers have discovered evidence of infection of iOS devices going back as long as four years, in a series of attacks that have continued with iOS 15.7. In a series of research articles published this month, Kaspersky’s researchers have revealed how devices have received iMessages with an attachment containing an exploit. Without any user interaction, that attachment has run and exploited vulnerabilities in iOS to launch the malware payload, gain control over the device, and install persistent malware that’s remotely controlled.

Although there’s still much to be learned about this malware, it’s now believed to be targeting macOS as well as other platforms. Apple has thus patched the vulnerability in the kernel that is thought to be exploited by the initial iMessage and its attachment. A second vulnerability in macOS affects WebKit, and is also believed to be used in an active exploit, although probably not Triangulation.


Apple would have preferred to accomplish these urgent fixes without having to release full macOS updates, using its Rapid Security Response (RSR) mechanism, as was done with macOS 13.3.1 a couple of months ago. However, that couldn’t address the vulnerability in the kernel, which still requires a proper update.


Automating App Review

Neil Long:

“The way to solve that inconsistency – and I hate to say it – is: let’s take a page from Google,” he told us. “Especially now with the AI tools that are out there. You can do probably 80% of the work the review team does.”


“Phil [Schiller] wants a set of eyes on every single app. I believe he is still basing that on one of the last things Steve [Jobs] told him, which is that you’ve always got to have a set of human eyes on every app that goes in the store. And Phil maybe carries that with him all the time.”


Shoemaker also questioned why app review guidelines have somehow become more vague over time. “The guidelines were written in a very grey way,“ says Shoemaker. “We wanted to have wiggle room to be able to shift our approvals or rejections…the idea was to start that way and then refine them over time.”

“They were rewritten in 2017 and they did none of that. In fact, they opened up more grey areas – it should be pretty solid right now, the guidelines should be very black and white.”

Via John Gruber (Mastodon):

App Store review times have decreased from an average of about 5 days to 1 day since Shoemaker left Apple in 2016. (And my understanding is that new automation tools are a big part of that process improvement. Shoemaker’s gripes about App Store review seem stuck in 2016.)

I think review times are not the main problem with App Review. But the average is definitely not the right way to look at them. It tells nothing about the likelihood of a maintenance update getting stuck in review for 61 days for no reason or of being blocked by a store bug for 54 days. Also not included in the average: apps and entitlement requests that never make it out of review but are just stalled indefinitely.

Billy Mabray:

As someone who submits to both stores, I very much do not want Apple to automate the review process.

Google’s review process seems to run at random times, and will pull your app from the store for bizarre reasons. And when it does that there’s nobody at Google you can talk to about it.

Michael Love:

I don’t think App Review does much good anyway - it’s incredibly easy for malicious apps to hide bad behavior from reviewers. And I know for a fact that they haven’t so much as looked at the paid portion of my app in more than a decade.

I think you could easily develop an automated system that would detect whether an app had changed enough to justify a human review, which would both give reviewers more time to focus on big stuff and let developers get bug fixes out faster.


Update (2023-06-28): Rob Jonson:

If you ever thought it was tough communicating with Apple, it’s a million times harder with Google. My apps have been pulled multiple times for the most stupid random (wrong) things. If I didn’t have friends in Google, things might never have been resolved. They spot some random technical infraction, then just remove your app entirely. Communication is just emails into the void with unthinking “computer says no” responses.

Monday, June 26, 2023

Transfer Toolbox Rejected From the Mac App Store

LateNite Films:

Transfer Toolbox allows you to convert Final Cut Pro (for Mac) Libraries into Final Cut Pro (for iPad) Projects!

LateNite Films:

Apple approved Transfer Toolbox v1.0.0 on 26th May 2023 at 08:57, but then claimed “Developer Removed from Sale” at 10:06 (which we didn’t).


As far as we can determine, Transfer Toolbox doesn’t actually break this guideline.

We took advantage of the App Review Board, and their Unfair Treatment appeal option, however, it was determined that we’re still breaking Guideline 2.5.1.


The rejection of Transfer Toolbox appears to hinge on potential issues that Final Cut Pro for iPad users might encounter when importing libraries from the Mac version of the software. However, if such a situation arises, it would likely be an issue with Final Cut Pro for iPad rather than a fault of Transfer Toolbox. Our app is a simple tool that performs no more than what a user can manually do themselves. It merely moves a folder into another folder, using only public APIs and without any use of undocumented or private APIs.

The guidelines don’t matter if Apple doesn’t want your app to exist.


Update (2023-06-27): Anders Borum:

They do this on iOS as well where it is much worse because there is no alternative to being in the iOS App Store.

Elegy for the Native Mac App

Keaton Brandt (Reddit):

To the old-school Mac community, installing some shitty cross-platform Java app on their pristine Macbook was an admission of defeat. Even web apps were avoided whenever possible. They saw the use of such software as a tacit acknowledgement that the PC and its “ugly but effective” mindset had won. The point of paying double the price of a PC was to buy an elevated computing experience, and that had to extend to every third-party app on the system.


Many of the great Mac apps are forgotten or abandoned now. MacHeist is a grotesquely reanimated corpse. The golden age is over. The question isn’t whether Sketch will succeed because it’s a beautiful Mac app, but rather whether it can succeed in spite of that.


We’ve moved on from the era of beautiful Mac software to the era of web-based apps, for better and for worse. There’s no one simple reason for this evolution, but it’s interesting to think through some of the factors.


As of 2023 Mac sales are reaching all-time highs, but Apple’s interest in the Mac as a platform is lackluster at best. This year’s macOS Sonoma release adds some cool new features, but also continues the larger trend of making macOS more like iOS and iPadOS. Apple’s big new ideas for Mac software: iOS widgets and progressive web apps.

Apple is still very interested in selling Macs — precision-milled aluminum computers with custom-designed chips and “XDR” screens. But they no longer care much about The Mac: The operating system, the software platform, its design sensibilities, its unique features, its vibes.

It seems like Apple’s greatest passion with the Mac for the last decade-plus has been security and privacy. If the first decade of Mac OS X was about expanding capabilities and designs, with Apple as a cheerleader for all apps, the second was about which features and business models you’re not allowed to use and trying to minimize the regressions and friction that the system imposes in the name of protecting users.

Via Steve Harris:

Closer to home, I also agree that these days Apple’s bundled apps are going places previously only third-party devs would dare tread, and that worries me a little. Indeed, apps like Reminders and Notes in particular are very capable now, and if you’re an indie starting out, wanting to do something in that area, those apps will set the baseline, which is a lot. Additional to that, it’s not easy getting things out of those apps (particularly Notes, with all its new features), and so users will remain locked in.

However, the biggest pain point for any developer is making an app cross-platform, potentially on macOS, Windows, iOS, and Android, with perhaps some kind of web version too. It takes a lot of time and effort to make native apps, sometimes an equal amount for each platform, because savings on the things they share tends to get devoured by gnarly platform-specific considerations.

Apple’s answers to that are Apple-only solutions that won’t serve Android or Windows — porting iPad apps with Mac Catalyst, or adopting SwiftUI — and neither are anywhere close to zero effort to deploy across platforms, and nor do they provide a truly first-class experience on Mac right now. These technologies would be perfect for indie developers that only want to target Apple’s platforms, except that I know my existing apps’ users wouldn’t accept either, because the apps would turn out less integrated and therefore less powerful.

Core Intuition:

How do we prioritize native platform development while maximizing the ability to deploy to all of Apple’s platforms? They talk about investing time into new platforms and frameworks when the investment will pay off, vs. when the work will be wasted on short-term workaround.


Update (2023-06-27): Colin Devroe:

I hate that this resonates so clearly. I’ve heard others mention that “there is no one left inside Apple that knows what a good Mac app is” and I tend to agree. While Notes and Reminders are good apps, the OS they run on (and, subsequently, the design guidelines they must live within) are just not as good as earlier versions of macOS.

I do think things can turn for the better: higher contrast, easier to detect focus, leave behind the aversion to texture and shading, stop hiding UI.

Jeff Johnson:

A good article that I largely agree with.

Steve Harris’s article is also very good and brings up crucial points about how the Mac App Store harmed the platform. I’d also mention how the Mac App Store brought the iOS race to the bottom to some extent.

One more thing: the relentless yearly OS release cycle takes away a lot of time from Mac devs, as well as frequently taking away features, adding new restrictions, changing the whole Mac UI design, and adding new bugs.

ATS and ATSUI Removal

macOS 13 Release Notes (2022):

ATS and ATSUI APIs are fully deprecated. Code using these APIs will fail to compile and link when the deployment target is set to 13. Code targeting earlier versions of macOS will continue to compile, link, and run. macOS 13 is the last release where code depending on ATS or ATSUI will run. All runtime functionality will be removed in next major release of macOS.

Mr. Macintosh:

From the public Sonoma Beta 2 developer documentation👇

Whenever the OS detects the usage of deprecated APIs, the user will be presented a dialog stating that the app needs to be updated. When the dialog is dismissed the app will exit.


Many will say “oh this is beta” and we won’t see this in the public release

Take a look at AltTab’s dev response to this situation👇

I’m just trying to show how most 3rd party app devs may respond.

Apple has been clear that developers need to stop using ATS for a long time, but the alerts themselves are unclear, leaving some developers unsure of what they are referring to. The alert text also implies that the API has not actually been removed yet, which makes it seem like the app is being terminated unnecessarily.

Robert McGovern:

Apparently not all Apple apps have migrated. Someone got that error dialog with Finder


Update (2023-06-30): Howard Oakley:

For developers, the vagueness of deprecation makes preparation difficult. I’ve recently spent many days revising my apps that access extended attributes because they relied on deprecated code. While I now feel that’s been worthwhile, my fear that they would stop working in macOS 14 seems to have been completely unfounded, and in retrospect I could have spent that time better. For those using NAS with their Macs, switching from AFP to SMB has brought many problems that those who hung back longer haven’t had to deal with. Was all that time and effort well spent, or will those latecomers profit?

What we all need most is a clear statement of the target date for a feature’s removal, not Apple’s expression of disapproval and vague hand-waving for the future.


This coincidentally spells out the meaning of full deprecation as a euphemism for removal of support.


While ATS/ATSUI has surely done this right, it looks like others have jumped on the bandwagon. This is concerning, as Apple needs to be very careful about information that’s displayed to users. It must be specific, and not anticipate removal. Deprecation should normally be a matter between Apple and the developer, not a way of applying pressure to the developer.

Update (2023-07-07): Craig Hockenberry:

Apple needs to go back to the drawing board with these alerts in Sonoma. They are scary, frequent, and not actionable.

It’s like an engine check light going on, taking the car to the mechanic, and having them say “I have no fucking idea what’s wrong”.

What’s worse, is that they only appear once with no apparent way to reset. That makes it impossible for a developer to verify that they fixed the deprecated API usage.

It’s also not a good look that these are happening in System frameworks.

Update (2023-07-10): Craig Hockenberry:

Supposedly, this alert should only appear with the use of ATS or ATSUI (per the release notes), but I find it hard to believe that modern system framework components shown above are using Apple Type Services that were replaced 13 years ago.


If Apple wants developers to repair these deprecations they need to make major changes:

  • Document the behavior, including all of the APIs that trigger it.
  • Tell developers if this is something that will only appear in the beta or if it will be a part of the final release.
  • Give the customer something to work with when communicating with the developer. A diagnostic code at a minimum.
  • Log information about what caused the issue: remember that it may not be the developer’s own code triggering the alert. Plugins, embedded libraries, and external frameworks should be a part of the log. These logs should be available to customers so they can provide them to developers.
  • Give developers a way to reset the alerts. Make fixes testable.

Without these changes a Mac user’s future is one with a lot of crashes caused by deprecated code.

Update (2023-07-13): Quentin Carnicelli:

There is no improving this, short of its complete removal.

Since the very first computer platform was created, there has been a power struggle between platform owners and developers. As developers, we wish for a stable platform. It’s understood that it must evolve, but it should do so slowly and predictably. Platform owners, on the other hand, wish to cut out cruft and move forward rapidly. This tension is the normal state of affairs. When managed well, it keeps both parties in check.

This poorly-written alert, instructing users to contact developers for new software, is an unacceptable disturbing of that balance. The last thing users should ever have to worry about is “deprecated APIs”.

Apple already has a powerful method for dealing with deprecated APIs. First, they announce the pending removal of the API to developers. Then, some time later, they remove the APIs. That’s more than enough. It is our fervent hope that Apple simply drops this alert entirely before Sonoma officially ships in the fall.

Guilherme Rambo:

I’m investigating the root cause of this alert. Haven’t gotten to the bottom of it yet, but found a way to reset the alert.

The daemon that’s showing this alert is replayd, it stores a boolean flag for each bundle ID that it’s displayed the alert for in its preferences domain, so running defaults delete <app_bundle_id> will make the alert pop up again.

Update (2023-07-17): Craig Hockenberry:

And here’s the thing: a crash report from an API that has been removed has A LOT more information than the dumb alert box we’re seeing now.

James Griffin:

This whole thing smells like an effort to chase reducing crash reports as an OKR metric. It can’t crash if you never let it launch!

Rosyna Keller:

With the removal of ATS/ATSUI in macOS 14, I believe all the QuickDraw GX-created things are gone from macOS?

Keeping up that system simultaneously and in sync with CoreText/<thing>, which uses a different model, was resource Intensive.

Friday, June 23, 2023

Adobe Account Expiration

I recently received an e-mail from Adobe:

Your Adobe account will expire soon.

Dear Adobe customer,

We’ve noticed you have not logged in to your Adobe account in more than a year. In keeping with our policies, we are contacting you to let you know your Adobe ID will expire 90 days from now. If you take no action within the next 90 days, your Adobe ID will no longer be valid, you will no longer have access to content you may have stored on our servers and this account will be closed.

It’s true: I haven’t logged into the Adobe Web site in more than a year. But it’s not an inactive account. I use Lightroom multiple times per week, and it’s logged into my Adobe account. It won’t function without the monthly subscription fees that I’ve been paying all this time I was “not logged in.” Needless to say, I do not rely on Creative Cloud to store anything.


Update (2023-06-26): Lee Bennett:

I got one this past week for a work address that has been dead for roughly 20 years. Oddly it came to my current work address and current Adobe account, so the old one is somehow linked to my current one. And I log into my current one quite often.

See also: Hacker News.

Avoiding Enshittification

Mike Masnick:

People forget that when Bezos introduced Amazon Prime, Wall St. flipped out, because they insisted that it would cost way too much for too little benefit. But, through it all Amazon survived (and thrived) because Bezos just kept telling investors exactly what his plan was, and never backed down, no matter what Wall St. kept saying to him.


This is too easily forgotten, but your users are everything if you run an internet business. They’re not “the product.” They’re what makes your site useful and valuable, and often provide the best marketing you could never buy by convincing others to join and providing you with all of the best ideas on how to improve things and make your service even better for the users. The moment you’re undermining your own community, you’re beginning to spiral downward.


Push the power to make your service better out from the service to the users themselves and watch what they do. Let them build. Let them improve your service. Let them make it work better for you. But, you have to have some trust here. If you’re focused on “Rule 3” you have to recognize that sometimes your users will create value that you don’t capture. Or even that someone else captures. But in the long run, it still flows back to you, as it makes your service that much more valuable.


If you’re charging for something that was once free, you’re taking away value from your community. You’re changing the nature of the bargain, and ripping away the trust that your community put in you. Instead, always look for something new that is worth paying for above and beyond what you already offered.


Amazon Prime Dark Patterns Lawsuit

Annie Palmer (via Hacker News):

The Federal Trade Commission on Wednesday sued Amazon, alleging the nation’s dominant online retailer intentionally duped millions of consumers into signing up for its mainstay Prime program and “sabotaged” their attempts to cancel.

The agency claims Amazon violated the FTC Act and the Restore Online Shoppers’ Confidence Act by using so-called dark patterns, or deceptive design tactics meant to steer users toward a specific choice, to push consumers to enroll in Prime without their consent.

The complaint is here.


I worked on Prime for a long time many years ago, and it’s sad that dark patterns have taken over. We built a lot of behind the scenes stuff to automate self-service free and pro-rated refunds during cancellation (if you didn’t use any benefits you’d get a full refund, a few benefits got you a prorated refund, and if you used it a bunch already, we’d turn off auto-renew and let the contract run to the end). If you signed up and didn’t use any benefits, you wouldn’t be auto-renewed. The group was extremely customer centric.

We also had metrics around delivery times, which seems to have gone out the window as well.


Amazon Prime video recently dropped the “show me what’s free to me” link. Now they show tons of options that are free with ads, free with trial subscription, etc.


Update (2023-06-26): Ben Thompson:

This, to my mind, is the chief reason why this complaint rubs me the wrong way: even if there is validity to the FTC’s complaints (more on this in a moment), the overall thrust of the Prime value proposition seems overwhelmingly positive for consumers; surely there are plenty of other products and subscriptions that aren’t just bad for consumers on the edges but also in their overall value proposition and reason for existing.


Are these UI decisions that are designed to make subscribing to Prime very easy? Yes, and that is a generous way to put it, to say the least! At the same time, you can be less than generous in your critique, as well. The last image, for example, complains that Amazon is lying because the customer already qualifies for free shipping, while ignoring that the free shipping on offer from Prime arrives three days earlier! That seems like a meaningful distinction.


At the risk of once again over-indexing on forum behavior, it was striking that no one seemed to have saved-up screenshots about the cancellation process, perhaps because few Prime members seem to want to go through with it. Moreover, the FTC complaint doesn’t seem that egregious?

Update (2023-06-27): John Gruber (Mastodon):

I find the FTC’s case against Amazon to be weak sauce at best, and bordering on frivolous. Their argument that Amazon has made it difficult to cancel a Prime subscription is just wrong. Yes, it’s a few more clicks than it takes to sign up for Prime, but I don’t think any of those steps are arduous or unnecessary or unfair or confusing. And in the context of Amazon’s entire website — infamously sprawling — it’s really rather easy to find.

The FTC might have a better case that Amazon has used deceptive dark patterns to get people to sign up for Prime, but I don’t find their case compelling.


So, anyone who doesn’t think there’s merit here simply… has not gone through cancelling Prime! The cancellation process gets more laughable each time (I cancel once or twice a year, I have a lot of experience with it). Not only do they chain you through several screens where the “right” button flips position and color, to ensure you are careful reading each screen, where any deviation exits the cancellation flow… but some of the features were outright broken… for years!

There’s a feature on the Prime page to notify you by email before your next renewal. Quite useful if you’re say, using a Prime trial and want to cancel before it bills.

For over two years, that button did nothing. They’d tell you they’d remind you before renewal, but if you didn’t set your own reminder, you were out of luck, because the feature just didn’t work.

And that’s before we get to how they handle fraudulent Prime subscriptions… They won’t cancel them!


For a period, Amazon randomly added a Prime trial to your basket when you were ordering goods for the “free” shipping without asking. The process for unsubscribing is onerous and misleading to say the least. How can it be reasonable to have to navigate 7 screens to cancel a trial or subscription? Add dark patterns into this and it’s downright deceptive.

Adam Fisher-Cox:

You have to go through multiple steps, each one differently designed, where you have to confirm you actually want to cancel. On some of the steps, all the buttons look the same, but some cancel and some do not. All are labeled close-reading tests like “No, don’t end my free shipping benefits” or “Yes, please cancel my cancellation.” The idea that this isn’t a dark pattern is mind-boggling.

Nick Heer:

The complaint of the user who posted the image is that Amazon has preselected a paid shipping option when a free option is available, knowing that it would take longer for the item to arrive than either the preselected paid shipping option or the fastest Prime choice, and that Amazon presents a Prime subscription as a way to “save $5.99 on eligible items in this order”. A more honest screen would preselect free shipping and explain how subscribing to Prime would arrive sooner.


It is certainly not the worst cancellation process. However, it is worth pointing out the project which created this multistep process was internally referred to as “Iliad”, suggesting its arduous qualities were very much the point.


The FTC’s allegations echo 2021 complaints from the Norwegian Consumer Council. Last year, Amazon said it would change its cancellation process in Europe to one which takes just two steps and is clearly labelled. It is fair to argue that its current U.S. process is not that difficult, but it is obviously inferior to the E.U. version. Thompson protests the involvement of “government regulators getting involved in product design on a philosophical level”, but it was that kind of pressure which produced changes in both the U.S. and the E.U. resulting in better designed products for users.


Thompson here is defending the use of checkout and cancellation flows designed to trick people which are apparently necessary in order to make same-day shipping possible. […] If the way Amazon runs its online marketplace can only be maintained by coercing users into registering for Prime and making it hard for them to stop paying — and dangerous and low-paid labour — that seems like a profound argument against the way Amazon works today, not in favour of it. It indicates a company which is deceptive to its core.

Safari 17 Web Apps

WWDC 2023 session 10120:

Discover web apps for Mac — a powerful way to experience your website from the Dock. Learn how you can customize your web app to give people the best experience when they add your site.

Thomas Steiner (via Hacker News):

The out-of-the box launch experience of web apps is fantastic. Nowhere does it give away that this is a web app. For apps with a manifest, there’s no Safari UI whatsoever, and the expectation is that such apps are single-page apps that provide their own navigation controls. If an app is well made, lay persons probably wouldn’t be able to tell that something is a web app.


Different from iOS/iPadOS, credentials in cookies are copied over, so if you were logged in when running in the tab, you’re logged in when you launch the app.


Extensions don’t run and likewise aren’t displayed. Also probably a conscious decision.

Tim Hardwick:

Web apps also respect Focus modes, so you can include or exclude them from allowed notifications based on what you’re doing. Lastly, with privacy in mind, Apple has added options to control web apps’ access to camera, microphone, and location in System Settings -> Privacy & Security, just like for native apps.

See also: Fluid and Unite.


Update (2023-06-28): Sven A. Schmidt:

macOS 14 Sonoma’s web apps (Safari’s “Add to Dock” feature) show up with a “Web” architecture in Activity Monitor 🤔

Thursday, June 22, 2023

visionOS SDK

Apple (Hacker News):

Apple today announced the availability of new software tools and technologies that enable developers to create groundbreaking app experiences for Apple Vision Pro — Apple’s first spatial computer. Featuring visionOS, the world’s first spatial operating system, Vision Pro lets users interact with digital content in their physical space using the most natural and intuitive inputs possible — their eyes, hands, and voice. Starting today, Apple’s global community of developers will be able to create an entirely new class of spatial computing apps that take full advantage of the infinite canvas in Vision Pro and seamlessly blend digital content with the physical world to enable extraordinary new experiences. With the visionOS SDK, developers can utilize the powerful and unique capabilities of Vision Pro and visionOS to design brand-new app experiences across a variety of categories including productivity, design, gaming, and more.

Next month, Apple will open developer labs in Cupertino, London, Munich, Shanghai, Singapore, and Tokyo to provide developers with hands-on experience to test their apps on Apple Vision Pro hardware and get support from Apple engineers. Development teams will also be able to apply for developer kits to help them quickly build, iterate, and test right on Apple Vision Pro.

visionOS Documentation (Hacker News):

Create new apps using SwiftUI to take full advantage of the spectrum of immersion available in visionOS. If you have an existing iPad or iPhone app, add the visionOS destination to your app’s target to gain access to the standard system appearance, and add platform-specific features to create a compelling experience.

Serenity Caldwell:

We’ve also updated the Human Interface Guidelines to help you design for visionOS, learn more about spatial inputs and spatial layout, create stunning immersive experiences, and a whole lot more.

Xcode 15 Beta 2 Release Notes:

Xcode 15 beta 2 includes SDKs for iOS 17, iPadOS 17, tvOS 17, watchOS 10, macOS Sonoma, and visionOS.


Update (2023-06-23): See also:

macOS 13.4.1

Juli Clover (release notes, security, enterprise, developer, full installer, IPSW):

According to Apple’s release notes, the update provides important security fixes and is recommended for all users.

See also: Mr. Macintosh and Howard Oakley.


Update (2023-07-26): Adam Engst:

I don’t know when Apple fixed the bug because the company didn’t see fit to mention it in any release notes. Regardless, in macOS 13.4.1, the screen saver again works properly with multiple displays.


iOS 16.5.1 and iPadOS 16.5.1

Juli Clover (release notes, security):

According to Apple’s notes for the update, the update includes important security fixes and is recommended for all users. It also addresses a bug that could prevent charging with the Lightning to USB 3 Camera Adapter. Reports in May suggested that the Camera Adapter was not working with iPhones and iPads that had been updating to the iOS 16.5 and iPadOS 16.5 updates, with the adapter failing to power connected devices.


macOS 12.6.7 and macOS 11.7.8

Apple (full installer):

This document describes the security content of macOS Monterey 12.6.7.

Apple (full installer):

This document describes the security content of macOS Big Sur 11.7.8.

See also: Howard Oakley.


Wednesday, June 21, 2023


Collin Donnell (Mastodon, Hacker News):

In December of 1979 Tyrgve Reenskaug, an employee of Xerox PARC, published a paper called MODELS-VIEWS-CONTROLLERS about a design pattern he had invented for developing applications with a graphical user interface.


In [Apple’s] version, models and views got dumber and controllers handle a lot more.


In the late 1990s, Java developers writing for the web created a new variation of MVC to deal with the fact that web and desktop apps are different. It was called Model-2. […] Rails used a Model-2 style architecture, but is generally just referred to as an MVC framework.


There are aspects of the original design that could be applied and might be useful — models notifying views of updates while remaining decoupled using observable objects with SwiftUI in Swift or something like Turbo Stream broadcasts for Rails style web frameworks — but what is interesting to me is how an idea that could be described in a page and a half the year after Star Wars came out has managed to evolve and remain relevant in such different environments.


The M in MVC has come to mean “data model,” but it originally referred to the “mental model” of the user. What kind of thing are we trying to manipulate and what is the user’s mental model of such a thing?

Marcel Weiher:

The “Model” is an object that is the headless application. It implements and coordinates all the functionality. You put a thin GUI on top of that. Or a different GUI. Or an API. Or a WebUI. Or a CLI….

Dave Rahardja:

I would go even further that the “controllers” in the modern #AppKit / #UIKit world are even further away from the original conception of #MVC, and they’re hardly “controllers” in the original sense any more.

See also: Dave DeLong’s A Better MVC and MVC Todo.


Update (2023-06-23): Collin Donnell:

If you enjoyed my MVC Isn’t MVC post from a couple of days ago, you might also be interested in the latest episode of the Rooftop Ruby podcast. Joel and I discuss our thoughts on the post before getting into more detail on MVC, the forgotten editor controller, and how we might be able to implement something closer to the original MVC on the web using modern technologies like morphdom and Turbo Stream broadcasts.

Scanning QR Codes With Your iPhone

John Gruber:

My tip for scanning QR codes is not to use the Camera app at all. Instead, enable iOS’s hidden built-in Code Scanner app in Contol Center. Go to Settings → Control Center, and under More Controls, enable Code Scanner.


Worth keeping in mind, too, that when you use the regular Camera app to scan a QR code, if you open the link, it opens in Safari. With the Code Scanner app in Control Center, links open in a sandboxed in-app web view, which is more private. The only downside is that if you want to keep the opened the page around, you’ll need to open it in Safari from within Code Scanner.

Code Scanner is a faux app that does show up in search, but you can’t actually drag its icon to your home screen.

Damus Zaps vs. the App Store

Sarah Perez:

Another decentralized social networking application to challenge Twitter has hit the App Store. Last year, Twitter co-founder Jack Dorsey donated around $245,000 in bitcoin (then roughly 14 BTC) to fund the development of an open and decentralized social networking protocol known as Nostr, which is based on cryptographic key pairs. Now, the first mobile app to leverage the protocol, Damus, has been published on the App Store, allowing anyone to try out the new technology.


The site also touts end-to-end encrypted messaging — something Twitter does not have, and which has concerned users in the wake of the Musk takeover. There’s also no requirement to sign up with a phone number, email, or name because of how the Nostr works.


Bitcoin integration is also a part of the Damus experience, allowing users to tip friends’ posts, for instance. This is made possible by way of Bitcoin’s Lightning Network.


Damus’s decentralized nature presented a problem for getting through App Review at first, as Apple kept asking the app to follow the same rules as any other social network — like providing a way for users to flag objectionable content, and having a policy that makes it clear abuse is not allowed. The Damus Twitter account had earlier tweeted the app was being rejected repeatedly, despite its claims that it had resolved the issues Apple raised.

I still think these rules are extremely unclear and not consistently enforced.


Damus will be removed from the app store in 14 days, apple says zaps are not allowed on their platform because they could be used by content creators to sell digital content.

Via Tim Sweeney:

Apple is coming for money transfer and funding apps like Damus, Patreon, Venmo, maybe PayPal and Stripe. If digital goods may be somehow involved in the transfer, now they want 30%. If Apple can tax this, they can tax digital banking, payroll, and anything else.

Jonathan Vanian and MacKenzie Sigalos:

Apple later reneged on its threat, but only if Damus agreed to remove certain payments functionality.

The move could stall one plan to ease the use of bitcoin and turn it into a more convenient transnational digital currency.


“Only zaps on profiles are allowed,” Damus said in the tweet. “This cripples damus pretty bad, but you can still zap at least.”


Dorsey tweeted his displeasure against Apple saying that “Tipping on posts is not selling digital content. It’s a form of feedback.”

And it’s allowed with WeChat?


Update (2023-06-26): Damus (via Hacker News):

Looks like we are getting removed from the appstore even after updating our app to make it clear that no digital content is getting unlocked when users are tipped. Users are only ever tipped after posts are made, the idea that content is being sold is nonsense. We will be filing an appeal as this guideline is clearly being abused and misapplied.

Safari 17 Profiles

Tim Hardwick:

Safari has gained a new feature called Profiles, which is designed to help keep your browsing separate for topics like Work, School, or Personal.

Each profile gets its own icon and silos your history, Tab Groups, favorites, and cookies. You can even assign specific extensions to different profiles to optimize your browsing experience based on the task at hand.

WWDC 2023 session 10119:

Learn about the latest improvements to Safari extensions. We’ll take you through new APIs, explore per-site permissions for Safari app extensions, and share how you can make sure your extensions work great in both Private Browsing and Profiles.

Cory Underwood:

While this may not seem super privacy focused – profiles shard the user’s History, favorites, Tab Groups and website data such as cookies, caches, service workers, and Web Push subscriptions per-profile.

For user’s who share a device (or who wish to have multiple profiles on their device for various activities) this will limit that the behavior undertaken in the course of one activity (on a profile) will impact the experience of another activity (on a different profile). Depending on actual user behavior – this may impact retargeting and attribution efforts as it will not be possible to re-establish the link easily across profiles (basically this is like a cross-device scenario). This as a result may affect how much of a given audience is reachable for targeting advertising.

I’m interested in profiles as a way to feel more comfortable using Safari extensions. Right now, extensions are all-or-nothing, and there are some that I’d like to use but that I don’t want having access to everything that I browse. With profiles I could, say, enable extensions for general browsing but disable them when accessing my bank.

Safari 17 lets you specify per-site which profile it should open in. This works for “incoming links,” i.e. if I open a site via PasswordWallet. However, if I’m already in Safari, each window stays with the profile it was opened with, even if I click on a link or choose a bookmark that leads to a site that was set to use a different profile. So the profiles feature is more designed around segregating activities rather than sites. It’s up to you to make sure it knows which activity you’re doing.

There is no way to turn off JavaScript for a profile, and that’s still not available as a per-site option, either.

Sindre Sorhus:

Apple does not expose any way to open URLs in a specific profile. I recommend sending feedback to Apple that they should add Shortcuts and AppleScript support for this.

Update (2024-04-12): Jeff Johnson:

What makes Safari profiles unusable for me is that Safari changes the keyboard shortcut depending on which window is in front.

The way I think of it is that each profile has a consistent numeric shortcut (even if it’s not always displayed in the menu), and Command-N creates a window using the most recently used profile. As far as I can tell, there’s no way to change the order of the profiles after creating them, which means the menu doesn’t look sorted, but it does help keep the shortcuts consistent (unless you delete a profile).

Tuesday, June 20, 2023

Still No Custom Apple Watch Faces

Benjamin Mayo (MacRumors):

Asked about the possibility of third-party watch faces on Apple Watch, Lynch says that the watch face is the home screen of the watch and they want everything to work reliably and consistently.

As Apple controls all the faces the user can choose, Caldbeck adds that users “don’t have to worry about the watch face still working when there’s a major watchOS update. We’ll take care of that.”


If third-party faces were available, Apple argues it wouldn’t be able to ensure that the watch faces keep working if they change something in the operating system, like this year’s watchOS 10 redesign that includes a new swipe up gesture to reveal a tray of user-selectable widgets.

This explanation doesn’t make a lot of sense to me.


Proposed Japanese Law for Alternate App Stores

Andrew Orr (Hacker News, Reuters):

Japan is the next country to impose regulations on these companies, according to The Japan Times. It will require Apple and Google to let users download apps through services other than their app stores. The government aims to stimulate competition and believes it could reduce app prices.

The government will compile a list of prohibited actions for OS providers to prevent them from showing bias towards their services and payment platforms.


Furthermore, the two companies will be compelled to enable users to make payments through third-party platforms.


Privacy Manifests

WWDC 2023 session 10060:

We have heard from developers like you that it can be challenging to get all the information you need from the great third-party SDKs that your apps depend on. Privacy manifests are a new way for third-party SDK developers to provide information about their privacy practices. This information helps you accurately represent privacy in your app.

Third-party SDK developers can include a privacy manifest in their SDK. They can create a new privacy manifest right from the Xcode navigator, by creating a file named “PrivacyInfo.xcprivacy”.


When you’re building your app to submit to the App Store, Xcode 15 can aggregate all the privacy manifests in your app’s project, and produce a privacy report that summarizes the declared data uses.


In some cases, domains may be used for both tracking and non-tracking functionality. An approach that you or a third-party SDK developer could take is to separate the functionality into different host names. For example, you can host tracking functionality at, and non-tracking functionality at Then, declare as a tracking domain in the privacy manifest.

This is neat, but I still question how useful this is when it’s all based on the honor system. Is there any evidence that nutrition labels do more than provide a false sense of security? Apple seems to be acting like the problem with nutrition labels is that they could be accidentally incorrect.

Dave Verwer:

Privacy nutrition labels on the App Store were a step forward for how informed people could be about what an app is doing with their data, but I’d also bet that a non-trivial amount of them are incorrect in some way. 😬 In the vast amount of cases, I’d expect that to be caused by the inclusion of third-party SDKs.


But that’s not everything, and tucked away at the bottom of the news post was a little note that says everything about how seriously Apple think about this. They say that later this year, they’ll publish “a list of privacy-impacting SDKs (third-party SDKs that have particularly high impact on user privacy)”.

Mysk (Nick Lockwood):

The rogue 2FA app that steals scanned secrets is now ranked 18 on the German App Store for the productivity category. No wonder! The app disguises as a Microsoft app. It is the top hit when you search for “Microsoft Authenticator” and the developer has updated the screenshots in the ad card to highlight the word “Microsoft”. Surprisingly, the product page of the app shows different screenshots with the word “Microsoft” removed.

The app now has 1.2K reviews, as opposed to 18 when we first addressed the app.


Update (2023-08-01): Apple (Hacker News, MacRumors, The Register):

Starting in fall 2023, when you upload a new app or app update to App Store Connect that uses an API (including from third-party SDKs) that requires a reason, you’ll receive a notice if you haven’t provided an approved reason in your app’s privacy manifest. And starting in spring 2024, in order to upload your new app or app update to App Store Connect, you’ll be required to include an approved reason in the app’s privacy manifest which accurately reflects how your app uses the API.

If you have a use case for an API with required reasons that isn’t already covered by an approved reason and the use case directly benefits the people using your app, let us know.

There is now a list of APIs and reasons.

Jeff Johnson:

I don’t even see the point of self-documenting. Either it’s based on the “honor system”, which would be stupid, or Apple is going to test your usage somehow, in which case the privacy manifest is redundant.

Marcin Krzyzanowski:

Despite stupidity of explicitly declaring a reason to use foundation provided API (just prevent it from doing forbidden operations), there’s only ONE reason you can use UserDefaults for. And it’s not even clear how it contradicts API documentation.

The raise of new crazy rejections on the horizon.

all of all, this is plain stupid security by obscurity. I’m 100% sure none of the big players have to care about this, neither Apple applications. as usual just a burden put on the shoulder of small developers.

Paul Haddad:

TIL that using the standard user defaults functionality is going to require special privacy declaration. Other troublesome API includes getting the modification date of a file and figuring out how much disk space is available…

What’s next, you must declare each For loop that you use within your app? Beyond stupid.

Rosyna Keller:

The system makes available certain defaults available to all apps based on global user preferences. These can be used to fingerprint users. Hence, the changes.

Steve Troughton-Smith:

UserDefaults has always been a silent exfiltrator of private data; every framework your app can access (Photos, Music, Safari, telephony, etc) generally needs access to its own UserDefaults store, which left tons of side channels for any app to pick up things like phone number, email address, real name, recent Photos searches, etc, without any kind of permissions prompt. Any library you include in your app, like analytics packages, can yoink all of this without you [as app developer] knowing.


I agree with strengthening user privacy in general, and this approach makes sense for permissions such as user location, camera or contacts.

But in my opinion it serves no purpose for such ubiquitous permission as User Defaults. To borrow a comparison I’ve seen elsewhere, it’s like a network access permission on Android. Every single app declared it, and it became universally accepted and ignored. Or the cookie prompts, which users have been trained to ignore for years.

Andrew Wooster:

Wild overreach from Apple. Can’t read defaults data from other apps in the same app group. Can’t log in crash reports how much disk space is remaining, etc (their own crash reporting system basically does not work). I get that Apple is trying to protect users from being uniquely identified, but there are only a few apps where that sort of data is at the scale where it is valuable. Maybe go after them and not the rest of us.

James Dempsey:

Because clearly individuals devious enough to figure out how to do device fingerprinting won’t be able to come up with plausible-sounding reasons to use those APIs.

Kuba Suder:

I see it as a way of emphasizing that you can’t do some things with it and making you acknowledge it in writing, and then when an app is caught abusing it, they can’t pretend they didn’t know 🤔

Michael Love:

I don’t think it’s aimed at bad actors; it’s aimed at big companies with lawyers, and specifically at their SDKs. Facebook may be utterly amoral, but they’re not going to lie about fingerprinting in a privacy manifest for a library used by tens of thousands of apps; the risks from getting caught are too high.

I don’t see why they would care about getting caught. Worst case, they just stop doing it. It’s not like Apple is going to delete Facebook’s developer account.


It’s kind of amazing how much this tries to ‘both sides’ the issue of developers abusing APIs to do fingerprinting of their users; ‘an additional hoop developers must jump through’, ‘the controversial App Tracking Transparency initiative’, ‘clever developers’, ‘those who have been taking advantage of this loophole’, etc.

Francisco Tolmasky:

This is only true if you believe that Apple has the ability (and desire) to actually implement this in good faith — and we know they don’t. Apps that are clear scams (like fake authenticator apps), get past app review AND remain as the top hit for long periods of time. Meanwhile good apps get jerked around for weeks. You can write the best rules you want, but unless you execute them fairly, it becomes the equivalent of “3 felonies a day”: the ability to arbitrarily deny any app.


Of course it’ll make it worse, it’s another complicated metric. The reviewers already aren’t technical, & now they’ll judge more complicated “defenses”. And it requires more upfront work by devs (the smallest of whom will be hit hardest, huge companies can do it easily), in exchange for the same crapshoot as today. You can be flagged for an description that has never changed, you think adding more places to dock you will make things more “consistent”?

Isaiah Carew:

to anyone that believes apple will use privacy manifests for reasonable policies that benefit users…

like, where have you been? were you asleep for the last ten years of sandbox woes? are you new here?

sorry, but the list of totally onerous rules, missing apis, and riduluously capricious enforcement has jaded me. i can only see this pushing developers and users to more reasonable platforms.

Update (2023-08-17): Apple (via Accidental Tech Podcast):

You only need to supply NSPrivacyAccessedAPITypes for apps and third-party SDKs on iOS, iPadOS, tvOS, visionOS, and watchOS.

In other words, not for macOS—so far.

Update (2023-08-23): Marco Eidinger:

In this blog post, I’ll share a shell script that helps you to identify if your code base might use a required reason API.

Amazon Account Locked Due to Alleged Remarks to Driver

Brandon Jackson (Hacker News, 3):

A package was delivered to my house on Wednesday, May 24, and everything seemed fine. The following day, however, I found that my Echo Show had signed out, and I was unable to interact with my smart home devices.


When I connected with the executive, they asked if I knew why my account had been locked. When I answered I was unsure, their tone turned somewhat accusatory. I was told that the driver who had delivered my package reported receiving racist remarks from my “Ring doorbell”[…].


If the driver’s claims were accurate, I could easily verify them with video footage. Second, most delivery drivers in my area share the same race as me and my family. It seemed highly unlikely that we would make such remarks. Finally, when I asked what time the alleged incident occurred, I realized it was practically impossible for anyone in my house to have made those comments, as nobody was home around that time (approximately 6:05 PM). […] Instead, the Eufy doorbell had issued an automated response: “Excuse me, can I help you?” The driver, who was walking away and wearing headphones, must have misinterpreted the message.


I fully support Amazon taking measures to ensure the safety of their drivers. However, I question why my entire smart home system had to be rendered unusable during their internal investigation.

So their system is that the driver doesn’t have to present any evidence, and you need to record everything just to prove your innocence?


Update (2023-06-23): Louis Rossmann (Hacker News):

Amazon cancels my [7-year-old affiliate] account after exposing account lockout for “racist doorbell”


Amazon accuses me of breaking terms of service.


Amazon’s claims of abuse are wrong

Update (2023-07-25): See also: Hacker News.

Update (2023-10-10): See also: Jarod Facundo.

Monday, June 19, 2023

Inhuman Writing for Google Is Eating the Web

Mia Sato:

Packed with SEO keywords and phrases and generated using artificial intelligence tools, the Get Bullish store blog posts act as a funnel for consumers coming from Google Search, looking for things like Mother’s Day gifts, items with swear words, or gnome decor. On one hand, shoppers can peruse a list of products for sale — traffic picks up especially around holidays — but the words on the page, Dziura says, are not being read by people. These blogs are for Google Search.


It’s a universal experience for small business owners who’ve come to rely on Google as a major source of traffic and customers. But it’s also led to the degradation of Google’s biggest product, Search, over time. The problem is poised to only continue to spiral as business owners, publishers, and other search-reliant businesses increasingly use artificial intelligence tools to do the search-related busywork. It’s already happening in digital media — outlets like CNET and Men’s Journal have begun using generative AI tools to produce SEO-bait articles en masse. Now, online shoppers will increasingly encounter computer-generated text and images, likely without any indication of AI tools.

In April, e-commerce company Shopify — which is used by millions of businesses, including toymaker Mattel and Kim Kardashian’s brand, Skims — launched an AI tool that allows businesses to generate product descriptions using keywords. Other AI companies offer tools that generate entire websites using automation tools, filling sites with business names, fake customer testimonials, and images for less than the price of lunch.


“If I made a blog post that was just what you would want as a person — ‘Here are 25 gift items under $25,’ [added] a picture of each one, a price, and a link — Google would not like it. Google would hate that list,” she says. “So here we are with all this text that is written only for a search engine.”

Via Nick Heer:

The sharp divergence between writing for real people and creating material for Google’s use has become so obvious over the past few years that it has managed to worsen both Google’s own results and the web at large. The small business owners profiled by Sato are in an exhausting fight with automated chum machines generating supposedly “authoritative” articles. When a measure becomes a target — well, you know.


At the same time, I have also noticed a growing number of businesses — particularly restaurants — with little to no web presence. They probably have a listing in Apple Maps and Google Maps, an Instagram page, and a single-page website, but that could be their entire online presence.


Google Domains Shutting Down

Abner Li:

In an unexpected announcement today, Google Domains is “winding down following a transition period,” with Squarespace taking over the business and assets.


Google cited “efforts to sharpen our focus” in selling the Google Domains registrar business, which launched in 2014 as a big proponent of HTTPS and top-level domains (TLDs) as of late. The service exited beta in 2022.

Gergely Orosz (Hacker News):

This is 10 million domains sold. Millions of customers like me learn again (and again!) that you cannot trust Google to keep their own products alive.

Show me another vendor that throws away customers like this…


Also: as a Google Domains customer, why am hearing about this news from Squarespace’s press release?

Google (my provider, and where I’m a customer) has not told me this is happening.

John Gruber:

I had an alert that the new domain name I registered would be put on “hold” today if I didn’t verify the email address I used to register it. I hadn’t seen any verification emails from Google about it. I told Google Domains to send another verification email. Still didn’t see it. Turns out that even though I used an address to register the domain, every single email from Google Domains was being flagged as spam. So Google’s own email service considers all emails from Google’s own domain name service to be spam.

David Heinemeier Hansson:

Google will eventually kill every single service you care about, if they can’t find a way to directly monetize it with ads at a scale of billions. They’re institutionally incapable of being in the product or service business, because neither products nor services butter Google’s bread. Advertisement does.

See also: Hacker News.


Safari 17 Link Tracking Protection


In Safari 17, Private Browsing gets even more private with added protection against some of the most advanced techniques used to track you. Technical changes include:

  • Adding blocking for known trackers and fingerprinting.
  • Adding support for mitigating trackers that map subdomains to third-party IP addresses.
  • Adding blocking for known tracking query parameters in links.
  • Adding noise to fingerprintable web APIs.
  • Adding console log messages when blocking requests to known trackers.
  • Adding support for blocking trackers that use third-party CNAME cloaking.
  • Adding support for Private Click Measurement for direct response advertising, similar to how it works for in-app direct response advertising.

Benjamin Mayo:

Adding tracking parameters to links is one way advertisers and analytics firms try to track user activity across websites. Rather than storing third-party cookies, a tracking identifier is simply added to the end of the page URL. This would circumvent Safari’s standard intelligent tracking prevention features that block cross-site cookies and other methods of session storage.

Navigating to that URL allows an analytics or advertising service at the destination to read the URL, extract those same unique parameters, and associate it with their backend user profile to serve personalized ads.

Cory Underwood:

Many of these items are already handled by Webkit’s Tracking Prevention, which historically hasn’t leveraged the full suite of capabilities when used in Private Mode, as nothing in private mode was persisted beyond the tab being closed.


I also believe that the blocking for known trackers is likely to leverage the tracker list provided by DuckDuckGo, in much the same way that IP Address Obscurification(released in iOS15) works today. This is new behavior as previously the identified domains would be routed across the internet to mask the user’s IP Address. Now they will be blocked at the network layer and the external resource won’t be loaded in a way similar to what Brave’s Shield technology does today. This may cause website features to fail unless you have designed the site to fail gracefully. There is a high likelihood that this will affect attribution and analytics platforms and prevent them from being loaded in Private Browsing instances.

Jeff Johnson:

In particular there’s a QUERY_PARAM.wplist file that contains a list of URL query parameters to be removed. This list currently comprises 25 of the usual suspects, click identifiers such as fbclid (Facebook), gclid (Google), and msclkid (Microsoft).

Incidentally, most of these parameters, and others not on Apple’s list, are already automatically removed by my Safari extension StopTheMadness.


I’ve been informed by a reliable source that Apple’s QUERY_PARAM.wplist list of tracking query parameters came from

See also: MacRumors.


Francisco Tolmasky:

This Safari query parameter removal thing is just going to become a cat-and-mouse game, right? Google can easily start using gclid2 or even switch to using something like “a,” that you’d be less willing to indiscriminately chop off the URL. Eventually, you could even imagine a dynamic query key scheme, where you can identify it with a credit-card-style hash function. For example, if f(KEY) = (char1 + char2 + … + charN) % 64 = 39, then it knows that that query key is its tracking ID.


My point is that you only feel safe mutating query parameters if you know for sure that they are tracking query parameters. You wouldn’t for example ever want to either remove, nor mutate, “q=”. That would break search. If trackers just start using less identifiable query keys, then it becomes very difficult to do anything to them without also potentially breaking legitimate websites.

Board Game Arena Acquisition

Asmodee (in 2021):

Asmodee announces the acquisition of Board Game Arena (BGA), the digital multiplayer board game platform, to provide BGA with high visibility among the consumer market and accelerate the release of Asmodee’s long-awaited successes by players.

Founded in 2010 by Grégory ISABELLI and Emmanuel COLIN, BGA has emerged as the global leader in online board games. The platform provides official online versions of more than 250 games, supported on 40 languages, to more than 5 million members around the world.

Dan Luu:

I wonder if it’s possible for a good platform to unseat BGA as the default place people play board games online within a decade. BGA offers a more mainstream-friendly UX than the major alternatives (BSW, yucata), but it’s comically bad on both performance and correctness (I frequently see blatant concurrency bugs that appear to come from not thinking about concurrency at all, serious rules errors go unfixed for years, etc.)

My feeling is that this is effectively impossible because you’d need to have hundreds of games to compete but, with how little money there is in online board games, the only way to get there is to let basically anyone implement games for your platform with little quality control, guaranteeing extremely buggy code.


When BGA got acquired, there was grumpiness about how the owners made $$ from volunteer labor for an indie site.

Some predicted this would cause mass migration to yucata but most devs doing free labor for a platform just want to be on the biggest platform and most users want some combination of the biggest platform and the least janky UX[…]


Friday, June 16, 2023

Game Porting Toolkit

Christina Warren:

But buried in the keynote was a macOS feature that Apple should have called out with more fanfare: DirectX 12 support for macOS. As PC gamers already know, this software support means the floodgates are open for some real games — not that casual Apple Arcade stuff — on Mac. Maybe, just maybe, this is the beginning of the end to the old joke that Macs can’t play AAA games.

It turns out that Apple added DirectX 12 support via something it is calling the Game Porting Toolkit, a tool Apple is offering to developers to see how their existing x86 DirectX 12 games work on Macs powered by Apple silicon. That toolkit largely takes place as a 20,000 line of code patch to Wine, a compatibility layer designed to bring support for Windows games to platforms such as Linux, BSD, and macOS.


DirectX 12 support within the Game Porting Toolkit skips right over all of these translations. With zero need to modify any game code, games such as Grand Theft Auto V, Diablo IV, Cyberpunk 2077, and Hogwart’s Legacy can now run on Apple silicon Macs almost as if they’re native.

You see, Apple did talk about GPT at WWDC.

Dan Moren:

Gaming on the Mac has been a fraught experience for decades, and it’s certainly possible that this toolkit will follow in the footsteps of other failed appeals to the gaming market. But one significant difference is that all of this technology is here, now and already works. You can, as numerous YouTube videos prove, download and run a recent Windows title and have it play surprisingly well. Will this entice developers to the previously untapped Mac market? Unclear, of course, but you can’t say Apple hasn’t made it easy for them.

Thomas Clement:

I really don’t think the game porting toolkit is going to be the big deal that some people make it to be. It’s great that it exists and will help to port games but game developers and studios still need to care and want to invest in the Mac platform. There’s still a relatively big cost involved, this is not “Apple has implemented the DirectX API in macOS, ship your Windows game as-is” as some seem to believe.

Colin Cornaby:

GPT titles can’t be redistributed through the DX12 translator. And they can’t be distributed to any stores. No converted game is output.


The next step after GPT is “Now do a real Metal port.” It’s a demo piece - that’s it. There’s no output, there’s no starting point.

Steve Troughton-Smith:

Apple’s Game Porting Toolkit should be built into macOS, Proton-style, and Apple should provide a completely streamlined ‘just check a checkbox’ wrapping tool/SDK such that any Windows game developer can submit to the Mac App Store. If it’s good enough for iOS games, it should be good enough for Windows games.

Guy English:

If you’re chasing compatibility with another platform then you’re behind the play and you’ll never achieve comparable results. That’ll only serve to cement the Mac as a third rate platform. If a porting path is presented and, importantly, the games are met with market success, then the tide can start to shift.

Steve Troughton-Smith:

The Mac is 40 years old 😅 Apple has burned every bridge with game developers it can. You can no longer buy a Mac you can put a graphics card into. Apple’s not on speaking terms with the top game engine company of the era. What tide is going to turn? I want to live in that world.

See also: Bring your game to Mac.


Update (2023-06-19): Thomas Clement:

The advent of cloud gaming might very well finish killing off native Mac games. I’ve been testing GeForce NOW for a few days, this thing is insane, it just works. To the point where I even find myself playing Mac compatible games with it, better graphics and performance, 32-bit & intel support, no installations needed. For the first time I’m considering buying Windows-only games. But alas not all games are available so we still have a game availability problem.

Swift Proposal: Init Accessors


Swift applies definite initialization analysis to stored properties, stored local variables, and variables with property wrappers. Definite initialization ensures that memory is initialized on all paths before it is accessed. A common pattern in Swift code is to use one property as backing storage for one or more computed properties, and abstractions like property wrappers and attached macros help facilitate this pattern. Under this pattern, the backing storage is an implementation detail, and most code works with the computed property, including initializers.


The ad-hoc nature of property wrapper initializers mixed with an exact definite initialization pattern prevent property wrappers with additional arguments from being initialized out-of-line. Furthermore, property-wrapper-like macros cannot achieve the same initializer usability, because any backing storage variables added must be initialized directly instead of supporting initialization through computed properties. For example, the @Observable macro applies a property-wrapper-like transform that turns stored properties into computed properties backed by the observation APIs, but it provides no way to write an initializer using the original property names like the programmer expects[…]


This proposal adds init accessors to opt computed properties on types into definite initialization that subsumes initialization of a set of zero or more specified stored properties, which allows assigning to computed properties in the body of a type’s initializer[…]


Bike 1.12

Jesse Grosjean:

Bike Outliner adds inline navigation buttons so you can zoom through your outline with just your mouse. It also adds a navigation bar with back and forward history and breadcrumbs.


New inline navigation buttons are added after rows with children. Use them to zoom through your outline with just your mouse. They are a nice visual indicator of where you are and where you can go.

I don’t think I’ve seen an outliner that does focus/hoist this way before.


Find Any File 2.4

Thomas Tempelmann (tweet):

Scripted Rules allow for custom file matching with Lua or JavaScript code.


Rule File Content now looks inside zip files, including .docx (Word) and .xlsx (Excel) files.


The popup menu with the search locations includes a Recent Locations menu that lists folders you had previously chosen for a search.

If you hold down the command key when double clicking on items in the results, they’re not opened but revealed in Finder instead.

Searching for files by name in Finder hasn’t worked very well since Mac OS X Tiger, if not earlier. I mostly use EagleFiler for this, but for files that it isn’t managing I recently started using Find Any File instead of the find command, in many cases. It reminds me of Mac OS 8—pre-Sherlock—in a good way.

Find Any File Scripts:

This makes it possible to create very specific and complex search rules.


Later versions of FAF may add more scripting features, such as for displaying custom columns and more information about listed files and folders, and offering more commands in the contextual menu for found items.


Basically, you have to implement a function named match that takes one argument, and returns either true or false (returning nothing is fine, too, and is the same as returning false). The one argument is an object providing access to many properties of the to-be-checked item (i.e. either a file or a folder).

I like where this is going. Unfortunately, enabling the JavaScript debugger for testing doesn’t work with notarization, so you need to downoad a separate version of the app if you want to do that.

Update (2023-06-29): Pierre Igot:

Absolutely delighted to find that, in macOS Ventura, doing a file search in a specific folder in the Finder is working as well as ever.

I mean, who ever searches for files in a specific folder using key words that appear in their file names? In 2023?

Thursday, June 15, 2023

Privacy and Security in macOS 14

WWDC 2023 session 10053:

Even though the photos look like they are part of your app, they are rendered by the system and only shared when selected, so the user’s photos always remain in their control.


Prior to macOS Sonoma, when a user wants to screen share their presentation in a virtual video conference, they need to grant the conferencing app permission to record the full screen via the Settings app, resulting in a poor experience and risk of oversharing.

With the new SCContentSharingPicker API, macOS Sonoma shows a window picker on your behalf where people can pick the screen content that they want to share.


Second, if you prefer to provide your own UI for creating events, there is a new add-only calendar permission, allowing your app to add events without access to other events on the calendar.


Without any changes on your side, macOS Sonoma will ask for permission when your app accesses a file in another app’s data container.


To do so, you can specify an NSDataAccessSecurityPolicy in your app’s Info.plist, to replace the default same-team policy with an explicit AllowList.


In macOS 14 and later, the operating system uses your app’s code signature to associate it with its sandbox container. If your app tries to access the sandbox container owned by another app, the system asks the person using your app whether to grant access. If the person denies access and your app is already running, then it can’t read or write the files in the other app’s sandbox container. If the person denies access while your app is launching and trying to enter the other app’s sandbox container, your app fails to launch.

The operating system also tracks the association between an app’s code signing identity and its sandbox container for helper tools, including launch agents. If a person denies permission for a launch agent to enter its sandbox container and the app fails to start, launchd starts the launch agent again and the operating system re-requests access.

Jeff Johnson:

I didn’t see this [alert] the first time I ran the app, but I saw it every time I modified and re-ran the app. The reason, I discovered eventually—by remembering what I read yesterday (the above quotes)—is that the app was both sandboxed and ad hoc code signed. Ad hoc code signing is indicated by “Sign to Run Locally” in Xcode.

You’ll frequently see ad hoc signing in open source Xcode projects that are distributed on the internet, because otherwise the project would depend on the developer’s personal team and code signing certificates.


Every time I modified the app, it got a different ad hoc code signature, which is why Sonoma is complaining on subsequent launches. These cancel-or-allow style dialogs do not appear on launch for ad hoc signed apps that aren’t sandboxed, because they don’t have containers.


I said, “I don’t know yet whether there’s a way for a non-sandboxed app to preserve the granted file access across launches.” The answer appears to be no.


Update (2023-06-19): Howard Oakley:

Until Apple tells us otherwise, I think it’s clear that nothing is changing significantly in sandboxing and notarization that would prevent hobbyists and others who aren’t developers from continuing what they do currently, nor should this hinder the distribution and use of source code.

Update (2023-06-23): macOS 14 Beta 2 Release Notes:

/usr/bin/syspolicy_check is a new command line tool to help determine if the provided macOS application will pass the current running configurations’ system policy. This includes the same checks performed by the Apple notary service and other macOS Trusted Execution layers such as codesign, Gatekeeper, XProtect, and more.


/usr/bin/gktool is a new command line tool to assess Gatekeeper Policy on applications. gktool can be called to pre-warm the system cache so users do not see the ‘Verifying…’ dialog on first launch of an application.

spctl is still there, too.

Update (2023-06-29): Brian Webster:

  1. The top message in the prompt doesn’t tell the user which app’s data is being read. In this case, my NSAppDataUsageDescription string explains what PowerPhotos is reading, but there’s no actual relation between that message and what files are actually being read. In other words, a malicious app can easily lie to the user here.
  2. Unlike most of macOS’ security prompts, this one is displayed every single time the user launches your app, regardless of whether they’ve granted permission in the past. Not only is this just annoying, but this will quickly train the user to dismiss these prompts without reading them, which undercuts the whole purpose of the feature in the first place.

I’ve filed a Feedback (FB12473837) with Apple that basically suggests that these prompts should work more along the line of the existing “Automation” prompts, which are triggered when one app sends an Apple event to another app.

Update (2023-07-26): I am getting reports that sometimes Sonoma doesn’t prompt for App Management access. It just fails the operation with a permissions error.

ODNI Report on Commercially Available Information

Byron Tau and Dustin Volz:

The vast amount of Americans’ personal data available for sale has provided a rich stream of intelligence for the U.S. government but created significant threats to privacy, according to a newly released report by the U.S.’s top spy agency.

Commercially available information, or CAI, has grown in such scale that it has begun to replicate the results of intrusive surveillance techniques once used on a more targeted and limited basis, the report found.


It represents the first known attempt by the U.S. government to examine comprehensively how federal agencies acquire, share and use commercially available data sets that are often compiled with minimal awareness by the public that its data is being collected and resold.

The report is available here.

Zack Whittaker:

The Office of the Director of National Intelligence (ODNI) declassified and released the January 2022-dated report on Friday, following a request by Sen. Ron Wyden (D-OR) to disclose how the intelligence community uses commercially available data. This kind of data is generated from internet-connected devices and made available by data brokers for purchase, such as phone apps and vehicles that collect granular location data and web browsing data that tracks users as they browse the internet.

Dell Cameron (Hacker News):

The advisers decry existing policies that automatically conflate being able to buy information with it being considered “public.” The information being commercially sold about Americans today is “more revealing, available on more people (in bulk), less possible to avoid, and less well understood” than that which is traditionally thought of as being “publicly available.”

Perhaps most controversially, the report states that the government believes it can “persistently” track the phones of “millions of Americans” without a warrant, so long as it pays for the information.


It is no secret, the report adds, that it is often trivial “to deanonymize and identify individuals” from data that was packaged as ethically fine for commercial use because it had been “anonymized” first. Such data may be useful, it says, to “identify every person who attended a protest or rally based on their smartphone location or ad-tracking records.” Such civil liberties concerns are prime examples of how “large quantities of nominally ‘public’ information can result in sensitive aggregations.”

Nick Heer:

Regulations have been slowly taking effect around the world which more accurately reflect these views. But there remains little national control in the U.S. over the collection and use of private data, either commercially or by law enforcement and intelligence agencies; and, because of the U.S.’ central location in the way many of us use the internet, it represents the biggest privacy risk. Even state-level policies — like California’s data broker law — are ineffectual because the onus continues to be placed on individual users to find and remove themselves from brokers’ collections, which is impractical at best.


Update (2023-12-19): Joseph Cox:

A section of the Navy bought access to a tool that gave the Pentagon “global” surveillance data via an adtech company that is owned by a U.S. military contractor, according to a Navy contract obtained by 404 Media. Beyond its global scale, the document does not explicitly say what specific sort of data was included in the sale. But previous reporting from the Wall Street Journalhas shown that the marketing agency and government contractor responsible are part of a supply chain of location data harvested from devices, funneled through the advertising industry, onto contractors, which then ends with U.S. government clients.

Snowden Ten Years Later

Matthew Green (in 2019, Hacker News):

Edward Snowden recently released his memoirs. In some parts of the Internet, this has rekindled an ancient debate: namely, was it all worth it? Did Snowden’s leaks make us better off, or did Snowden just embarass us and set back U.S. security by decades? Most of the arguments are so familiar that they’re boring at this point. But no matter how many times I read them, I still feel that there’s something important missing.


And while the leaks themselves have receded into the past a bit — and the world has continued to get more complicated — the technical concerns that Snowden alerted us to are only getting more salient.


What’s harder to present in a chart is how different attitudes were towards surveillance back before Snowden. The idea that governments would conduct large-scale interception of our communications traffic was a point of view that relatively few “normal people” spent time thinking about — it was mostly confined to security mailing lists and X-Files scripts. Sure, everyone understood that government surveillance was a thing, in the abstract. But actually talking about this was bound to make you look a little silly, even in paranoid circles.

That these concerns have been granted respectability is one of the most important things Snowden did for us.

Barton Gellman (in 2020):

Someone had taken control of my iPad, blasting through Apple’s security restrictions and acquiring the power to rewrite anything that the operating system could touch. I dropped the tablet on the seat next to me as if it were contagious. I had an impulse to toss it out the window. I must have been mumbling exclamations out loud, because the driver asked me what was wrong. I ignored him and mashed the power button. Watching my iPad turn against me was remarkably unsettling. This sleek little slab of glass and aluminum featured a microphone, cameras on the front and back, and a whole array of internal sensors. An exemplary spy device.


On the Gmail page, a pink alert bar appeared at the top, reading, “Warning: We believe state-sponsored attackers may be attempting to compromise your account or computer. Protect yourself now.”


A dozen foreign countries had to have greater motive and wherewithal to go after the NSA documents Snowden had shared with me—Russia, China, Israel, North Korea, and Iran, for starters. If Turkey was trying to hack me too, the threat landscape was more crowded than I’d feared.


The MacBook Air I used for everyday computing seemed another likely target. I sent a forensic image of its working memory to a leading expert on the security of the Macintosh operating system. He found unexpected daemons running on my machine, serving functions he could not ascertain.

Via Bruce Schneier:

It’s an interesting read, mostly about the government surveillance of him and other journalists. He speaks about an NSA program called FIRSTFRUITS that specifically spies on US journalists. (This isn’t news; we learned about this in 2006. But there are lots of new details.)

Jessica Lyons Hardcastle (Hacker News):

The world got a first glimpse into the US government’s far-reaching surveillance of American citizens’ communications – namely, their Verizon telephone calls – 10 years ago this week when Edward Snowden’s initial leaks hit the press.


In the decade since then, “reformers have made real progress advancing the bipartisan notion that Americans’ liberty and security are not mutually exclusive,” Wyden said. “That has delivered tangible results: in 2015 Congress ended bulk collection of Americans’ phone records by passing the USA Freedom Act.”


Wyden also pointed to the sunsetting of the “deeply flawed surveillance law,” Section 215 of the Patriot Act, as another win for privacy and civil liberties.

That law expired in March 2020 after Congress did not reauthorize it.


One thing we do know about Section 702 is that it has been widely misused: more than 278,000 times by the FBI between 2020 and early 2021 to conduct warrantless searches on George Floyd protesters, January 6 rioters who stormed the Capitol, and donors to a Congressional campaign.


As EFF noted: “There are serious issues raised by this tool and by 12333 more broadly. Despite consistent calls for reform, however, very little has occurred and 12333 mass surveillance, using XKeyscore and otherwise, appears to continue unabated.”

Bruce Schneier:

Now, ten years later, I offer this as a time capsule of what those early months of Snowden were like.

Nick Heer:

I remember the week when articles based on these disclosures began showing up. I remember being surprised not by the NSA’s espionage capabilities — that much was hinted at — but by its brazen carelessness about operating at a scale which would ensure illegal collection. Snowden’s heroic whistleblowing gave the world a peek into this world, but it was ever so brief. There is little public knowledge of the current capabilities of the world’s most intrusive surveillance agencies — by design, of course — and even the programmes exposed by Snowden continue to be treated with extreme secrecy. My FOIA requests from that week remain open.


Update (2023-07-05): Robert at Objective Development:

Ten years after Snowden, ten years of activism and data protection laws have not made things better – rather the opposite. We leave digital traces everywhere and they can be exploited using methods that are legal even under today’s laws. With the advent of apps, digital services, and the IoT, more and more of our lives is taking place online. AI makes it all the easier to exploit these traces. And some players don’t even care about legality.


Use tools to protect your data. Choose browsers focusing on privacy, not on features. Choose your search engine carefully — after all, you share many of your thoughts with it. Use application firewalls like Little Snitch to visualize all those data connections which normally occur under the hood and to block those connections that undermine your privacy.

Apple Execs on Facebook (2011)

Scott Forstall (Hacker News):

I just discussed with Mark [Zuckerberg] how they should not include embedded apps in the Facebook iPad app--neither in an embedded web view or as a directory of links that would redirect to Safari.

Not surprisingly, he wasn’t happy with this as he considers these apps part of the “whole Facebook experience” and isn’t sure they should do an iPad app without them. Everything works in Safari, so he is hesitant to push people to a native app with less functionality, even if the native app is better for non-third party app features.


I had thought that it would be relatively clear which links in Facebook are app-links and which are non app-links. App-links would be things like a poker game. Web links (non app-links) would be things like the NYT. But according to Mark, there is no obvious way to distinguish between a poker game and the NYT. Both are Facebook developers and provide Facebook integration. This is also true of many bloggers. He claims they have over 100,000 developers/points of web integration.

It would be unfortunate to disallow any web post in the Facebook app, including blog posts.

Phil Schiller:

I understand why FaceBook wants to create a market of 3rd party HTML 5 apps that users run from a native FaceBook app on the iPad, and realize that they can always run FaceBook on the iPad in Safari and have these apps in Safari as well anyway, but if we approve of this (regardless of the credits issue) we would then need to allow all developers to do the same thing.

So, for example If Adobe comes in with an app that links to new web apps that they promote we need to allow that “app store” in, even worse Google could come up with an app that runs all their 3rd party Chrome web apps and we would need to allow that in too! I don’t see why we want to do that.

Scott Forstall:

I agree we don’t want to open up a slippery slope for Google, Adobe, or even Amazon to start linking out to a Kindle store in Safari.

Francisco Tolmasky:

Amazing to read pages of AppStore rule minutia (FB Credits vs. what links “look like apps”) with basically zero regard for user experience (Scott comes closest by acknowledging he wouldn’t use a gutted Facebook app). Everything boils down to their position vs. other players like Adobe. I would have imagined they convinced themselves that “We can’t allow this because all those apps are junk and we want a pristine experience on the iPad!” But nope, it’s all just business.


Wednesday, June 14, 2023

Microsoft Edge Sends Images You View to Microsoft

Taras Buria (via Slashdot):

Not so long ago, Microsoft Edge ended up in hot waters after users discovered a bug leaking your browser history to Bing. Now you may want to toggle off another feature to ensure Edge is not sending every picture you view online to Microsoft.

Edge has a built-in image enhancement tool that, according to Microsoft, can use “super-resolution to improve clarity, sharpness, lighting, and contrast in images on the web.” Although the feature sounds exciting, recent Microsoft Edge Canary updates have provided more information on how image enhancement works.

The browser now warns that it sends image links to Microsoft instead of performing on-device enhancements.


Reddit API AMA and User Revolt

Sarah Perez (Hacker News):

Reddit’s unpopular decision to revise its API pricing in a move that’s forcing third-party apps out of business has taken a weird turn. In an AMA hosted today by Reddit co-founder and CEO Steve Huffman, aka u/spez on the internet forum site, the exec doubled down on accusations against the developer behind the well-liked third-party app Apollo, which the company had previously accused of operating inefficiently and not being a good “API” user.


In the AMA, one user asked Huffman to clarify, “what were you thinking with your attempt to discredit Apollo by claiming that Christian threatened and blackmailed you?”

The response was surprising.

Wes Davis (Hacker News, John Gruber):

The version of Reddit we’ll see over the next few days may be a shell of itself. More than 100 subreddits have already gone dark, and thousands more plan to follow in protest of Reddit’s coming API changes, according to the website Reddark, which is tracking the protests.


In a Reddit AMA on Friday, Huffman was met with seemingly universal anger. There were a lot of f-bombs from commenters. A lot of people called him a coward. If there are positive comments, I didn’t find them.

Subreddit moderators and third-party Reddit app developers say they’ve lost trust in Huffman and Reddit’s leadership. Apollo developer Christian Selig accused Huffman of “blatantly lying” in a phone call to some subreddit moderators.

Joe Rossignol:

Apple-related subreddit /r/apple has gone dark in protest of Reddit’s upcoming API pricing changes affecting third-party Reddit apps. The subreddit is now private, meaning that users can no longer view or submit posts, and the moderators behind the community said it will remain that way for the next 48 hours, or potentially longer if necessary.

Jay Peters (Hacker News):

Moderators of many Reddit communities are pledging to keep their subreddits private or restricted indefinitely.

Pyrope2 (Hacker News):

Is there some setting that I haven’t yet found to correct this, or did they make a change to essentially disable Reddit for phone users without the app?

Dare Obasanjo:

Reddit is testing blocking access to their mobile website to encourage users to download the app. I can’t believe they found a way to make their mobile web experience even more user hostile. 🤦🏾‍♂️

Om Malik:

Reddit is rumored to have plans to go public, but they need better leadership than the current team. Huffman has shown no leadership skills. He doesn’t know how to read the room. Most importantly, he lacks the social empathy to lead a social platform. Even more disappointing is the lack of comments or intervention from Reddit co-founder Alexis Ohanian, the always chatty — who seems to have advice for every other founder, except for his co-founder.


In an attempt to monetize the content generated by the community, Huffman forgot that it is the people who make the platform. The community is the platform. It is something the owners of social media platforms forget.


It happened with MySpace. It has happened with Twitter. It is now happening with Reddit. They never learn from past mistakes. They assume that because they own the platform, they own the community. Every time they forget that important thing, they erode the community’s trust. And once that trust goes, so does the unfettered loyalty. People start looking for options.

Daniel Feldman:

Digg was one of the most popular sites on the Internet in 2010. By 2012, its users had essentially all left, and the skeleton of the company sold for $500,000.

Rory Mir (Hacker News):

This freedom for communities to experiment with and extend the platform let it continue to thrive while similar sites, like Fark and Digg, lost major chunks of their user base after making controversial and restrictive design choices to raise profitability.

David Pierce and Nilay Patel (Hacker News):

In the midst of the platform blackout, we sat down with Selig to talk about what he wants from Reddit, why he still believes in the platform, and whether he sees a chance to keep Apollo alive beyond the end of the month.

Mia Sato and Jay Peters (MacRumors, Hacker News):

In an internal memo sent Monday afternoon to Reddit staff, CEO Steve Huffman addressed the recent blowback directed at the company, telling employees to block out the “noise” and that the ongoing blackout of thousands of subreddits will eventually pass.


More than 8,000 Reddit communities have gone dark in protest, and while many plan to open up again on Wednesday, some have said they’ll stay private indefinitely until Reddit makes changes.

Huffman says the blackout hasn’t had “significant revenue impact” and that the company anticipates that many of the subreddits will come back online by Wednesday.

Sebastiaan de With:

Reddit’s AMA with its CEO on their API (read: third party app killing) is a train wreck. These are remarks from their CEO. Why does Reddit consistently have such terrible leadership?

Before this, Huffman had no public interactions with the community or website for 10 months. Imagine the CEO of Facebook or twitter not posting for a year.

Reddit communities should go dark to demand this guy leaves. This is some of the most incompetent management I’ve seen.

Matthew Cassinelli:

I have zero faith in Steve Huffman’s ability to lead Reddit.

What kind of chief executive officer posts this comment after a massive community backlash?

Colin Cornaby:

The power dynamics here are just weird. However things went down - the CEO of Reddit should be professional because they’re the CEO of Reddit. A polite “We’re sorry to see Christian feels this way and we’re sad to see Apollo shut down” would have been fine. Instead you get this from someone who wants to be the CEO of a multi billion dollar public company.

Colin Devroe:

When does Alexis announce that he’s spoken to the board and they are replacing Reddit’s CEO?


Having so many subreddits set to private has also ruined Google search for me. So that’s cool.

Muskaan Saxena (Hacker News, Jay Peters, Hacker News):

However, now that so many of these subreddits have gone private it’s almost impossible to ignore the impact it’s made on the everyday Google experience.

SpicyThunder335 (Hacker News):

Reddit has budged microscopically. The announcement that moderator access to the ‘Pushshift’ data-archiving tool would be restored was welcome. But our core concerns still aren’t satisfied, and these concessions came prior to the blackout start date; Reddit has been silent since it began.

Dmitry Mazin (Hacker News):

A lot of the analyses have examined the issue as if Reddit is an independent company preparing for an IPO. That is, they have examined Reddit’s attempts to capture its value as a training corpus or its attempts to show its users more ads. But what if we thought of Reddit as, functionally, subservient to OpenAI?


It’s no secret that Reddit’s API changes are being driven significantly by the desire to capture the value of its corpus. I think the missing piece, though, is that it doesn’t matter if anyone buys the data or not. The important piece is that it’s easiest for OpenAI to get the data (given that companies with co-investors help each other), somewhat harder for Google, and extremely hard for upstarts.


I want to address one strong idea that counters my theory: closing off 3rd party API access mostly serves an IPO, not OpenAI. If Reddit merely wanted to restrict the ability to scrape its data, they could have done so without killing off clients – e.g. via licensing deals. However, perhaps if access to training data is seen as an elbows-out brawl, I could see how Reddit would be extremely protective of its data. I mean, lyrics websites, map makers, and dictionaries go to great lengths to protect their data. It would not be a giant stretch for Reddit to do so as well.

Casey Newton (Hacker News):

Huffman is right that, in the end, the whole situation reflects a product problem: the native Reddit apps, both on desktop and on mobile, are ugly and difficult to use. (In particular, I find the nested comments under each post bizarrely difficult to expand or collapse; the tap targets for your fingers are microscopic.) Reddit didn’t really navigate the transition to mobile devices so much as it endured it; it’s little wonder that millions of the service’s power users have sought refuge in third-party apps with more modern designs.

On the whole, though, Huffman’s bet against the sustained energy of the Reddit community appears to have misfired.


One criticism I heard of my piece yesterday is that Reddit had given developers more than 30 days’ notice, contrary to what some developers have complained about. But when Reddit first announced that it would charge for API access, it did not specify prices or what kinds of apps would be affected. The communication failure led to widespread confusion about how tools related to content moderation, accessibility, and independent research would be affected, and Reddit has been trying to dig its way out of that hole ever since.

Ryan Jones:

Reddit CEO Spez just put their IPO and his job on deathwatch.

Here’s where doubters are wrong:

  • Redditors aren’t going to leave
  • Much worse
  • They’re going to stay and BURN. IT. ALL. DOWN. around Spez.

Dare Obasanjo:

Is anyone else 100% confident that if any popular subreddits stay dark for over a week that Reddit admins will just hijack it from the moderators and make it public?

They’ve shown they don’t care about the moderators and community enough that this seems like a logical next step.

Francisco Tolmasky:

If in January of last year you would have told me that both Twitter and Reddit would decide to light themselves on fire to the point that that I wouldn’t be able to use anymore, I don’t think I would have believed you. Now I’m worried that by this time next year I won’t be able to use YouTube anymore or something.

Mike Rockwell:

I would prefer that everyone leave Reddit and move to the open web for distributed, open source, community-run alternatives. We’ve allowed the current crop of social media companies to overstay their welcome. We should have all moved on from Reddit, Twitter, Facebook, and the rest of the bunch years ago.

But — brace yourself — I don’t think Reddit’s new API pricing is catastrophic for the third-party app ecosystem.

See also:


Update (2023-06-16): Anthony Cuthbertson (Hacker News):

Dozens of popular Reddit communities have pledged to continue a blackout indefinitely after no resolution was reached over a pricing dispute.

ModCodeofConduct (Hacker News):

We regularly enforce our subreddit and moderator-level rules. As you point out, this means that we have policies and processes in place that address inactive moderation (Rule 4), mods vandalizing communities (Rule 2), and subreddit squatters (also Rule 4). When rules like these are broken, we remove the mods in violation of the Moderator Code of Conduct, and add new, active mods to the subreddits.


If a moderator team unanimously decides to stop moderating, we will invite new, active moderators to keep these spaces open and accessible to users.

Jay Peters:

Thousands of Reddit communities are still dark in protest of the API changes that are forcing some third-party developers to shut down their apps. It’s a startling change for many members of the Reddit community, but it’s one that Reddit CEO Steve Huffman tells The Verge that he’s fine with making. Those third-party apps, in his eyes, aren’t adding much value to the platform.


Huffman didn’t have an answer for why the deadline was so short, beyond wanting there to be a deadline.


You can read our full interview with Reddit CEO Steve Huffman here.


While the company does “respect the community’s right to protest” and pledges that it won’t force communities to reopen[…]

That seems to contradict the above post.

Juli Clover (Hacker News):

Reddit also just published a blog post with “key facts” about the API updates. In the post, Reddit says that “dissent, debate, and discussions are foundational parts of Reddit,” and that it respects the right of its community to protest, so long as mods follow the Moderator Code of Conduct. The Moderator Code of Conduct is what Reddit is citing in messaging to moderators about moderation teams being removed from closed communities.

Lindsay Dodgson (Hacker News):

Reddit CEO Steve Huffman says the site’s mods are too powerful. In an interview on Thursday, he told NBC that he planned to change the rules so users had the power to vote the moderators of subreddits out.

Jay Peters and Mia Sato (Hacker News):

Some moderators of Reddit communities participating in the protest against API changes today got messages from the company: work to reopen your subreddits or else.

Zabil (Hacker News):

The Reddit App has a suspiciously high number of recent 5 star, one word reviews on the Google Play Store

Eric Schwarz (kbin, Hacker News):

Can confirm that #Reddit undeleted my comments after I deleted them and my account.

I think that technically makes them worse than Meta and maybe Twitter.

See also: Louis Rossmann (Hacker News) and Subreddit Migration Directory (Hacker News).

Update (2023-06-19): David Ingram:

In an interview Thursday with NBC News, Reddit CEO Steve Huffman praised Musk’s aggressive cost-cutting and layoffs at Twitter, and said he had chatted “a handful of times” with Musk on the subject of running an internet platform.

Huffman said he saw Musk’s handling of Twitter, which he purchased last year, as an example for Reddit to follow.

John Gruber:

Either you see the value of a great user experience or you don’t. No surprise that the CEO of a company whose website is so bad that they’ve had to keep the old one around as an alternative doesn’t see the value Apollo adds to the Reddit experience.

Ivan Mehta (Hacker News):

In one of the interviews, Huffman even called protesting moderators “landed gentry.”


He added that he plans to make changes to moderator policies so users can vote them out. Currently, a higher-ranking moderator — or the company — can boot out moderators. Incidentally, a r/Apple moderator posted on Twitter (via 9to5Mac) that Reddit was threatening to remove moderators who are staging an indefinite blackout.


Both admins and even the CEO himself in last week’s AMA are on record saying they “respect a community’s decision to become private”.

Nick Heer:

Steve Huffman is losing trust over trying to monetize the 5–10% of its user base that cares about defining their own experience.

Jay Peters:

On Thursday, Reddit CEO Steve Huffman told me that the developer of rif is fun for Reddit (RIF), a popular third-party Reddit app for Android, did not want to work with Reddit on the company’s planned API pricing changes. However, the developer, Andrew Shu, tells me that’s not the case — and shared emails with The Verge that appear to back him up.


Shu also tells me that RIF was paying a “sizable revenue share” to Reddit beginning in 2012, which was during Yishan Wong’s tenure as CEO. Shu says he says initiated the talks with Reddit to create the agreement, which allowed for the licensed use of Reddit’s trademarks. (At the time, the app was called “reddit is fun.”) Shu says Reddit terminated the agreement in 2016 — which was the year after Huffman took over as CEO.

Paul Haddad:

Reddit is working hard with them 3rd party developers just don’t know why they don’t want to work with Reddit.


It sounds to me like Huffman thinks individual Reddit 3rd party clients are making millions a year. That’s absolutely not the case.

Eric Schwarz:

Reddit’s hubris is what irks me the most—it’s fine to pivot away from third-party apps, but don’t vilify them as freeloaders when you’re also doing this to your own users.

Andrew Orr (Hacker News):

The Apple subreddit has reopened under duress after a protest about API fees was squashed by threats from the company’s CEO to remove the moderation teams of closed subreddits.

The Talk Show:

Christian Selig, developer of the excellent apps Apollo and Pixel Pals, joins the show to talk about Reddit’s Twitter-fication[…] (Hacker News):

Operators broke into Reddit on February 5, 2023, and took 80 gigabytes (zipped) of data.

Juli Clover:

BlackCat says that the data will be made public unless Reddit pays $4.5 million and withdraws the API pricing changes that will go into effect on July 1.

Christian Selig:

I want to debunk Reddit’s claims, and talk about their unwillingness to work with developers, moderators, and the larger community, as well as say thank you for all the support.

See also: Update from Lemmy after the Reddit blackout (Hacker News).

Update (2023-06-23): Dare Obasanjo:

Reddit is now deleting memes and comments insulting its CEO for violating their content policy.

Jay Peters:

Reddit has started removing moderator teams managing subreddits that switched the labeling on their communities to Not Safe For Work (NSFW) in the latest protests against the site.


Six verified Reddit employees discussing the current atmosphere at the company.

There are links to posts on Blind.

Update (2023-06-29): Joe Rossignol:

Popular third-party Reddit app Apollo was updated today with an option for users to decline a refund for their remaining subscription time ahead of the app shutting down. Users who do not exercise this option will automatically receive a pro-rated refund.

Benjamin Mayo:

However, the developer of popular third-party client Narwhal Rick Harrison posted a surprise announcement that goes against the trend, saying that Narwhal will be able to continue operating (after originally stating that it would have to close down). A major new version, Narwhal 2, is also apparently coming soon and will be funded exclusively by a subscription pricing model.


In a previous update, he had said that the planned Reddit API fees would cost him $1 million to $2 million annually – an obviously unsustainable affair. At the time, he floated a compromise where Reddit would zero-rate his API usage as long as he himself made no money from the app.

It has not been explicitly confirmed if that request was granted by Reddit, but it does seem like something like that has been arranged.

Update (2023-07-05): Scharon Harding:

Ars Technica spoke with developers to learn where their apps stand, how some will manage to stay afloat, and what Reddit’s changes mean for the future.

Via Colin Cornaby:

Given that Reddit seems to be coming to more reasonable terms with other apps, it’s starting to feel like Reddit was specifically trying to end Apollo.

Update (2023-07-26): Dare Obasanjo:

Reddit has started seizing subreddits from moderators who had kept them private as part of the protest about using high API fees to kill 3rd party clients.

I don’t expect this to be the end of reddit but the site will never be the same again. A sense of community has been violated in an almost irreparable manner.

Update (2023-07-31): Scharon Harding:

Reddit is campaigning to replace numerous longstanding moderators who were removed from their positions after engaging in API protests. Over the past week, a Reddit employee has posted to subreddits with ousted mods, asking for new volunteers. But in its search, the company has failed to address the intricacies involved in moderating distinct and, in some cases, well-known subreddits. And it doesn’t look like the knowledge from the previous moderators is being passed down.


Last week, Reddit extended an olive branch to mods in the form of various forms of outreach and communication opportunities, but the mods we spoke with at the time were unimpressed, as Reddit offered no apologies or policy changes.

Meanwhile, disgruntled mods and ex-mods continue seeking new platforms to continue community discussions, including Lemmy and Discord. And as of this writing, there are still 1,900 subreddits private, per the Reddark_247 tracker.

Update (2023-08-09): Thomas Germain (via Slashdot):

The last major holdouts in the massive protest against Reddit’s controversial API pricing have relented, abandoning the so-called “John Oliver rules” which only allowed posts featuring the beloved TV host in certain dissident subreddits. It marks the end of months of fighting, which included site-wide blackouts. Now it seems the battle has come to a close. The Reddit protest is over, and Reddit won.

Update (2023-08-16): Tanner Bennett:

Today, Reddit forcibly removed me (and everyone else) as mods of /r/iOSProgramming, a subreddit of about 130k users. I was keeping the sub private / NSFW to prevent Reddit from monetizing it with ads.

Update (2023-09-04): Scharon Harding (Hacker News):

Now, the ousted mods fear that r/canning could become subject to unsafe advice that goes unnoticed by new moderators. “My biggest fear with all this is that someone will follow an unsafe recipe posted on the sub and get badly sick or killed by it,” Dromio05 told me.

Reddit’s infamous API changes have ushered in a new era for the site, and there are still questions about what this next chapter will look like. Ars Technica spoke with several former mods that Reddit booted—and one who was recently appointed by Reddit—about concerns that relying on replacement mods with limited subject matter expertise could result in the spread of dangerous misinformation.

Update (2023-11-28): See also: Hacker News.

RIP Apple Mail Plug-ins

Adam Tow:

I understand Apple’s reasoning behind this decision, and I am by no means advocating for the boycott of Apple, Mail, or anything like that.

However, MailKit has not been improved enough to serve as a viable alternative for Mail Plug-In developers. WWDC 2022 and 2023 came and went without additional labs or sessions dedicated to framework enhancements. The lack of a viable solution to replace the functionality of Mail Plug-Ins in macOS Sonoma means that macOS 14 will be a disappointment for Mail users.


I’ll be updating the MsgFiler website with a notice of the impending shutdown of the app. I will take a look to see if filing messages using pure AppleScript works better today. Unfortunately, seeing that my feedbacks dating back to 2011 (FB5933458, FB5480300, FB5929173, FB6078156) have yet to be addressed, I’m not optimistic. When Sonoma comes out, I’ll pull MsgFiler from the App Store, since there’s no way to specify a maximum macOS version, only a minimum macOS version.


I am now writing this post to seek the public’s assistance in raising awareness, not only for my app, which I am bidding farewell to, but also for all the fantastic plug-ins developed by the Mail Plug-in community over the years[…]

SpamSieve is lucky in that it will be able to switch to using a Mail App Extension, with some of the plug-in’s functionality moving into the app itself and AppleScript. However, there are some limitations/bugs that I hope Apple will address before Sonoma ships, and I hope that it will expand the MailKit API in future versions to enable more features and better performance for SpamSieve and other extensions.

Some other plug-ins are also being rebuilt as extensions, albeit with reduced functionality and ease of use. For others, that will not be possible. MailSuite cannot be rebuilt as an extension, so SmallCubed is making a whole new mail client.

There’s some speculation that Apple wanted to get rid of Mail plug-ins because they were being used to sideload iOS apps. Having code running inside the Mail process made it possible to use a special entitlement that Mail had. However, it’s still possible to abuse that entitlement in Sonoma by disabling SIP. It seems like the familiar pattern of restrictions due to the App Store that hurt good faith developers without actually preventing others from bypassing security/privacy protections. Plus, iOS sideloading will be legally mandated, anyway, at least in certain countries.

On the plus side, I’m happy to be able to build on top of an official API. As Apple has expanded security protections, it made installing Mail plug-ins increasingly more difficult for users. With extensions, you can just click a checkbox in Mail’s settings. And the places to hook into Mail are now stable, rather than changing with each macOS version and with the specter of extension points disappearing as Mail was rewritten with more static Swift code. In theory, I will be able to spend more time improving the app rather than just keeping it working as Mail and macOS evolve. The downside of extensions, though, in addition to the limited functionality, is that we are dependent on Apple to fix bugs, because we can no longer patch them in Mail ourselves.


Update (2023-06-15): See also: MacRumors and 9to5Mac.

Update (2023-07-25): Houdah Software:

HoudahSpot and Tembo rely on an Apple Mail application plug-in to search mail messages. Mail on macOS 14 no longer supports plug-ins. HoudahSpot and Tembo will lose their ability to find Apple Mail message files.

The plug-in was itself a workaround for a change that Apple made to Spotlight.


iA Presenter 1.1.2

John Gruber:

iA Presenter is a presentation/slide deck creation tool where you write your deck using Markdown. But even though you’re creating with plain text, iA Presenter is, as you’d expect, an exquisite design tool.

Information Architects:

With iA Presenter’s text based editor, you can start with any existing piece of writing. Copy and paste. You’ve saved the time and avoided the pain of starting a presentation.


iA Presenter lets you split and join slides without rethinking your whole deckset. Just write — or hit return three times to create a slide break. If you want to make two slides into one, just delete the slide break.


Images, videos, layouts, tables and templates are all available when we need them. It comes with an image library that gives you a separate overview of the visual assets you use.


Since the meat and bones of your presentation is in what you say, you can export it as a simple text document. iA Presenter ends the quirky six slides on 20 A4 papers and puts everything back into a simple, easy to read and follow text with pictures.

It’s $89 for a one-time purchase or $44.50/year (not in the Mac App Store).

See also: Launch Day, iA Writer.


Monday, June 12, 2023

Microsoft Edge Removes Button to Delete Cloud Data

Venkat (via Hacker News):

Starting version 114, Microsoft Edge, no longer offers “reset sync” button that deletes data from Microsoft Servers. The button has been replaced with “Re-sync now” option. So if you’re privacy conscious, beware, there is no way to remove your Edge browsing data from Microsoft’s cloud now.


While Reset deletes sync data from Microsoft servers and re-syncs local browsing data with cloud when you turn on sync. Now, Re-sync just combines Edge’s local browsing data with sync data stored on Microsoft Servers.

However, you can use the special edge://sync-internals URL to access a hidden button to Clear Server Data.

YouTube Tries to Shut Down Invidious

Andy Maxwell (via Mike Rockwell):

The developers of Invidious, a privacy-respecting alternative front-end for YouTube, have received a cease-and-desist notice from YouTube’s legal department. The free and open source software, which provides a YouTube experience minus advertising and user tracking, has been instructed to shut down within seven days. As things stand, cooperation isn’t on the agenda.


The main problems apparent in Google’s cease and desist are straightforward; Invidious does not use YouTube’s API, and as a result, the project’s developers never agreed to any associated terms of service. As anyone who foolishly left their own instance open to the public will confirm, Invidious is effectively a proxy service, one with a penchant for bandwidth.

Investing 10% to Pay Back Technical Debt

Alex Ewerlöf (via Christian Tietze, Hacker News):

Almost everyone in the team had less experience than me (at least on paper) yet a simple task would take me multiple days longer than I thought. Yet, I felt dumb and helpless.


You see, the leadership did not care about the code quality as long as the stories were delivered on time. Corners were cut, tests were skipped[…]


Every other week, we had the “Tech Debt Friday”. These days were not planned for a specific issue or story. […] Engineers looked forward to the Tech Debt Friday. The team would happily remind management that this day cannot (under any circumstances) be planned for regular feature/bugfix work. Although we fixed some bugs along the way, this was primarily an investment to make future feature development cheaper while improving the maintainability and reliability.

Initially it was hard to defend spending 10% of the team bandwidth on tech debt, but over time the payback was huge[…]


I’ve seen “x% time for tech debt“ rules in several companies and sadly it didn’t work too well.

Since the problem was the culture of continually pushing half baked features in the first place, the rule was quickly corrupted: people would design a good system, throw anything that’s not required for a POC into the tech debt backlog and deliver a barely functioning version.

“This is a technical debt task” was used to prevent everything that wasnt new Features taking time of the other 90% of the sprint.

Basically, if you assign a block of time to quality, you risk people taking that as an excuse to not focus on quality outside that block.


Update (2023-06-23): Collin Donnell (Mastodon):

There are only two times technical debt will ever be addressed: upfront or never.


The thing you can do upfront is refactor as you go (don’t overdo it) and make it as easy possible to change your mind later. Delay, delay, delay. Just make as few decisions as you can, so when you have to do the next thing.


Apple (Hacker News):

Combining Core Data’s proven persistence technology and Swift’s modern concurrency features, SwiftData enables you to add persistence to your app quickly, with minimal code and no external dependencies. Using modern language features like macros, SwiftData enables you to write code that is fast, efficient, and safe, enabling you to describe the entire model layer (or object graph) for your app. The framework handles storing the underlying model data, and optionally, syncing that data across multiple devices.

We’ve been anticipating this for years, and it finally happened. Apple was waiting until it could utilize Swift Concurrency and macros, and I think that was a good decision. As expected, it’s more a Core Data wrapper than a complete reimagining. This is making some people unhappy, but I think the underlying Core Data design is still pretty solid. Perhaps over time Apple will reimplement the back end, as they are doing with Foundation. I’d certainly like to see less overhead at the managed object level, and database operations should be able to go a lot faster if they can work directly with Swift’s UTF-8 strings.

Since it requires Sonoma, and the initial version is completely inadequate for my needs, SwiftData probably won’t show up in my own code for years. But I’m pleased to see that Apple is moving in the same direction as I’ve been doing with my own Core Data code: schemas defined in code, type-safe predicates, a Collection for batch processing, and migrations decomposed into stages of lightweight table alterations with interleaved fixups.

I was excited to see that there were five WWDC sessions about SwiftData, but it turns out that they were rather short, repetitive, and lacking in depth. Apple seems to have deliberately avoided comparing it to Core Data and giving us a map of what’s different vs. the same and what’s not supported (yet?). So here are some things that I found notable and some questions that were unanswered:

Just about everything was renamed. In some cases this makes sense. For example, I never really understood why we had NSEntityDescription instead of just NSEntity. Now it’s Entity. In other cases, it’s a bit confusing because NSManagedObject has become PersistentModel, whereas “model” used to mean something completely different that is now called Schema. “Transient” was not renamed but its meaning has changed. There’s no more store coordinator and no replacement for some of its functionality.

The XML and binary store types are gone. I’m guessing that the memory store is now based on SQLite, though I don’t think Apple has said.

It sounds like Predicate does not yet support everything that NSPredicate did, but it’s not clear to me exactly what the differences are or to what extent you can use NSPredicate from SwiftData. I guess a lot of questions can probably be answered from the code.

Likewise with various schema features. I didn’t see anything about indexes or validation predicates. Having .unique just do an UPSERT when there’s a conflict is kind of cool, but what if I want to handle constraint violations in a different way? Composite uniqueness constraints still seem to be handled as arrays of strings. If you want to include components of a composite attribute, I guess you’re supposed to use the mangledName?

How do PersistentIdentifiers work? I don’t see a way to convert it back and forth to NSManagedObjectID or URL, which seems like a major problem. There also doesn’t seem to be the concept of a temporary identifier. Temporary IDs were a major source of bugs with Core Data, but I don’t see how they could have been eliminated without causing major performance problems. If they are still there but opaque to us, that seems bad.

PersistentModel seems to be missing a lot of lifecycle hooks and control over faulting and refreshing. I was surprised to see that relationships are handled as arrays instead of as sets, even though presumably they are still sets at the database level. There does not seem to be support for ordered relationships. Built-in support for non-object attribute types is great. For structs and enums, it’s not fully clear to me when they get automatically destructured into composite attributes, when it just uses Codable to transform them into a blob of data, and whether I can choose.

Stuff at the context level is more automatic and gives you less control. Auto-saving that can be turned off is nice. But there doesn’t seem to be a way to set a merge policy between the context and store, and I didn’t see anything about merging changes between contexts. There are also no more parent contexts.

There’s no ModelStore class, just ModelContainer and ModelContext. I guess containers can still have multiple stores because they support a configurations array, but I’m not sure whether you can add to this. There doesn’t seem to be a way to assign the store for a new object, nor to scope a fetch to certain stores.

Persistent history tracking is enabled by default, but you can seemingly only access the history via Core Data.

Contexts now have much more convenient APIs for batch enumeration (with mutation checking!) and batch inserts/deletes/updates. The batch insert API seems less efficient, though, since you have to give it fully realized Swift dictionaries (no shared keys or provider). There does not seem to be a way to do count or dictionary fetches.

Lastly, SwiftData was clearly designed to work with Swift Concurrency, but Apple didn’t say much about this. I assume the idea is that the language will prevent you from passing model objects out of their context’s actor—but maybe not.

See also:


Update (2023-06-13): Stuart Breckenridge:

There’s no way to turn off write-ahead logging in SwiftData.

Indeed, there doesn’t seem to be access to any of the coordinator options or SQLite pragmas.

Gwendal Roué:

So… one WWDC video mentions that SwiftData performs upserts when there is a conflict on an unique attribute. Corollary: SwiftData does not perform uniquing, at least not like Core Data, and we may end up with two distinct model instances that refer to the same persisted database row. “Identity” of models promises to be a subtle source of surprises 😅

I’m guessing that it will do the same thing as Core Data and give you a detached object with a different ID. That still seems to be possible to detect because PersistentModel.context is optional. But it would be good for Apple to explain this.

Jack Palevich:

I wish Apple would publish a “theory of operation” for both CoreData and SwiftData, that documents and explains the design choices they have made.

There are a lot of subtle tradeoffs when designing an ORM. When you see something like this upsert/uniquing tradeoff, it would be nice to know if it’s an intentional tradeoff, and if so, what the motivations is.

Update (2023-06-19): Stuart A. Malone:

This was the first error I encountered using Swift Data, too. I don’t have the code in front of me, but I believe I solved it by inserting both objects in the relationship into the context before creating the relationship. It didn’t like having an object in a context related to an object without a context.

With Core Data, new objects are inserted into a context by default.

Helge Heß:

OMG, a 10k batch size did it. It took 4 hours and peeked at over 70GB of RAM usage, but SwiftData finally managed to import my huge 25MB SQLite database 🙂

Keith Harrison:

I attended a WWDC23 SwiftData lab and asked questions in the data-frameworks Slack QA session. This is my summary of what I learned.

Update (2023-06-21): milutz:

Nevertheless, if I have a unique constraint on an (String) attribute and try to insert the same again, I end up in the debugger in the generated getter of the attribute[…]

Update (2023-06-23): Paul Hudson:

I just filed a whole bunch of feedback reports for Apple regarding SwiftData. If you see any of these and want the same, please file your own report asking for it – every feedback counts, particularly now as we’re still in the early betas.

Update (2023-06-26): Helge Heß:

There is no way to do a case-insensitive compare/contains in SwiftData predicates yet, right? It tried a few things, but they don’t seem to work.

Nor normalized comparisons.

Update (2023-06-30): Helge Heß:

The Predicate macro as used in gave me a bit of a head scratch, but I think I have figured it out. The init of the Predicate struct takes a builder function, which gets a Variable as the input. Really just a placeholder. But it has to have a VariableID, that is picked by the Variable.init internally. Currently a UInt sequence.

Helge Heß:

Here are the overloads required to get Codable SwiftData models. [Update (2023-09-08): No longer needed.]

Update (2023-07-05): Mohammad Azam:

This article is structured into several sections, each delving into different aspects of the SwiftData framework. First, we will explore the foundational concepts of SwiftData, followed by an examination of its architectural design, relationship management, migration capabilities, and more.

Paul Hudson:

It’s not long until the window closes for SwiftData changes in iOS 17.0. Please file feedback for things that affect you! Two massive ones for me: an equivalent of NSFetchedResultsController to make MVVM work, and an equivalent of (or at least support for) NSCompoundPredicate.

Ian Dundas:

1: PersistentIdentifier encodes to blank JSON, and 2: when it fails to migrate it doesn’t just throw an error - it also wipes the database and starts fresh!!

Helge Heß:

Looks like using a DateComponents value for like say a birthDate doesn’t work in SwiftData. It fails already in the Schema setup (hence can’t be worked around using an accessor extension for the PersistentModel like Codable).

Update (2023-07-10): Stewart Lynch:

In SwiftData, if I create a model that has a property that is an enum like the following, what it does is create a property for each case of the enum rather than a single case for the property itself.

Helge Heß:

Is it possible to undo changes to a SwiftData model object / view context? I would have thought that modelContext.rollback() would do that (as a peer to save()), but maybe that's for transactions only?

I’m quite surprised to hear that rollback() does not work like with Core Data. There’s no documentation yet about what it’s intended to do.


Here are some questions and considerations I have compiled regarding SwiftData (originally posted in a tweet, without a more systematic categorization)[…]


In the current version, data created through other contexts (ModelContext) is not automatically merged into the view context.


Neither PersistentModel nor ModelContext are Sendable (ModelContainer is Sendable), and they are thread-limited like Core Data.


Derived options for Attribute have been deprecated.

Is this referring to NSDerivedAttributeDescription?

Via Malcolm Hall:

Query (an alternative to FetchRequest) does not provide a method for dynamically switching predicates and sorting.” crazy it was released with out this!

Malcolm Hall:

Query for a relationship doesn’t auto-update yet!

Update (2023-07-25): Ian Dundas:

Macro magic - expanding it shows that I guess a schema is defined with a default value would only be evaluated once. I guess the way around this is set the random values inside the init(name:).

In other words, because of the @Model macro, initial property values (which become default values in the schema) don’t behave the same way as with a regular class, even though they look the same.


Why does a SwiftData Model allow Array? How do you really store one?

Order is not preserved, meaning the Array that exists in memory is not likely the one that will get persisted and reloaded. That’s not really conceptually an Array—that’s halfway to a Set.

Helge Heß:

Maybe it is just me, but I just don’t find much “Swiftyness” in SwiftData. In fact it doesn’t feel Swifty at all to me. Well, maybe when that #Predicate with 3 expressions gets back to you with the “unable to resolve blub in time” 🙈

E.g. Swiftlang has gone (extraordinarily annoying) lengths at making sure that the initialization contract is ensured. No more “half initialized objects” anymore. And then we get this 🤷‍♀️

And it will crash any time the values aren’t available, not just mid-initialization. It’s strange because Core Data went to the trouble of adding shouldDeleteInaccessibleFaults so that exceptions (e.g. from objects that no longer exist) don’t make Swift code crash. Instead, the Objective-C code will return default values for properties. But then actually accessing an absent value from Swift will crash as it tries to bridge an unexpected nil value. You can, however, check for absent values by casting to an optional (even though the property is not optional).

Keith Harrison:

As with Core Data, SwiftData marks the object as changed if you call the setter on any of the properties of the object. That’s the case even if you don’t change the value of the property.


Update (2023-07-27): Ian:

Wow, watch out for this SwiftData bug in b5: Simply add a comment on the same line as a Query (!). The macro tries to pull it in as code and the result won’t build[…]

That’s a macro failure mode that I didn’t expect.


Update (2023-08-10): Donny Wals:

The more I explore SwiftData by trying to implement the topics I cover in Practical Core Data the more I realize SwiftData is very much a beta framework.

I fully plan to write Practical SwiftData but right now I’m wondering if iOS 17 is too soon for me to be able to write something that’s more insightful than just the basics along with a bunch of “this isn’t supported right now” notes…

Helge Heß:

Since the release notes have been a little “shallow” for beta6, here is what I found for SwiftData so far:

  • getValue(for:) => getValue(forKey:)
  • Entity => Schema.Entity, etc
  • Property => SchemaProperty
  • deleteRule => not an option anymore, own arg
  • objectID => persistentModelID
  • Entity.mangledName gone
  • Property.isRelationship() func is now a property
  • Attribute.nested gone
  • superEntityName => superentityName 🙈
  • ctx.object(with:) => ctx.model(for:)

Tim Schmitz:

I’m starting to wonder if SwiftData is going to make it into iOS 17.0. The list of known issues is pretty long, and it’s not the kind of thing you’d want to ship half-baked. I hope they’ll take the time to get it to a stable place rather than rush it out the door.

Update (2023-08-17): Guilherme Rambo:

Every new iOS 17 beta build causes SwiftData apps built with the previous Xcode 15 beta to crash on launch due to binary incompatibility. Apple released iOS 17 beta 6 yesterday, which did the same, but didn’t release a new Xcode 15 beta 🥲 I’m glad I haven’t shipped any public TestFlight builds yet.

Helge Heß:

SwiftData is still in heavy flux and changes in major ways every beta.

At release time they’d have to pin down the ABI which makes me think it’ll be dropped for the first iOS 17 release. (cutoff should be within weeks and it seems far from ready)

Update (2023-08-24): Helge Heß:

My summary of SwiftData b7 changes[…]

Helge Heß:

Here is the expansion of the Model macro, it has some really funky stuff. I can’t even compile the thing when manually expanding the macros? 🤔 Why would that be? Special compiler support? This time around the regular properties seem to exist as real instance variables. An _ peer is generated, w/ _SwiftDataNoType 💥

Helge Heß:

In Beta7 SwiftData allows initialization as part of the property declaration again. But since they are moved to a different place by the macro, they can’t use type inference. They do seem to set both the model object ivar value and the default in the storage (which I think makes sense).

Update (2023-09-06): Helge Heß:

Interesting, the SwiftData Model macro doesn’t have an originalName. Isn’t that necessary for table renaming/migration?

Helge Heß:

I think there is a different wrt transient properties between SwiftData and CoreData. The latter still tracks transient attributes, it just doesn’t persist them.

SwiftData doesn’t seem to include them into the schema at all (neither in the KVC metadata). Also: They do not register w/ Observation, I wonder whether that is a bug. I.e. a change to a transient property may not trigger a SwiftUI view refresh.

Update (2023-09-14): Helge Heß:

As far as I can tell there are no major changes to the SwiftData API in Xcode 15 RC. The RC generally seems to be a major improvement, also in swiftc, it successfully compiles a test app again. Most of my tests run, if I disable a lot. I still have the impression that it gets confused w/ types. I suspect it is related to having the same non-qualified type names (e.g. @model class CountTests.Item and also a @model class FetchTests.Item, different in structure).

Friday, June 9, 2023

Whither Stack Overflow Archives?

AMtwo (via Hacker News):

The job that uploads the data dump to was disabled on 28 March, and marked to not be re-enabled without approval of senior leadership. Had it run as scheduled, it would have completed on the first Monday after the first Sunday in June.

I mention the timing, as this change long pre-dated the current moderator strike and related policy changes.


Update (2023-06-13): David Roberts (via Hacker News):

Given past and current turmoils, the fact that [MathOverflow] is not owned by Stack Exchange Inc and the ever-present option of moving to a new home is present in the minds of some people. However, as I mentioned to the other mods in a recent discussion, we are at risk of being in the position of the fictional 1980s UK Prime Minister Jim Hacker, with the power of the nuclear deterrent, but no clear idea of when, if ever, it could ever be actually used in response to an aggressor. Especially when said aggressor may just use “salami tactics“, making things slowly difficult one small step at a time, none of which necessarily deserve responding with the nuclear option.

MO has the option of just leaving SE Inc, taking its data, and setting up elsewhere. But it is our “nuclear option”. Certainly it would not be a good look if MO left SE in the middle of a network-wide dispute of this or that nature (I’m not saying it’s what is under discussion, at present), but it would be a big deal to get everything going again elsewhere.

CloudKit and the iCloud Drive Switch


When I disable iCloud drive [the application] stays, suggesting that access to iCloud is still available.

However, when iCloud drive is disabled, CKContainer.accountStatus returns noAccount, even though I am signed in. When I ignore that and run a query, it returns no records.

Jaanus Kase:

There is one major platform limitation I’ve run into: when you disable iCloud Drive, this also disables iCloud (CloudKit) access to apps like Tact, even though the UI indicates otherwise.

Aaron Pearce:

From the WWDC CloudKit lounge:

As of iOS 17 and macOS Sonoma, disabling the iCloud Drive switch will no longer disable syncing in your app. It’ll be controlled by the individual switch for your app.

This is such a good change.

Greg Pierce:

This is a big deal for sync on corporate devices that often have iCloud Drive disabled.


Feedback Through an Intermediary

Ole Begemann (quoting Accidental Tech Podcast):

Anonymous Apple engineer on Apple’s bug reporting process : “If I get a bug from a developer and want to ask them a question, I can say, please ask the dev a technical question XYZ, and then assign the radar to a black hole. I have no idea if my technical information will be conveyed the way I wrote it. I can’t see what the developer says, other than the initial report. Everything else is through an intermediary.”

What a fucked-up process.

I have a habit of filing bugs early and then adding more information in successive comments as I discover it. But if the Apple engineer only has access to the initial report, perhaps I should delay my reports so that everything can be included together. And there seems to be no point in updating old bug reports to mention that that the issue still reproduces on the latest beta. Maybe these should be refiled as new feedbacks.

Robert Atkins:

If this is accurate the bug reporting process a) doesn’t work for Apple devs, b) doesn’t work for Apple employees. So who does it work for?!

Each year before WWDC, Apple posts a note encouraging developers to file feedbacks. In the past, I used to see Apple engineers emphasizing how important this is and developers chiming in about how to do a good job writing bug reports. This year, sadly, the most common reaction seemed to be laughter. People can’t believe that Apple is acting like we should take this process seriously.

I emphasize “process” because I think most Apple engineers and outside developers do care deeply about fixing bugs but that the system set up by Apple’s leadership to a large extent prevents this from happening.

I still file feedbacks, but probably just a few percent of the ones that I should be writing. I encounter enough issues that I could probably keep myself busy full time reporting them. But my expectation is that almost everything I write will likely be ignored, so I only file bugs that I consider very important and/or that are very easily reproduced with a sample project. I often learn something putting together the sample project, and I try to incorporate it into my unit tests so that I’ll find out if the bug is unexpectedly fixed or the API starts to fail in a different way. Also, if my bug becomes part of a mass-reply where Apple wants me to verify that it still exists, I can do that without spending a lot of time. Unfortunately, many bugs cannot be isolated and easily reproduced in this way.

Alex Rosenberg:

Every project thinks it’s a special snowflake and needs to be specially secured from other projects. This means that even employee bug reports feel like a waste of time that go into a black hole because they can’t be checked up on.

Óscar Morales Vivó:

what you describe in the original post (i.e. you’re “seeing”) is something that happens all the time due to Apple’s culture of (over)secrecy.

I actually think there’s less barriers between outside reports and engineers than there used to be back when I was inside but that doesn’t help if anything secret (rightly or wrongly) is deemed to be tangentially related to an issue.

Alex Rosenberg:

Feedback Assistant is a giant barrier between employees and external people. It solves GDPR problems so that Radar can be ‘free from PII.’


Update (2023-06-13): Tom Lokhorst:

It was great to talk to the engineers working on #ScreenCaptureKit at the lab session. They had some useful tips for how to improve our code.

And I could forward all my feedbacks from the past few months that never reached them through Feedback Assistant.

Update (2023-06-19): Helge Heß:

It is 2023 and Feedback Assistant still can’t pick up your credentials from Keychain. Apple does not want feedback (I know very select individual employees do).


Someone finds a clear and easily reproducible bug in a new Apple framework. They refuse to file a Feedback because they think it won’t be read by Apple, even though a senior compiler engineer at Apple was the one who encouraged them to file it in the first place.

Everything is fine. No total breakdown of trust here, no sir.

Update (2023-08-22): Federico Viticci:

While we’re at it: none of ~20 Feedback items I filed in this beta cycle have been officially addressed (but I was privately told they’re appreciated), and widgets – the core feature of iOS 17 – are still losing their configuration on the Home Screen every few days for me.

I like iOS 17 a lot, and I understand Apple is swamped with the Vision Pro, but it feels like this whole beta > Feedback > beta process needs to be fundamentally rethought.

Update (2024-04-09): Heath Borders:

I filed my first radar in years (Because someone at Apple requested it. I don’t waste my time yelling into the void.), and the email update doesn’t provide a link to my feedback. I have open the FA website and then manually search for the feedback id in the email. This is why I don’t bother reporting bugs to Apple. They don’t remotely value my time.

Thursday, June 8, 2023

Apollo Shutting Down June 30th

Christian Selig (tweet, Mastodon, Hacker News, MacRumors):

I’ve talked to a lot of people, and come to terms with this over the last weeks as talks with Reddit have deteriorated to an ugly point, and in the interest of transparency with the community, I wanted to talk about how I arrived at this decision[…]


Another common claim by Reddit is that Apollo is inherently inefficient, using on average 345 requests per day per user, while some other apps use 100. I’d like to use some numbers to illustrate why I think this is very unfairly framing it.


Hopefully that illustrates why, even more than the large price associated with the API, the 30 day timeline between when the pricing was announced and developers will be charged is a far, far, far bigger issue and not one I can overcome. Much more time would be needed to overhaul the payment model in my app, transition existing users from existing plans, test the changes, and have users update to the new version.


I was assured this year by Reddit not even that long ago that no changes were planned to be made to the API Apollo uses, and I’ve made decisions about how to monetize my business based on what Reddit has said.

Jason Snell:

Apparently in a conversation with moderators, Reddit CEO Steve Huffman alleged that Selig was attempting to threaten the company into paying him millions of dollars. Unfortunately for Huffman, Selig has receipts—namely recordings of all his dealings with Reddit.

I gotta be honest, this Huffman guy sure looks like a lying creep, and all of Reddit’s public statements about honoring third-party apps seem like an attempt to lie to Redditors so they don’t look like the bad guys.

Quinn Nelson:

I speak with Christian Selig (former Apple intern turned star indie dev) on why and how Apollo’s $20M API maintenance fees are a no-go and how Reddit’s changes will make the site worse for everyone.

Toptomcat (Hacker News):

Reddit announced they were raising the price to make calls to their API from being free to a level that will kill every third party app on Reddit, from Apollo to Reddit is Fun to Narwhal to BaconReader.

Even if you’re not a mobile user and don’t use any of those apps, this is a step toward killing other ways of customizing Reddit, such as Reddit Enhancement Suite or the use of the desktop interface.

This isn’t only a problem on the user level: many subreddit moderators depend on tools only available outside the official app to keep their communities on-topic and spam-free.


On June 12th, many subreddits will be going dark to protest this policy.

Mark Hughes:

When a site tells you they don’t want you using it, except by their captured clients, you should stop using it. All they want is to control you and put ads in your eyeballs, until you explode.

That happened for me years ago with Twitter. It happened before that with MySpace; I know it sounds like a joke now, but if you liked music and web design, MySpace was a fantastic place to meet people. And before that, there was LiveJournal; now owned by Russian criminals. Reddit came out of Digg being fed into a woodchipper just because Kevin Rose wanted a little bit of money. I dunno what keeps a billion people trapped in Facebook, but they’ve never had open clients, those people like being property.


Update (2023-06-09): See also: Hacker News.


This makes me indescribably sad.

Apart from mourning the loss of a fantastic app by an awesome developer, to me it signals the end of a golden era of small indie client only apps. Since the APIs for the likes of reddit, twitter (RIP tweetbot) and others were available for free or a reasonable fee it spawned a whole cottage industry of developers who made a living selling alternate front ends for these services. These apps invented many of the conventions and designs that eventually percolated to the official clients. Sometimes these innovations even became platform wide conventions (pull to refresh anyone?). The writing was on the wall for a while, but now the door is firmly closed on that era - and we will all be poorer for it.

Francisco Tolmasky:

It’s interesting that despite pretty different cultures, Apple, Twitter, and now Reddit seem to share a strange resentment towards their platform’s developers. They seem actually incapable of viewing the relationship as symbiotic or mutually beneficial in any way, demonstrating through words and actions that they consider it a favor to devs that they should get any access at all, not that users benefit from this too. It feels almost personal. Is this a natural phenomenon for platform owners?


The strangest part is that it also hurts their business. It’s not about throwing us a bone IMO, it’s about not understanding how much better their service is thanks to things like 3rd party clients. I don’t even use Apollo, but I understand how it’s indespinsible to the mods that actually keep Reddit usable. Most the apps I use on the iPhone are not made by Apple. Yet they act like the AppStore is a charity that they’re one “whiny developer” away from just closing down entirely.

Steve Troughton-Smith:

With what happened with Tweetbot et al, and now Apollo and the Reddit clients, more than ever my advice to new developers is own your dependencies, wherever possible. It is far too easy to import a dozen Swift packages without thinking. A lot of people are getting very excited about OpenAI APIs like GPT, but build with caution — it is but another major dependency being introduced to many apps that would cause existential problems should it some day go away, or price you out of the market.

nightofgrim (via Hacker News):

The goal of making the code for this repo available is to show that despite statements otherwise by Reddit administrators, Apollo does not scrape anything and users purely authenticated Reddit API requests, and does a great deal of work to ensure the Reddit API rate limits are respected.

deliteplays (via Hacker News):

Programmer Humor will be shutting down indefinitely on June 12th to protest Reddit’s recent API changes which kill 3rd party apps.

BananaBus43 (via Hacker News):

ArchiveTeam has been archiving Reddit posts for a while now, but we are running out of time. So far, we have archived 10.81 billion links, with 150 million to go.

David Brownman (via Hacker News):

Reddit does have a feature to export your data into a GDPR archive, but it’s pretty barebones - only the plaintext of the comment, the subreddit name, the timestamp, and weirdly, the number of awards. Unfortunately, the highest fidelity data comes from the API, which is exactly what’s going to be changing/worsening soon. So it felt urgent to create an archive of my personal API data.

Steve Huffman:

Effective July 1, 2023, the rate for apps that require higher usage limits is $0.24 per 1K API calls (less than $1.00 per user / month for a typical Reddit third-party app).

Some apps such as Apollo, Reddit is Fun, and Sync have decided this pricing doesn’t work for their businesses and will close before pricing goes into effect.


Effective July 5, 2023, we will limit access to mature content via our Data API as part of an ongoing effort to provide guardrails to how explicit content and communities on Reddit are discovered and viewed.


We want everyone to be able to use Reddit. As a result, non-commercial, accessibility-focused apps and tools will continue to have free access.


We need more efficient moderation tools, especially on mobile. They are coming.


P.S. isn’t going anywhere[…].


How will you determine which apps are “accessibility” apps? For example, many people use alternative, third-party Android apps to gain access to Reddit, since your own app is appalling with screen readers; but these are not strictly “accessibility” apps.

Can you promise that accessibility apps will be exempt indefinitely? Or only until you put a small level of accessibility into your own app?

Why can’t we have commercial accessibility apps? Why do they have to be operated like a charity? If I can afford to buy an accessible Reddit app, why can’t the developer make money for their work—thus also giving me the ability to have higher expectations for that app? And what about if there’s a cost to them for some features, such as push notifications?

John Gruber:

I’ll bet many of you reading this, even Reddit users, couldn’t recall Reddit’s CEO’s name before I named Huffman above. But it’s clear from Selig’s description — and his receipts, as it were — that Huffman is intimately involved in this decision, and is not only responsible, but is actively besmirching Selig with provably false accusations of both extortion and shoddy engineering.

Well, I remember that time Huffman used his super admin access to edit other people’s Reddit posts that were critical of himself.

Let’s see if Huffman has the courage to go through with this planned AMA today to discuss Reddit’s API policy changes. I have one simple question for him: What do you think Reddit co-founder Aaron Swartz would say about this if he were still alive?

And I remember that time they removed the listing of Swartz as a co-founder.

Jeff Johnson:

It’s crucial to understand that all BigCos are massive liars. The Reddit lies are not unusual; what’s unusual is a company getting caught red-handed.

The developer of Dash caught Apple in a lie with a recorded phone call a number of years ago. They all lie. In fact, Phil Schiller himself lied about my former employer back when we had an App Store dispute.


iCloud Drive Now Supports File Versions

Howard Oakley:

In almost all cases, ‘cloning’ a volume also loses all versions in the Document Revisions database, unless the method of duplication creates an absolutely identical copy, with the same inodes and file system.

iCloud is more complicated. There was a time when it didn’t support versions at all, then it started to support them but had some serious bugs making them unreliable. Those have been gradually resolved, and iCloud Drive now effectively keeps its own Document Revisions database, making versions available to all Macs and devices accessing them.


The Rust I Wanted Had No Future

Graydon Hoare (Hacker News):

This is maybe not clear enough, and it might make the question of whether the project “really should have had a BDFL” a little sharper to know this: the Rust We Got is many, many miles away from The Rust I Wanted.


I wanted crates to allow inlining inside but present stable entrypoints to the outside. Swift wound up close to here, it’s a huge technical headache but failure to do so is also a big part of Rust’s terrible compile times and lack of a stable ABI. I resisted this at the time and have objected to the choice ever since. It’s likely necessary in today’s Rust given the next point though.


Another thing that’s great to have a compiler open-code is an integer type that overflows to an owned or refcounted bignum type: shipping enough stuff to let this happen efficiently in libraries is a huge pain (even if you get as far as stable inline assembly it won’t go as fast as doing it in the compiler) and .. Rust just decided not to. I wanted it to, but I lost. Integers overflow and either trap or wrap. Great. Maybe in another decade we can collectively decide this is also an important enough class of errors to catch?


Tail calls. I actually wanted them! I think they’re great. And I got argued into not having them because the project in general got argued into the position of “compete to win with C++ on performance” and so I wound up writing a sad post rejecting them which is one of the saddest things ever written on the subject.


The priorities I had while working on the language are broadly not the revealed priorities of the community that’s developed around the language in the years since, or even that were being-revealed in the years during. I would have traded performance and expressivity away for simplicity -- both end-user cognitive load and implementation simplicity in the compiler -- and by doing so I would have taken the language in a direction broadly opposed to where a lot of people wanted it to go.

Network Path Monitoring

Keith Harrison:

In iOS 11, Apple recommended you stop using the reachability API to check network availability before attempting a connection. Instead you configure a URLSession to wait for connectivity.

The wait for connectivity model works better for creating connections but I still sometimes want to show the user a network status indicator.


Apple released the Network framework in iOS 12, macOS 10.14. It includes a NWPathMonitor that is now the preferred way to monitor changes to network status. The three steps to monitor network changes[…]

Wednesday, June 7, 2023

Stage Manager in iPadOS 17 Beta

Federico Viticci:

Apple listened to feedback about Stage Manager and – at least so far – implemented the key improvements I wanted to see. I’ve been using Stage Manager on my iPad Pro since yesterday afternoon, and I even tested it on a portable external display that I brought with me for this trip. If this early, limited experience is of any indication, I think I’m going to be happy with Apple’s revised version of Stage Manager for iPad by the end of the summer. But then again, caution is necessary given how last year’s beta evolved over time.


Based on what I’ve seen so far, Stage Manager for iPad is still based on different size classes for apps, which means that when you resize a window, you’re effectively choosing from a list of invisible presets that control how small or big a window can be and how its contents are laid out. However, compared to iPadOS 16, it feels to me as if the process of resizing a window is smoother and more lenient than before. You still see a window “blink” as it gets resized, but I’m under the impression that there are more “intermediate steps” when it comes to the sizes you can choose from. I understand why resizing an iPad app cannot be as pixel-precise as resizing a Mac one, but as long as Apple figures out a system to make layouts more flexible given the limitations of iPadOS, I’m good with that.

There’s even better news on the window placement front: unlike the original Stage Manager, you can now almost freely place windows anywhere and make them overlap as much as you want if necessary. The “almost” part is necessary since I believe there is still a rail-based system underneath Stage Manager, but in iPadOS 17, it’s like those rails have gotten way denser than iPadOS 16, giving you a lot more options for placing a window somewhere and making it stay there.


Update (2023-06-23): Federico Viticci:

Stage Manager for iPadOS 17 also comes with a new ‘fast app pairing’ feature.

This is a new multitouch-based option to quickly pair an app with another app/set of apps.

Just hold down on a window, then tap apps in the dock or the left strip to quickly pair them with the app you’re holding.

Update (2023-07-26): Steve Troughton-Smith:

To say Stage Manager is ‘fixed’ in iOS 17 is to say the Butterfly Keyboard was ‘fixed’ in its first revision. They’ve patched it to make it just a little more tolerable (which should have shipped last year) but it still has all the fundamental problems it had in iPadOS 16. It’s still an alt-mode only available on some iPads, it conflicts with all the existing iPad UX, it has no APIs so apps can adapt better to it, and I still expect it to be abandoned and replaced with a do-over in a few years.

If you could imagine the bare minimum that could have been done to fix Stage Manager in iPadOS 16, this is less than that.

Federico Viticci:

I was pleased to see I’m not the only one who’s liking the new Stage Manager for iPadOS 17. Similarly, I’m not alone in thinking Apple should continue refining the iPad’s multitasking system and catching up with macOS.

Update (2023-08-30): Steve Troughton-Smith:

I have gone through iPadOS 17, and all my old posts about iPadOS 16, and collated a list of many of the things Stage Manager still gets wrong 👀 There’s definitely more to add, but this is why the two tiny changes to Stage Manager this year (tiling, and shift-clicking) don’t impress me.

The major change between Stage Manager now and this time last year is just how buggy and broken it was then. So much time was spent fixing its performance, but not design.

Public Developer Betas

Juli Clover (Slashdot, Hacker News):

Apple’s developer betas have historically been limited to developers who have a paid account that costs $99 per year, but with the launch of the most recent betas, that’s changing.

Anyone can now enroll in the free version of the Apple Developer program and get access to beta releases. All that’s required to download betas is an Apple ID.

I don’t see how this now differs from the public beta, which also required signing in.

Howard Oakley:

With the annual resurgence of interest in running macOS betas, this article considers how you can run a developer or public beta-release of macOS on an Apple silicon Mac.


Now, that Mac has to be connected using the Apple ID registered with the beta programme; for developer betas, that’s the Apple ID by which you’re recognised as a developer. You should then be able to opt for Beta Updates in Software Update, in System Settings > General. Click on the Info tool on that line, and select the beta you want to install. You can also use that to connect using an Apple ID specifically for betas.

I ran into trouble when I instead signed into my Mac as a whole using my developer Apple ID.

Running macOS in a lightweight virtual machine (VM) on Apple silicon is free, simple, and performs at close to native speeds. Although it has some significant limitations, notably no iCloud access and App Store apps (and others depending on your Apple ID) can’t run in the VM[…]


Update (2023-06-09): Craig Hockenberry:

So what’s the trick to get the macOS Sonoma .ipsw to install in UTM running on Apple Silicon?


The trick is to install Xcode (and all it’s dependencies) before you try to use the .ipsw with the Virtualization.framework.

Howard Oakley:

Lightweight VMs can run current and previous macOS, but not future macOS, which requires newer frameworks. I will explain fully in an article.

Update (2023-06-16): Howard Oakley:

Worse: with the exception of Numbers/Pages/Keynote, even free 3rd party apps from the App Store can’t be run. It’s almost like Apple doesn’t want us to use App Store apps.

Updating to the latest beta, I again ran into the problem where there was no visible way to sign into beta updates with my developer Apple ID. The trick is to use this Terminal command (via mikeymikey):

open ''

Update (2023-06-21): Howard Oakley:

macOS VM guests running on Apple silicon deliver excellent performance and broad support for a range of standard devices. At present their main limitations are:

  • no control over Machine ID hence serial number;
  • NAT networking;
  • no Apple ID or iCloud access;
  • almost no App Store apps can be run;
  • limited support for peripheral devices.

Tablet Standby


“Over a month of standby” This is how Apple used to market the iPad’s battery. Today, the iPad runs several background processes while in standby. My HomeKit experiment clearly shows that. I achieved 20 days of standby on my iPad Pro. Without disabling Home the battery would have died after a week.

I doubt I would even get a week on my iPad Air. If I don’t leave it plugged in, it’s always dead when I reach for it.

It’s not great with my Kindle, either, unless I put it in Airplane Mode. Then the battery life is amazing.

For iPad, I think the available settings don’t really match how I use it. I don’t want to turn off Background App Refresh because then apps will be out-of-date when I’m actively using it. But I don’t want them constantly doing stuff when the iPad is “off,” either. I think what I’d like is for it to automatically go into Airplane Mode when I turn off the screen.


Update (2023-12-11): Christian Selig:

iPad feature I’d love: Deep Sleep. I find whenever I go a few days or a week between using an iPad, it’s often dead or almost dead. An auto-deep sleep mode after 24 hours of non-use would be awesome, even if it took 5 seconds or so to wake back up.

Swift’s Upcoming Feature Flags

James Dempsey:

The idea of being able to adopt upcoming changes sooner rather than later is a good one. However, adding an ever-increasing number of separate compiler flags for each upcoming feature does not scale well.

To address this, Swift evolution proposal SE-0362, implemented in Swift 5.8, details a generalized mechanism for enabling upcoming features.


SE-0362 also introduces a new hasFeature() compilation condition that checks whether a feature is enabled. This allows you to write code that uses a feature if present or uses alternate code if not present.


Tuesday, June 6, 2023

WWDC 2023 Links


What’s New:

Release Notes:

Key Sessions:

Written Coverage:



This post will be updated as I find new links. If you see anything good that I missed, please tweet, toot, or e-mail me.


tvOS 17 Announced

Apple (preview, MacRumors):

With tvOS 17, FaceTime comes to Apple TV 4K, so users — for the first time ever — can enjoy the popular app on their TV for even more engaging conversations with family and friends. tvOS 17 also introduces an all-new Control Center, along with other enhancements that provide a more personalized experience that works even better with iPhone.


Center Stage keeps everyone in the room perfectly framed on the screen, even as they move around, while new gesture-based reactions allow callers to use their hands to generate onscreen effects, such as hearts or fireworks, and add even more fun to the conversation. The introduction of Split View for Apple TV lets users enjoy watching shows or movies with their loved ones during a SharePlay session while also seeing everyone on the FaceTime call.


Later this year, video conferencing apps like Webex by Cisco and Zoom will launch on tvOS, bringing their communications capabilities to Apple TV 4K.


In addition, when using the remote on iPhone to wake up and control Apple TV, users will be automatically switched to their profile, ensuring they have access to their recently watched shows and personalized recommendations.

Update (2023-07-26): Chris Welch:

But the more you explore the Apple TV’s latest software release, the clearer it becomes that this is one of the more significant updates Apple’s streaming box has received in many years. It introduces FaceTime on the big screen. Control Center is so much better than before. And there are several new features that demonstrate the unmatched cohesion of Apple’s ecosystem across platforms.


If you’re neck deep in the Apple ecosystem and are one of those people using second-generation HomePods as the speakers for your Apple TV 4K, the speech in the shows and movies you watch will be getting much clearer with tvOS 17. An optional “Enhance Dialogue” setting will better separate what’s being said from all the other action happening and bring it even more forward in the center channel mix.

Update (2023-07-27): Joe Rosensteel:

There’s a lot of good stuff in tvOS 17, but I don’t really agree with this piece on how the TV part of the TV (homescreen vs TV app. Content discovery. Personalization.) is acceptable. That we’ve reached a point where the best we can do is add one more column of icons to the homescreen, and leave the TV app for the Apple TV+ marketing department.

I wrote this up last week, and made this fun gif, but just letting you know that it took 23 swipes to get past recommended Apple TV+ programming in “Watch Now” but this week is a new week and it’s 27 swipes, 5 of which are MLS games, 2 of which include Messi. Great for him. I have no way to opt out or personalize any of it beyond hiding sports scores.


Xcode 15 Announced


Discover the latest productivity and performance improvements in Xcode 15. Explore enhancements to code completion and Xcode Previews, learn about the test navigator and test report, and find out more about the streamlined distribution process. We’ll also highlight improved navigation, source control management, and debugging.

See also: Download, Release Notes, Update.


Update (2023-06-13): Natalia Panferova:

Xcode 15 beta comes with some great improvements to code completion. One of my favorite is the ability to view all possible permutations of function parameters.

Daniel Jalkut:

Apple added a new build setting to Xcode last year, ENABLE_USER_SCRIPT_SANDBOXING, which controls whether any “Run Script” build phases will be run in a sandbox or not. […] Because evidently, starting in Xcode 15, the build setting now defaults to YES.

Dimitri Bouniol:

Bookmarks in Xcode 15 are immediately my favorite feature.

Helge Heß:

Interesting, so the #Swiftlang macro plugins included w/ Xcode come as .dylibs, but custom ones are really built as tools. And they’ve build a simple XPC for the communication. It just runs JSON (prefixed w/ the payload size) over stdio.

Update (2023-06-15): Sarah Reichelt:

Does anyone know of a way to stop Xcode 15 from showing this dialog every time I make an edit with a SwiftUI preview showing as well as every time I run an app?

I get protecting users from unauthorised apps but surely Xcode should have better permissions.

Brian Webster:

I think that happens with the new sandboxed container protection when using ad-hoc signing?


Update (2023-06-16): Sean Heber:

Xcode 15 is not instilling a lot of confidence right now. 😛

(I cannot drag that download window and when I try to resize it, it says no and snaps back to it's original size... lol.)

Christian Beer:

Hm. Xcode 15 is not better in some use cases


I’ve been running it full-time 6 days a week since it dropped and yeah, it’s badly broken in places and mildly broke in others but the worst issues for me are the issues that were also in the previous releases, but slower.

Nothing bad enough to make me open Xcode 14.n again because in my experience, every Xcode 14 release version was pretty bad. 15 is worse and better.

Xcode 15 does seem to fix the testing problems that I saw introduced in 14.3. I’m still on 14.2, which is also problematic, as previously discussed. Today I again ran into a dependency tracking bug. I changed an enum in one file, but Xcode didn’t recompile other files that were using it, so when I ran the code it just gave gave incorrect results.


Update (2023-06-21): Antoine van der Lee:

You can add new bookmarks from several places, and there are multiple scenarios to create bookmarks for. I’ll take you through this feature and explain how you can benefit from making personal references.


Apart from code and file references, you can also save search queries. Doing so can be helpful for search queries you often perform or when you’re refactoring code.

Update (2023-06-30): Craig Hockenberry:

If you’re dealing with an older project where you don’t want to expend the considerable effort required to update logging for Xcode 15, you can get the old behavior using the Run destination’s environment variables.

Set “IDELogRedirectionPolicy” to “oslogToStdio”.

Surprising that this isn’t easier to do: adoption will be much higher if you can migrate as time permits. Right now, it’s launch Xcode 15 and you got nothing.

Keith Irwin:

Also seems to be a bug where you have to make all string interpolation in OSLog "\(value, privacy: .public)" just to see it in Xcode, whereas before you only had to do that to see interpolations outside of Xcode (Console app or log stream CLI).

Update (2023-07-13): Jesse Squires:

Furthermore, Xcode filters bookmarks in the UI based on the current $USER. This means if you do check-in xcuserdata/ and bookmarks.plist for each user, Xcode will only display your bookmarks in the Bookmarks Navigator panel.


While I’m here, there is one other usability issue with bookmarks. You have to right-click in a file to bring up the contextual menu to create one. It’s a bit cumbersome. There are keyboard shortcuts, but it would also be nice if you could create bookmarks by clicking in the line number gutter — similar to how you create breakpoints.

Update (2023-08-23): Craig Hockenberry:

I know I’ve been complaining about Xcode and other tools over the past few weeks. It’s that time of year where we’re exposed to a lot of new code and raw functionality.

But for every rough edge, we’ve also gotten some amazing new things:

  • Wireless debugging, especially on watchOS: super reliable now.
  • The structured debug console is a dream come true.
  • Dimmed conditional code - suprisingly helpful.
  • App Store distribution workflow is so much better!

Monday, June 5, 2023

Apple Vision Pro

Apple (MacRumors, Hacker News, ArsTechnica, Slashdot):

Apple today unveiled Apple Vision Pro, a revolutionary spatial computer that seamlessly blends digital content with the physical world, while allowing users to stay present and connected to others. Vision Pro creates an infinite canvas for apps that scales beyond the boundaries of a traditional display and introduces a fully three-dimensional user interface controlled by the most natural and intuitive inputs possible — a user’s eyes, hands, and voice. Featuring visionOS, the world’s first spatial operating system, Vision Pro lets users interact with digital content in a way that feels like it is physically present in their space. The breakthrough design of Vision Pro features an ultra-high-resolution display system that packs 23 million pixels across two displays, and custom Apple silicon in a unique dual-chip design to ensure every experience feels like it’s taking place in front of the user’s eyes in real time.


Apple Vision Pro enables users to be even more productive, with infinite screen real estate, access to their favorite apps, and all-new ways to multitask. And with support for Magic Keyboard and Magic Trackpad, users can set up the perfect workspace or bring the powerful capabilities of their Mac into Vision Pro wirelessly, creating an enormous, private, and portable 4K display with incredibly crisp text.


Apple Vision Pro has an all-new App Store where users can discover apps and content from developers, and access hundreds of thousands of familiar iPhone and iPad apps that run great and automatically work with the new input system for Vision Pro.


When a person approaches someone wearing Vision Pro, the device feels transparent — letting the user see them while also displaying the user’s eyes. When a user is immersed in an environment or using an app, EyeSight gives visual cues to others about what the user is focused on. […] Users with vision correction needs will use ZEISS Optical Inserts to ensure visual fidelity and eye tracking accuracy.


Apple Vision Pro starts at $3,499 (U.S.), and will be available early next year on and at Apple Store locations in the U.S., with more countries coming later next year.


Update (2023-06-06): See also:

Update (2023-06-07):

Update (2023-06-09):

Update (2023-06-13):

Update (2023-06-15):

Update (2023-06-16):

Update (2023-06-23):

watchOS 10 Announced

Apple (preview, MacRumors, Hacker News):

Apple today previewed watchOS 10, bringing Apple Watch users a fresh approach to quickly view information with redesigned apps, a new Smart Stack to show relevant widgets right when they’re needed, and delightful new watch faces. New metrics, Workout Views, and Bluetooth connectivity for power meters, speed sensors, and cadence sensors arrive for cyclists, while new Compass Waypoints and Maps capabilities further help hikers. The Mindfulness app offers additional tools to support mental health.


With watchOS 10, Compass automatically generates two new waypoints: A Last Cellular Connection Waypoint will estimate the last place with cellular reception, which may be useful for checking messages or making a call. In case of emergencies, a Last Emergency Call Waypoint will estimate where on the route their device had the last connection to any available carrier’s network so that an emergency call can be made.

When preparing routes, a new Elevation view uses altimeter data, offering a three-dimensional view of saved waypoints. And starting in the U.S., Apple Maps displays a new topographic map featuring contour lines, hill shading, elevation details, and points of interest.


Update (2023-06-06): Filipe Espósito:

This means that every Apple Watch model that runs watchOS 9 will be able to run watchOS 10. Of course, it also requires a paired iPhone running iOS 17.

Update (2023-06-07): Dan Moren:

watchOS 10 got perhaps the biggest overhaul, not only changing fundamental ways that users interact with the device, but also how information is presented on the wearable.

Some of this information was shown off during the keynote, but the WWDC session Meet watchOS 10 goes into more detail about how the Apple Watch’s design language is changing—and make no mistake, this is a major change.

macOS 14 Sonoma Announced

Apple (preview, MacRumors, Hacker News, ArsTechnica, Slashdot):

Stunning screen savers and powerful widgets unlock an entirely new way to personalize. Users can now place widgets right on the desktop, interact with them with just a click, and through the magic of Continuity, access the extensive ecosystem of iPhone widgets on their Mac. In macOS Sonoma, video conferencing also gets more engaging with great new features to help users present remotely, like Presenter Overlay, which places a presenter on top of the content being shared, and Reactions, which enables fun gesture-triggered video effects in cinematic quality. Significant updates come to Safari, taking the web experience to the next level. Profiles keeps browsing separate between multiple topics or projects, and web apps provide faster access to favorite sites. And gaming gets even better, with the introduction of Game Mode, exciting new titles, and a new game porting toolkit that makes it even easier for developers to bring more games to Mac.

Joe Rossignol (Hacker News):

macOS Sonoma drops support for 2017 models of the iMac and MacBook Pro, as well as the final 12-inch MacBook model.


Update (2023-06-06): Nick Heer:

MacOS Sonoma drops support for the 2017 iMac, which was the latest model when I bought it just over four years ago.

Howard Oakley:

Of the seven versions of Intel Macs that don’t have T2 chips, and are supported by macOS Ventura, only one, iMac 2019 (iMac19,x), has official Sonoma support.

Filipe Espósito:

When you choose one of these wallpapers, it’s shown as a static image on the Desktop. But as soon as your Mac enters the Lock Screen, the wallpaper moves as an aerial screen saver. When you unlock the Mac, it smoothly stops moving and stays frozen in that frame.

Chance Miller:

Here’s a rundown of the new features in macOS Sonoma that are only available to Apple Silicon users, not users with an Intel-powered Mac.

Update (2023-06-09): Mr. Macintosh:

Can someone explain to me like I’m 5, why a 2017 4.5Ghz i7 iMac can’t run macOS Sonoma?

I’ve seen a few people mention the T2 chip.

Remember, the 2019 iMac does not have a T2 chip, so that is not the reason.



Update (2023-06-13): Howard Oakley:

Prior to Sonoma, getting the right display in a VM has been rather hit or miss. Although shown in a resizeable window, virtual display resolutions have relied on HiDPI support and picking the best size for their crispness. Sonoma adds a simple option that should fill the VM window with the crispest possible image, even when its dimensions don’t match what’s shown in the Display settings of the VM. This solution looks ideal.

State restoration is a little more complex. When running in Monterey and Ventura, the only safe way to quit a VM is to shut it down, and whenever you want to open an existing VM, you have to start it up and log in afresh. In Sonoma, the VM state can be saved and restored, allowing you to resume the VM in a previous state of your choice. You can thus set up your VM exactly as you want it, and keep returning to that state whenever you wish.

Christian Tietze:

Hmmm these new NSMenu section headers look nice in principle, but the whitespace feels odd to me.

Sonoma also removes support for Mail plug-ins.

Update (2023-06-23): Tim Hardwick:

In macOS Sonoma, Apple has changed the widgets landscape. No longer do widgets have to be hidden offscreen and largely forgotten in the Notifications Center panel. Now they live right on your desktop – and they're interactive, too.

Danny Lin:

Whimsical chaos when the Desktop is full

John Voorhees:

It’s a small change, but I appreciate that when I AirDrop files to my Mac running Sonoma that it no longer interrupts my work by flipping over to the Downloads folder in Finder.

Update (2023-08-10): Ezekiel Elin:

Apple made Game Mode for Sonoma, but there’s no way to turn it on manually so if it decides your game isn’t worthy then it’s just…unavailable

iPadOS 17 Announced

Apple (preview, MacRumors):

Apple today previewed iPadOS 17, delivering entirely new ways for users to personalize the Lock Screen and interact with widgets. Working with PDFs is easier with AutoFill, which intelligently identifies and fills fields in forms, and Notes brings a new experience for marking up and collaborating on PDFs. Messages gets significant updates, including a new stickers experience, and users can now leave FaceTime video and audio messages. The Health app comes to iPad with interactive charts, and HealthKit enables developers to create innovative experiences designed for the iPad display.


Update (2023-06-06): Ben Lovejoy:

You can install iPadOS 17 on all of the following models[…]

iOS 17 Announced

Apple (preview, MacRumors, Hacker News):

The Phone app is central to the iPhone experience, and it receives a big update with personalized Contact Posters, providing a new way for users to express themselves. […] Live Voicemail gives users the ability to see real-time transcription as someone leaves a voicemail, and the opportunity to pick up while the caller is leaving their message.


[Messages] Search gets more powerful and precise with search filters, making it possible for users to start a search and add additional filters to narrow down the results and find exactly what they are seeking. […] Messages also introduces Check In, an important feature for when a user wants to notify a family member or friend that they have made it to their destination safely.


Autocorrect receives a comprehensive update with a transformer language model, a state-of-the-art on-device machine learning language model for word prediction — improving the experience and accuracy for users every time they type.


iOS 17 introduces StandBy, giving users a full-screen experience with glanceable information designed to be viewed from a distance when iPhone is on its side and charging.


Journal is a new app that helps iPhone users reflect and practice gratitude through journaling, which has been shown to improve wellbeing.


Update (2023-06-06): Filipe Espósito:

Unfortunately, iOS 17 requires the A12 Bionic chip or later. This means that iPhone 8, iPhone 8 Plus, and iPhone X won’t get the update.

Update (2023-06-13): Juli Clover:

We’ve pulled out five features that we think are the most interesting and that iPhone users will be most excited about when iOS 17 launches this fall.

Adam Engst:

I focus here on 12 features I look forward to trying or find generally compelling, in no particular order.

Update (2023-06-15): Mysk:

Apple didn’t mention app sideloading at #WWDC23, except for when @gruber explicitly asked Craig Federighi about it during The Talk Show.

Apple M2 Ultra

Apple (MacRumors, Hacker News, Slashdot):

M2 Ultra is built using a second-generation 5-nanometer process and uses Apple’s groundbreaking UltraFusion technology to connect the die of two M2 Max chips, doubling the performance. M2 Ultra consists of 134 billion transistors — 20 billion more than M1 Ultra. Its unified memory architecture supports up to a breakthrough 192GB of memory capacity, which is 50 percent more than M1 Ultra, and features 800GB/s of memory bandwidth — twice that of M2 Max. M2 Ultra features a more powerful CPU that’s 20 percent faster than M1 Ultra, a larger GPU that’s up to 30 percent faster, and a Neural Engine that’s up to 40 percent faster. It also features a media engine with twice the capabilities of M2 Max for blazing ProRes acceleration.


Update (2023-06-13): Hassan Mujtaba (via Hacker News):

The CPU managed to post a single-core score of up to 2809 points in single-core and 21,531 points in the multi-core tests. For comparison, the Intel Core i9-13900KS scores 3083 points while AMD’s Ryzen 9 7950X scores 2875 points. In multi-threaded benchmarks, the same chips score 21665 and 19342 points, respectively. So as you can see, the workstation-grade Apple M2 Ultra SoC isn’t faster than the mainstream CPU offerings from Intel and AMD.


If you compare the chip to something like an AMD Threadripper and Intel Xeon W chip, then those would absolutely crush the M2 Ultra in the multi-threaded tests but the single-threaded lead will be on Apple’s M2 Ultra[…]


As such, in OpenCL, the M2 Ultra SoC ends up 50% slower than NVIDIA’s RTX 4080 and that’s not even the flagship GPU.

Joe Rossignol:

As expected, these scores confirm that the M2 Ultra chip offers up to 20% faster CPU performance compared to the M1 Ultra chip, as Apple advertised.

Mac Pro 2023

Apple (MacRumors, Hacker News):

Mac Pro, now featuring M2 Ultra, combines the unprecedented performance of Apple’s most powerful chip with the versatility of PCIe expansion. Mac Pro is up to 3x faster than the previous-generation Intel-based model. Featuring up to 192GB of unified memory, Mac Studio with M2 Ultra and Mac Pro have far more memory than the most advanced workstation graphics cards, taking on demanding workloads other systems can’t even process. The new Mac Pro completes the Mac transition to Apple silicon and, together with the rest of Apple’s pro systems, gives users the most powerful and capable lineup of pro products Apple has ever offered.


The wide array of connectivity in Mac Pro gets even better with eight built-in Thunderbolt 4 ports — six on the back and two on the top — which is twice as many as before. It supports up to six Pro Display XDRs, along with Wi-Fi 6E and Bluetooth 5.3, which come to the new Mac Pro for fast wireless connectivity. Additionally, Mac Pro includes three USB-A ports, two higher-bandwidth HDMI ports that support up to 8K resolution and up to 240Hz frame rates, two 10Gb Ethernet ports, and a headphone jack that enables the use of high-impedance headphones.


Available in both tower and rack-mounted enclosures, Mac Pro (Tower Enclosure) starts at $6,999 (U.S.) and $6,599 (U.S.) for education. Mac Pro (Rack Enclosure) starts at $7,499 (U.S.) and $6,999 (U.S.) for education.

There’s no quad chip, and the RAM and GPU are no longer upgradeable.

Juli Clover:

Following the introduction of the Apple silicon Mac Pro, Apple today added SSD upgrade kits to its online store. The kits offer 2TB, 4TB, and 8TB of storage space for $1,000, $1,600, and $2,800, respectively.


Update (2023-06-06): Stephen Hackett:

However, it also comes with all the downsides of being an SoC. Gone is the 1.5 TB RAM limit of the 2019 Mac Pro, but more importantly, gone is the ability to add RAM after purchase. The same thing goes for upgrading the GPU.

The truth in 2023 is that Mac Pro you buy today will be the same core machine in five years, and that’s just not something we’re used to seeing when it comes to this machine.


Several of us who cover Apple have heard that there are those inside the company that did not want this machine to see the light of day, believing the Mac Studio to be enough to hold down the high-end of the Mac line. Seeing the machine that Apple announced this week, I think they may eventually get their way.

Update (2023-06-07): Nick Heer:

And, if you do choose to compare this Mac Pro to the Intel model it replaces, there are some changes which are difficult to swallow. It is $1,000 more expensive than the one it replaces. The outgoing model was endlessly upgradeable with dedicated video encoding hardware, graphics processors, and up to 1.5 terabytes of memory. The M2 Mac Pro appears to support none of those things. Apple has tried to preempt criticism by claiming this version effectively has the power of seven Afterburner video encoding cards built in, but there are no known differences between the M2 Ultra in the Pro and the one in the Studio. Even its PCIe slots are being marketed for comparatively less demanding workflows:

Update (2023-06-09): Colin Cornaby:

The new Mac Pro is hilariously disappointing.

Mike Piatek-Jimenez:

I’m a little surprised the Apple silicon Mac Pro didn’t go directly to PCIe 5 support. That’s been standard on desktop and server PC hardware for months now.

Francisco Tolmasky:

The best part about the Mac Pro is that it looks like a “platform” that can be updated yearly. They can just keep putting the new M-whatever chip in it (& hopefully eventually figure out how to quadruple it vs. just having the Ultra). Ideally they can bump it up to PCIe 5 and Thunderbolt 5 “easily” too. In other words, the fact that this is so similar to the Mac Studio means it hopefully won’t suffer the same fate as the previous “one-hit wonder” Mac Pros. Looking forward to M3 Mac Pro…

Hartley Charlton:

The main reason to buy the Mac Pro is to be able to use its seven PCIe expansion slots add the likes of digital signal processing (DSP) cards, serial digital interface (SDI) I/O cards, additional networking, and built-in storage. This also allows a user to change some of their Mac Pro’s hardware over time, and Apple is offering additional do-it-yourself SSD upgrade kits and wheels for the device.

If you require multiple Ethernet ports, more than six Thunderbolt ports, or more than two USB-A ports to connect a large number of peripherals, only the Mac Pro can facilitate this. Otherwise, since the Mac Studio can be configured with the same M2 Ultra chip as the Mac Pro, there is no reason to buy the more expensive desktop machine, and most users will be better off buying the Mac Studio and saving $3,000.

See also: Accidental Tech Podcast.

Update (2023-06-13): Joe Rossignol (Hacker News):

Apple’s hardware engineering chief John Ternus briefly touched on the matter in an interview with Daring Fireball’s John Gruber last week, explaining that expandable GPU support for Apple silicon is not something that the company has pursued.

Desire Athow:

Apple specifically calls out rendering performance in Octane, Redshift and Blender in the keynote and, according to Kelly Shipman, the company’s resident hardware expert, the lack of GPU support is very limiting for rendering.

Ryan Jones:

Mac Pro as-is is certainly dead. The empty tower is SO obviously just cuz Ternus said so.

Hector Martin:

Yeah okay so they are totally cheating.

They have two big PCIe switches and are hanging everything off of them.


So basically 5 of the slots including both x16 ones are bottlenecked into a single x16 gen4 channel. Boo.

Via Colin Cornaby:

Is Apple just intentionally trying to kill the Mac Pro?

This should be a $3000 system. PCIe bandwidth is one of the big reasons to buy a workstation at workstation prices. Along with all the other changes Apple made - there is no reason anyone should buy this thing.

Colin Cornaby:

The PC I just build for a fraction of the cost of the Mac Pro has…

  • 20 PCIe Gen5 lanes compared to the 16 PCIe Gen 4 lanes on the Mac Pro (and 20 lanes is already pretty minimal.)
  • A 13900k which beats M2 Ultra in both single threaded and multithreaded workflows.
  • A GeForce 4090k which is solidly faster than M2 Ultra.
  • Expandability

All this for a fraction of the cost of the Mac Pro.

Brendan Shanks:

I guess the new one doesn’t even have ECC RAM?

Honestly it feels more coherent to think of this as the “Mac Studio Pro”, and there just isn’t an actual Mac Pro anymore. A casualty of the ASi transition.

Update (2023-06-15): Colin Cornaby:

When the 2019 Mac Pro was released - Apple implied that the Afterburner card was reprogrammable and could be used for other things. I wonder what happened with that. That seems like something that could have still been useful in the new Mac Pro - even though M2 has ProRes encoding pretty well covered.

Ben Lovejoy:

So what can you plug into them? Apple has listed the main options[…]

Some have questioned the limited power availability if you want to make full use of the card slots. That’s because each slot is limited to 75W of power. However, Apple says there’s a solution to this.

Update (2023-06-16): John Siracusa:

I’ve had over a week to digest the new Mac Pro. I try to put it in perspective on the latest episode of @atpfm.

Update (2023-06-27): Monica Chin:

I wanted to know whether Apple’s purported target demographic — people who spend their days animating, making visual effects, and doing various other tasks generally associated with big, powerful computers — were actually interested in purchasing this machine. So I asked a bunch of them, and the answer, basically across the board, was no. Not because the Mac Pro is bad but because Apple’s other computers, namely its laptops, have just gotten too good.

Update (2023-07-10): See also: Accidental Tech Podcast.

Mac Studio 2023

Apple (MacRumors, Hacker News):

Mac Studio empowers pros to build the studio of their dreams with its groundbreaking performance and extensive connectivity in a compact form that lives right on their desks. With M2 Max and M2 Ultra, the new Mac Studio provides a big boost in performance versus the previous generation and a massive leap for users coming from older Macs. Mac Studio with M2 Max is up to 50 percent faster than the previous-generation Mac Studio4 and 4x faster than the most powerful Intel-based 27-inch iMac.


[Mac Studio with M2 Ultra] features a 24-core CPU, up to a 76-core GPU, and up to 192GB of memory with 800GB/s of unified memory bandwidth for workstation-class performance.


Mac Studio now has higher-bandwidth HDMI, enabling up to 8K resolution and 240Hz frame rates. With M2 Ultra, Mac Studio supports up to six Pro Display XDRs — driving over 100 million pixels — allowing for a vast amount of screen real estate for pro workflows. Additionally, it now features advanced built-in wireless technologies. Wi-Fi 6E delivers download speeds that are up to twice as fast as the previous generation, while Bluetooth 5.3 allows users to connect to the latest Bluetooth accessories. On the back, Mac Studio includes four Thunderbolt 4 ports, a 10Gb Ethernet port, an enhanced HDMI port, and two USB-A ports. It also conveniently has two USB-C ports and an SD card slot on the front to easily import photos and video.


Mac Studio starts at $1,999 (U.S.) and $1,799 (U.S.) for education.


Update (2023-06-13): Jason Snell:

For this review, I was able to spend a few days running an M2 Ultra Mac Studio with 24 CPU cores, 76 GPU cores, and 128GB of memory. And what can I say? This new Mac Studio has all the benefits of the M1 model but with boosted performance. As someone who has spent the last year using an M1 Max Mac Studio as my primary Mac, I highly recommend the Mac Studio lifestyle to anyone who needs pro performance on (or, in my case, just beneath) the desktop.


One of the more puzzling aspects of the design of the M1 Mac Studio was the fact that it had a new cooling system that seemed to make noise even when the system was idle.


I’m happy to report that Apple has rejiggered the cooling system in the Mac Studio. I could only hear the fan blowing when I turned the Mac Studio around so that its vents were pointing right at me, and even then, it was pretty quiet. When I properly oriented the computer on my desk, I couldn’t hear the fan.

Joe Rossignol:

Apple’s updated Mac Studio with M2 Max and M2 Ultra chips will launch in stores and begin arriving to customers this Tuesday. Ahead of time, the first reviews of the desktop computer have been shared by select media outlets and YouTube channels.

MacBook Air 15-inch 2023

Apple (MacRumors, Hacker News):

With an expansive 15.3-inch Liquid Retina display, the incredible performance of M2, up to 18 hours of battery life, and a silent, fanless design, the new MacBook Air brings power and portability — all in the world’s thinnest 15-inch laptop. With an all-new six-speaker sound system, the 15-inch MacBook Air delivers immersive Spatial Audio, along with a 1080p FaceTime HD camera, MagSafe charging, and the power and ease of macOS Ventura for an unrivaled experience.


The 15-inch MacBook Air with M2, available in midnight, starlight, silver, and space gray, starts at $1,299 (U.S.) and $1,199 (U.S.) for education.

The display is 2,880×1,864, which is up from 2,560×1,664 for the 13-inch MacBook Air, but down from 3,024×1,964 for the 14-inch MacBook Pro. On the one hand, this seems disappointing in that, as with the 14-inch iBook, it seems to be more about making things look larger, rather than showing more. However, now that we have Retina displays, you will in practice be able to choose a larger scaled resolution with the 15-inch MacBook Air than the 14-inch MacBook Pro and still be able to read it, even though it may not look as sharp.


Update (2023-06-13): Joe Rossignol:

Ahead of time, the first reviews of the laptop have been shared by select media outlets and YouTube channels, offering a closer look at new features.

Jason Snell:

Until now, if you wanted to buy a Mac laptop with a screen larger than 14 inches, the starting price was $2499 (for the 16-inch MacBook Pro). Now it’s almost half that price because the 15-inch Air starts at $1299. Of course, if you buy an Air you lose a lot of the high-end features of the MacBook Pro: more ports, a spectacular screen, and a more powerful processor. But if all you care about is the size of the display and perhaps weight—at 3.3 pounds, the Air is 70 percent of the weight of the MacBook Pro—you can save $1200. That’s a spectacular change in the economics of buying a Mac laptop.


To counteract the extra power draw of the bigger screen, Apple has increased the size of the Air’s battery, but all that does is make the battery life of the two models identical. There’s also a bit extra space in the 15-inch model’s case for a more expansive speaker system. (When I compared it to the 13-inch model, I noticed some differences, but they were extremely subtle.)

Update (2023-06-15): Joe Rossignol:

Apple’s VP of hardware engineering Kate Bergeron and marketing employee Laura Metz recently spoke with Tom’s Guide’s Mark Spoonauer about the design of the new 15-inch MacBook Air, including its larger display and two additional speakers.

Juli Clover:

We picked up Apple’s latest notebook and thought we’d check it out for MacRumors readers who are curious whether it’s worth picking up over the 13-inch version of a MacBook Pro.

Joe Rossignol:

As expected, the 15-inch MacBook Air with 256GB of storage is equipped with a single NAND chip, according to YouTube channel Max Tech. This will result in the 256GB model having slower SSD read and write speeds compared to 512GB, 1TB, and 2TB models that have multiple NAND chips for faster speeds, but real-world results will vary.

Update (2023-07-27): Joe Rossignol:

Initial customer demand for the new 15-inch MacBook Air has been “weaker than expected,” according to a DigiTimes report citing sources within Apple’s supply chain. The report claims that 15-inch MacBook Air shipment volume in July has been 50% less than originally estimated amid a broader downturn in the notebook market.

I expected this model to be a big hit. But there definitely seems to be a general downturn, and these sort of reports don’t always end up being what they seem.

Update (2023-08-15): Quinn Nelson:

I’ve been using the 15” MacBook Air as my every-day laptop for over a month and I think this is the closest Apple has ever gotten to the perfect laptop[…]

He finds that it throttles less than the 13-inch.

Friday, June 2, 2023

WWDC 2023 Preview

Hartley Charlton:

Apple is overtly teasing the start of “a new era” and the ability to “code new worlds” at WWDC this year, building anticipation around the widely expected announcement of its mixed-reality headset.


Activities are now open for sign-up for eligible developers. Designed to connect you with the developer community and Apple experts, they’ll feature Q&As, Meet the Presenters, and community icebreakers in online group chats.

Paul Hudson:

There are lots of events happening in and around Cupertino, along with other events happening around the world. Most in-person events require tickets, and are likely to sell out quickly.

Jordan Morgan:

Our favorite conference is here, which means that the ninth annual edition of the Swiftjective-C W.W.D.C. Pregame Quiz is ready to go!


Below, we share some of our talented staff’s thoughts about and predictions for WWDC and the transformative impact the forthcoming announcements might have on the industry.

Marco Arment:

Great things to do THIS week instead of next:

  • Prepare test devices with a test Apple ID to run the betas
  • Decide which devices will stay on iOS 16/watchOS 9/etc. (keeping in mind that Watches cannot downgrade!)
  • Start wearing your test watch to collect health data if applicable (thx @_Davidsmith)
  • Create a new version of your app in App Store Connect, and get its first build through TestFlight approval, so you can quickly issue another build next week if beta 1 breaks your app

Stephen Hackett:

Here are the rest of my picks on the show[…]

David Price:

Just like last year’s iPhone event, by an amazing coincidence, we’ve again stumbled across Tim Cook’s video script for Monday morning’s keynote presentation and of course, we’re going to share it all with you.

There are also a variety of books on sale, from:

See also: Who’s Going to WWDC23? and WWDC23 Keynote Bingo.


A Vision for Using C++ From Swift

John McCall:

I’m pleased to announce that the Language Steering Group has accepted a vision document entitled Using C++ from Swift.


It is a companion to the previously-accepted vision document Using Swift from C++; together these two visions lay out a technical vision for how Swift can interoperate with C++.

Using C++ from Swift:

Swift’s memory safety is a major feature of its design, and C++’s lack of safety is a major defect. If C++’s unsafety is fully inherited when using C++ APIs from Swift, interoperability will have made Swift a worse language, and it will have undermined one of the reasons to migrate to Swift in the first place. But Swift must also make C++ APIs feel natural to use and fit into Swift’s strong language idioms. Often these goals coincide, because the better Swift understands how a C++ API is meant to be used, the more unsafety and boilerplate it can eliminate from use sites. If the Swift compiler does not understand how to import an API safely or idiomatically, it should decline to import it, requesting more information from the user (likely through the use of annotations) so that the API can be imported in a way that meets Swift’s standards.


Swift should recognize common C++ patterns like ranges (pairs of iterators) and containers and map them into Swift Collections, making them automatically work with Swift’s library of safe and idiomatic collections algorithms. For example, Swift code should be able to filter and map the contents of a std::vector[…]


There are three common patterns for managing reference object lifetimes in C++. Swift should endeavor to support all three of them[…]


Swift will need to decide how to handle projections, and more generally the use of view types, that it doesn’t recognize how to make safe. This may come with difficult trade-offs between usefulness and safety.


Generic code in Swift will not be able to use C++ templates generically without substantial new language features and a lot of implementation work. Allowing C++ templates to be used on concrete Swift types is theoretically more feasible but still a major project because of the ad hoc nature of type constraints in templates. If this feature is ever pursued, it will likely require substantial user guidance through annotations or wrappers around imported APIs.

Using Swift from C++:

For “reverse” interoperability, Swift generates a header that uses C++ language constructs to represent Swift APIs that are exposed by the Swift module. Because of the relatively high expressivity of C++ headers, the generated header is able to provide representation for most native Swift functions, methods, initializers, accessors and types without needing any extra code to be generated in the Swift module. This allows C++ programmers to call into Swift APIs using the familiar C++ function and member function call syntax.


Swift chose to require programs to opt in to Objective-C interoperability with the @objc attribute, both to make export more predictable and to avoid emitting extra code and metadata for all classes. In contrast, as long as the C++ compiler supports the Swift calling convention, a C++ header can call native Swift functions directly, and the C++ type system can be used to wrap most Swift types in a safe C++ representation. Because of this, there is no reason to require Swift module authors to opt in into C++ interoperability. Instead, any Swift module that can be imported into Swift can also be imported into C++, and most APIs will come across automatically.

Some API authors will desire explicit control over the C++ API. Swift will provide an annotation such as the proposed @expose attribute to allow precise control over which APIs get exposed to C++.


The existing Swift to Objective-C bridging layer should still be supported even when C++ bindings are generated in the generated header. Furthermore, the generated C++ bindings should use appropriate Objective-C++ types or constructs in the generated C++ declarations where it makes sense to do so. For instance, a Swift function that returns an Objective-C class instance should be usable from an Objective-C++ compilation unit.


Update (2023-06-09): See also: C++ Interoperability in Swift 5.9.

Update (2023-07-26): See also: Mixing Swift and C++ (Hacker News).

Xcode 14.3.1


The Xcode 14.3.1 release supports on-device debugging in iOS 11 and later, tvOS 11 and later, and watchOS 4 and later. Xcode 14.3.1 requires a Mac running macOS Ventura 13.0 or later.


Fixed: When targeting devices running iOS 13, apps built with Xcode 14.3 and using Objective-C protocols from Swift, sometimes crash at launch.


Fixed: Applications using Swift Concurrency could crash when run on a specific OS version

Xcode 14.3 was a buggy release. It’s not clear what’s changed in Xcode 14.3.1 since the unusual second release candidate, but judging from the sparse release notes most of the issues are still outstanding. Testing is still broken for me.


Update (2023-06-15): Rory Prior:

Xcode 14.3 (and 14.3.1) really are a headache. Disappearing errors and random crashes on build are really driving me nuts. I wish they’d open source the editor, it’s been too buggy for too long now, clearly their internal priorities don’t match up somewhere as rather than each new version getting better it’s an absolute lottery whether any given Xcode version will be fit for purpose.

watchOS 9.5.1

Juli Clover:

Apple today released watchOS 9.5.1, a minor bug fix update designed for the Apple Watch.


According to Apple’s release notes for the update, it includes “improvements and bug fixes” for the Apple Watch, with no details on which bugs have been addressed.

Curiously, it’s not listed on the About watchOS 9 Updates page, and the security updates page says only that “the update has no published CVE entries.”

watchOS 9.5 came out at the same time as iOS 16.5 and macOS 13.4, and there have been no corresponding 0.0.1 updates for those operating systems.


Thursday, June 1, 2023

WWDC 2023 Wish Lists

Krishna Sadasivam:

Let’s be clear: what I really and truly wish for the next iteration of macOS is a new found-focus on stability, polish and bug fixes.

Mario Guzman:

The next macOS should be a “Snow Leopard” kind of release.

Nick Heer:

As Apple’s operating system line has grown from one to at least five — more if you count the HomePod’s audioOS and BridgeOS for Macs with T-series chips — the limitations of scale have begun to show. New versions of iPadOS oscillate between key feature updates to fundamental parts of the system, like multitasking, one year, and tepid improvements the next. iOS is a mature platform and, so, it makes sense for there to be fewer core feature updates, but one wishes the slower development cycle would bring increased stability and refinement; actual results have been mixed. MacOS is the system which feels like it ought to be the closest to some imagined finish line, but it also seems like it is decaying in its most core qualities — I am having problems with windows losing foregrounding or not becoming focused when they should. Also, why are Notifications still like that?

Daniel Andrews:

A general theme on speed and reliability at the OS and app level. Especially Mail and Music.


Extensions for 3rd party browsers.

Dan Moren:

For example, one addition I’d really like to see is improvements to iOS’s autocorrect system.


Other small improvements that would be nice to have could include breaking the Passwords section of Settings out into its own app, tweaking the way multiple calendars appear in the Calendar app, and allowing more widgets on the lock screen, just to name a few.


One big nice to have feature I’d like to see in macOS 14 is letting widgets live outside of their little column in Notification Center.

Jack Brewster:

My iOS 17 feature request is for Safari extensions to work in embedded views.

Francisco Tolmasky:

All I want out of macOS 14 is for a screenshot naming scheme that results in them being in chronological order when they are sorted alphabetically.

Kelly Guimont:

Here’s my dream for WWDC23:

In macOS 14, when you open a new Mail draft, if you close it within 5 seconds you will not be prompted to save that unaddressed, empty, clearly accidental draft.

Christian Beer:

  • Xcode only shows actual, current errors
  • Xcode shows errors where they happened
  • Xcode doesn’t run an old version of an app if there were build errors
  • Xcode doesn’t come up with some strange error if I forgot a „?“

Miguel Arroz:

Xcode can actually attach the debugger to the test runner app reliably.

Guilherme Rambo:

  • When a build fails, actually show me the build errors, every time, without me having to attempt the build again or restart Xcode
  • When a build error/warning is corrected, stop showing it, instead of leaving it on the list, sometimes for days, unless I do a full derived data delete and restart

Juri Pakaste:

WWDC 23 wish: fast, reliable UI tests.

This message brought to you by Failed to launch app with identifier and Failed to terminate.

My top Xcode issues are showing incorrect errors, compiler crashes, tests failing to run, and tests not running in Instruments.

Jack Brewster:

If the only new feature in the next macOS is that they’d quit hiding controls (like the button on Reminders notifications), I’d be pretty dang happy.

Jesse Squires :

If the only bug fix in macOS 14 is the server icon in the Finder sidebar, I will be happy.

I really shouldn't be so bothered by this. But goddamn. It annoys the hell out of me every. single. time.

Pierre Igot:

For the record, it’s not just the server icon in the sidebar. It’s also the server icon on the desktop and in Finder windows. And it’s network folder icons too. In other words, it’s even more annoying than what Jesse says. But of course it’s intermittent, so Apple’s software engineers cannot be bothered to make the effort to reproduce and fix.

Simon B. Støvring:

Me if iOS 17 does not let me replace the flashlight and camera buttons on the Lock Screen with buttons that run any shortcut.


The top feature on our iOS wishlist remains: “Allow app access to location for 10 minutes”

Beardy Guy:

What I’m hoping or expecting to see in terms of iPadOS and apps[…]

John Voorhees:

This week on AppStories, we talk about Logic Pro for iPad and our wishes for Apple’s rumored mixed reality OS, xrOS.

Timothy Perfitt:

macos wishes for wwdc that will not happen but totally should:

  1. netboot returns.
  2. configuration xml at root of drive to configure setup assistant
  3. system preferences that work like a mac app
  4. don’t have to quit apps when enabling sharing screen
  5. ability to install profiles without an mdm or user approval each time.
  6. a pony

John C. Welch:

A single, coherent, OS-wide automation framework that allows non-devs to create their own automation solutions and not rely on app devs to build shortcuts.

You’ll absolutely get a pony first.


Update (2023-06-02): Brian Stucki:

Another wish list item: fix screen time.


We asked our team to share their biggest wishes and predictions for the event, from SwiftUI APIs to interactive widgets on iOS.

Dave Wood:

Every single year: “The next macOS should be a ‘Snow Leopard’ kind of release.”

John Gordon:

Every year we ask Santa for a Snow Leopard and we get whatever iOS didn’t want.

Aaron Pearce:

All I want for WWDC is to be able to delete this:

UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)

Chris Turner:

My wish for WWDC2023 is if I get a voice mail on my iPhone, I actually have the voice mail available before or at the same time as the transcribed text message, instead of hours or days later.

Robert Hammen:

A softwareupdate function that works repeatably and reliably to present the user with pending updates. This functionality has been broken and unreliable on macOS since macOS 11 and the changes revolving around Apple Silicon (volume ownership).

Same here.

Jeff Johnson:

My WWDC wishlist is an M3 processor for the App Store Connect server.

Reddit to Charge for API

Christian Selig (tweet, Mastodon, Hacker News, AppleInsider):

Had a call with Reddit to discuss pricing. Bad news for third-party apps, their announced pricing is close to Twitter’s pricing, and Apollo would have to pay Reddit $20 million per year to keep running as-is.


I’m deeply disappointed in this price. Reddit iterated that the price would be A) reasonable and based in reality, and B) they would not operate like Twitter. Twitter’s pricing was publicly ridiculed for its obscene price of $42,000 for 50 million tweets. Reddit’s is still $12,000. For reference, I pay Imgur (a site similar to Reddit in user base and media) $166 for the same 50 million API calls.

John Gruber:

Right now Apollo is free to use, but offers a Pro tier with a slew of additional features and fun stuff for a one-time payment of $5, and an Ultra tier with even more for a $13/year subscription. If Reddit goes through with this API pricing, Apollo’s free and Pro tiers would be unsustainable, and the Ultra subscription would have to cost at least $50 or $60 per year.

Jason Snell:

As with Twitter, there is a path for Reddit to walk that allows Selig to build a sustainable app business and for Reddit to be compensated for its service. But this isn’t it.

Adam Chandler:

I’m an Apollo for iPad user and pay for the highest tier to compensate the developer for their time. I also pay Reddit for their premium service to compensate them for their time and so I don’t see any ads.

Why can’t Reddit just require Apollo only work with users who are paying for Reddit Premium? Introduce an Ads-API that’s free to Apollo and charge the end user to disable ads?

I had the same thought about Twitter, but I guess it’s more about control or LLMs than money.

Brent Simmons:

NetNewsWire has special support for Reddit — we use the Reddit API.


We already went through this with Twitter. Not happy to be doing it again.

Federico Viticci:

To be fair, I feel like Reddit should pay @christianselig $20 million to help them improve their shitty app.

Apps like Apollo have made Reddit usable for millions of people. This is an idiotic move.


Tweetbot was the one way I could enjoy reading the Twitter timeline. Without it, my Twitter use is reduced to occasional glances at individual profiles.

Apollo and are enjoyable ways to use Reddit. The latter’s days are presumably numbered, and the former soon won’t be able to afford paying for the API.

The app is awful, and the new website is worse than the old one.

Kevin R Jones:

The other big problem about this Reddit stuff, is that a third party client is about the only efficient way a screen reader user can use it. Blind screen reader users will basically be prohibited from using Reddit from now on.

Sean Heber:

It’s amazing that Reddit, having watched the fallout after Twitter killed off their third party developers, would go on to say, “You know what, that’s an excellent idea and we should do it too!”

Paul Haddad:

The thing that bothers me most about this Reddit stuff is the Gaslighting. If you are going to kill off all clients, just own it. Don’t lie and say you value 3rd party clients and then act like they should be thankful for your over priced, unsustainable access plans.


At least they talked with him. 🙄

Craig Hockenberry:



Update (2023-06-02): See also: Luke Plunkett (via Hacker News).

Centering the macOS Ventura Form Layout

Vidit Bhargava (Mastodon):

As you can see with this design, it’s got a couple of glaring of issues when used in wide width situation:

  1. There’s too much space between the title and value. This makes reading the values veery difficult.
  2. Even when grouping, the sameness of each item makes it look like a block of text even more so than the previous versions


The center equalise process, solves the issue of tracking values very elegantly, and overall offers a much more readable UI.

The design where the control and its label are as far from each other as possible makes a lot more sense on a narrow phone screen that’s in portrait orientation. There, they’re not actually that far apart, and it makes everything line up. Federighi claims that this is not where the idea for the macOS System Settings came from, but it’s hard to see why this design would make sense on its own. He says that the main goal was “consistency,” but System Settings is not consistent, with some areas using the sidebar and form interface and other areas using:

A modal sheet has a navigation link to another… sheet? which can close the modals or take you back. But the back button is now in the bottom bar.

This is just so odd because you see the gymnastics they had to do because they brought a design that was born out of mobile, extended for tablet, and now trying to make it work on desktop.


Update (2023-06-02): Clarko:

SwiftUI isn’t responsible for what you dislike about System Settings.

By default, SwiftUI uses the AppKit widgets. You have to opt in to different styles, which System Settings has done.

And you can quibble about those styles, for sure. But this is about the designers, not the technology.

Difference between the screenshots below:


Otherwise it’s the same code in both cases.

Sarah Reichelt:

The things people object to in the System Settings app are design decisions, not SwiftUI bugs. It also seems that a different team designed each pane, leading to a lot of inconsistent UI. But I seem to be in the minority who actually likes the formStyle(.grouped) look.

I mostly agree with this, but I would note that (especially early on) there were a lot of glitches that seemed to be due to SwiftUI bugs, or I suppose perhaps the developers not knowing how to use SwiftUI properly. Secondly, it’s not only about widget styles but also layouts and navigation. Using SwiftUI encourages the developer to choose certain kinds of designs. And perhaps it also influences which engineers management assigns to the project and how much time they are given to work on it.

Update (2023-06-09): Craig Hockenberry:

Not only is the new macOS Settings app confusing when you do find something, it’s also confusing when you don’t.

Restricted USB access is only for laptops and I’m on an iMac. Showing search results made me think it was all Apple Silicon devices.

Update (2023-06-23): Vidit Bhargava:

I revisited some of my six month old redesigns today and have compiled, how I feel the Settings app must be redesigned.

StopTheMadness 39: Hiding Page Elements

Jeff Johnson:

StopTheMadness already allowed you to write your own site-specific CSS, but along with knowing CSS, this requires digging around in the browser’s web inspector, which is particularly difficult on iOS. I needed a solution that avoids both of these problems, and I think I finally got something decent.

To use the new feature, you first click the Hide Page Element button in the StopTheMadness extension popup, which triggers element selection mode. Then you close the popup and click on the web page element that you want to hide. If your device (a Mac or an iPad) has a physical keyboard, you can skip the clicks with a keyboard shortcut: hover the pointer over the web page element that you want to hide, and press ⌘-delete. In either case, you’ll get a list of one or more elements to hide (there’s a 3D hierarchy of elements on the page). You can select each of the elements in the list, previewing what the page looks like when it’s hidden, and then click Save when you’ve found what you want.


I’ve recently learned that Medium, for example, exploits a newer technique to detect whether you’re viewing the web page in a Safari private window. I’ve created my own test page to demonstrate the technique. I’ve also created a new StopTheMadness website option to stop it: Protect private windows.

I don’t really care about the privacy aspect of a site knowing that I’m using a private window, but some sites nag you about it or refuse to work, so hopefully this will be able to foil them.