Friday, February 3, 2023

Competition in the Mobile Application Ecosystem

Ben Lovejoy:

The White House asked the National Telecommunications and Information Administration to investigate, and Axios reports that it also concluded antitrust legislation is required.

The NTIA’s report is here (PDF).

Jon Brodkin:

The Biden administration wants major changes to the Apple and Google mobile app models, saying the companies “act as gatekeepers over the apps that people and businesses rely on” and enforce policies that “have the potential to harm consumers by inflating prices and reducing innovation.”

An analysis of the market and recommendations for lawmakers and regulators were issued today in a report by the Department of Commerce’s National Telecommunications and Information Administration (NTIA). The report was required by President Biden’s 2021 executive order on competition and touted by the White House today as being part of “new progress on his competition agenda.”

The NTIA concluded that “consumers largely can’t get apps outside of the app store model, controlled by Apple and Google,” and that “Apple and Google create hurdles for developers to compete for consumers by imposing technical limits, such as restricting how apps can function or requiring developers to go through slow and opaque review processes.”

Hartley Charlton:

On the basis of the investigation’s findings, the report recommends:

  • Third-party app stores should be permitted and users should not be prevented from sideloading apps outside a gatekeeper’s own app store. Legislative and regulatory measures should prohibit restrictions on sideloading, alternative app stores, and web apps.
  • Requirements that ban developers from using alternative in-app payment systems should be banned.
  • Third-party web browser apps should be able to offer full functionality and not face browser engine restrictions.
  • Pre-installed apps, default options, and anticompetitive self-preferencing should be limited, including in search results.
  • Users should be able to choose their own apps as defaults and delete or hide pre-installed apps.
  • App store review processes should be more transparent.

Florian Mueller:

It’s suboptimal, though, and I don’t just mean the fact that there are various typos (unusually many for a government document). As an app developer who tried to make a game work as a web app (and found the results extremely dissatisfactory), I believe the part about web apps could have raised several additional issues.

There are quotes from ACT | The App Association (again, it’s actually an Apple Association) and the R Street Institute that argue small app developers benefit from the trust that end users place in apps they download from curated stores. First, if they trust an Apple or Google store, why wouldn’t they also trust a Microsoft, Amazon, or Meta store? Second, independent software vendors (ISVs) have historically had great opportunities on open systems like Windows and the Mac (which compared to iOS is pretty open, though Apple may change that step by step). It’s not like mobile app stores were needed so the little guys had a chance to succeed. I’m extremely cautious about what I download to my Windows computers (desktop and notebook) and never installed any malware (nothing was found whenever I scanned, and nothing ever happened that suggested the presence of malware), but even I install software from small developers: I’m just careful about where I obtain it from, but that doesn’t mean I trust only Microsoft’s own store.


Designing Swift’s Macros Feature

Doug Gregor:

Swift folks, we’re busy working on a macros for the Swift language and would love your thoughts. It’s a big feature with a lot of details that need to be right.


As things are starting to work in the prototype, we’re putting them into a sample repository with a couple of different kinds of macros. These demonstrate different aspects of macros, from the kind of code you can generate to how you handle errors. The repository is here.

Swift Macros Dashboard:

This gist provides a “dashboard” with links to the various documents and example projects that are part of the Swift Macros effort.


Touchability, Productivity, and Portability — Pick Two

Federico Viticci:

In simpler terms: what happens if you prefer the Apple ecosystem for UI and UX but you’re feeling hamstrung by it at the same time?


The problem is that an iPad, at least for people like me, isn’t supposed to be a companion to work that happens somewhere else. It is the work. And ultimately, I think it’s fair to demand efficiency from a machine that is supposed to make you productive. I feel this every time Stage Manager doesn’t let me place windows where I want on an external display; every time I can’t place more than four windows in a workspace; every time I can’t record podcasts like I can on a Mac; every time a website doesn’t work quite right like it does on a desktop; I feel it, over a decade into the iPad’s existence, when developers like Rogue Amoeba or Raycast can’t bring their software to iPadOS.


Maybe this has been true for a while and Stage Manager was the proverbial straw that broke the camel’s back. You can’t separate art from the technology, but, at the end of the day, there’s also work to be done.

Jack Wellborn:

It’s foolishly optimistic to think that Microsoft or even Apple can make pointer interfaces as touch friendly as iPadOS without also destroying the very thing that makes them more productive than iPadOS — information density. Smaller controls means these platforms can disclose more information and interactivity to their users at once. That’s why a bunch of windows on even a 11″ MacBook Air feels natural while only four windows on a “large” 13″ iPad feels ungainly.

Conversely, it’s impossible to make iPadOS more information dense without sacrificing the very thing that makes it the best tablet OS — touch friendliness. iPad users want more information on screen because that will help them be more productive, but the only way to present more information in iPadOS without sacrificing touch friendliness is a larger display. Not only is a larger display not portable, iPadOS’s support for larger displays still sucks. There’s nothing Apple can do about large displays not being portable, but better support for larger displays? That’s a problem Apple can solve.


Apple’s Q1 2023 Results

Apple (transcript, Hacker News, MacRumors):

The Company posted quarterly revenue of $117.2 billion, down 5 percent year over year, and quarterly earnings per diluted share of $1.88.


“We set an all-time revenue record of $20.8 billion in our Services business, and in spite of a difficult macroeconomic environment and significant supply constraints, we grew total company revenue on a constant currency basis,” said Luca Maestri, Apple’s CFO.

Jason Snell:

Again, total profit was the second-most ever at $30 billion but it’s down from last year.


By all accounts, Apple originally intended to have new MacBook Pro and Mac mini models ready to go during this quarter, but those releases were delayed until this month. With no new Macs in the offing at all, Mac sales took a big hit, down 29 percent year-over-year.


Honestly, given that Apple warned of iPhone production problems that would prevent the company from meeting demand, being down only 8% year over year strikes me as being a bit of a relief.

Jason Snell:

Since the iPad is taking a victory lap, let me hit you with a few other iPad tidbits. It’s the first time the iPad has sold better than the Mac in a quarter in seven years. And it’s the biggest iPad quarter by revenue in nine years. The iPad is, at this point, basically a $32 billion a year business for Apple, when just a few years ago, it looked like it might be worth $20 billion at most. Sure, we might look at that janky Apple Pencil adapter on the 9th-generation iPad and at the aging design of the iPad Pro and wonder what’s up with the hardware design, but the numbers don’t lie.

John Voorhees:

The year-over-year decline was driven by multiple factors, including:

  • Shortages of iPhone 14 Pro and Pro Max caused by COVID lockdowns in China
  • Soft consumer demand resulting from worldwide inflationary pressure
  • Adverse effects caused by foreign currency exchange rates

Although Apple did not forecast results for Q1 2023 during its last earnings call, the company warned in November that production disruptions would impact shipments, so the declines today should not be a shock.


Thursday, February 2, 2023

ChatGPT Plus

OpenAI (Hacker News):

The new subscription plan, ChatGPT Plus, will be available for $20/month, and subscribers will receive a number of benefits:

  • General access to ChatGPT, even during peak times
  • Faster response times
  • Priority access to new features and improvements

Johan Lajili (via Hacker News):

Whereas you might think “well, if it’s not broken don’t fix it”, I believe the web as a way to access information is getting worse by the day. Content generated with GPT-3 is going to start to show up for every long tail search under the sun, whereas regular content is going to get even heavier with SEO keyword to survive. The web is going to get worse and worse, and the only way to get good information is with a system that can extract the signal from the noise, a.k.a ChatGPT.

Arvind Narayanan and Sayash Kapoor (via Hacker News):

The philosopher Harry Frankfurt defined bullshit as speech that is intended to persuade without regard for the truth. By this measure, OpenAI’s new chatbot ChatGPT is the greatest bullshitter ever. Large Language Models (LLMs) are trained to produce plausible text, not true statements. ChatGPT is shockingly good at sounding convincing on any conceivable topic. But OpenAI is clear that there is no source of truth during training. That means that using ChatGPT in its current form would be a bad idea for applications like education or answering health questions. Even though the bot often gives excellent answers, sometimes it fails badly. And it’s always convincing, so it’s hard to tell the difference.

Yet, there are three kinds of tasks for which ChatGPT and other LLMs can be extremely useful, despite their inability to discern truth in general:

  1. Tasks where it’s easy for the user to check if the bot’s answer is correct, such as debugging help.

  2. Tasks where truth is irrelevant, such as writing fiction.

  3. Tasks for which there does in fact exist a subset of the training data that acts as a source of truth, such as language translation.


Twitter to Charge for API

Twitter Dev (Hacker News):

Starting February 9, we will no longer support free access to the Twitter API, both v2 and v1.1. A paid basic tier will be available instead.


We’ll be back with more details on what you can expect next week.

At present, I would pay a reasonable fee to keep using Twitter with NetNewsWire and IFTTT. That may change if the people I follow continue to leave the platform. And I think this may be shortsighted in that a free API encourages people to do things that make the platform more valuable.

As with other recent Twitter changes, it’s rude to announce this with so little notice—and no details.

Nick Heer:

As usual for the new Twitter, there are no details about what this means and no coordination among what is left of its teams — its developer site proudly still says it permits “free access”.

Eric Schwarz:

Although third-party clients have been gone for awhile, this will most likely kill automated posting tools. That’s been used for years on this site and it’s just not worth the money to pay for API access. It’s also a pretty bold move for Twitter to think that publications, especially smaller ones, should pay to generate content for their site even if it ultimately brings eyeballs to the destination sites. In addition to that, tools that allow you to delete your tweets or create things outside of simple posting will also go away.

Jeffrey Zeldman:

Here comes the punchline: one day Twitter emailed me to say that my Twitter Blue account was being discontinued, but I would soon have the opportunity to pay for an exciting new version of Twitter Blue.

Then Twitter emailed me inviting me to roll over my credit card so as to become a member of the new Twitter Blue. Which made me wonder: do I continue to go by the principle of paying for software I use, even when I disapprove of the direction in which a new owner is taking the platform? Or do I register my dislike of that direction by refusing to pay, even if it accelerates the death of the platform? (Whereas I was still hoping for the platform to survive and right itself, no pun intended.)

In the end, and I know I’ll lose many of you here, I decided to keep paying. And now the promised punchline: Twitter was unable to accept my credit card, and the subscription failed.


Update (2023-02-03): Ged Maheux:

Just amazing how far Musk has moved the goal posts so that giving Twitter devs a single week’s notice before their app/service is rendered inoperable is now considered an “improvement”. 🤬

Elon Musk:

Yeah, free API is being abused badly right now by bot scammers & opinion manipulators. There’s no verification process or cost, so easy to spin up 100k bots to do bad things.

Just ~$100/month for API access with ID verification will clean things up greatly.

If that’s the real motiviation, they should make the read-only parts of the API free.

Thomas Reed:

Musk is teaching a mastery-level class in how not to manage relationships with third-party developers.

Michael Love:

Twitter blocking Movetodon over unspecified violations[…]

Wednesday, February 1, 2023

The State of Enthusiast Apps on Android

Matt Birchler:

I recently commented on Mastodon that I thought when it comes to third party apps, iOS is remarkably far ahead of Android. My feeling is that you can take the best app in a category on Android, and that would be the 3rd to 5th best app in that category on iOS.


This app (again, in beta) is way behind apps like Reeder, Unread, and NetNewsWire in both functionality and design.

This app was presented to me as an example of how Android apps are better than iOS apps, and it instead made me more confident in my opinion.

John Gruber (Hacker News):

Whilst we iOS users celebrate the recent releases of Thomas Ricouard’s Ice Cubes, Tapbots’s Ivory, and Tusker, and look forward to the imminent release of other new Mastodon clients like Shihab Mehboob’s Mammoth, over on Mastodon I asked what the best clients for Android are.

Long story short: crickets chirping.

The app that got the most recommendations is Tusky, an open-source client available free of charge. It’s fine, and for now, it’s what I’ve got on my home screen on my Pixel 4. But if Tusky were an iOS app, it wouldn’t make the top 5 for Mastodon clients.


Update (2023-02-03): John Gruber:

