Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Archive for July 2024

Wednesday, July 31, 2024

macOS 14.6

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

macOS Sonoma 14.6 includes bug fixes and security improvements, and it is recommended for all Macs that run the macOS Sonoma operating system.

Juli Clover:

The macOS Sonoma 14.6 update that Apple released today includes dual display support, an important feature specifically for the 14-inch M3 MacBook Pro. With the new software, the 14-inch MacBook Pro with M3 chip is able to run two external displays in clamshell mode, aka when the lid is closed.

Adam Engst:

The other group that will be interested in the remaining changes in macOS 14.6 are enterprise admins.

Howard Oakley:

Apple hasn’t provided any release notes at all for 14.6, although it did for the release candidate, where it stated that this fixes app crashes when running iPhone and iOS apps on Apple silicon Macs, and a complex bug resulting in the hardware video decoder not being used when it should have been.

See also: Mr. Macintosh.

Previously:

macOS 13.6.8 and macOS 12.7.6

Apple (full installer):

This document describes the security content of macOS Ventura 13.6.8.

Apple (full installer):

This document describes the security content of macOS Monterey 12.7.6.

Adam Engst:

Our general advice is that these updates are all worth installing soon, but with one exception, you can wait until it’s convenient since none of the vulnerabilities are being exploited in the wild. The exception is macOS 12.7.6 Monterey, which fixes a zero-day vulnerability previously fixed in macOS 14 Sonoma and macOS 13 Ventura.

Previously:

iOS 17.6 and iPadOS 17.6

Juli Clover (release notes, security, developer):

There are no notable features in the iOS 17.6 and iPadOS 17.6 updates, with Apple adding unspecified bug fixes and security updates. Nothing new was discovered during the beta testing process.

Eric deRuiter:

Updating to iOS 17.6 now prompts to enable Stolen Device Protection on the first boot. This will lead to some people getting locked out of their phones and requiring an erase and restore because the drawback to enabling it is not made clear to the user.

Presumably it will prompt at each future update as well, just as I have to decline to enable Siri at every single update.

Previously:

watchOS 10.6

Juli Clover (release notes, security, developer):

The watchOS 10.6 update does not add any new features, and instead focuses on bug fixes and security improvements.

Previously:

tvOS 17.6

Juli Clover (release notes, security, developer):

There were no new features found during the beta testing process.

Previously:

visionOS 1.3

Juli Clover (release notes, security, developer):

There are no new features in the visionOS 1.3 update, but it does bring small bug fixes and security improvements.

Previously:

Tuesday, July 30, 2024

BitTorrent Apps in AltStore PAL

Jess Weatherbed:

Specifically, the new additions include iTorrent, an iOS torrent client that can be used without jailbreaking iPhones or iPads, and qBitControl, a qBittorrent remote client for iOS devices. PeopleDrop is a dating-focused “social discovery platform” that connects you with other users in the real world as they pass by.

Hartley Charlton:

Apple has consistently banned torrent apps from its App Store, citing that they are “often used for the purpose of infringing third-party rights,” but the DMA has weakened Apple’s ability to maintain its walled garden approach, allowing alternative app marketplaces like AltStore PAL to offer apps that do not meet Apple’s guidelines.

I still think it’s wild that Apple banned an entire network protocol because some people used it for copyright infringement.

Previously:

Spain Investigates App Store

Hartley Charlton:

Spain’s competition authority has launched an investigation into Apple’s App Store over potential anti-competitive practices that could result in hefty fines (via Reuters).

[…]

If the CNMC’s investigation confirms these allegations, Apple could face fines up to 10% of its global annual turnover, potentially amounting to billions of euros. The inquiry, which may take up to two years to conclude, adds to Apple’s growing list of regulatory challenges in Europe.

Michael Burkhardt:

The CNMC started their investigation last week, alleging that Apple may be abusing their dominant position to impose unfair commercial conditions to app developers. This could be in violation of the Spanish Competition Act, as well as Article 102 of the Treaty on the Functioning of the European Union.

Previously:

Social Media AI Training

C. Scott Brown:

Meta is now scraping Facebook posts to train its AI model. While this isn’t surprising on its own, what is surprising is just how difficult Meta is making it for users to opt out of this process.

Via X Daily News:

Instagram is training AI on your data but makes it nearly impossible to opt out.

Juli Clover:

Social network X (formerly Twitter) recently activated a setting that gives it permission to train Grok AI on user tweets. All X users are opted in by default, with X failing to notify customers about the change.

Kimmy Bestie:

You can disable this using the web but it’s hidden. You can’t disable using the mobile app.

Dare Obasanjo:

I found the outrage about X’s default setting to use user content to train xAI’s Grok to be confusing, at least for public tweets.

If you’ve ever posted anything on the public internet, it has been used to train AI. If you do so today, it will as well.

This is my thinking as well. It’s the same with Reddit and YouTube where the users specifically contributed their content to the Web. This is quite different from the situations with Adobe, Slack, Grammarly, and Zoom where the expectation was that the data was private.

Previously:

Monday, July 29, 2024

The First Apple Intelligence Beta

Joe Rossignol:

Apple Intelligence is still not available as of the fourth developer beta of iOS 18 this week, leading some to wonder if the features have been delayed. However, we have confirmed that Apple still plans to add some of the new Apple Intelligence features to an upcoming beta this summer.

Matthew Cassinelli:

I still can’t tell if this means App Intents.

Hartley Charlton:

According to individuals with knowledge about Apple’s plans, the company now plans to start rolling out Apple Intelligence in software updates by October, arriving several weeks after the launch of iOS 18, iPadOS 18, and macOS Sequoia. This means that Apple Intelligence will now effectively be split out of the initial launch of the new software updates. The reason for the delay is said to be concern about the stability of Apple Intelligence features and need for developers to have sufficient testing time.

Apple Intelligence will still be made available to software developers for the first time as soon as next week with the first betas of iOS 18.1 and iPadOS 18.1, which would be extremely unusual as the company does not normally release previews of follow-up software updates until the first version has been released.

Juli Clover:

Apple is today providing developers with the first betas of iOS 18.1, iPadOS 18.1, and macOS Sequoia 15.1, with the new software introducing an early version of the Apple Intelligence features.

[…]

Several Apple Intelligence features are available as of today, including Writing Tools, Siri’s revamped design, the option to move between voice commands and typing to Siri, summaries for transcripts and other content, the new Mail categories and smart replies, smart replies in Messages, and more.

Dan Moren:

As for what you won’t find here, don’t expect the contentious image generation features like Image Playground, the ability to clean up and remove unwanted details from photos, and integration with ChatGPT. It’s unclear if those will appear in future builds of these betas, or as subsequent updates after public release. Also unclear is whether there will be a public beta of these versions down the road for non-developers.

Ezekiel Elin:

If you’re confused, macOS Sequoia 15.1 is on a different update track than 15.0 (versus iOS that just has one track for all iOS 18)

However, even after switching to the new track, no updates show up for me in Software Update. Apple’s announcement includes a link to the macOS 15.1 release notes, but they don’t exist yet.

Jeff Johnson:

The dual beta track proves irrefutably that Apple’s annual release schedule is irreparably broken and desperately needs to be abolished.

Previously:

Update (2024-07-30): Apple has posted the release notes at a different link. Although they don’t say so, it appears that macOS only offers the beta update when running on a Mac that supports Apple Intelligence (even though macOS 15.1 will ship for Intel Macs, too) and which is not in the EU.

Craig Hockenberry:

Giving developers two beta versions to test is going to be a disaster for a lot of folks.

Developers install 18.1 because it’s the new hotness. And then September rolls around and everyone realizes they haven’t been testing their apps on the 18.0 release shipping to customers.

There is no way I’m installing 18.1 on my primary device until the day after 18.0 ships.

jedmund:

i feel like this is the problem with Apple’s “everything releases at the same time” approach. one thing being late means everything gets thrown out of alignment to the point where individual developers can’t effectively do their jobs.

Ezekiel Elin:

Siri is still incompetent in 18.1 so that’s good…

Helge Heß:

“IntelligencePlatformComputeService”, hmm…

Gui Rambo:

PSA: if you’re thinking of installing the Sequoia beta to an external disk in order to test the new AI features, don’t. It looks like those features do not work when booted from an external disk.

Before anyone asks: Apple Intelligence features aren’t available in virtual machines either.

Update (2024-08-01): Although I’ve updated to the macOS 15.1 beta, I have not been able to test Apple Intelligence yet. It took about a day in the “Preparing” stage before it would allow me to join the waitlist, and I’m still waiting.

Magic Lasso Redesigned

Matthew Bickham:

Under the covers, Magic Lasso has been re-architected using SwiftUI which enables a shared but tailored UI implementation across the iPhone, iPad and Mac apps.

The move to SwiftUI delivers improved user accessibility including complete support for variable type sizing and Dark mode. In the future, multilingual support will also be considerably easier to rollout.

Over 95% of the app’s UI is now written in SwiftUI, an increase from less than 30% this time last year.

Matthew Bickham:

What I did notice going through the process though is that if you base the implementation on the SwiftUI defaults you will definitely get some strange, and especially on macOS, less than ideal behaviour. This led me to not use some of the inbuilt SwiftUI approaches for certain UI elements. Instead, I created custom implementations that better fit within user expectations and best practice iOS and macOS conventions.

[…]

A huge part of the work was actually prototyping approaches in SwiftUI to see what works well and what doesn’t. Once a clean path was discovered, the final implementation was relatively straightforward but it was based upon those learnings. The hard part was ensuring simplicity and not falling into the many traps of weird behaviour that are present in the System Settings UI for instance.

Personally I prefer working in SwiftUI now – probably because I no longer need to implement two similar UIs in both UIKit and AppKit.

Previously:

Actor Reentrancy in Swift

Donny Wals (Mastodon):

When you start learning about actors in Swift, you’ll find that explanations will always contain something along the lines of “Actors protect shared mutable state by making sure the actor only does one thing at a time”. As a single sentence summary of actors, this is great but it misses an important nuance. While it’s true that actors do only one thing at a time, they don’t always execute function calls atomically.

[…]

However, when we introduce an async function that has a suspension point the actor will not sit around and wait for the suspension point to resume. Instead, the actor will grab the next message in its “mailbox” and start making progress on that instead. When the thing we were awaiting returns, the actor will continue working on our original function.

[…]

Things become trickier when you try and make your actor into a serial queue that runs async tasks. In a future post I’d like to dig into why that’s so tricky and explore possible solutions.

Holly Borla:

I think something like an async queue should be included in the concurrency library. The AsyncStream boilerplate is repeated everywhere for this sort of pattern, and we should make it easier to write because it’s a pattern that a lot of people need when order has to be guaranteed.

Marcin Krzyzanowski:

what’s worse:

  • undetectable actor reenteancy bugs that freeze the process
  • data race bugs that crash the app

can’t decide. hate both. one was not a big deal until recently in Swift

Drew McCormack:

When most people first learn about actors, I think they expect it to work this way, ie, that each call completes, and the next begins, like a class with a serial queue. So I don’t think there is anything fundamentally wrong with the idea. Of course, what you open your door to are reentrances which can deadlock. Apple chose their evil, namely races, over the alternative, deadlocking. I find races harder to debug in general.

Helge Heß:

It is pretty clear that the reentrancy issue of Swift “actors” exists specifically to avoid the chance of deadlock, which an atomic, async, actor has.

I can’t say whether that is better or worse in practice, I’d say probably worse. Maybe it would have been better if an actor wouldn’t be allowed to issue async calls, and hence have real-actor-like atomic behaviour guaranteed. I’m pretty sure a ton of people are going to shoot themselves in the foot over the reentrancy issue.

Drew McCormack:

Seems you can write a Swift macro to serialize execution of an async func. Trick is to embed a queue in the func, generating the appropriate return values etc.

Tobias:

Since the introduction of Actors, the Swift community is highly focused on them. I very rarely see Stuff like “Here is this cool new API and what you can do with it” anymore but only “How do I avoid data races and how does this Actor stuff actually work”. It is sad.

Matt Massicotte:

I took a shot at building an async-compatible lock.

Great for dealing with actor reentrancy. It’s kinda hard to use right now, becuase it cannot be built with the compiler in Xcode 16b4. I’d still love to hear what you think, even just about the concept.

Previously:

Friday, July 26, 2024

Stripe Acquires Lemon Squeezy

Lemon Squeezy Team (via Hacker News):

In 2020, when the world gave us lemons, we decided to make lemonade. We imagined a world where selling digital products would be as simple as opening a lemonade stand. We dreamed of a platform that would take the pain out of selling globally.

Tax headaches, fraud prevention, handling chargebacks, license key management, and file delivery, among other things, are complicated.

[…]

Going forward, our mission remains the same: make selling digital products easy-peasy.

With Stripe’s help, we’ll continue to improve the merchant of record offering, bolstering billing support, building an even more intuitive customer experience, and more.

Previously:

Update (2024-07-29): Patrick Collison:

Welcome @lmsqueezy! We’re going to scale merchant of record selling in a big way.

Sonos Apologizes for App Redesign

Marco.B:

Today we are introducing the most extensive app redesign ever, creating an unprecedented streaming experience that allows listeners to organize their favorite playlists, stations, albums and more from over 100 services on one customizable Home screen.

The new Home screen provides faster access to Sonos system controls with one easy swipe up, making tab to tab jumping a thing of the past. As a leader in sound experience that’s focused on creating a better way to listen, Sonos intentionally redesigned the app on a modern software platform for an easier, faster and better experience that can support more rapid innovation.

DianeRoberts (AMA):

The app is not exclusively built with Flutter, but does make use of Flutter for certain portions of the setup experience. We’ve actually been using Flutter for those experiences for many years, and ported that forward to the new app.

The majority of the app is in fact native. On iOS that means Swift, using SwiftUI. On Android that means Kotlin, using Jetpack Compose.

Juli Clover (forum threads):

Sonos this week released a major redesign for the Sonos app, introducing customizable home screen meant to deliver a personalized listening experience. The update was announced back in April, but just went live, and unfortunately, it removes a number of features while also introducing several bugs.

Multiple complaints on social media have called the app a “step back” with missing features like editing a song queue, managing playlists, shuffling a music library, and setting alarms and timers, along with slow performance and hard-to-access system controls. There has also been feedback from users about missing accessibility features.

The Verge asked Sonos about the negative feedback, and in response, Sonos said that it’s aware of the complaints, but “it takes courage” to rebuild a core product.

Juli Clover:

Sonos CEO Patrick Spence today penned a blog post on the Sonos website apologizing for the controversial Sonos app redesign and promising ongoing updates throughout the year.

Spence said that improving the app for customers is the company’s number one priority, and he explained that addressing bugs that came up in the new app delayed the introduction of additional features.

Previously:

Update (2024-08-01): Juli Clover:

Sonos community manager Keith Nieves confirmed the bug fix on Reddit (via The Verge), stating that the latest version of the app addresses an unspecified issue that was causing excessive battery use on some Apple devices. There have been several complaints about the app’s battery usage over the course of the last week, with the Sonos app running constantly in the background.

Unfortunately, several Reddit users have since said they’re having issues with the update, which seems to be causing a “No System Found” error message. This is a bug that existed previously, but the update seems to have increased the frequency of the error.

Update (2024-08-15): Chris Welch:

Sonos laid off approximately 100 employees this morning, a source familiar with the situation tells The Verge.

[…]

These latest cuts come as Sonos continues to grapple with the fallout from its disastrous mobile app redesign. On Sonos’ earnings call last week, CEO Patrick Spence stressed that fixing the app is the company’s number one priority — so much so that two hardware launches planned for later this year have now been delayed to keep all focus on the app.

Eric Slivka:

Just a few months after debuting an all-new mobile app for controlling its audio products, Sonos is considering bringing back the previous version of the app following numerous user complaints, reports The Verge.

Update (2024-08-21): Jay Peters (via Hacker News):

If you want the old Sonos app back, it’s not coming. In a Reddit AMA response posted Tuesday, Sonos CEO Spence says that he was hopeful “until very recently” that the company could rerelease the app, confirming a report from The Verge that the company was considering doing so. But after testing that option, rereleasing the old app would apparently make things worse, Spence says.

[…]

The trick of course is that Sonos is not just the mobile app, but software that runs on your speakers and in the cloud too. In the months since the new mobile app launched we’ve been updating the software that runs on our speakers and in the cloud to the point where today S2 is less reliable & less stable then what you remember.

Andy Pennell:

For the new app, Sonos threw out all of the old app code, a “clean slate” approach, replacing the front-end (the UX everyone loves to hate) and also the back-end (that actually communicates with speakers and music services).

[…]

When the app starts, it must find your speakers as a critical precursor to anything else, but for some inexplicable reason they decided to drop SSDP and rely entirely on mDNS for device discovery. I don’t know much about mDNS (as my own Sonos apps have never used it), but evidently this new way of finding speakers on the network has proven hugely problematic.

[…]

As all traffic is now encrypted, it takes more CPU cycles for every network call: client encrypts it, sends it (TLS is a lot more chatty), and the speakers have to decrypt it before they can do anything. The crypto overhead is going to be a challenge on the older Sonos devices, which have tiny amounts of RAM (as low as 64MB compared to 8GB of the latest Sonos devices) with a similar disparity in CPU power. Also the cloud API is more “chatty” than the UPnP API, multiplying the network overhead.

[…]

Another reason for the reduced performance is how music services now work: in the old app, the app made SMAPI calls directly to each music service (eg Apple, Spotify, etc), to enumerate items and get artwork. The new app instead calls into the Sonos cloud to do all of this, and then their cloud service makes the SMAPI calls to get the data (I assume), then it returns that data back to the app. Even for artwork! That’s a lot more networking traffic and a lot slower than before.

Eric Schwarz:

I don’t know what’s more infuriating—that a networked speaker manufacturer can’t seem to get networked speakers to work properly or that these require the cloud even for something as simple as AirPlaying content from within your own home network.

Update (2024-09-06): Ryan Christoffel:

Sonos has launched a public roadmap for its future. A new Trello board tracks fixes in the app and outlines what’s coming next.

denominator (via Hacker News):

In short, I’ll summarize my rant before story time - as a prior employee of Sonos, I believe that incompetence has infected top management at the company. Incompetence in management, incompetence in Software, SOFTWARE OH MY GOD this App roll-out, this roadmap.. is a joke.

Update (2024-09-25): Juli Clover:

Today, Bloomberg delved into what went wrong at Sonos ahead of when the app launched, and why it came out anyway.

Sonos had to come out with a new app when it launched the Sonos Ace headphones because of “technical debt.” The company basically spent time working on new features instead of updating outdated code written in obsolete languages, leading to infrastructure issues. Sonos put off addressing the underlying technical debt, but introducing the headphones required the Sonos app and the cloud setup behind it to be overhauled.

At the time the app was in development, Sonos laid off some of its employees to cut costs and also did some internal restructuring that was “causing chaos” by separating people who had worked together for years. As the app’s launch approached, employees protested “forcefully,” even resorting to yelling and screaming, because it was clear the app wasn’t ready to launch.

Update (2024-10-02): Juli Clover:

Sonos today announced a series of new commitments that are meant to demonstrate the company’s “renewed focus” on software quality and customer experience. The announcement and an accompanying video from Sonos CEO Patrick Spence come as Sonos tries to ameliorate the negative experience customers have had with the May Sonos app update.

Update (2024-10-17): Rachel Karten (via Jason Snell):

KeithFromSonos is a Sonos employee who is very active in the r/Sonos subreddit and has somehow won over customers in a particularly tumultuous time for the brand. It’s hard for me to not use jargon here, but he shows up as a customer and not like a brand mouthpiece.

HP Discontinues Online-Only LaserJet Printers

Sean Hollister:

Last May, I told you how HP’s bestselling printer can lock you to the company’s own subscription ink for life, with no way to cancel, with its dastardly HP Plus scheme. But HP has decided to remove those shackles from future laser printers, at least.

Christopher Harper (via Slashdot):

HP has finally been forced to discontinue its cheaper e-series LaserJet printers due to customers experiencing problems with their online-only and always tied to HP+ subscription requirements. Among other things, HP+ requires a permanent Internet connection, and customers only use HP-original ink and toners, not allowing for third-party alternatives to be used at all. There are benefits to HP+, including cloud printing and an extra year’s warranty, but the forced online requirement for a cheaper printer left a bad taste in the mouths of many consumers.

In any case, it’s important to clarify that this discontinuation of HP printers will only impact HP LaserJet printers that have an “e” added to the end of their model name to denote the alternative business model.

Previously:

SwiftData and Core Data at WWDC24

What’s new in SwiftData:

SwiftData makes it easy to add persistence to your app with its expressive, declarative API. Learn about refinements to SwiftData, including compound uniqueness constraints, faster queries with #Index, queries in Xcode previews, and rich predicate expressions. Join us to explore how you can use all of these features to express richer models and improve performance in your app.

[…]

You can use the new #Unique macro to tell SwiftData which combinations of your model’s properties must always remain unique in the model data. When two model instances share the same unique values, SwiftData will perform an upsert on collision with an existing model!

It seems there is still no way to control the merge policy.

New in iOS 18 is the ability to use Foundation’s new #Expression macro to build complex predicates easily! Expressions allow for reference values that do not produce true or false but instead allow for arbitrary types.

Create a custom data store with SwiftData:

Combine the power of SwiftData’s expressive, declarative modeling API with your own persistence backend. Learn how to build a custom data store and explore how to progressively add persistence features in your app.

Track model changes with SwiftData history:

Reveal the history of your model’s changes with SwiftData! Use the history API to understand when data store changes occurred, and learn how to use this information to build features like remote server sync and out-of-process change handing in your app. We’ll also cover how you can build support for the history API into a custom data store.

See also: the SwiftData documentation and updates.

I was not impressed with the introduction of SwiftData last year, and this year was also a disappointment. It seems like they are working on the wrong things and not communicating their vision for the future of SwiftData and how it will work with (or supplant) Core Data. It’s not clear whether this is a strategy and execution problem or primarily a communication problem, but it is leaving me unsettled.

Last year, SwiftData was very buggy and incomplete. This year, they didn’t talk about fixing the basics but rather about advanced and somewhat niche features like custom stores and history tracking. Last year, there was no integration between SwiftData and Core Data identifiers and predicates. There still seems to be none. The only mention of Core Data was that if you’re using Core Data’s persistent history you can now migrate to SwiftData history. There were no Core Data sessions at WWDC 2024.

So it remains unclear whether it’s even planned for SwiftData to be able to do the things that Core Data can. Is this going to be like SwiftUI where five years later they are still reimplementing features the previous framework has had for decades? It’s also unclear whether Core Data even has a future. Last year was encouraging in that both frameworks got equivalent new features at the same time. This year, Core Data got nothing, even though there’s a long list of outstanding feature requests, limitations, and bugs. Is this year an aberration? Or is Core Data in maintenance mode while they focus on SwiftData? It really does not feel good to have multiple apps and 20 years of code built on a framework that Apple isn’t talking about.

The point of building on system frameworks is that they’re in theory better supported than random open source projects. But now the future is uncertain, and it’s closed-source so that no one else can make the fixes or improvements that Apple won’t. I can’t rewrite my Core Data code in SwiftData because it’s so limited. Even if there are major improvements next year, they will be locked to macOS 16 and later, so it will be a long time before I can deploy code that uses them. At least right now, it’s not worth rewriting my code for a third-party framework. Core Data isn’t announced dead yet, and many other apps use it, so hopefully it’s safe to assume that Apple won’t let it break too badly. But if I were starting a new app today I would seriously consider whether it makes sense to be on the Apple train. There are some interesting alternatives such as GRDB, Lighter, and Blackbird.

Donny Wals:

It feels like Apple wanted to do more with SwiftData but they ran out of time. Surely being able to write your own persistence layer wasn’t the one thing they really wanted to ship, right?

There’s so much that developers were hoping for this year but we didn’t get any of it.

Makes me wonder whether the plan was to replace Core Data entirely and go from there but they couldn’t get it done so they gave us this instead?

Gwendal Roué:

I mostly see people hitting walls with SwiftData (limited support for non-optional relationships and ordered relationships, predicates that won’t compile, no dynamic predicate, change reactivity that does not work, etc.) And I’m all but charmed by its mutable model classes anyway. Maybe it would be interesting to have a GRDB store, so that one can workaround SwiftData limitations with a robust database API. But then, why not use the robust API in the first place?

Donny Wals:

Sadly, none of these limitations are the result of Core Data not supporting them. They’re a result of SwiftData’s interface not exposing these features. So even if you ship a custom persistence layer you’re limited by what SwiftData supports. And that’s not much.

For now, SwiftData remains a framework that’s only useful for small, simple apps that don’t need much in terms of features.

Fatbobman:

The latest version of SwiftData was surprisingly impactful. Although it might seem that few features were added on the surface, the substantial underlying adjustments were revolutionary. Considering that SwiftData was only founded a year ago, such changes were particularly unexpected. Stability remains a challenge, as seen in the first test version, which may disappoint many developers who had high expectations for SwiftData. However, after in-depth analysis, I believe there is sound reasoning behind these significant adjustments. The new version of SwiftData has almost achieved decoupling from the Apple ecosystem, and once it adds an independent default storage implementation, it will have all the makings of a cross-platform open-source framework. While this is just my personal hope, given Apple’s increasingly open approach to the community, the potential for this transformation is significant. If realized, the current waiting and effort will undoubtedly be worthwhile.

Helge Heß:

What they apparently didn’t do is fix the actual issues it had, like missing Observation refreshes 🙃

dasdom:

Is SwiftData dead already?

SENTINELITE:

I picked up SwiftData last year for my app, & it’s been an excruciatingly painful experience. Cloud syncing doesn’t always work, duplicate entries, etc.

Things didn’t really improve this year, although some internal things did, because some bugs have been cleaned up.

But… I just feel lost. I need the foundation of the app to be working, so I can dive into other APIs (Widgets, shortcuts, etc), but it’s been an uphill battle.

Helge Heß:

Something disappointing in SwiftData is that it doesn’t make use of the static nature of the macro(s). The macro can’t see the full schema like Lighter does, but it could still statically generate a ton, e.g. a static snapshot struct for the backing data. Or predefined indices for quickly binding the snapshot to the SQLite API (or really any).

Instead we get custom backends. Is anyone going to use this, for anything? Maybe they’ll eventually release it as FOSS for server side?

Helge Heß:

IMO the ability to replace the backend is exactly the wrong direction to go 🤷‍♀️ (for an embedded persistence framework). Specific backends should have specific implementations of the SwiftData API, not yet another layer in between that does abstractions which likely won’t fly. Remember the LDAP EOAdapter…

SENTINELITE:

Adopting SwiftData’s new History stuff, causes my model(s) to crash, as you can’t query embedded structs. […] I’m THIS close to rewriting the back-end. Gah.

Jon Duenas:

Yeah, it’s just, credit where credit is due, adding CloudKit to SwiftData “just worked”. With bugs and crashes, sure. But barely any extra effort on the developer’s end to do the actual syncing.

I’m actually considering whether I should just move rolling my own backend with something like Firebase or Supabase and make local storage more of a cache than the source of truth.

Duncan Babbage:

Would love any leads on this: setting [Core Data’s] .fetchBatchSize causes entire collection to be immediately traversed [by SwiftUI].

