Show Full thread

This weekend:
- Fixed session refresh when the session has expired (do not need to tap "Sign in" — refreshed automatically)
- Fixed keyboard when searching/entering a Manufacturer name
- Fixed electric motor toggle behavior for "Has throttle" and "Has pedal"
- Fixed layout for Serial Number "Scan Text" button

This weekend in

:
- minor project configuration clean up
- swing and miss at integrating Fastlane Snapshot, not essential so deferring
- trying out swift 6 concurrency

Tomorrow: app launch??

I’m proud to introduce you to Bike Index: an open-source iOS app for the world’s leading bike registration and recovery service of the same name! Bikes mean everything to their riders: freedom of movement, ability to transport cargo, exercise and empowerment, connecting with nature and the great outdoors. Bike Index helps you recover your bike if it’s ever lost or stolen. Built with

and

Direct link here apps.apple.com/us/app/bike-ind

Pro-tip: remember the “Authorize this OAuth application" step for your UITests 🧠💡

Good changes:
1. Refactored navigation.
a. OLD: MainPage > NavigationStack > Settings > NavigationLink > Web Views
b. NEW: MainView > NavigationStack(path: $path) > Settings > Buttons that append to $path > Web Views
2. Settings is faster because it doesn't need to pre-load the web views!

Agh!!!!
Turmoil to get there:
3. This broke the debug-only modal AuthPage > NavigationStack > Settings > Buttons append to $path
a. Settings { @.Environment(\.openURL) var openURL } was causing continuous changes to the view itself and blocking the whole UI 🥴
b. Solved by replacing OpenURL with Link(destination:label:).

I definitely should’ve been using a Link before but this seems like a


4. Now I need to get those disclosure indicators back in a nice way.

Alright NavigationStack + Button + navigationDestination wasn't necessary. Revisited developer.apple.com/documentat and realized that the problem was NavigationLink(destination: () -> View, label:) and the fix is simply NavigationLink(value: Hashable?, label:) + navigationDestination. Glad I didn't spend too much time on it. Still got those speed improvements, more to test too.

> There are several benefits to using folders instead of groups when organizing your Xcode project files. Folders have a much smaller representation in the project file, which can result in fewer merge conflicts because when you add or remove files to the project you don’t modify the project file. Additionally, your Xcode project file automatically updates as you make changes to the file system.
developer.apple.com/documentat

Today in Bike Index:
- Merged Bike ↔︎ User/AuthenticatedUser relationships, transactions, and frequent save() to fix the #1 crash/bug report
- Fixed GitHub "Enable auto-merge [after PR checks pass]" (gotta use jobs > build > name: Run tests with fastlane → Ruleset add checks
- Converted Xcode project groups to Folders

New in PR review:
- Added app version to Settings
- Updated README with TestFlight public beta link and incremented to version v1.1!
Phew what a day! 🤩

Not yet v1.1, some more fixes to add first.

I haven't found explicit confirmation but the standard Swift Format config location is .swift-format.

Both UI and CLI respect this config by default in Xcode 16.0
- Xcode > Editor > Structure > Format File with 'swift-format’
- swift format --in-place --recursive paths…

Inferred from github.com/swiftlang/swift-for and trial+error

According to this article ~/.swift-format (home directory) will also be read by Xcode/CLI troz.net/post/2024/swift_forma

Ahh I've fallen behind on updating this build-in-public thread. Still building, but life has been a little too busy to keep up here enough. Plan to keep posting soon :)

Hm, are "Development Assets" broken on Xcode 16? I had it working before but haven't look at this preview data in a while.

I have Development Assets > json file, scanning Bundle.allBundles is not able to load this. Maybe this broke during my Convert To Folder change? This article from October is the only one I've found discussing loading json files (with the scan allBundles approach). medium.com/@wesleymatlock/how-

Medium

How to Use SwiftUI’s Preview Content with the #Preview Macro

SwiftUI has transformed UI development across Apple platforms with its declarative syntax and powerful preview capabilities. With the introduction of Swift 5.9, Xcode 15, and iOS 17, new features…

Previously: Development Assets seemed broken (the post this one is replying to)
A: Fixed it with adding the assets to the build target, and to the development_assets_paths, as seen in changeset github.com/bikeindex/bike_inde (and renamed the file in this change too)

Is anyone else seeing brew bundle fail? On GitHub Actions I'm seeing a 50% failure rate 😕
"Error: homebrew/bundle was deprecated. This tap is now empty and all its contents were either depleted or migrated.”
But it succeeds locally with brew update!
Ex: github.com/bikeindex/bike_inde

Today:
- Merged QR Sticker universal links esupport!
- Very pleased with this new test suite: ViewModel unit tests and a small start for UI tests on universal links.
- Waiting for v1.3 App Review 😇 and integration testing soon 😁

(Sorry for two links which some clients don't display well but…)
1. How to use Bike Index QR Stickers -- order yours today! bikeindex.org/info/how-to-use-
2. Pull request with a mad-scientist Mermaid 🧜‍♀️ state diagram github.com/bikeindex/bike_inde

Today:
- released Bike Index iOS v1.3 with QR stickers support!!!!!!
- took a bit of back and forth to pass app review but we’re here now!

also! now the app needs image caching because changing grouping draws a new AsyncImage and glitches with the background – fixed 💃
First gif: before. Second gif: after.

TIL:
App Store Marketing Tools toolbox.marketingtools.apple.c will generate promotional images like this one for your app. I just wish there was a text field instead of these bland "See what's new" phrases—I want to tell people exactly what is new!

heh, UITests just saved me from shipping "What _do to_ if your bike is stolen"

Today in Bike Index:
- fixed a crash when uploading images (credit to @caleb again!)
- built the data layer for “Recently Scanned QR Stickers”, although… the @ Tests(arguments:) keep failing on “test is already running”. Not sure what’s going wrong there yet.
- next/later: UI for recently scanned stickers.
- went for a small bike ride to get dirt and potted the begonia lucerna propagations! 80° ☀️ here. So glad to get moving again.

When you use Swift Testing, make sure any @\Tests(arguments:) helper arg Struct/Class conforms to CustomTestArgumentEncodable. Write the func encodeTestArgument(to encoder: some Encoder) just like any other encoder with stable and unique values, omitting large non-unique values.

If you omit this you'll hit "encountered an error (Received unexpected event testCaseDidStart for $test (iteration 1). Test already started.)" (repeatedly)
developer.apple.com/documentat

Today is the 1-year anniversary of the Bike Index for iOS 1.0 app launch 🥳 iosdev.space/@j4ck/11248695766

Huh, running Date.now in a unit test iOS simulator ("Clone 1 of iPhone 16") is returning a constant time of 2024-08-13 07:00 (UTC) ?? I don't have any simctl status_bar overrides active.

Has anyone noticed this before? Maybe this is expected behavior from the moment the Simulator was cloned?

Today:
- fixed Recent QR Stickers persistence (keeps 10-most recent within the last 2-weeks. Maybe that's too short but it's easy to adjust later.)
- added referral_source attribution for donations 🤑
- fixed camera/photo-library usage description
- added Recent QR Stickers UI

Look how cute this is!! Now available in TestFlight beta v1.4.1 (41)

Alright so
- Icon Composer exports flag pngs
- it seems like the shine is fixed
😐
I was expecting the shine to be dynamic!

Okay platforms state of the union 16 minute mark notes what I'm doing wrong. "Icon Composer can export a single source to Xcode" and it works best with SVG layers. developer.apple.com/videos/pla

heh, Xcode 26 Beta 1 Pickers have trouble rendering and glitch around when the options have multiple lines of text

TIL "Swift compiler diagnostics", your guide to Swift language error messages
docs.swift.org/compiler/docume

yay the latest Bike Index beta build _should_ fix all the incompatibilities with iOS 26 beta 1.
Mostly: removed all text Labels from Toolbars. The previous Labels with text were totally thrown off in the beta 1 simulator. See screenshot
testflight.apple.com/join/TVaD

heh, one fun way to test a bad network:
1. set URLRequest.timeoutInterval = 1
2. after that line set a breakpoint with action = debugger command = expr sleep(1) and ☑️ automatically continue after evaluating actions

Yesterday in Bike Index iOS:
- merged the most rudimentary NWPathMonitor bike detail offline fallback: first steps to supplanting web views!! 🤩
- the first community pull request was opened!! 🎉 :ablobcatrave: “Adopt robot pattern for universal links UI test” 🤖 github.com/bikeindex/bike_inde
- biked to a concert in the park 🚲🎶

Really proud of the project set up I wrote which has no reported problems: except for GHA CI permissions which was expected. Figuring that out!

Fighting GitHub Actions… and losing

jack

@j4ck@iosdev.space

Is anyone else seeing xcrun simctl status_bar fail to set the date on iPad simulators?

Ex:
1. xcrun simctl status_bar booted override --time "2007-01-09T14:41:00.000Z" (shout out to github.com/jessesquires/Nine41)
2. xcrun simctl status_bar booted override --time "2025-08-20T09:41:00-04:00"
Option 1 will set the time, but not the date. Option 2 will print an error about using ISO dates.

August 20, 2025 at 9:45:04 PM

1/2 Previously on Bike app:
- oh uh been outside and doing other stuff a lot…
- more UI test PRs from community/friend Milo (thx Milo!)
- fixed error alerts (tip don't put a Text in an alert that doesn't do anything!)
- added Recently Scanned Stickers page so you don't immediately lose the context
- adding offline mode, secretly 🤫, with the goal of removing all these web views
- fix iOS 26 compatibility
- add validation requirements and progress to registration!

2/2 Previously on Bike Index app:
- updated the 🏳️‍🌈🏳️‍⚧️ Pride 2025 alternate app icon — why yes I am always on time to every event, why do you ask? 🏳️‍🌈🏳️‍⚧️
- Just submitted these updates in a new build 🤞

Elk Logo

Welcome to Elk!

Elk is a nimble Mastodon web client. You can login to your Mastodon account and use it to interact with the fediverse.

Expect some bugs and missing features here and there. Elk is Open Source and we're actively improving it as a community project. Join us and let's build it together!

If you'd like to report a bug, help us testing, give feedback, or contribute, reach out to us on GitHub and get involved.

To boost development, you can sponsor the Team through GitHub Sponsors. We hope you enjoy Elk!

TAKAHASHI Shuuji三咲智子 Kevin DengAnthony FuDaniel RoeJoaquín SánchezPatak

The Elk Team