Today was the “lots of little things” stretch. None of it is one big feature. It's all the stuff that stands between a game that works in a browser and an app Apple will let onto people's phones. Here's how it went.


The iPhone app exists. Beakful is now wrapped with Capacitor, with an iOS project in app/. The game isn't copied into it: one command builds the same single-file game and bundles it into the app, so it plays offline and the web and iPhone versions can't drift apart.
Talking to the website. Inside the app, the leaderboard, save codes, feedback and play stats all reach the same Beakful servers as the web version. Only the app's own origin is allowed through, and play stats from the app are tagged so I can tell the two apart.
Feeling like an iPhone game.
Apple's newest iOS refuses to launch apps without the scene lifecycle. The app showed nothing until I added a SceneDelegate and moved the manifest over. The minimum is now iOS 15. While I was in there I made the game full bleed: sea and sky run right under the notch and home bar, and the HUD and buttons keep clear of them. It looks better from the Home Screen on the web too.
I'd noticed that on a phone held sideways the puffin was “too small in that direction.” On short landscape screens the game now zooms in about a third and follows the puffin, with arrows at the edge for foes you can't see. Red arrows are deadly ones. Upright phones, iPads and desktops are unchanged.
Leaderboard names are now unique, ignoring case, spaces and punctuation, so Pip, pip and P.I.P. count as the same name. Names that were already shared stay until one of the players changes theirs.
I wrote it in English and French and checked it against Apple's character limits. It includes the keywords, promo text, privacy label answers and review notes. The screenshots are rendered straight from the game for the 6.9-inch iPhone, the 6.5-inch iPhone and the 13-inch iPad, in both languages. The privacy page also got a section on the app (iCloud, Game Center, no tips).
A tip link that wouldn't hide. Apple wants In-App Purchase for tips, so the Support Beakful link has to stay out of the app. I was already hiding it, but a CSS rule was overriding the hidden attribute and it kept showing. It's fixed now. I found it by looking at the app, not by reading code.
Game Center weekly board. The web leaderboard already had a weekly board, the total of your best daily scores from Monday to Sunday. The app now keeps each day's best on the device and submits the weekly total. Records opens it from the Week view.
Music! This is the fun one. A sea-shanty soundtrack, synthesized like every other sound in the game, so there are still no audio files. It has a fiddle, a concertina oom-pah, stomps, claps, a tin whistle and crew shouts. The arrangement follows the sky: rowdy in the morning, a ballad at sunset, a music box at night. Diving muffles it. I went through a few styles first, including a detour into techno-folk that didn't last.
The random pool is I's the B'y, an original shanty, Lukey's Boat and Jack Was Every Inch a Sailor. I tried Ode to Newfoundland and took it out because it didn't work. I looked into rights while I was at it. The first three are fine, and I've noted that Jack Was Every Inch a Sailor needs a double-check before sales. Players get a music button next to Sound. It has its own volume path, so Sound no longer mutes the music or the other way round. A What's new card tells returning players about the music and the weekly board.
Two more levels are on my branch but not merged yet. Witless Bay has whale-watching tour boats full of waving tourists. They're harmless, but you can't surface under a hull. Twillingate has a sleeping Greenland shark on the seabed with golden capelin drifting over its back. Dip in, grab the gold, get out, because linger and it wakes up.
I'm holding both back from the Daily Puffin until October 12. The daily is built from the date alone, so an older app that doesn't know about the new foes would roll a different daily from everyone else and mix up the leaderboard. The new levels wait until the app version that has them is out.
A quick look at the Lost in Labrador special level, for anyone curious what one of the 17 looks like in motion.