With Core Data and AppKit there are several possible solutions. If you fetch whole objects, the batching “just works,” so long as you stick to one store and avoid converting the NSArray to a Swift Array. With multiple stores, or to save memory, it’s straightforward to just fetch the sorted IDs and bring the objects into memory as needed.

Previously:

Update (2024-07-29): Helge Heß:

SQLite.swift is really slow. If you want a popular good one, rather get GRDB. Neither provides what SwiftData has though, i.e. an EditingContext.

I do think the context is a useful feature—another reason I’ve liked Core Data.

When I need direct SQLite access, I’ve been using SQLite.swift because it seemed simpler and smaller than GRDB. It like it, but it is indeed very slow due to Swift and GCD overhead within the framework. I was able to 3x the query performance by making some minor changes to reduce overhead and by manually unpacking the result rows. Now nearly all the time is spent in SQLite itself.

Update (2024-07-31): Keith Harrison:

First the bad news, this [SwiftData Indexes are] an iOS 18 feature that does not back deploy to iOS 17.

[…]

Note the subtle difference between adding an index for the individual properties or a compound index (I can see myself getting this wrong)[…]

I don’t see how to index the entity column.

Update (2024-09-25): Fatbobman:

Compared to minor UI-level glitches, deeper crash issues have caught some developers off guard. Apps using SwiftData have seen a noticeable increase in crash frequency, undoubtedly disappointing many developers who had high hopes for the new framework. Even more surprising is that the fetchedProperties feature in Core Data on iOS 18 can also cause crashes—quite unexpected for a framework that’s known for its stability.

Update (2024-09-30): Chad Etzel:

well.. i’m trying to use SwiftData but the @Query wrapper spins the CPU 100%+ on the main thread… lots of other ppl reporting this .. seems very bad

Thursday, July 25, 2024

SearchGPT

Kylie Robison (Hacker News):

OpenAI is announcing its much-anticipated entry into the search market, SearchGPT, an AI-powered search engine with real-time access to information across the internet.

The search engine starts with a large textbox that asks the user “What are you looking for?” But rather than returning a plain list of links, SearchGPT tries to organize and make sense of them. In one example from OpenAI, the search engine summarizes its findings on music festivals and then presents short descriptions of the events followed by an attribution link.

[…]

Publishers will have a way to “manage how they appear in OpenAI search features,” the company writes. They can opt out of having their content used to train OpenAI’s models and still be surfaced in search.

Previously:

Update (2024-07-26): Juli Clover:

SearchGPT is available to a small group of users and publishers at the current time, with OpenAI seeking feedback on the product. The prototype is temporary at the current time, but "best" of the features will be integrated into ChatGPT in the future.

Only Google Can Crawl Reddit

Emanuel Maiberg (Hacker News):

Google is now the only search engine that can surface results from Reddit, making one of the web’s most valuable repositories of user generated content exclusive to the internet’s already dominant search engine. If you use Bing, DuckDuckGo, Mojeek, Qwant or any other alternative search engine that doesn’t rely on Google’s indexing and search Reddit by using “site:reddit.com,” you will not see any results from the last week.

DuckDuckGo is currently turning up seven links when searching Reddit, but provides no data on where the links go or why, instead only saying that “We would like to show you a description here but the site won't allow us.” Older results will still show up, but these search engines are no longer able to “crawl” Reddit, meaning that Google is the only search engine that will turn up results from Reddit going forward. Searching for Reddit still works on Kagi, an independent, paid search engine that buys part of its search index from Google.

Simon Willison:

Is this a direct result of Google’s deal to license Reddit content for AI training, rumored at $60 million? That’s not been confirmed but it looks likely, especially since accessing that robots.txt using the Google Rich Results testing tool (hence proxied via their IP) appears to return a different file, via this comment, my copy here.

As he says, this is depressing.

Dare Obasanjo:

The pay-to-play internet is here. […] This pretty much kills any chance of disrupting Google with AI as they can outspend everyone on content exclusivity.

Sriram Karra:

“Pay to play” arrived years ago… Just that folks were not paying attention..

Microsoft did this with GitHub. You haven’t been able to find any GitHub responses in Google searches for years.

Previously:

Update (2024-08-08): Nick Heer:

It is unclear to me whether this is a deal only available to Google, or if it is open to any search engine that wants to pay. Even if it was intended to be exclusive, I have a feeling it might not be for much longer. But it seems like something Reddit would only care about doing with Google because other search engines basically do not matter in the United States or worldwide.1 What amount of money do you think Microsoft would need to pay for Bing to be the sole permitted crawler of Reddit in exchange for traffic from its measly market share? I bet it is a lot more than $60 million.

Maybe that is one reason this agreement feels uncomfortable to me. Search engines are marketed as finding results across the entire web but, of course, that is not true: they most often obey rules declared in robots.txt files, but they also do not necessarily index everything they are able to, either. These are not explicit limitations. Yet it feels like it violates the premise of a search engine to say that it will be allowed to crawl and link to other webpages. The whole thing about the web is that the links are free. There is no guarantee the actual page will be freely accessible, but the link itself is not restricted. It is the central problem with link tax laws, and this pay-to-index scheme is similarly restrictive.

[…]

The government attorneys said Bing is required to pay for structured data owing to its smaller size, while Google is able to obtain structured data for free because it sends partners so much traffic. The judge ultimately rejected their argument Microsoft struggled to sign these agreements or it was impeded in doing so, but did not dispute the difference in negotiating power between the two companies.

Emanuel Maiberg:

Microsoft and Reddit are offering conflicting explanations for why Microsoft’s search engine, Bing, is currently blocked from crawling Reddit and offering links from the site in its search results.

Reddit, which now demands payment from anyone crawling the site and using its data to train AI products, claims that Bing’s crawler is being used to power AI products. Microsoft claims it has made it easy for any site to block its crawler that’s used for AI products, while still allowing a crawler that is only used for search results, and that Reddit’s decision to block Bing is “impacting competition” in the search engine space.

The conflicting reasonings behind the block are further proof that the massive, indiscriminate scraping of the internet to create AI training data in a way that violates long-respected norms about how to access information on the web are eroding trust, making the internet less open, and causing tech companies to beef about this issue in public.

Previously:

Apple Commits to Opening NFC in EU

Tim Hardwick:

The European Union has accepted commitments from Apple to open its mobile payments system and give competitors access to the iPhone's NFC technology, bringing an end to a lengthy investigation by EU regulators into the technology.

According to the announcement, Apple has agreed to open up its payments system to other providers free of charge for a decade. Apple will let users set a third-party wallet app as their default, rather than its own Apple Wallet. It will also allow rivals full access to key iOS features, such as double click to launch wallet apps, along with Face ID, Touch ID, and passcodes for authentication.

As John Siracusa says, it’s unclear what this will mean in practice. Maybe the APIs will be unexpectedly limited or Apple will stonewall or reject apps that attempt to use them. And what happens after 10 years?

Previously:

Swift’s AnyObject

Jordan Rose:

You can also use AnyObject as a constraint on protocols: protocol MyDelegate: AnyObject. Now the implementers are known to have reference semantics, and with T: MyDelegate you can have weak references to T, as before. You can even have weak references to any MyDelegate, allowing swapping between delegates of different types.

What you might run into, though, is that any MyDelegate is not itself AnyObject.

[…]

Because it carries more information than just a single object reference: it also has a “witness table” pointer, the run-time representation of a protocol conformance.

[…]

But wait, Objective-C never had this problem! The id <MyDelegate> type doesn’t take up more than a single-object-reference to store! But that’s because ObjC protocols aren’t represented as tables of methods; they’re just promises that the implementing class has methods with particular names.

Previously:

Books for iPad Gets the Photos Treatment

Federico Viticci:

So, uhm, the UI changes to the Books app for iPad are pretty concerning…?

The app went from having a rich sidebar in iPadOS 17 with sections and collections always available to a simplified layout where sections are hidden away in a popover. Less flexible and discoverable than before.

Does Apple want to make iPad apps less desktop class now?

Previously:

Wednesday, July 24, 2024

Steve Jobs: Objects of Our Life

Jony Ive (Hacker News):

Steve rarely attended design conferences. This was 1983, before the launch of the Mac, and still relatively early days of Apple. I find it breathtaking how profound his understanding was of the dramatic changes that were about to happen as the computer became broadly accessible. Of course, beyond just being prophetic, he was fundamental in defining products that would change our culture and our lives forever.

[…]

In the talk, Steve predicts that by 1986 sales of the PC would exceed sales of cars, and that in the following ten years, people would be spending more time with a PC than in a car. These were absurd claims for the early 1980s. Describing what he sees as the inevitability that this would be a pervasive new category, he asks the designers in the audience for help. He asks that they start to think about the design of these products, because designed well or designed poorly, they still would be made.

He was such a clear thinker and communicator.

Adam Engst:

It’s a fabulous time capsule of the pre-digital era, with Jobs saying “Uh-oh” when no one in the audience admits to owning an Apple or any other personal computer. This is a young Steve Jobs, speaking more extemporaneously and unguardedly than he would in later years. I encourage you to spend some time on the exhibit and, in particular, try to watch the full 55-minute presentation.

I was mostly struck by how prescient Jobs was in that talk. Although he had to explain computers and software by analogy for an utterly non-technical audience, he still tossed out prediction after prediction about how things would be in the future. Given that this is 1983, we’ve lived through much of that future by now, and with the benefit of hindsight, we can see that he was remarkably accurate, if sometimes optimistic regarding timeframes.

M.G. Siegler:

I’ve never seen a bad Steve Jobs video. So when a new one is put out there into the world, the bar is quite high. Surprising no one [it] does not disappoint.

[…]

His talk really takes off though when he ends his prepared remarks almost comically abruptly with “so what do you want to talk about?” The crowd sort of laughs and then realizes he’s dead serious and breaks into applause. And then the questions start. I’ve written about Jobs’ ability to command a Q&A before, and it was clearly the mode in which he best operates. As someone who was in a few such sessions (mostly public, as a member of the press, but one memorable one which was private), it’s impossible to overstate how good he was at these. Everyone knows the famous/infamous “reality distortion field”, but it really undersells Jobs’ ability to command a room by speaking in a way that’s intensely human.

Safari Profiles and Extension Permissions Madness

Jeff Johnson:

I’ve discovered a bug that unexpectedly causes Safari extensions in a profile to lose access to websites. I’ve reproduced the bug in Safari 17.5 on macOS 14.5 and in the Safari 18 beta on the macOS 15 beta. I haven’t yet been able to reproduce on iOS, but correspondence with a customer—the origin of my discovery—suggests that the bug may also exist on iOS. Here are steps to reproduce on Mac with StopTheMadness Pro[…]

[…]

Curiously, and falsely, Safari Websites Settings still claims that everything is allowed.

The worst part is that if you’re temporarily experiencing this Safari bug where extensions lack access to websites, and you click Always Allow on This Website, that confused action permanently erases the permissions to access all http and https pages, as seen under the new GrantedPermissionOrigins in the profile’s Extensions.plist file.

Previously:

SwiftUI at WWDC24

What’s new in SwiftUI:

Learn how you can use SwiftUI to build great apps for any Apple platform. Explore a fresh new look and feel for tabs and documents on iPadOS. Improve your window management with new windowing APIs, and gain more control over immersive spaces and volumes in your visionOS apps. We’ll also take you through other exciting refinements that help you make expressive charts, customize and layout text, and so much more.

SwiftUI essentials:

Join us on a tour of SwiftUI, Apple’s declarative user interface framework. Learn essential concepts for building apps in SwiftUI, like views, state variables, and layout. Discover the breadth of APIs for building fully featured experiences and crafting unique custom components. Whether you’re brand new to SwiftUI or an experienced developer, you’ll learn how to take advantage of what SwiftUI has to offer when building great apps.

Work with windows in SwiftUI:

Learn how to create great single and multi-window apps in visionOS, macOS, and iPadOS. Discover tools that let you programmatically open and close windows, adjust position and size, and even replace one window with another. We’ll also explore design principles for windows that help people use your app within their workflows.

Tailor macOS windows with SwiftUI:

Make your windows feel tailor-made for macOS. Fine-tune your app’s windows for focused purposes, ease of use, and to express functionality. Use SwiftUI to style window toolbars and backgrounds. Arrange your windows with precision, and make smart decisions about restoration and minimization.

Demystify SwiftUI containers:

Learn about the capabilities of SwiftUI container views and build a mental model for how subviews are managed by their containers. Leverage new APIs to build your own custom containers, create modifiers to customize container content, and give your containers that extra polish that helps your apps stand out.

Create custom visual effects with SwiftUI:

Discover how to create stunning visual effects in SwiftUI. Learn to build unique scroll effects, rich color treatments, and custom transitions. We’ll also explore advanced graphic effects using Metal shaders and custom text rendering.

Catch up on accessibility in SwiftUI:

SwiftUI makes it easy to build amazing experiences that are accessible to everyone. We’ll discover how assistive technologies understand and navigate your app through the rich accessibility elements provided by SwiftUI. We’ll also discuss how you can further customize these experiences by providing more information about your app’s content and interactions by using accessibility modifiers.

Enhance your UI animations and transitions:

Explore how to adopt the zoom transition in navigation and presentations to increase the sense of continuity in your app, and learn how to animate UIKit views with SwiftUI animations to make it easier to build animations that feel continuous.

Swift Charts: Vectorized and function plots:

The plot thickens! Learn how to render beautiful charts representing math functions and extensive datasets using function and vectorized plots in your app. Whether you’re looking to display functions common in aerodynamics, magnetism, and higher order field theory, or create large interactive heat maps, Swift Charts has you covered.

Migrate your TVML app to SwiftUI:

SwiftUI helps you build great apps on all Apple platforms and is the preferred toolkit for bringing your content into the living room with tvOS 18. Learn how to use SwiftUI to create familiar layouts and controls from TVMLKit, and get tips and best practices.

Fatbobman:

Starting with this version, the SwiftUI development team appears to have found the right path to rapidly evolve SwiftUI, exploring ways to enhance its capabilities while maintaining the characteristics of a declarative framework.

In this update, the SwiftUI team changed its previous API design strategy—from highly encapsulated and less flexible designs to providing developers with greater lower-level control. This includes integrating UIKit gestures, introducing more functional custom containers, custom rendering of Text and providing precise scroll control. These improvements have significantly raised the upper limits of SwiftUI, opening up broader technical possibilities for advanced developers.

As SwiftUI shares mechanisms for animations, transitions, and gestures with the UIKit framework, it is gradually transitioning from a framework built on UIKit/AppKit to a more equal partner within Apple’s UI framework ecosystem. It is no longer just drawing features from other frameworks but is starting to give back by contributing new features to them.

The new version of the SwiftUI framework also underwent code-level stratification, carving out a separate SwiftUICore framework. This was likely done to facilitate better collaboration with UIKit and AppKit, but it also opens up exciting possibilities for future developments.

Colin Cornaby:

SwiftUI has usually been thought of as an abstraction layer over AppKit and UIKit. But this WWDC is the first time I get the feeling AppKit and UIKit are becoming abstraction layers over SwiftUI.

Majid Jabrayilov:

SwiftUI introduced the new overloads for Group and ForEach views, allowing us to create custom containers like List or TabView.

[…]

The new ScrollPosition type, in pair with the scrollPosition view modifier, allows us to read the precise position of a ScrollView instance. We can also use it to programmatically scroll to the particular point of the scrolling content.

[…]

The new Entry macro allows us to quickly introduce environment values, focused values, container values, etc, without boilerplate.

Paul Hudson:

This is another good year for SwiftUI, with another batch of scrollview improvements, some welcome macOS features, remarkable control over text rendering, and more – the team at Apple have a lot to be proud of, and many developers will breathe a sigh of relief as API such as fine-grained subview control is now public for all of us to use.

[…]

The difference is small, but makes a huge difference: the @MainActor attribute moved from body up to the [View] protocol itself, which means the body property along with all other properties and methods we make are run on the main actor.

Kyle Howells:

After 5 years SwiftUI ScrollView finally gets one of the basic fundamental features a ScrollView needs.

Majid Jabrayilov:

This week, we will discuss monitoring scroll phases in SwiftUI.

Clarko:

The new Entry macro being backported is so wonderful.

Immediately deleted a bunch of boilerplate from EnvironmentValues and FocusedValues.

Majid Jabrayilov:

This week, we will talk about the Entry macro type.

Swift Talk:

Today, we want to discuss environment values, preferences, and view updates.

robb:

There are some real crowd pleasers coming to SwiftUI this year at WWDC2024.

Here’s the full list, but I’ll call out some personal favorites[…]

[…]

Group and ForEach are getting superpowers this year, including the ability to iterate over and transform the subviews of a view. (No more _VariadicView shenanigans!)

This seems like the biggest change to me. I will be interested to hear how the performance is.

Matthaus Woolard:

New in macOS 15, we can now use onModifierKeysChanged(mask:initial:_:) to update our views when keyboard modifiers are held down.

Francisco Tolmasky:

“If we just keep saying SwiftUI is the best way to write apps it’ll eventually come true, right?”

Steve Troughton-Smith:

You can now build AppKit NSMenus in SwiftUI with the NSHostingMenu API.

Marcin Krzyzanowski:

I had some hopes that Apple would embrace new Swift concurrency in their API for a Swift 6 launch. I guess not necessarily, if not even modern SwiftUI API got update.

It’s going fine: @preconcurrency, @unchecked Sendable

Robb Böhnke:

SwiftUI’s new Color.mix(with:by:) API allows you to interpolate Colors that match SwiftUI.Gradient in discrete steps.

Khoa:

The new SwiftUI Window modifier for macOS is great. There is less need for AppKit now

Antoine:

I’m DYING to know why can’t SwiftUI just give you the NSWindow so we don’t have to wait years for them to add the most basic stuff

Ron Avitzur:

I submitted FB13821655 June 9, 2024 “Support onboarding View for iOS SwiftUI document-based apps” and received response from Apple June 12, 2024 saying “The API you’re asking for has been released in a new Beta now. Here’s the WWDC session that covers it.

This wins both the “Fastest response to a Feedback feature request” and the “Most useful response” awards by a long mile.

Duncan Babbage:

Would love any leads on this: setting [Core Data] .fetchBatchSize causes entire collection to be immediately traversed [by SwiftUI].

Helge Heß:

Did someone try whether the SwiftUI refresh issue in SwiftData got fixed? Some blog sounded like no?

Scott Anguish:

Just realized, SwiftUI views still can’t just print. I can’t believe another year went by without that.

Damien Petrilli:

5y into SwiftUI, still no justify Text alignment.

Natalia Panferova:

For a while, presenting a form sheet in SwiftUI, equivalent to the UIModalPresentationStyle.formSheet, was a challenge. Now, with the new presentationSizing() modifier, we can easily achieve this using the form sizing option.

Andy Finnell:

I feel like SwiftUI’s Form should have been an exemplar of the power and ease-of-use of declarative UI code. It instead its a demonstration of the pitfalls.

The same code doesn’t adapt correctly across platforms. When layout goes wrong, it’s not clear how to fix it or if it can even be fixed.

alfamsome2:

I have a simple SwiftUI app that has a picker, textfield and several buttons. It is using a Enum as a focus state for the various controls. When I compile and run it on Mac Studio desktop it works as expected: Picker has initial focus, Selection in Picker changes focus to TextField, Tab key moves through buttons; last button resets to Picker

However when I run the exact same app on MacBook Pro (same version of MacOS, 14.5) it does not work at all as expected. Instead: Initial focus is set to TextField, Tab does not change the focus, Clicking on last button resets focus to TextField rather than Picker.

[Update (2024-07-25): It turns out that this was due to a different system setting.]

Andy Finnell:

Xcode previews would be super-helpful in iterating over Forms. However, I also discovered if my SwiftUI View uses macros to generate any of its code, previews don’t work at all. Doesn’t matter if I build them old-school or use the #\Preview macro.

Maybe the new preview system in Xcode 16 fixes this?

Andy Finnell:

For all of Swift’s rich static typing, SwiftUI doesn’t seem able to leverage it in ways that would make it ergonomic. Everything gets erased to a View, effectively. There’s no typing to hint at what Views would work in a specific context, or type errors about invalid combinations.

Ole Begemann:

If you want to go spelunking in SwiftUI’s .swiftinterface file (people have found interesting things in there in past years), note that there’s a new SwiftUICore.framework this year, so now there’s two files to check.

/Applications/Xcode-16.0b1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/SwiftUICore.framework/Modules/SwiftUICore.swiftmodule/arm64-apple-ios.swiftinterface

Marcin Krzyzanowski:

My beef about today’s Swift adoption at Apple is SwiftUI. It is a framework that stands against what Swift promised to developers back in the days

  • slow
  • limited
  • runtime crashes if you use the wrong variable type (compile and don’t work?)
  • unhelpful/misleading compilation diagnostics
  • underlying objc frameworks crash and mem leak as it always been
  • bad devtools that never improved

Steve Troughton-Smith:

With SwiftUI entering its sixth year, with Apple having now revealed what this year’s change cycle will be, I haven’t seen anything that moves the needle re adopting it in existing apps if you’ve been holding off. It’s certainly improving for SwiftUI developers, and it’s getting carve-outs for things that have been pain points traditionally like gesture recognizers, but it doesn’t feel like an essential capital-t Transition, just a different way to make apps if that’s how you prefer it

Previously:

Update (2024-08-07): Pasi Salenius:

SwiftUI is a big part of why I feel like I want to switch from iOS to Android.

Yes Apple uses it all over, and most apps where they use it seem buggy, behave in weird ways, often lack animations and transitions that used to be there, or just look odd.

SwiftUI lists still don’t smoothly scroll anything that has more than 10 rows in it. Yes it’s easier but the apps people build with it end up being worse for the user.

This is not the Apple that I was enamored by years ago.

Pasi Salenius:

[I] meant to say discoverability. By that I mean the ergonomics of writing SwiftUI, how it boils down to knowing modifiers that one just has to remember as autocomplete is crushed under the load of everything being available everywhere. And the order of those modifiers matters in myriad ways. And the fact that Apple keeps changing the modifiers every year just when you thought you might even remember the previous ones.

[…]

I went pretty far trying to implement Proxygen on Mac with SwiftUI and it performed horribly scrolling through even a relatively small number of rows. It doesn’t really matter if developers are doing something wrong or it’s SwiftUI’s fault, but scrolling performance is bad in almost any SwiftUI app you see. Latest example is Overcast (sorry Marco).

You must have seen the troubles Icecubes has gone through trying to get an app whose only task is to scroll smoothly to do that. And it never succeeded. This was supposed to be the shining pinnacle of what a good SwiftUI app can be like. And the developer lost hope getting it to work.

Helge Heß:

I think of SwiftUI as being a “form builder on steroids”. You can very quickly build quite advanced forms or viewers. I absolutely do agree that it is unsuitable for a scrollable list of thousands of items. For a settings form, it is great. But this gets me to another huge advantage of SwiftUI over other declarative frameworks: It has a very good Cocoa integration. So you can easily step out to Cocoa to do performance sensitive things. That’s a feature not a bug.

Helge Heß:

SwiftUI is very fast at layout (much faster than AutoLayout) and also faster at drawing (depending a little on what you draw).

The real achilles heel of SwiftUI is the diffing that has to be performed, and which, like AutoLayout, doesn’t scale at all.

Sean Heber:

A weird perception(?) problem with SwiftUI is that it’s easy to bang out whole entire rough UIs in a day or two that used to take weeks but then you gotta do polish and edge cases and that still takes forever except because that initial blocking out phase was so quick, when a single small polish thing takes a week or two to iron out it feels like nothing is getting done and the pressure builds unnecessarily.

Highlander:

If I want quality, I need to control. If I want to control, SwiftUI is not the answer.

Felix Deimel:

This is a demo project that highlights performance issues with hierarchical SwiftUI lists.

There are three main problems:

  1. Rendering of the list is slow if there are many items. (Just start the app and wait for the list to be rendered.)
  2. Changing the selected item is very slow. (Tap/Click an item and wait for the selection to change.)
  3. Updating the list is slow. (Press the “Shuffle” button.)

[…]

All three problems are much more pronounced on macOS (tested on a Mac Studio M2) where it even takes minutes(!) for the app to become responsive.

Craig Hockenberry:

Just discovered an issue that causes SwiftUI to crash on macOS because you change the size of a window.

A ScrollView that gets a width change because its content View height is “just right" to cause scroll bars to appear will cause AppKit to throw an exception because of overlapping constraint changes.

Update (2024-08-14): Alex Grebenyuk:

It’s also a shame SwiftUI gets a bad rep because folks keep trying to make List work—it does only as long as you never need to scroll or update it.

[…]

if you need to dipslay more than 10 items, UITableView or UICollectionView with UIHostingConfiguration is the way to go for now.

Update (2024-08-22): Sarah Reichelt (Hacker News):

I’ll cover new features from both WWDC 2023 and WWDC 2024.

Tuesday, July 23, 2024

Google Breaking URL Shortener Links

Google:

In 2018, we announced the deprecation and transition of Google URL Shortener because of the changes we’ve seen in how people find content on the internet, and the number of new popular URL shortening services that emerged in that time. This meant that we no longer accepted new URLs to shorten but that we would continue serving existing URLs.

Today, the time has come to turn off the serving portion of Google URL Shortener.

[…]

Note that the interstitial page may cause disruptions in the current flow of your goo.gl links. For example, if you are using other 302 redirects, the interstitial page may prevent the redirect flow from completing correctly.

Stephen Hackett:

A lot things on the Internet are going to break next fall. I know people like using short URLs for social media, or to hide tracking parameters, but this yet another example of why they are a bad idea.

Jess Weatherbed:

When Google announced in 2018 that it was shutting down goo.gl, the company encouraged developers to migrate to Firebase Dynamic Links (FDL) — which has also since been deprecated.

John Gruber:

How much money could it possible cost to just keep this service running in perpetuity? Tim Berners-Lee wrote his seminal essay, “Cool URIs Don’t Change” back in 1998. It’s bad enough when companies go out of business, taking their web servers down with them. But Google isn’t struggling financially.

Dare Obasanjo:

Google continues its epic run of reminding people why you should never depend on their services.

Previously:

In principle, I support this deprecation because it is confusing and dangerous for Google’s own shortened URLs to have the same domain as ones created by third-party users. But this is a Google-created problem because it designed its URLs poorly. It should have never been possible for anyone else to create links with the same URL shortener used by Google itself. Yet, while it feels appropriate for a Google service to be unreliable over a long term, it also should not be ending access to links which may have been created just about five years ago.

Scaling Back Apple TV+ Content

Hartley Charlton:

Apple is in active talks to license more films from major Hollywood studios as it seeks to bolster Apple TV+, according to Bloomberg.

Apple has traditionally focused on original productions for its streaming platform, but it is increasingly looking to expand its offerings by acquiring programming from the extensive libraries of established studios, sources familiar with the matter claim.

Hartley Charlton (Hacker News):

Apple is scaling back its Hollywood spending after investing over $20 billion in original programming with limited success, Bloomberg reports.

This shift comes after the streaming service, which launched in 2019, struggled to capture a significant share of the market, accounting for only 0.2% of TV viewership in the U.S., compared to Netflix’s 8%. Despite heavy investment, critical acclaim, and numerous award nominations, Apple TV+ purportedly generates less viewing in one month than Netflix does in a single day.

