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 · 06/06/2025
Yes, they compose into the underlying hosting views and layers. But layout and animation happens entirely in-process on an internal clock (that does not even support frame rates higher than 60fps) before being sent to the Core Animation render server.
120
Mike Apurin @auramagi.bsky.social · 06/06/2025
In the sense that it’s what actually does rendering on the GPU, sure. But not as backing for views and animations.
100
Mike Apurin @auramagi.bsky.social · 06/06/2025
I’ll try to make it!
010
Mike Apurin @auramagi.bsky.social · 06/06/2025
Hmm, can’t decide if the fact they already have camera APIs for enterprise makes it more likely they open them up... or less 🙃
100
Mike Apurin @auramagi.bsky.social · 05/06/2025
Generally all the points of integration with the OS. There is like a dozen of features NSUserActivity is used for. UIActivity, UIApplicationShortcutAction, the remaining INIntents, and so on.
000
Mike Apurin @auramagi.bsky.social · 05/06/2025
The fact that UIKit is backed by Core Animation is super under appreciated. There was so much care put into making sure UI runs smoothly even when your process is under heavy load -- entirely missing in SwiftUI.
120
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
No new warnings, btw
000
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
The only other similar product I know is Sharp ePoster, but they're BtB and cost ~$3000 smj.jp.sharp/bs/eposter/
smj.jp.sharp
電子ペーパーディスプレイ ePoster:シャープマーケティングジャパン
シャープの電子ペーパーディスプレイePosterのサイトです。ecology環境配慮・easy簡単・empower管理の3つのeをご提供。
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
(The screenshot uses the debug environment variable to downgrade the crash to a runtime warning: SWIFT_IS_CURRENT_EXECUTOR_LEGACY_MODE_OVERRIDE=nocrash)
010
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 · 16/12/2024
Apple granted the CarPlay audio entitlement. Seems like there is no gotchas, just need to apply and wait for a few weeks.
010
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
It's a whopping 62 hours 😲 Even after shortening silences (-15%) and at 1.5×, it's still 36 hours of playback — not a single weekend commitment.
000
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 · 06/12/2024
Thinking in SwiftUI was the single best thing I’ve read that explains how SwiftUI works instead of just introducing all the views and modifiers. www.objc.io/books/thinki...
objc.io
Thinking in SwiftUI
A Transition Guide
240
Mike Apurin @auramagi.bsky.social · 05/12/2024
Transition animations this time, specifically between VCs that show a toolbar and don't.
100
Mike Apurin @auramagi.bsky.social · 05/12/2024
UINavigationController must be the most cursed component in all of iOS.
100
Mike Apurin @auramagi.bsky.social · 30/11/2024
I've never heard that, but thanks for the new pet peeve 🫠
110
Mike Apurin @auramagi.bsky.social · 29/11/2024
Hi! 👋
010
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
Looking at the expanded code, I don't see why @.Previewable needs to be 17.0+, and didn't get backported by Apple.
000
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
I soo regret I didn't get it when it was available 😭
100
Mike Apurin @auramagi.bsky.social · 28/11/2024
I got the idea from your post. I didn't deploy in time for the review, so still not sure if Apple would have problems with this 😅 bsky.app/profile/aura...
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
Mike Apurin @auramagi.bsky.social · 27/11/2024
Hi, Ryan! Can you add @everywordapp.com? 😃
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
👋 apple.co/3RgvUtl
apple.co
‎Every Word: Audiobook Player
‎Every Word is a player for your audiobooks. Organize and explore your audiobook collection with easy-to-use features and a friendly interface. --- IMPORT AND STORE YOUR AUDIO FILES With support for...
110
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
Mike Apurin @auramagi.bsky.social · 20/11/2024
Neat!
010
Mike Apurin @auramagi.bsky.social · 20/11/2024
Starter packs are a killer feature, I'm already following more people here than on Mastodon.
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