Archive for December 22, 2023

Friday, December 22, 2023

Beeper’s Final Fixes and Government Investigations

Juli Clover:

On Reddit, the Beeper Mini team says that the Mac-based fix coming on December 20 stabilizes iMessage for Beeper Cloud and Mini, and it “works well” and “is very reliable.”


Beeper has been using its own Mac servers to provide that information to Apple, but that resulted in thousands of Beeper users having the same registration info, which was an “easy target for Apple.”

The Beeper update will instead generate unique registration data for each Mac, making it harder for Apple to tell which users are accessing iMessage through an Android device. The Beeper Mini team says that registration data is “only used to indicate that a Mac is available during registration” and that the Mac will not be given access to an account or messages.

Tim Hardwick:

The developers of Beeper Mini, the iMessage for Android app, are back with another attempt to keep Apple’s blue bubbles onside, and this time they will ask users to generate their iMessage registration data with the help of jailbroken iPhones, MacRumors has learned.


If users don’t have access to an old iPhone for jailbreaking in order to complete the registration process, that’s okay – Beeper will rent them one for a small monthly fee. The developers say this service will be available in the new year, if there is enough interest.

Juli Clover:

The Beeper Mini team says that 10 to 20 people can “safely” use the same registration data, but the Mac method limits Beeper Mini users to email-based iMessage communications, and it requires an Apple ID.

The second more complicated Beeper Mini workaround uses an iPhone. Beeper Mini’s developers suggest that customers get an old iPhone 6, 6s, original SE, 7, 8, or X and jailbreak it with a Mac or Linux computer to install a Beeper tool that generates an iMessage registration code. The registration code can be added to the Beeper Mini app, and it allows an Android phone number to be registered with iMessage.

Aisha Malik (Hacker News, Slashdot):

Although the company has issued a complex workaround, it says it has no plans to roll out another one if this one is knocked down by Apple.

“Each time that Beeper Mini goes ‘down’ or is made to be unreliable due to interference by Apple, Beeper’s credibility takes a hit,” the company wrote in a blog post. “It’s unsustainable. As much as we want to fight for what we believe is a fantastic product that really should exist, the truth is that we can’t win a cat-and-mouse game with the largest company on earth. With our latest software release, we believe we’ve created something that Apple can tolerate existing. We do not have any current plans to respond if this solution is knocked offline.”

Josh Centers:

I’m starting to suspect that Beeper Mini is a pretense to sue or regulate Apple, much like Epic trying to sneak IAP past the App Store.

I’m supposed to believe these guys are smart enough to reverse engineer iMessage but dumb enough to not expect Apple to block it?

Wes Davis and Jess Weatherbed:

[…] a group of US lawmakers are pushing for the DOJ to investigate Apple for “potentially anticompetitive conduct” over its attempts to disable Beeper’s services. Senators Amy Klobuchar (D-MN) and Mike Lee (R-UT), as well as Representatives Jerry Nadler (D-NY) and Ken Buck (R-CO), said in a letter to the DOJ that Beeper’s Android messaging app, Beeper Mini, was a threat to Apple’s leverage by “creating [a] more competitive mobile applications market, which in turn [creates] a more competitive mobile device market.”

Kevin Purdy (Hacker News):

Eric Migicovsky welcomed CBS Mornings into his garage, where he advanced his argument that Beeper was turning grossly insecure SMS messages between iPhone and Android users into secure, end-to-end encrypted chats.


That interview lined up with another development: a bi-partisan foursome of US lawmakers, including Sen. Amy Klobuchar (D-Minn.), sending a letter to the Department of Justice regarding “Apple’s potential anti-competitive treatment of the Beeper Mini messaging application.” Apple’s actions toward Beeper, the letter suggests, could “eliminate choices for consumers,” “discourage future innovation and investment” in messaging, and make Apple a “digital gatekeeper,” suggesting a need for review by the DOJ’s Antitrust Division.

Adamya Sharma (Hacker News):

“In December 2015, Beeper’s Chief Executive Officer, Eric Migicovsky, testified before the Senate Judiciary Committee’s Subcommittee on Competition Policy, Antitrust, and Consumer Rights. He expressed concern that dominant messaging services would use their position to impose barriers to interoperability and prevent Beeper entering and delivering services that consumers want. Given Apple’s recent actions, that concern appears prescient,” the lawmakers state in their letter to the DOJ.

William Gallagher (Slashdot):

According to The Information, this cycle is going to continue, too, as Beeper CEO Eric Migicovsky maintains that his company will persist — and could take legal action, too.

“We’re investigating legal ramifications for Apple, definitely,” said Migicovsky. “Around antitrust, around competition, around how they’ve made the experience worse for iPhone users with this change.”

Hartley Charlton:

The United States Department of Justice (DOJ) and Federal Trade Commission (FTC) are intensifying their investigations into Apple's alleged anti-competitive practices following the recent blocking of the iMessage for Android app Beeper Mini, the New York Times reports.


Update (2023-12-28): Beeper Mini was removed from the Google Play Store.

See also: The Talk Show.

Update (2024-01-30): Malcolm Owen (Hacker News):

Beeper mini users who used their hardware to register their app with Apple’s iMessage network may find their Mac blocked from the service instead, in what could be retaliation against the use of the controversial messaging app.


It appears that Apple may be detecting the instances of registrations being used by Beeper, and then striking the registration’s access from iMessage. The problem is that doing so also blocks the legitimate original source of the registration too, as well as any other devices that use the same registration data.

At the time of the method’s introduction, Beeper said that testing revealed up to 20 users could “safely” use the same registration data.

Chethan Rao (via Hacker News) :

While Apple has since reversed the ban, this whole ordeal has led Beeper to call off its iMessage efforts.


The Beeper team notes that they emailed Apple directly about the banning episode, but didn’t hear back from the company. It was then that they approached a NYT reporter with experience covering Beeper, who in turn, got in touch with Apple. The bans were lifted around two days later, per Beeper.


How to Control the World

Brandon Williams and Stephen Celis (2018, via Christian Tietze):

While unconventional, we hope that it’s obvious that this solution of controlling dependencies is superior to the traditional solutions in use today. It also gives us an opportunity to reevaluate deep-seated beliefs we may have. We should continuously question our assumptions. In this case, we found that:

  • Singletons can be good (as long as we have a means to control them) and global mutation can be good (when it’s limited to development and testing). Blanket statements against singletons and global mutation are fun to make, but we were able to find real value in using them.

  • Protocols aren’t necessarily a good choice to control dependencies. Protocol-oriented programming is all too easy to reach for when a simple value type requires less work.

The global mutable struct approach certainly reduces boilerplate code, but I’ve never understood how it can work with threads. Most basically, how do you deal with modifying the dependencies for multiple unit tests that are running concurrently?

Their newer Dependencies library handles this more directly:

A dependency management library inspired by SwiftUI’s “environment.”


For example, you can easily control these dependencies in tests. If you want to test the logic inside the addButtonTapped method, you can use the withDependencies function to override any dependencies for the scope of one single test.

The dependencies are stored in a TaskLocal. But it still feels like a partial solution because not all code uses Swift Concurrency, and you still need to worry about propagating dependencies:

It is important to note that task locals are not inherited in all escaping contexts. It does work for Task.init and TaskGroup.addTask, which make use of escaping closures, but only because the standard library special cases those tools to inherit task locals (see copyTaskLocals in this code).

But generally speaking, task local overrides are lost when crossing escaping boundaries.


In order to access dependencies across escaping closures, e.g. in a callback or Combine operator, you must do additional work to “escape” the dependencies so that they can be passed into the closure.

It’s more ergonomic not to have to propagate dependencies explicitly, but relying on implicit behavior can be harder to understand and error-prone.


WeChat’s HotspotHelper Entitlement

Yingyu (via Hacker News):

Since the introduction of iOS 9 in 2015, Apple has included an API call named “HotspotHelper,” enabling developers to request a capability for their apps to assist the system in connecting to WiFi access points.


The real cause for concern arises from the fact that, with access to such information, apps can effectively track a user’s location. This is based on the premise that most WiFi access points remain stationary after deployment, providing a consistent reference for triangulating a user’s whereabouts.


Adding another layer to the discussion is the fact that major apps like WeChat and Alipay have already implemented this capability. These two apps are ubiquitous in mainland China, touching almost every aspect of people’s lives. The widespread use of these applications in a densely populated region intensifies the implications of location tracking without user consent.


I strongly advocate for Apple to offer users the option to disable this feature, akin to other privacy settings such as location and notifications. Apps should explicitly seek permission before accessing this feature, ensuring users have the ability to grant or deny access while using the app.

We already know that WeChat gets special treatment to bypass the App Store guidelines (apps-within-apps and payments) because of its strategic importance. It sounds like it also has a special entitlement. This is ostensibly needed so that users can connect to public hotspots authorized by their WeChat accounts, but it also allows the app access to tracking information even for users not using those hotspots and with no way to opt out.

iOS’s app-based privacy protections are not well suited to super-apps. An app that does all the things gets all the entitlements and all the access. Once the app gets all the data, Apple and the user have no control over how it’s used.


iOS 17 Autocorrect

Juli Clover:

The machine learning technology that Apple is using for autocorrect has been improved in iOS 17. Apple says it has adopted a “transformer language model,” that will better personalize autocorrect to each user. It is able to learn your personal preferences and word choices to be more useful to you.

After using iOS 17 for a few weeks, most users will notice that the autocorrect suggestions are much better at predicting what you want to say and presenting words for you to tap to autofill. When you use acronyms, shortened words, slang words, and colloquialisms, autocorrect is not as aggressive with the automatic correcting, but it is still able to correct accidental typos.

Federico Viticci:

Imagine my relief, then, when I realized that iOS 17’s brand new autocorrect feature based on a transformer model was not just marketing speak but actually works and makes typing on the iPhone’s (and iPad’s) software keyboard a…pleasant experience. I can’t believe I’m saying this but I love Apple’s new autocorrect system in a way I never even remotely appreciated typing on a software keyboard.

The new autocorrect is so good, it allowed me to write a good chunk of this review without using the Magic Keyboard for iPad at all.


All of these traits are complemented by the refreshed user experience Apple designed for the system keyboard in iOS 17. For starters, when a word is automatically corrected, it gets underlined; tap the underlined word, and a new popup appears, allowing you to revert to what you wanted to type in the first place or choose between different suggestions.

After using it for a while now, I think autocorrect is definitely improved in iOS 17, but I’m not seeing as dramatic an improvement as others are reporting. I’m not sure that it’s better than the old iOS 10 system that didn’t use machine learning.

The main issues are that it still changes correct entries to be incorrect and still suggests garbage words. At the same time, it is sometimes surprisingly unhelpful at what would seem to be the easy cases. For example, I was recently trying to type the word “didn’t” and had entered “didn”. iOS’s suggested completions were “don’t” and “doesn’t”. Other times, this same example has worked, though. I cannot predict what the predictive text model is going to do, which makes it require more attention, and it sometimes seems dumber than a simple prefix-based approach.

I do really like the new user interface, as it makes it much easier to deal with the system’s foibles.

Damien Petrilli:

The keyboard on iOS 17 is a nightmare. It was already going down since few releases but now it’s unbearable.

  • can’t keep up if you type too fast
  • key precision is worst than ever by triggering the wrong letter.
  • sometimes the system takes your typing as touches instead and you are sent back on the springboard with tap triggered everywhere like it was catching up
  • keyboard freezes more and more

I have not been seeing these problems, thankfully.


Update (2024-02-05): Mario Guzmán:

I am having to fucking go back and edit my text messages more than ever before due to how fucking aggressive and awful auto-correct on iOS is these days. I’ve tried resetting my dictionary but even that doesn’t help.

Update (2024-03-08): Pierre Igot:

In my experience, lots of Mac users, even if they are regular iPhone users, DO NOT LIKE autocomplete in macOS, for fairly obvious reasons. Yet, unless they happen to know what the official name for the feature is (“inline predictive text”), how are they supposed to find how to turn it off in the jungle of System Settings? The most commonly known term, “autocomplete”, yields NO RESULTS. For some reason, “autoc” and “autoco” work, but NOT “autocom” or anything longer.

Update (2024-03-11): Todd Thomas:

So what really happened to autocorrect between the iOS 17 betas where it looked amazing and the current state of things right now?