[…]

The company’s new strategy is said to involve tighter budget controls and a more cautious approach to spending. This includes paying less upfront for shows, being quicker to cancel underperforming series, and delaying productions to manage costs better.

The report doesn’t say what the revenue is.

I still find it frustrating that so many billions were spent on this and the car project when so many parts of Apple’s operating systems, apps, and developer services seem under-resourced.

M.G. Siegler:

This one, I’d argue, has just as much to do with Apple being awful at marketing their content. Which is wild given that it’s Apple! The company perhaps best known for its marketing prowess – of any company in the world! They can’t seem to crack the Hollywood nut here for whatever reason. This is anecdotal, but no one seemed to know about Fly Me to the Moon. You obviously won’t go to see what you don’t even know is out. Again, in those old days people would go to see whatever was playing. That’s not the case any longer.

Damien Petrilli:

Over the past 5y, I have been spammed non stop with “free trials” in the system and the TV app constantly default to the Apple TV+ service tab instead of my library.

Also saw ads for Apple TV+ on multiple websites.

It seems like owning the platform hasn’t helped as much as people expected.

M.G. Siegler:

I talk around these parts ad nauseam about how the quality of the Apple TV+ content is actually quite strong. Pound-for-pound, they may even be the best right now given that Warner Bros Discovery has merged HBO into the Max machine. But it sounds like even Apple, the most valuable and profitable company in the world, has to answer to the ROI gods[…]

[…]

It would be very interesting to know if and how Apple actually tracks such things. Fittingly, a WSJ report from yesterday about Amazon’s Alexa/Echo spend is predicated around “DSI” or “downstream impact” – that is the notion that you shouldn’t just measure the revenue brought in from device sales, but also how those devices impact tangential sales for Amazon. The article is about how after years of such metrics covering Alexa’s ass, Andy Jassy has thrown it out in order to try to turn Alexa into an actual business. Will Apple eventually feel the same? Do they already, hence the belt tightening?

Dare Obasanjo:

Amazon lost $5B a year on Alexa devices between 2017 and 2021 with 10,000 people working on it.

After a decade, voice has not become the next major software platform nor has Alexa helped Amazon’s retail business. It’s instead been a massive money losing business for Amazon.

With Bezos gone, Andy Jassy has cranked up the pressure on Amazon’s devices businesses to focus on profitability. It’s since been hit by multiple layoffs and product cancellations.

Previously:

Update (2024-07-30): Benjamin Mayo:

The really interesting thing about Apple TV+ is that it is not so unsuccessful that it can be called a failure, and yet is also not so successful that it can be heralded as a home run win. It sits in a murky grey area, where no one is quite sure whether Apple is happy with its progress. Some days, I wonder if even Apple themselves can define what the success metrics for TV+ are meant to be.

India Calls Out App Store

Aditya Kalra (via Ryan Christoffel):

An investigation by India’s antitrust body has found that Apple exploited its dominant position in the market for app stores on its iOS operating system, engaging “in abusive conduct and practices”, a confidential report seen by Reuters showed.

The Competition Commission of India (CCI) has been investigating Apple Inc, opens new tab since 2021 for possibly abusing its dominant position in the apps market by forcing developers to use its proprietary in-app purchase system.

Michael Love:

That’s OK, if India is too mean to them Apple can just start withholding features and/or pull out of the country. Like they’re going to do in the EU.

Previously:

Update (2024-08-14): Hartley Charlton:

The Competition Commission of India (CCI) has withdrawn two key reports that alleged Apple breached local competition laws. The recall, which is highly unusual, comes after the company filed a complaint claiming that the reports contained sensitive commercial data that was improperly disclosed to its competitors, including Tinder-owner Match Group.

See also: Ben Lovejoy.

Monday, July 22, 2024

Taboola + Apple News

Sara Fischer (Hacker News):

Ad tech giant Taboola has struck a deal with Apple to power native advertising within the Apple News and Apple Stocks apps, Taboola founder and CEO Adam Singolda told Axios.

[…]

The deal is also a recognition from Apple that growing its ad business will require a serious sales operation — one that, if Apple doesn’t build internally, will need to be outsourced.

[…]

This isn’t the first time Apple has worked with a third party on ad sales. Before working with Taboola, Apple had an exclusive deal with NBCUniversal to sell ads for Apple Stocks and Apple News.

Om Malik:

I’ve been a happy Apple One customer. It made perfect sense to sign up for the package considering I was paying for Apple TV+, Apple Music, and iCloud storage. For an extra couple of dollars, I could get Apple News+, so I thought why not. That ended today when I learned that Apple had struck a deal with Taboola, a company known for serving low-quality ads next to web content. I decided to cut bait.

[…]

If you look at Facebook’s ARPU in the U.S. and Canada, it is hovering around $54 or about $4.50 a month. There’s no way Apple News and Stocks are as good at monetizing from advertising or have the market power to extract better advertising pricing. If they did, then they wouldn’t be partnering with Taboola. It makes more sense for Apple to charge a few dollars more from its Apple News customers and eschew all advertising. That’s almost a better business decision and actually maintains brand integrity.

Nick Heer:

Then again, services revenue seems to have compelled Apple to do lots of things which previously felt wrong. It has a credit card with interest rates currently between 19.24% and 29.49%. It aggressively advertises its services in its operating systems to the detriment of users’ experiences.

These moves may not feel like they fit Apple’s brand if your impression of it was formed more than ten years ago. There is no use protesting that they are out of character, however, when priorities like these feel like they represent today’s Apple.

M.G. Siegler:

The typical Taboola ads you see around the web – “chumbox” as they’re called, which is just a great way to frame them – are terrible. They’re visual reminders of the worst tendencies of humanity. They’re clickbait, productized to the max. So yes, it is shocking that Apple would partner with the company responsible for spreading these around the web.

But it’s also quite possible that Apple is going to heavily restrict the kind of ads Taboola can serve up.

Eric Schwarz:

Apple News as a whole (both the free version and the “plus” version) just isn’t very good and hasn’t been for awhile. Between repeatedly surfacing content from topics and news organizations I’ve blocked and already tacky ads, it’s not a place I really want to spend time or spend money on.

John Gruber:

If you told me that the ads in Apple News have been sold by Taboola for the last few years, I’d have said, “Oh, that makes sense.” Because the ads in Apple News — at least the ones I see — already look like chumbox Taboola ads. Even worse, they’re incredibly repetitious.

senturion:

A service you pay for should have no ads let alone the shitty ads Apple adds to the News app.

Previously:

Update (2024-09-10): Kirk McElhearn:

I’ve been using Apple News since its launch as one of my news sources, but as the service has grown, it has enshittified. I’m currently using a free trial of Apple News+, which I earned after my last iPad purchase. I won’t be extending the free trial, because, frankly, Apple News sucks.

Here’s one example; a screenshot from an article in The Atlantic, an Apple News+ title.

[…]

It is insulting that for a paid service, in a somewhat prestigious publication like The Atlantic, Apple shows ads of this type. I don’t even see how Apple can defend these as appropriate ads for this paid platform. The article I was reading, entitled AI Cheating Is Getting Worse, has a total of five chumboxes. Four paragraphs, then a chumbox. After that, there’s a chumbox after every three paragraphs.

CrowdStrike Update Causes BSOD

Rory Tingle et al.:

The ‘most serious IT outage the world has ever seen’ sparked global chaos today - with planes and trains halted, the NHS disrupted, shops closed, football teams unable to sell tickets and banks and TV channels knocked offline.

See also: Reddit, Hacker News, and Slashdot.

Qasim Nauman (Hacker News):

Frontier Airlines briefly grounded all flights on Thursday amid a major outage in Microsoft networks, which also knocked out some computer systems at low-cost carriers Allegiant Air and Sun Country Airlines.

Microsoft said on the status page for Azure, its flagship cloud computing platform, that the problem began at 5:56 p.m. and affected multiple systems for customers in the central United States.

Andrew Cunningham (Hacker News):

Airlines, payment processors, 911 call centers, TV networks, and other businesses have been scrambling this morning after a buggy update to CrowdStrike's Falcon security software caused Windows-based systems to crash with a dreaded blue screen of death (BSOD) error message.

Sergiu Gatlan (Hacker News):

The list of services impacted by the outage includes Microsoft Defender, Intune, Teams, PowerBI, Fabric, OneNote, OneDrive for Business, SharePoint Online, Windows 365, Viva Engage, Microsoft Purview, and the Microsoft 365 admin center.

Edward Zitron:

What’s happened today with Crowdstrike is completely unprecedented (and I’ll get to why shortly), and on the scale of the much-feared Y2K bug that threatened to ground the entirety of the world’s computer-based infrastructure once the Year 2000 began.

[…]

The problem here is systemic — that there is a company that the majority of people affected by this outage had no idea existed until today that Microsoft trusted to the extent that they were able to push an update that broke the back of a huge chunk of the world’s digital infrastructure.

Jowi Morales:

Southwest Airlines, the fourth largest airline in the US, is seemingly unaffected by the problematic CrowdStrike update that caused millions of computers to BSoD (Blue Screen of Death) because it used Windows 3.1.

Tim Hardwick:

The cause of the failure has been identified as an update to Crowdstrike Falcon antivirus software installed on Windows 10 PCs, but Mac and Linux machines running the same cybersecurity software have been spared.

Simon Sharwood:

CrowdStrike’s now-infamous Falcon Sensor software, which last week led to widespread outages of Windows-powered computers, has also caused crashes of Linux machines.

Tom Warren:

CrowdStrike says the issue has been identified and a fix has been deployed, but fixing these machines won’t be simple for IT admins. The root cause appears to be an update to the kernel-level driver that CrowdStrike uses to secure Windows machines. While CrowdStrike identified the issue and reverted the faulty update after “widespread reports of BSODs on Windows hosts,” it doesn’t appear to help machines that have already been impacted.

Rui Carmo:

This is why I keep telling people that third-party kernel extensions should be banned from production servers, period.

And shipping LIVE cloud updates direct to endpoints, unchecked, without any canaries?

[…]

But since most of the affected systems are in a boot loop that may well require physical (or IPMI) access to the machine.

Howard Oakley:

The macOS version of the Falcon sensor uses a kernel extension (kext) on Intel Macs prior to Big Sur, but because of the limitations of kexts on Apple silicon, it now uses an endpoint security System Extension instead.

Stefan Esser:

People pointing to EndpointSecurity framework in MacOS as the solution for the Crowdstrike problem are missing the point. ES is a typical Apple solution and basically means:anyone who can bypass it has to have exactly one exploit (chain) that will allow them to bypass ALL vendors

Sure yes running drivers in user land has less likelihood of taking down the whole system but it also means their functionality is severely limited by what API the vendor provided. Apple is simply gatekeeper in one more area of their devices.

It would be sufficient for OS protection to mark drivers that crash as dirty and if this happens repeatedly boot without the driver and/or optionally allow a rollback to a previously not crashing configuration

M.G. Siegler:

The EC obviously felt they were helping out third-parties by requiring Microsoft to continue to grant the same level of kernel access that they have. And perhaps this was even a good thing for end-users as these companies could cover security bases that Microsoft wouldn't, for whatever reason – security in general, of course, has not been a Microsoft strong suit, of late. But there are also often unintended consequences of such actions. In this case, a third-party service with a single code-push could take out millions of machines overnight and thus, cripple key infrastructure around the world.

Ben Thompson:

Fast forward nearly two decades, and while Symantec and McAfee are still around, there is a new wave of cloud-based security companies that dominate the space, including CrowdStrike; Windows is much more secure than it used to be, but after the disastrous 2000s, a wave of regulations were imposed on companies requiring them to adhere to a host of requirements that are best met by subscribing to an all-in-one solution that checks all of the relevant boxes, and CrowdStrike fits the bill. What is the same is kernel-level access, and that brings us to last week’s disaster.

Tavis Ormandy:

This strange tweet got >25k retweets. The author sounds confident, and he uses lots of hex and jargon. There are red flags though… like what’s up with the DEI stuff, and who says “stack trace dump”? Let’s take a closer look…

Patrick Wardle (tweet, Hacker News):

I don’t do Windows but here are some (initial) details about why the CrowdStrike’s CSAgent.sys crashed.

Aleksey Shipilëv:

“Professional programmers” focusing on CrowdStrike disassembly/language is a coping mechanism that protects them from realizing that there is a remotely updated 3rd party kernel module that is deployed on significant part of the world. That is why real postmortems are important.

Bryan Cantrill:

The CrowdStrike BSOD fiasco is extraordinary in its scale and scope; on Monday’s Oxide and Friends, @ahl and I will be joined by security researcher and @LutaSecurity CEO @k8em0 to help us sort through the many layers of this mess

See also: xkcd.

Previously:

Update (2024-07-23): Sebastiaan de With:

Has anyone checked on the App Store backend? Automated reports have been MIA since the Crowdstrike incident. 👀

Adam Engst:

Apple devices may not be as vulnerable to a bug in an update to third-party software like CrowdStrike, but that doesn’t mean we can be complacent. Apple itself regularly releases updates, and while it’s essential to install them to patch security vulnerabilities, Apple’s engineers could make a mistake that would cause problems for millions. Howard Oakley’s article reminded me of when an Apple update inadvertently disabled Ethernet (see “El Capitan System Integrity Protection Update Breaks Ethernet,” 29 February 2016). Apple quickly addressed the problem, but the lack of Ethernet prevented some Macs from getting the revised update, requiring manual intervention.

[…]

Even if we give CrowdStrike the benefit of the doubt and say that the bug was a subtle mistake that could have slipped by any developer, I can’t see any excuse for why it wasn’t caught in testing. Either CrowdStrike wasn’t doing real-world testing—the company constantly releases patches like this—or someone messed up big time.

Juli Clover:

In a statement to The Wall Street Journal, Microsoft blamed the European Commission for an inability to offer the same protections that Macs have. Microsoft said that it is unable to wall off its operating system because of an “understanding” with the European Commission. Back in 2009, Microsoft agreed to interoperability rules that provide third-party security apps with the same level of access to Windows that Microsoft gets. Microsoft agreed to provide kernel access in order to resolve multiple longstanding competition law issues in Europe.

Thomas Clement:

Nothing prevents Microsoft and Crowdstrike from developing and adopting a user space solution if they so wish. But they didn't.

Also I'd like to point out that it is totally possible to completely deadlock macOS with user space endpoint security.

Nick Heer:

If one has a general worldview for technology today, they can find it in some analysis of this CrowdStrike failure. This saga has everything.

Update (2024-07-24): Oxide Computer Company:

Bryan and Adam were joined by security expert, Katie Moussouris, to discuss the largest global IT outage in history. It was an event as broadly impactful as it will be instructive; as Bryan noted, you can see all of computing from here, from crash dumps to antitrust.

Update (2024-07-26): Bruce Schneier and Barath Raghavan:

The catastrophe is yet another reminder of how brittle global internet infrastructure is. It’s complex, deeply interconnected, and filled with single points of failure. As we experienced last week, a single problem in a small piece of software can take large swaths of the internet and global economy offline.

The brittleness of modern society isn’t confined to tech. We can see it in many parts of our infrastructure, from food to electricity, from finance to transportation. This is often a result of globalization and consolidation, but not always. In information technology, brittleness also results from the fact that hundreds of companies, none of which you;ve heard of, each perform a small but essential role in keeping the internet running. CrowdStrike is one of those companies.

This brittleness is a result of market incentives. In enterprise computing—as opposed to personal computing—a company that provides computing infrastructure to enterprise networks is incentivized to be as integral as possible, to have as deep access into their customers’ networks as possible, and to run as leanly as possible.

Update (2024-07-29): Katie Moussouris:

The cause of the most significant internet outage event in history was a cascade of failures in both testing and deployment capability. The technical bugs in the testing and the client-side interpreter code are one area for improvement, and the process failures that propagated this so widely and quickly are another. Both functional areas need to be addressed to ensure we don’t have to endure an outage of this magnitude again.

Patrick Wardle:

I was rather skeptical that this wasn’t an elaborate joke, but yes, @CrowdStrike has apparently emailed its customers & offered a ~$10 UberEats gift card/coupon for any “inconvenience”

…and yes, it errors out when one goes to redeem it, saying it has been cancelled 🫠

Ian Brown:

ANOTHER opinion piece repeating Microsoft’s claim the EU is responsible for the #CrowdStrike debacle. You can read the “interoperability undertaking” Microsoft made in 2009 yourself… no, it does NOT require kernel access for Windows competitors.

Microsoft (Hacker News):

In this blog post, we examine the recent CrowdStrike outage and provide a technical overview of the root cause. We also explain why security products use kernel-mode drivers today and the safety measures Windows provides for third-party solutions. In addition, we share how customers and security vendors can better leverage the integrated security capabilities of Windows for increased security and reliability. Lastly, we provide a look into how Windows will enhance extensibility for future security products.

Update (2024-07-30): Thom Holwerda (via Nick Heer):

It turned out be a troll tweet. A reply to the tweet by Russakovskii a day later made that very lear: “To be clear, I was trolling last night, but it turned out to be true. Some Southwest systems apparently do run Windows 3.1. lol.”

[…]

These few paragraphs do not say that Southwest is still using ancient Windows versions; it just states that the systems they developed internally, SkySolver and Crew Web Access, look “historic like they were designed on Windows 95”. The fact that they are also available as mobile applications should further make it clear that no, these applications are not running on Windows 3.1 or Windows 95. Southwest pilots and cabin crews are definitely not carrying around pocket laptops from the ’90s.

These paragraphs were then misread, misunderstood, and mangled in a game of social media and bad reporting telephone, and here we are.

Jordan Novet and Ari Levy:

Delta has hired prominent attorney David Boies to pursue potential damages from CrowdStrike and Microsoft after a mass outage earlier this month, CNBC’s Phil Lebeau reported on Monday.

John Wiseman (Hacker News):

Airline cancellations is a good metric, but I want to look directly at air traffic: How many planes were in the air? How many planes should have been in the air?

Update (2024-07-31): Patrick McKenzie (Hacker News):

It would be an overstatement to say that the United States federal government commanded U.S. financial institutions to install CrowdStrike Falcon and thereby embed a landmine into the kernels of all their employees’ computers. Anyone saying that has no idea how banking regulation works.

[…]

Does the FFEITC have a hugely prescriptive view of what you should be doing for malware monitoring? Well, no […]But your consultants will tell you that you want a very responsive answer to II.C.12 in this report and that, since you probably do not have Google’s ability to fill floors of people doing industry-leading security research, you should just buy something which says Yeah We Do That.

CrowdStrike’s sales reps will happily tell you Yeah We Do That.

Update (2024-08-14): See also: Accidental Tech Podcast.

Update (2024-09-17): Rachyl Jones (via Hacker News):

Software engineers at the cybersecurity firm CrowdStrike complained about rushed deadlines, excessive workloads, and increasing technical problems to higher-ups for more than a year before a catastrophic failure of its software paralyzed airlines and knocked banking and other services offline for hours.

“Speed was the most important thing,” said Jeff Gardner, a senior user experience designer at CrowdStrike who said he was laid off in January 2023 after two years at the company. “Quality control was not really part of our process or our conversation.”

Swift 6 Announced

What’s new in Swift:

We’ll briefly go through a history of Swift over the past decade, and show you how the community has grown through workgroups, expanded the package ecosystem, and increased platform support. We’ll introduce you to a new language mode that achieves data-race safety by default, and a language subset that lets you run Swift on highly constrained systems. We’ll also explore some language updates including noncopyable types, typed throws, and improved C++ interoperability.

Migrate your app to Swift 6:

Experience Swift 6 migration in action as we update an existing sample app. Learn how to migrate incrementally, module by module, and how the compiler helps you identify code that's at risk of data races. Discover different techniques for ensuring clear isolation boundaries and eliminating concurrent access to shared mutable state.

Explore Swift performance:

Discover how Swift balances abstraction and performance. Learn what elements of performance to consider and how the Swift optimizer affects them. Explore the different features of Swift and how they’re implemented to further understand the tradeoffs available that can impact performance.

Demystify explicitly built modules:

Explore how builds are changing in Xcode 16 with explicitly built modules. Discover how modules are used to build your code, how explicitly built modules improve transparency in compilation tasks, and how you can optimize your build by sharing modules across targets.

Paul Hudson (list):

2024 is Swift’s 10th anniversary, and for the last five of those years we’ve had no major-version Swift updates – literally half of Swift’s life has been 5.0 through to 5.10.

This is more common than you might think. In fact, several major programming languages have some kind of release that takes significantly longer than all others: Python 3 took years to arrive, PHP 6 took so long the team bailed out and jumped straight to PHP 7, and Perl 6 dragged on so much that it ended up evolving into a different language called Raku.

Swift last had major breaking changes back in Swift 3, but when enabled in full Swift’s own v6 has the potential to make Swift 3 look like a walk in the park. This is partly because of new changes, but partly also because many features added in recent Swift versions have been hidden behind feature flags that will be enabled by default in Swift 6.

Migrating to Swift 6:

Swift’s concurrency system, introduced in Swift 5.5, makes asynchronous and parallel code easier to write and understand. With the Swift 6 language mode, the compiler can now guarantee that concurrent programs are free of data races. When enabled, compiler safety checks that were previously optional become required.

Adopting the Swift 6 language mode is entirely under your control on a per-target basis. Targets that build with previous modes, as well as code in other languages exposed to Swift, can all interoperate with modules that have been migrated to the Swift 6 language mode.

Joe Heck:

There is a lot of great stuff coming in the Swift programming language. I love the focus and effort on validating data-race safety, and is probably the feature set that I’ll spend the most time with. But my favorite new tidbit? Swift 6 now supports a Linux SDK and the ability to compile a stand-alone, statically linked binary.

Alex Grebenyuk:

In recent years, there’ve been some questionable changes, the latest one being Data Race Safety in its current form in Xcode 16 beta.

[…]

If you want to migrate a large codebase to support Swift 6 mode, you need to fix thousands of compiler warnings that become errors once you enable this mode. For example, if you have any global variables, they are now errors.

[…]

In the ideal world, I would love to have more granular control over the types of warnings and errors the compiler produces, depending on what you can tolerate in your project. If data race safety is a compelling enough feature, people will enable it. There are also questions about whether it should be enabled by default and whether its current design can allow it to be enabled by default considering the lack of progressive disclosure.

[…]

Speaking about compile time, one of Swift’s original premises was that it was “fast,” and you would expect it to apply to the compile time. However, with the current slow compilation, developers have to go to extreme lengths to work this around, including reinventing header files by creating protocol-only modules, which Swift was designed to eliminate. If there was a way to disable some of the language features to improve compile time, I would do it in an instant. I’m bringing this up because I wonder what the impact of data race safety is going to be, especially once it gets upgraded with more advanced techniques for eliminating false positives.

Alex Grebenyuk:

For context, it took me months and multiple releases to get this ~4K lines of code somewhat compatible with Sendable and Swift 6. And I now have to revert my concurrency changes in Pulse from last week because I broke some stuff.

I’m farily certain no existing large size codebase will ever be able to fully adopt Swift Concurrency Checking and Swift 6. I would also expect a short-term rise in concurrency bugs in iOS apps.

See also: Jon Reid: A Conversation With Swift 6 About Data Race Safety.

Heath Borders:

I really love Swift the language, but if I had my way, Twitch would only have switched to Swift 2-3 years ago when static linking was easily available.

I got a lot of pressure from other devs to switch back in 2018, so we did, but we had a modularized codebase in Objective-C that we had to demodulalize in Swift bc of no static linking back then. Our clean build times used to be 90 seconds, and now it’s 8 minutes.

[…]

People would be mad if we were still in Objective-C, but I think that’s bc they’d see all the cool stuff at WWDC and wouldn’t be able to use any of it. They’d rightly think they were falling behind the industry. They wouldn’t be as marketable in other jobs.

The main reason for Swift is because everyone else is using it.

Helge Heß:

No, it is because of:

> fighting the direction of the platform, and fighting Apple is generally a losing game

This is IMO not rooted in preferences of developers.

A big issue here is that Apple ties features to the language (and unlike ObjC, Swift has no FFI). The Apple platform developer tooling is a closed system and Apple exploits that to lock devs into their own things over alternatives, regardless of quality.

Previously:

Update (2024-07-23): Drew McCormack:

It is a risky time for Swift. They are channeling enormous resources into solving multi-threading at compile time, but the remedy is worse than the sickness. They are introducing a whole different problem: systemic race conditions. Interleaving of async functions. These are much more difficult to track down IMO. I am literally breaking my head on some of these things. Without a transactional system like dispatch, you end up with something more complex than multithreading.

Update (2024-08-08): Rob Napier:

Every time you write Task, I want you to pretend it's actually this:

Task {
    let delay: Int = (0...10).randomElement()!
    try await Task.sleep(for: .seconds(delay))

    // .. Your code
}

Is your code still correct? I not, then you need to make it correct.

Tasks do not make promises about when they start. Currently, they do not even make promises about whether they start in order (they will, but not quite yet). So if the above addition would break your code, your code is wrong.

Rob Napier:

IMO, no one today understands Swift Concurrency in depth, not even the core team. We’re all kind of feeling our way through it together in public and hoping to discover patterns that are more correct than what we were doing before. There are many great resources for the basics out there, but I don’t think there’s any one resource for how to use this tool “the right way” because I don’t think anyone knows that yet.

Drew McCormack:

The thing about the Swift 6 concurrency bomb is that I know already it won’t catch a single bug. Every error I have to fix is purely to appease the compiler. I see in every case that my code logic is correct, that there is no concurrent access. I also don’t see crashes related to threading (at least not in app level code). Like most static checking dogma, you end up spending a lot of time doing busy work, purely to tell the compiler what you already know.

The irony is that a lot of the solutions to the Swift 6 concurrency errors are to introduce another layer of indirection in the form of an async func. I think it may actually lead to new bugs, rather than fixing old ones. Wouldn’t surprise me if we see problems due to interleaving or data races that weren’t there before.

See also: Marcin Krzyzanowski.

Update (2024-08-13): Thomas Clement:

Apple encouraged developers into updating all their completion hander based functions into async functions which suddenly caused them all to move off the main thread. It was before the concurrency warnings and in the last few years it’s been the number 1 cause of crashes in the projects I’ve been working on. Yes there’s quite a lot of it.

Update (2024-09-23): Quentin Zervaas:

In the iOS 18 / Xcode 16 development cycle (2024), I’ve converted a lot of my code from using completion handlers to using async/await.

This article outlines the general strategy I’ve used, which has been quite effective.

Friday, July 19, 2024

Google Docs Can Import and Export Markdown

Google (via Hacker News):

In 2022, we introduced expanded support for composing with Markdown in Google Docs on web. Today, we’re introducing highly-requested features that enhance Docs’ interoperability with other Markdown supporting tools. These include the ability to:

  • Convert Markdown to Docs content on paste
  • Copy Docs content as Markdown
  • Export a Doc as Markdown (from File > Download)
  • Import Markdown as a Doc (from File > Open or “Open with Google Docs” from Drive)

This sounds great, reminiscent of OmniFocus’s support for TaskPaper. You can collaborate on a big document in Google Docs and then convert it to a more useful format. And it’s also great to be able to copy and paste little snippets, as Markdown has become kind of an interchange micro format for formatted text.

