Archive for January 5, 2024

Friday, January 5, 2024

Clicks Hardware Keyboard for iPhone

Juli Clover (Hacker News):

BlackBerry fans that miss having a physical keyboard on their smartphones may want to check out Clicks, a company that has developed a keyboard case that’s designed for the iPhone 14 Pro and iPhone 15 Pro models.

Clicks is showing off its keyboard accessories ahead of CES, and the iPhone 14 Pro version of its keyboard will be ready to ship out in February. The keyboard is priced at $139, with an iPhone 15 Pro version coming in mid-March and a $159 iPhone 15 Pro Max version set to release in the spring.

The Clicks Creator Keyboard is available in “BumbleBee” yellow and “London Sky” gray, and it adds a small physical keyboard to the bottom of an iPhone. Clicks says that the case design is meant to “feel like a natural extension” of the iPhone, and the keys have been designed for ideal click resistance and feedback for fast and accurate typing.

I am one who still doesn’t like software keyboards—and likes clicky keyboards—but it already feels like my iPhone 15 Pro is too big, so I can’t imagine adding this to it unless I were away from my Mac a lot more. I hope it’s a success, though.

Ben Schoon:

By eliminating the on-screen virtual keyboard and moving that to a physical keyboard below, usable space on the iPhone is nearly doubled, Clicks says.

John Gruber:

I don’t know how much I’ll wind up using it but it looks fun, useful, and clever — and I’m just a sucker for upstart indie hardware projects. Clicks is even a great name. There’s no Bluetooth involved — it connects via Lightning or USB-C, just like any hardware keyboard can via a cable. If you’ve never connected a hardware keyboard to an iPhone before, you might be surprised how many keyboard shortcuts there are (Command-Space for Spotlight, Space and Shift-Space for paging down and up in Safari, Command-H to go to the Home screen, and more.)

Adam Chandler:

I’ve been an iPhone user since 2007 so 17 years and in those 17 years, I still cannot type as fast as I did on my Blackberry/Treo/Blackjack/RAZR. I really STILL miss physical buttons and detest software keyboards so much that I carry an iPad w/ keyboard with me everywhere and do all texting and messaging on an iPad. my iPhone is purely a consumption device where I triage messages and emails.

I really want this thing.

See also: John Gruber.

Update (2024-02-01): Ben Schoon:

For a case built for this express purpose, the keys are crucial to get right, and Clicks has nailed it, I think. The keys are rounded and have a bit of space in between each one, but the layout overall feels familiar and well done. The keyboard layout is also specifically designed to be really similar to the default iOS keyboard, which makes it feel all the more familiar.

Each key is also backlit and has an excellent tactile response. That’s the aspect I was most concerned about, and while some of the pre-production models were a little rough, the final version that I was able to test during my hands-on (not pictured) felt perfect. It was clicky and tactile without being loud or too hard to press.


In active use, I didn’t really find the size to be a problem, at least on the smaller iPhone size, but it makes an iPhone Pro Max feel quite unwieldy.

Update (2024-02-20): Adrian Schönig:

My Clicks keyboard just arrived and after just a few minutes playing with it I already love having keyboard shortcuts on my iPhone. Multi-item selection by holding the command key is also a time saver.

Update (2024-07-05): M.G. Siegler:

With the Clicks keyboard added on, it’s so comically long that it causes all sorts of usability issues. But it’s also still a little fun!


But is it any good? I mean, not really. They keyboard itself is fine, but it’s mildly hard to type with because the device is so top heavy. Clicks is quick to tell you to not try to hold it in the way you would have a BlackBerry – the “prayer” position – and instead to sort of cradle it, to get better support because beyond just typing on the keyboard, you’re going to need to be touching the screen, of course. I’m sure this all works a bit better with a non-Max sized iPhone, but I’m also sure it’s still not an ideal layout. Screen sizes and as such, smartphones, are just too big these days to do this physical keyboard at the bottom thing.

