Alex Lenkei
@alexlenkei.bsky.social
Learning Swift and SwiftUI to build Informed, a civic and political data app for iOS: @beinformed.app // https://beinformed.app/
Other interests: Reading 📚 | Hiking 🥾 | Traveling ✈️ | Photography 📸 | Nature 🌲 | Politics 🏛️ | Running 🏃 (he/him)
Other interests: Reading 📚 | Hiking 🥾 | Traveling ✈️ | Photography 📸 | Nature 🌲 | Politics 🏛️ | Running 🏃 (he/him)
Implemented a much better filter picker for the election results list 👀 When you select one filter, the available options of the other filters will be reduced to only include those that have elections, so you can't create a combination of filters that leads to no elections.
November 5, 2025 at 2:40 PM
Implemented a much better filter picker for the election results list 👀 When you select one filter, the available options of the other filters will be reduced to only include those that have elections, so you can't create a combination of filters that leads to no elections.
We have animating, live election results :)
November 5, 2025 at 12:25 AM
We have animating, live election results :)
For election nerds, it will be a busy day. I'll be focusing on testing and debugging the live election results feature in @beinformed.app. I *could* set up some dummy data but it's always best to test with the real thing. The only problem is having to actually wait around for the elections to happen
November 4, 2025 at 12:55 PM
For election nerds, it will be a busy day. I'll be focusing on testing and debugging the live election results feature in @beinformed.app. I *could* set up some dummy data but it's always best to test with the real thing. The only problem is having to actually wait around for the elections to happen
Just add a navigation title as normal and a blank string as a ToolbarItem in the .principal placement, which will cover/hide the nav title.
November 2, 2025 at 7:24 PM
Just add a navigation title as normal and a blank string as a ToolbarItem in the .principal placement, which will cover/hide the nav title.
If you ever want to hide the navigation bar title (but not the entire navigation bar) and still want to have a nav title that is shown when users long press on the back button, you can do that.
November 2, 2025 at 7:24 PM
If you ever want to hide the navigation bar title (but not the entire navigation bar) and still want to have a nav title that is shown when users long press on the back button, you can do that.
So the API I use to pull upcoming elections does not distinguish between different House elections in the same state. Of course, to fetch information about a particular district's election (candidates, campaign finance info), I need the user to manually select a district, hence the solution below.
November 2, 2025 at 12:53 AM
So the API I use to pull upcoming elections does not distinguish between different House elections in the same state. Of course, to fetch information about a particular district's election (candidates, campaign finance info), I need the user to manually select a district, hence the solution below.
I've brought the UI and logic of the Mail app's filter picker to Informed. The advantages of this UI are that you can easily turn the filter "off" while still saving your filter selections and you can easily see what those options are. #SwiftUI
October 30, 2025 at 11:49 PM
I've brought the UI and logic of the Mail app's filter picker to Informed. The advantages of this UI are that you can easily turn the filter "off" while still saving your filter selections and you can easily see what those options are. #SwiftUI
Made a few minor adjustments to the sheet/picker style. Full code: gist.github.com/alexl9412/54...
October 30, 2025 at 12:25 PM
Made a few minor adjustments to the sheet/picker style. Full code: gist.github.com/alexl9412/54...
And now I've duplicated the filtering logic. Looks pretty good overall! My only annoyance is that when changing the filter option from "All" to another option (or vice versa), the first time the filter button expands/contracts, it animates, but not on subsequent times.
October 29, 2025 at 8:45 PM
And now I've duplicated the filtering logic. Looks pretty good overall! My only annoyance is that when changing the filter option from "All" to another option (or vice versa), the first time the filter button expands/contracts, it animates, but not on subsequent times.
I've improved this a little bit. The animation and animation speed don't quite match the one in Mail, but this works for now:
October 29, 2025 at 3:25 PM
I've improved this a little bit. The animation and animation speed don't quite match the one in Mail, but this works for now:
Here's the Mail example:
October 29, 2025 at 2:09 PM
Here's the Mail example:
Trying to learn the new Liquid Glass and Toolbar APIs by re-creating the filter picker in Mail, but I'm not quite getting the animations/interactions right. Is this a ToolbarItemGroup? A GlassEffectContainer? I haven't seen any other attempts online.
October 29, 2025 at 2:09 PM
Trying to learn the new Liquid Glass and Toolbar APIs by re-creating the filter picker in Mail, but I'm not quite getting the animations/interactions right. Is this a ToolbarItemGroup? A GlassEffectContainer? I haven't seen any other attempts online.
Hey! 👋 It's been awhile. 4 months ago, I set my little app project aside because I was feeling burnt out, discouraged, and a little overwhelmed by WWDC25. But I've been poking my head back in Xcode for the past few days, updating things for Liquid Glass, fixing bugs, & working on the search feature!
October 27, 2025 at 2:09 PM
Hey! 👋 It's been awhile. 4 months ago, I set my little app project aside because I was feeling burnt out, discouraged, and a little overwhelmed by WWDC25. But I've been poking my head back in Xcode for the past few days, updating things for Liquid Glass, fixing bugs, & working on the search feature!
That's helpful! It looks like this change effects segmented pickers but not those created with the .searchScopes modifier, indicating that the Music app uses the former. I tried placing the picker with ToolbarItem(placement: .principal) and others, but the picker disappears when search is activated.
October 25, 2025 at 4:09 PM
That's helpful! It looks like this change effects segmented pickers but not those created with the .searchScopes modifier, indicating that the Music app uses the former. I tried placing the picker with ToolbarItem(placement: .principal) and others, but the picker disappears when search is activated.
Here's a better illustration of the problem. I've been trying to update my app's search feature for iOS 26 but can't get the search scopes/segmented picker to match the appearance and behavior of the one in the Music app. Any ideas?
October 25, 2025 at 3:03 PM
Here's a better illustration of the problem. I've been trying to update my app's search feature for iOS 26 but can't get the search scopes/segmented picker to match the appearance and behavior of the one in the Music app. Any ideas?
How did Apple increase the size/padding around this segmented picker in the iOS 26 Music app? When using either search scopes or a regular segmented picker, I can’t figure out how to increase the height around the text
October 25, 2025 at 2:06 AM
How did Apple increase the size/padding around this segmented picker in the iOS 26 Music app? When using either search scopes or a regular segmented picker, I can’t figure out how to increase the height around the text
Mock ups for light, dark, and clear:
June 10, 2025 at 1:07 AM
Mock ups for light, dark, and clear:
Playing around a bit with the new Icon Composer app for Informed’s beta icon. On the left is the current design.
June 10, 2025 at 12:52 AM
Playing around a bit with the new Icon Composer app for Informed’s beta icon. On the left is the current design.
I don’t recall exactly where I got the Arc (rip) icon below, whether it was official or third party, but in terms of design, it would fit right in with iOS 26’s Liquid Design.
June 10, 2025 at 12:46 AM
I don’t recall exactly where I got the Arc (rip) icon below, whether it was official or third party, but in terms of design, it would fit right in with iOS 26’s Liquid Design.
Fixed a small bug with search suggestions not appearing correctly when the remaining suggestion substring (“a,” in this case) appears in the matching substring (the 2nd and 3rd “a”s in “Alaska,” in this case).
June 1, 2025 at 12:58 PM
Fixed a small bug with search suggestions not appearing correctly when the remaining suggestion substring (“a,” in this case) appears in the matching substring (the 2nd and 3rd “a”s in “Alaska,” in this case).
I know I can use the objects' persistentModelID, which is Sendable, and retrieve the objects that way, but if I have several different types of models, that doesn't seem very scalable. Is there an alternative?
May 31, 2025 at 3:03 PM
I know I can use the objects' persistentModelID, which is Sendable, and retrieve the objects that way, but if I have several different types of models, that doesn't seem very scalable. Is there an alternative?
If I retrieve an array of SwiftData objects with a ModelActor (which aren't Sendable) and need to use them on the MainActor, I'm told the "actor-isolated property 'results' cannot cross actor boundary." What's the Swift 6-compatible way of fetching objects in the background & then using in the UI?
May 31, 2025 at 3:03 PM
If I retrieve an array of SwiftData objects with a ModelActor (which aren't Sendable) and need to use them on the MainActor, I'm told the "actor-isolated property 'results' cannot cross actor boundary." What's the Swift 6-compatible way of fetching objects in the background & then using in the UI?
Playing around with an idea for a no-frills quote app
May 13, 2025 at 3:34 PM
Playing around with an idea for a no-frills quote app
Solved it! The second page is now animating as intended, regardless of how you navigate the pages. The solution? LazyHStack -> HStack.
May 10, 2025 at 4:22 PM
Solved it! The second page is now animating as intended, regardless of how you navigate the pages. The solution? LazyHStack -> HStack.
File this under bugs I will never understand. The video below shows an onboarding flow as both a preview and on the simulator. There are three ways to navigate: gesture-based scroll, tap the arrow at the bottom, or tap the page indicators at the top.
May 10, 2025 at 1:01 PM
File this under bugs I will never understand. The video below shows an onboarding flow as both a preview and on the simulator. There are three ways to navigate: gesture-based scroll, tap the arrow at the bottom, or tap the page indicators at the top.