Android enthusiasts don’t want to hear it, but from a design perspective, the apps on Android suck. They may not suck from a feature perspective (but they often do), but they’re aesthetically unpolished and poorly designed even from a “design is how it works” perspective. (E.g., Read You doesn’t offer unread counts for folders, has a bizarrely information-sparse layout, and its only supported sync service was deprecated in 2014. It also requires a frightening number of system permissions to run, including the ability to launch at startup and run in the background.) And as I wrote yesterday, the cultural chasm between the two mobile platforms is growing, not shrinking. I’ve been keeping a toe dipped in the Android market since I bought a Nexus One in 2010, and the difference in production values between the top apps in any given category has never been greater between Android and iOS. And that’s just talking about phone apps, leaving aside the deplorable state of tablet apps on Android.


Of course there are Android users and developers who do see how crude the UIs are for that platform’s best-of-breed apps. But we’re left with two entirely different ecosystems with entirely different cultural values — nothing like (to re-use my example from yesterday) the Coke-vs.-Pepsi state of affairs in console gaming platforms.

Steven Aquino:

iOS apps may attract more software aesthetes, but it’s also the case accessibility on iOS is far more expansive and polished than on Android. This isn’t to say Google ships inaccessible crap or cares less, but they certainly don’t match the breadth and depth Apple provides. This is well known in a11y circles. Not a trivial matter.

Nicolas Magand:

Outside of Google’s own apps and others from big tech companies, apps on Android are generally terrible. Feature-wise they do the job, they are stable enough, not too buggy, decently integrated with the OS, but they are either ugly, weird, or both.

Federico Viticci (Mastodon):

To say that I found the ecosystem worse than I remembered would be an understatement.


I do appreciate the greater freedom Android grants power users who care about aspects such as split-screen multitasking, total control over default apps, or theming. But the whole experience feels fragmented, and as a result crude, when it comes to using your phone with apps in everyday life. The general baseline of quality for design and expected system features is simply higher on iOS.

Bypassing iOS 16.2 Location Privacy

Rodrigo Ghedin:

iFood, Brazilian largest food delivering app evaluated at USD 5.4 billion, was accessing his location when not open/in use, bypassing an iOS setting that restrict an app’s access to certain phone’s features. Even when the reader completely denied location access to it, iFood’s app continued to access his phone’s location.


An educated guess was revealed by iOS 16.3 release notes, launched on January 23th. Apple mentions a security issue in Maps in that “an app may be able to bypass Privacy preferences”.

Via Nick Heer:

I do not want to spread fear or uncertainty, but it is hard to believe iFood would be the only app interested in using location data even if the user has opted out of it. There were several privacy-related bugs fixed in this most recent round of operating system updates.

John Gruber:

If the iFood app was really doing this, why is it still in the App Store? If circumventing location privacy by exploiting a bug doesn’t get you kicked out of the store, what does?


Pausing Finder Copies and Dragging to the App Switcher

Tim Hardwick:

When you copy a large file or folder to another location in Finder using the Copy and Paste options, a pie chart progress indicator next to the copying item’s name gives you an idea of how long the copy will take to complete. If it looks like it’s going to take longer than you’d like, you can always pause the copy and resume it later.


An oft-overlooked function of the App Switcher is its ability to open files. Simply begin to drag a file from a Finder window, then invoke the App Switcher and drag the file onto the relevant app icon in the overlay. Let go of the file and it should open in the selected app.

This is a good list of some less commonly mentioned tips.

Renewing the App Store Small Business Program

Greg Pierce:

I got an email from Apple saying I’m eligible for the Small Business Program–which I am already in. Do we need to re-apply?

So did I, though I don’t recall getting such an e-mail last year. There doesn’t seem to be a place to actually check your status, so of course I re-applied. I’m guessing that Apple sent a mass e-mail without bothering to scope it to those not already in the program, but now they’ll have to process lots of duplicate applications.

Jesse Squires:

Wouldn’t it be nice if App Store Connect showed some kind of “small business program” badge or other visual indicator of your status?

Instead, I see developers talking about back-calculating Apple’s fee from their financial reports to see whether they’re still in the program.


Update (2023-02-03): John Siracusa:

I had to email Apple to find out if I was still enrolled in the Small Business Program. (If it’s anywhere on any website, I couldn’t find it, and the person who answered my email at Apple didn’t tell me where I could have found it myself.) The result: I am still enrolled, despite getting that email about the program.

Tuesday, January 31, 2023

Disk Mount Conditioner

Peter Hosey:

TIL about Disk Mount Conditioner, a macOS feature like the Network Link Conditioner but for file I/O. Throttle throughput or add latency to make a device behave like something slower. See man dmc(1) for details.


The Disk Mount Conditioner is a kernel provided service that can degrade the disk I/O being issued to specific mount points, providing the illusion that the I/O is executing on a slower device. It can also cause the conditioned mount point to advertise itself as a different device type, e.g. the disk type of an SSD could be set to an HDD. This behavior consequently changes various parameters such as read-ahead settings, disk I/O throttling, etc., which normally have different behavior depending on the underlying device type.


CNET’s AI-powered SEO Money Machine

Mia Sato and James Vincent:

CNET is the subject of a swirling controversy around the use of AI in publishing, and it’s Jaffe’s team that’s been at the center of it all. Last week, Futurism reported that the website had been quietly publishing articles written using artificial intelligence tools. Over 70 articles have appeared with the byline “CNET Money Staff” since November, but an editorial note about a robot generating those stories was only visible if readers did a little clicking around.


Daily mortgage rate stories might seem out of place on CNET, slotted between MacBook reviews and tech news. But for CNET parent company Red Ventures, this SEO-friendly content is the point.


This type of SEO farming can be massively lucrative. Digital marketers have built an entireindustry on top of credit card affiliate links, from which they then earn a generous profit. Various affiliate industry sites estimate the bounty for a credit card signup to be around $250 each. A 2021 New York Timesstory on Red Ventures pegged it even higher, at up to $900 per card.

Via Nick Heer:

It seems to me there are actually two controversies here. The first is the publication of miserable articles generated by some computer program, but these are all bland crappy articles that nobody should be reading. The second concern is, I think, much worse: these are financial articles often presented as advice — on a technology news website, no less — which are designed to exploit search engines to get extraordinary kickbacks.


Reverse Engineering the MacBook Clamshell Mode

Alin Panaitiu:

You notice you never use the MacBook built-in display anymore, and it nags you to have it in your lower peripheral vision.

Closing the lid is not an option because you still use the keyboard and trackpad, maybe even the webcam and TouchID from time to time.


Why isn’t there a way to actually disable this screen?


In the pre-chunky-MacBook-Pro-with-notch era, the lid was detected as being closed using magnets in the lid, and some hall effect sensors. So you were able to trick macOS into thinking the lid was closed by simply placing two powerful magnets at its sides.


I usually search for code on SourceGraph as it has indexed some large macOS repos with dyld dumps. Looking for RequestClamshellState gives us something far more interesting though[…]

But to call the private API he needed private entitlements, which must be signed by Apple, unless that check is disabled after turning off System Integrity Protection. Even then he ran into a blocker. Still, it’s an interesting tour through how to dig into macOS.

Disabling the MacBook Screen Lock Key

Mark Dominus:

If you tap the mystery button momentarily, the screen locks, which is very convenient, I guess, if you have to pee a lot. But they put the mystery button right above the delete key, and several times a day I fat-finger the delete key, tap the corner of the mystery button, and the screen locks. Then I have to stop what I am doing and type in my password to unlock the screen again.


This question was tough to search for. I found a lot of questions about disabling touch ID, about configuring the touch ID key to lock the screen, basically every possible incorrect permutation of what I actually wanted. I did eventually find what I wanted on Stack Exchange and on Quora — but no useful answers.


The key to the mystery was provided by Roslyn Chu. She suggested this page from 2014 which has an incantation that worked back in ancient times. That incantation didn’t work on my computer, but it put me on the trail to the right one.


defaults write DisableScreenLockImmediate -bool yes

Update (2023-02-01): Robin Kunde:

I actually want to use the button to lock the screen, but for me it is too unreliable. It locks only half the times I press it, and if I rest my finger too long after pressing, Touch ID immediately unlocks the screen again.

Monday, January 30, 2023

Using JavaScript in a Swift App

Douglas Hill:

If you’re writing an iOS app using Swift and trying to solve a problem you’re sure has been solved before, you may look for existing code that solves that problem. It’s likely you’ll first think of looking for open source code written in Swift[…] However, we don’t need to limit ourselves to Swift. […] In this article, we’ll look at how to call JavaScript code from Swift using JavaScriptCore.


This sort of code is inviting code injection security vulnerabilities. Instead, we can set our input URL as a variable in the JavaScript environment and then reference it by name.

JSContext lets us read variables (in Swift) from JavaScript using objectForKeyedSubscript(_:) and set variables using setObject(_:forKeyedSubscript). Oddly, this API is nicer to use in Objective-C since these map to subscript syntax so you can read and set values like in a dictionary. Subscript syntax doesn’t seem to work in Swift here.

Safari Safe Browsing Blocks GitLab in Hong Kong

Sam Biddle (tweet, via Tim Sweeney):

When Safari users in Hong Kong recently tried to load the popular code-sharing website GitLab, they received a strange warning instead: Apple’s browser was blocking the site for their own safety. The access was temporarily cut off thanks to Apple’s use of a Chinese corporate website blacklist, which resulted in the innocuous site being flagged as a purveyor of misinformation. Neither Tencent, the massive Chinese firm behind the web filter, nor Apple will say how or why the site was censored.


The episode raises thorny questions about privatized censorship done in the name of “safety” — questions that neither company seems interested in answering: How does Tencent decide what’s blocked? Does Apple have any role? Does Apple condone Tencent’s blacklist practices?


The block came as a particular surprise to Ka-cheong and other Hong Kong residents because Apple originally said the Tencent blocklist would be used only for Safari users inside mainland China. According to a review of the Internet Archive, however, sometime after November 24, 2022, Apple quietly edited its Safari privacy policy to note that the Tencent blacklist would be used for devices in Hong Kong as well. (Haija, the Apple spokesperson, did not respond when asked when or why Apple expanded the use of Tencent’s filter to Hong Kong.)


The block on GitLab would not be the first time Tencent deemed a foreign website “dangerous” for apparently ideological reasons. In 2020, attempts to visit the official website of Notepad++, a text editor app whose French developer had previously issued a statement of solidarity with Hong Kong dissidents, were blocked for users of Tencent web browsers, again citing safety.


Switching on iCloud Photos

Matthias Gansrigler:

65 photos were unable to upload, according to Photos on my Mac. Why? I couldn’t honestly tell you. Photos didn’t tell me. It should have, if you ask me. I’d have liked to know. And there’s no way to retry to sync those photos with iCloud. They’re just in the “Unable to Upload” smart-album forever.

Albeit, a bit of online research reveals an Apple support document with one of the weirdest and Apple-unlike solutions to a problem I’ve ever come across:

Step 1: Export the photos in question “unmodified” to a folder on your disk.
Step 2: Delete them from Photos (scary)
Step 3: Import those photos you just exported into Photos again to retry their syncing.

It worked (mostly), but still, why can’t I just do this in Photos itself?


An interesting tidbit: All my synced devices show a different photo count.


DOJ Accuses Google of Abusing Ads Monopoly

David McCabe and Nico Grant (via Hacker News):

The Justice Department and a group of states sued Google on Tuesday, accusing it of illegally abusing a monopoly over the technology that powers online advertising, in the agency’s first antitrust lawsuit against a tech giant under President Biden and an escalation in legal pressure on one of the world’s biggest internet companies.

The lawsuit said Google had “corrupted legitimate competition in the ad tech industry by engaging in a systematic campaign to seize control of the wide swath of high-tech tools used by publishers, advertisers and brokers, to facilitate digital advertising.” The lawsuit asked the U.S. District Court for the Eastern District of Virginia to force Google to sell its suite of ad technology products and stop the company from engaging in allegedly anticompetitive practices.


NSURLSession Connection Leak

Jeff Johnson:

What it doesn’t tell you is that if you don’t invalidate the session (via finishTasksAndInvalidate or invalidateAndCancel), then the internet connection created by the session remains open until the app terminates, even after the delegate method URLSession:task:didCompleteWithError: has been called, and even after the app’s code no longer has a strong reference to the session. It’s more than just a potential memory leak.


The NSURLSession API seems peculiar, because you would expect URLSession:task:didCompleteWithError: to be, you know, the end. Shouldn’t you be able to freely (pun intended) dispose of the connection at that point? The reality, however, is that you need to invalidate every used session.

Friday, January 27, 2023

SwiftUI in App

Bardi Golriz:

It took a few hours to fall in love with SwiftUI. So much so that we instantly decided to abandon a cross-platform codebase and go fully native on iOS. […] Towards the latter stages of development, we even re-considered our decision to go with it. At the end, we didn’t drop it for a couple of reasons. We were too deep into the process. Being a bootstrapped operation that was already severely behind schedule, we couldn’t afford to restart. But this wasn’t why. Despite the regular friction, we still loved it. Because like any commitment, you must let the majority rule. It was fun at least 51% of the time. But let’s talk about the <= 49% that wasn’t.


[ScrollView] was the control that we wrestled with the most. An infinite scroll is expected in a calendar app. Executing this was relatively straightforward, but only moving forward in time. Because trying to load items on demand scrolling up resulted in a noticeable jitter. I asked on StackOverflow, and 2k views since, it’s apparent there’s no native approach that works. I actually raised this in a WWDC lab with a SwiftUI engineer last year, and their recommendation was to 1) create a LazyVStack with a ridiculously large data set in both directions and 2) scroll to today onAppear. A creative workaround, except unfortunately scrollTo behaves unreliably inside a LazyVStack. It would usually not even come close to the intended target, occassionally missed it by a little, and rarely correctly.


Views will refresh unnecessarily. And in a calendar with an infinite scroll, this will lead to noticeable slowdowns. You’re always literally one @Published property away from triggering one.


Finally, in case I forget again, remember an @EnvironmentObject will trigger a view update even if the view has no reference to any of its properties. An inexpensive way to determine unnecessary redraws is by setting the background colour of a view to Color.random, a clever trick by Peter Steinberger.


when you are editing an entry, we want the title field’s cursor position to be at the beginning. But, alas, not possible.


Update (2023-01-30): See also: Hacker News.

Weather Machine

Electric Dream Machine:

Weather APIs are notoriously complicated—every vendor offers their own proprietary data structures, unit types, and request formats. With Weather Machine, you can write just one integration and get highly accurate global forecasts from The Weather Company, AccuWeather, AerisWeather, and many other sources.


Dark Sky’s single-response JSON format remains the gold standard for developer friendliness. Weather Machine makes every data source drop-in compatible with Dark Sky’s API, so you can switch over in minutes.


Weather Machine is the underlying platform that we built to power our own weather app, Hello Weather.


The Enshittification of All Things

Cory Doctorow:

Here is how platforms die: first, they are good to their users; then they abuse their users to make things better for their business customers; finally, they abuse those business customers to claw back all the value for themselves. Then, they die.

I call this enshittification, and it is a seemingly inevitable consequence arising from the combination of the ease of changing how a platform allocates value, combined with the nature of a “two sided market,” where a platform sits between buyers and sellers, hold each hostage to the other, raking off an ever-larger share of the value that passes between them.


This is enshittification: surpluses are first directed to users; then, once they’re locked in, surpluses go to suppliers; then once they’re locked in, the surplus is handed to shareholders and the platform becomes a useless pile of shit. From mobile app stores to Steam, from Facebook to Twitter, this is the enshittification lifecycle.


These videos go into Tiktok users’ ForYou feeds, which Tiktok misleadingly describes as being populated by videos “ranked by an algorithm that predicts your interests based on your behavior in the app.” In reality, For You is only sometimes composed of videos that Tiktok thinks will add value to your experience – the rest of the time, it’s full of videos that Tiktok has inserted in order to make creators think that Tiktok is a great place to reach an audience.

Mike Masnick (via Old Unix Geek, Jason Kottke):

We recently wrote about Cory Doctorow’s great article on how the “enshittification” of social media (mainly Facebook and Twitter) was helping to lower the “switching costs” for people to try something new.


And this, quite frequently, leads to the process that Cory lays out in his enshittification gravity well. Because once you’ve gone public, even if you have executives who still want to focus on pleasing users and customers, eventually any public company is also going to have other executives, often with Wall Street experience, who talk about the importance of keeping Wall Street happy.


But one of the major problems with this that I’ve discussed for years is that even if you believe (ridiculously) that your only goal is to increase profits for shareholders, that leaves out one very important variable: over what time frame?


For years, Tim O’Reilly has (correctly) argued that good companies should “create more value than they capture.” The idea here is pretty straightforward: if you have a surplus, and you share more of it with others (users and partners) that’s actually better for your long term viability, as there’s more and more of a reason for those users, partners, customers, etc. to keep doing business with you.


This is one of the reasons that both Cory and I keep talking about the importance of interoperability. It not only allows users to break out of silos where this is happening, but it helps combat the enshittification process. It forces companies to remain focused on providing value and surplus, to their users, rather than chasing Wall Street’s latest demands.

Eric Schwarz:

It’s a bit depressing because I can make a list of web sites, stores, services, etc. that I can go back and say, “Man, remember when x was good? I miss that.”

Michael Simmons:

Spotify is a vastly superior experience to Apple Music, which shows Apple doesn’t need to innovate their services and can rely on a user base that believes anything “Apple” is superior even when it’s not. Apple Music’s slow performance and lack of device handoff says it all.


Apple Appeals UK CMA Decision

Florian Mueller:

On Friday the UK Competition Appeal Tribunal (CAT) published a summary of application (PDF) of Apple’s January 18, 2023 appeal of the November 22, 2022 decision of the UK Competition & Markets Authority (CMA) to make a market investigation reference (MIR) into the markets for mobile browsers (particularly browser engines) and for the distribution of cloud gaming services. The court also announced that the initial case management conference would be held on Tuesday, January 24.

Ben Lovejoy:

Even more crazily, this is the second time that a single word has had a major impact on potential action against the Cupertino company on the very same issues.

The first time came down to the legal difference between an antitrust “study” and an “investigation,” and this time it all hinges on the legal meaning of the word “shall” …

If Apple can win on this procedural technicality, it raises the burden of proof on the CMA for the substantive issues.

See also: Hacker News.


Thursday, January 26, 2023

Standard Mac User Accounts

Howard Oakley:

There are a few unexpected features that aren’t available to the normal user, of which the most irksome is accessing the log.


A traditional argument in favour of running as a normal user is that it separates your data from the system, and from other users. Thankfully, in all recent versions of macOS, you don’t need this any more: macOS is tucked away on a read-only snapshot on your System volume, and Privacy & Security work just the same whether you’re an admin or normal user.


All built-in macOS security protection applies equally to all users, regardless of their privileges.

Even with an admin account, I get prompted for my password all the time. So, these days, it seems like standard accounts are mostly useful for when the administrator is a different person from the user, who is to be prevented from changing settings or installing certain software. The old recommendation—which I didn’t follow—of having the administrator use a standard account most of time makes even less sense now.

What Happened to Virtual Memory?


Your system has run out of application memory.

To avoid problems with your computer, quit any applications you are not using.

Jason Koebler:

why do people pretend like RAM is somehow not important on Apple Silicon? I have a $2,000 14" 2021 MBP with 16 gb RAM and I’m regularly getting notices my computer can’t run bc not enough system memory with not that much stuff open[…]

meanwhile I have a 2017 iMac that I installed 32 gb of RAM on myself with a garbage processor but that generally runs large numbers of programs/tabs better than this MBP.

I’ve never quite known what this error means. I’ve been using macOS since the beginning and don’t recall ever seeing it until the later years of using my 2017 iMac. It had 40 GB of RAM, and when I would get this error it never seemed like applications were using a huge amount of memory. Sometimes it looked like the kernel was using 10 GB or so. Even so, how can the system be out of memory when it supports virtual memory and the boot drive has 100 GB of free space?

Meanwhile, my 2022 MacBook Pro has only 32 GB of RAM, and I don’t think it has ever shown this error message. My guess is that this is because the MacBook Pro has a larger SSD and the iMac was in fact running out of space. Perhaps it’s just more confusion caused by displaying purgeable space—that will not actually be automatically purged—as though it’s free.


SwiftUI Views Are Lists

Chris Eidhof (Mastodon):

When you write SwiftUI, all your views conform to the View protocol. The name of this protocol is a bit misleading: it could be called Views or ViewList, or something else that suggests plurals.


As mentioned, the Layout protocol lets you work with these view lists directly as of iOS 16 and macOS 13. You can also use variadic views — a non-public, but stable API — to loop over view lists. The variadic view API is really powerful (for example, you can write things like filter, map and reduce on view lists) but also quite low-level. I have a gist here with some examples, and plan to also write this up soon.


Update (2023-01-27): Chris Eidhof:

To deal with these lists of views (e.g. during layout) we can use the underscored variadic view API.

Missing Tweets

Lora Kolodny (Hacker News):

Twitter’s full-time headcount has dwindled to approximately 1,300 active, working employees, including fewer than 550 full-time engineers by title, according to internal records viewed by CNBC.


Musk has contradicted the internal records obtained by CNBC in a series of tweets, and claimed that Twitter now has about 2,300 full-time working employees and thousands of contractors. CNBC contacted Twitter for clarification and comment but did not immediately hear back.


Before Musk led a $44 billion leveraged buyout of Twitter last year, Twitter’s headcount stood at about 7,500 employees. Layoffs were rumored internally and expected to take place whether Musk’s takeover went through or not. However, Musk has cut Twitter personnel far more than many expected — or by about 80% according to the internal records and two recent employees who spoke with CNBC.

David Frum:

On my computer, I am checking the latest tweets by people I follow. On my phone, I’m checking whether their most recent tweets are showing up in the “Following” column. I’m just getting started, but even in the first dozen cases, Twitter failed to show me an absolute majority of the tweets I had requested to see.

John Gruber:

With Twitter now, there’s no indication that you’re missing tweets — let alone a huge number of tweets.


Here’s a speculative thread explaining what might be going on — sounds like a very solid guess to me. In short: after cutting back on servers and entire data centers, Twitter can no longer keep up with its own content.


At this writing I see a grand total of one mention for my account going back to January 5. My Twitter mentions are nearly completely useless.

Dave Mark:

Totally agree with his take. Something fundamental on Twitter is breaking. 😐


Lisa Source Code on 40th Anniversary

Benj Edwards (MacRumors):

As part of the Apple Lisa’s 40th birthday celebrations, the Computer History Museum has released the source code for Lisa OS version 3.1 under an Apple Academic License Agreement. With Apple’s blessing, the Pascal source code is available for download from the CHM website after filling out a form.


The Lisa was not the first commercial computer to ship with a GUI, as some have claimed in the past—that honor goes to the Xerox Star—but Lisa OS defined important conventions that we still use in windowing OSes today, such as drag-and-drop icons, movable windows, the waste basket, the menu bar, pull-down menus, copy and paste shortcuts, control panels, dynamically movable overlapping windows, and even one-touch automatic system shutdown.

John Gruber:

To this day, I’ve never seen one. The Mac interface captured a certain magic that the Lisa’s quite obviously did not — I think the Lisa ultimately failed more because of that than its price. But its influence on the original Mac is obvious.


Mac 30th Anniversary Icons

Robb Knight:

SVG icons extracted from the 30th Anniversary Mac Font

Via Dave Mark:

And if you hover your cursor over the icons, they slowly change color.

Nick Heer:

It is also a reminder that the titanium PowerBook which so clearly set the template for Apple’s current laptops was released closer to the original Macintosh than to today’s Macs.


Wednesday, January 25, 2023

ChatGPT vs. Google

Dave Winer:

I went to ChatGPT and entered “Simple instructions about how to send email from a Node.js app?” What came back was absolutely perfect, none of the confusing crap and business models you see in online instructions in Google. I see why Google is worried. ;-)

John Gruber:

The threat to Google is real. That type of search for a clearly-written one-line programming question used to produce excellent results from Google Search. For a number of years, though, search results for queries like that — both at Google and competing search engines — have been littered with junk generated by content farms.


The problem with Google Search today isn’t specific to programming questions, but the general problem of answering how-to questions in any subject.

The ranking problem is real—these days it’s common for Google search results to be filled with junk. But I think the bigger problem is that Google no longer feels complete. I used to be able to weed out the junk by writing more specific queries. Now, such queries—as well as searches for phrases that I know exist on the Web—commonly turn up nothing.


Update (2023-01-27): John Gordon:

Google can’t find things I’ve written on their blogging platform (Yeah, Blogger still works.) It’s a husk now.

Update (2023-01-31): Ameya Paleja (via Hacker News):

The popularity of ChatGPT, the online chatbot built by OpenAI, has brought many to question the survival of search engines such as Google. Paul Buchheit, the creator of Gmail, has also dropped his opinion on the matter, and he thinks that Google's business will last a maximum of two years, he tweeted.


Google could quickly be pushed into irrelevancy as users throng for more simplistic answers than indexed pages. Even if Google were able to push A.I. products developed in-house into the market almost immediately, Buchheit does not see a way; it could do so without destroying the most valuable part of its business.

Twitter to Revert Hostile “For You” Switch

Kyle Barr:

Twitter has reversed course on its extremely unpopular decision to make an algorithmically generated timeline the default for all Twitter users.


The change will start on the web version of Twitter before “soon” coming to the iOS and Android versions of the app. The move comes just two weeks after the company made the much-maligned decision to force feed users content based on stuff “You might like.”

It’s not just that they made “For You” the default but also that it would keep switching you away from “Following” after you had selected it, either when returning to the app or if you were scrolling down the timeline but moved your finger slightly to one side.

I still don’t think this makes the official Twitter app usable, as it does not do a good job of loading all the tweets if you’ve been away from the app for a while.

It also wastes a chunk of valuable screen space showing the tab titles even though I never want to use a different tab.


LaunchBar Actions for Mastodon

Christian Bender:

Search Mastodon accounts and hashtags easily with LaunchBar.


This action opens the current post or profile in Safari on your home instance.


This is a simple action to post a status (toot) on Mastodon.

I had forgotten that LaunchBar now has a JavaScript API that can make these sorts of custom actions feel like built-in parts of the app.


Network Connections From mediaanalysisd

Jeffrey Paul (Hacker News):

Imagine my surprise when browsing these images in the Finder, Little Snitch told me that macOS is now connecting to Apple APIs via a program named mediaanalysisd (Media Analysis Daemon - a background process for analyzing media files).


Apple has repeatedly declared in their marketing materials that “privacy is a human right”, yet they offered no explanation whatsoever as to why those of us who do not traffic in child pornography might wish to have such privacy-violating software running on our devices.


Integrate this data and remember it: macOS now contains network-based spyware even with all Apple services disabled. It cannot be disabled via controls within the OS: you must used third party network filtering software (or external devices) to prevent it.

Contrary to this post, I think Apple did clearly state that it has abandoned local CSAM detection. And he doesn’t seem to have evidence that his data is being improperly sent to Apple. Still, it’s not clear exactly what mediaanalysisd is doing with the network.

Howard Oakley:

There is no evidence that local images on a Mac have identifiers computed and uploaded to Apple’s servers when viewed in Finder windows.


Images viewed in apps supporting VLU have neural hashes computed, and those are uploaded to Apple’s servers to perform look up and return its results to the user, as previously detailed.

VLU can be disabled by disabling Siri Suggestions in System Settings > Siri & Spotlight, as previously explained.


No, macOS doesn’t send info about your local photos to Apple We analyzed mediaanalysisd after an extraordinary claim by Jeffrey Paul that it scans local photos and secretly sends the results to an Apple server.


We analyzed the network traffic sent and received by mediaanalysisd. Well, the call is literally empty. We decrypted it. No headers, no IDs, nothing. Just a simple GET request to this endpoint that returns nothing. Honestly, it looks like it is a bug.


The issue was indeed a bug and it has been fixed in macOS 13.2. The process no longer makes calls to Apple servers.

Was it also a bug that this happened even though Paul had opted out of everything? Or is there no setting for this? Or did he miss a setting?

Jamie Zawinski:

Ok, that may well be. But when my OS was phoning home on my photos yesterday and happens to not be phoning home on them today… that doesn’t really build trust. Intent matters, and we know what Apple’s intent is because they told us. Code matters, and we are not allowed to see Apple’s code.

Maybe the fact that it phoned home with a null response is only because the test photos didn’t match some magic neural net -- congratulations, Apple didn’t report your test images to the FBI.

We cannot know. But suspicion and mistrust are absolutely justified. Apple is examining your photos and then phoning home. The onus is on them to explain -- and prove -- what they are doing and why.


Update (2023-01-27): Howard Oakley:

Just checked this evening: this hasn’t changed in 13.2.

Nick Heer:

This bug violated users’ trust. The last time something like this happened was with the OCSP fiasco, when Apple promised a way to opt out of Gatekeeper checks by the end of 2021. As of writing, any such option remains unavailable.


At the same time, it is unwise to trust alarmist reports like these, either. These are extraordinary claims made without evidence, and they can be dismissed unless proven.

Howard Oakley:

Live Text analysis doesn’t generate neural hashes or other identifiers for an image, in the way that Visual Look Up does.

Any connection to Apple’s servers during Live Text analysis is performed before the image has been analysed, and before the extraction of any text. It cannot, therefore, send Apple any image identifiers or extracted text.

Live Text relies on language asset files, which may need to be augmented or updated over a network connection during text recognition.

macOS 13.1 and 13.2 perform Live Text essentially the same, and will both attempt to connect to Apple’s servers in the event that they need to update language asset files.

Tuesday, January 24, 2023

macOS 13.2

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

The update adds Security Keys for the Apple ID, allowing for physical two-factor authentication, which offers more protection against phishing and unauthorized account access. The update also rolls out Advanced Data Protection for iCloud to all users globally.

See also: Howard Oakley.

Matthias Gansrigler:

macOS 13.2 (22D49) seems to have finally fixed the [widget configuration] issue – although it did take an initial

killall Notification\ Centre

to kickstart the widgets after adding and configuring them. But after that, it seems to work reliably.

Matthias Gansrigler:

But: on my Mac, Spotlight can’t find any apps anymore.


Update (2023-01-25): Sean Heber:

I just upgraded to macOS 13.2 and now I see this in the Privacy & Security prefs? Uhh.. okay, I guess? I mean… did I have a choice?


I clicked Allow because I’m a crazy person and it asked for my password and then updated an unnamed system extension and rebooted…

So… uh…. wtf did I just do?!

Update (2023-01-27): Francisco Tolmasky:

Why is my Mac doing all this annoying shit? Oh, right, since I rebooted to install macOS 13.2 it “helpfully” turned Bluetooth back on. Sigh.


Update (2023-02-03): Joe Rossignol:

The latest version of macOS Ventura breaks compatibility with Pioneer's lineup of USB-connected CD/DVD/Blu-ray drives for the Mac.

macOS 12.6.3 and macOS 11.7.3

Apple (full installer):

This document describes the security content of macOS Monterey 12.6.3.

Apple (full installer):

This document describes the security content of macOS Big Sur 11.7.3.


Update (2023-01-25): Jeff Johnson:

Here’s a screen recording of Big Sur after installing today’s 11.7.3 update on an M1 Mac mini with a non-retina display.

  1. The window resize widgets are GONE! WTF?
  2. Safari web extension icons are GONE (but Safari app extension icons are fine).

iOS 16.3 and iPadOS 16.3

Juli Clover (security, Hacker News):

Security Keys for Apple ID provide users with the option to add a third-party security key to their account, which will be needed for authentication when logging into a new device or otherwise accessing an Apple ID.


Advanced Data Protection for iCloud uses end-to-end encryption to provide Apple’s highest level of cloud data security. The feature was made available to users in the U.S. at the end of last year with the release of iOS 16.2, but iOS 16.3 brings it to all users worldwide for the first time.


Emergency SOS has been updated to prevent accidental emergency calls. Calls can still be placed by holding down the side button along with either the up or down volume button, but now the buttons must be released in order to place the call.


Update (2023-01-25): Steve Troughton-Smith:

I was starting to enjoy using Freeform, but then I realized that individual brush strokes were being lost to iCloud sync between my devices. And not just a render issue, as the stroke objects were just gone 😰 That definitely has me spooked away, even if the iOS 16 release notes mention something tangentially related to it. I feel they may be understating the problem…

Kirk Reynolds:

Data loss happened to me while sharing a Freeform doc. Created something to share with my son. Went to his iPad and it was there as a mostly empty doc with random strokes. Looked back at my iPad and it was the same, with no prior revision to go back to.


The notes for 16.3 release specifically mention this is fixed. I hope it’s right.

My wife updated to iOS 16.3 and lost 200 Safari tabs.

Ivory 1.0


Ivory is a brand new app that brings 10 years of experience building the award-winning Twitter app, Tweetbot, over to Mastodon.


Ivory is currently in Early Access, which means there are features missing and we are actively building them while you get to use the app.

As a big fan of Tweetbot, I’m really excited to see this, though I have little use for it at present since there’s no Mac version. (The iOS version isn’t allowed to run on Apple Silicon Macs.)

Oddly, the app has been available for much of the day but still doesn’t show up in the App Store when I search for it. Lots of other Mastodon clients fill the search results, along with various games and shopping apps. I had to click the direct link.

Federico Viticci:

Elephant aside, what stands out in Ivory is the iconography. For Ivory, Jardine has drawn an entirely new set of icons for the tab bar, compose window, action drawer, and other areas of the app. These icons are lovely: they have a unique line style I haven’t seen anywhere else in iOS; they’re fresh, instantly recognizable, and legible in both light and dark mode. It’s funny how a simple icon set can make Ivory feel so different from Tweetbot, but that’s exactly what I noticed in this first version of the app.


Ivory is, by far, the smoothest, most responsive Mastodon client I’ve tried on my iPhone and iPad yet. The app’s animations are incredibly fluid on ProMotion displays, and the timeline scrolls quickly with no stutters or other glitches, which I’ve seen in other clients.


Ivory, like Tweetbot, supports syncing your timeline position via a custom iCloud integration. This has been working very well for me, but as I posted recently, I hope Tapbots will consider implementing Mastodon’s native sync marker API as well.


The hidden power of filters, however, lies in the ability to create your own with a surprisingly advanced interface. When creating a custom filter, you can include or exclude keywords, then choose to match any or all filters from a selection of the following criteria[…]


if you hold down the boost icon (boosts are the Mastodon equivalent of retweets), you’ll get the option to boost a post from a different account than the one currently viewing the timeline.

Dan Moren:

While Ivory has been free during the beta period, it will be a paid product within the App Store: you can pay $1.99 per month or $14.99 per year.

See also: Juli Clover.


Update (2023-01-25): See also: Rui Carmo.

Homecoming for Mastodon 1.1

Jeff Johnson (Mastodon):

I found that the federated structure of Mastodon could make it ridiculously difficult to follow people, especially if you’re not on one of the biggest instances such as (which is often closed for new sign-ups). Whenever you’re browsing a web page on another Mastodon instance, you can’t simply click a button to follow someone, because you’re not signed in on that instance. You can only follow someone from your own instance, where you have an account.

The trick is to translate or redirect a Mastodon URL on another instance to the corresponding URL on your instance. The only reliable way I knew to accomplish this was to copy the URL and paste it into the search field on the web page of my own instance, but that method was obviously tedious.

His $1.99 Safari extension adds a toolbar button to automate this. I’ve found this very helpful, not only for following new people, but also for boosting posts from different instances after opening them from NetNewsWire into Safari.


Mimeo Acquires Motif


This acquisition will combine the shared passion for empowering creators and producing top-notch products of both Mimeo and Motif, and strengthens Mimeo’s commitment to delivering best-in-class photo products and innovation for every home and business.


Motif and Mimeo have been global strategic partners with Apple for over a decade, first as the photobook providers behind Apple’s iPhoto printing services and now as the top photobook product apps in the Apple Mac App Store. With this acquisition, we will continue the tradition of producing the highest quality photobooks and other photo products from the same facilities trusted by Apple.


You will continue to be able to design beautiful products on the Motif apps this year, yet every photobook, calendar, and card will be printed and shipped by Mimeo.


For those that utilize Motif’s image curation and AutoFlow technology, which automatically chooses and lays out the best photos for your photobooks, you will still be able to do so. But now you will also have the option to utilize Mimeo Photos’ advanced layout and design toolset.

I like Motif—both the interface and print quality are superior to Shutterfly—so I’m a bit worried about what this means for the app and service. It sounds like they are implying that the app will be gone after 2023, which means that my old projects may no longer be accessible.


RAW Power 3.4

Gentlemen Coders:

Adjust images with incredible precision and power, using special controls in Apple’s RAW decoder.


Work with your Photos library or Finder folders.


Rate and flag images. Filter by four criteria.


Multiple windows and tabs. View and edit multiple folders, Photos albums, and files at once.


Apply presets and adjustments, Auto Enhance, export, and more to multiple images at once.