Automatic Grammar Agreement

WWDC 2021:

Discover how the latest updates to Foundation can help you improve your app's localization and internationalization support. Find out about the new AttributedString, designed specifically for Swift, and learn how you can use Markdown to apply style to your localized strings. Explore the grammar agreement engine, which automatically fixes up localized strings so they match grammatical gender and pluralization.

WWDC 2023:

Discover how you can use automatic grammatical agreement in your apps and games to create inclusive and more natural-sounding expressions. We’ll share best practices for working with Foundation, showcase examples in multiple languages, and demonstrate how to use these APIs to enhance the user experience for your apps.

George Rhoten (video):

Formatting messages to display in a user interface has improved in capability over the years. For example, CLDR and ICU have provided the ability to format dates and numbers for various languages and regions. They have provided the capability to choose the correct singular, dual and plural forms of phrases for various languages. They have provided the capability to choose the correct grammatical gender or natural gender of phrases for various languages. Much of this functionality works well when the set of words used in the message are known when translating into another language. Unfortunately, the available message formatting frameworks fail to create grammatically correct sentences when messages reference user defined vocabulary. We present Automatic Grammar Agreement - a feature which was developed to overcome these challenges. It allows messages to have grammatically correct nouns, adjectives, articles and prepositions with minimal input from localizers.

Via Marcin Krzyzanowski:

Automatic Grammar Agreement deserves detailed documentation. I learned waaay more from (random) presentation for Unicode Consortium than from Apple dev rel/docs

HEY Calendar Rejected From the App Store

David Heinemeier Hansson:

We’ve spent the last year tackling the number one request for our email service Adding a calendar!

David Heinemeier Hansson (Hacker News, 9to5Mac):

Apple didn’t even bother to give us a reason this time! I mean, at least they’re not saying it’s definitive (yet??), but it’s just so fucking tiring to deal with this bullshit. This isn’t even a new service! It’s a FREE addition to the existing you let in!

All I wanted for Xmas this year was for Apple to stop fucking with developers, trying to turn them upside down at every junction to shake them down. I love Apple hardware, I hella respect Apple Safari, but this monopoly App Store bullshit has got to stop.


This is why I’m pushing so hard for PWAs! We’re betting all of on that strategy. No native apps, just the very best PWAs you can possibly find. It’s why I have PWA tech as my #1 objective for Rails 8. We need to collectively break free from this bullshit.

David Heinemeier Hansson:

Apple just called to let us know they’re rejecting the HEY Calendar app from the App Store (in current form). Same bullying tactics as last time: Push delicate rejections to a call with a first-name-only person who’ll softly inform you it’s your wallet or your kneecaps.

Since it’s clear we’re never going to pay them the extortionate 30% ransom, they’re back to the bullshit about “the app doesn’t do anything when you download it”. Despite the fact that after last time, they specifically carved out HEY in App Store Review Guidelines 3.1.3 (f)!

That guideline says:

3.1.3(f) Free Stand-alone Apps: Free apps acting as a stand-alone companion to a paid web based tool (eg. VOIP, Cloud Storage, Email Services, Web Hosting) do not need to use in-app purchase, provided there is no purchasing inside the app, or calls to action for purchase outside of the app.

The plain reading of this is that the items in parentheses are examples, not an exhaustive list.

But the whole “the app doesn’t do anything” isn’t even in the formal guidelines!

And, anyway, I thought they satisfied that last time by offering free, temporary accounts.

Jason asked them on the phone: “If we just put all these features in the existing app, is that ok?”. Answer: Yes. So Apple thinks separate apps for iCloud is better for users, but doesn’t want competing services like HEY to be able to do the same? What? Why?!

And why do huge companies like Salesforce, JPMorgan, Netflix or Google get to have apps “that doesn’t do anything”, but if you’re a small software maker like us, you can’t?


I built a system that tracked the app reviewers test sessions because we got tired of playing telephone with app review being of no help. Could watch what they were doing and infer what they actually wanted.

Douglas Fischer:

Sometimes I think it must be easier to handle a room full of teenagers then chat with this apple team. They can’t handle even very basic conversations where they clearly are wrong.

I can remember a lot of times when I pointed mistakes in their own screenshots. They even sent me pictures of another app to justify rejecting my app.

Probably the worst part of being on Apple platform.

Lon Baker:

This is why all my future products will be PWA first.

I’ve dealt with the Apple BS for a decade, in minor ways compared to this.

It is why I have an Android phone next to my iPhone — never know when an app is held hostage or worse yanked from the AppStore.


It’s as if a great OS was held hostage by its creators compared to a terrible OS being super-friendly.

I’m not sure that Android is terrible or that Google is super-friendly, but it does seem like Apple is holding back its platforms.

Alex Russell (via Hacker News):

This is the backdrop to the biggest app store story nobody is writing about: on pain of steep fines, gatekeepers are opening up to competing browsers. This, in turn, will enable competitors to replace app stores with directories of Progressive Web Apps. Capable browsers that expose web app installation and powerful features to developers can kickstart app portability, breaking open the mobile duopoly.


Update (2024-01-09): Amrita Khalid (Slashdot):

Following the [2020] saga with Hey, Apple made a carve-out to its App Store rules that stated that free companion apps to certain types of paid web services were not required to have an in-app payment mechanism.

David Heinemeier Hansson:

After spending 19 days to review our submission, causing us to miss a long-planned January 2nd launch date, Apple rejected our stand-alone free companion app “because it doesn’t do anything”. That is because users are required to login with an existing account to use the functionality.

This is a ridiculous charge. The App Store is filled with high-profile applications that require an existing service account and simply presents a login screen when first launched. Here are just four[…]

Most notably, Google Calendar seems to do exactly what Hey was rejected for.

Jason Fried:

When Apple forces companies to offer In App Purchases in order to be on their platform, they also dictate the limits to which you can help your customer.


Let’s say someone signs up for HEY on an iPhone, pays with Apple’s IAP system, and then decides to switch to an Android phone. Billing is entirely messed up now. They can’t update their credit card through the HEY app on Android because their billing info is stored with Apple. And we can’t help them. Who wins there? Apple wins. This creates immense lock-in when all your service subscriptions are tied to a single platform. If you change your phone, do you now also have to change your email address?


When you think about the big picture of a complete customer relationship, in app purchases are one of the most hostile customer experiences I’ve seen. Sure, the purchase part is relatively easy (most modern purchase flows are these days), but that’s where Apple stops. We end up with our hands tied behind our backs. Unable to help customers to our own high standards because Apple won’t let me, or my employees, do our jobs.

David Heinemeier Hansson (tweet):

So here’s what we did to comply with the “it has to do something” bullshit. We created a dedicated tribute to Apple’s History right into the app, which you can use if you don’t have an account with the HEY email service.


So now the app “does something” when you download it. Despite the fact that this requirement exists nowhere in the Apple App Store Guidelines. Despite the fact that the store is chockfull of apps that also doesn’t “do anything” without a login.

John Gruber:

It seems bonkers to me that after all the bad publicity that befell Apple in June 2020 over Apple’s rejection of the Hey email app, that they’d veto a Hey companion app — that requires the exact same type of account as Hey email — for the exact same reasons. They should have just let it through, for the risk of bad publicity alone.


The stakes for Apple are much higher today than they were in 2020. The last thing Apple wants is a news narrative along the lines of “More Bullshit From Apple Trying to Squeeze Developers Into Giving Them a Cut of Revenue When the Developers Simply Want to Sell Subscriptions Directly to Customers Over the Web”. But by rejecting Hey Calendar, they seem to be inviting such a narrative.

I just don’t get it. Apple has nothing to gain by this — nothing, not a cent — but a lot to lose.

They just can’t help themselves. Meanwhile, I just received an e-mail from Apple:

Apple Vision Pro will have a brand-new App Store, where people can discover and download all the incredible apps available for visionOS. Learn everything you need to know to prepare and submit your visionOS apps to the App Store.

We can’t wait to see what you have in store.

David Heinemeier Hansson:

Apple approved the HEY Calendar!! It’s now available for download in the @appstore. Ridiculous it needed this level of awareness/pressure, but I’m so happy for our iOS team to see their work through the weekend pay off in full.


Above all, I just wish Apple would stop acting like this. Codify what it actually takes to get approved in the App Store Guidelines. If login-wall apps must have a demo mode or whatever, say so! Then enforce it equally and consistently! Don’t make us guess and grief like this.

And, yes, I also do wish that @TheJusticeDept get on with their case, so we can have the courts clarify what should be done with about this monopoly power.


Update (2024-01-10): David Heinemeier Hansson:

I’ll admit it was a bit cheeky to make our new HEY Calendar app “do something” by including Apple’s own history as a preview for people who don’t have an account. And I didn’t give the gambit better than 30% odds of succeeding, but lo and behold, it did!


There’ll always be a legion of Apple fans to defend every abusive tactic the company employs, but there absolutely is also a huge tribe of developers who recognize monopoly bullshit when they see it. The loud, impressive support from this group really helped us push through this second round of nonsense.

Stephen Hackett:

For each of my three Kickstarters, I’ve included digital versions of the highlighted dates for people to import into their calendar apps.


To be clear, from these screenshots, it doesn’t seem like HEY copied my direct work or research, and I only came across this after someone sent me a link to DHH’s tweets.


It’s a real bummer to feel like I’ve been ripped off by a much bigger company, seeing them pitch something I’ve worked hard on as a free feature in their app. There’s some irony there.

Eric Schwarz:

Apple isn’t blameless in this, with a famously opaque and confusing App Store review process. However, Hansson should have learned that an app has to do something when you’re not logged in the first time he tangled with Apple over Hey’s email client.

There’s no reason he should have learned that, because (1) the so-called “do something” rule is not actually written in the guidelines, and (2) after the previous tangle, Apple revised the guidelines to specifically permit free clients for Web services like HEY Calendar.

Nick Heer:

That is the only logical explanation. After all, what rule would permit a free frontend for a paid email service, but not for a calendar?

Now we’re back in a muddle because Apple seemingly relaxed and clarified the guidelines but is actually still using a hidden rulebook.

Taxatio Rejected From the App Store

Jesse Squires:

Taxatio is a universal app for iOS and macOS. I submitted the same update (version 1.3.0) for both platforms on December 30. The iOS app was accepted within a few hours, which was excellent. However, the macOS update was delayed for a ridiculous reason, after waiting to be reviewed for three entire days.

It is important to note — and I cannot stress this enough — the iOS app and macOS app are nearly identical. They are SwiftUI apps with the exact same functionality and they share 90 percent of their code. The metadata in the App Store for each is exactly the same, the only exception is the screenshots. So, it was curious to me how one could be approved within hours while the other was waiting to be reviewed for multiple days — ultimately, only to be rejected.

They didn’t like the release notes mentioning which iOS versions were supported for the universal app.

Not to mention, Apple actively encourages developers to support universal purchases for apps available on their platforms since they started supporting this in 2020. I do not think that mentioning OS support changes for a universal app is “not relevant” and I certainly do not think it should result in a rejection. It’s harmless.


Second, while I appreciate Apple’s new approach to allowing apps to be approved for minor “violations” without having to resubmit, it does not work well in practice (obviously). In 2020, Apple announced “for apps that are already on the App Store, bug fixes will no longer be delayed over guideline violations except for those related to legal issues. Developers will instead be able to address the issue in their next submission.” (Emphasis mine.) This sounded great in 2020, but the problem is that my app release was still delayed.