Archive for November 2022

Wednesday, November 30, 2022

Recovery Options on Apple Silicon Macs

Howard Oakley:

When pressed briefly, it starts the Mac up in normal macOS mode; when pressed and held until the Mac reports that it’s loading Recovery Options, it engages Recovery mode, where you navigate startup and other options using buttons and menus. These invariably work fully with Apple’s wireless keyboards and mice/trackpads, so there’s no need to connect them with their charging leads.

There’s also a Fallback Recovery Mode engaged by pressing the Power button twice in rapid succession, and on the second press, instead of releasing the button, hold it pressed until recovery options are reported as loading. This provides all the features of regular Recovery Mode, with the exception of Startup Security Utility, which isn’t available.

Apple:

Follow these instructions if you need to pair a Bluetooth keyboard, trackpad, or mouse with your Mac when you start up in macOS Recovery.

[…]

When the system volume and the Options button appear, press the power button three times.

The procedure for rebooting in safe mode has also changed:

Turn on your Mac and continue to press and hold the power button until you see the startup options window.

Select your startup disk, then press and hold the Shift key while clicking “Continue in Safe Mode.”

I didn’t realize this and had just been holding down the Shift key like normal, but I guess that doesn’t clean out caches anymore, though it does suppress login items.

Previously:

SwiftUI Performance Gotchas

Alin Panaitiu (Hacker News):

[LazyHGrid] container is lazy so it takes more time get the view rendered because SwiftUI has to check if each row is visible before rendering it.

[…]

What looks unusual is the huge number of updates on my custom views. Some updates also take 5ms or more which when called on the main thread, will block any UI rendering and animations.

[…]

In the following example, I needed a way to highlight the selected day, but passing selected as @State wouldn’t propagate through the view graph. So I made it a binding, which caused all the DayViews to update when selecting another day (instead of just the two days that actually changed)[…] The solution I found for this was to turn the Binding back into a State and manually add an .id() to the DayView that factors in the selected property.

[…]

Two months later, after exhausting all the optimization possibilities, the app finally felt usable. […] I’m not entirely sure if there’s still a lot of performance left on the table for the SwiftUI engineers, but it kinda looks that way from my side. There are some places where the framework seems to be doing a lot of unnecessary work.

Previously:

Update (2023-08-28): Tony Arnold:

My own experience with #SwiftUI on #macOS reflects this author’s experience.

#SwiftUI is easy to build with, but it’s really hard to get it to be performant. There are lots of places where I’m not sure how I would have fixed the performance of UI elements, Lists, etc without knowing how #AppKit works.

New Social Media Platforms

Jamie Zawinski:

If posts in a social media app do not have URLs that can be linked to and viewed in an unauthenticated browser, or if there is no way to make a new post from a browser, then that program is not a part of the World Wide Web in any meaningful way.

[…]

Hive Social is exactly this app-only experience. […] Post Dot News also seems absolutely vile.

[…]

Mastodon is kind of a mess right now, and maybe it will not turn out to be what you or I are looking for. But to its credit, interoperability is at its core, rather than being something that the VCs will just take away when it no longer serves their growth or onboarding projections.

John Brayton:

A few days ago Phil Gyford launched ooh.directory, a collection of blogs with RSS feeds.

Craig Grannell:

But get over this hurdle and it turns out Mastodon is easy. Well, easyish.

Previously:

Epic v. Apple Appellate Hearing

Florian Mueller:

This is the DOJ’s motion, which already states very specifically what aspects of the case the Biden Administration will address (every single one of which weighs in favor of at least a partial reversal of the district court’s judgment).

[…]

One of the issues that the DOJ is also going to raise at the hearing is whether there can be an antitrust market for a product that is not sold separately--such as iOS, which Apple doesn’t license separately (the only way to get a license is to buy an iPhone or iPad). Regardless of Apple’s licensing practice, there obviously is a market for smartphone operating systems in which iOS competes with Android. Apple’s own lawyers surprisingly blundered as they conceded that fact. The smartphone OS market is the foremarket part of Epic’s proposed single-brand market definition. There is competition in that one, but not in the iOS app distribution and iOS in-app payment processing aftermarkets.

Juli Clover:

The ongoing legal battle between Apple and Epic Games resumed today, with lawyers for both companies meeting in the United States Court of Appeals to attempt to get the initial ruling from last year overturned.

Kyle Orland:

If the Mac App Store was the equivalent of a lap belt, the iOS App Store, with its costly human review system, is “a six-point racing harness,” Perry said. “It’s safer. They’re both safe, but it’s safer.” […] Those kinds of “pro-competitive” security features Apple offers with its App Store restrictions legally outweigh the “minor anti-competitive effects” iOS app developers face on the platform, Perry said.

[…]

By way of example, Goldstein brought up a potential Disney App Store on iOS that could provide even greater protections for families when it comes to potentially objectionable content. Competing iOS App Stores could also provide cheaper prices, Goldstein said, by competing on Apple’s 30 percent fees.

Blocking those kinds of alternative methods for app downloads creates a kind of circular definition of “product differentiation” for the iPhone, Goldstein said. He sardonically summed up Apple’s argument: “I have a better product. You know what makes my product better? That I have no competition! … You can’t block horizontal competition [among iOS App Stores] and then use as your excuse that I am now going to offer a product that is differentiated by the fact that it has no competition!”

Florian Mueller:

Circuit Judge Smith has a more systematic approach (as do I) and stressed that antitrust analysis begins with market definition, and everything depends on it. And just like me, he feels that if the appeals court reverses Judge Yvonne Gonzalez Rogers on that part, there should be a remand, though it appears that the Ninth Circuit is perfectly prepared to do more than the bare minimum and to provide further clarity and instructions. I, frankly, think Epic should be grateful for that. It’s nothing to be taken for granted; quite often, appellate judges are minimalists and just kick the ball back into the lower court. I understand why Epic’s counsel said that in this event, things would just take longer and they’d be meeting again in the same appeals court in two years from now. They don’t want it; they want a solution as quickly as possible, and maybe they’re uneasy about what the Supreme Court might do in the next step. But it would be incredibly beneficial if the appeals court resolved market definition, especially if one looks beyond just Epic’s case: there are so many App Store issues.

[…]

The problem with the district court’s rule-of-reason analysis is that it doesn’t really balance the anticompetitive effects of Apple’s App Store monopoly against the attempted procompetitive justifications.

Circuit Judge Smith asked how the court of appeal could analyze a rule-of-reason decision without any quantitative amounts. In my opinion, this also counsels for a remand.

Florian Mueller:

The most important question here is whether one considers the district court’s finding of Epic not having proved lock-in a legal or factual determination. Apple uses an overbroad definition of what is “factual” and accuses Epic of, conversely, describing actually factual determinations as legal conclusions. So let’s look at this part more closely because that’s what the appeals court is going to do in the months ahead.

[…]

In its reply brief, Epic then countered Apple’s suggestion that it was confusing customer satisfaction (voluntary) with lock-in (an unwanted consequence of a previous decision)[…]

Previously:

Tuesday, November 29, 2022

Masto-Redirect

Federico Viticci:

At this point, you may be wondering: if someone has an account on a different instance, or posted something I want to reply to, how can I do this from my account on a separate Mastodon instance?

This is where my friend Jason Snell comes in: a few days ago, he shared a post in which he noted that the default method for redirecting a post or profile from another Mastodon instance back to yours is, well, somewhat convoluted. If you come across a profile or post from a different Mastodon server, you have to copy its original URL, go to your instance, manually paste it into the search box, find the result you’re looking for, and only then you can interact with it. That works, but it’s not intuitive, and I figured I could improve this aspect of the Mastodon experience with a shortcut.

Swift Mutating Functions and Property Observers

Christian Tietze:

I was under the (wrong) assumption that the mutating func needed to, well, somehow mutate the receiver of that method call, like change a property value. And that this in turn would be noted “somewhere”. Conversely, I was under the (wrong) assumption that a mutating func without any mutations inside would behave 100% like a regular, non-mutating function.

[…]

A pretty nice consequence is that you can use mutating func to change a reference type property inside a value type, and have references to the value type still know that it has changed:

Introduction to Move-Only Types in Swift

Tim Kientzle:

I thought it would help to have an informal sketch to help outline why move-only types are interesting, clarify a few subtle points (like what “move” really means), and briefly explain some of the issues we’ll need to tackle in order to bring this to Swift.

[…]

So the first step in bringing move-only support to Swift is to add operations with different lifetime-management behaviors. This will include constructs such as for borrow x in collection that let you iterate over the items in a collection without requiring an implicit copy and f(take x) that explicitly invalidates the local value as part of passing it into a function. We’re also exploring variations of these that would allow you to temporarily gain mutable access to a value. These would allow you to efficiently mutate an element “in place” in various scenarios, which is a useful optimization tool for copyable values and an essential prerequisite for move-only values.

[…]

By making Any a synonym for any Copyable, we can ensure that Any is itself always copyable at the cost of limiting it to only store copyable values. This redefinition would preserve the behavior of current code that uses Any. Of course, this means we need to introduce a new type that can hold any value whether it is copyable or not.

Previously:

Why Rosetta 2 Is Fast

Dougall Johnson (Hacker News):

Generally translating each instruction only once has significant instruction-cache benefits – other emulators typically cannot reuse code when branching to a new target.

[…]

Given these constraints, the goal is generally to get as close to one-ARM-instruction-per-x86-instruction as possible, and the tricks described in the following sections allow Rosetta to achieve this surprisingly often. This keeps the expansion-factor as low as possible. For example, the instruction size expansion factor for an sqlite3 binary is ~1.64x (1.05MB of x86 instructions vs 1.72MB of ARM instructions).

[…]

All performant processors have a return-address-stack to allow branch prediction to correctly predict return instructions.

Rosetta 2 takes advantage of this by rewriting x86 CALL and RET instructions to ARM BL and RET instructions (as well as the architectural loads/stores and stack-pointer adjustments). This also requires some extra book-keeping, saving the expected x86 return-address and the corresponding translated jump target on a special stack when calling, and validating them when returning, but it allows for correct return prediction.

[…]

The Apple M1 has an undocumented extension that, when enabled, ensures instructions like ADDS, SUBS and CMP compute PF and AF and store them as bits 26 and 27 of NZCV respectively, providing accurate emulation with no performance penalty.

Previously:

Update (2022-12-14): Howard Oakley:

Whenever possible Rosetta completes its translation well before the code is required to be run. For some apps, this may occur when they’re installed on the Mac, but it can also be delayed until launch time.

Rosetta 2 Won’t Let the Undead Die

Howard Oakley:

You might think that apps are either running or they’re not, but there are actually four different states a macOS ap can be in (in addition to those a user shouldn’t directly encounter, such as suspended).

[…]

Intel apps running with Rosetta translation […] appear to persist far longer in an undead state than on Intel systems. I’m unsure whether this is deliberate, to minimise the cost of loading them again should the user decide to open that app once more, or a passing phase. But if you run many apps in Rosetta which join the ranks of the undead, it could get inconvenient.

[…]

When napping apps are restored after a restart, they aren’t fully loaded and put into App Nap. Instead, macOS starts to load them and then stops at _dyld_start, so they only take around 8 KB of memory and don’t open any of their other files, such as frameworks. […] This can cause strange problems with some apps which you may leave running in App Nap. When in App Nap, they can be awoken by different events as well as the user bringing them to the front. When they’re in this stopped state, they have insufficient code loaded to respond to events which would normally wake them from App Nap, unless you manually wake them up after starting up.

See also: Felix Schwarz.

Previously:

Monday, November 28, 2022

Palm Pilot Emulator

Sean Hollister (Hacker News):

Yes, I am playing Dope Wars on a Palm Pilot inside my iPhone. It’s thanks to The Internet Archive, which is once again launching a giant collection of software you can instantly play on any web browser, up to and including your touchscreen-equipped phone. There are currently 565 classic Palm apps in all, including games, widgets, and even free trials from both the greyscale and color eras.

And it’s more than just the individual apps, too: the entire Palm OS is loaded with each launch, including its full selection of default apps (like the calculator and memo pad) and a working Graffiti touchscreen writing system. I cannot emphasize this enough: you can reach out and touch a 1996 pocket computer with your 2022 pocket computer and it works like a charm. It’s a tiny interactive window into the pre-iPhone era, and what lived in the proto-App Store.

Previously:

TextKit Custom Truncation

Amy Worrall:

TextKit has the option to truncate the last line of text if there’s more text than will fit in the container. It does this by displaying an ellipsis. But what if you wanted to display something else to indicate truncation? (In my case, the string “See More”, which will function like a button.)

I tried and discounted a bunch of different approaches before coming up with something that worked. Let me take you on the journey.

Friday, November 25, 2022

clipped() Doesn’t Affect Hit Testing

Ole Begemann:

The clipped() modifier in SwiftUI clips a view to its bounds, hiding any out-of-bounds content.

[…]

When you run this code, you’ll discover that the button isn’t tappable at all. This is because the (unclipped) square, despite not being fully visible, obscures the button and “steals” all taps.

[…]

The clipped() modifier doesn’t affect the clipped view’s hit testing region. The same is true for clipShape(_:). It’s often a good idea to combine these modifiers with .contentShape(Rectangle()) to bring the hit testing logic in sync with the UI.

Tumblr to Add Support for ActivityPub

Sarah Perez (via Hacker News):

Tumblr will add support for ActivityPub, the open, decentralized social networking protocol that today is powering social networking software like Twitter alternative Mastodon, the Instagram-like Pixelfed, video streaming service PeerTube, and others. The news was revealed in response to a Twitter user’s complaint about Mastodon’s complexities. Automattic CEO Matt Mullenweg — whose company acquired Tumblr from Verizon in 2019suggested the user “come to Tumblr” as the site would soon “add activitypub for interconnect.”

[…]

If Tumblr were to add ActivityPub support, it means users on Mastodon could follow Tumblr users’ posts from their own Mastodon instance — without having to use the Tumblr app. It could also provide Tumblr users with an entry point into the so-called fediverse without having to face some of the complexities that are involved with signing up for Mastodon for the first time.

Previously:

Update (2022-11-30): Rui Carmo:

I decided to start keeping track of ActivityPub-related resources and software.

Outlining and Documents

Dr. Drang:

I’ve always had this silly belief that I should be able to convert an outline into the skeleton of a report (or a blog post or whatever, but it’s usually a report) more or less automatically and then flesh it out into a final product. This doesn’t work because, except for the items at the top-level, the various items and subitems in outlines don’t correspond perfectly to sections and subsections of a report. Some outline items are subsections, but most are paragraphs or lists within a subsection. There’s no general way of knowing what an outline item is; its level doesn’t offer enough information to slot it into the proper place in the report.

This has been an issue for me, too. I find outliners to be great for taking notes and for working on and rearranging ideas. But then there’s an inevitable break to get from there to get from there to the final output, if it is to be a document.

I confess this way of working still nags at me. Surely, the back of my brain says, there must be a way to avoid the repetition. But the front of my brain argues back that years of trying have never led to that magical solution. There’s no way to avoid the actual work of writing.

Aside from the repetition, it’s a one-way transformation. Once you’re in the document format, you lose the ability to do certain outliner things. Fortunately, most of my writing these days is in Markdown, reStructuredText, or HTML, and BBEdit has some tools for navigating and collapsing those structures.

You may be wondering how I can show Example.html on my iPad as I’m writing a report. Unlike Safari on the Mac, Safari on the iPad cannot open local files. There are two ways to get around this[…]

Previously:

Gitea Ltd. Takes Over Open Source Project

techknowlogick (Hacker News):

With Gitea reaching 6 years old, it is time to reflect on the past, and to look forward to the future. With over 14k+ commits, 1k+ contributors, 40+ maintainers, and 300M+ Docker Hub pulls, Gitea has come a long way.

Our most important goal is ensuring the long term success of the project. Over the years we have tried various ways to support maintainers and the project. Some ways we have tried include bounties, direct donations, grants, and a few others. We have found that while there have been many wonderful individuals, and a few corporations who have been incredibly generous, and we are so thankful for their support, there are a few corporations (with revenues that are greater than some countries GDP) are building on Gitea for core products without even contributing back enhancements. This is of course within the scope of the license, however prevents others from the community from also benefitting.

We’d like to announce that we have formed a company, Gitea Limited, to ensure the goals are met. Some companies are unable to contribute back to open source via sponsorship or code contribution. Many more cannot contract individuals due to internal policies. In creating this new company, we are now able to offer support to those companies who do want to give back.

Open Letter to Gitea (Hacker News):

With that in mind, you can understand our surprise when we learned on October 25th, 2022 that both the domains and the trademark were transferred to a for-profit company without our knowledge or approval.

Lunny Xiao:

In 2015, I created Gitea along with its domain, gitea.io and acquired gitea.com at the same time. Throughout the life of the project, I have always personally owned both domains. As it continued to grow, I additionally trademarked the name “Gitea” in order to protect the project’s brand.

[…]

To help ensure the operation and community decision-making of the Gitea project remains transparent and public, we’re exploring the use of different management models. One of the options we have been considering includes a decentralized autonomous organization (DAO). This method would allow us to have continued voting within our community (including votes from non-code contributors), help keep track of topics being voted upon and provides contributors with greater participation to have more votes. The DAO management model would also not mean the creation of a gitcoin or crypto token.

[…]

We want to be clear that Gitea will always be a community-built project that is open.

Christian Tietze:

So a company is formed to offer services as a means to fund maintenance; then the community of contributors and fans pushes back because the proprietary ownership doesn’t sit right with them.

[…]

The name, the domain, the trademark, that’s truly the powerful piece of an open source project. In short, it’s the brand. And even though every contributor can pack up and move to Forgejo, the brand is not moving with them.

Previously:

Wednesday, November 23, 2022

Amazon Alexa to Lose $10 Billion This Year

Ron Amadeo (Hacker News):

Amazon is going through the biggest layoffs in the company’s history right now, with a plan to eliminate some 10,000 jobs. One of the areas hit hardest is the Amazon Alexa voice assistant unit, which is apparently falling out of favor at the e-commerce giant. That’s according to a report from Business Insider, which details “the swift downfall of the voice assistant and Amazon’s larger hardware division.”

Alexa has been around for 10 years and has been a trailblazing voice assistant that was copied quite a bit by Google and Apple. Alexa never managed to create an ongoing revenue stream, though, so Alexa doesn’t really make any money. The Alexa division is part of the “Worldwide Digital” group along with Amazon Prime video, and Business Insider says that division lost $3 billion in just the first quarter of 2022, with “the vast majority” of the losses blamed on Alexa.

[…]

Just about every plan to monetize Alexa has failed, with one former employee calling Alexa “a colossal failure of imagination,” and “a wasted opportunity.”

[…]

The report says that while Alexa’s Echo line is among the “best-selling items on Amazon, most of the devices sold at cost.”

It’s not clear to me how it’s losing so much money if they’re selling the hardware at cost. Are they spending that much on the associated employees and server resources?

Via John Gruber:

What is (was?) Alexa about, strategically? I’ve often heard that the vague idea was that people would buy Alexa devices for obvious stuff (playing music, setting timers) but that eventually they’d starting using Alexa to buy stuff from Amazon — and thus wind up buying more stuff from Amazon than they would if they didn’t have an Alexa device in their house.

I find Alexa kind of annoying because it’s always trying to sell us stuff. The product recommendations are unhelpful, and we don’t want to subscribe to anything beyond Prime. But we keep using it because for basic questions, kitchen timers, and free music it works so much better than Siri.

Eugene Kim:

Internally, the team worried about the quality of user engagements. By then Alexa was getting a billion interactions per week, but most of those conversations were trivial, commands to play music or ask about the weather. That meant less opportunities to monetize. Amazon can’t make money from Alexa telling you the weather — and playing music through the Echo only gives Amazon a small piece of the proceeds.

Nick Heer (Hacker News):

We are often told technology companies are reinventing the way many of us will purchase products, but I do not buy that narrative.

Previously:

Update (2023-11-20): Annie Palmer (via Hacker News):

Amazon is cutting “several hundred” jobs in its Alexa division, and axing several unspecified initiatives in the unit.

Todd Bishop (via Hacker News):

Dave Limp, the longtime executive in charge of the Devices & Services division, announced in August that he would be leaving the company. Former Microsoft executive Panos Panay was named his successor in September.

Amazon has made recent cuts in other departments including music and gaming.

ldjkfkdsjnv:

I worked in the Amazon Alexa division. The level of incompetence coupled with arrogance was astounding. Many of the people running Alexa had been there since 2012. Its was tyranny by those who started in that organization first. Backstabbing, politics, bad engineering, nepotistic promotions. The scientists were so far behind, almost all models were off the shelf implementations pulled from Github. Huge amounts of capital flushed down the drain.

The flip side might be that Alexa was ahead of its time, and that the ML capabilities werent there. But I bet Alexa spent more than OpenAI by a huge margin. Amazon’s fundamental flaw is trying to solve innovative business problems with incremental improvement. This only works in operations heavy businesses, like retail and AWS. AWS is really just extremely competent operations on top of server management.

tsunamifury:

But I went to the [Google] executives at the time in charge and said look, this really isn’t going to be an assistant if it doesn’t have the APIs into services that users need to accomplish actual tasks. Sharing some information and changing the music isn’t what a butler does, a butler anticipates your needs and executes on them -- and we can’t do that until we have the APIs to anticipate and execute.

I was, of course, ignored, because in my naiveness at the time and I didn’t realize it didn’t matter what the assistant DID, it mattered what the narrative to investors was about its potential. So 2017 I/O Sundar announces the assistant and it looks great inside Allo, and it’s a great demo -- mission accomplished.

Now 6 years+ later, it’s a stagnant, overspent team across the space -- because why? Because it can’t do anything for users. All these years and billions later it still can’t do anything important -- it has no user journey.

And it took me equally as long to realize, that still doesn’t matter. FAANG has gotten so large that the stock bump that comes from narrative outpaces actual revenue from working products.

Previously:

Android Contact Tracing App Installed Without Consent

Hiawatha Bray (Hacker News):

A nonprofit law firm has filed a class action lawsuit against the Massachusetts Department of Public Health for allegedly working with Google to secretly install COVID-tracing software onto as many as a million smartphones.

[…]

Dozens of states issued such apps, including Massachusetts. But few people voluntarily used the Massachusetts version. According to the lawsuit, the state health department worked with Google to develop a version that was installed on all Android phones, without permission from the phone owner.

[…]

Android owners are given the choice of whether to activate the Massachusetts app. But the suit alleges that the app transmits and receives data through its Bluetooth radio even when it’s not activated. This data can be accessed by Google and by a variety of apps installed on Android phones, the suit claims. If enough data is collected from enough phones, data scientists can “de-anonymize” the information and figure out the identities of the phone users.

Jessica Lyons Hardcastle:

The Massachusetts app, according to the legal complaint, gave the public health department, Google, application developers, and others access to the device owners’ media access control addresses, wireless network IP addresses, phone numbers, contacts and emails, thus making these parties privy to the owners’ personal information, location and movement. If Android users discovered and deleted the COVID-19 tracer, the state’s health agency would reinstall it on their devices, the lawsuit alleges.

[…]

“In sum, DPH installed spyware that deliberately tracks and records movement and personal contacts onto over a million mobile devices without their owners’ permission and awareness,” the lawsuit claims [PDF]. “On knowledge and belief, that spyware still exists on the overwhelming majority of the devices on which it was installed.”

Previously:

Apple’s Device Analytics Can Identify iCloud Users

Tommy Mysk (Hacker News):

Apple’s analytics data include an ID called “dsId”. We were able to verify that “dsId” is the “Directory Services Identifier”, an ID that uniquely identifies an iCloud account. Meaning, Apple’s analytics can personally identify you[…]

Apple states in their Device Analytics & Privacy statement that the collected data does not identify you personally. This is inaccurate. We also showed earlier that the #AppStore keeps sending detailed analytics to Apple even when sharing analytics is switched off.

Sami Fathi:

On Apple’s device analytics and privacy legal page, the company says no information collected from a device for analytics purposes is traceable back to a specific user. “iPhone Analytics may include details about hardware and operating system specifications, performance statistics, and data about how you use your devices and applications. None of the collected information identifies you personally,” the company claims.

[…]

Apple has historically taken a hard stance on user privacy, repeatedly claiming it believes privacy is a “fundamental human right.” Apple’s privacy claims have been under increasing scrutiny in recent months, with the company now facing a class action lawsuit accusing it of tracking users without their consent.

Nick Heer (Hacker News):

Apple also refers to the DSID by other names, such as the “Apple User Account Identifier”, “Apple ID Number”, “Apple ID Reference Number”, and “Original Unique Identifier”. Based on my 2021 data request it is, as described, a proxy for a specific Apple ID. It identifies you with Apple’s services, including for things like marketing and communications efforts. I have a spreadsheet of the nearly nine hundred times me and my DSID ignored Apple’s attempts to upsell me on Apple One, a service which launched just thirteen months before I made this data request. I also have a list of all the times I contacted AppleCare and the same identifier is attached.

[…]

The researchers point to Apple’s Device Analytics & Privacy document where it says in the iOS Device Analytics section that “[n]one of the collected information identifies you personally”. But this does not pertain to Apple’s services which are covered by entirely different policies. Both the App Store and Apple Music say usage information is collected. These are not device analytics, they are services analytics.

[…]

In fairness, perhaps the Device Analytics toggle in Settings should be worded more clearly to indicate that turning it off will not opt out of store and services activity. I am also shocked by the granularity of information in these storefront analytics. It is relevant to Apple’s recommendation engine if I listened to an album or song and whether I finished it, but it is hard to see what value it has in knowing my track playback to the millisecond. I also think the identifier used by Apple’s services should be different than the Apple ID that is correlated with your device purchase history and support requests.

Ruffin Bailey:

That at first seems mostly like fair game info, doesn’t it? But if you say “I don’t want anyone tracking me,” I can understand why you don’t want and, what’s more, wouldn’t expect all of that pushed up into the pipe. As a developer, it’d be nice if Apple had to ask for that info the same as anyone else.

It certainly fails the Steve Jobs test:

Privacy means people know what they’re signing up for, in plain language, and repeatedly.

See also: Bruce Schneier, TidBITS Talk, Florian Mueller.

Previously:

iCloud for Windows Downloading Other People’s Photos

sleeping_ghost (via Hacker News):

iCloud for Windows is corrupting videos recorded from an iPhone 14 pro max resulting in black videos with scan lines. On rare occasions, it is inserting stills into videos from unknown sources, possibly other’s iCloud accounts. I’ve been shown photos of other people’s families I’ve never seen in my life, soccer games, and other random photos.

[…]

I have been able to replicate this bug on 3 different PC’s, 2 of which were running the latest version of Windows 11 pro, and the last running Windows 10 pro. I have tried on multiple other devices including an iPhone 11 Pro and an iPad.

[…]

I reported it to the apple security team and they told me it wasn’t a “security concern”!

extr0pian:

This happened to me during a Google Takeout export when I was degoogling in late 2019. I recall going through some photos from the earlier 2010’s and some random pictures of other people were popping up. About a month or so later I received an email from Google letting me know that some of my files may have been accidentally in other people’s exports. Since then, I stopped using apps like Google Photos and cloud storage in general.

Previously:

Mastodon URIs, Not URLs

Chris Hanson:

One of the annoying things about Mastodon is that it’s tough to share Mastodon links and have them open in your favorite app instead of in a web browser. This is due to the lack of a shared scheme or a shared server—which makes sense for a distributed/federated system, but doesn’t help its usability.

One thing the community should do is use a URI instead of a URL or a Twitter/AOL-style “handle” to refer to an account: A URI is a Uniform Resource Identifier that is resolved to a URL, which makes it easier to have all links to Mastodon accounts go to the user’s preferred app—and also enable the global namespace that ATP cares about so much.

Previously:

Tuesday, November 22, 2022

Network Locations in Ventura

Rob Griffiths:

Apple, in their infinite wisdom, removed the Locations feature from the Network System Settings panel.

I use locations a lot, as they make it easy to switch between various network configurations. In my case, I have locations created that enable or disable my ad blocker, change my settings for when I’m on my VPN, one I need to use to set up my mesh router, and another for when I’m traveling. All of that seemingly gone.

[…]

But we do still have Terminal, and the locations code itself is still in macOS.

[…]

The key command is networksetup, and here are the relevant options from the man page[…]

Previously:

Update (2022-12-01): Sébastien LeBlanc notes that the user interface for network locations is back in the macOS 13.1 beta.

D2 Diagram Scripting Language

Terrastruct (via Hacker News):

D2 is a modern diagram scripting language that turns text to diagrams.

[…]

D2 is built to be hackable -- the language has an API built on top of it to make edits programmatically.

[…]

D2 is designed with language tooling in mind. D2’s parser can parse multiple errors from a broken program, has an autoformatter, syntax highlighting, and we have plans for LSP’s and more. Good language tooling is necessary for creating and maintaining large diagrams.

Text to Diagram:

Compare the syntax and renders of various languages that produce diagrams from text.

GraphViz has seemed fine to me, but:

This project has only 3 of its founders remaining as volunteer maintainers, and support is limited and may end soon. If you can help fund to a more formal foundation to continue this project, please contact north on graphviz org.

Sapling Source Control

Durham Goode (Hacker News):

Sapling is a new Git-compatible source control client.

Sapling emphasizes usability while also scaling to the largest repositories in the world.

[…]

We’ve spent the past 10 years building Sapling, a scalable, user-friendly source control system, and today we’re open-sourcing the Sapling client. You can now try its various features using Sapling’s built-in Git support to clone any of your existing repositories.

[…]

When used with our Sapling-compatible server and virtual file system (we hope to open-source these in the future), Sapling can serve Meta’s internal repository with tens of millions of files, tens of millions of commits, and tens of millions of branches.

Previously:

Managing Xcode Downloads

Craig Hockenberry:

Now that you know what Xcode is using, you’ll wonder where it’s getting the disk image. It’s located in a sibling directory: /Library/Developer/CoreSimulator/Images. That folder also contains an images.plist file that contains metadata for the disk images. There are only a handful of files there, but on my Mac they use 13 GB of disk space.

And up until a couple of hours ago, that folder contained 7 GB of data that was incompatible with the current version of Xcode. I had to delete these files manually.

[…]

In the end, this short post saved me 32 GB of disk space. If you’re developing for platforms other than the current iOS, you’ll likely see something similar. As time passes, you’ll need to manually keep an eye on this stuff: Xcode can’t clean things up for you because it has no idea what you need.

Black Friday 2022

My apps are on sale for Black Friday and Cyber Monday, and here are some other good app deals that I found:

Accessories:

Books:

Photos and Video:

Stores:

Lists of Deals:

Previously:

Please feel free to post any other deals that you find in the comments below, and I’ll incorporate them above.

Monday, November 21, 2022

ReadKit 3.1

Balazs Varkonyi:

Smart Folders Are Back

These are folders that automatically update their content according to the search criteria you specify.

It can also send you notifications, and a unique icon can be selected for each one.

[…]

The text size of the feed and entry list can be customized separately.

[…]

In addition to the universal ReadKit Premium, separate lifetime plans are now available for iOS/iPadOS and macOS.

Previously:

Update (2022-12-01): See also: John Voorhees.

Swift Pitch: Reflection

Alejandro Alonso:

I propose adding a new module to the Swift toolchain named Reflection that provides high level APIs for reflection in Swift. This makes use of reflective information that has always been available, but was never exposed as API until now.

[…]

[Mirror] works great, but there is a serious issue here in that it requires an instance of the type you want to introspect over.

[…]

Swift introduces a new module, Reflection, with a whole new suite of high level APIs that make working with reflection easier, more ergonomic, and provides developers with much more information than what they had.

Previously:

Mac Text Editing: Mark, Kill, Yank

Jesse Grosjean:

There isn’t much documentation of the macOS implementation. Much of the following behavior was discovered by experimenting with TextEdit.

[…]

When text is deleted by certain actions it gets added to the kill ring. By default the kill ring contains a single text entry. If you change the NSTextKillRingSize system default the kill ring can contain multiple entries.

[…]

Each app maintains a private kill ring. You can kill text in one view and then yank it into another view within the same app. You can’t kill or yank between apps.

Sunday, November 20, 2022

Microsoft Brings Back SwiftKey for iOS

Sami Fathi:

In September, Microsoft said SwiftKey for iOS was being shut down and removed from the App Store for no clear reason. SwiftKey has been a popular alternative for iPhone users to Apple’s default iOS keyboard, leaving many disappointed by the decision. Now, a few weeks later, Microsoft says due to customer feedback, it is bringing the app back to the App Store.

Previously:

Viewing man Pages on Ventura

Armin Briegel:

Ventura’s Preview app lost the ability to render postscript or ps files. This breaks the previous, popular shell alias to open a man page in Preview.

[…]

Add this function to your shell configuration file: (bash, zsh)

preman() {
    mandoc -T pdf "$(/usr/bin/man -w $@)" | open -fa Preview
}

[…]

I prefer opening the ‘yellow’ man pages in Terminal app. You can do so by entering a command in the Help menu, or by using the x-man-page URL scheme. In these yellow terminal windows, you can scroll and search in the text with command-F. You can also do a secondary click (right/ctrl/two-finger click) on any word and it will offer to open that man page in the context menu.

Previously:

StopTheMadness Font Substitution

Jeff Johnson:

My web browser extension StopTheMadness is updated today in the iOS App Store and Mac App Store. The biggest change is a new font substitution feature! Thanks to John Gruber of Daring Fireball for inspiring the feature and for linking to my blog post a few weeks ago. The blog post described how the custom style element feature of StopTheMadness can add @font-face rules to web pages in order to substitute one font for another. But that’s all very technical, requiring the user to write CSS. The “Fireballing” generated a lot of feedback requesting a simpler way to substitute fonts on the web, so I started work on that immediately, and now the feature is available! It works in all web browsers supported by StopTheMadness: Safari for iOS, Safari for Mac, Firefox for Mac, and Google Chrome for Mac (as well as all Chromium browsers).

Previously:

FORCEDENTRY Sandbox Escape via NSExpression

Ian Beer and Samuel Groß (back in March):

It’s clearly a serialized NSKeyedArchiver. Definitely not what you’d expect to see in a JBIG2Bitmap object. Running strings we see plenty of interesting things[…]

[…]

NSPredicates using the FUNCTION keyword are effectively Objective-C scripts. With some tricks it’s possible to build nested function calls which can do almost anything you could do in procedural Objective-C. Figuring out some of those tricks was the key to the 2019 Real World CTFDezhouInstrumenz challenge, which would evaluate an attacker supplied NSExpression format string. The writeup by the challenge author is a great introduction to these ideas[…]

[…]

Prior to iOS 14.5 the isa field of an Objective-C object was not protected by Pointer Authentication Codes (PAC), so the JBIG2 machine builds a fake Objective-C object with a fake isa such that the invocation of the dealloc selector causes the deserialization and evaluation of the NSFunctionExpression. This is very similar to the technique used by Samuel in the 2020 SLOP post.

[…]

Perhaps the most striking takeaway is the depth of the attack surface reachable from what would hopefully be a fairly constrained sandbox.

Previously:

Friday, November 18, 2022

Fred Brooks, RIP

Dag Spicer (Hacker News):

Legendary computer architect Fred Brooks passed away today. Brooks led the team creating the timeless IBM System/360 mainframe architecture as well as development of OS/360.

See also:

Jason Crawford:

His work on operating systems at IBM gave us the 8-bit byte.

Brooks was also the manager who approved Ted Codd’s PhD—which enabled him to invent the relational database.

John Carmack:

I have read The Mythical Man Month three times. Some of the wisdom really is timelessly applicable to creative human effort, but software development did escape much of Brooks’ pessimism with large scale open source component reuse.

Previously:

Update (2022-12-01): Steven Bellovin (via John Gruber):

He was also a lead on a failed project, the IBM 8000 series. He tried to resign from IBM after it failed; Watson replied, “I just spent a billion dollars educating you; I’m not letting you go now!”

He then headed the project that designed and built the IBM S/360 series of mainframes. It was an audacious concept for the time—five different models with vastly different prices and performance characteristics, but all sharing (essentially) the same instruction set.

[…]

At Chapel Hill, he switched his attention to computer graphics and protein modeling. He’d acquired a surplus remote manipulator arm; the idea was that people could use it to “grab” atoms and move them, and feel the force feedback from the varying charge fields. From there, it was a fairly natural transition to some of the early work in VR.

See also: Slashdot.

OmniFocus 3.14.1 for Mac

The Omni Group:

  • Conflict Errors — Navigating between fields via the tab key no longer triggers unnecessary edit conflict alerts.
  • Custom Perspectives — Fixed a bug that could cause unexpected filtering in some upgraded v2 custom perspectives.
  • Keyboard — Fixed a bug that could block tab key field navigation on macOS 13 Ventura.

This fixes some really annoying keyboard issues when running on Ventura, although I’m still seeing some weirdness where Tab sometimes skips over the Project column.

Update (2022-12-23): OmniFocus for Mac 3.14.3:

Fixed bug that could lead to unexpected behavior when using the tab key (this most often presented as difficultly navigating to the project field in Quick Entry, or cursor focus jumping from the outline to the Search field).

Swift Proposal: Function Back Deployment

SE-0376:

Unfortunately, developers who wish to both distribute an app compatible with toasterOS 1.0 and also adopt makeBatchOfToast(_:) must call the API conditionally to account for its potential unavailability[…]

[…]

Considering that the implementation of makeBatchOfToast(_:) is self contained and could run unmodified on toasterOS 1.0, it would be ideal if the ToastKit authors had the option to back deploy this new API to older OSes and allow clients to adopt it unconditionally.

[…]

Proposed solution: Add a @backDeploy(before: ...) attribute to Swift that can be used to indicate that a copy of the function should be emitted into the client to be used at runtime when executing on an OS prior to a specific version.

Previously:

Redirect Web for Safari

Jason Snell:

It turns out I didn’t need to make my own extension, because Manabu Nakazawa made one. It’s the free ($4 to unlock all features forever) Safari Extension app Redirect Web for Safari.

Nakazawa’s app lets you match URL patterns and redirect them to other patterns. That’s it. You can set your own patterns (using a simple wildcard system or a more powerful but complicated set of regular expressions) and even sync them with your other devices via iCloud. (The app is available for both macOS and iOS.) (If you don’t use Safari, maybe check out the Redirector plug-in instead.)

Previously:

Thursday, November 17, 2022

Google Paid Blizzard to Stay on Play Store

Florian Mueller:

The world now knows that in January 2020, Google signed a three-year agreement with Activision Blizzard King (“ABK”), “pursuant to which Google agreed to pay ABK approximately $360 million” in order to dissuade Activision Blizzard from creating its own Android app store. Three-hundred and sixty million dollars for not competing.

That number would be staggering under any circumstances, but it couldn’t have been revealed at a more important point in time: as antitrust authorities in the U.S. (Federal Trade Commission (FTC)), EU (Directorate General for Competition (DG COMP) of the European Commission), and the UK (Competition & Markets Authority (CMA)) have to make their next decisions on Microsoft’s acquisition of Activision Blizzard King. While Sony is the only vocal complainant, Google is also known to have been lobbying behind the scenes.

Previously:

Conservation of Tweets

Nick Heer:

The Times article ends on this curious exchange[…]

[…]

It makes absolutely no sense. Or, rather, it made no sense — until a few Twitter users realized that accounts which archive the deleted tweets of notable cryptosphere personalities would not be triggered if a new tweet was posted at the same time another was deleted. Bankman-Fried’s free jazz tweets is more likely an attempt to cover up his removal of over one hundred posts.

I assume the bots work this way because Twitter’s API, like its Web interface, is not very well suited to the sorts of things you’d want to do with older data. But surely there are already people poring over complete archives of his tweets to find the interesting ones, so it won’t make much difference.

Feedle: Blog Search With RSS Feeds

Brent Simmons:

Back in the days of yore, there were search engine services that 1) searched the blogosphere, and 2) let you subscribe to your searches via RSS. Each search query had its own feed.

[…]

[We’ve] just learned about a new one called feedle.

A Vision for Variadic Generics in Swift

Holly Borla:

The design and implementation of variadic generics is well underway. Equipping Swift with a set of features to enable variable-length abstraction will be done incrementally over multiple individual language evolution proposals. The first of these proposals has already been pitched as Value and Type Parameter Packs.

A vision for variadic generics in Swift discusses the overarching design for this set of language proposals. This will give you an idea of the bigger picture, how parameter packs provide the foundation for its future directions, and what sorts of use cases are ultimately supported by this design.

Previously:

Wednesday, November 16, 2022

Xcode 14 Unintentionally Increases App Size

Max Topolsky and Josh Cohenzadeh (Hacker News):

Shortly after Xcode 14’s release, a number of iOS apps saw significant size increases. We first tweeted about observing a large spike in the Zillow iOS app. Zillow was not an isolated example.

[…]

The simple explanation is that bitcode optimizes production builds, partly by stripping binary symbols. Without bitcode turned on, Xcode build settings have to be changed to strip binary symbols.

So when Xcode 14 removed bitcode, a lot of apps lost that implicit build setting.

Previously:

Entropy of Big Distributed Systems

Gergely Orosz:

Scoop from within Twitter: small things are breaking, not enough engineers to fix them.

[…]

This is exactly what you’d expect when a large part of the workforce is laid off, another chunk quits, and those left are expected to ship new features as the #1 priority.

Hector Martin:

All large services and platforms are “built to be resilient”. But they are also extremely complicated, with countless internal interactions between microservices, configuration systems, load balancing and directing subsystems, networking fabrics, and more.

These systems are built to be reliable in the face of things like machine failures, or entire optional microservices going down. That’s not what will take Twitter down. Twitter will crash and burn when a complex interaction between systems goes wrong and causes a cascade failure.

[…]

People think of servers as things you can just reboot and be fine. That’s not how this works. If you rebooted every single $FAANG server simultaneously right now, all of $FAANG would be down for probably months. Or worse. And that’s with functional teams. This stuff is hard.

Dan Luu:

One thing that’s been interesting about recent events is seeing how people imagine big companies operate, e.g., people saying that Twitter is uniquely bad for not having a good cold boot procedure.

Multiple $1T companies didn’t or don’t have a real cold boot procedure.

Jon Luke:

In a complex system like Twitter or AWS, there is always a trade-off between doing failure automation work up front and incurring operational burden later on. It’s a decreasing ROI, and trying to automatically handle every possible failure case just isn’t worth it.

[…]

Yes, of course you try to threat model all possible failure modes. But then you only handle the 95% or so known/expected cases and don’t bother with the 5% unknown/rare cases. For those, you just throw smart humans at the problem once it arises.

Failures that seem only theoretical in a smaller system, like bit flips from cosmic rays, suddenly become very very real once you’re dealing with millions of servers and millions of rps. At that scale, you have to assume these things will happen.

[…]

The culture at AWS, for example, was hyper-aware from the beginning of circular dependencies and the need to cold boot, and it was always a big topic in any Principal-level design or operational readiness review.

Jaana Dogan:

Many executives fail to understand why tech companies are bloated. They are bloated because everything is held together with duck tape and “task force” teams. And it’s due to gross lack of funding when it comes to removing complexity and technical debt.

Eric Frohnhoefer:

Frankly we should probably prioritize some big rewrites to combat 10+ years of tech debt and make a call on deleting features aggressively.

Joshua Koudys:

Leave something poorly architected, and it can give you a hundred easy-to-fix issues a month. You fix those, you have great velocity, everyone celebrates the 10x engineer. Fix the fundamental problem, you get 1 ticket closed, they fire the low-velocity engineer.

Steve Streza:

Strongly recommend going to see the list of apps you rely on Twitter for single sign-on.

If Twitter burns to the ground, which looks increasingly likely, these are the apps that you used Twitter to log in to. Set up email backups on those accounts ASAP.

Previously:

Update (2022-12-02): Cindy Sridharan:

Tech Debt is one of those things that make sense to engineering, but to leadership it sounds like “we’ve created a mess over the years that slowed the product, we did nothing to fix it, and now we need to spend even more time and people on fixing it”.

Slava Pestov:

This is a consequence of tech industry consolidation. Sure, users might grumble about glitches, inconsistent UIs and poor performance, but there are no competitors they can switch to. So there’s no incentive for leadership to take a more holistic approach to software development.

Dan Grover:

Engineers don’t know how to communicate these things. To execs, valid issues in this category sound indistinguishable from desire for generic yak shaving, things to improve their own QOL, or migrating things between tech for no reason. Quick thread on how to fix this!

Command Bars

Maggie Appleton (via Dan Grover):

Command bars are command-line bars that pop up in the middle of the screen when you hit a certain keyboard shortcut.

[…]

Rather than remembering which sub-sub-sub menu a function lives in, users need only remember its name.

They don’t even have to remember its exact name. Fuzzy search can help them find it by simply typing in similar names or related keywords.

I’ve long used LaunchBar as a universal command bar, but now some of the productivity apps that I use daily have their own versions with app-specific commands. In BBEdit, it’s Go ‣ Command… (Command-Shift-U). In Tower, it’s File ‣ Quick Actions (Command-Shift-A). And macOS adds a built-in command searcher to each app’s Help menu (Command-?). Part of the appeal is discovering new commands or quickly locating infrequently used ones, but I also find it useful for commonly used commands in an app where the convenient keyboard shortcuts are already in use.

Update (2022-12-02): See also: Federico Viticci.

Update (2024-04-09): Bruno Brito:

Quick Actions is Tower’s version of the Command Palette. This feature has received praise from our users since its inception, so we thought it was high time we wrote an article covering everything you can achieve with it (spoiler: it’s a lot)! ☺️

Weathergraph 1.0.129

Tomas Kafka:

Open the full screen view to see six days at once. Press and hold the chart to read the exact conditions. Swipe down to close.

I like being able to see much farther ahead with the new full screen view. It’s also great that I can enter the mode with a button tap rather than having to toggle Rotation Lock, then rotate my phone, and then toggle Rotation Lock again when I’m done.

Weathergraph:

Weather service response time for Foreca vs. @Apple Weather. Apple seems to occasionally take up to 20 s to respond.

Previously:

Monday, November 14, 2022

Custom Date Formats in Ventura

Casey Liss:

Prior to Ventura, you could go into System Preferences, little bubbles around, and make completely custom date/time formats. With the switch from System Preferences to System Settings, that screen was cut. So, there’s no user interface for making custom formats anymore.

I asked about this on Twitter, and got a couple of pretty good answers. One, from Alex Griffiths, pointed me to a useful and helpful thread at Apple. The other, from Andreas Hartl, pointed me to another useful and helpful thread at Reddit. Between the two of them, I was able to accomplish what I wanted, via the command line.

Previously:

Apple’s 2022 Deadlines

Apple (November 2020):

This is the beginning of a transition to a new family of chips designed specifically for the Mac. The transition to Apple silicon will take about two years to complete, and these three systems are an amazing first step.

Dan Moren:

Within a year of the company’s first Apple silicon Macs being released, almost the entire product line had been moved over; the company even released a new model, the Mac Studio, with some uber-powerful chip configurations to boot.

But as 2022 runs out the clock, there are a few Intel laggards still in the pack. The Mac mini has moved over to the M1, yes, but a higher-end Intel model still remains for sale. More significantly, the company’s most powerful machine, the Mac Pro, is still nowhere to be seen, aside from a vague hint during the Mac Studio announcement in spring of this year.

I haven’t seen any rumors about the 27-inch iMac or the iMac Pro. At this point I assume they’re dead. For the Mac Pro and Mac mini, I think people will forgive the Apple Silicon transition taking a bit longer to complete, considering all that’s going on in the world and that the transition of the more popular Macs has been pretty much a home run.

So it’s likewise a little surprising that another new product from the company that was due to appear in 2022 doesn’t seem like it’ll make the date either: Apple Classical.

[…]

But here’s the thing about Apple: the company doesn’t usually like to make future predictions unless it is ridiculously certain of hitting its mark.

The OCSP preference is also overdue.

Previously:

Update (2022-12-14): Jason Snell:

If you paid attention to analyst and press reports, though, it sure seems like Apple is six to nine months behind where it had expected to be. The M2 MacBook Air, which was announced in June and shipped in July (and which I did predict, for the record!), was originally rumored to ship last fall. Whether or not Apple planned on selling it that early, it sure seems the company didn’t expect to have to wait until summer to get it out the door.

I’ll save my predictions for a column later this month, but I think it’s perhaps safe to expect that 2023 will finally be the year that Apple shows Intel the door.

Update (2022-12-16): Chance Miller:

There are a couple of areas of interest in the Mac lineup right now. There’s no big-screen iMac powered by Apple Silicon, and Apple also isn’t selling the old Intel-powered big-screen iMac. Instead, your only iMac option is the 24-inch iMac with the M1 chip inside.

Interestingly, Apple also continues to sell a version of the Mac mini with Intel inside. This machine is likely to be discontinued at some point in the near future, but it’s likely still a popular option for some enterprise buyers.

[…]

Apple missed its two-year target for completing the Apple Silicon, but does it really matter? No, it doesn’t. What we’ve seen for the Apple Silicon transition so far has been nothing short of impressive, and the transition shouldn’t be viewed as a “failure” because of one of the lack of an Apple Silicon Mac Pro.

Sunsetting Mighty

Suhail Doshi (Hacker News):

I decided to stop working on Mighty after 3.5 years 😓.

[…]

Much of the web is bound by single core performance of JS. The headwinds of the semi conductor industry are too strong to succeed at providing enough benefit for users. We could improve things by 2x but not 5-10x. Ok business, not mass market changing.

On the Mac side, at least, the performance benefit is likely much smaller vs. a local browser on an M1 or M2 Mac. And if you’re using an Intel Mac, would you rather spend $30/month on a browser or save up for a new Mac that will be faster and more efficient in every way? It seems like it was amazing technology, but solving the wrong problem, or at least at the wrong time.

Previously:

Update (2022-12-01): Chase Lambert (via Hacker News):

Mighty’s short term goal was to make people more productive with their browser. Our longer term goal was to build a new type of computer, but for this post I’ll be discussing our shorter term goals. The core goal was to make a faster web browser. By faster, I mean the time difference between a user taking some action and that action happening, like loading a webpage, clicking on a link, closing a tab, etc. The first users of Mighty were those that explicitly found Chrome slow. Figma, Google Drive, hundreds of tabs, slow internal tools, competing non-browser apps, and old laptops were common examples of this.

[…]

Besides these direct hardware benefits, we could also use the extra hardware in other creative ways:

  • Pre-loading websites in the URL bar before a user presses enter.
  • Saving recently used websites as background tabs, so that they load instantly.
  • Making a local CDN
  • Increasing cache sizes wherever is beneficial

[…]

Many users didn’t continue paying for the product for a variety of reasons. Some of the top ones were networking stutters, stability issues, and missing features (like webcam support). We also ironically struggled with a sluggishness issue. There were some specific cases where if you pushed Mighty hard enough, it would end up performing worse than Chrome for some reason that we’re still not entirely sure of.

How Does Ventura Update Faster?

Howard Oakley:

Watch Activity Monitor during those phases, and you’ll see that the download phase has significant CPU use by com.apple.StreamingUnzipService, which as the subsystem name suggests is decompressing the download as it arrives on your Mac. Understanding what’s going on during preparation requires browsing the log, where there’s evidence of further small downloads, some decompression and preparation of updates, and installation.

Although the progress indicators and times shown during updates in Big Sur and Monterey seem to have been broadly accurate, for Ventura they’re wild overestimates. That’s because the total time expected remains 30 minutes, and progress isn’t measured in terms of real time, but using staging points in the process. Hopefully as this matures in Ventura, the progress bar will be linked back to real time.

Previously:

Friday, November 11, 2022

An Untrustworthy TLS Certificate in Browsers

Cory Doctorow (via Bruce Schneier):

Yesterday, the Washington Post’s Joseph Menn published an in-depth investigation into Trustcor, a certificate authority that is trusted by default by Safari, Chrome and Firefox:

Menn’s report is alarming. Working from reports from University of Calgary privacy researcher Joel Reardon and UC Berkeley security researcher Serge Egelman, Menn presented a laundry list of profoundly disturbing problems with Trustcor[…]

[…]

Today, learning that the CA-vetting process I’d blithely assumed was careful and sober-sided is so slapdash that a company without a working phone or a valid physical address could be trusted by billions of browsers, I feel like I did when I decided not to fill my opioid prescription.

AirDrop “Everyone” Limit in China

Filipe Espósito:

Apple today released iOS 16.1.1 for all users. While the release notes for the update say nothing about new features or major changes, there’s a significant one coming for users in China.

Jess Weatherbed:

Apple has placed time restrictions on AirDrop wireless file-sharing across iPhones in China after the feature was used by protesters to share images opposing the Chinese government, Bloomberg reports.

The “Everyone” option in Airdrop is now limited to a ten-minute window for users in China. After the ten minutes have passed, AirDrop’s device-to-device sharing will switch back to “Contacts Only,” making it harder to distribute content to strangers en masse. These new time restrictions have been introduced by Apple just weeks after the service was used to spread posters opposing president Xi Jinping.

Nick Heer:

A weird quirk of this change is that, absent the above context, adding a timeout to the “Everyone” setting for AirDrop is actually a good idea. Some people have reported receiving unwanted AirDrops in public, a story which CNBC illustrated with a stock photo of a “senior man surprised at tablet”. Indeed, Apple told Mark Gurman of Bloomberg that it will be rolling out the feature for all iPhones — but it would not say why this change was added to a routine security update only for users in China.

Previously:

Update (2022-11-30): Tibor Martini (via Hacker News):

Apparently a lot of chinese dissidents used AirDrop to share information (because you don’t need internet for it and thus it can’t be censored).

John Gruber:

You don’t have to be Kreskin to surmise that Apple made this change at the behest of the CCP.

iOS 16.1.1 and iPadOS 16.1.1

Juli Clover:

iOS 16.1.1 fixes a few unspecified bugs that iPhone users have been dealing with, according to Apple’s release notes. Users have been afflicted with widespread Wi-Fi bug, for example. The Wi-Fi bug resulted in random disconnects, with some users unable to stay connected to their Wi-Fi networks.

It is not clear if the Wi-Fi bug is fixed as Apple did not provide a specific list of bug fixes, instead only saying that the update “includes bug fixes and security updates.”

Previously:

macOS 13.0.1

Juli Clover (full installer, IPSW):

macOS Ventura 13.0.1 is a bug fix update, and it addresses two security vulnerabilities that could allow for unexpected app termination or arbitrary code execution by a remote user. Neither was known to have been exploited in the wild.

mikey:

Appears that macOS Ventura 13.0.1 has fixed the Endpoint Security Framework (ESF) Full Disk Access (FDA) permission bug.

Howard Oakley:

Ventura has also brought considerable improvements in the time taken to update, but only, as far as I’m aware, on Apple silicon Macs. Although I haven’t timed this accurately, the 13.0.1 update delivered entirely from my Content Caching server took just under ten minutes, from the start of download to the reappearance of the Desktop and Finder. On a Ventura VM with only four vCPUs running on a Mac Studio Max, from the completion of downloading to the login screen took less that 7.5 minutes, including a ’30 minutes’ preparation period that took about 4 minutes.

Once downloading had finished to my iMac Pro, I had time for a leisurely dinner while it completed its update, I guess taking at least 45 minutes.

Previously:

Wednesday, November 9, 2022

Analytics in Apple Apps

Thomas Germain:

The iPhone Analytics setting makes an explicit promise. Turn it off, and Apple says that it will “disable the sharing of Device Analytics altogether.” However, Tommy Mysk and Talal Haj Bakry, two app developers and security researchers at the software company Mysk, took a look at the data collected by a number of Apple iPhone apps—the App Store, Apple Music, Apple TV, Books, and Stocks. They found the analytics control and other privacy settings had no obvious effect on Apple’s data collection—the tracking remained the same whether iPhone Analytics was switched on or off.

[…]

The App Store appeared to harvest information about every single thing you did in real time, including what you tapped on, which apps you search for, what ads you saw, and how long you looked at a given app and how you found it. The app sent details about you and your device as well, including ID numbers, what kind of phone you’re using, your screen resolution, your keyboard languages, how you’re connected to the internet—notably, the kind of information commonly used for device fingerprinting.

Tommy Mysk (Hacker News):

It seems that the #AppStore app on iOS 14.6 sends every tap you make in the app to Apple.

[…]

It’s unclear if Apple still collects analytics data in iOS 16, even when sharing analytics and personalized recommendations are switched off. Regardless, the App Store already knows a lot about our behavior and how we explore apps.

David Price:

But this seems more of a question of intent than one of technology, given that the tracking was happening amid the implementation of high-profile pro-privacy measures. It’s hard to see why Apple would still have been harvesting usage data under iOS 14.6 and then backtracked in a later update without any obvious motivation.

Indeed, if anything Apple has shifted its business model in the opposite direction since the heady days when App Tracking Transparency was being trumpeted as the future of user privacy.

I assume that most of the major third-party iOS apps do this, too. The difference is that, because Apple’s privacy marketing has been so successful, people assumed that it didn’t. Of course, Apple defines things so that it’s not “tracking” if the data isn’t linked to you personally and isn’t shared with other companies. But it still seems a bit creepy and not what you would expect to happen if you’ve turned off analytics and personalized ads in Settings. There’s apparently no switch to prevent iPhone from phoning home.

Previously:

Update (2022-12-01): Tim Hardwick:

Apple is facing a proposed federal class action alleging that it records users’ mobile activity without their consent and despite privacy assurances, in violation of the California Invasion of Privacy Act, reports Bloomberg.

See also: Hacker News.

Previously:

Affinity 2

Affinity (Hacker News):

Wielding hundreds of timesaving improvements and a completely redesigned UI that will optimise your workflow, V2 is heralding in a new creative era.

[…]

Experience the full power of Version 2 of Affinity apps with the Universal Licence. For just one discounted payment, you can get the ENTIRE Affinity suite (including Publisher for iPad!) on all your devices, across macOS, Windows and iPadOS.

Amazing that it’s only $99.99—with no subscription—for everything.

Previously:

Update (2022-12-02): Simeon:

Eight hours later, the brand new Affinity Photo 2 still does not show in App Store search, and with v1 removed all you get is huge double-width ads for competitors.

Disk Utility and Time Machine in Ventura

Howard Oakley:

At the time, I suggested a workaround involving manual ejection of Time Machine backup snapshots[…] Looking in the hidden folder of snapshots on that Mac, there were no longer any listed as mounted for backups. Although that may not be guaranteed in every case, it now looks as if Disk Utility and Time Machine between them have solved this problem.

[…]

One great advantage of the new System Settings is that long lists of items not to be backed up by Time Machine are now more accessible, as System Settings’ window can occupy the full height of the display.

Time Machine’s controls aren’t perhaps as obvious as they could be: two commands that you might not know how to access are to back up with a consistency scan, and browse other backup disks. These are available in Time Machine’s menu (enabled in Control Centre) with the Shift or Option key held down, respectively.

Thomas Clement:

Apple finally added more Time Machine scheduling options in Ventura.

This means that the on/off switch is now buried in the options pane, which is already confusing users.

Unlike Apple, I’m a lot more interested in scheduling when backups happen within a day than in how many days to wait between backups.

Previously:

Keywords Instead of Albums With iCloud Shared Photos

Jason Snell:

[There’s] no way to share albums in iCloud Shared Photos. All the photos can be shared, but the concept of an album is currently limited to a single Apple ID.

[…]

Every item in the Photos library can be assigned a keyword, and keywords are synced across iCloud Shared Photos. So if you want to collaborate with other members of your iCloud Shared Photo library—or even if you just want them to be able to view the curation and selection—you can do this by selecting all the photos you want to collect and assigning them a keyword.

Tuesday, November 8, 2022

Migrating From Twitter to Mastodon

Twitter has lots of problems, but it also has the advantages of lots of users I want to follow and some great client apps. I also haven’t been impressed with the alternatives. However, some people I follow are leaving for Mastodon and cohost, so I’m starting to look at them a bit. What I like about Mastodon is that it supports RSS—just add .rss to the end of a user’s URL.

Mike Rockwell:

Mastodon is like taking Twitter’s short-form, approachable publishing mechanism and combining it with email’s distributed, protocol-based system. And while that’s cool for nerdy folks like you and me, I understand that it can sound a bit intimidating. Honestly, you can also just sign up for an account and start using it without ever knowing about those underlying technologies.

If you’re migrating from Twitter, though, you might benefit from some of what I’ve learned along the way. Here’s my recommendations for migrating and how you can get the most out of it[…]

Mark Hughes:

Pick any instance except mastodon.social or mastodon.online, those are run by mstdn gGmbh (aka Gargamel), gigantic, massively overloaded, poorly moderated now and for the foreseeable future. Also don’t join an instance blocked by everyone else, see the list of moderated servers - if in doubt, ask a friend on already on fediverse.

[…]

[Content Warning] anything that might annoy or trigger someone. If you don’t do this, you will be rapidly blocked by almost everyone. This is maybe the single most important bit of etiquette.

[…]

Full-text search doesn’t exist mostly; some servers allow searching your own toot text only.

Nicolas Magand:

The things is — since I continue to follow a few beloved Twitter accounts thanks to the magic of RSS and one of Nitter instances, allowing me to still consume a lot of tweets daily — I don’t really miss Twitter. Maybe that’s why deleting my account was not as emotional as I thought it would be. To me, it didn’t feel like leaving the party.

Twitter no longer supports RSS, but you can get RSS feeds for individual Twitter users through Nitter or Feedbin.

Previously:

Detecting and Affecting Lockdown Mode in Ventura

Joel Bruner:

Lockdown mode is new feature for macOS Ventura and for many MacAdmins we’ve been wondering how to detect this state. Why? Lockdown mode affects how macOS and Mac apps behave. This is something a helpdesk might like to know when trying to troubleshoot an issue. Also, due to some ambiguous wording by Apple, they made it seem like MDM Config Profiles could not be installed at all when in Lockdown mode, however this is not always the case.

[…]

[The defaults] key uses the LDM acronym/mnemonic: LDMGlobalEnabled.

[…]

This totally blew me away: You can enable and disable macOS Lockdown mode by writing to your .GlobalPreferences preference domain! […] That’s right, it’s not written to a rootless/SIP protected file like TCC.db!

Previously:

PowerPoint’s Connected Experiences

Roger González Gutiérrez (via Hacker News):

Microsoft is phoning home the content of your PowerPoint slides.

[…]

Make a new slide with a title of your choice. Choose “Designer.” Look at your network traffic as you do.

It makes sense: the tool is reading your text and suggesting designs/delivering stock photography. But this means that any data that you might want to keep private is being sent to Microsoft.

Microsoft:

Connected experiences that analyze your content are experiences that use your Office content to provide you with design recommendations, editing suggestions, data insights, and similar features. For example, PowerPoint Designer or Translator.

It looks like you can turn off PowerPoint Designer in the preferences, though it’s not obvious that this pane of the pre-Ventura-style preferences window lets you scroll down to see more settings.

Previously:

Swift Concurrency Tips

Wojciech Kulik (Hacker News):

If you add @MainActor attribute to a function, it is not the same as wrapping the whole method in DispatchQueue.main.async. If your method contains await keyword, the code will be split into two pieces – one before await and one after await, and as mentioned before, once the method hits await another pending call can start running even before the first one is finished.

[…]

You should remember to always mark a code with @MainActor if you require the Main Thread. You shouldn’t make implicit assumptions. The problem is when you suddenly start adding async-await to an existing project that was implemented without using Swift Concurrency. You can easily get into trouble if you don’t pay enough attention when mixing old code with async-await.

[…]

First of all, you should avoid long-running synchronous work in Task. For that, you should use GCD and custom queues. This way you will prevent blocking unintentionally some TaskPriority. However, you should be also aware that having too many custom queues is not recommended because of possible Thread Explosion. Therefore, you may try using OperationQueue to limit concurrency.

[…]

[If] you test your code on a simulator each TaskPriority will be limited to only 1 task running at the same time.

Previously:

Update (2022-11-09): Rob Jonson:

Another misleading article saying @MainActor guarantees a function runs on the main thread. It doesn’t. It only guarantees that code you compile will call on the main thread. System callbacks can still call this function on any thread. Apple should document/emphasise this.

Monday, November 7, 2022

Free Space Required for Modern macOS Upgrades

Charles Edge:

Sierra (Mac OS X 10.12) had a minimum drive capacity of 8.8 GB but really needed more like 12 GB; however there wasn’t a hard number sanity check that I personally ran into. This was 2016 and the amount of free space required to do an upgrade would increase dramatically.

[…]

The net result is that when doing the last few upgrades, they have required 12+GB for the installer itself (which can be run from a USB drive) and up to 44GB for the installer to do the work it needs to do, so a total of up to about 56GB. Therefore, scoping policies to run an updater without causing undo issues to end users it’s entirely appropriate to make sure they have the amounts of free space indicated per version. Given that drives can be a terabyte in size, this doesn’t seem wildly inappropriate; however, many organizations still buy devices with 256GB drives (thus going from an eighth in the 64GB drive era to a quarter of common drive space required to be free for certain upgrades on smaller drives today).

These days I find that I want about 150 GB for a test partition that will include macOS, Xcode, and enough space to clone my Git repo and run the tests.

Previously:

Update (2022-11-09): Nick Heer:

Users are disrespected by increasing and surprising bloat in applications. For work, I need to run the Microsoft OneDrive client on one of my Macs, and I was surprised to see that it recently crossed the 1 GB threshold. This is a file syncing utility.

Update (2022-12-02): Adam Engst:

I was reminded of it when TidBITS reader Marc Heusser wrote to tell us that upgrading from macOS 12.6.1 Monterey to macOS 13.0.1 Ventura on an M1 MacBook Pro with insufficient free space resulted in errors that prevented the MacBook Pro from booting.

Update (2022-12-23): Howard Oakley:

So depending on when you run it, the installer might claim it needs 12.97 GB, 13.22 GB, or 13.56 GB of free disk space, but really wants around 14 GB.

In practice, even for the modest needs of a basic Ventura 13.0 installation in a VM, the smallest disk size you’ll be able to update from 13.0 to 13.1 is 33 GB, providing at least 14 GB of free space. To have any degree of comfort, make that a 40 GB disk with at least 20 GB free.

That’s only a start, though. Updating to 13.1 also has a long-term cost in terms of free space. Once happily running macOS 13.1, free space was around 0.5 GB less than it had been in 13.0. By the time that we reach 13.6 next summer, even that 40 GB disk with 22 GB of free space in 13.0 could well have lost sufficient free space to make further updates tight for free space.

Hidden Login Items on Ventura

Rich Trouton:

One of the changes made between macOS Monterey’s System Preferences and macOS Ventura’s System Settings is that the Hide checkbox in System Preferences’ Login Items has disappeared from System Settings’ Login Items.

[…]

Fortunately for those who want to continue being able to launch applications on login and automatically hide them, it’s still possible to do so on macOS Ventura from the command line using osascript.

The System Settings redesign also removed the Battery/Energy Saver controls for setting your Mac to shut down or wake at certain times. Apple now recommends doing this in Terminal via pmset.

Previously:

Ventura App Management

WWDC 2022:

In addition to an integrity check, Gatekeeper will also prevent your app from being modified in certain ways.

The most common way apps are modified is for updates. Apps validly signed by the same developer account or team will continue to be able to update each other. This will just work.

To allow another development team to update your app or restrict updates to only your updater, you can update your info-plist.

[…]

If an app is modified by something that isn’t signed by the same development team and isn’t allowed by an NSUpdateSecurityPolicy, macOS will block the modification and notify the user that an app wants to manage other apps.

Jeff Johnson (tweet):

The modified Bonjeff app still launches successfully, which raises questions about Apple’s explanation of the feature. […] In my testing, the difference seems to be that Ventura will block the first launch of a modified notarized app even if the quarantine extended attribute (xattr) was removed from the app, whereas Monterey and earlier will only block the first launch if the modified notarized app is still quarantined.

[…]

It’s unclear how much of a barrier this poses to attacks, however, because the app could be allowed to run first unmodified before it’s then maliciously modified and run again. I’ve seen it claimed elsewhere that Ventura will block any launch of a notarized app if its code signature has been broken, but this is proven untrue in testing.

[…]

[Full] disk access automatically entails app management permission. This is true even if app management permission is disabled for Terminal in System Settings! So the user interface can be misleading. […] Consequently, any unsandboxed app is also granted app management permission on Ventura, because an unsandboxed app can “piggyback” on Terminal’s permissions by running a shell script in Terminal.

He’s also found an (undisclosed) App Management bypass that doesn’t require Full Disk Access.

Previously:

Meta Myths

Ben Thompson (Hacker News):

Meta, née Facebook, is now, incredibly enough, worth 42% less than it was when I wrote Facebook Lenses, hitting levels not seen since January 2016. It seems the company’s many critics are finally right: Facebook is dying, for real this time.

The problem is that the evidence just doesn’t support this point of view. Forget five lenses: there are five myths about Meta’s business that I suspect are driving this extreme reaction; all of them have a grain of truth, so they feel correct, but the truth is, if not 100% good news, much better than most of those dancing on the company’s apparent grave seem to realize.

[…]

ATT severed that connection between Meta’s ads on one side, and conversions on the other, by labeling the latter as third party data and thus tracking (never mind that none of the data was collected by the app maker or merchant, who were more than happy to deputize Meta for ad-related data collection). This not only made the company’s ads less valuable, it also made them more uncertain[…]

[…]

What ATT did not do, though, was kill digital advertising. There are still plenty of ads on Facebook, and mostly not from traditional advertisers from the analog world: entire industries have developed online over the last fifteen years in particular, built for a reality where the entire world as addressable market makes niche products viable in a way they never were previously — as long as the seller can find a customer. Meta is still the best option for that sort of top-of-the-funnel advertising, which is why the company still took in $27 billion in advertising last quarter. Moreover, the fact that number was barely down year-over-year speaks to the fact that digital advertising is still growing strongly: yes, ATT lopped off a big chunk of revenue, but it is not as if Meta revenue actually decreased by $10 billion annually[…]

Previously:

Friday, November 4, 2022

Reduced AirPods Noise Cancellation

Sami Fathi:

Apple’s $550 over-ear AirPods Max headphones are less effective at blocking out outside noise when using Active Noise Cancellation (ANC) following their latest firmware update, according to results from a detailed audio test.

[…]

The decrease in ANC effectiveness was highlighted in an article by The Verge last month following months of discussion and complaints from AirPods Max users on Reddit and other discussion forums.

M. Brandon Lee (via Scott):

Some interesting research shows that the reduction in ANC quality on Apple’s products is not planned obsolescence but the result of a Patent Troll.

Apple cannot talk about it as it is an ongoing case.

facingcondor:

It appears that Apple is quietly replacing or removing the noise cancellation tech in all of their products to protect themselves in an ongoing patent lawsuit.

There’s a detailed timeline.

I have no way of doing an A-B test, but my general sense is that noise cancellation with my AirPods Pro has been less effective for about a year, and that accords with this test by Rtings:

After updating this [AirPod Pro] firmware, our results showed a fairly significant drop in isolation performance, primarily in the bass range. This means that with ANC turned on, they won’t do nearly as good a job blocking out the low engine rumbles of planes or buses as they did before this update. Our latest retest uses firmware update 4A400, released in October 2021, which shows that their overall noise isolation performance has been further weakened.

Previously:

Update (2022-11-09): scubidubidu:

I bought my AirPods Pro 2 on launch day. This was my first set of ANC earphones coming from AirPods 2nd gen. At first I was amazed, and after finding out you can see on the Noise app in the AppleWatch how much noise was being cancelled, it would usually be a 30dB reduction on average (If ambient noise was at 70dB, my APP2 with ANC on would give me about 40dB. If ambient noise was 65dB, my APP2 with ANC on would give me about 35dB) I would check that every time I went to a noisy environment to check due to the products novelty.

Many weeks later I started noticing sounds that would be blocked before (the voices of the people on the table next to me, clacking of dishes in the kitchen, the restaurants music although relatively quiet). So I started monitoring the results on the AW noise app and found that the reduction I had in the exact same environment was increased by 6dB, now I get a 24dB reduction in an environment with 60-70dB where before I used to have a 30dB reduction.

Update (2022-12-02): Dennis:

Man this pisses me off. I used to work in my Kitchen with a pair of AirPods Max while the washing machine was running and I started noticing it a while ago.

JiminyDickish:

It’s the kind of string on a corkboard post that Reddit loves to upvote, full of intrigue and conspiracy, but its conclusions are not sound.

The patents in question are not related to noise cancellation. They are for microphone arrays and voice recognition.

[…]

Adaptation is the very straightforward phenomenon that easily explains why we perceive soft sounds to be louder after some time—our brains get used to it.

Yet the measurements do seem to show more noise after the firmware updates.

SiriSpy Bug

Guilherme Rambo (tweet, Hacker News):

Any app with access to Bluetooth could record your conversations with Siri and audio from the iOS keyboard dictation feature when using AirPods or Beats headsets. This would happen without the app requesting microphone access permission and without the app leaving any trace that it was listening to the microphone.

[…]

Knowing that the drop in output quality when using the microphone is a physical limitation of the Bluetooth standards used by AirPods and other similar headsets, how talk to Siri had been implemented on AirPods without disrupting audio quality had always been a bit of a mystery to me[…] I noticed that the AirPods included a service with the UUID 9bd708d7-64c7-4e9f-9ded-f6b6c4551967, and with characteristics that supported notifications. […] As soon as I did that, a firehose of hex bytes started to stream down my Terminal window.

[…]

You can probably see where this is going: BTLEServerAgent did not have any entitlement checks or TCC prompts in place for its com.apple.BTLEAudioController.xpc service, so any process on the system could connect to it, send requests, and receive audio frames from AirPods.

[…]

I was told I’ll be receiving a US$7000 bug bounty payment for reporting these issues

I think he deserves a lot more.

Previously:

Update (2022-11-30): Guilherme Rambo (tweet):

The original version of this article mentioned a bug bounty payment of US$7000. However, this was due to an issue with the way Apple’s security team had communicated about the bounty. They broke down the two vulnerabilities discovered into separate CVEs, one of which was awarded a bounty of US$7000, while the other one was awarded US$22500. So the total bounty payment for the bugs described in this report was of US$29500. Apple’s security team apologized for the confusion, and has since released a new web platform for bug submissions, which should make this a lot better going forward.

Bike Rich Text Editing

Jesse Grosjean:

Bike now supports rich text!

[…]

Rich text is difficult when you need to insert text at formatting boundaries. Markdown has formatting characters to guide you. In rich text there are no such characters, and so you must rely on these conventions[…]

[…]

Bike’s typing affinity solves both editing puzzles easily. At each formatting boundary (including start and end of line) Bike’s text caret shows a tail. Use the arrow keys to point the tail at the formatting you want. Thats it.

Previously:

Update (2022-12-01): See also: Hacker News.

iPhone Water Resistance Claims

Tim Hardwick (in 2020):

In marketing materials[…], Apple said its iPhones were water resistant at a depth of between one and four meters for up to 30 minutes, depending on the model.

However, according to [Italy]’s competition regulator, the messages did not clarify that the claims are only true under specific conditions, for example during controlled laboratory tests with the use of static and pure water, and not in the normal conditions of use by consumers.

The regulator also took issue with Apple’s warranty terms, which do not cover damage caused by liquids. The authority considered it inappropriate to push an “aggressive” commercial practice highlighting water resistance as a feature, while at the same time refusing to provide post-sales warranty assistance if the iPhone models in question suffer water damage.

Hartley Charlton (in February):

A federal judge in the U.S. has dismissed a proposed class-action lawsuit that accused Apple of misleading customers about the iPhone’s water resistance (via Reuters).

[…]

U.S. District Judge Denise Cote has ruled that while the plaintiffs plausibly alleged that Apple’s advertising could mislead some customers, they did not demonstrate that their iPhones were damaged by “liquid contact” Apple promised they could withstand. The judge also found no evidence of fraud, citing a lack of proof that Apple consciously intended to overstate its water-resistance claims for commercial gain.

[…]

According to Apple, water and dust resistance are not permanent conditions and can deteriorate over time as a result of normal wear. Apple’s warranty does not cover liquid damage, so it is best to exercise caution when it comes to liquid exposure.

Previously:

Thursday, November 3, 2022

Featured Section in TV App

Juli Clover:

Apple’s new design adds a Featured section to the top of the “Watch Now” section in the TV app, with the featured content placed above the “Up Next” watchlist. The change makes it more difficult for users to get to the content they are interested in, with random TV shows taking up the majority of the screen.

[…]

There are a number of complaints about the new design on Reddit from users who are unhappy with the way that Featured TV shows and movies supplant Up Next content. This section seems to display quite a few Apple TV+ shows and movies, but it does also highlight shows and movies from other streaming providers. Regardless of content shown, TV users do not seem to want suggested content replacing their chosen content at the forefront of the app.

Chance Miller:

This change appears to be a server-side update, although right now the majority of users noticing the change are running the tvOS 16.2 beta. The redesign was first spotted by Jon Maddox, one of the creators of excellent live TV, streaming, and DVR apps Channels.

[…]

Of course, it also helps those companies increase engagement by requiring them to scroll down to view the content they actually want to continue watching.

Jason Snell:

As someone who uses Up Next on an Apple TV every single day, pushing Up Next down to make room for stuff I didn’t choose is a spectacularly bad decision.

This is like Netflix taking the shows I’m watching and hiding them amid dozens of other titles. WTF.

Apple is far from the first company to do this sort of user-hostile behavior -- “don’t watch what you want, watch what we want you to” -- but I had hoped it would be a little better than the rest of the crowd.

Jack Wellborn:

It’s like they created a mythical user persona that loves to constantly browse and discover new content.

Here’s how my wife and I actually watch TV: At the end of an exhausting day of work and parenting a five-year-old, we watch ONE episode of a show we’re ALREADY watching.

Same. Yet we often have to search to get to the show. And the global Siri search often doesn’t find it, even though it correctly transcribed what was said.

Rene Ritchie:

Apple always had fierce arguments between customer experience and biz dev (marketing notifications, ad placements, promotional positioning…)

Difference is, the user experience side mostly won

Problem is, each loss seems digestible but eventually customer sat falls off a cliff

But in this case maybe they don’t care because there’s nowhere else for us to go.

Previously:

This new development is bad for a few reasons, starting with the fact that the Up Next list was the only part of the TV app interface that a user could really customize or control to plan their viewing experience—everything from being aware of the latest episode popping up online, to deciding you weren’t that interested in a show any longer. That personalization is important because the act of viewing TV is a personal experience in your living room.

This change pushes that off of the screen so the information isn’t even available to them at a glance without moving the interface down. This is another hostile layer, because remember that if you don’t subscribe to Apple TV+, the app will load with a splash screen telling you to subscribe to Apple TV+, and when that is dismissed it will deposit you on the Apple TV+ tab of the Apple TV app interface which you need to navigate away from to Watch Now. Now you need to go down, too.

[…]

What this really comes down to is respect. I do not feel respected as a customer when I see my Apple TV autoplaying an ad for Abbott Elementary in general when it knows exactly which episode is next for me in the series.

Jason Snell:

My friend John Siracusa put it perfectly: This ain’t it, Apple. I don’t mind you suggesting new shows for me to watch. But to prioritize them over my own preferences? I thought that you were better than that. I guess I was wrong.

Mac Keychain APIs and Implementations

TN3137:

The Keychain and SecKeychain APIs always target the file-based keychain. The SecItem API can target either implementation. It defaults to targeting the file-based keychain. […] The file-based keychain is on the road to deprecation.

[…]

The SecItem API is well aligned with the data protection keychain. However, when you use it to target the file-based keychain it operates through a shim. That shim has limitations. Some of those limitations are inherent to the keychain implementation. For example, the access control model of the file-based keychain is completely different than that of the data protection keychain, and the shim can’t make up for that. However, some limitations are just bugs. To avoid such problems, target the data protection keychain. This is particularly important when you’re porting keychain code from iOS.

[…]

The data protection keychain can hold all keychain item classes (Internet password, generic password, certificate, key). macOS 11 and later synchronize all classes; earlier versions synchronize only the password classes.

[…]

The Keychain Access application supports both file-based keychains and the data protection keychain. The keychain list shows all the file-based keychains in the search list for the current user—typically this is just login and System—and the data protection keychain.

Note that Keychain Access now requires manual access granting for additional keychain files that you ask it to open.

HazeOver 1.9.3

Maxim Ananov:

Too many windows to manage? Large display? Or sometimes getting lost in multiple monitors? HazeOver is for you! This app automatically highlights the front window by fading out all the background windows.

Via Andrew Abernathy:

I just learned about HazeOver for macOS ($2), and it’s so nice once again being able to tell which is the active window. Does require toggling in order to, say, compare two photos in different windows; I wish Apple would just make the active window clear.

Before Big Sur, I never had trouble telling which window was active.

Previously:

Live Activity Guidelines

Tim Hardwick:

On Monday, we learned that when following a sports event the Dynamic Island shows a live-updating scoreboard with the number of goals scored by each club on either side of the True Depth camera pill, which Apple refers to as a Live Activity’s “compact” presentation. When long pressed, the Dynamic Island expands to show the time elapsed and play-by-play action.

Since then, Apple has shared its Human Interface Guidelines (HIG) for app developers intending to support Live Activities, and one notable detail is that on iPhone 14 Pro models, users will be able to switch between two Live Activities using the Dynamic Island if they are following multiple tasks or events at the same time, thanks to a separate “minimal” presentation[…]

Apple:

Live Activities help people keep track of tasks and events that they care about, offering persistent locations for displaying information that updates frequently.

[…]

Avoid using a Live Activity to display ads or promotions. Live Activities help people stay informed about ongoing events and tasks, so it’s important to display only information that’s related to those events and tasks.

Nick Heer:

Apple once prohibited the use of Push Notifications to deliver ads, but developers abused it anyway. Notification ads are now permitted so long as users are allowed to opt out but, in practice, this rule does not seem to be enforced. […] A Live Activity would be the perfect way for an app like Doordash to update users’ on a delivery’s progress. Based on the company’s abuse of push notifications, I could not see myself enabling it.

Previously:

Wednesday, November 2, 2022

Ventura Bug Disables Security Software

Thomas Reed:

In the case of security software using Apple’s Endpoint Security framework, it is an Apple-enforced requirement that the software get a higher level of permission from TCC - namely, Full Disk Access.

[…]

Unfortunately, in Ventura, affected software will appear to have FDA within this settings pane, but in reality it does not. Worse, you cannot simply “turn it off and back on again,” as the switch for turning off FDA for the security software refuses to turn off. This leaves the software in an unfortunate state where it cannot function, and the user (seemingly) cannot give it the access it needs.

[…]

It all began with a bug in macOS that was presented by security researcher Csaba Fitzl[…]. The bug was almost ridiculously simple: Execute a simple, short command (tccutil reset All) in the Terminal and you could revoke Full Disk Access from all security clients installed on the machine, rendering their real-time protection features inactive.

[…]

In essence, Apple’s “fix” for this vulnerability ended up causing the results of the vulnerability, for all security software on all Ventura systems. 🤦‍♂️

Ventura Drops Older SSH Support

Richard Staats (via Charlie Stross):

The reason for this issue is that MacOS 13 ships with OpenSSH_9.0p1 which has disabled RSA signatures on SHA-1 hash algorithms. If upgrading OpenSSH on the server and/or regenerating your SSH key isn’t an option you can workaround this issue by adding the following to your ~/.ssh/config file[…]

Update (2022-12-01): Stefan Reitshamer:

If you’re using Arq 7 to connect to a macOS Ventura SFTP server and you’re getting the error “Username/PublicKey combination invalid”, it may be due to Ventura’s upgrade to OpenSSH 9.1.

The Raspberry Pi Ventura Problem

jimmo:

Apple appear to have implemented a change in “Ventura” to the way extended attributes are written which is causing it to fail on devices that present a “virtual” USB Mass Storage device.

Via Rui Carmo:

In short, macOS Ventura is the only operating system where you can’t program a Raspberry Pi Pico (and, potentially, any other board that supports MicroPython or CircuitPython, not just RP2040 ones) by just dragging files onto its virtual USB drive.

Like pretty much every single filesystem-related weirdness we’ve been subject to throughout the history of macOS, it may look like an edge case to the Finder team at Apple, but it is a breaking issue for anyone using their otherwise perfectly good Mac for a perfectly normal thing that just works on every other operating system.

See also: Alasdair Allan.

Apple’s Use of Swift and SwiftUI in iOS 16

Alexandre Colucci (tweet):

The number of binaries composing iOS continues to increase: iOS 16 contains 5403 binaries, up from 4738 in iOS 15. That’s 665 new binaries.

[…]

Without surprise, we can clearly confirm that some of the new iOS 16 features have been built using SwiftUI[…]

[…]

When performing this analysis, one number surprised me: iOS 16 only contains 4 apps using the SwiftUI-based app lifecycle[…]

[…]

Yet the Swift and SwiftUI adoption continues its exponential climb: iOS 16 contains 226 binaries using SwiftUI, which doubled the number from iOS 15. Likewise the number of binaries containing at least one line of Swift code increased consequently between iOS 15 and iOS 16[…]

Dave Verwer:

That said, Objective-C still dominates the iOS codebase, with it being a part of over 65% of all binaries, which should answer the question of how close Apple is to deprecating it.

[…]

It’s important to remember that going “all in” on SwiftUI isn’t necessary. Despite the famous message from this year’s keynote, the fastest and best way to write an iOS app today is with a mixture of technologies, and it appears that’s exactly what Apple is doing internally.

David Kopec:

It’s all about how you interpret data. You could read this as, “Wow, SwiftUI is doubling in number of binaries!” Or, you could read this as, “Wow, SwiftUI is growing the same as UIKit in absolute terms and will therefore never catch it.”

Previously:

Tuesday, November 1, 2022

Decker 1.0

John Earnest:

Decker builds on the legacy of HyperCard and the visual aesthetic of classic MacOS. It retains the simplicity and ease of learning that HyperCard provided, while adding many subtle and overt quality-of-life improvements, like deep undo history, support for scroll wheels and touchscreens, more modern keyboard navigation, and bulk editing operations.

[…]

For more complex projects, Decker features a novel scripting language named Lil which is strongly influenced by both Lua, an imperative language popular for embedding in tools and game engines, and Q, a functional language in the APL family used with time-series databases. Lil is easy to learn and conventional enough not to ruffle any feathers for users with prior programming experience, but also includes pleasant surprises like implicit scalar-vector arithmetic and an integrated SQL-like query language.

Via John Gruber:

Decker is astonishing. At first glance you might mistake it as shallow, a fun nostalgic gimmick. […] The whole thing is beautiful and fun and useful and so engaging that I literally had a dream about using it last night. I don’t know what I’m going to make with Decker but I’ll be damned if I’m not going to make something. It’s that inspiring.

[…]

The native Mac app is just 4 MB. It’s free of charge and open source, but Earnest is accepting voluntary payments on the downloads page.

John Earnest:

Decks are usually distributed through the web, and to users who have a web browser. By making the document format amenable to embedding inside a valid HTML document’s <script> tag (with the necessary considerations for escaping special character sequences), it is possible to distribute decks as operating system- and architecture-agnostic “self-executing” documents which can also be read and manipulated without a complete HTML parser.

[…]

Advanced users may want to edit their Lil scripts using their favorite text editor. The document format puts special emphasis on representing scripts with their whitespace intact and a minimum of escaped characters to facilitate this.

[…]

Building upon the above, advanced users may want to store and track decks using existing source-control systems. Documents therefore use a line-oriented format compatible with tools like diff and attempt, within reason, to reflect localized edits to a deck in localized changes to the file.

App Store Ads Gone Wild

John Gruber (tweet):

But how much money can these ads be generating? How much can Apple hope they eventually generate? It can’t possibly be enough money to justify the damage it’s doing to Apple’s brand.

[…]

“No ads in the App Store, period” would have been a powerful, appealing message. One that Apple could have used to justify its control over all software on the platform and its much-debated mandatory cut of all app and game transactions. “We sell ads in the App Store, but they’re OK because they don’t track you” seems to be the message Apple is going for, but that’s neither powerful nor appealing. It boils down to “Hey, it could be worse.”

Ryan Jones:

“OK because they don’t track you” accepts Apple’s self-defined esoteric definition of “track” as standard language.

I’m certain that’s not true.

I propose that “only we can track you” is technically correct and standard definitions.

John Gruber:

But there are aspects of Apple’s position on advertising eight years ago, unrelated to privacy, that don’t square with Apple’s position today. Cook has repeated variations of that “you’re not the customer, you’re the product” mantra umpteen times since 2014. But how are these ads in the App Store not making users the product, and advertisers the customers?

[…]

Apple’s business model is no longer the straightforward selling of great products, and these new ads in the App Store are not designed to make anything better other than Apple’s Services bottom line.

John Voorhees:

What happened shouldn’t surprise anyone who has even a passing familaritly with auction based ad models on the web. Of course these were the ads that would dominate the App Store.

Oliver Haslam:

Which, realistically, means Apple wasn’t surprised. Which means it knew what it was doing and ploughed on anyway.

The Talk Show:

Federico Viticci returns to the show to talk about iPads, Stage Manager, and Apple’s ill-considered foray into expanding ads in the App Store.

Previously:

Update (2022-11-09): Basic Apple Guy:

Fast forward to 2022, and I feel like the wool has been pulled over my eyes. Apple has slowly expanded the reach of ads across their platforms over the past several years, including now showing ads before their TV+ shows, allowing ads to be absolutely riddled throughout the News+ app (including videos), showing ads in the stocks app, promoting their services in the iOS settings app, not reprimanding third-party developers from using push notifications to display ads, showing ads in App Store search results, and most recently, showing ads on the front page and EVERY SINGLE app product page of the App Store. What’s more, there are rumours of more ads rolling out into Maps and Podcasts in the future.

[…]

What angers me about this trend is that many of the experiences I treasure are being devalued in order to prioritize more revenue.

IAP for NFTs

Apple (MacRumors):

Apps may use in-app purchase to sell and sell services related to non-fungible tokens (NFTs), such as minting, listing, and transferring. Apps may allow users to view their own NFTs, provided that NFT ownership does not unlock features or functionality within the app. Apps may allow users to browse NFT collections owned by others, provided that the apps may not include buttons, external links, or other calls to action that direct customers to purchasing mechanisms other than in-app purchase.

Jason L. Baptiste:

Apple is now the largest threat to Web3 with their most recent App Store Guidelines that they published today.

[…]

Token/NFT gated apps are dead. Doesn’t matter if bought on your own site.

[…]

Apple is now an enforcer of bit licenses for governments. If your bit license is called into question, Apple can remove you instantly without waiting for a court appeal.

[…]

You can’t just use IAP to offer something for let’s say $54.20 or $69.69. You have to use pre-set prices such as .99 or 14.99. Each price point is its own “items”, requiring its own approval. The tech literally cannot work for NFTs/marketplaces.

Tim Sweeney:

To cryptocurrency enthusiasts, this means Apple is now adding a 30% tax on your so-called “true ownership” of digital goods.

To crytocurrency detractors, this shows Apple’s motivations are only money. For digital items, they support NFTs they tax, and ban NFTs they don’t tax.

Matthew Ball:

A 30% tax on all trades of virtual goods means that, unless it appreciates 40% or more between trades, every transaction drives its value to $0, with Apple devouring all the value.

Buy a $1k skin, if you sell it at $1k, you’ve lost $300 and Apple has made $600, yet no value made

Florian Mueller:

The foregoing is clearly anti-innovative. For example, why shouldn’t it be possible for an app to unlock a feature or some additional content if someone scans a QR code at an event? It’s just that Apple generally prohibits it because otherwise there would be a risk to Apple that someone would bypass its app tax.

Previously:

IAP for Boosted Posts

Apple (MacRumors):

Advertising Management Apps: Apps for the sole purpose of allowing advertisers (persons or companies that advertise a product, service, or event) to purchase and manage advertising campaigns across media types (television, outdoor, websites, apps, etc.) do not need to use in-app purchase. These apps are intended for campaign management purposes and do not display the advertisements themselves. Digital purchases for content that is experienced or consumed in an app, including buying advertisements to display in the same app (such as sales of “boosts” for posts in a social media app) must use in-app purchase.

Alex Heath (Hacker News, MacRumors):

This primarily affects Facebook and Instagram, which let people pay to boost the reach of their posts. It’s the first time Apple has directly taxed advertising in iOS apps.

[…]

Meta is accurate to say that this policy on paid boosts is, at least publicly, an about-face from Apple. Last May, during the Epic v. Apple antitrust trial, App Store boss Phil Schiller testified that the company had never taken a cut of iOS developer ad revenue. Going forward, that won’t be true anymore.

Florian Mueller:

Apple’s in-app purchasing (IAP) system is not mandatory for pure Advertising Management Apps. For instance, the Google Ads app shows you how your campaign is going, and you can also make some modifications to a campaign or start a new campaign, and that is separate from IAP. But where Apple now imposes an app tax is if the purchase of a promotion such as a “boost” for a post is made in the very same app that displays it. You can “boost” tweets or Facebook posts within those apps, and so far that was not considered an IAP, but now it is.

Apparently, dating apps like Bumble have operated like that for some time. The difference is, of course, that generating more views of a profile on a dating website is functionally and commercially closer to a premium subscription or other premium feature of a dating app: it’s not a two-sided market, while there is a structural difference between the way in which a company promoting a tweet or Facebook post uses that platform as compared to the other side of that market, which is the huge number of people who read those posts or write their own without an intent to ever pay for promotion. In other words, on dating apps everybody is dating and a boost is just dating on steroids, but on Twitter or Facebook, it’s not like everybody is advertising.

Big-budget advertisers will not be affected, or at least not in most of those situations, as they will use dedicated advertising apps. But small businesses will often just pay for boosting a social media post, and they will normally do it where they post. Without them even knowing, they will further enrich Apple. They won’t know as Apple prohibits that app developers tell customers the truth and make them aware of a less expensive alternative to get the same service.

See also: Dithering.

Previously: