Sign in

Mike Apurin

@auramagi.bsky.social
307 followers 543 following 41 posts

I make iOS apps. Located in Kyoto, Japan. 🦣 Mastodon hachyderm.io/@auramagi 📝 Blog (rarely active) apurin.me 📚 Every Word: iOS Audiobook Player @everywordapp.com

PostsRepliesMedia
Mike Apurin @auramagi.bsky.social · 10/06/2025
#WWDC25 in Markdown: transcripts, code snippets, resource links for all sessions gist.github.com/auramagi/9c0...
gist.github.com
Transcripts from all WWDC 2025 sessions
Transcripts from all WWDC 2025 sessions. GitHub Gist: instantly share code, notes, and snippets.
010
Mike Apurin @auramagi.bsky.social · 05/06/2025
My WWDC wishlist is basically the same as last year: - SwiftUI needs to get fundamentally more performant - App Intents should take over even more of the system
380
Mike Apurin @auramagi.bsky.social · 04/06/2025
Back from my social media break, did I miss anything?
000
Reposted by Mike Apurin
Matt Massicotte @massicotte.org · 23/02/2025
There were some interesting concurrency-related changes in Swift 6.1! Check them out. www.massicotte.org/concurrency-...
massicotte.org
New Concurrency Stuff with 6.1
At long last, there now a beta release of Swift 6.1! There are a few interesting things in here for those concurrency enthusiasts out there, and I wanted to go over them quickly.
43610
Mike Apurin @auramagi.bsky.social · 16/01/2025
It's time
100
Mike Apurin @auramagi.bsky.social · 15/01/2025
Me 🤝 _UINavigationBarPalette
000
Mike Apurin @auramagi.bsky.social · 15/01/2025
Giant e-ink posters — I’ve been waiting for this product category to emerge for so long. www.youtube.com/watch?v=GZov... inkposter.com
youtube.com
World's First E Ink Art Frame - The Pocketbook InkPoster Launch
YouTube video by Vladimir Kostek
110
Mike Apurin @auramagi.bsky.social · 30/12/2024
You might assume that since Binding conditionally conforms to Sendable and has an initializer that seems isolation-aware, it would be... sendable. It isn’t. Touching the value outside its intended isolation is unsafe. In Swift 6, this will crash your app for Bindings created with .init(get:set).
210
Mike Apurin @auramagi.bsky.social · 11/12/2024
Working on a redesign, and I really like these bigger cards for the listening section. But showing the title and author below the cover feels a bit too Jacobs by Marc Jacobs for Marc by Marc Jacobs.
iOS app showing Listening and Recently Added sections with audiobook covers. The Listening section has audiobook title and author under the cover, effectively duplicating this information.
020
Mike Apurin @auramagi.bsky.social · 06/12/2024
There's a neat symbol often used for audiobooks: ℗ (U+2117 sound recording copyright) In Apple's fonts, it looks bad: small and off-center. A replacement is Ⓟ (U+24C5 circled letter P), but that's awkward for editable fields. So, for my app I ship a font consisting of just that single symbol. 🙃
Image showing how these symbols are rendered in SF Pro: ℗ © ⓅXcode with “SoundCopyright.ttf” selected. The font contains just the symbol ℗Image of text:

©2024 Brandon Sanderson ℗2024 Macmillan Audio
010
Mike Apurin @auramagi.bsky.social · 06/12/2024
Weekend plans just arrived #WindAndTruth
Wind and Truth audiobook being played on iOS
100
Mike Apurin @auramagi.bsky.social · 06/12/2024
Open Bluesky app Want to view new posts Tap home to scroll to top Tap home the second time to refresh It refreshes And then refreshes again Every time
030
Mike Apurin @auramagi.bsky.social · 05/12/2024
UINavigationController must be the most cursed component in all of iOS.
100
Reposted by Mike Apurin
Neil Sardesai @neilsardesai.mastodon.social.ap.brid.gy · 28/11/2024
Thought he could be a lil more cozy :)
111768
Mike Apurin @auramagi.bsky.social · 28/11/2024
TIL: Code after the @.Previewable macro doesn't require a return statement, despite what the docs suggest. This is because the macro expands to a wrapper struct, with other code placed in the body using a @.ViewBuilder. Neat!
Official docs on @Previewable: #Preview("toggle") {
    @Previewable @State var toggled = true
    return Toggle("Loud Noises", isOn: $toggled)
}Valid code:
#Preview("toggle") {
    @Previewable @State var toggled = true
    Toggle("Loud Noises", isOn: $toggled)
}Xcode showing the expanded contents of a #Preview macro as used in the previous image.
110
Mike Apurin @auramagi.bsky.social · 28/11/2024
See, the reason everyone keeps making dumb decisions in Silo S1 is actually simple: the scrubbers failed ages ago, and now everyone has generational brain damage from chronic high CO2 exposure.
010
Mike Apurin @auramagi.bsky.social · 28/11/2024
Took the opportunity to brush up the paywall. It's nothing complex, but the top section can now be configured remotely with custom text, colors, and Markdown for the main text.
010
Mike Apurin @auramagi.bsky.social · 28/11/2024
How difficult is a CarPlay entitlement nowadays for an audio player app? Any hidden gotchas?
100
Reposted by Mike Apurin
Every Word: Audiobook Player @everywordapp.com · 27/11/2024
Every Word joins #IndieAppSales this year for a #BlackFriday sale! For the first time ever, Every Word Plus is discounted 🎉 - One year: 50% off with offer code BLACKFRIDAY24 - Lifetime: 25% off Available now through December 3rd — don’t miss out!
Black Friday Sale — Until December 3rd

One year is $7 (50% off) with code BLACKFRIDAY24

Lifetime is $30 (25% OFF)
024
Reposted by Mike Apurin
Every Word: Audiobook Player @everywordapp.com · 27/11/2024
Hi Bluesky! 👋 Every Word is a player for your DRM-free audiobooks. Import MP3 and M4B files to enjoy your collection with features like silence shortening, adjustable speeds, chapter navigation, listening stats — all in a sleek, user-friendly design. Available for iOS and iPadOS.
3 screenshots of Every Word, showing the Home, Info, and Player screens.
042
Mike Apurin @auramagi.bsky.social · 21/11/2024
With UITab extensively replacing UITabBarController APIs in iOS 18, it feels like older methods will be deprecated in a couple of releases.
Screenshot of UITabBarController headers:

/// An array of root tabs representing view controllers to display by the tab bar interface. Default is empty.
/// Once set, `UITabBarController.viewControllers` and related properties and methods will not be called.
@available(iOS 18.0, *)
open var tabs: [UITab]
000
Mike Apurin @auramagi.bsky.social · 21/11/2024
If I listen to exactly 4 hours of podcasts in Overcast every day until the end of this year, I can still catch up to 2023.
Overcast: 401 hours total listening time in 2024Overcast: 561 hours total listening time in 2023
020
Reposted by Mike Apurin
Jay ᯅ | iOS Dev  @creativewith.in · 20/11/2024
Not too bad. Here are some good starter packs: - Mobile Devs: go.bsky.app/7wmo12t - Apple Developers  I: go.bsky.app/66G7TY4 - Apple Developers  II: go.bsky.app/M8xLgeS
131
Mike Apurin @auramagi.bsky.social · 20/11/2024
So, how active is iOS dev community here?
250