iDOS 3 Still Rejected From the App Store, Despite UTM

Litchie (Hacker News):

Appeal was rejected by App Review Board: “We understand that you might disagree with our findings. However, the app still provides emulator functionality but is not emulating a retro game console specifically. Only emulators of retro game consoles are appropriate per guideline 4.7.” As to why UTM was approved but not iDOS, they wrote: “If you believe that you have identified apps that don’t comply with the App Review Guidelines, you may use the Report an app form at any time to report trust and safety concerns for apps on the App Store.” Thanks, but no, that is ridiculous, I have zero concern about trust and safety running an emulator.

Christina Warren:

This is so bogus. UTM SE gets into the App Store after it was accepted into @rileytestut’s Alt Store but iDOS 3 is still not allowed. Just bogus.

alanlammiman:

Our app Sticky has been rejected based on guideline 4.7 too. We are a social media app and included HTML5 games. Apple kept claiming that “offering HTML5 games appears to be the primary purpose of your app” which is not the case (certainly not in the update we are submitting) as we have several other features with equal weight. The changes to guideline 4.7 which allow HTML5 mini-games or mini-apps and which allow emulators were made in late January of this year, shortly before the US DOJ antitrust suit, where these issues are central, was filed (March). I imagine Apple changed the guideline for a legal or PR reason related to that suit, but does not really want to follow its own updated guidelines and so is finding every excuse it possibly can to reject emulators and apps with HTML5 mini-games/mini-apps. In our case, after the appeal, we were called up by someone from Apple who started the call saying they did not consent to it being recorded (how’s that for inspiring trust?), who walked-back what they had said about HTML5 (and of course they did not put that in writing in the message they sent afterwards), but then came up with a couple of brand-new reasons for keeping our update off the store: claiming that we had changed the app concept… because our app was different some 4 years ago and hundreds of updates ago when it started! And including mentioning rule 4.7 regarding emulators… which we are not and do not claim to be!

Previously:

Update (2024-07-22): Craig Grannell (Mastodon):

Apple has been inconsistent in the past with App Store rules and approvals, but this pairing is especially stark and egregious. At this point, I wouldn’t spend a single second developing an emulator for iOS. Which is probably how Apple wants it anyway.

[…]

What gets me is this is all so stupid and unnecessary. There’s clearly reluctance from somewhere senior in Apple about emulators. But then the company sort of changed its mind, yet provided no rules. It instead went for the developer-hostile “we’ll know it when we see it”. Only ‘it’ doesn’t mean anything specific. If it did, we wouldn’t currently have ZX81, C64 and MSX emulators on the App Store, given that they emulate hardware platforms that are not retro gaming consoles.

Apple Passwords App in Sequoia and iOS 18

Jay Peters (Hacker News):

Password managers are essential. They keep track of your passwords, encourage better security practices, and generally help to manage your life across your devices. They’re the kind of feature that really should be built into every device — and Apple is massively expanding their reach with the launch of its new Passwords app, announced this week at WWDC.

We have companies like 1Password and LastPass to thank for the popularity of today’s password managers. But an announcement like Apple’s puts them in a tough position: now that Apple has a free, built-in Passwords app, is there a future for the third-party apps that defined the space?

I assume they’ve been expecting a Sherlocking for a long time, which is why they pivoted to the enterprise, multiple platforms, and multi-user stuff.

I see nothing to tempt me from PasswordWallet—which has a separate long password, uses standard files, and supports HTML export, a compact UI, and auto-typing. But the new Passwords app will be nice for managing my 2FA codes and passkeys, and for family passwords. I haven’t used it extensively yet, but my initial impression is that it’s the best-feeling SwiftUI app from Apple. (Hopefully they’ll add drag and drop to groups.)

Matthias Gansrigler:

Passwords app. At last an app that is released for all of Apple’s platforms at once.

Ricky Mondello:

There’s an awesome new tool in the journey to replace passwords: Automatic passkey upgrades.

For a short window after a user signs in using Password AutoFill, apps and websites can “conditionally” request passkey creation for that same account. The Passwords app then creates a new passkey and notifies the user. No upsells or speed bumps.

All credential managers can support this! (There’s lots of new API for credential managers this year!)

[…]

Here’s how I think about this: we’ve transferred the consent-to-upgrade from being something every website secures to something that the password manager secures. Up to the password manager to decide how to talk to the user about it. In Apple’s Passwords app, users can turn this off.

See also: WWDC and Hacker News.

Ricky Mondello:

Yes, the Passwords app has importing, but only on macOS. (File-based importing and exporting of password manager data isn’t all that common on iOS and iPadOS.)

1Password has the ability to export its data into a CSV file, which Apple Passwords will happily import.

Ricky Mondello:

You can manually add additional domains to passwords, but more importantly, when you choose to fill a password on a domain it isn’t saved for, you’ll be prompted to attach the new domain to the password.

Mario Guzmán:

I love the new Passwords app in macOS Sequoia has a menu bar item you can use to access your passwords quickly

Mario Guzmán:

My favorite part of the new Passwords app. Also right clicking on an item allows you to quickly copy a username or password. 😄

Mario Guzmán:

The new Passwords app does not store specific types like Notes you’d like to secure or Credit Card entries.

However, it does now let you store entries that have only a password. You no longer have to enter a fake username and URL.

Ricky Mondello:

Some people missed this and I think it’s a big deal: the Passwords app on iOS 18 and macOS Sequoia lets you to save passwords without a website! It even allows you to import them from other password managers! When adding passwords, you can specify a website or a custom label, like “Router”, "Passport Number”, or “Garage Door”.

Jeff Johnson:

The New Secure Note item… menu item in Keychain Access app is missing on macOS 15

Sohan Subhash:

Another thing holding back the new Passwords app is the lack of Chrome and Firefox support.

Neither browser has support for the macOS password autofill api (introduced in macOS Big Sur).

I saw that Apple added/negotiated support for Apple Pay in third party browsers. Hopefully they can do the same for password autofill this summer.

I’d like to see an API for other browsers to access SMS verification codes, too.

Ricky Mondello:

The new Passwords app does encourage Chrome and Edge users to install the extension on first launch, however. Button opens the browser to the relevant Chrome/Edge Web Store page.

René Fouquet:

I guess the dedicated Apple Passwords app would be a great option for me if Apple also offered an Android version. My little experiment with using Android for a while has taught me that one-platform services can be a real dead end, and this is especially true for something like a password manager.

It does apparently work on Windows via the iCloud app.

John Voorhees:

Federico and I finally got one of our long-term wishes this year with the introduction of a standalone Passwords app on the iPhone, iPad, and Mac that syncs between devices securely using iCloud. I have been slowly but surely transitioning my saved logins from 1Password to Apple’s system for a couple of years in anticipation of this day, and it has paid off. When I opened the new Passwords app on my Mac, it was already pre-populated with over 1,500 passwords, passkeys, verification codes, and Wi-Fi credentials. The app also collects the apps and websites where you’ve used ‘Sign in with Apple’ or ‘Hide My Email’ and includes both a Security category alerting you to any issues with your passwords and a Deleted section where you can recover any recently deleted passwords. There is a section that collects shared passwords, and the app supports importing and exporting passwords, too.

What you won’t find in Passwords is the ability to save attachments or take notes about accounts. That’s too bad because I’ve used 1Password to securely store important legal documents and add notes to shared passwords about how to use certain web accounts in the past. However, with password-protected shared notes in the Notes app, you can partially accomplish the same result, albeit in a different app.

Jason Snell:

And since Apple lets you share passwords with other people—you can create a seemingly unlimited number of arbitrary groups and then move passwords into those groups—it’s really a full-featured option that will suffice for many users.

[…]

I can’t drag an item out of the list and drop it on a Shared Group to assign it to that group, which is a perfectly reasonable thing for a Mac app to allow. And when I imported my 1Password file—a couple thousand passwords that, I admit, could stand to be pruned back—the app slowed to a crawl. Deleting items would sometimes just not stick, search results appeared and disappeared, and even small tasks like deleting a few selected items generated a beach ball pointer. I sure hope these are beta growing pains, because if this performance persists to the fall, the Passwords app runs the risk being branded a dog.

Howard Oakley:

Currently macOS still supports keychains in their original Classic Mac OS format, and file-based keychains remain in wide use. As they can never provide the same level of security as Data Protection keychains, and can’t benefit from biometrics or the Secure Enclave, Apple is moving on to Data Protection keychains as much as possible. The Passwords app looks to be a good step in that direction, particularly for those who share their Data Protection keychain in iCloud.

Apple still has one significant problem to solve: code such as LaunchDaemons and LaunchAgents that don’t run in a user context, but through launchd, can’t currently access a Data Protection keychain, and must rely on file-based keychains. Traditional keychains aren’t going away yet.

See also: Accidental Tech Podcast.

Previously:

Update (2024-10-15): Collin Allen:

Uhhh, I think there’s a nasty sync bug in Apple’s Passwords app. I renamed my main Apple password from Apple ID to Apple Account, tapped Done, and the whole record just… vanished. Not in the main list. Not in Deleted. Just gone.

Ricky Mondello:

This bug we fully understand and it will be fixed in .1. I’m really sorry for the trouble, but at least it’ll be behind us all soon.

I like how with PasswordWallet everything is stored in a regular document file. I can easily back it up, restore it, or open two files side-by-side to compare them.

System Settings in Sequoia

Malcolm Owen:

Apple has refreshed the System Settings app of macOS Sequoia, with tweaks to how it looks and performs.

[…]

The biggest difference for System Settings is that Apple has shuffled around the positioning of items in the sidebar. This does make it slightly difficult to find things if you’re used to Sonoma placements, but everything’s still findable.

[…]

While there was previously a Passwords section in System Settings, Apple has now moved it to its own dedicated Passwords app.

Jeff Johnson:

This is the System Settings “redesign” LOL

reycat (via Accidental Tech Podcast):

Network locations are back in Sequoia. 👏 👏 👏

Jeff Johnson:

System Settings Privacy & Security now show the number of apps that have access (e.g., None and 0), which is a bit of a relief.

Jeff Johnson:

Look at this ridiculous UI.

I have 5 startup disks.

Is this the oldest instance of horizontal scrolling UI in macOS? It was annoying from the beginning and is even harder to use with the larger icons.

Mario Guzmán:

New iCloud UI in System Settings.

Thomas Tempelmann:

Can someone explain why macOS System Settings lets me reveal non-apps in Finder, via the (i) button, but not “Background” apps? Right-clicking there doesn’t work (that works only in the “Open at login” section). What a UI mess!

This is not fixed in Sequoia.

Mario Guzmán:

We already have to scroll a lot to get to many things due to the lazy list-y design of Setting Settings but do they have to make it so we have to scroll more? Not sure how necessary these headers are.

It’s also a header, so not sure it needs its own visual box around it or row box -- whatever you want to call it.

Ryan Jones:

iOS 18 Settings app is not really different.

  • big explainer headers
  • new Apps section

Previously:

Update (2024-07-22): Jeff Johnson:

This is macOS 15 all the time for me.

Thursday, July 18, 2024

Overcast’s New Foundation

Marco Arment (Mastodon):

Today, on the tenth anniversary of Overcast 1.0, I’m happy to launch a complete rewrite and redesign of most of the iOS app, built to carry Overcast into the next decade — and hopefully beyond.

[…]

  • Much faster, more responsive, more reliable, and more accessible.
  • Modern design, optimized for easily-reached controls on today’s phone sizes.
  • Improvements throughout, such as undoing large seeks, new playlist-priority options, easier navigation, and more.

[…]

The last few missing features from the old app, such as Shortcuts support, storage management, and OPML. These are absent now, but will return soon.

[…]

For Overcast to have a future, it needed a modern foundation for its second decade. I’ve spent the past 18 months rebuilding most of the app with Swift, SwiftUI, Blackbird, and modern Swift concurrency.

Now, development is rapidly accelerating. I’m more responsive, iterating more quickly, and ultimately making the app much better.

Overcast is one of my favorite apps, and I expect to like this version, too. However, after hearing about the self-imposed anniversary deadline, the smaller beta group and short beta period, and some unimplemented old features, I’m delaying for a bit. I’m in no rush and would like to avoid any initial bugs. The App Store doesn’t offer any way to downgrade, so it seems like the only way to wait for a few maintenance updates is to turn off auto-updating across all apps.

See also:

Previously:

Update (2024-07-23): Kyle Hughes:

The new Overcast looks and feels cheap now, and is the laggiest app I routinely use. So much polish is gone. It feels like a poster child for SwiftUI problems.

John Gruber (Mastodon):

I’ve got a few small gripes with this major update, but overall it’s clear that Overcast is better than ever.

I’m not sure what to make of the mixed reports, with some saying the interface is much more laggy than before and others saying that it’s much faster and smoother than before. I thought maybe it was that the actual drawing is slower but much of the work is async so that the interface isn’t blocked, but there are also reports of freezes. It does seem like Arment is working quickly to fix the bugs.

Update (2024-07-29): See also: ChicagoBob and Marcin Krzyzanowski.

Update (2024-08-13): Under the Radar:

The first few days after the launch of the Overcast rewrite, and how to process the mountain of feedback.

Marco Arment (Under the Radar):

Not having a big public beta for my rewrite really didn’t affect it at all. There was no feedback that I got from a bigger group that I didn’t get from my beta testers, from even having a small beta of I think it ended up being something like 40 people. I got all the same feedback that I got later from the bigger release and the bigger group.

Accidental Tech Podcast:

Overcast launch

Dominik Wagner:

The new overcast and me just don’t seem to be able to get along. sigh. Episode that was accidentally finished while asleep yesterday, apparently now deleted and gives me this beautiful screen on play.

Accidental Tech Podcast:

immense power of 1-star reviews

See also:

I’m going to wait a bit longer, but it looks like it’s getting there.

Update (2024-08-17): Chris Pepper:

Rewrite Feedback

Update (2024-09-10): See also:

Update (2024-09-17): I’m holding off on updating to iOS 18 because I’ve heard nothing about how well the old version of Overcast works there. The new version does not have OPML export yet, but it turns out that you can export from the Web site. So my main concern at this point is that there are lots of reports of problems with download limits and storage management.

See also: Kyle Howells.

Update (2024-10-14): Marco Arment:

I have no problem telling everyone this now: I’m raising my price in the near future.

I have no problem paying a higher price, but I’m concerned to still be seeing lots of reports of the new version not being fully reliable yet. It’s good to see that OPML support is now in beta, though.

Update (2024-10-18): ianscuffling:

Other than queueing issues a month or 2 ago, the app works perfectly fine for me - no failed downloads, no queue problems, nothing. It’s basically just the same as it ever was.

Yet every time I see a post from this sub it’s almost always someone with a catalogue of problems.

How can so many people be having such wildly different experiences?

Update (2024-10-22): Overcast:

The 2024.10 update is now live in the App Store!

Safari Private Click Measurement and Firefox Privacy-Preserving Attribution

John Wilander (2021):

A new, on-by-default feature called Private Click Measurement, or PCM, for privacy-preserving measurement of ad clicks across websites and from iOS apps to websites in iOS and iPadOS 14.5 betas.

This didn’t attract a lot of attention at the time, but now it’s getting some criticism for being opt-out and somewhat hidden in the settings. Apple words it as Allow privacy-preserving measurement of ad effectiveness, which is a bit confusing because it’s actually more private if you uncheck this. The French and Dutch localizations are apparently even more confusing because without the Allow part it sounds like you are missing out on privacy features if you don’t check it.

Actually, as far as I can tell, the benefit to checking the box is that it sends more information to advertisers and that this improves the economics of content creation while reducing the incentives for more intrusive tracking. If all browsers and sites are good citizens and support this, aggregate privacy should improve, even though at the micro level you are at best revealing more information in a way that doesn’t actually affect you.

Now it’s big news because Firefox added a similar option.

Lokjo (Hacker News):

Firefox is just another US-corporate product with an ‘open source’ sticker on it.

Their version 128 update has auto checked a new little privacy breach setting.

Jonah Aragon (Hacker News):

Less than a month after acquiring the AdTech company Anonym, Mozilla has added special software co-authored by Meta and built for the advertising industry directly to the latest release of Firefox, in an experimental trial you have to opt out of manually. This “Privacy-Preserving Attribution” (PPA) API adds another tool to the arsenal of tracking features that advertisers can use, which is thwarted by traditional content blocking extensions.

Moritz Förster (Hacker News):

What may sound good on paper does not go down well with many users for several reasons: Firstly, Firefox automatically delivers the Privacy-Preserving Attribution (PPA) with the update to the new version, despite the “experimental” label. More serious, however, is the fact that Mozilla also activates the feature directly - users must therefore deactivate the PPA manually by opting out.

Bobby Holley, Firefox CTO (Hacker News):

Most users just accept the defaults they’re given, and framing the issue as one of individual responsibility is a great way to mollify savvy users while ensuring that most peoples’ privacy remains compromised. Cookie banners are a good example of where this thinking ends up.

Whatever opinion you may have of advertising as an economic model, it’s a powerful industry that’s not going to pack up and go away. A mechanism for advertisers to accomplish their goals in a way that did not entail gathering a bunch of personal data would be a profound improvement to the Internet we have today, and so we’ve invested a significant amount of technical effort into trying to figure it out.

The devil is in the details, and not everything that claims to be privacy-preserving actually is. We’ve published extensive analyses of how certain other proposals in this vein come up short. But rather than just taking shots, we’re also trying to design a system that actually meets the bar. We’ve been collaborating with Meta on this, because any successful mechanism will need to be actually useful to advertisers, and designing something that Mozilla and Meta are simultaneously happy with is a good indicator we’ve hit the mark.

ozjimbob:

I think the issue I see is; this may well be a better way. But advertisers aren’t going to quit the arms race either, quit what they currently do and switch to this. They will use this but also continue the bloated, privacy-invading malware ads. So now we have two problems, not one.

See also: Thom Holwerda.

Previously:

Update (2024-07-19): Andrew Moore (via Brad Dougherty):

As someone who really values personal privacy, and despises advertising and tracking, I will be keeping PPA enabled in my browsers as it reduces the incentive from AdTech companies to track in an invasive way. It also simplifies my blocking of telemetry as I only have the DAP service endpoints to block.

[…]

Arguably, the biggest failure of Privacy Preserving Attribution (PPA) is Mozilla’s failure to clearly communicate and explain this experiment to its users. Changes that affect user privacy, positively or negatively, should be prominently displayed in the “What’s New” page. This page, containing release notes and that opens automatically when an update is installed, is the perfect opportunity to inform users about features that may impact them. While it is listed in the current release notes, it isn’t prominently displayed.

Safari Private Browsing 2.0

John Wilander et al. (Mastodon):

These are the protections and defenses added to Private Browsing in Safari 17.0:

  • Link Tracking Protection
  • Blocking network loads of known trackers, including CNAME-cloaked known trackers
  • Advanced Fingerprinting Protection
  • Extensions with website or history access are off by default

In addition, we added these protections and defenses in all browsing modes:

  • Capped lifetime of cookies set in responses from cloaked third-party IP addresses
  • Partitioned SessionStorage
  • Partitioned blob URLs (starting in Safari 17.2)

We also expanded Web AdAttributionKit (formerly Private Click Measurement) as a replacement for tracking parameters in URL to help developers understand the performance of their marketing campaigns even under Private Browsing.

Kyle Howells:

Seriously considering switching from Safari to Chrome or Firefox because EVERY TIME I visit most websites I’m logged out.

Safari’s stupidly over aggressive privacy policy of purging cookies after 7 days turns out to be quicker than I visit most sites.

Jeff Johnson:

I don’t use 1password, but I signed up for a trial a few days ago to diagnose an issue. Just got this email. What an indictment of Safari!

Steve Troughton-Smith:

I don’t know if Safari has just fundamentally broken the web, or if sites are just detecting Safari and clearing their own cookies to get a tracking refresh. It’s got worse and worse to browse with

I’ve been seeing this logout problem with Safari for years, and it’s gotten especially bad in the last few months.

Kyle Howells:

I posted this complaint about Safari logging me out 24hrs ago.

I just had to relogin in order to post this.

Jeff Johnson:

FWIW I almost never get logged out after this:

defaults write -g WebKitExperimentalIsFirstPartyWebsiteDataRemovalDisabled -bool true

Except for App Store Connect, which uses session cookies, which affects all web browsers.

It’s in the Feature Flags now, Disable Removal of Non-Cookie Data After 7 Days of No User Interaction.

Safari may reset this on updates, but putting it in the global defaults makes it immune from reset.

This did not work for me, so I think there must be multiple issues here.

Daniel Jalkut:

For the last few weeks Safari has become nearly impossible for me to use because it logs me out of EVERYTHING and forgets my state in web apps with cookie-based storage.

When I say it logs me out, I mean several times per day! Almost every time I return to a site, I have to log in again.

Googling suggests I’m not alone, but it’s far from a universal problem.

[…]

I’ve been to hell and back investigating this, and let me just say for now that if you suffer from this problem, I think turning ON the “Prevent cross-site tracking” preference in Safari will alleviate it.

He seems to have found a bug where turning off the extra privacy—which I did long ago to try to make Safari compatible with more sites—triggers a bug where Safari inappropriately deletes saved data.

Jeff Johnson:

“Private Browsing uses Oblivious DNS over HTTPS by default, which encrypts and proxies DNS queries to protect the privacy and integrity of these lookups.”

I’m not actually seeing this in my testing. Packet traces show DNS queries still occurring in the clear. Anyone else test this?

Jeff Johnson:

Advanced tracking and fingerprinting protection is in the Safari Advanced Settings on both iOS and macOS. The setting has three options: disabled, enabled in private browsing, or enabled in all browsing. Last year I wrote about why I disabled advanced tracking and fingerprinting protection in Safari. This year I found another reason: it breaks my Safari extension StopTheMadness Pro!

[…]

The way advanced tracking and fingerprinting protection appears to work is that if it blocks at least one third-party tracking script on a web page, then it also prevents every third-party script on the page from accessing the URL query string.

[…]

The problem with this “protection” is that it can break innocent third-party scripts. Even worse, Safari extension content scripts are treated as third party!

Previously:

Update (2024-07-22): Kyle Howells:

The big problem with things like “Advanced tracking and fingerprinting protection” in Safari, is they are basically a fancy way of saying

“We worked out how to break as much of the webpage as possible, without you actually noticing anything is wrong”

Except they now disable, or break so many things that Safari is starting to just become a horrible unreliable web browser to use.

Kyle Howells:

In the last few days I’ve had to re-login to:

  • Google 5 times
  • reddit 4 times
  • mastodon 4 times
  • YouTube 3 times
  • Github 3 times

This can’t just be the privacy measures, this has to be an actual bug.

Except I haven’t installed a macOS update recently, so in theory nothing has changed?

This is the type of thing that I’ve been seeing lately, though worse. Turning on Prevent cross-site tracking seems to have helped a bit but did not fix the problem. I’m currently trying the voodoo of disabling the Develop menu.

Safari 18 Announced

Apple:

Safari, the world’s fastest browser, now offers Highlights, an even easier way to discover information on the web, such as directions, summaries, or quick links to learn more about people, music, movies, and TV shows. A redesigned Reader includes even more ways to enjoy articles without distractions, featuring a streamlined view of the article a user is reading, a summary, and a table of contents for longer articles. And when Safari detects a video on the page, Viewer helps users put it front and center, while still giving them full access to system playback controls, including Picture in Picture.

Jen Simmons et al.:

Now, we are pleased to announce WebKit for Safari 18 beta. It adds another 48 web platform features, as well as 18 deprecations and 174 bug fixes.

[…]

macOS Sequoia beta adds support for opening links directly in web apps. Now, when a user clicks a link, if it matches the scope of a web app that the user has added to their Dock, that link will open in the web app instead of their default web browser.

[…]

Now you can personalize web apps on Mac with Safari Web Extensions and Content Blockers.

Jeff Johnson:

Note that this new feature does not apply to home screen apps on iOS 18. It’s Mac-only.

My blog post The four types of Safari extension explained the difference between Safari content blockers, Safari web extensions, Safari app extensions, and the discontinued Safariextz format. My own Homecoming for Mastodon is a Safari web extension, and StopTheFonts is a Safari content blocker, so those now work in Safari web apps on macOS 15. However, StopTheMadness Pro and StopTheScript are Safari app extensions, which means that they don’t work in Safari web apps, unfortunately. You probably don’t need StopTheScript in a web app, but StopTheMadness Pro would be nice, wouldn’t it? If you want StopTheMadness Pro in Safari web apps, let Apple know that they should support Safari app extensions too!

Christina Warren:

You know what would make Safari great? Support for ublock origin.

Corey Quinn:

And custom search engines.

Nicolas Magand:

Still no mention of search improvements on Safari. This is a wait and see situation and I hope more details will come out about Safari and if custom search engine settings are available, or at least more options than just Google and Bing-related search engines.

Jen Simmons et al.:

WebKit for Safari 18 beta adds support for three new features as we continue to improve passkeys. First, Safari 18 beta adds support for using mediation=conditional for web authentication credential creation. This allows websites to automatically upgrade existing password-based accounts to use passkeys.

Juli Clover:

With the new Passwords app in iOS 18, iPadOS 18, and macOS Sequoia, there’s a feature that is designed to allow websites and apps to upgrade existing accounts to passkeys automatically.

Enabled by default, the feature will speed up the adoption of passkeys, which are more secure than a traditional login and password.

Daniel Jalkut:

The only feature anybody REALLY wants from Safari is “Now works with every site Chrome does.”

Previously:

Update (2024-09-06): Greg Pierce:

Weird change in macOS Sequoia I do not approve of…the “Safari opens with” settings to prevent Safari from restoring windows/tabs when launched have gone away. I really dislike it maintaining everything and regularly quit and relaunch to get a clean slate. Those days are gone.

Wednesday, July 17, 2024

XCTest in Xcode 16

Jesse Squires:

The first is waitForNonExistence(withTimeout:), which provides the inverse of the existing waitForExistence(timeout:) API. Finally! This is such a welcome change. Often in UI testing it is more semantic to wait for an element to disappear rather than appear — for example, waiting for a loading indicator or waiting for a UIContentUnavailableView to disappear. Previously, you would have to roll your own implementation or awkwardly use waitForExistence(timeout:) and negate the result — both options are cumbersome and inefficient.

[…]

The second new API is wait(for:toEqual:timeout:), which waits for a property value of an element to equal a new value. This is useful for when the contents of an existing view should be updated and you want to verify the update happened. The most common use case here is likely for checking the contents of labels, text fields, or text views that change based on state updates or user interaction. Previously, there was not a great way to achieve this without introducing artificial timeouts in your test, or changing the UI element’s .accessibilityIdentifier in your app when its contents updated and then checking for the existence of the new identifier.

But he says that the latter currently doesn’t work.

Previously:

Swift Testing in Xcode 16

Stuart Montgomery (September 2023):

I’m excited to announce a new open source project exploring improvements to the testing experience for Swift.

John McCall:

I’m pleased to announce that the Swift project has accepted a vision document for A New Direction for Testing in Swift.

The vision:

It should gracefully coexist with projects that use XCTest or other testing libraries and allow incremental adoption so that users can transition at their own pace.

