Archive for June 22, 2022

Wednesday, June 22, 2022

Limiting iMessage’s Disk Usage

Steve Troughton-Smith:

It blows my mind that Apple lets Messages-in-the-cloud suck up all the available local storage without giving you any real way to cap or reduce its size on disk without deleting the masters in iCloud. Can’t uninstall either. This is the real scam making 64GB iPads unworkable.

This bs is literally an OS upgrade blocker, would prevent you from getting security updates.

I ran into this recently as well. There are some controls in Settings to delete Top Conversations or Photos/Videos attachments, but those delete the content from Messages in iCloud, too. What if you just want to prune the local cache?

If you do decide to delete select attachments completely using Settings, I’ve found this to be buggy. After deleting some items, the list doesn’t refresh to show more, so you can’t delete any more even though there are still GBs on the phone.

Deleting from the Mac is also buggy. You can open a conversation’s info and bulk-select thumbnails—much easier than on an iPhone—but pressing Delete doesn’t actually bulk-delete them. It seems to only delete one attachment, and not always the first one selected.

The only reliable way that I’ve found to prune Message’s storage use is to set it to only Keep Messages for One Year. (It would be nice to be able to keep a bit more conversation history, but the only longer option is Forever.) Plain text messages, which take up very little space, get deleted, too, even though you really only wanted to free up space by deleting large attachments. And the messages are removed from the cloud and all devices, not just from the one that had limited storage.

What if you want to make a backup before deleting them from your iPhone—which will, via syncing, also delete them from your Mac? The Messages app has no export feature. There used to be a limited feature for automatically saving chat transcripts, but this was never in the iOS version, and Apple removed it from the Mac version when rewriting Messages using Catalyst.

Previously:

Update (2023-01-19): Nick Heer (Mastodon):

When I checked the iPad Storage menu, I saw the biggest source of my disk space problems: over 11 GB used by Messages.

This makes no sense. I do not often use Messages on my iPad. I have iCloud for Messages enabled, so my device should only be downloading messages and attachments as needed.

[…]

As written, this sounds like it is a way to control the cache of messages downloaded to your device. If “30 days” is selected, you should see only the past month’s worth of messages on your device and anything older than that will need to be downloaded on demand. But it is so much worse than that: because it syncs, it actually erases all messages in iCloud older than thirty days — permanently. This is the only warning you will get.

[…]

[There] are no controls for managing iCloud for Messages. There is no way to purge the local cache from one device without those changes syncing across all devices. The only way I was able to install this software update was to restore my iPad and set it up from scratch.

SwiftUI Scrolling Finally Works on tvOS

Daniel Saidi:

One example where SwiftUI ended up costing me both time and money, was the first tvOS project that I did on my newly started company.

[…]

Scrolling with HStack, VStack (and in SwiftUI 2), LazyHStack, LazyVStack, LazyHGrid, LazyVGrid just didn’t work. The scrolling was lagging so badly that the whole project was in jeopardy.

[…]

I finally solved this by wrapping a UIKit UIScrollView in SwiftUI, which I describe in this article. It was not ideal, but did let me ship the app with minimal changes to the overall architecture. The app was well received by the users and later ported to iOS and iPadOS, where SwiftUI did deliver on its promise and let me create these new apps quickly, building on the same foundation as the tvOS app.

Apple have never mentioned these problems or recognized them in my bug reports, but I eventually got confirmation during last year’s WWDC labs, that the problem does originate from the framework, and not from my code.

Previously:

iOS 16 Automatic Verification

Joe Rossignol:

Tapping on images of traffic lights or deciphering squiggly text to prove you are human will soon be a much less common nuisance for iPhone users, as iOS 16 introduces support for bypassing CAPTCHAs in supported apps and websites.

[…]

Apple recently shared a video with technical details about how the feature works, but simply put, Apple’s system verifies that the device and Apple ID account are in good standing and presents what is called a Private Access Token to the app or website.

John Gruber:

Color me more optimistic today than yesterday: two of the draft spec’s authors are from Google, so maybe they will go all-in for this.

Matt Birchler:

Something I didn't know for a while, but is a thing, is that reCAPTCHA v2 and v3 are completely different, and v3 tries to have a frictionless setup as well.

Previously:

Broken Renewal of MAS Receipts

Lukas Kubanek (FB9789052, tweet):

I started integrating on-device App Store receipt validation into my Mac app, currently not utilizing StoreKit for any kind of in-app purchases. I followed the documentation and employed a check that calls exit(173) if the receipt is invalid. According to the documentation, this should trigger a renewal of the receipt. When I launch the app from Xcode’s build folder for the first time, I get correctly presented with the App Store login window. After entering credentials of a sandbox user configured in App Store Connect, the app quits, relaunches, and then the following dialog appears:

“MyApp” is damaged and can’t be opened. Delete “MyApp” and download it again from the App Store.

This has been broken since around the release of Monterey. This makes it impossible to test the Mac App Store builds of my apps before submitting them to the store. Fortunately, my receipt validation code is already written and working reliably, because I don’t know how I could fully test it without being able to download a receipt.

The mentioned issue doesn’t only occur in the sandbox but also for production apps. When removing the _MASReceipt folder from the production app, it’s supposed to renew the receipt when launched. Instead, the same dialog informing about the damaged app is shown, and the app has to be re-downloaded entirely from the Mac App Store.

Previously:

Update (2022-06-27): Oddly, Apple seems to have fixed the longstanding problem the next day.