Friday, July 10, 2020 [Tweets] [Favorites]

The Raison d’Être for the App Store

John Gruber (tweet, Hacker News):

Feel free to file Google’s release this week of an update to their iPad Gmail app with support for split-screen multitasking under “better late than never”, but this is so late it borders on the absurd.


I worry that this sort of “Who cares, it’s better than nothing” attitude has seeped into Apple itself, and explains how we wound up with barely modified iPad apps shipping as system apps on the Mac.


I’d like to see all the vim, vigor, and vigilance Apple applies to making sure no app on the App Store is making a dime without Apple getting three cents applied instead to making sure there aren’t any scams or ripoffs, and that popular apps support good-citizen-of-the-platform features within a reasonable amount of time after those features are introduced in the OS.


The primary purpose of the App Store should be to steer third-party apps toward excellence, to make the platform as a whole as insanely great as possible. When Steve Jobs introduced the App Store in 2008, he said, “We don’t intend to make any money off the App Store. We’re basically giving all the money to the developers and the 30 percent that pays for running the store, that’ll be great.” Really. It’s impossible to square that mindset with the App Store of today, where the highest priority seemingly is the generation of ever-increasing revenue in the Services column of Apple’s quarterly finance spreadsheet.

I’m against adding subjective quality requirements to the App Store, but requiring split-screen seems more like the objective requirements to support 64-bit or the iPhone X notch. It could nudge apps in a good direction without being onerous or unpredictable.

Dave Mark:

I do think it’s possible Apple’s hand will be forced by Antitrust investigation/regulation. But the financial forces, the pressure from shareholders for year-over-year growth, will not change. Some balancing force needs to come to bear here, pressure to make Apple value a world where, as John says, their most used apps are best-in-class.

Quality doesn’t come from App Store guidelines or antitrust requirements. It depends on the people in positions of power having the resources, motivation, and taste. That goes for Apple as well as third-party developers.

Jeff Johnson:

Job’s quote about not making money off the App Store was striking, but IMO the money quote was “what made Apple users Apple users is that they complained vociferously if they had to use a terrible app.”

Devs didn’t used to need the App Store review “stick”. Users were the stick.


Thursday, July 9, 2020 [Tweets] [Favorites]

VMware Fusion Tech Preview for Big Sur

Michael Roy (tweet):

Big Sur brings with it some really big visual changes, but also major changes under the hood. For instance, Apple has been progressively deprecating 3rd party Kernel Extensions or “kexts” which Fusion needs to run VMs and containers. In order to continue to operate in this model, we’ve re-architected our hypervisor stack to leverage Apple’s native hypervisor APIs, allowing us to run VMs without any kernel extensions.

On macOS Catalina systems, Fusion operates as it always has using kernel extensions to provide functionality. However on Big Sur systems, Fusion operates entirely without kexts.


This Tech Preview supports macOS Big Sur 11.0 Beta 2 for both Host and Guest.

Michael Roy:

Mojave is explicitly not supported. The next major version of Fusion will deprecate Mojave hosts.

See also:


How to Decode Apple Version and Build Numbers

David Shayer:

An Apple build number also has three parts:

  • Major version: Within Apple, the major version is called the build train.
  • Minor version: For iOS and its descendants, the minor version tracks with the minor release; for macOS, it tracks with patch releases.
  • Daily build version: The daily build indicates how many times Apple has built the source code for the release since the previous public release.


Apple isn’t dogmatic about following these rules, or, to put it another way, circumstances sometimes force the company to deviate from its rules. If it had followed past years, iOS 13.1 would have been 17Bxxx, but it was 17A844. This fact probably means that Apple originally thought that iOS 13.1 was going to be iOS 13.0.1, but it ended up containing such important changes that the company decided to increment the minor version number rather than the patch version number.

Clip 1.0

Riley Testut:

Clip is a clipboard manager for iOS that can run in the background indefinitely, listening for changes to the clipboard and saving your clippings for later use. Normally this would be impossible without jailbreaking, but Clip uses several workarounds to achieve this functionality within the constraints imposed by iOS. Unfortunately, despite working just fine these workarounds are all against App Store rules…which is what makes Clip perfect for AltStore 🎉


Wednesday, July 8, 2020 [Tweets] [Favorites]

Making a Best in Class iOS App

Jordan Morgan (tweet):

What things can I quantify that help make an app great?

I believe I’ve created such a list that helps answer that question. Yours might look different, but this one is mine. It attempts to takes all of the emotion and (mostly) opinions out of it. I want to capture what Apple says is great, not what other people may define it as.

He has a long checklist for accessibility.


Is WebKit Sabotaging the Future of the Open Web?


WebKit’s first line of defense against fingerprinting is to not implement web features which increase fingerprintability and offer no safe way to protect the user. Here are some examples of features we have decided to not implement in part due to fingerprinting concerns[…]

Mike Zornek:

With this collective blocking of access (along with the lack of side loading options on iOS and the ban of non-WebKit rendering in App Store apps) Apple has positioned their own native and financial interests over the favor of an open web.

Why can’t the WebKit developer energy be spent on building these great new APIs and connect them with user empowering privacy tools. A great example of what I mean is website location tracking. If a website wants access you your location (for say driving directions) you can grant it access. I don’t understand why a similar approach could not be applied for things like Web Bluetooth access or Proximity sensor access.

See also: Highlights from our conversation with the Safari team.


Update (2020-07-09): Marcos Cáceres:

Mozilla also won’t implement these either, for same reason as WebKit. Privacy and security of our users is paramount, and that means making difficult compromises.

Their longer explanation is here.

See also the replies to this post via Twitter. I see lots of criticism of Google’s motives and attacks on sites/apps. I’m not seeing answers to Zornek’s question or arguments for how these features are different from the ones Safari has already implemented in privacy-empowering ways. People don’t like the way the Web is today, but I don’t see how ceding the future of Web APIs to Chrome/Edge and their dominant engine is going to put the genie back in the bottle. As a Safari user, I don’t see how forcing me to use Chrome for certain sites does anything to help my privacy. As an iOS user, my devices are less valuable if certain kinds of apps cannot be delivered through the Web, and therefore have a higher barrier to being developed and may be blocked by Apple’s political or business concerns.

Apple Silicon and Virtualization

bmalehorn (via Hacker News, Reddit):

Why can’t you update the Docker image to also support ARM? You theoretically could switch your backend to run ARM Linux. However, this would take months - renting out ARM instances, re-building all repositories, and a tense switch over. What if your hosting provider doesn’t offer ARM instances with the same system requirements as x86_64? What if you complete this migration and find it runs at half the speed?

Worse, it might be impossible if your images include files downloaded off the internet, as those are often only compiled for x86_64.


Boot Camp will definitely not be available on ARM Macs. It might be added later with the ability to run ARM Windows, though Microsoft would have to approve.

Gerald (via Hacker News):

With the Mac having the same hardware as the target devices, there’s consistency and no hidden surprises. Whenever the development cycle is shortened and opaque differences removed, it’s a good thing.


What about the downside of Docker becoming 2 to 5x slower without hypervisor? While that is indeed a downside, I’d argue that for local Docker instances, they are better used for functional testing and not part of the core development cycle.


Tuesday, July 7, 2020 [Tweets] [Favorites]

What Changes Might Be Coming to New Mac Hardware?

Jason Snell:

When the Intel transition happened, Apple was extremely restrained. The first Intel Macs were more or less the existing PowerPC Macs, but with Intel processors inside. The message was clear: Steady as she goes, no need to be concerned, these Macs are the same ones you loved, but with a different kind of chip inside.

I suppose Apple could play that game again with this transition, but I don’t think it will. […] But there are plenty of features that haven’t come over from the iPhone and iPad, and now might be the time.


Monday, July 6, 2020 [Tweets] [Favorites]

Visual Comparison of macOS Catalina and Big Sur

Andrew Denty:

All of the screenshots below are taken on a default install of macOS and the Catalina version is always on the left. I made a conscious effort not to resize any windows or change any default settings. I haven’t captured everything, but it is a good taste of the changes so far.


H.266/Versatile Video Coding (VVC)

Fraunhofer HHI (via Hacker News):

This new standard offers improved compression, which reduces data requirements by around 50% of the bit rate relative to the previous standard H.265/High Efficiency Video Coding (HEVC) without compromising visual quality.


A uniform and transparent licensing model based on the FRAND principle (i.e., fair, reasonable, and non-discriminatory) is planned to be established for the use of standard essential patents related to H.266/VVC. For this purpose, the Media Coding Industry Forum (MC-IF) was founded. In addition to Fraunhofer Society, the MC-IF now includes +30 companies and organizations. The new chips required for the use of H.266/VVC, such as those in mobile devices, are currently being designed. Dr. Thomas Schierl, head of the Video Coding and Analytics department at Fraunhofer HHI, announced “this autumn Fraunhofer HHI will publish the first software (for both encoder and decoder) to support H.266/VVC.”


AirPods Pro: Rattlegate


So there appears to be a widespread issue with the AirPods Pro: they seem to eventually develop a rattling noise when Noise Cancellation or Transparency is in use. It is believed to be a hardware problem at this stage and fairly widespread.

Apologies for the use of yet another “-gate”, but no one seems to have a consistant name for this issue: terms like “rattling”, “crackling”, “clicking”, “staticy”, “clacking”, “rumbling”, and “crinkling” are just some of the phrases I’ve seen used. I’m hoping to draw some attention to the issue, both so people experiencing it know they’re not alone or doing something wrong, but also to put some pressure on Apple to acknowledge the problem and properly resolve it (instead of people getting replacements that go on to develop the same problem).

The forum thread is still active, currently with almost 200 replies. I haven’t seen this problem myself, though.


Update (2020-07-09): Peter Steinberger:

I‘m on my 3rd pair. I give them until November to break again.

AirPods vs. AirPods Pro

Adam Engst:

Wearing the AirPods Pro doesn’t hurt, but I notice them constantly and breathe a sigh of relief every time I take them out.


I’m torn here—the AirPods Pro have significantly more flexible controls than the AirPods, but they require more manual dexterity than I often have when I’m exercising or doing yard work. But if forced to choose, I’d go with the simple double-tap on the AirPods. It’s just easier.


I’m sure this varies depending on your hand size, but I find that the AirPods case is almost an addictive fiddle—it’s like that smooth stone from the beach that you just can’t put down. The AirPods Pro case, on the other hand, is a little large in my pocket and just doesn’t have the same addictive feel.

Similarly, the cover of the AirPods case snaps shut with an absolutely compelling little thunk at the end, whereas the AirPods Pro case cover… well, it just shuts. There’s nothing wrong with it, and you probably wouldn’t notice unless you were switching back and forth as I’ve been doing. But it’s not as good.

Finally, and you can probably guess where this is going, the AirPods fit into their case so smoothly and with a tiny magnetic assist that makes it seem like they’re happy to jump back in and get a charge.

He came to many of the same conclusions that I did.


Optimizing the Objective-C Runtime in Big Sur

WWDC 2020:

Dive into the microscopic world of low-level bits and bytes that underlie every Objective-C and Swift class. Find out how recent changes to internal data structures, method lists, and tagged pointers provide better performance and lower memory usage. We’ll demonstrate how to recognize and fix crashes in code that depend on internal details, and show you how to keep your code unaffected by changes to the runtime.

Pierre Habouzit:

Also the tagged pointer change allows the piece of assembly I’m the most insanely proud of: the tagged pointer decoding is now much faster in msgSend.

Pierre Habouzit:

This structure holds Writeable runtime metadata for the classes to work at runtime. But only half of that 8-word structure was used commonly.

So we split it, and only allocate the extended part when needed (which is rare) and as Ben mentions, we saved dozens of MBs (given that we save 32B a-piece, yes it means there are several hundreds of thousands of classes initialized system wide)


We found that it’s quite common in certain UI code (but not only) to repeatedly autorelease the same object over and over again. We have implemented a small LRU that is consulted each time an object is autoreleased.


Also, because the runtime caches negative [IMP cache] entries, the speed of a lookup miss is not very relevant, so we can tolerate denser tables.

We added 2-entries hashes. tables up to 8 entries are filled up to 100% and and others up to ~90% (7/8th).

Pierre Habouzit:

[The] motivation for us is that a single method made direct saves you typically 30bytes (that’s what the average cost of an IMP entry used to be).

A monomorphic IMP cached in 100 processes gives you 3k, save 1000 such IMPs you save 3M system wide.

It also saves a lot of binary size.

David Smith:

The idea that saving 30 bytes per process per method is worth doing significant work is not intuitive until you internalize just how many processes are on a typical iOS device and how valuable memory freed up for the frontmost app is[…]

Pierre Habouzit:

[We] have pre-optimized some IMP Caches at build time. How do you think we did that...

Pierre Habouzit:

To beat a hash-table with linear probing, there’s only one thing you can do: a perfect hash table. The problem is, perfect hash tables that exist today in the literature are large, use complex hash functions (the one Obj-C uses is just a mask).

So that was quite the conundrum.

Now there are two ways to get a perfect hash table: either you have a perfect hash function…. or you cheat and make sure that all your keys hash perfectly. Keys for us, are selectors. They live in the shared cache.

Do you see it coming?


Memory savings are … substantial. There’s also a huge speed win during startup because… you don’t have to build those caches anymore and the contention on the runtime locks is reduced.


Friday, July 3, 2020 [Tweets] [Favorites]

mount_apfs TCC Bypass and Privilege Escalation

Csaba Fitzl (tweet):

We could mount the entire file system through APFS snapshots as read-only, with the noowners flag, which enables us accessing (almost) every file in the file system, including data (documents, files, etc…) of every user on the system, including those protected by Apple’s privacy framework (TCC). Even with the Guest account we could read files of admin accounts as Guest! 😱


At the beginning of March 2020, Apple said that the fix is shipped in Catalina 10.15.4 beta, they didn’t tell a word how they fixed it. I quickly jumped on it, and I found that the trick still works. I was puzzled. After some testing it turned out that they tied this to the Full Disk Access (FDA) right in TCC (kTCCServiceSystemPolicyAllFiles), which I found wrong.

As he explains:

This still violates the basic BSD security model, as you can read other user’s file, without elevating to root. […] Even if SIP is ON and Terminal has Full Disk Access, you can’t see other user’s files with it - with this vulnerability you can.

But Apple still considers it to be fixed.

Thomas Reed:

Absolutely ridiculous fix, I agree. Gating the fix behind a gate that most people will have open is bad. Of course, FDA for Terminal is just bad in general, yet there’s no good way for technical users to NOT give FDA to Terminal. 😞

It’s like Apple has designed TCC in such a way that you have to make an insecure config change to get real work done, but they can say, “Well, you would have been safe if you hadn’t made an insecure config change.” 😒

And there are lots of other apps that needs Full Disk Access, for one reason or another, but they shouldn’t be given access to other users’ files.


Big Sur’s Narrow Alerts

Craig Hockenberry:

Why do I have this
huge ass screen on
my Mac and am now
reading alerts with
four or five words in
each line?

Seems like a bad
idea when a majority
of Macs have a
display with landscape
orientation. Portrait
makes sense on a phone,
but I find it hard to
use on a Big
Sur desktop.

The reason is to make it look more like iOS, perhaps so that iOS apps running on macOS 11 fit in better. We’re continually told that macOS and iOS are not merging, and that the Mac will still be the Mac, yet Apple continues to make changes to macOS like this that degrade the user experience in favor of consistency with iOS. Look at the Catalyst apps. Even the praised Messages app is gaining bugs and losing features like transcripts, AppleScript, and good keyboard support that weren’t in the iOS version.


Alerts are cardlike rectangles that use the same corner radius as all windows in macOS 11. Within an alert, most content is center aligned.

Centered text is difficult to read when there are multiple lines. It’s also disorienting that sometimes the buttons are arranged horizontally and other times vertically. And it introduces an incosistency with dialogs, which often are just alerts with more content, but now they have different text alignment and a different style of button.


LinkedIn iOS Clipboard Snooping

Don (via Hacker News):

LinkedIn is copying the contents of my clipboard every keystroke. IOS 14 allows users to see each paste notification.

I’m on an IPad Pro and it’s copying from the clipboard of my MacBook Pro.

Erran Berger (VP of Engineering):

Appreciate you raising this. We’ve traced this to a code path that only does an equality check between the clipboard contents and the currently typed content in a text box. We don’t store or transmit the clipboard contents.


It’s an innocuous comparison of text input to the pasteboard to prevent unwanted autocorrect insertions.

It doesn’t seem like iOS 14’s new pasteboard sniffing API would handle this case.


Update (2020-07-06): John Gruber:

Even if you really did want to make an app that steals people’s clipboard contents, there’s absolutely no reason you’d check the clipboard contents this frequently. It’s just sloppy programming. But once revealed, a sloppy implementation like LinkedIn’s looks sketchy as hell.

TikTok iOS Clipboard Snooping

Juli Clover (also: Hacker News):

A new feature in iOS 14 alerts users when apps read the clipboard, and it turns out some apps have been reading clipboard data excessively.

TikTok users who upgraded to iOS 14, for example, quickly noticed constant alerts warning them that TikTok was accessing the clipboard every few seconds. After being caught, TikTok now says that it’s removing the feature.

They say it was doing this to “identify repetitive, spammy behavior.”

John Gruber:

I mean, their explanation makes no sense at all.

Couldn’t they wait until you do something with the clipboard contents?

Other apps also read the clipboard when you aren’t pasting, often for good reasons.

TikTok also seems to try to check which apps you have installed and more:

TikTok is a data collection service that is thinly-veiled as a social network. If there is an API to get information on you, your contacts, or your device... well, they’re using it.


Here’s the thing though.. they don’t want you to know how much information they’re collecting on you, and the security implications of all of that data in one place, en masse, are fucking huge. They encrypt all of the analytics requests with an algorithm that changes with every update (at the very least the keys change) just so you can’t see what they’re doing. They also made it so you cannot use the app at all if you block communication to their analytics host off at the DNS-level.


Thursday, July 2, 2020 [Tweets] [Favorites]

Using SVGs in Asset Catalogs

Marc Edwards:

SVGs can now be used as assets for iOS, iPadOS, macOS, and watchOS apps. The most exciting part of this new feature is that there’s not much to say — it’s full SVG support, and it just works.

Xcode 12 is required, but deployment targets of iOS 13, iPadOS 13, macOS 10.15 or later are supported.


Unlike PDF assets, SVGs seem to always be bundled in their native format and rendered at runtime. As a result, many apps will be able to save a lot of space by moving appropriate assets over to SVGs.


A Huge Year for SwiftUI

Swift by Sundell:

Josh Shaffer and Eliza Block from Apple join John to talk about what’s new in SwiftUI, how Xcode Previews work under the hood, the new home screen widget system, Apple’s internal process of adopting and improving SwiftUI, and much more.

See these WWDC sessions:

See also: John Sundell and Majid Jabrayilov.


App Store Requires Opting Out After Trial Subscription

Down Dog (Reddit, Hacker News):

Apple is rejecting our latest update because we refuse to auto-charge at the end of our free trial. They can choose to steal from their customers who forget to cancel, but we won’t do the same to ours. […]

We’ve experimented with auto-charging trials in the past and they lead to (1) fewer users trying the product (2) a huge number of refund requests by users who forget to cancel and (3) complete disbelief from those users when we explain that Apple won’t allow us to issue refunds.

It’s particularly bad because (1) cancelling a subscription is notoriously hard to find in Apple’s settings (2) Apple requires users to cancel at least 24 hours before the trial is over and (3) their site for requesting a refund often returns an error after logging in!

Nathan Lawrence:

Apple shouldn’t require devs to auto-charge after trials, but this rule exists for a reason: Free trials have historically been a real danger zone and misleading area for online services.

Apple’s system can be just as misleading and messy, but this isn’t just a power grab.


I think auto renewing subscriptions after free trials are generally pretty lousy UX, but Apple isn’t actually against not having those. Apple is against building your own skunkworks setup to make that happen.

Ken Case:

For those who aren’t already aware of this: every one of our @OmniGroup apps has the option to start a free two-week trial which doesn’t automatically convert into any sort of purchase.

I’m so confused about what the rule actually is.

Juli Clover:

Apple is introducing a new in-app purchase server notification system that lets developers know when a customer requests and receives a refund for an in-app purchase, allowing the developer to take an appropriate action, such as revoking the purchased item.

Developers are not involved in Apple’s refund process, which is handled by the company. Prior to now, when a user requested and received a refund for an in-app purchase, developers were not notified about the refund, leading to situations where customers could get a refund for a purchase and keep the in-app purchase.


Safari Privacy Protections Bypass

Jeff Johnson (tweet, Hacker News):

The privacy protections system (also known as TCC: Transparency, Consent, and Control) was introduced in macOS Mojave, and one of its purposes is to protect certain files on your Mac from access by unauthorized apps. I’ve discovered a way for an unauthorized app to read the contents of protected files, thus bypassing the privacy protections.


It’s been over 6 months since I reported the issue to Apple. This is well beyond the bounds of “responsible disclosure”, which is typically 90 days after reporting an issue to a vendor. It’s also becoming obvious that I will never get paid a bounty by Apple for anything I’ve reported to them, or at least not within a reasonable amount of time. I’m not interested in waiting years for a bounty. I can’t speak for anyone else, but my personal experience is that the Apple Security Bounty Program has been a disappointment, and I don’t plan to participate again in the future.

An app can make a copy of Safari, modify a JavaScript file in it, and exfiltrate private Safari data. The system trusts the bundle identifier on the copy and doesn’t do a full check of the code signature (or even check the path) to make sure it’s the real Safari.

Csaba Fitzl:

you should have waited, I have worse ASB timelines than this :)

Jeff Johnson:

We know that TCC is a major burden for legitimate Mac apps. But is it a major burden for malware? That’s the question, and it seems to me the answer is no. There are so many holes in this system, it only stops the good developers who wouldn’t stoop to using the countless hacks readily available to malware developers.

He also found a sandbox escape.


Update (2020-07-06): See also: Thomas Claburn.

Boot and Recovery Mode on Apple Silicon Macs

Jason Snell (also: MacRumors):

With the advent of Macs running Apple-designed processors, things will get a whole lot simpler. As described Wednesday in the WWDC session Explore the New System Architecture of Apple Silicon Macs, these new Macs will only require you to remember a single button: Power.


On these new Macs, Target Disk Mode will be retired in favor of Mac Sharing Mode. Rather than turning your Mac into a disk, the new Mac Sharing Mode will turn your Mac into an SMB file server.


In reduced security mode, you can boot any supported version of macOS, even if Apple’s no longer signing it. And if an app or accessory you rely on uses a third-party kernel extension to enable functionality, you’ll need to use this mode.


Wednesday, July 1, 2020 [Tweets] [Favorites]

Upgrade Interviews Bob Borchers and Ronak Shah


This week we welcome Apple’s Bob Borchers and Ronak Shah to the show to discuss macOS Big Sur, including all the new features in Safari. There’s also an awful lot of follow-up from the busy WWDC week that was, and we discuss the possible features of new Macs running Apple silicon.

Early in the show is a discussion of iOS 14’s Back Tap feature, which didn’t make the keynote. It sounds great.

Dr. Drang:

Has anyone explained why Apple is touting the translucent menu bar in Big Sur?


It is, of course, an awful feature, an impediment to usability because it makes the menu bar harder to read. Even Apple’s own PR screenshots have terrible contrast.


When Apple sends people out to talk, it expects them to stay on-message, and the translucent menu bar is apparently part of the message of Big Sur. And because I can’t figure out why they’re doing this, I feel myself sinking into paranoia (they’re not going to take away the Accessibility setting that turns this abomination off, are they?) and Kremlinology.

See also: Craig Hockenberry (tweet).


Update (2020-07-06): Wil Shipley:

Look, I’m really happy macOS 11 got some graphical love. I’m glad we’re, as they say, “Starting a conversation.” I just hope Apple’s listening to our side of the conversation.

I mean, I admit to feeble old eyes, but this seems punishingly hard to read—on the default background.

Mike Hanley:

Definitely reminds me of the early Leopard demos. Hopefully they walk back from it a bit like they did back then...

Canceling Apple Arcade Games

Mark Gurman and Jason Schreier (also: MacRumors):

Apple Inc. has shifted the strategy of its Apple Arcade gaming service, canceling contracts for some games in development while seeking other titles that it believes will better retain subscribers.


On calls in mid-April, an Apple Arcade creative producer told some developers that their upcoming games didn’t have the level of “engagement” Apple is seeking, the people said. Apple is increasingly interested in titles that will keep users hooked, so subscribers stay beyond the free trial of the service, according to the people.


The company hasn’t said how Apple Arcade is performing, but it recently started offering a second free trial month, indicating that some users likely aren’t remaining subscribers for very long.

I thought Apple Arcade was supposed to enhance the value of Apple’s platforms by funding quality games that didn’t have to chase engagement metrics. Now, it sounds like it’s about services revenue.

McCloud, last year:

Apple’s doesn’t have gaming DNA. Sony for example uses games to sell hardware and services, but in Sony’s case they make masterpieces like God of War and Uncharted - Apple would be metric-driven, so they’d consider lots of hours played == good games.


This might be a good strategy to maximize revenue in the short and mid term, but will also lead to fungible games. Sony actually gets gaming and this is why you’ll see things that would never get greenlit in a metrics-driven world that end up selling consoles.


Update (2020-07-06): Benjamin Mayo:

At the original March event, Apple Arcade was positioned as a subscription service offering an eclectic collection of novel and unique titles, drawing on the raw creativity of indie game studios, as well as mixing in some games from larger franchises. The fact that Apple was funding the games upfront meant that the developers had the freedom to create, in Apple’s words, “the best work of their lives” and without having to contort the gameplay to accommodate monetisation mechanics like interstitial ads, in-game currency, artificial time limits and such.


I also think there are strong arguments that Apple’s monetary commitments to Arcade are too small, especially when you look at what they are happily spending on the TV side. Adding a handful of big-budget high-production games into Arcade would surely be a good thing. As it stands, the budget for Apple’s two series order of The Morning Show exceeds investment into the entire Arcade library.

Sim Genie 1.0

Curtis Herbert:

Sim Genie is a Mac app that is built for those of us that spend our days in Xcode. Apple has been adding a lot of hidden capabilities to the Xcode simulator, but they haven’t been making those capabilities particularly easy-to-use or discoverable.

So I got to thinking: the simulator can do a lot of things now a days, and I’d save a lot of time and avoid many annoyances if those things were more easily exposed. What would an app look like that really took a serious go at making a proper product out of the simulator? One that didn’t just focus on the raw capabilities of the simulator, but the workflows that could be built around it?


I’m charging a one-time fee for the app, there is no recurring revenue here unless I go the 2.0 upgrade-pricing route.


Sim Genie has to use the Xcode command line tools, and some other terminal goodies, to work. And that kinda stuff ain’t exactly sandbox-friendly.

Sim Genie:

Grab marketing-ready screen recordings right from the simulator.


Apply status bars without adding custom code, or needing real hardware.


Debug how your app responds to push notifications earlier in development, without deploying to device or setting up a push server.

Make sure your deep links aren’t breaking the app’s state; trigger them at any time to ensure your app responds nicely.

Big Sur’s Hidden Containers Folder

Rico Becker:

Apple has restricted access to ~/Library/Containers/ in Finder on macOS Big Sur.

It’s only showing one folder in my case. In Terminal I can see that everything is still there.

This was quite a shock when I first saw it, because it looked like all my data was gone. As far as I can tell, there’s no setting (except maybe disabling SIP) to turn off this feature. This is going to be really annoying because I browse the Containers folder in Finder every day. I don’t understand what Apple is trying to do here, because:


Update (2020-07-03): If you open the Library folder (not Containers itself) in List view and turn off groups, you can open the disclosure triangle and view the container folders. Some show their actual folder names, and others show the name of the app. The Finder’s “fake” view persists when System Integrity Protection is turned off, and it also gets in the way of the Command-Option-G “Go to Folder” keyboard command in file open panels.

Tuesday, June 30, 2020 [Tweets] [Favorites]

2020 Apple Design Awards

Josh Centers:

Taking the recent years’ trend toward ignoring Mac apps to its logical extreme (see our Apple Design Award series), there wasn’t a single winner for the Mac.

John Gruber:

Such a great year for the Mac at WWDC, but not one ADA winner. But yet the ADAs are currently the top feature story in the Mac App Store app.

Jeff Johnson:

Except all the download buttons are disabled, because none of the apps are available on the Mac.


Update (2020-07-09): Craig Grannell:

I’m surprised people are surprised by this. The same thing happened at WWDC 2019 and 2018. (I don’t remember the awards further back than that.)

One might have expected this year to be different given Apple’s strong rhetoric about how much it cares about the Mac.

Why AnyList Won’t Be Supporting Sign in With Apple

Jeff Hunter (Hacker News):

We agree with Apple that privacy is a fundamental human right, and understand that the “Hide My Email” option in Sign in with Apple is well-intentioned, but it feels like Apple didn’t really think through all of the implications for basic user experience, customer support, and collaboration.


Finally, from a policy perspective, Apple explicitly states in their usage guidelines, “Apple reserves the right to disable Sign in with Apple on a website or app for any reason at any time.” If customers cannot log into their accounts, then they can’t use our service. Giving a third-party such powerful control over a core part of our service when it’s not absolutely required is unnecessarily risky, in our view.

Because of the App Store Guidelines and other problems with Facebook, they will no longer be supporting Facebook login, either.

Jeff Hunter:

Creating an account will still be fast and easy, though, because we’ve implemented support for iCloud Keychain and strong password AutoFill, which is a nice enhancement made by Apple in iOS 12 (and improved in iOS 13).


Update (2020-07-03): Matt Birchler:

The App Store has done tons of good for the world of software, and more people buy software today than ever before, and the App Store gets tons of credit for making that possible, but I think that ignoring the costs to merchant/customer relationships is unwise.

We’re now moving closer to the big big retailer model we had 20 years ago. The rules are less restrictive, but merchants must still work out deals with Apple and make software the way Apple dictates it should be made.


Putting Apple between the merchant and the consumer has benefits, but it’s disingenuous to ignore its costs. And while things today are far better for merchants and developers than they were in the big box retail days, I think the “at least it’s better than 20 years ago” argument is pretty weak.

Dan Moren:

I think, for the most part, AnyList’s concerns are well-founded for their particular offering.

APFS and Time Machine in Big Sur

Howard Oakley:

APFS in macOS 11 changes volume roles substantially. The System volume within a boot Volume Group is now sealed using a tree of cryptographic hashes, as I have detailed here.


As 9to5Mac has already reported, Big Sur is the first version of macOS which can make Time Machine backups to APFS volumes without using a virtual HFS+ file system on a sparse bundle. However, to do so requires the destination APFS volume to be assigned the role of Backup, and allocation of storage space as a Physical Store.


APFS doesn’t support directory hard links, so can’t use the same mechanism when storing Time Machine backups. Instead, what appears to function as a form of virtual file system is created using new features in APFS. The volume assigned the role of Backup appears to be a regular APFS volume, and is protected from normal access, even by root. File data is kept as usual in the container’s Physical Store, to which file data is copied during each backup. […] This is synthesised into what is presented by the Finder as the customary hierarchy of files and folders, just as with HFS+ backups. However, matching unchanged folders have different volume numbers, as if they were stored on separate mounted volumes.

The updated APFS reference is here. I plan to keep my Time Machine backups using HFS+ because of APFS’s slow performance with spinning disks. Also, it’s not clear to me whether this synthesized display will cause problems accessing the backed up files using other apps or cloning the backup drive.


Monday, June 29, 2020 [Tweets] [Favorites]

as, as?, and as! in Swift

Ole Begemann:

as? and as! perform downcasting at runtime.


as? and as! are the same operation, the only difference being that as! force-unwraps its result.


In contrast, as coerces a value to a type at compile time.


A syntactic nuance: when using as in pattern matching contexts, the check is performed at runtime (it has to be).


Git Tower 5

Julian Rothkamp:

Tower now lets you show or hide whitespace changes with a single click.


Tower not only displays diffs of new/untracked files, it even allows you to stage/unstage/discard parts of their changes - even though they are still untracked!


In our endless quest of making you more productive, the highlighting of inline changes will make it super convenient for you to spot changes at first glance.

Good stuff!


Developer Transition Kit Benchmarks

Mike Wuerthele (also: MacRumors):

This Mac mini is outfitted with Apple’s A12Z processor which was originally designed for the 2018 iPad Pro and then reused with the 2020 iPad Pro.


To get more specific on performance, let’s take a look at Geekbench 5 results. Right now, with Rosetta 2 translation of the benchmark suite, the developer kit with the A12Z Bionic pulls down a score of about 845 for the single-core benchmark and around 2960 for the multi-core tests.

To compare, in the Core i3 Mac mini, we saw Geekbench results of 949 for single-core tests and 3,197 for multi-core test. Benchmarks for the same A12Z Bionic in the iPad Pro put it at 1,118 points for single-core tests, and 4,625 for multi-core.

The DTK is probably a lower bound for the performance we’re likely to see with actual Apple Silicon Macs, so it’s encouraging that running x86 apps in Rosetta is faster than a 2012 iMac or Surface Pro X running native code.

Apple has, in recent years, allowed screenshots and discussions of prerelease OS versions, but the Universal App Quick Start agreement specifically says not to:

(d) display, demonstrate, video, photograph, make any drawings or renderings of, or take any images or measurements of or run any benchmark tests on the Developer Transition Kit (or allow anyone else to do any of the foregoing), unless separately authorized in writing by Apple;

(e) discuss, publicly write about, or post any reactions to or about the Developer Transition Kit (or Your use of the Developer Transition Kit), whether online, in print, in person, or on social media, unless separately authorized in writing by Apple;

My DTK is now in transit, so I’m planning not to write further on this topic.


The New York Times Pulls Out of Apple News

Kellen Browning and Jack Nicas (via MacRumors, 9to5Mac):

The Times is one of the first media organizations to pull out of Apple News. The Times, which has made adding new subscribers a key business goal, said Apple had given it little in the way of direct relationships with readers and little control over the business. It said it hoped to instead drive readers directly to its own website and mobile app so that it could “fund quality journalism.”

“Core to a healthy model between The Times and the platforms is a direct path for sending those readers back into our environments, where we control the presentation of our report, the relationships with our readers and the nature of our business rules,” Meredith Kopit Levien, chief operating officer, wrote in a memo to employees. “Our relationship with Apple News does not fit within these parameters.”

An Apple spokesman said that The Times “only offered Apple News a few stories a day,” […]

They never joined Apple News+, and their subscription business seems to be doing well.


Update (2020-07-03): Dave Winer:

Colin Nederkoorn reminds us that the NY Times, even though they’ve opted out of Apple News still has a full complement of RSS feeds. The feeds are perfect. A headline, a synopsis and a link to the paywall’d article.

How to Remove YouTube Tracking

Dries Buytaert (via John Gruber):

I learned that when I embed a YouTube video in my blog posts, Google sends an HTTP cookie to track my site’s visitors.


After some research, I discovered that YouTube offers a privacy-enhanced way of embedding videos. Instead of linking to, link to, and no data-collecting HTTP cookie will be sent. This is Google’s way of providing GDPR-compliant YouTube videos.

It makes his site faster, too. I always liked how the iCab browser would report whether a site was using valid HTML, but I’m not sure how influential it was because of the relatively low marketshare. Safari’s new Privacy Report will hopefully have a big impact.


Friday, June 26, 2020 [Tweets] [Favorites]

MKBHD Interviews Craig Federighi

Marques Brownlee (tweet, MacRumors):

Some insight with Craig Federighi about the iOS 14 and the more controversial 2020 announcements!

He starts off with a question about why iOS 14 doesn’t let you set the default maps app. I like the way he intersperses additional commentary and reactions with clips from the interview itself.


Closing Microsoft Retail Stores

Microsoft (via MacRumors, Hacker News):

The company’s retail team members will continue to serve customers from Microsoft corporate facilities and remotely providing sales, training, and support. Microsoft will continue to invest in its digital storefronts on, and stores in Xbox and Windows, reaching more than 1.2 billion people every month in 190 markets. The company will also reimagine spaces that serve all customers, including operating Microsoft Experience Centers in London, NYC, Sydney, and Redmond campus locations. The closing of Microsoft Store physical locations will result in a pre-tax charge of approximately $450M, or $0.05 per share, to be recorded in the current quarter ending June 30, 2020.

I will miss the stores as an easy way to try out Microsoft’s new hardware products. Perhaps Apple can lease some of those spaces, to help deal with overcrowding and increase Genius Bar capacity. Many of the locations are within eyesight of the Apple store in the same mall.


Reverse Engineering macOS 11.0


New in macOS Big Sur 11 beta, the system ships with a built-in dynamic linker cache of all system-provided libraries. As part of this change, copies of dynamic libraries are no longer present on the filesystem. Code that attempts to check for dynamic library presence by looking for a file at a path or enumerating a directory will fail. Instead, check for library presence by attempting to dlopen() the path, which will correctly check for the library in the cache.

Pierre Habouzit:

The only impact is if you are doing runtime detection/search of library by path yourself. Which is a terrible idea for perf anyway.

iOS has been like that for a decade already.

The goal was optimization, but unfortunately it does make reverse engineering more difficult.

Joe Groff:

The shared cache isn’t encrypted or anything, and dyld is in the Darwin source dumps. The shared cache format may not be stable, but isn’t secret either

The data is there, but there currently aren’t tools that can get it into a useful format like we had before.

Steve Troughton-Smith:

Incidentally, the new stripped framework cache on macOS 11 is horrendous for disassembly. If you’re trying to track down why there’s a bug in your app, or how a system implementation works, you are screwed. This is going to hurt developers more than the ARM transition

Jeff Johnson (tweet, also: zhuowei):

If the libraries are no longer present on the filesystem, that makes it awfully hard to disassemble them! Fortunately, there are ways to extract the system libraries from the cache. One way is provided by Apple itself: the dyld_shared_cache_util command-line tool. Unfortunately, this tool does not come installed with macOS Big Sur. However, the tool is open source, so we can build it ourselves.

Jeff Johnson (tweet):

Let’s take a look at an example from my favorite framework, AppKit.


It seems that prior to Big Sur, Objective-C references in a Mach-O file are offsets from the beginning on the file, whereas on Big Sur, Objective-C references in a Mach-O file are offsets from the beginning of the dyld shared cache. Roughly speaking.

You can also point Hopper at the shared cache in the folder /System/Library/dyld/, and it will let you choose which library to load. But, as with dyld_shared_cache_util, what you end up with is difficult to work with because the tools don’t know how to find the Objective-C selector information.

Big Sur also adds another optimization that gets in the way of reverse engineering. Leo Natan:

A lot of Apple’s private APIs are now peppered with direct and can no longer be swizzled.

This makes it harder to debug and work around bugs. Unlike with the shared cache, this can’t be worked around with better tools. The information (and indirection) have been removed from the library entirely.


Update (2020-07-06): Anton Sotkov:

Modifications to Apple’s dyld project to fix Objective-C information when extracting dyld_shared_cache from macOS Big Sur to help Hopper generate readable pseudocode.

Console, the Vital Tool That Apple Abandoned

Howard Oakley:

What makes me most angry at what has happened to the log and Console is that Apple’s concepts and engineering are outstanding: the log has a remarkably low latency, retains a great deal of invaluable data in structured and compact format, and should be an essential resource to anyone who takes their Mac seriously. Instead of building on those unique strengths, Apple has provided token support which must leave even its own engineers wishing for better, as they wade through the logarchives supplied in sysdiagnose dumps.

macOS 11 continues to improve the logging APIs, but from what I can tell it’s still difficult to actually use the log from Console.


Thursday, June 25, 2020 [Tweets] [Favorites]

The Talk Show Remote From WWDC 2020

The Talk Show:

John Gruber is joined by Craig Federighi and Greg Joswiak to discuss the news from WWDC 2020: the Mac’s transition to Apple silicon, MacOS 11 Big Sur, iOS and iPadOS 14, and more.

John Vorhees:

In response to commentators who believe that Apple is merging iOS and macOS or abandoning the Mac, Federighi rattled off a long list of projects related to the Mac, commenting, “We love the Mac and we’re all in.” Joswiak added, “We’re far from bored with the Mac; it’s in our DNA.”

Federighi also addressed the relationship of Catalyst, SwiftUI, AppKit, and UIKit for developers, explaining that there is no single correct path. He said that the best path depends on where developers start. For example, some developers have invested heavily in AppKit and will probably want to stick with it, while UIKit developers may want to bring their apps to the Mac using Catalyst, whereas a new developer may want to start fresh with SwiftUI.


Update (2020-07-09): John Gruber (tweet):

It doesn’t look or sound like a Zoom or FaceTime call that was simply recorded and played back.

A lot of folks noticed that, and have asked how we made it. I have good news and bad news. The good news is the answer is very simple and doesn’t require any expensive equipment. The bad news is it’s a lot of work.

HEY Approved With Trial

Marco Arment:

I bet they come to a compromise where neither side has to lose face and “back down”, such as Hey adding some free functionality such that the app can do something without a purchase but also without adding IAP. (Apple’s letter effectively invited them to do this.)

Jason Fried (also: David Heinemeier Hansson, Hacker News):

Phil Schiller, Apple’s Senior Vice President of Worldwide Marketing, told us the kind of changes he’d love to see us make. His primary objection was “You download the app and it doesn’t work, that’s not what we want on the store.”


This new version introduces a new free option for the iOS app. Now users can sign up directly in-app for a free, temporary, randomized email address that works for 14 days. Think of it like a temporary SIM card you buy when traveling. Or for when you don’t want to give out your real email address, like a short term “for sale” listing, like Craigslist does it.

Rory Prior:

This is not really a great look for either Apple or Hey. If the solution was just ‘add a demo’ (in all but name) then it’s more contorting of the rules to save face. Very much doubt this will become a blanket exception for other developers.

It’s especially weird because the guidelines have always forbidden demos. So why would adding a demo give the app an out for the obligation to use IAP? If you accept Apple’s reading of the guidelines for reader apps and business vs. consumer, the proposed changes address none of the violations. Absent the controversy, it seems unlikely that this would lead to approval. But what Basecamp has done is clever, because (I guess) you can keep signing up for temporary addresses. Instead of being a time-limited demo for a regular e-mail provider, the spin is that it’s a fully-featured client for a temporary e-mail service.

David Heinemeier Hansson:

Apple has definitively approved HEY in the App Store!! No IAP, no 30% cut, but we’ve opened the door to a free temp address service, and use same app for work accounts.

Good for them, but it’s now even less clear what the guidelines mean. I expect that other apps that try to just “add a demo” or unrelated functionality will be rejected, although perhaps FastMail could create a similar randomized e-mail service.