[…]

When a test fails, it should collect and show as much relevant information as reasonably possible, especially since it may not reproduce reliably.

[…]

There must be a way to carefully store per-test data, to ensure it is isolated to a single test and initialized deterministically to avoid unexpected dependencies or failures.

[…]

Many tests consist of a template with minor variations—for example, invoking a function multiple times with different arguments each time and validating the result of each invocation. A testing library should make this pattern easy to apply, and include detailed reporting so a failure during a single argument is represented clearly.

[…]

Depending on the library, these APIs may be called “assertions”, “expectations”, “checks”, “requirements”, “matchers“, or other names. In this document we refer to them as expectations.

What XCTest called “assertions” are now called “expectations,” what XCTest called “expectations” are now called “confirmations,” and what XCTest called “messages” are now called “comments.” As with SwiftData, it’s not clear to me that these renamings are accomplishing much.

Some specifics:

  1. @Test and @Suite attached macros: These declare test functions and suite types, respectively.
  2. Traits: Values passed to @Test or @Suite which customize the behavior of test functions or suite types.
  3. Expectations #expect and #require: expression macros which validate expected conditions and report failures.

I had hoped that Swift’s runtime features would be enhanced to the point where XCTest-style test discovery would be possible. Instead, it’s being done through macros.

Likewise, the trait stuff appears to be done through special-purpose macros rather than a general way of attaching metadata to functions.

I like the distinction between #require, which halts execution of the test, and #expect, which allows it to continue running and report more failures. #require is also used for unwrapping.

In existing test solutions available to Swift developers, there is limited diagnostic information available for a failed expectation such as assert(2 < 1). The expression is reduced at runtime to a simple boolean value with no context (such as the original source code) available to include in a test’s output.

[…]

We can also extract the components of an expression like a.contains(b) and, on failure, report the value of a and b.

There are two different things going on here. First, XCTest had a large number of macros with verbose names for different kinds of assertions (and object vs. primitive types). It has always been unergonomic, even compared with predecessors such as JUnit and its Objective-C ports. Swift Testing spells almost all of these as simply #expect, which is great. But it’s not clear to me why it took a decade to make this sort of ergonomic improvement. I’ve long been using very short names like eq() and overloads to achieve much the same effect. This was not really possible with Objective-C (without polluting the namespace) because you need macros (which are top-level) in order to capture the source location. But Swift can do this with methods on the test class. It can also use autoclosures to avoid evaluating the failure message on success.

The second cool thing is that, with XCTest, any values that were not passed as arguments to the assertion would be lost at runtime. To get detailed failure information you had to write extra code. Swift Testing’s #expect macro can look at the structure of the expression to extract these values (as well as how they were being used) automatically. This is a killer feature, which I first saw in Python nearly 20 years ago via pytest and once used to test my Objective-C code, too. (Python doesn’t have macros, but import hooks can modify the parsed AST before compilation.)

I’m not sure how to square the principle of scalability with the heavy use of macros and their effect on compilation time. There are also issues with runtime performance, though those seem more easily solveable.

Swift Testing ships with Xcode 16 and has two WWDC videos and a repo.

Rachel Brindle:

My current spike: Implementing a BDD DSL on top of Swift Testing using resultbuilders.

[…]

Already filed my first issue: The Test struct needs a public initializer.

Jonathan Grynspan:

One of the downsides of having a public initializer for Test is that it encourages people to use it. But since it doesn’t produce an instance of Test that’s visible to Swift Testing’s infrastructural layer, there’s no actual way to run it.

It’s a continual worry with Swift and Swift-based APIs that third-party developers will get locked out.

See also:

Previously:

Update (2024-07-18): See also: Jonathan Grynspan (Mastodon). I also want to note this thread, which discusses explicitly using SourceLocation when writing helper functions.

Update (2024-09-18): Antoine van der Lee:

We’ve only seen the basics today, but I’ll update this article in the upcoming weeks with references to more in-depth articles on each macro, test traits, test organization, and more.

Update (2024-10-17): Donny Wals:

So whenever that confirmation closure returns, Swift Testing expects that we have confirmed all of our confirmations. In a traditional completion handler-based setup, this won’t be the case because you’re not awaiting anything because you don’t have anything to await.

This was quite tricky to figure out.

[…]

So what I’ve really found is that the best way to test your completion handler-based APIs is to use continuations.

You can use a continuation to wrap your call to the completion handler-based API and then in the completion handler, do all of your assertions and resume your continuation. This will then resume your test and it will complete your test.

Update (2024-11-01): Donny Wals:

I think that parameterized tests are probably the feature of Swift testing that I am most excited about.

A lot of the syntax changes around Swift testing are very nice but they don’t really give me that much new power. Parameterized testing on the other hand are a superpower.

Update (2024-11-05): Majid Jabrayilov:

The most powerful feature of the Swift Testing framework is the trait system. Traits allow us to annotate a test or test suite to customize its behavior.

Xcode 16 Announced

Apple:

Discover the latest productivity and performance improvements in Xcode 16. Learn about enhancements to code completion, diagnostics, and Xcode Previews. Find out more about updates in builds and explore improvements in debugging and Instruments.

See also: Download, Release Notes, Updates.

• • •

Adam Bell:

The new Xcode 16 AI autocomplete tech is actually really slick when it has contextual awareness.

Oskar:

First look at AI autocomplete in Xcode 16. It feels really nice to have Tab fill in actual code, and it stays mostly on task. However the speed isn’t great and it does hallucinate a lot. For example, in this run it tried to use a view that did not exist.

It also tries to use UIKit in a Mac app…

Jonathan Wight:

Xcode’s AI code completions are by far the worst AI based code completions I’ve come across.

It just totally hallucinates bullshit code with 100% confidence.

• • •

John Voorhees:

Swift Assist allows developers to type a natural language prompt to generate code and UIs. Code can even be created from the text of a developer’s inline comment. The model that powers Swift Assist has an awareness of the Human Interface Guidelines, Apple’s frameworks, and what Apple considers coding best practices.

Saagar Jha:

I guess if you write Objective-C you don’t get good code completion

Jesse Squires:

Kind of ridiculous that the first 2 default configurations of the latest M3 MacBook Pro (up to $1800!!!) can’t even do full Xcode 16.

Call me crazy, but I think every MacBook Pro should be able to handle all of the new Xcode things.

How does a “Pro” level laptop come with 8GB RAM by default?

• • •

Der Teilweise:

“Fixed an issue where previously resolved Swift compiler diagnostics would reappear in the log and issue navigator in subsequent builds. (119533281)” [I want to believe.]

Marcin Krzyzanowski:

I……… don’t think Xcode 16 actually “fixed an issue where previously resolved Swift compiler diagnostics would reappear in the log and issue navigator in subsequent builds (119533281)”

I’m not finding this to be fixed, either. I’m also still seeing the same spurious errors related to conditional compilation in Swift.

Craig Hockenberry:

If you see the error below when switching SwiftUI previews from a macOS target to an iOS target the following WILL NOT help:

  • Cleaning the build
  • Killing CoreSimulator processes
  • Quitting and restarting Xcode

What WILL work is finding another tab with a hidden preview canvas for the wrong platform. And the subsequent swearing.

• • •

Keith Harrison:

Xcode 16 introduces an experimental setting to explicitly build Swift modules. Here’s my notes from trying it out.

[…]

This explicit discovery and build process avoids the build system having to wait for unbuilt modules. Apple also claims this makes the debugger faster as it can share the already built modules with the debugger.

[…]

I’m not sure how representative my timings are but I’m not seeing any faster builds using explicitly built modules. If anything, it’s slower than the implicit builds in my tests.

Ben Cohen:

If you’ve experienced long pauses when first inspecting variables in the debugger, you may find enabling explicit modules makes a big difference. When this is enabled, the debugger can make use of the same module files created during the build.

• • •

Matt Massicotte:

I still cannot get over it. Xcode getting EditorConfig support AND directory-based compilation. I could cry.

Everyone using local packages take note. Static libs are far more powerful, and their biggest downside is now gone.

Marin Todorov:

I certainly love this new feature in Xcode 16 🥰

Isaiah Carew:

on sequoia you can only run xcode 16 beta.

that means i can’t really install sequoia on my primary dev machine — releasing software on a beta OS with beta Xcode seems… well… bad.

dasdom:

Did you know that you can open a file from another project side by side in your current project in Xcode? The file is not copied to your current project. It is just shown in the editor.

This is especially useful with the demo code from WWDC.

James Dempsey:

It’s disappointing that side-by-side diffs have not made it back to Xcode’s source control views.

It bums me out that the user experience of GitHub on the web is more flexible than the native IDE, especially since the side-by-side diffs used to be there in Xcode.

Aaron Pearce:

Seems no big changes to Xcode Cloud this year. Was hoping to get webhooks that tell us when a build has processed.

Daniel Jalkut:

Best new feature I’ve seen in Xcode 16 Beta: simple breakpoints set in the lldb console are reflected in the UI. No need to reset them on every launch. Unfortunately, regex breakpoints are still not reflected nor settable via UI. Can I dare to dream?

Sami Samhuri:

In Xcode 16 beta 1 the keyboard shortcuts ctrl-n and ctrl-p no longer let you select a completion suggestion, and instead they move the cursor. It bugs me so much I actually filed a feedback. Please dupe if you use those too! I’d hate to have to start using the arrow keys for this.

Der Teilweise:

Oh, in case you wonder why you never heard of @retroactive that is supported in Xcode 16b1: It’s from an enhancement that is currently in review. It’s not mentioned in the Swift 6 migration guide. It is required if you want to use a CNContactViewController.

bjosh:

This wasted 2 days of development time, but in WKNavigationDelegate, the webView(_:decidePolicyFor:decisionHandler:) method has a new type signature that will ONLY work in the latest SDK. The change was that the decisionHandler now has a @MainActor attribute. This causes Swift to recognize that it “almost” meets an optional requirement and suggests that you change it. If you change it, it will cause builds to not include the optional method.

Previously:

Update (2024-07-18): Apple:

Apple Intelligence features are not supported on Virtual Machines and Simulators.

Update (2024-07-30): andrzejr:

Later on after installing Sequoia-beta2 and Xcode16-beta2 the predictive code completion stopped working. The info message in the Xcode settings said then that “Predictive code completion is not supported in this region”. Now, after installing Sequoia beta-4 and Xcode-beta4 the same message says “Predictive code completion is not available when booted from an external disk”.

Previously:

Update (2024-08-08): Avery Vine:

While localization extraction does occur after the build completes (and thus after macro expansion), localizations are extracted by reading the contents of your actual source code, and not expanded macros. Unfortunately, that means that it won’t pick any localized content generated by macros, unless the localized string is part of what’s used to expand the macro.

Update (2024-08-13): Tony Arnold:

Has anybody successfully enabled Explicitly Built Modules with Xcode 16? It’s causing build failures relating to type inference in SwiftUI for me.

Mac Marketshare in Q2 2024

William Gallagher:

Overall, the global PC market grew by 3.4% year on year in Q2 2024, for a total of 62.8 million shipped. Of those, laptops represented 50 million, which by itself is a 4% rise YoY.

Global desktop computer shipments rose by 1% to reach 12.8 million.

Across both laptops and desktops, Apple came in fourth with shipments of 5.5 million. That gave it a 9% market share, which is a 6% increase on the same period in 2023.

Jason Snell:

Apple has been outpacing the PC market for years now, but with the overall market now growing and the possibility of a sales spurt due to the introduction of Copilot Plus PCs, it’ll be interesting to see how Apple fares overall.

Previously:

Tuesday, July 16, 2024

macOS 15 Sequoia Public Beta

Juli Clover:

Apple today released the first beta of an upcoming macOS Sequoia update to its public beta testing group, giving the general public a chance to try out the new operating system's features ahead of its fall launch. The first public beta includes the same content as the third developer beta.

[…]

All of the Apple Intelligence features coming to iOS 18 will also be available in macOS Sequoia , but Apple does not plan to add these until later in the beta testing process. Apple Intelligence includes Writing Tools for editing, proofreading, and summarizing text in apps, and an Image Playground allows for AI images to be created from prompts.

Here are the release notes. Curiously, there was just a second developer beta 3 update. It’s really frustrating that they’re calling this a beta, and presumably not moving the release date back, even though it’s far from feature complete.

Jason Snell:

Every so often, Apple comes out with a new operating system feature that takes me completely by surprise. So it is with iPhone Mirroring, a new app that lets you view and operate your iPhone from the comfort of your Mac.

[…]

The screen appears flawless, operating at high frame rates and even transmitting audio back to the Mac. I was able to click around and play games as if I were running the apps right on my Mac.

That said, I did encounter some issues. Apple says that the screen will automatically rotate into horizontal orientation when an app requires it, which I found to be true, but there seems to be no way to force a rotation when you’d prefer to use an app horizontally that also works vertically. I also couldn’t seem to bring up Control Center, enter “jiggle mode” to move or remove apps or widgets. And when I was in horizontal orientation, I kind of wished I could make the window bigger—even if all it did was blow up the content from the iPhone.

[…]

Depending on how you feel about the new Photos app interface—and it’s definitely got some issues—it might be a blessing that Apple has passed over the Mac. But I don’t love the idea that at last, Apple’s building a proper tool for removing background clutter for images… and apparently the Mac’s not going to get that feature this year?

John Voorhees:

iPhone Mirroring isn’t a feature I’ve found myself using daily, but it can come in handy. For instance, the app that controls my Roomba isn’t available on the Mac. When the vacuum is on another floor of my house, I like to check in on it to see if it’s gotten stuck or needs emptying. In the past, that has meant checking the app on my iPhone from time to time as the Roomba does its thing. With iPhone Mirroring, I can simply open that app in a window on my Mac and flip over to it for a quick status check now and then. It’s still an interruption of what I’m doing, but it’s less so than grabbing my iPhone.

As much as I’ve enjoyed iPhone Mirroring, it has been buggy. In fact, for most of the past week, it didn’t work at all. […] Nothing I tried would fix the problem until, on a whim, I opened the microphone access section of my Mac’s System Settings and toggled microphone access off and then on again for one random app I haven’t used in months, which fixed it.

[…]

Why it took macOS until 2024 to include basic window tiling is beyond me, but it will finally arrive with Sequoia, and it is nicely done. There are too many third-party apps that have filled this gap in macOS to list, but as well as window tiling is implemented in Sequoia, I don’t think the best third-party apps have anything to worry about.

Previously:

Update (2024-07-25): Norbert Doerner:

The ugly “System Settings.app” claims that the Mac is not connected to the Internet, which is utter crap, as it is.

And then it claims my Apple ID is not enrolled in the dev programme, which of course it is.

[…]

Two hours and another FIVE reboots later, macOS 15 was finally able to download something[…] But after ANOTHER two hours, it was still stuck there, nothing moving.

Update (2024-07-30): Ilja A. Iwas:

Seems there’s a change in macOS Sequoia’s KVO mechanism, which causes crashes in GarageSale. Our custom ORM layer uses proxy objects, which queue KVO observations until their actual target object is loaded. The OS doesn’t seem to like that anymore. 😢

Update (2024-07-31): Stephen Hackett:

I filed this as Feedback FB14077154, and I have some good news! In our continued tradition, the Reminders team at Apple have heard our collective cry and have taken action, adding a new control to the Inspector in Reminders on the Mac.

But you still can’t move tasks with drag and drop. The similar looking Passwords app has the same problem. Is this hard to do with SwiftUI?

Previously:

Update (2024-08-08): Juli Clover (9to5Mac):

Apple today released the third beta of an upcoming macOS Sequoia update to its public beta testing group, giving the general public a chance to try out the new operating system's features ahead of its fall launch.

Previously:

An Ode to the Volume Swipe

M.G. Siegler:

I found myself thinking about the AirPods…

Specifically, how truly great the volume swiping mechanism is on the AirPods Pro. This must be my most-used gesture in life beyond perhaps swiping up to unlock my phone. I have AirPods in my ears a good percentage of the day and I’m constantly swiping up or down on the stems to raise or lower the volume of whatever I’m listening to. It’s so handy, literally. It’s done so casually now that it’s second-nature.

Sebastiaan de With:

Reddit comments 8 years ago, when the AirPods were first introduced. Eight years later, AirPods are a bigger business if broken out in revenue than McDonalds or Nike.

Deservedly so. Amazon currently has a Prime Day deal with AirPods Pro 2023 for $168.99 (i.e. $10 more than the original AirPods).

Previously:

Update (2024-07-18): Flo Crivello:

TIL: there are more transistors in the AirPods Pro than in the CPU of a MacBook Pro from 2010

One is a professional laptop, the other earphones running on a battery weighing about 1 gram

Moore’s Law’s one hell of a thing

See also: John Gruber.

NSCopyObject, the Griefer That Keeps on Griefing

Wade Tregaskis:

Almost nobody intentionally uses NSCopyObject, but your superclass might, and therefore you might.

[…]

Someguides specify a better method, which is to manually zero out the copied object’s ivars and then repopulate them via formal property setters. That actually works with or without ARC, although it may break – causing memory leaks – if the superclass ever stops using NSCopyObject (or if NSCopyObject ever gets upgraded to understand reference-counted ivars that it currently does not). It’s also only possible in Objective-C because Swift doesn’t provide direct access to instance variables.

[…]

It appears that the best you can do [in Swift] is assume the superclass will always use NSCopyObject, if it does currently, and just manually increment the retain count. Like Objective-C with ARC, the language & standard library really don’t want you to actually do this, but at least in Swift it’s relatively straightforward[…]

[…]

And yet, Apple still use NSCopyObject themselves to this very day, in their own applications and frameworks – including major frameworks like AppKit that almost all 3rd party developers rely on. NSCell is still broken, three decades later, as is NSImage & NSImageRep, and NSAnimation. Most of those are explicitly designed to be subclassed, despite Apple’s own very clear instructions to never mix subclassing with NSCopyObject.

Maybe Apple doesn’t want to dig into that old code and possibly break apps. However, with recent major changes to NSView, perhaps it’s not entirely off the table.

Previously:

Update (2024-07-17): See also: Hacker News.

Chromium Browsers Preferencing *.google.com Domains

Simon Willison (Hacker News):

It turns out Google Chrome (via Chromium) includes a default extension which makes extra services available to code running on the *.google.com domains - tweeted about today by Luca Casonato, but the code has been there in the public repo since October 2013 as far as I can tell.

It looks like it’s a way to let Google Hangouts (or presumably its modern predecessors) get additional information from the browser, including the current load on the user’s CPU.

Since the code is in Chromium, it also affects Brave and Edge.

Luca Casonato:

This is interesting because it is a clear violation of the idea that browser vendors should not give preference to their websites over anyone elses.

The DMA codifies this idea into law: browser vendors, as gatekeepers of the internet, must give the same capabilities to everyone.

John Gruber:

I frequently bemoan the DMA’s ambiguity but here I’d say it’s crystal clear. Chrome is a designated gatekeeping platform, and granting system-monitoring privileges only to Google’s own websites is clearly in violation. Here’s a Hacker News comment from a purported Google employee who calls the feature “mundane” while admitting that Google Meet uses it as a tool to debug bad connections, even though no other web-based meeting app has access to it. I can think of no better example proving that Google views the open web as a platform that it owns.

Previously:

Monday, July 15, 2024

UTM SE Now in the App Store

Wes Davis (Hacker News, MacRumors):

Apple has approved UTM SE, an app for emulating a computer to run classic software and games, weeks after the company rejected it and barred it from being notarized for third-party app stores in the European Union. The app is now available for free for iOS, iPadOS, and visionOS.

After Apple rejected the app in June, the developer said it wasn’t going to keep trying because the app was “a subpar experience.” Today, UTM thanked the AltStore team for helping it and credited another developer “whose QEMU TCTI implementation was pivotal for this JIT-less build.”

Craig Grannell:

OK, now this is completely incoherent. UTM is on the App Store itself (not a third-party store), but iDOS isn’t. I hope the iDOS dev resubmits and points at UTM.

Apple looks ridiculous with all this app review stuff. Like it has no idea what it’s doing, what’s OK and what’s not OK. That might have been acceptable in 2008 when it was figuring things out. But not in 2024.

Jorge Salvador Caffarena:

Apple saw that they were going to be forced to notarize UTM for the EU alternative stores, AltStore, and as with Delta figured is better to allow it on the official App Store to undermine AltStore. That’s what’s happening over and over.

Riley Testut:

Thanks Apple for once again proving the best way to change the App Store rules is to submit an app to AltStore :)

Craig Grannell:

App Store review is inconsistent at the best of times, but the situation with emulation is now beyond absurd. The MAME4iOS dev says their app has been rejected multiple times for ‘spam’.

[…]

But who’s to say Apple won’t change its mind next week, depending on what it thinks it can get away with? And I do wonder what will happen if someone dares to submit an Apple II or Mac emulator for review. Perhaps they should submit it to AltStore first – that at least appears to make Apple rethink.

[…]

And Apple’s ridiculous review stance means great devs won’t bother making emulators for iPhone and iPad. Why would they? Why spend months polishing an emulator only for Apple to arbitrarily decide to reject it? (And, yes, this is the wider App Store in microcosm. Creators of other apps and games increasingly feel the same way.)

Rui Carmo:

I’m really sad Apple still forbids shipping apps with a JIT, but we are so close to having a usable Linux sandbox on an iPad that I will take whatever I can get.

Rui Carmo:

I spent a few hours trying out UTM SE (which, if you’re new here, is a just-released version of the UTM front-end for QEMU that runs on iOS) on my M1 iPad Pro, and quickly came to the conclusion that it is not really usable to do local development out of the box.

It might be great to, say, run Windows 95 or older DOS games (and I’m still sore that the Mac OS 9.2.1 image vanished), but unlike the “real” UTM, using UTM SE on iOS or an iPad is severely hobbled by the lack of a JIT.

Previously:

Update (2024-08-08): Craig Grannell:

MAME4iOS rejected for “spam” yet again, and App Store cannot explain how the folks behind it can move beyond what’s clearly an automated bottleneck.

Stack Overflow Changes Data Dump Process

Philippe (via Hacker News):

I’m going to start with an important statement: this is primarily only a change in location for where the data dump is accessed. Moving forward, we’ll be providing the data dump from a section of the site user profile on a Stack Exchange profile.

There are a number of reasons for this: first, this is an attempt to put commercial pressure on LLM manufacturers to join us and our existing partners in the “socially responsible AI“ usage that we’re advocating for - to get them to give back to the communities whose data they consume.

Second, we want to help make the process of accessing data dumps quicker and more efficient. While Archive.org has been a great partner to us, as you may know, both internally and externally, people have encountered challenges with uploading and downloading the dumps with any reasonable speed.

[…]

We are requiring that all partners in socially responsible AI comply with the CC BY-SA attribution requirements, attributing content to the community members who contributed it.

They will no longer be uploading the data dump to archive.org, reducing redundancy.

Shog9:

At best, this is extremely inconvenient; at worst, it guarantees no one will ever again have a consistent “dump”.

I’m going to guess: no one involved in making this decision has ever downloaded and worked with the full data dump. It’s already slow and fairly inconvenient; the one bright spot is that a decent torrent client lets you start it and do other stuff while waiting. Best-case, you devote a fast enough pipe to this that the hundreds of extra clicks necessary are rewarded with shorter turnaround… But somehow, I doubt it.

Restore The Data Dumps Again:

You have been engaging on this topic disingenuously for a year.

It was your intention to turn off the dumps a year ago, and now you're trying to make them as inconvenient as possible.

Andras Deak:

You are making it very easy to pull access to our own content that brings you profit. Even if we trusted the company now, this would make it not just possible, but trivial, for some future nefarious company leadership to backstab the community. And guess what: we already have the nefarious company leadership in the present.

AMtwo:

Just over a year ago when I was still staff at the company, I was personally in the unenviable position of having been instructed by the Stack Overflow CEO to disable the Data Dump, and to not re-enable it because he wanted to end the dump. That decision ultimately snowballed until Stack Overflow made commitments to continue the data dump quarterly. Data Superstar Aaron ultimately made some improvements and there was a shift made to the delivery schedule, to make it align better with quarterly boundaries. This is all excellent news for those of us who use the data dumps, and/or are proponents for equal data, and/or are defenders of the open data commitments made by and for the community.

Now, just one quarter after the company’s most recent commitment to a schedule, it’s shifting, again. For no reason. Apparently undoing the most recent schedule-shift by bumping (at least) a month.

goldPseudo:

How do you plan to enforce “I agree that I will use this file for non-commercial use. I will not use it for any other purpose, and I will not transfer it to others without permission from Stack Overflow.” when the CC BY-SA license explicitly forbids adding downstream restrictions?

Previously:

Midnight HomePod mini

Joe Rossignol:

Apple today announced that the existing HomePod mini is now available in a Midnight color option, which replaces the nearly-identical Space Gray color previously offered.

[…]

Apple first released the HomePod mini in November 2020, and it has yet to release a second-generation model of the speaker.

Caveat emptor:

  • Apple still advertises this as allowing “iTunes music purchases” as an audio source, though in practice many purchases are not available.
  • With a slow processor and not much RAM, it’s unlikely to get the next round of Siri and Apple Intelligence improvements.

Previously:

Update (2024-07-15): John Gruber:

The bigger question: is this a sign that a HomePod Mini gen 2 isn’t coming soon? The current models debuted in November 2020, and are powered by the S5 chip from Apple Watch Series 5.

[…]

Makes me wonder if Apple produced a bunch of space gray HomePod Minis all at once, when the product debuted, and has been waiting for them to sell out before switching to midnight.

NSCopying in a Swift World

Douglas Hill:

This crash happens because, behind the scenes, the Swift compiler synthesises overrides of a superclass’s designated initialisers. These overridden initialisers crash to prevent objects from being incorrectly initialised from Objective-C.

[…]

From a quick look on Stack Overflow, it seems [self.class alloc] is often a recommended way to create a copy in Objective-C. However, the problem is that the use of self.class dynamically looks up the subclass SocialDocument, but the code here in our framework has no idea that SocialDocument has changed the initialisation requirements.

[…]

If Document were a simpler type where all state that should be copied was public, then subclasses that required copying to create instances of the subclass could override copy(with:) without calling super[…]

[…]

There isn’t a nice way to make copying subclasses work while still adhering to Swift’s principle of reducing the amount of mutable state by using let to create read-only properties.

Adrian Kashivskyy:

PSA: Don’t cast values to NSCopying in Swift or you risk a crash at runtime. Learned this the hard way. 🤠

[…]

Because all values that were originally bridged from Objective-C will pass the alone NSCopying cast, even when they don’t actually conform to the protocol. Such values immediately become instances of _SwiftValue and, like trojans, they will sit there pretending to be innocent but will crash at runtime as soon as they’re accessed.

Previously:

Sequoia Beta 3 VMs Don’t Support Mac App Store

Howard Oakley:

The third developer beta of macOS 15 Sequoia finally brings support for Apple ID in macOS virtual machines (VM). As this is likely to form the first public beta-release next week, here’s a short guide to how to install a Sequoia VM, and what you can do with it.

[…]

Apple has previously stated that Sequoia “supports access to iCloud accounts and resources when running macOS in a virtual machine (VM) on Apple silicon”. However, that currently doesn’t include access to the App Store or use of apps purchased from it.

Howard Oakley:

With issues of virtualising what was needed from the host’s Secure Enclave apparently solved, some of us had come to expect that would include App Store access, which is also controlled by Apple ID. It’s now clear that Apple didn’t intend to include its App Store as a “related application”, which was implicitly excluded.

However little you might love the App Store, support in macOS VMs is essential if they are to be of any general use. VMs that can’t run all App Store apps as part of the benefits of signing in with an Apple ID are so stunted as to be of little use. Would it be that difficult to implement, now that those VMs can be signed in to all the other services that depend on an Apple ID? Did Apple really forget its own App Store when deciding what apps should be allowed to run in a VM?

Previously:

Update (2024-07-17): Howard Oakley:

If you are beta-testing macOS 15 Sequoia in a lightweight virtual machine on an Apple silicon Mac, beware that it can cause the host to suffer a kernel panic.

[…]

In Sonoma and earlier VMs, if you give the guest 16 GB of memory, it’s likely to use considerably less than that. Those betas of Sequoia will probably use a little more than is allocated to them. But that will double if you restart the VM, and if your host Mac has insufficient memory for twice that VM’s original allocation, it’s likely to suffer a kernel panic with the VM still open.

Update (2024-07-25): Matthias Gansrigler:

I read somewhere that when running macOS Sequoia in a virtual machine, I can log into my Apple account. But that does not seem to be available for Feedback Assistant, or is it? I still get the same error I used to when virtualizing earlier versions of macOS.

Previously:

Sequoia Finally Addresses Notification Center Privacy

Arin Waichulis:

The privacy implications of Notification Center popups are well-known in the security forensics community. Whether a user likes it or not, macOS temporarily keeps a log of every notification received in a single plaintext database. This can include messages from applications like iMessage, Slack, Teams, and virtually anything else.

However, it now appears Apple has moved the Notification Center database in macOS Sequoia to address concerns.

They’re moving it from the temporary items folder to a group container, which will be protected by TCC.

Previously:

Friday, July 12, 2024

Transferring Google Photos

Data Transfer Project:

Beginning today, Apple and Google are expanding on their direct data transfer offerings to allow users of Google Photos to transfer their collections directly to iCloud Photos. This complements and completes the existing transfers that were first made possible from iCloud Photos to Google Photos and fulfills a core Data Transfer Initiative (DTI) principle of reciprocity.

Joe Rossignol:

More details can be found in the Google and Apple support documents for each tool[…]

Chance Miller:

Apple says that the service will be available in over 240 countries and regions around the world. The service isn’t available for child accounts or Managed Apple ID accounts. You also can’t import photo and video data to iCloud while Advanced Data Protection is enabled.

Nick Heer:

While Google has long permitted users’ retrieval of data it holds, it has not been the most enthusiastic supporter of direct transfers away from its services. This distinction becomes increasingly important as users store more data with cloud-based services instead of keeping local copies — they may not have space to download all their pictures if they trust the cloud provider’s hosting.

Previously:

Delta 1.6 Rejected From the App Store

Zac Hall:

We knew the retro game emulator app Delta was popular, but over 10 million users on iPhone alone? That’s the stat that the team behind Delta shared today alongside the latest news about availability on iPad.

[…]

Delta for iPad comes with features exclusive to iPadOS, including support for Handoff from iPhone, opening multiple Delta windows, and even playing Delta in Stage Manager or in Split View. That’s in addition to each console skin being optimized for the iPad and full-screen game support.

Riley Testut:

lol Apple rejected it

John Voorhees (Mastodon):

I’ve had a chance to try the new Delta 1.6 iPad features and they’re great, so it was disappointing to see that the app has been rejected by App Review. According to the AltStore Mastodon account, the reason was that the app included a link to the developers’ Patreon page, even though that link appeared in prior versions of the app. The Patreon link has been removed and the app resubmitted, so hopefully the update will be available worldwide soon.

Riley Testut:

Some positive news! App Review just called — tl;dr we are allowed to include Patreon benefits (e.g. alternate app icons), there are just some changes we need to make first

Rather than delay 1.6 any more though, we’ve removed all Patreon functionality for now and resubmitted. Plan is to add it back in an update soon once we get 1.6 out the door (hopefully soon)🤞

It was also rejected for “4.3.0: Design Spam.”

Stuart McHattie:

it’s their get out clause for “actually we just don’t want to approve your app any more”. See the review guidelines and in particular (b). So I guess what they’re saying is that they wanted emulators, but they’ve had their fill.

Which is a dumb reason for an update. I could understand this reason for rejection on a brand new app.

Craig Grannell:

Rejecting Delta – DELTA! – for “spam” is, even by Apple standards, taking the piss. Then again, this is one of those opaque rules that often just means Apple doesn’t want the app. MAME4iOS has been tangled in this net for some time now (although I suspect will now fall foul of Apple gradually deciding to punt emulators that aren’t specifically for game consoles, despite having approved a bunch for home micros; still, arcade boards were an unknown).

Craig Grannell:

Emulation state of play on iOS:

  • A few stars (eg Delta & PPSSPP)
  • A cut-back RetroArch (and no front-ends)
  • The odd fun curio (eg ZX81)
  • Loads of crap (me-too NES; terrible C64)
  • Presumably intentionally opaque Apple rules that would be simple to clarify, but Apple doesn’t want to because it never wanted emulators on the store and appeared to only approve Delta to blunt AltStore, and this also means many good devs won’t bother and Android remains way better for emulation

[…]

So three months in and, as predicted by me and others, emulation on iOS is an incoherent mess. Which probably suits Apple just fine but it further dents the platform’s credibility with a very noisy contingent of gamers and makes it look inferior compared to Android. And Apple’s ridiculous review stance means a lot of great devs won’t bother. Why would they? Why spend months polishing an emulator only for Apple to arbitrarily decide to reject it?

Joe Rosensteel:

We need some people who can manage from the bottom up. Who can talk to developers directly about App Store issues. Whose responsibilities are the interrelated aspects of customer experience, not just the UX of a single product.

Decades ago, Apple changed its relationship with the community with Apple Evangelists. Maybe it’s time to do so again with a team of Apple Ombudspeople?

[…]

Apple famously isn’t aligned around product lines, which is part of the whole “secret sauce” of Apple product development. Except it sometimes seems that nobody is asking the big questions about how Apple’s products interoperate.

[…]

It’s not the job of the security boffins to worry about balancing security with user experience. They’re thinking about making sure the user is safe, and that’s a fine role. But it has to be counterbalanced by larger considerations, and it’s hard to imagine that anyone is empowered to do that right now.

I like the general idea. But two of his examples are Epic and emulators, and I think those are cases where the people at the top were well in the loop. If they had wanted these submissions to go smoothly they would have. Ombudspeople can be great at surfacing issues, but I don’t see how they get leadership to fundamentally change its mind about major issues.

Previously:

Update (2024-07-15): AltStore:

Just in time for the weekend — Delta 1.6 has been approved and is now available in the App Store!

Craig Grannell:

Good grief, Apple. Glad you got to the right result but why does it so often require devs to fight against bullshit rules and then hope someone might call and that said person can provide clear advice? (Because that doesn’t always happen.)

Tim Hardwick:

With iPad support in v1.6, users can now take full advantage of the device’s larger display and play in fullscreen. There are new controller skins designed specifically for iPad, and the app supports multiple windows in Stage Manager and Split View, with games able to optionally pause when switching windows. The iPad version also supports external game controllers, and the developer Riley Testut says emulated games “hand off” seamlessly between iPhone and iPad, allowing gamers to continue playing where they left off.

Testut says the need for BIOS files has now been eliminated, streamlining the setup process. Users should also notice a considerable improvement in the performance of DS games.

HTTP Status Codes As Area Codes

httpareacodes (via Mark Christian):

Things that are three digits?

  • HTTP response headers.
  • Area codes.

[…]

301: Moved Permanently: Western Maryland

Huge AT&T Data Breach

Zack Whittaker ( Hacker News):

U.S. phone giant AT&T confirmed Friday it will begin notifying millions of consumers about a fresh data breach that allowed cybercriminals to steal the phone records of “nearly all” of its customers, a company spokesperson told TechCrunch.

In a statement, AT&T said that the stolen data contains phone numbers of both cellular and landline customers, as well as AT&T records of calls and text messages — such as who contacted who by phone or text — during a six-month period between May 1, 2022 and October 31, 2022.

[…]

AT&T’s Huguely told TechCrunch that the most recent compromise of customer records were stolen from the cloud data giant Snowflake during a recent spate of data thefts targeting Snowflake’s customers.

Brian Krebs:

In a written statement shared with KrebsOnSecurity, the FBI confirmed that it asked AT&T to delay notifying affected customers.

[…]

Earlier this year, malicious hackers figured out that many major companies have uploaded massive amounts of valuable and sensitive customer data to Snowflake servers, all the while protecting those Snowflake accounts with little more than a username and password.

[…]

Other companies with millions of customer records stolen from Snowflake servers include Advance Auto Parts, Allstate, Anheuser-Busch, Los Angeles Unified, Mitsubishi, Neiman Marcus, Progressive, Pure Storage, Santander Bank, State Farm, and Ticketmaster.

Brian Krebs:

AT&T’s SEC filing says some cellular site tower information is also among the data accessed by the intruders, which could be used to determine the approximate location of where a call was made or text message sent.

This raises an important question: Was the AT&T customer data stolen from a law enforcement portal set up by AT&T? Sure seems like it.

Joseph Cox:

I’ve also seen a section of the hacked AT&T data. It is incredibly sensitive. The numbers dialed by targets can include apparent family members, businesses, and other places that build a detailed picture of someone’s life. Staggering data breach.

Update (2024-07-15): Matthew Green:

If you want to avoid disasters like the AT&T breach, there are basically only three solutions:

  1. Don’t store data
  2. Don’t store unencrypted data
  3. Have security practices like Google

Thursday, July 11, 2024

Affinity Six-Month Trial

Jess Weatherbed (Hacker News, Reddit):

Design software developer Serif has launched a new six-month free trial for its Affinity creative suite, which is well regarded as being one of the few viable alternatives to Adobe’s professional design apps. The offer is available for Affinity Photo, Affinity Designer, and Affinity Publisher starting today on Mac, Windows PC, and iPad.

Affinity uses a one-time purchase pricing model that has earned it a loyal fanbase among creatives who are sick of paying for recurring subscriptions. Prices start at $69.99 for Affinity’s individual desktop apps or $164.99 for the entire suite, with a separate deal currently offering customers 50 percent off all perpetual licenses.

Previously:

Ricoh ScanSnap iX1600

Ricoh (Amazon):

The newest flagship in the ScanSnap family is 33% faster, giving you more time back in your day. Designed for everyday use, the ScanSnap iX1600 gets documents digitized, organized and sent anywhere—anytime—with minimal effort.

The Fujitsu ScanSnap S500M was the only document scanner that ever worked well for me. I’d been using it for almost 18 years (lately via my 2012 MacBook Pro to run the old software), making it probably the longest serving equipment in my office aside from the desk chair.

Unfortunately, it finally died, with the rollers melting, so that they stick to the paper and no longer turn. There’s some possibility of taking it apart and installing aftermarket rollers, but with unscanned papers stacking up I opted to get a new ScanSnap iX1600.

I’m glad to say that it essentially works the same way as before, just a bit better. The new ScanSnap Home software is ugly and awkward, but you can use it without the cloud features and even lock it down with Little Snitch. As before, you can pretty much ignore the software once it’s configure because you can initiate scans by pressing a button on the scanner itself. It now has a touch-screen so you can switch between different profiles (e.g. receipt, black-and-white document, photo) without even touching the Mac.

It works via Wi-Fi, so I can scan to the Mac and update the firmware without ever connecting a USB cable—which would be inconvenient as it’s on the other side of the room from the Mac. I suppose this means that I can’t control which servers it’s talking to, though…

Scanning itself is much faster. It can optionally use OCR to try to help name the files, e.g. figuring out the vendor and date for receipts. This works surprisingly well, although it’s slow even for tiny documents on an M1 Mac. The scanner will pause for a few seconds before it lets me start scanning the next document. Maybe this limited subset of the OCR functionality runs on the scanner itself?

TWAIN support is still missing. I also wish that it could preview the scan on the device’s own display, since, as mentioned, I don’t have the scanner set up next to the Mac. If previews are not a concern, you can avoid installing the Mac software entirely and just have it save the scans to an SMB share on your Mac.

See also: Accidental Tech Podcast.

Previously:

Update (2024-07-15): John Gordon:

In contrast to the desktop app the simple iOS app, ScanSnap.app [ScanSnap Connect Application], worked well for me. It was even multi-user -- anyone could scan from their iPhone.

As of 7/2024 the ix500 still works with a single macOS device by cable or WiFi using the current desktop app. The iOS app is end of life however. A year ago it dropped Google Drive support. A few days ago OneDrive auto-upload started to crash the app following upload (it freezes, needs force quit, the document is lost).

The replacement for [ScanSnap Connect Application] is ScanSnap Home. That app does not support the ix500; it will not connect via WiFi. There is also an end-of-life ScanSnap Cloud app that uses PFU’s crazy (failed?) cloud document routing service.

Mac UPS Software

Howard Oakley:

The commonest error in deciding whether to use a UPS is the argument that, because your Mac isn’t left on 24/7, it’s always attended, so should anything go wrong with the power, you’ll be able to deal with it. Even if you’re sat at your Mac, with instant reactions, there’s no way that it can shut down in time to protect it. Whether you use your Mac for half an hour a day or only power it off once a year for cleaning, it still needs a UPS.

Next in the reasons we persuade ourselves to believe is that UPSes are expensive. Yes, many are, but the more expensive ones are designed to keep things like power-hungry servers running for an hour or more. Most Macs are well-protected if the UPS keeps them going long enough to allow an orderly shutdown, a minute or two at most. It’s far better for a Mac to be given that chance than to have no UPS at all.

[…]

Sadly, few manufacturers bother to provide software that supports Macs. CyberPower is one of those few, and although its bundled software looks oddly blurry, it has valuable features that go well beyond the basics reported by Energy Saver settings.

My Tripp Lite UPS continues to work well, but the Energy Saver integration broke with macOS Catalina, and as far as I know it was never fixed.

Howard Oakley:

If you use a wireless keyboard, mouse or trackpad, or have a UPS connected to your Mac, you might wonder how often macOS checks their charge and functional status. The answer is often, typically every 2-5 seconds. You can follow those checks in the log by listing entries for the subsystem com.apple.BatteryCenter.

Howard Oakley:

Unless your Mac has a Battery widget installed, perhaps on its Desktop, Battery Center entries don’t appear in its log. When you do add a Battery widget to the Desktop, though, checks are made every few seconds, and their results written to the log, and those continue even after removing the widget, at least until the next time that Mac is shut down or restarted.

Third-party software isn’t supposed to access private services like Battery Center, so creating an independent utility to perform similar functions would have to capture its own data. However, given access to the log, it’s possible to read Battery Center’s entries there instead.

[…]

This initial version [of Unhidden] does one job: each time you open a new window in the app, it displays the most recent results obtained by Battery Center, across all the devices that it checks.

Previously:

App Intents Dogfooding

Matthew Cassinelli:

Overall, seeing updates to these Reminders actions is a good sign for the Shortcuts ecosystem, as it’s the first signal that Apple is updating their native Shortcuts actions with App Intents-based replacements in iOS 18.

Since the inception of many of these actions in Workflow when Shortcuts was a third-party app, many actions have been built on longstanding external-facing developer APIs (hence actions like “Get Upcoming Reminders”) and then later custom intents from within teams at Apple – they either stayed the same as the Workflow actions, or got piece-by-piece updates for new features each year like Tags in Reminders.

However, as is the nature of intents development, Apple also has tried not to break anything or remove features that are being used in existing shortcuts – but rather than deprecating actions over time, they either have been updated-in-place, added as separate actions (like “Open Smart List”), or simply not implemented in Shortcuts at all.

Now, it appears that we’re seeing the first evidence of an Apple team seeding new actions in betas, hopefully testing and iterating on them, and then likely replacing the Workflow- and custom intents-era actions with modern App Intents actions that can be extended with new features more easily and updated going forward.

Wednesday, July 10, 2024

USPS Metadata Surveillance Program

Tim Cushing:

The USPS wasn’t filing its required paperwork tracking government requests for snail mail info. The USPS rarely rejected another government agency’s demand for mail metadata. And the problems weren’t minute. The forms detailing compliance with government demands for data often weren’t being filed until more than two years after those reports were due.

[…]

It wasn’t until 2023 that Congress made a move to shut the program down — citing not only some concerning privacy violations but the lack of evidence showing easy access to weeks or months of mail snapshots was essential to law enforcement investigations. Roughly a year later, that request from Congress has gone nowhere.

[…]

The USPS (quite reasonably) points out there’s no expectation of privacy in the information contained on the outside of mail. And that’s an understandable position to take… to a certain extent. But no postal worker on their own could compile this information on their own despite having access to this information. And even if they could, it could not be obtained in bulk after the fact because the USPS and its employees would need to know what mail to track beforehand to generate these records.

Previously:

The Unofficial Apple AI Weblog

TUAW:

The Unofficial Apple Weblog (TUAW) has been a cornerstone of Apple-related journalism since its establishment on December 5, 2004. Acquired by Web Orange Limited from Yahoo IP Holdings LLC in 2024 without its original content, our mission has been rejuvenated to continue providing Apple enthusiasts and tech professionals with authoritative and engaging content. We strive to serve as a comprehensive resource for news, credible rumors, and instructional content that spans the Apple ecosystem and beyond.

Karissa Bell:

The sale, notably, did not include the TUAW archive. But, it seems that Web Orange Limited found a convenient (if legally dubious) way around that.

They scraped archive.org.

Christina Warren:

So someone bought the old TUAW domain name. TUAW was a site that I worked at in college, that has been dead for a decade and that I stopped working for 15 years ago. But now my name is bylined on 1500+ articles alongside an AI-generated photo. Revive the old brand. Fine. But leave my name off of it!

Jason Snell:

They’ve re-used the names of key historic contributors, but generated new bios and photos(!) and claim that new stories are written by these historic contributors.

[…]

After coverage here and elsewhere, the site has changed all the names of real people to fake people. Same bios, same photos, but now fake names. This doesn’t stop the new TUAW from being an AI-generated garbage farm, but at least my friends’ names aren’t attached to the garbage anymore.

Eric Schwarz:

It’s like what happened with iPodlounge/iLounge…cashing in on the name, but just crap regurgitated content.

Previously:

Update (2024-07-15): Nick Heer:

The same advertising identifier has been used with a handful of other previously defunct publications like Metapress and Tapscape, as well as a vanity URL generator for Google Plus.

Adam Engst:

Christina Warren said AOL shuttered TUAW in 2015 and moved the archives to Engadget, breaking all the URLs. I suspect Web Orange Limited used a spider to crawl all old TUAW URLs on the Wayback Machine, had an AI tool “meticulously rewrite” those articles, and posted them on the new site. That would explain how we get Steve Sande’s favorite apps article from 2014 written by “Jeffrey Adams” but still using the first person. Compare against the original on the Engadget site.

TUAW was prolific, so there are thousands of articles going back to the site’s founding in 2004. When I checked out the oldest pages, I quickly found some places where the system broke down, linking modern headlines with ancient content and revealing what looks like generative AI behind the curtain.

Why do this? There are a lot of old TUAW URLs floating around on the Web. They didn’t resolve a week ago, but they do now, and their content will often pass the average Web surfer’s sniff test. Having content on the other side of all those old URLs will help the overall SEO ranking for the TUAW site, thus increasing the chance Google will return TUAW pages for searches and cause people to see ads.

See also: MacRumors and Slashdot.

Calling AI a Bubble

Ron Miller (via Hacker News):

[Rodney Brooks] knows what he’s talking about, and he thinks maybe it’s time to put the brakes on the screaming hype that is generative AI. Brooks thinks it’s impressive technology, but maybe not quite as capable as many are suggesting. “I’m not saying LLMs are not important, but we have to be careful [with] how we evaluate them,” he told TechCrunch.

He says the trouble with generative AI is that, while it’s perfectly capable of performing a certain set of tasks, it can’t do everything a human can, and humans tend to overestimate its capabilities. “When a human sees an AI system perform a task, they immediately generalize it to things that are similar and make an estimate of the competence of the AI system; not just the performance on that, but the competence around that,” Brooks said. “And they’re usually very over-optimistic, and that’s because they use a model of a person’s performance on a task.”

He added that the problem is that generative AI is not human or even human-like, and it’s flawed to try and assign human capabilities to it. He says people see it as so capable they even want to use it for applications that don’t make sense.

M.G. Siegler:

Seemingly every investor I talk to these days is struggling with the same basic thing: they believe AI is going to be one of the most transformative technologies of the past several decades – and perhaps ever – but they have almost no idea how to invest in the space. And yet they are investing in the space. At a pace that puts the crypto boom to shame. Because, well, that’s the job.

Katie Balevic (via Hacker News):

Tech companies are spending big on the AI craze, but it will be a while before they have much — if anything — to show for it.

As companies prepare to spend over $1 trillion on artificial intelligence, a Goldman Sachs report examined the big question at hand: “Will this large spend ever pay off?”

That sizable investment will go toward the data centers needed to run AI, the power grid, and AI chips. But shortages of those AI ingredients could lead to disappointing returns for companies.

The report is here.

Edward Zitron:

The report covers AI’s productivity benefits (which Goldman remarks are likely limited), AI’s returns (which are likely to be significantly more limited than anticipated), and AI’s power demands (which are likely so significant that utility companies will have to spend nearly 40% more in the next three years to keep up with the demand from hyperscalers like Google and Microsoft).

[…]

The report includes an interview with economist Daron Acemoglu of MIT (page 4), an Institute Professor who published a paper back in May called “The Simple Macroeconomics of AI” that argued that “the upside to US productivity and, consequently, GDP growth from generative AI will likely prove much more limited than many forecasters expect.” A month has only made Acemoglu more pessimistic, declaring that “truly transformative changes won’t happen quickly and few – if any – will likely occur within the next 10 years,” and that generative AI’s ability to affect global productivity is low because “many of the tasks that humans currently perform…are multi-faceted and require real-world interaction, which AI won’t be able to materially improve anytime soon.”

Dare Obasanjo:

This is a great article from Sequoia which argues the tech industry needs $600B in AI revenue to justify the money spent on GPUs and data centers.

OpenAI is the biggest AI pure play and is at $3.4B ARR. This feels like a bubble unless products worth buying show up.

There is no doubt that there will be a lot of money made from AI. The question is whether it will be enough to support a $3T valuation for Nvidia?

Hemant Mohapatra (Thread Reader, via Hacker News):

So now that Nvidia has far outstripped the market cap of AMD and Intel, I thought this would be a fun story to tell. I spent 6+yrs @ AMD engg in mid to late 2000s helping design the CPU/APU/GPUs that we see today. Back then it was unimaginable for AMD to beat Intel in market-cap (we did in 2020!) and for Nvidia to beat both! In fact, AMD almost bought Nvidia but Jensen wasn’t ready to sell unless he replace Hector Ruiz of AMD as the CEO of the joint company. The world would have looked very different had that happened. Here’s the inside scoop of how & why AMD saw the GPU oppty, lost it, and then won it back in the backdrop of Nvidia’s far more insane trajectory, & lessons I still carry from those heady days[…]

Update (2024-07-15): See also: Hacker News.

Update (2024-07-29): Mike Cook:

The bigger stat for me: 96% of execs surveyed believed AI would lead to efficiency gains, but 77% of workers say they’re now less productive, and 47% say the targeted productivity gains are impossible.

Here’s a link to the research itself.

Victor Tangermann (Hacker News):

An increasing number of Silicon Valley investors and Wall Street analysts are starting to ring the alarm bells over the countless billions of dollars being invested in AI, an overconfidence they warn could result in a massive bubble.

Update (2024-08-09): Edward Zitron:

August 2, 2024 was Black Friday for the artificial intelligence boom, as a week of rough earnings from Big Tech led to what felt like the entire media industry to ask: is the AI bubble popping?

Google Maps Is Killing Timeline for Web

Emma Roth:

Google Maps is changing the way it handles your location data. Instead of backing up your data to the cloud, Google will soon store it locally on your device.

In an email sent to users, Google says you have until December 1st to save all your travels to your mobile device before it starts deleting your old data. Timeline — previously known as Location History — is the feature that tracks your routes and trips based on your phone’s location, allowing you to revisit all the places you’ve been in the past.

But now, instead of tying all of this information to your Google account, the company will link it to the devices you use.

Mahmoud Itani (via Hacker News):

Through a dedicated button on the updated app, you’ll then be able to migrate your existing location history to the on-device database. If you take no action and miss the deadline, Google could purge some or all of your location history when it sunsets Timeline’s web access.

To help users retain their data in the long run, Google Maps has also introduced a new backup feature for Timeline. Users can rely on it to save encrypted copies of their location history on Google’s servers. They can then restore these backups in the Google Maps app when they switch to a new phone.

Pieter Arntz:

As I pointed out years ago, Location History allowed me to “spy” on my wife’s whereabouts without having to install anything on her phone. After some digging, I learned that my Google account was added to my wife’s phone’s accounts when I logged in on the Play Store on her phone. The extra account this created on her phone was not removed when I logged out after noticing the tracking issue.

That issue should be solved by implementing this new policy. (Let’s remember, though, that this is an issue that Google formerly considered a feature rather than a problem.)

Previously:

Tuesday, July 9, 2024

iOS 18: Vehicle Motion Cues

Tim Hardwick:

According to Apple, research shows that motion sickness is commonly caused by a sensory conflict between what a person sees and what they feel, which can prevent some users from comfortably using iPhone or iPad while riding in a moving vehicle.

Vehicle Motion Cues are designed to avoid this sensory conflict with the use of visual elements on the display that indicate real-time changes in motion.

[…]

If you turned on the feature, you should now see the motion cues – roving little dots – around the edges of your iPhone or iPad screen.

I wonder whether this also applies to the CarPlay display.

Previously:

Update (2024-09-19): Rebecca Owen:

I was curious how these #iOS18 vehicle motion cues looked - here’s an example I recorded going across a roundabout. I only have occasional issues with motion sickness so I can’t really comment on whether it works, but it seems worth a try.

CarPlay at WWDC24

Casper Kessels (April 2024, via Hacker News):

The first version of CarPlay has been available since 2016 and has been a major success. For car industry standards, it was adopted quickly and by almost every carmaker. But since then, the car industry has been changing while the design and functionality of CarPlay have mostly stayed the same.

With lower hardware cost and an increased focus on software, carmakers have invested more in their interiors to set themselves apart. Google jumped on this opportunity by releasing Android Automotive. Unlike Android Auto, Google’s equivalent to Apple CarPlay, Android Automotive runs natively inside the car and any carmaker is free to use it. Google monetizes it by licensing its ‘Google Automotive Services’ to carmakers. This gives carmakers access to Google’s services like Google Maps, Waze, the Play Store, and Google Assistant.

[…]

Thanks to a deep integration with the software stack of the vehicle, CarPlay 2 can control most infotainment functions. It can therefore take over the entire infotainment display, the instrument cluster, and any passenger displays. For customers, it will appear like CarPlay works exactly in the same way but underneath, a lot of custom work is necessary by the carmaker and Apple to integrate. For example, even though most of the computing power still comes from the iPhone, there will be some software engineering necessary on the carmakers’ hardware to ensure that safety-critical information like speed doesn’t disappear when the iPhone crashes.

Apple is fully dependent on the carmaker’s willingness to work with them to implement this. This is why the WWDC keynote was clearly a pitch aimed at carmakers, not consumers. But so far, on the surface, it seems like carmakers have not been eager to implement the new version.

Dave Mark (May 2024):

GM dumped CarPlay. This Bloomberg piece digs into the why and the what of it all.

Lots of great bits here, including what the “Ultifi” (GM’s CarPlay replacement) experience is like.

Spoiler: It’s not pretty.

The CarPlay vs Android Auto vs Android Automotive saga is incredibly important to Apple, and GM is on the front lines.

Malcolm Owen:

The entire situation was an attempt by GM to create its own software team to make a better dashboard experience than CarPlay. One that it could control directly, and potentially capitalize on instead of relying on Apple’s software.

Apple was a threat to become “the iOS of the vehicle,” said GM SVP of strategy and innovation Alan Wexler. “It’s a physical vehicle, but it’s an iPhone you’re driving.”

GM was fine with CarPlay offering entertainment, but balked at Apple’s intention to control more of a vehicle’s functions. Achieving that would mean Apple had more control over how GM could earn digital revenue from its customers.

I don’t want CarPlay taking over the vehicle’s functions any more than I want the vehicle blocking me from using my iPhone for maps and entertainment.

WWDC Session 10112:

Explore the design system at the heart of the next generation of CarPlay that allows each automaker to express their vehicle’s character and brand. Learn how gauges, layouts, dynamic content, and more are deeply customizable and adaptable, allowing you to express your own design philosophy and create an iconic, tailored look. This session is intended for automakers, system developers, and anyone designing a system that supports the next generation of CarPlay.

Khaos Tian:

This explains why next generation CarPlay is never going to happen 😛

No auto manufacturer is going to build their car UI twice just for iPhone…

And this shows why HI shouldn’t do car instrument cluster design 😅

Nilay Patel (Threads):

The result is an approach to CarPlay that’s much less “Apple runs your car” and much more “Apple built a design toolkit for automakers to use however they want.”

[…]

But if you want to integrate things like speedometers and climate controls, CarPlay needs to actually collect data from your car, display it in real time, and be able to control various features like HVAC directly. So, for next-gen CarPlay, Apple’s split things into what it calls “layers,” some of which run on your iPhone while others run locally on the car so they don’t break if your phone disconnects. And phone disconnects are going to be an issue because next-generation CarPlay only supports wireless connections. “The stability and performance of the wireless connection are essential,” Apple’s Tanya Kancheva says while talking about the next-gen architecture. Given that CarPlay connectivity issues are still the most common issue in new cars and wireless made it worse, that’s something Apple needs to keep an eye on.

[…]

Apple’s example here is a vision of multiple colliding interface ideas all at once: a button in CarPlay to control massage seats that can either show native CarPlay controls or simply drop you into the car’s own interface.

Joe Rosensteel (Mastodon):

The two 2024 videos are basically sales pitches and explainers for the vague 2022 announcement. A lot of extra work has happened in two years, but … will anything ever ship with what they keep teasing?

[…]

Ironically car makers are teased with a level of customization that has never appeared on an Apple product in this century, but it’s when working in conjunction with Apple designers, and you apparently have to use the San Francisco family of typefaces? Wild proposition.

[…]

Setting aside the highly polarizing topic of what should be a physical button, and what should be on a screen, there’s no reason to do all the screen work twice. Especially not if it adds to customer confusion over their vehicle controls when their phone isn’t connected to the vehicle.

[…]

In my humble opinion, Next-Gen CarPlay is dead on arrival. Too late, too complicated, and it doesn’t solve the needs of automakers or customers.

Joe Rossignol:

iOS 18 adds contact photos next to names in the Messages app, making it easier to identify conversations at a glance.

[…]

In the Settings app, you can now choose to have Silent mode on your iPhone automatically turn on or off when the device is connected to CarPlay.

[…]

Voice Control is another new accessibility feature that allows you to control CarPlay entirely with Siri voice commands through a connected iPhone.

But will it be able to display the full title of the song that’s playing?

See also: Accidental Tech Podcast.

Previously:

Update (2024-07-23): Hartley Charlton:

Electric automaker Rivian has no plans to introduce support for Apple CarPlay in its vehicles, founder and CEO RJ Scaringe says.

The company’s stance was explained in a recent interview with The Verge’s Nilay Patel on the “Decoder” podcast. Scaringe emphasized that Rivian’s desire to create a seamless and well-integrated digital experience is the primary reason for not adopting CarPlay . He likened the decision to Apple choosing to develop iOS and macOS instead of using Microsoft’s Windows operating system, stating, “There is a reason that ironically is very consistent with Apple ethos for us to want to control the ecosystem.”

Mac App Impersonation

Jérôme Segura (via Ric Ford):

On June 24, we observed a new campaign distributing a stealer targeting Mac users via malicious Google ads for the Arc browser. This is the second time in the past couple of months where we see Arc being used as a lure, certainly a sign of its popularity. It was previously used to drop a Windows RAT, also via Google ads.

The macOS stealer being dropped in this latest campaign is actively being developed as an Atomic Stealer competitor, with a large part of its code base being the same as its predecessor. Malwarebytes was previously tracking this payload as OSX.RodStealer, in reference to its author, Rodrigo4. The threat actor rebranded the new project ‘Poseidon’ and added a few new features such as looting VPN configurations.

Kseniia Yamburh (via Ric Ford):

As malware researchers in Moonlock, the cybersecurity division of MacPaw, we are always on the lookout for new samples to analyze and protect our users from. One day, we came across a sample with the name CleanMyMac, which caught our attention. However, this sample was not the genuine CleanMyMac, but a malicious impersonation.

We decided to investigate this campaign further and uncovered many more samples with different malware inside, such as Atomic Stealer, PSW Stealer, and AdLoad Adware. These malware can steal users’ passwords and personal data and display unwanted ads on their Macs.

Howard Oakley:

There is a problem common to all products that try to detect malicious software, in false positives. Over the 20 months or so since XProtect Remediator went live, several of its scanning modules have reported what appear to be false positives.

[…]

To our disappointment, Apple Support didn’t appear concerned, and told them that such events don’t get reported to the user unless there’s something that the user needs to do. They were then pointed at a discussion on Apple Support Communities, where the “Best reply” may be familiar to some of you.

[…]

This immediately reveals that the respondent is unable to draw the distinction between ‘classic’ XProtect, the part of Gatekeeper that performs checks on executable code before it’s run, and the newer XProtect Remediator, which scans for telltale signs of malicious software when your Mac isn’t in use.

Previously:

Update (2024-07-19): Jérôme Segura:

We were able to reliably search for and see the same malicious ad for Microsoft Teams which was likely paid for by a compromised Google ad account.

[…]

Once the downloaded file MicrosoftTeams_v.(xx).dmg is mounted, users are instructed to open it via a right click in order to bypass Apple’s built-in protection mechanism for unsigned installers.

Google search is unlikely to take you to a fake app because popular apps have good PageRanks; just don’t click on an ad.

Stack Overflow Links Pushing Malware

Lawrence Abrams (via Hacker News):

Cybercriminals are abusing Stack Overflow in an interesting approach to spreading malware—answering users’ questions by promoting a malicious PyPi package that installs Windows information-stealing malware.

[…]

This PyPi package is named ‘pytoileur’ and was uploaded by threat actors to the PyPi repository over the weekend, claiming it was an API management tool. Notice how the package has the “Cool package” string in the Summary metadata field, indicating it is part of this ongoing campaign.

Previously:

Monday, July 8, 2024

Apple Intelligence for Siri in Spring 2025

William Gallagher:

While many Apple Intelligence features will roll out with iOS 18 during the remainder of 2024, its much-awaited revamp of Siri will wait until iOS 18.4 in 2025.

[…]

Before then, there will be a new design to Siri. That will presumably include how Apple has shown that invoking Siri will bring a flare around the edges of the iPhone screen, instead of the current circle icon.

This is a rumor, but, if true, it’s the first time I can recall a key part of the WWDC announcements being so quickly pushed so far back in the release cycle.

It’s also interesting that the new engine is not tied to the new user interface.

Hartley Charlton:

The more capable version of Siri allows the voice assistant to control actions within Apps, allowing it to understand what is currently on-screen and determine what to do based on context.

That all sounds good, but when are they going to fix the basics?

Previously:

Update (2024-07-09): John Gruber:

If the usual pattern holds, it’s a safe guess that iOS 18.4 will arrive in mid-to-late March.

If generative AI weren’t seen as essential — both in terms of consumer marketing and investor confidence — I think much, if not most, of what Apple unveiled in “Apple Intelligence” wouldn’t even have been announced until next year’s WWDC[…]

Update (2024-08-14): Filipe Espósito:

One thing that really struck me watching the latest Samsung and Google events is how they emphasize that their respective generative AIs already work in many countries and regions. Apple Intelligence is expected to remain available only in the US until next year.

Ivory 2.0

Niléane Dorffer:

Now, in the app’s redesigned Hashtags tab, you can create a list that contains up to four hashtags, and you can even exclude specific hashtags if you’re looking to fine-tune the resulting timeline.

[…]

The other big improvement in Ivory 2.0 is its redesigned share sheet extension for creating posts. It is now fully-featured, with the ability to set the post’s visibility and language, as well as an option to add alternative text descriptions to shared images and videos. When sharing a URL, the share sheet will now show a preview of the link card that will appear as part of your post.

With no way to turn off Universal Links, I still can’t use the Mac version because whenever I work on a document that includes a Mastodon link it will open in Ivory instead of in my browser.

Previously:

Signal for Mac’s “Encrypted” Database

Signal:

Storing messages outside of your active Signal device is not supported.

Messages are only stored locally.

An iTunes or iCloud backup does not contain any of your Signal message history.

This makes it private on iOS because other apps can’t access the message database. But the same design doesn’t work so well with the Mac version.

Mysk:

This is the folder structure of Signal’s local data on macOS. The encrypted database and encryption key are stored next to each other. The folder is accessible to any app running on the Mac.

Why didn’t they store the encryption key in the keychain?

Mysk:

The encryption key used to encrypt the local DB that contains all the secrets and chat history is stored in plain text in a location accessible by any app, process or script started by the Mac user.

It’s very tempting to use Signal’s desktop app. This is particularly useful for activists who can be more productive using a desktop than a mobile phone. Signal doesn’t make it clear that linking a desktop app can render Signal’s “gold standard” for encryption useless.

This seems like a much bigger deal than last week’s ChatGPT story.

Mysk:

I wrote a simple Python script that copies the directory of Signal’s local storage to another location (to mimic a malicious script or app)

[…]

Messages were either delivered to the Mac or to the VM. The iPhone received all messages. All of the three sessions were live and valid. Signal didn’t warn me of the existence of the third session [that I cloned]. Moreover, Signal on the iPhone still shows one linked device. This is particularly dangerous because any malicious script can do the same to seize a session.

Saagar Jha:

I think a lot of people have recently learned something that horrifies them. I do not fault them for that in the slightest. I just also want them to share my terror of this being standard best practice in the industry.

Previously:

Update (2024-07-09): Lawrence Abrams:

A mistake in the process used by the Signal Desktop application to encrypt locally stored messages leaves them wide open to an attacker.

He wrote this in 2018, and there are forum posts older than that referencing the issue. Curiously, a Signal developer offers the explanation that even though they are using an encrypted extension to SQLite and configured it to encrypt the database with a password, it was not their intention to protect the database with encryption:

The database key was never intended to be a secret. At-rest encryption is not something that Signal Desktop is currently trying to provide or has ever claimed to provide. Full-disk encryption can be enabled at the OS level on most desktop platforms.

I don’t understand what the reason was, then. And full-disk encryption is a solution to a different problem; it does not protect the data from other processes on the system.

Matt Henderson:

This is shocking for anyone considering Signal the gold standard in security.

Update (2024-07-15): Lawrence Abrams:

The response was unusual after Whittaker’s constant retweets about the security and privacy implications of Microsoft’s Windows Recall and how data could be stolen by local attackers or malware.

[…]

In April, an independent developer, Tom Plant, created a request to merge code that uses Electron’s SafeStorage API to further secure Signal’s data store from offline attacks.

[…]

While the solution would provide additional security for all Signal desktop users, the request lay dormant until last week’s X drama. Two days ago, a Signal developer finally replied that they implemented support for Electron’s safeStorage, which would be available soon in an upcoming Beta version.

Ben Lovejoy:

Using Keychain on Mac fully secures the encryption key, while the Windows solution could still potentially be compromised by some malware, but will be significantly safer than now.

Epic Games Store Temporarily Allowed

Epic Games:

Apple has informed us that our previously rejected Epic Games Store notarization submission has now been accepted.

Eric Slivka (Hacker News):

Apple today said it has approved the third-party Epic Games Store in the European Union, allowing the Fortnite developer to launch its alternative app marketplace in those countries, reports Reuters.

Is running to the EU the new running to the press?

Tim Sweeney:

Now about those 9 to 16 day TestFlight app approval delays…

App Review Guidelines:

5.2.5 Apple Products: Don’t create an app that appears confusingly similar to an existing Apple product, interface (e.g. Finder), app (such as the App Store, iTunes Store, or Messages) or advertising theme.

Malcolm Owen:

Epic had defended itself, insisting it used the same naming conventions employed across different platforms. Epic also said it followed standard conventions for buttons in iOS apps.

Tim Sweeney:

Apple is now telling reporters that this approval is temporary and are demanding we change the buttons in the next version - which would make our store less standard and harder to use.

We’ll fight this.

Matthew Connatser:

If Epic is representing Apple’s position accurately, this would be a very strange reason to reject a third-party storefront. It’s unclear why Epic needs to use significantly different language than is used in the App Store, not to mention that the online souk is just one of many storefronts in the digital world where the words “install” and “in-app purchases” are used.

Is Apple’s position that it’s “confusingly similar” if it says “Epic Games Store” in large friendly letters but the buttons have the same titles and colors as in the App Store? Or are they complaining about specific pixels in the design? If so, are Epic’s buttons on other platforms copyright infringements of the App Store?

Nick Heer:

As far as I know, there are no screenshots of the version of Epic Games’ store submitted to Apple. Maybe it is designed in a way that duplicates Apple’s App Store to the point where it is confusing, as Apple argues. […] Regardless, it seems like a bad idea for Apple to be using its moderate control over alternative app stores are distributed to litigate intellectual property disputes. Perhaps when trust in the company’s processes is healthier, it would be less objectionable. But right now? If Apple wants to give competition investigators more material, it appears to be succeeding.

John Gruber (Mastodon):

Epic is certainly under no obligation to reveal screenshots of its in-progress iOS games marketplace, but without screenshots, there’s also no reason for anyone to take their own description of the notarization dispute with Apple at face value. Epic Games is an unreliable narrator.

Well, the screenshots were submitted to the EU, and it would look really bad if Epic were found to be lying about this, so what would be the point? My recollection is that Epic has been accurate in its descriptions of its disputes with Apple, whereas Apple has a history of making misleading statements about Epic. Gruber started calling Epic an “unreliable narrator” after Epic claimed that Apple was going to punish its customers who had used “Sign In with Apple.” However, documents from court filings later showed that his sources were wrong and Epic’s version of story and timeline were correct.

Previously:

Update (2024-07-15): See also: ArsTechnica (Hacker News).

Friday, July 5, 2024

Dynamic Type on the Web

Craig Hockenberry:

This site now supports Dynamic Type on iOS and iPadOS. If you go to System Settings on your iPhone or iPad, and change the setting for Display & Brightness > Text Size, you’ll see the change reflected on this website.

This is a big win for accessibility: many folks make this adjustment on their device to match their abilities. Just because you can read a tiny font doesn’t mean that I can. It also is a win for consistency: my site’s font size matches the other text that a visitor sees on their device.

The best part is that this improvement can be realized with only a few lines of CSS:

html {
  font-size: 0.9em;
  font: -apple-system-body;
  font-family: "Avenir Next", "Helvetica Neue", sans-serif;
}

Note that his site gets the system sizing but does not have to use the system font.

Previously:

Update (2024-07-08): Jeff Johnson:

The text is kind of small on the Mac.

Craig Hockenberry:

That’s macOS setting a default value that’s too small. (And I cover some mitigation in the post.)

Craig Hockenberry:

I’d like it to be higher. But doing so punishes people on mobile devices who aren’t using Safari. This is what it looks like on Android.

I’m not holding out on this being a standard outside the Apple ecosystem because AFAIK there isn’t a notion of Dynamic Type on other platforms.

The failing here is Apple not implementing it on all of their platforms.

Sequoia Removes Gatekeeper Contextual Menu Override

Jason Snell:

Here’s a thing I noticed today. macOS Sequoia changes how non-notarized apps are handled on first launch. I couldn’t override by doing the control-click > Open > yes really Open dance. Instead, I had to go to the Settings app, to the Security screen, and click there to allow it to open. At which point it asked me AGAIN if I wanted to open it, and then had to put in my password!

I get the impulse about making it harder to socially engineer bad apps from opening, but… this is ridiculous.

Apparently, after the first time of going through System Settings, you can just use the contextual menu like before. But who’s going to figure this out on their own? It’s another take on security through obscurity.

With Mac notarization increasingly difficult to bypass, it becomes even more important that Apple not add a human element to it, like with iOS, where it could be weaponized to “review” apps that aren’t in the Mac App Store.

Meanwhile, the more pressing concern for me is that a significant number of my customers continue to encounter the Gatekeeper bug where it refuses to launch (notarized!) apps because it incorrectly reports them as damaged. The Control-click bypass never worked in this case. I don’t know how to reproduce the bug except that it seems to be related to downloading a new version of an app that had previously been installed.

Jeff Johnson:

Apple keeps twisting the screw to lock down the Mac.

Previously:

Update (2024-07-08): See also: Hacker News.

Update (2024-08-08): Apple:

In macOS Sequoia, users will no longer be able to Control-click to override Gatekeeper when opening software that isn’t signed correctly or notarized. They’ll need to visit System Settings > Privacy & Security to review security information for software before allowing it to run.

Jeff Johnson:

It’s gotten worse since the first macOS 15 beta:

In the first beta, once you allowed the first app to open in System Settings, subsequent apps could be allowed to open via the contextual menu.

In the latest beta, the rules don’t change, and you can never allow apps to open via the contextual menu, only in System Settings.

Nick Heer:

This is one of those little things which will go unnoticed by most users, but will become a thorn in the side of anyone who relies on it. These are likely developers and other people who are more technologically literate placed in the position of increasingly fighting with the tools they use to get things done. It may be a small thing, but small things add up.

Dominik Wagner:

The end of non-notarized software for regular users seems nigh.

John Gruber (Mastodon):

I mean, if there are exploits running wild because unsophisticated Mac users are Control-clicking malware apps they’ve somehow downloaded, where are they? I can only see two possible explanations for these changes: (a) these decisions that are making MacOS increasingly annoying for expert and power users are being made by cover-your-ass bureaucrats for no good reason, and no one who knows better is shooting them down within Apple; or (b) there’s a serious rash of unreported abuse of these features and Apple is too timid to publicize them to justify the increased frequency and arduousness of these permission nags, lest they admit the Mac has any problems at all.

See also: MacRumors, AppleInsider, and Hacker News.

Previously:

Update (2024-08-13): Howard Oakley (tweet):

As there’s some confusion as to exactly what’s going on, this article explains how this should work, and what benefits notarization brings in return for this added inconvenience.

Previously:

Update (2024-08-14): Arin Waichulis:

Malware authors are more clever than ever. One of the latest trends is cloning real applications, often productivity apps like Notion or Slack, and injecting malware somewhere in the code. Authors then create install screens like the one below, instructing the user to right-click and open the malware to get around Gatekeeper. The crazy part is that sometimes users will go on to use these applications for quite some time and never know their system has been infected. Persistence is key for cybercriminals.

I don’t understand how making the override more difficult solves the problem of the user being tricked by a fake app.

Update (2024-09-20): Jason Snell:

Once again, I don’t doubt that unsigned apps are a vector for malware and scamware and that Apple has the best intentions in trying to prevent people from launching them unawares. But this new approach, which involves nearly a half-dozen steps, goes way too far. It crosses a line, I think, between Apple trying to protect the user and Apple aggressively trying to poison any app that would defy its notarization scheme.

Apple has promised to let you run any software you want on your Mac, but it never promised it wouldn’t make the process painful, I guess. I don’t like it. This is just too much.

Update (2024-10-01): Howard Oakley:

When an app is being launched for the first time on that Mac, if it has been put into quarantine with a quarantine extended attribute, Gatekeeper will check whether it has been notarized. If it has, then its launch will progress to further checks such as those of XProtect. If it hasn’t been notarized, then macOS will warn you of that, and halt its launch.

[…]

If you want to launch the app despite that warning, open Privacy & Security settings, where you can click the button to Open Anyway.

Update (2024-10-02): Sarah Reichelt (Mastodon):

The spctl command line utility used to allow full manual control of Gatekeeper. In macOS Sequoia, it has lost most of its power, but you can still use it to re-enable the Anywhere option in System Settings -> Privacy & Security -> Allow applications from using this command:

spctl --global-disable

[…]

As a developer, I realize that it is now virtually impossible to release any Mac apps without having a developer account.

Previously:

Epic Games Store Blocked via Notarization

Ben Lovejoy (Slashdot):

Epic Games has accused Apple of deliberately delaying its attempt to launch its own iOS games store in Europe, and has filed a further antitrust complaint with the EU.

Epic Games:

Apple has rejected our Epic Games Store notarization submission twice now, claiming the design and position of Epic’s “Install” button is too similar to Apple’s “Get” button and that our “In-app purchases” label is too similar to the App Store’s “In-App Purchases” label.

We are using the same “Install” and “In-app purchases” naming conventions that are used across popular app stores on multiple platforms, and are following standard conventions for buttons in iOS apps. We’re just trying to build a store that mobile users can easily understand, and the disclosure of in-app purchases is a regulatory best practice followed by all stores nowadays.

Apple’s rejection is arbitrary, obstructive, and in violation of the DMA, and we’ve shared our concerns with the European Commission.

Tim Sweeney:

Epic had supported notarization during Epic v Apple on the basis that Mac’s mandatory malware scanning could add value to iOS. Now it’s disheartening to see Apple twist its once-honest notarization process into another vector to manipulate and thwart competition.

[…]

Gatekeeper review of apps cannot possibly stand under the DMA when they misuse this power to delay competitors, dictate confusing or non-standard user interface designs to competitors, sherlock competitors by sharing pre-release app details with executives and internal teams competing with the app, and introduce potentially many-year delays to fair competition during appeals.

Tim Sweeney:

I can share that, at the top of the Epic Games Store screen that Apple rejected, is a big Epic Games Store logo displaying the text “Epic Games Store”.

Apple says users may confuse this screen with their App Store, whose screens don’t prominently identify itself through the App Store trademark or its logo as our store does.

Ernesto Monasterio:

While I might not agree with everything the EU is asking from Apple, the fact that they’re using notarization as a de facto review process burns all the goodwill I might have towards the folks at Cupertino.

Jeff Johnson:

Funny how Apple will follow the law in Russia and China but flout the law in the EU. Censorship? Fine, great! Sideloading? Hell no!

Previously:

Apple Removes VPN Apps From Russian App Store

William Gallagher (Mastodon):

Apple’s App Store team has been notifying VPN developers that their apps are being removed “per demand from Roskomnadzor.” This the state media watchdog that previously forced both Apple and Google to remove a political app backed by the leader of the country’s opposition.

According to the Moscow Times, the Roskomnadzor regulator based its demand on how the apps include “content that is illegal in Russia.” It also reports that this demand to remove mobile apps follows the regulator’s increasing blocking of VPN services.

Francisco Tolmasky:

Just like when Apple got rid of the HKlive app during the Hong Kong protests. Imagine if there was a way to install apps not through the AppStore. That way the AppStore couldn’t be exploited as a censorship tool by governments. But then Apple might not make every possible cent off the iPhone, so probably not worth it. It’s crazy that Apple is probably happier with Russia’s actions towards the AppStore than Europe’s. No public fit. No press release. Just quiet compliance.

I am seeing some pushback in the form of “What is Apple supposed to do? That’s the law in Russia!” This is a bizarre post-2007 mentality. No one asked “How is Microsoft going to stop Limewire?!” No one thought it was Microsoft’s responsibility to single-handedly defeat piracy. Apple went out of their way to make themselves the sole gatekeeper, thus making themselves a target for manipulation.

Miguel Arroz:

The problem is not Apple complying with foreign laws. They have to, and although that is not true here, in most instances it’s a good thing (I don’t want American companies bullying through European or Canadian laws, for example).

The problem is Apple building platforms that prevent users from violating the law if they so wish. And from the moment authoritarian governments know such a thing is possible, they will leverage it and eventually require it.

Francisco Tolmasky:

It is much harder to write a law requiring an existing open platform become closed. Russia could have theoretically mandated that Microsoft write a new version of Win95 that used a certificate system so apps could only be acquired through a new mandated app store, but… that’s kind of a stretch (and would require considerable imagination). Instead, Apple on their own created a button that can be used for censorship, allowing a gov to simply have to ask to press it.

One way to look at it is that Apple has created a situation where the path of least resistance, the easiest thing for them to do, is to just comply with whatever censorship request is asked of them. That is never a good thing. It’s similar to the argument for end-to-end encryption: you create a situation where it is incredibly difficult (impossible) to comply with a government request, because it is too dangerous to just leave it up to whether can effectively “challenge” the request.

Apple understands this with private messaging. They can do right by their customers and avoid getting involved in these political matters. It’s a win-win, but perhaps that’s only possible because iMessage is a loss leader. End-to-end encryption makes iPhones better, so Apple sells more hardware. But with the App Store and the services strategy, the incentives are not so aligned. There could be a nice decentralized system for getting software, as with the Mac and the Web. But the temptation is too great to mandate that all the roads converge on a single choke point so that they can put a tollbooth on it.

Luke Dormehl:

The apparent trouble with Russia’s secret police and spy agency came up in Walter Isaacson’s 2011 biography of Jobs. Isaacson wrote that Jobs “insisted on talking about” Trotsky, the Bolshevik leader exiled as an “enemy of the people.” Trotsky was later assassinated in Mexico under the orders of Soviet dictator Joseph Stalin.

“You don’t want to talk about Trotsky,” a KGB agent allegedly told Jobs. “Our historians have studied the situation, and we don’t believe he’s a great man anymore.”

Jobs ignored this advice, according to Isaacson. “When they got to the state university in Moscow to speak to computer students, Jobs began his speech by praising Trotsky,” he wrote.

Previously:

Update (2024-07-08): Matthew Connatser:

“We also know that Google has received similar requests from the Russian regulatory agency and has even notified some proxy services that they might face removal,” Roskomsvoboda claims. “However, it has not taken any action so far.”

Roskomsvoboda believes eight VPN apps are no longer available on the Russian App Store, including popular ones such as NordVPN, Proton, and Private Internet Access.

Update (2024-09-30): Iain Thomson:

Apple has pulled 60 VPNs from its App Store in Russia, according to research from anti-censorship org GreatFire.

[…]

Russia’s also not that keen on Apple anyway. Last year the Kremlin banned employees from owning an iPhone – not a problem for Putin, as he famously doesn’t use a mobile. Over the last couple of years Apple has also had to pay tens of millions of dollars in fines over its anticompetitive behavior.

Update (2024-10-02): John Gruber (Mastodon):

The correct criticism to target at Apple is that this is the best argument against the App Store as the sole distribution channel of software for iOS. VPN software is still available for the Mac in Russia, and, I presume, is still available via sideloading for Android phones. When you create a choke point, you can be choked.

DOJ Investigating Apple-Google Default Search Engine Deal

Hartley Charlton:

Apple’s deal with Google that makes it the default engine on Safari faces uncertainty as the U.S. Department of Justice’s antitrust lawsuit looms, The Information reports.

Chance Miller:

Google pays Apple upwards of $20 billion per year to retain that default status, something the Justice Department says hinders competition in the search engine industry. Notably, Apple is not named as a party in the lawsuit, but the case has led to testimonies from Apple executives such as Eddy Cue.

It seems to me that that the built-in choices of search engines and the inability for users to add custom ones are much bigger deals than which one is the default.

Previously:

Bruce Bastian, RIP

Thomas Claburn:

Bastian helped create the word processing application that became WordPerfect while still a graduate student at Brigham Young University, working with Alan Ashton, his computer science professor.

They formed Satellite Software International (SSI) in 1979 and released an initial version of the software in March 1980 under the name SSI*WP for the Data General minicomputer. It cost $5,500 at the time, according to W. E. Pete Peterson, who wrote a history of the WordPerfect Corporation in the book Almost Perfect.

[…]

Microsoft Windows also debuted in 1985 and its rapid adoption in the years that followed meant WordPerfect had to compete on a new platform. By July 1991, WordPerfect’s share had started to slip and within a few years, Windows and Word had taken over.

[…]

As The Washington Post noted at the time, WordPerfect lost significant market share during the first half of the 1990s due to Microsoft’s strategy of bundling its Word application with other office software and selling them as a suite of applications.

There was a period in the mid-90s when WordPerfect was my favorite Mac word processor. It was not particularly Mac-like; it just worked really well. At the time, one of my issues with Microsoft Word was that the formatting would get all screwed up, and it was really hard to debug it. You couldn’t see which styling and spacing commands were attached to which bits of text. Most of the time, the problem was within a run of whitespace, so everything was invisible and it wasn’t clear where to click. Sometimes you’d have to just delete the whole section and start over. WordPerfect had a mode where you could show all the formatting codes. You could see—and edit—them like pseudo–HTML tags mixed in with the text. This made it easy to see exactly where to put the insertion point. You could even put it between “tags” and start typing to separate two regions that would seem glued together when Reveal Codes was off.

Michael S. Rosenwald:

Highly customizable, with a free customer support line, WordPerfect emerged from a crowded market of upstart word processors as the go-to choice of new personal computer users. (Among its fans was Philip Roth, who used it until he retired in 2012, long after the program was supplanted in popularity by Microsoft Word.)

Curtis Booker (via Hacker News):

Bastian stepped down from his role as chairman of WordPerfect in 1994 and the company was sold to Novell a short time later.

Bastian would go on to focus his time on charitable causes and philanthropy. In 1997, he started the B.W. Bastian Foundation, whose commitment is to only support organizations that fully embrace equality.

Previously:

Thursday, July 4, 2024

ChatGPT Privacy and Mac Sandbox Containers

Tim Hardwick:

OpenAI has issued an update to its ChatGPT app for Mac, after a developer discovered the app was locally storing users’ conversations with the chatbot in plain text.

Pedro José Pereira Vieito told The Verge’s Jay Peters: “I was curious about why OpenAI opted out of using the app sandbox protections and ended up checking where they stored the app data.”

It’s not clear why ChatGPT isn’t sandboxed. It could be that they just chose not to or that it’s relying on an API or functionality that doesn’t work in the sandbox.

As the developer of several non-sandboxed apps, it seems like the right thing to do is to make every app sandboxed, potentially with some extra entitlements that wouldn’t be allowed in the Mac App Store. In other words, run with only the permissions that the app actually needs. However, I have not seen much written about how to accomplish this sort of migration. It’s not always clear what private entitlements are needed or whether they even exist. What will break after migrating the app’s files into a container? What if the customer wants to go back to the previous version of the app? What if something changes in macOS or the sandbox such that the extra entitlements no longer do the job? Until recently, there have been a lot of potential headaches for little apparent benefit (protection against bugs in your app causing damage outside its container to files that it wasn’t intentionally given access to).

Nick Heer:

Virtually all media coverage — including Peters’ article — has focused on the “plain text” aspect. Surely, though, the real privacy and security risk identified in the ChatGPT app — such that there is any risk — was in storing its data outside the app’s sandbox in an unprotected location. This decision made it possible for apps without any special access privileges to read its data without throwing up a permissions dialog.

I’ve seen lots of quoting of Vieito’s statement that macOS 10.14 and later have blocked access to private user data, which I interpreted as saying that there are longstanding protections that ChatGPT should have taken advantage of. However, these protections only applied to certain built-in apps from Apple. With macOS Sonoma, Apple announced that macOS would prompt the user when accessing files inside another app’s container. Thus, while, historically, sandboxing app A would only restrict what A could do, now making A sandboxed could also protect it from app B (whether or not B is sandboxed). macOS Sequoia expands this protection to group containers.

I don’t think I ever saw one of these prompts, so I figured that Apple had at some point backtracked. And, after seeing the above discussion, I wrote a quick test app that accessed files in lots of sandboxed apps’ containers—without generating any prompts. Where’s the protection? The answer seems to be that only containers of newly installed apps are protected from other apps. If you had first installed the app prior to updating to Sonoma, other apps can access its data, same as always. But, with ChatGPT being a new app that requires macOS Sonoma, sandboxing would have offered the protections, such as they are, to everyone.

Miguel Arroz:

Mostly everything stores your data in plain text on your Mac. Data is protected via full disk encryption from anyone who steals your Mac, but not from other apps.

[…]

Everyone seems happy the latest update encrypts stored chats. Haven’t seen anyone asking the obvious, where’s the key? If the key is randomly generated and stored on the Mac’s keychain, I have bad news for you.

Jeff Johnson:

This seems like much ado about nothing. Very little app data on Mac is encrypted on disk at runtime.

Sandboxed apps (e.g., from Mac App Store) can’t access the data anyway. And if you’ve installed a non-sandboxed malware app on your Mac, then frankly you’re screwed no matter what. Non-sandboxed apps can get you in a million different ways. There’s no reliable protection. Be careful of what you install. Plus there are approximately infinity TCC privilege escalation bugs.

And, I think it’s rather easy for sandboxed apps to trick users into granting access that they didn’t intend.

Drew McCormack:

I think the local data storage is the least of your worries with these companies. All that data has to go to the cloud too. That is a much bigger risk IMO.

Joshua Nozzi:

I still don’t see the scandal specific to ChatGPT.

I don’t either. People should be more worried about their Chrome history, for example.

Previously:

Longstanding CocoaPods Vulnerabities

Brandon Vigliarolo:

CocoaPods, an open-source dependency manager used in over three million applications coded in Swift and Objective-C, left thousands of packages exposed and ready for takeover for nearly a decade – thereby creating opportunities for supply chain attacks on iOS and macOS apps, according to security researchers.

[…]

As noted above, the CocoaPods team has patched the issues – and appeared to do so months ago – though specifics weren’t widely known until EVA published its research today.

None of my apps use CocoaPods (or other package managers).

Reef Spektor and Eran Vaknin:

A 2014 migration process left thousands of orphaned packages (where the original owner is unknown), many of which are still widely used in other libraries. Using a public API and an email address that was available in the CocoaPods source code, an attacker could claim ownership over any of these packages, which would then allow the attacker to replace the original source code with their own malicious code.

An insecure email verification workflow could be exploited to run arbitrary code on the CocoaPods ‘Trunk’ server (manages the distribution and metadata of Podspecs), which would allow an attacker to manipulate or replace the packages being downloaded.

By spoofing an HTTP header and taking advantage of misconfigured email security tools, attackers could execute a zero-click attack that grants them access to a developer’s account verification token. This would allow attackers to change packages on the CocoaPods server and result in supply chain and zero day attacks.

Previously:

AirPods Fast Connect Vulnerability

Jonas Dreßler (via Hacker News):

There’s a security vulnerability (CVE-2024-27867) in the firmware of Apple AirPods. Anyone who knows the Bluetooth MAC address (which is somewhat public) can connect to your AirPods and listen to the microphone or play music.

[…]

Fast Connect is a proprietary and US-patented protocol by Apple that creatively uses the “ping” feature of the Bluetooth specification. Its main purpose seems to be reducing the time it takes to establish a connection between two Apple devices from roughly 1 second down to about 0.5 seconds.

[…]

Turns out that Apple (most likely) forgot to do some checks in the separate code paths that implement Fast Connect. Some very important ones: The AirPods forget to check the security level of the connection, i.e. “did the other side actually authenticate itself and turn on encryption?”

So anyone can connect to your AirPods and use the microphone to record your local environment, as well as engage in more creative mischief. This is fixed in a firmware update, but if your AirPods only connect to non-Apple devices you would need to go to an Apple Store to update the firmware.

Chrome’s Entrust Certificate Distrust

Chrome Security Team (via Jeff Johnson, Hacker News):

Over the past six years, we have observed a pattern of compliance failures, unmet improvement commitments, and the absence of tangible, measurable progress in response to publicly disclosed incident reports. When these factors are considered in aggregate and considered against the inherent risk each publicly-trusted CA poses to the Internet ecosystem, it is our opinion that Chrome’s continued trust in Entrust is no longer justified.

[…]

Blocking action will begin on approximately November 1, 2024, affecting certificates issued at that point or later.

Blocking action will occur in Versions of Chrome 127 and greater on Windows, macOS, ChromeOS, Android, and Linux. Apple policies prevent the Chrome Certificate Verifier and corresponding Chrome Root Store from being used on Chrome for iOS.

[…]

We recommend that affected website operators transition to a new publicly-trusted CA Owner as soon as reasonably possible.

Previously:

Translation API in iOS 18 and macOS Sequoia

Joe Rossignol:

In a WWDC 2024 coding video last week, Apple highlighted a recently-introduced API that allows developers to offer built-in Translate app capabilities in their own apps on iOS 17.4, iPadOS 17.4, macOS Sonoma, and later.

Apple:

Discover how you can translate text across different languages in your app using the new Translation framework. We’ll show you how to quickly display translations in the system UI, and how to translate larger batches of text for your app’s UI.

Sequoia still doesn’t bring the Translate app to the Mac, so I’m hoping someone will use this to make a standalone app so that I don’t need to read translations within a tiny popover.

Kyle Howells:

The new Translation API is such a massive disappointment.

It’s a purely SwiftUI API.

Even the programatic API to get back Strings from Strings (no UI) requires you to get a session object via SwiftUI to do so.

[…]

Really hope this isn’t a pattern Apple is going to use going forward in the future.

TranslationSession:

You don’t instantiate this class directly. Instead, you obtain an instance of it by adding a translationTask(_:action:) or translationTask(source:target:action:) function to the SwiftUI view containing the content you want to translate, such as a Text view. When you do, the function passes you an instance of a translation session in its action closure which triggers as soon as the view appears. After you receive this instance, use one of the translate functions to translate one or more strings of text.

Kyle Howells:

I wonder if these sort of horrible API designs are a consequence of Apple building features with SwiftUI natively now?

UIKit allows UI to be presented fairly freely from around your code, due to the view controller hierarchy being easily accessed.

SwiftUI needs an element anchored to a View to do anything.

If that’s true, eventually virtually all APIs will need to be invoked via a method on View and I’m going to really hate the next few years of Apple API releases.

Previously:

Update (2024-10-07): Danny Bolella:

Curiously, the manner in which Apple forces developers to use Translation is strikingly passive aggressive: it can be accessed by SwiftUI only. This has been confirmed by an Apple Engineer who suggests UIKit apps would need to host a SwiftUI View if it would like to access Translation.

[…]

There are strong implications and signals to take from all this, even if a translation feature doesn’t apply to you. In fact, it has some of the strongest messaging regarding Apple’s recent stance on UIKit and SwiftUI.

[…]

There’s no doubt that UIKit and AppKit are not to be deprecated any time soon (or ever). But Apple has made it abundantly clear the tide will eventually turn towards SwiftUI, and they will make it so.

[…]

Translation also offers a glimpse into how Apple wants developers to view the relationship between concurrency and SwiftUI. When we obtain a TranslationSession through the programmatic route, it’s done so through a translationTask and offers function calls that are all async.

Wednesday, July 3, 2024

Deleting Messages Attachments Everywhere

Ryan Jones:

Deleting any iMessage media from your device storage (i.e. Mac or iPhone) also deletes it from the cloud forever.

Even when:

  • Messages in the Cloud is On
  • Keep Messages is Forever
  • You’re in local storage management

Apple you gotta clarify these message boxes big time!

The other parts of System Settings ‣ General ‣ Storage are about freeing up local storage on your Mac, so you might think that deleting messages attachments would only delete them locally. This would be really useful because there’s no other obvious way of purging the device’s cache to free up space. The confirmation sheet reinforces this belief by showing an icon of a hard drive and telling you how much storage will be freed. Instead, what you’d think would just evict the files actually deletes them from the cloud and all devices.

This is not the first confusion of this kind: the Keep messages setting in Messages also looks like it might refer to the device, but it actually deletes the messages everywhere. You can have one device set to keep Forever, but it will not actually do that if another device is set to a shorter amount of time.

Previously:

Update (2024-07-04): John Gordon:

I’ve been playing with deleting individual messages in iMessage and seeing what happens on different clients. Wow. It’s kind of a mess. Definitely don’t assume a particular message is always deleted across all devices -- even if’s reported deleted everywhere.

Feature Requests for Death

Greg Pierce:

FB14170572: Add “Date Deceased” field to Contact records

Louie Mantia:

When I worked on iTunes, we briefly discussed inheriting purchased music, but we didn’t build anything for it. Product teams may never prioritize legacy-related features because they’re not glamorous. But a team separate from product design and development could develop a strategy for how a company tackles those issues, with specific proposals for different products.

In addition to birthdate, there should be a deceased date field in Contacts. That data can be used for both memorial purposes and to prevent Siri suggestions about making a posthumous birthday call. There should also be an easy way to archive threads with a deceased loved one in iMessage to preserve those memories. There should be a path to inherit iTunes purchases, even though there are legal differences between a CD and a digital album.

Craig Hockenberry:

Apple should establish a team that deals with the humanity of their products.

[…]

Apple should be awesome at preserving and respecting the memories contained in devices that are inextricably linked to our daily lives and the interactions with people we love.

Previously:

On the Origins of .DS_Store

Arno Gourdol (2006, via Lobsters):

However, we soon started realizing that the Finder backend would be useful outside of the Finder. Therefore, a plan was hatched to someday make it available as a public API. Since I had previously been responsible for naming Icon Services and Navigation Services, we decided to go with Desktop Services (at the time, we were also considering renaming the Finder to “Desktop”). Hence the name of the .DS_Store, for “Desktop Services Store”. We added a “.” in front of it so that it would be considered as an invisible file by Unix OS, including Mac OS.

[…]

There is also an unfortunate bug that is not fixed to this day that result in an excessive creation of .DS_Store file. Those files should only be created if the user actually makes adjustments to the view settings or set a manual location for icons in a folder. That’s unfortunately not what happens and visiting a folder pretty much guarantees that a .DS_Store file will get created.

With early versions of Mac OS X, the file handling APIs behaved very differently from the corresponding operations in Finder. For example, NSFileManager would discard metadata such as resource forks and Finder/Spotlight comments when copying a file, and there was no API (other than AppleScript) for apps to do the latter themselves. These particular issues were eventually fixed, but Desktop Services never became public, and there remains no API for much of the Finder backend or what’s in the .DS_Store files.

Previously:

Update (2024-07-04): See also: Hacker News.

Tuesday, July 2, 2024

Figma AI

Emanuel Maiberg (tweet, Hacker News):

The design tool Figma has disabled a newly launched AI-powered app design tool after a user showed that it was clearly copying Apple’s weather app.

Figma disabled the feature, named Make Design, after CEO and cofounder of Not Boring Software Andy Allen tweeted images showing that asking it to make a “weather app” produced several variations of apps that looked almost identical to Apple’s default weather app.

Gleb Sabirzyanov:

So there is no “training” in the components part at all. It uses pre-defined components that Figma team designed. They made complete apps with designs based on existing apps: weather, fitness, etc. If you ask the AI to create a weather app, it would use the weather app components.

It can’t modify components in any way other than changing texts, images and style. They only made the model fill the contents for existing pre-defined components.

John Gruber:

This is even more disgraceful than a human rip-off. Figma knows what they trained this thing on, and they know what it outputs.

Sebastiaan de With:

It just blows my mind how much companies keep self-owning because they think they risk anything being ‘too slow’ in adopting AI. All the fast AI implementations have been bad. Google answers. MS Recall. This Figma AI thing.

Take your time to do it right the first time.

Mitchell Bernstein:

No company, in their right mind, would ever let their employees unknowingly design proprietary ideas in @figma and send those to a server for others to recreate. […] I’ve heard mixed but I believe it’s by default opt in for free users and by default opt out for enterprises.

Nick Heer:

It is consistent to view this clear duplication of existing works through the same lens of morality as when A.I. tools duplicate articles and specific artists. I have not seen a good explanation for why any of these should be viewed differently from the others. There are compelling reasons for why it is okay to copy the works of others, just as there are similarly great arguments for why it is not.

Federico Viticci:

In other words, we’re concerned that, this time, technology won’t open up new opportunities for creative people on the web. We fear that it’ll destroy them.

We want to do something about this. And we’re starting with an open letter, embedded below, that we’re sending on behalf of MacStories, Inc. to U.S. Senators who have sponsored AI legislation as well as Italian members of the E.U.

Sebastiaan de With (Mastodon):

Some career designers were ambiguous about the impact on careers, but many went as far as to assert that designers had nothing to fear: AI, after all, could never replace your job. Unless you were terrible at it.

The problem with that, however, is that in our creative fields by definition, we are all terrible at our work at some point.

The way anyone has achieved success is through a slog. A long, steady swim upstream in a relentless and never-ending yet plentiful river of unpaid or cheap small jobs. I would wager the vast majority of design done every day are exactly these jobs.

Previously:

Update (2024-07-03): Jay Peters:

In a Tuesday interview with Figma CTO Kris Rasmussen, I asked him point blank if Make Designs was trained on Apple’s app designs. His response? He couldn’t say for sure. Figma was not responsible for training the AI models it used at all.

“We did no training as part of the generative AI features,” Rasmussen said. The features are “powered by off-the-shelf models and a bespoke design system that we commissioned, which appears to be the underlying issue.”

Out of their control, just like with Perplexity.

Field, in his own thread, said that the Make Designs feature “is not trained on Figma content, community files or app designs” and noted that “the accusations around data training in this tweet are false.” He said a problem with the company’s approach is that “variability is too low.”

[…]

The key AI models that power Make Designs are OpenAI’s GPT-4o and Amazon’s Titan Image Generator G1, according to Rasmussen. If it’s true that Figma didn’t train its AI tools but they’re spitting out Apple app lookalikes anyway, that could suggest that OpenAI or Amazon’s models were trained on Apple’s designs.

This seems to contradict what Sabirzyanov wrote (above).

Sarah Perez:

Figma CEO Dylan Field says the company will temporarily disable its “Make Design” AI feature that was said to be ripping off the designs of Apple’s own Weather app.

John Gruber:

Field is right to pull the feature but this explanation is sophistry. The feature is clearly fundamentally flawed. It’s not in need of a tweak. It’s in need of being completely scrapped.

Update (2024-07-09): Adam Engst:

I’m just not that bothered by all this. My overall opinions aren’t usually so divergent from my tech journalism peers, but since no one seems to be acknowledging that there are multiple sides to every issue, I want to explain why I’m largely unperturbed by AI and much of the hand-wringing that seems to permeate coverage of the field.

[…]

Many people seem to be worried that AI-generated content will “replace or diminish the source material from which it was created,” as the MacStories letter says. It’s unclear to me what would need to happen for this to be true, at least for genuinely original content. When I write about one of my tech experiences, the only place such a story can come from is my head. I fail to see how my creativity would be diminished by what others do.

[…]

Web publishing requires constantly creating new content—that’s what real people want to read, and while generative AI may make it somewhat quicker to do that, it’s not drastically different from how some websites hire low-paid workers in other countries to churn out unoriginal posts.

“Filter Unknown Senders” in Messages.app

Garrett Murray:

I had no idea the “filter unknown senders” setting for Messages did much more than it implies.

It actually creates a root-level menu that gives you several filter views that are very useful… why isn’t this enabled by default? The filters also properly respect your pins and such, and your chosen view is restored after relaunch.

For example, one of the views is for Unread Messages.

Monday, July 1, 2024

SpamSieve 3.0.5

SpamSieve 3.0.5 is a maintenance release for my Mac e-mail spam filter. It seems to work great with the current macOS Sequoia beta, though I expect another update will be required when Apple releases the AI-enabled beta of Mail later this summer. Unfortunately, Apple tends to make big changes to Mail through August, so we never quite know where we stand until the GM, and a couple times there were even significant changes after that.

Some interesting issues were:

  • Xcode 15 still has a bug where Swift apps crash at launch prior to macOS 14 when using a macOS 10.13 deployment target, in this case triggered by accessing libswiftNetwork.dylib, which SpamSieve is now using for reachability checks. I describe a workaround here.

  • Apple Mail’s support for Mail App Extensions continues to be unreliable, to the point where some customers are finding that it works best to turn off the extension entirely. This can avoid a bug where Mail ignores (and possibly even clears) the cached data for a message, leading to unnecessary redownloads and slowness. Mail already has issues with not sending all the new messages to the extension for filtering, and so SpamSieve already has workarounds to filter the new messages without needing the extension. Of course, things would smoother with extensions working properly, but my Radars and DTS incidents do not seem to have affected that over the last year.

  • Separate from the extension issues, SpamSieve is better at detecting when Mail is busy downloading messages, as during that time it can block the user interface and starve its other threads, so SpamSieve will back off its requests until Mail is less busy.

  • Xcode 16 has a regression where tests will fail to access the Contacts database and take a very long time as they wait for 8 failed attempts to contact the XPC server. It’s not clear how to give Xcode TCC access as it doesn’t prompt.

  • With Xcode 16, the responder chain no longer seems to work properly when running tests. I updated various toolbar validation and undo tests to use hard-coded targets.

  • NSString in macOS Sequoia is more strict about not accepting data that doesn’t conform to the specified encoding. Previously, it would make a “best effort,” but now it will just fail outright, which is probably a good thing.

  • Swift 6 doesn’t like my adding ExpressibleByUnicodeScalarLiteral to the FourCharCode type (since Apple owns it). The warning can be silenced using the @retroactive attribute, but that won’t compile with Xcode 15.

  • macOS Sequoia has made significant changes to how text is extracted from PDFs.

  • macOS Sequoia has changed the way Thai text is tokenized.

  • Core Data can crash when resolving uniqueness conflicts if the database file is damaged. This is not because SQLite is crashing, but rather that the corruption seems to be getting Core Data into a state that it didn’t expect.

  • SQLite UNIQUE constraints really cannot be relied upon. I’ve now seen multiple cases of duplicates (sometimes dozens of the same row) because the database was damaged and so the index enforcing the constraint didn’t work. Recovering such databases is not straightforward because building a new database will fail due to constraint violations.

  • I had only anticipated disk full errors to occur when saving a database, but they can also occur in other situations and get reported as NSFileReadUnknownError.

Previously:

Keyboard Shortcut for Contextual Menus in Sequoia

Nathan Manceaux-Panot:

Haven’t seen this mentioned yet: in macOS Sequoia, you can open a context menu by pressing ⌃⏎, for the current selection. Very nice—Windows has had this for ages!

The shortcut is Control-Return. I’m looking forward to this, since I’ve often made the selection using the keyboard and don’t want my fingers to leave it. With BBEdit, LaunchBar, and some other apps, I can already access menu commands from the keyboard, but this will hopefully work everywhere.

Previously:

Update (2024-07-03): Ken Case:

Wait, when did the Apple Style Guide change the terminology for “contextual menus” to “shortcut menus”?

Stainless Steel Battery Case in iPhone 16

Ming-Chi Kuo (tweet, via Hacker News):

Increasing the energy density of the battery cells will increase the battery temperature when running. To avoid overheating the battery, Apple uses the stainless steel battery case for the first time as a thermal solution.

Stainless steel is not as effective as aluminum in dissipating heat, but it is more robust and less susceptible to corrosion, so in addition to dissipating heat, the stainless steel battery case provides better protection for the battery and the iPhone system.

The use of a stainless steel battery case also reduces the difficulty of removing the battery, which will help Apple comply with the European Union’s requirements for mobile phone batteries’ replaceability in the future.

Previously:

Microsoft’s Suleyman on AI Scraping

Thomas Claburn:

Mustafa Suleyman, the CEO of Microsoft AI, said this week that machine-learning companies can scrape most content published online and use it to train neural networks because it’s essentially “freeware.”

Shortly afterwards the Center for Investigative Reporting sued OpenAI and its largest investor Microsoft “for using the nonprofit news organization’s content without permission or offering compensation.”

[…]

Asked in an interview with CNBC’s Andrew Ross Sorkin at the Aspen Ideas Festival whether AI companies have effectively stolen the world’s intellectual property, Suleyman acknowledged the controversy and attempted to draw a distinction between content people put online and content backed by corporate copyright holders.

“I think that with respect to content that is already on the open web, the social contract of that content since the 1990s has been it is fair use,” he opined. “Anyone can copy it, recreate with it, reproduce with it. That has been freeware, if you like. That’s been the understanding.”

He also refers to robots.txt as a “grey area” that will “work its way through the courts.”

Kali Hays:

OpenAI and Anthropic are two big names found to be ignoring robots.txt, put in place by news publishers to block their web content being freely scraped for AI training data, I learned today.

Sean Hollister (via Dan Moren, Hacker News):

I am not a lawyer, but even I can tell you that the moment you create a work, it’s automatically protected by copyright in the US. You don’t even need to apply for it, and you certainly don’t void your rights just by publishing it on the web. In fact, it’s so difficult to waive your rights that lawyers had to come up with special web licenses to help!

Fair use, meanwhile, is not granted by a “social contract” — it’s granted by a court. It’s a legal defense that allows some uses of copyrighted material once that court weighs what you’re copying, why, how much, and whether it’ll harm the copyright owner.

As Claburn notes, many people have “compromised their rights” by posting their content on social media sites.

I don’t think that training an AI to the point where it can reproduce an article is fair use any more than photocopying a whole book or using a camera to record a movie is. But, as a practical matter, it seems like the AI companies are going to keep scraping and no one is going to stop them, except for the big names that will make licensing deals.

Previously: