Archive for May 12, 2022

Thursday, May 12, 2022 [Tweets] [Favorites]

The Apple Services Experience Is Not Good Enough

Benjamin Mayo:

Apple’s services tick the boxes, and they mostly do what they promise. However, nothing comes close to the quality of experience I expect to have from things branded with the Apple logo. When I am using these apps, I am not filled with confidence that striving for greatness was a top priority. Far too often, meeting revenue goals and business objectives seem more important to their creation.

They are built to a passing grade, but nothing more. Basic features found in services from rival companies are either lacking altogether in Apple’s apps, or implemented half-heartedly and performance is sluggish. Browsing in Music and TV is painful, with an over-reliance on the infinite scroll. New content is just tacked on the bottom of already long lists. Meanwhile, the navigation bars are blank when they could include simple shortcut buttons and filters to help users navigate and explore. Moreover, these apps feature too many loading states and too much waiting around. They are akin to janky web apps, rather than richly-compelling responsive experiences.

The services apps are all frustrating to use. In may ways, they feel worse than Web apps. I cannot believe how Apple has let them regress so much. I miss iTunes from 15 years ago. Looking through movies in the TV app the other day: there is no way to see a sorted list of titles. There’s no way to search my list of purchases, nor even to jump-scroll by letter. There is no way to mark a movie on my iPhone so that I can easily find it again on my Apple TV. I guess I could start playing it for a few seconds to make it appear in Up Next? But I don’t want to download it onto my phone, and the sideways scrolling Up Next list is hard to work with and also includes the things that I’m currently watching. Why does it scroll sideways? I guess so that the rest of the screen can be used to promote Apple TV+ content.

Previously:

Update (2022-05-13): Craig Grannell:

  • Going into Albums view in Photos on iPhone and dragging up to prompt photos to actually upload
  • Regularly force-quitting bird in Activity Monitor to get iCloud docs to sync
  • Restarting Music to get streaming to play

Becky Hansmeyer:

There is downloaded, on-device video content in the TV app on my kids’ iPads that they literally cannot access without an internet connection. I have to tether their iPads to my phone in the car to get their library to appear. Otherwise it just shows an empty state.

Mike Rockwell:

I maintain an old Mac Mini that runs El Capitan and an even older iMac that runs Snow Leopard. iTunes is so much better on those older machines than the current state of the TV app, Apple Music, and Apple Podcasts.

My current pet peeve is the Podcast app’s lack of OPML export or import. What a terrible, user-hostile omission.

@MainActor Not Guaranteed

Ole Begemann:

@MainActor is a Swift annotation to coerce a function to always run on the main thread and to enable the compiler to verify this. How does this work? In this article, I’m going to reimplement @MainActor in a slightly simplified form for illustration purposes, mainly to show how little “magic” there is to it. The code of the real implementation in the Swift standard library is available in the Swift repository.

[…]

@MainActor already uses the unofficial ability for an actor to provide a custom executor, and we’re going to do the same for our reimplementation. A serial executor that runs its job on the main dispatch queue is implemented as follows.

[…]

John McCall’s draft proposal for custom executors is worth reading, particularly the philosophy section.

Rob Jonson (tweet):

For good measure – I mark the task as @MainActor.

My expectation was the following

  1. in doWork(), it would return off the main thread after Background().go()
  2. @MainActor annotation would ensure that calling self.mainDate would happen on the main thread – or there would be a compiler error
  3. @MainActor annotation would ensure that calling self.storedDate would happen on the main thread – or there would be a compiler error

#2 and #3 are false.

[…]

Bizarrely – If include a print statement in my task, then everything does run on the main thread!!!

Ole Begemann:

If you’re writing Swift concurrency code, add these compiler flags:

-Xfrontend -warn-concurrency -Xfrontend -enable-actor-data-race-checks

(in Xcode: Other Swift Flags)

Warnings in Swift 5.5 identify unsafe constructs, will become errors in Swift 6.

Rob Jonson:

Moving the exact same code out of the NSViewController and into a separate class (that inherits from nothing) causes the expected compiler warnings to kick in.

It seems that my model is ‘Sendable’ – so now the compiler can do magic.

This feels like an important limitation that should be in BIG BOLD LETTERS in the documentation…

See also: @MainActor ignored by the compiler.

Update (2022-05-13): See also: Frank Illenberger.

Extended Verification Certificates

Troy Hunt (via Nick Heer):

Ah, now we know the cert has been issued to DigiCert Inc. in the US. So, all good right? No, because who are they? I mean, all we know is that the cert has been issued to an entity with that name, we don’t know if they are a certificate authority or a company that certifies how many fingers you have on your hand (digits - get it?). This is what Ian Carroll demonstrated a few years back when he got an EV cert for Stripe Inc. Perfectly legit cert issued to a perfectly legit entity, just not the one everyone thought it was.

[…]

Amazon doesn’t have an EV cert, inevitably because they’re smart enough to realise it wouldn’t do them any good if they did! But you see the problem: if DigiCert wants to make the case that you should inspect a cert by drilling down 2 clicks (not one) before trusting the site, that clearly flies in the face of how the web actually works. Same with eBay. Same with Alibaba. Same with the little shop I buy my coffee from. Don’t “look beyond the lock” because if you do, you’re not going to be buying anything online any more.

[…]

Let’s keep humouring DigiCert: how do you look “beyond the lock” on mobile? You know, those devices that are now massively dominant in the mobile shopping space? The ones that account for about three quarters of all e-commerce sales? Try it on Safari on iOS. Can you figure out how to inspect a site’s certificate? You won’t, because you can’t.

Proposed EU Digital Markets and Services Acts

James Vincent (Hacker News):

Early Saturday morning, after hours of negotiations, the bloc agreed on the broad terms of the Digital Services Act, or DSA, which will force tech companies to take greater responsibility for content that appears on their platforms. New obligations include removing illegal content and goods more quickly, explaining to users and researchers how their algorithms work, and taking stricter action on the spread of misinformation. Companies face fines of up to 6 percent of their annual turnover for noncompliance.

[…]

Large online platforms like Facebook will have to make the working of their recommender algorithms (used for sorting content on the News Feed or suggesting TV shows on Netflix) transparent to users. Users should also be offered a recommender system “not based on profiling.”

[…]

Hosting services and online platforms will have to explain clearly why they have removed illegal content as well as give users the ability to appeal such takedowns. The DSA itself does not define what content is illegal, though, and leaves this up to individual countries.

Thomas Claburn (Hacker News):

In short, when the DMA takes effect in 2024, it appears that Apple will be required to allow browser competition on iOS devices.

Hartley Charlton:

Apple will be forced to allow users to utilize third-party app stores and payment systems, as well as make iMessage interoperable with other messaging services, by the European Union’s Digital Markets Act (DMA), according to a newly published document from the European Commission.

Steve Troughton-Smith:

From the start, we knew the App Store was a symbiotic environment designed to create value-add for Apple devices by giving devs great tools to make apps to entice customers to Apple, whilst also ensuring to deny devs any ability to ever remotely threaten Apple’s position of power

It was an incredibly-delicate, calculated ‘truce’ that relied on Apple not overstepping into abuse. Apple, through greed, was unable to maintain status quo. Instead of reform, set in motion to burn it all down + spent 3 years illustrating to devs just how small & worthless we are

The idea that governments would ever step in and ‘save’ the platform from Apple’s nannying, abuse, was a pipe dream few of us back in ’08 thought would happen in a million years. Yet somehow, bit by bit, Apple pushed far enough across that line to bring us to where we are today

Jesper:

I’ve never understood why people have been so bewitched about the positive potential outcomes. Purely by making the operating system, defining the APIs, bundling its own software, manufacturing its own hardware, tying the operating system to its hardware and vice versa and selling even more of its own software, Apple has plenty of opportunity to set good examples and draw people to the combined value proposition. Why the hell does it need any more control than that?

[…]

iOS and the App Store has not been a truce. It has been a destructive, abusive, lopsided, mistrustful relationship; a relationship that has allowed access to a platform advantageous enough to make you close your eyes and think of multi-touch. It has been an insult to history, an exercise in attempting to redefine away the fundamental facts of the market and of their existing user base and developer ecosystem in a puff of malevolent marketing.

Foo Yun Chee (via Hacker News):

Apple faces a possible hefty fine and may have to open its mobile payment system to competitors after EU antitrust regulators charged the iPhone maker with restricting rivals’ access to its technology used for mobile wallets.

Previously: