Dani Devesa
banner
dadederk.bsky.social
Dani Devesa
@dadederk.bsky.social
#iOS @ Yoto. Previously: Apple (contractor), Spotify, Skyscanner & BCC. #365DaysIOSAccessibility. http://accessibilityUpTo11.com
So great to meet you!

And I can prove we did meet! 😁
October 9, 2025 at 6:45 PM
Don’t think it’ll be ready by Monday. And am I ready? Probably not… 😅

But here we go! Version 1.0 is officially submitted for review.
This is the worst it’s ever going to be. From here it only gets better.

Hope you enjoy using it as much as I’ve enjoyed building it!

#BuildInPublic
September 13, 2025 at 11:49 AM
Creating adaptive apps that feel great across devices and configurations is easier than ever!

Next: giving some love to the iPadOS version.

Switch from a List to a NavigationSplitView that holds the List and displays the Transcript in the Detail pane... and voilà, magic!

#BuildInPublic
September 13, 2025 at 9:30 AM
I’ve added some sample content to Xarra, so the app isn’t empty on first launch, but also to serve as a little onboarding that shows what it does and how to use it.

Let’s play a game! Can you guess where I got the inspiration for the first few lines? 👀

#BuildInPublic #iOSDev
September 10, 2025 at 11:12 PM
This isn’t the typical implementation of Reduce Motion, but I think I like it!

Normally, when scrubbing the slider to jump around an audio document, the transcript view scrolls in real time, which can feel useful, but also a bit overwhelming with so much movement on screen.
August 26, 2025 at 11:03 PM
First, I tried a split-screen approach (transcript on one side, controls on the other). But with Dynamic Type, that left very little room for text.

In the end: when in landscape, there’s now a button in the navigation bar to show/hide a floating playback control panel.

#BuildInPublic #iOSDev
August 23, 2025 at 8:20 PM
I’ve just promoted Xarra from Alpha to Beta! 🚀

The tint color is now Indigo. Orange felt a bit distracting, and Indigo has a calmer vibe. I’m surprised it’s not used more often; it’s one of the system colors with the best overall contrast.

Also, updated the placeholder icon.
August 22, 2025 at 11:41 PM
I think I can already call Xarra a success! I haven’t even shipped it yet, but it’s become part of my morning walk routine.

If I’m finding it this useful, I’m sure others will too.

Next: making it work with the system’s playback controls.

testflight.apple.com/join/sjk3n7y6

#BuildInPublic
August 22, 2025 at 4:42 PM
Vibe-coding can sometimes be:

You: Can you fix warning X in Y?
Vibe-coding tool: Sure! I’ve deleted the code, so no more warnings. Also, I changed the button styles, moved things around, and decided the context menu should live in its own modal for no reason.

True story.

#VibeCoding
August 19, 2025 at 12:30 PM
Two problems though: When popping the view, the sheet stays for a couple of seconds before disappearing abruptly. The Large Content Viewer appears in the middle of the sheet (instead of the screen), which makes it not very useful.

Am I holding it wrong? Or should I file a Radar?
August 17, 2025 at 8:11 AM
I’ll always use a native component over building my own if I can avoid it. But I’m struggling with this one!

I’m presenting the playback controls in a sheet with presentation detents: one small for basic controls, one larger for extra options. On paper, it seemed perfect.
August 17, 2025 at 8:11 AM
New feature! I’ve added a very basic Share Extension so you can easily export content to Xarra: Share a URL from Safari and the app will extract the content. Or share text from Notes (or any other app that supports text sharing).
August 17, 2025 at 6:55 AM
It’s such a joy when these App Store Connect notifications pop up with tester feedback! 🙌 Every little comment helps shape the app into something better.

Please keep them coming!

And if you haven’t tried it yet, you can download the app from TestFlight:
testflight.apple.com/join/sjk3n7y6
August 16, 2025 at 8:37 PM
New settings screen in Xarra! 🎉

Toggle (on by default) to respect your assistive technology voice settings.
Voice selector to choose a different voice manually.
Custom number of lines to skip (5, 10, or 15).
Option to highlight the current word being spoken.

And more...
August 14, 2025 at 9:06 PM
One thing I’ve been thinking about during this process is how to make the app accessible.

Dynamic Type can be challenging, but it’s also a lot of fun. Pixel-perfect is dead, long live adaptive and accessible iOS apps.

#BuildInPublic
August 12, 2025 at 3:32 PM
I know I said I’d pause development for a bit… but I’ve been using Xarra myself (and actually finding it useful! 😊) and realised there was a feature I really missed.

The app now remembers your progress when listening to Audio Documents.
August 12, 2025 at 9:24 AM
If you’ve missed my last posts… meet Xarra!

It’s an app that lets you: Write or paste some text; or Attach a document; or Import content from a website… and then listen to it.

If you’re often on the go and want to go through some reading without staring at a screen, I hope you’ll find this useful.
August 11, 2025 at 6:54 AM
Svetlana's comment on LinkedIn: www.linkedin.com/feed/update/...

And a quick snipped of the code with the prompt that produced that result.

#BuildInPublic
August 10, 2025 at 9:54 AM
So I tried it… and I think I might be onto something here. Possibly one of the coolest applications of the framework! 😊

#BuildInPublic
August 10, 2025 at 9:54 AM
Svetlana S. gave me a great idea: wouldn’t it be amazing if the app could read code in a way that’s easy to understand?

That would be super useful, and what a great challenge.

Then I thought: isn’t this the perfect use case for Foundation Models?

#BuildInPublic
August 10, 2025 at 9:54 AM
First pass at implementing a playback speed selector.

The menu currently offers: 2.0x, 1.5x, 1.25x, 1.0x, 0.75x, and 0.5x.

I might need to tweak which speeds to include, or consider a more flexible control for finer adjustments.

#BuildInPublic
August 8, 2025 at 1:08 PM
This is starting to take shape! Still needs polish, but it answers the main question: is this viable? It seems like it is! In this video: It starts playing a few lines; I use the slider to jump ahead; Test the skip buttons: 5 lines forward and 5 lines backward.

#BuildInPublic
August 8, 2025 at 12:16 PM
Solution: NaturalLanguage framework! I’ve used it before for things like lemmatization (reducing words like “running” to “run”), but it can do a lot more: Detect the language of a string; Identify people, places, etc. in a sentence.

And in my case: split text into sentences reliably!
August 8, 2025 at 9:59 AM
The second screen is coming together nicely! This is the first version of the playback view: Displays a list of lines to be read aloud. Highlights the active one in real-time. Includes a bottom panel with basic controls. Still needs work, but quite happy with where it’s going.

#BuildInPublic
August 7, 2025 at 9:31 PM
For the next screen, I'll to borrow some inspiration from Spotify’s lyrics view.

I love how it makes reading along with audio feel effortless.

Planning something similar: the text being read highlighted in real-time. Playback controls will sit at the bottom (play, skip...).

#BuildInPublic
August 7, 2025 at 12:13 AM