Sign in

Axel Le Pennec

@alpennec.com
402 followers 128 following 753 posts

Indie app developer (Apple platforms) from Paris, France 🇫🇷

PostsRepliesMedia
Axel Le Pennec @alpennec.com · 14/07/2026
In #SwiftUI, how to have a content always visible at the bottom of the screen (like the Apple Music mini player or an onboarding "next" button)? safeAreaInset/safeAreaBar modifier on a NavigationStack does not update the stack content inset. FB23732628 github.com/feedback-ass...
201
Axel Le Pennec @alpennec.com · 10/07/2026
And of course it's working fine with UIKit in iOS 26 + iOS 27...
011
Axel Le Pennec @alpennec.com · 10/07/2026
Ah, obviously it's working fine on iOS 17 and iOS 18 🙈 And the issue appeared with iOS 26. So another regression it seems 🫤
111
Axel Le Pennec @alpennec.com · 09/07/2026
Is there a way to avoid the #SwiftUI List jumping when using a swipeAction that inserts/removes the same item in the List ("Favorites" section) while keeping the original item in the List? The animation is smooth if I perform the same action when tapping. Gist: gist.github.com/alpennec/f9d...
320
Axel Le Pennec @alpennec.com · 30/06/2026
It's back on iOS 27 😞 FB23500349
020
Axel Le Pennec @alpennec.com · 30/06/2026
An Apple Developer Tools Engineer confirmed we can't use a string catalog for this use case and we must use a .stringsdict file instead 🫡
140
Axel Le Pennec @alpennec.com · 28/06/2026
The solution is to translate the TypeDisplayRepresentation name in a .stringsdict file. For a DeleteIntent, it seems this is used instead of the @.Parameter title. See the "Accelerating app interactions with App Intents" sample code from Apple: developer.apple.com/documentatio...
010
Axel Le Pennec @alpennec.com · 28/06/2026
When conforming to DeleteIntent, is there a way to show the plural form of the entity ("Books" vs "Book") in the Shortcuts app? DeleteIntent requires an AppEntity array, but it ignores the parameter title and instead uses the entity typeDisplayRepresentation (which is singular).
220
Axel Le Pennec @alpennec.com · 24/06/2026
The CSSearchableItem(appEntity:) method is marked as iOS 18+ but my app crashes when it launches on iOS 18+, even if I wrap the lines in #if available(iOS 26, *). It works fine on iOS 26+. Any idea if that can be solved and how? Documentation: developer.apple.com/documentatio... cc @mgorbach.name
000
Axel Le Pennec @alpennec.com · 24/06/2026
Simulator regression summary 😭 - iOS 18.6: ✅️ - iOS 26.3.1: ✅️ - iOS 26.4.1: ✅️ Shortcuts & intents correctly run but only one suggestion is used to create the shortcuts❌️ - iOS 26.5: ❌️ No shortcuts created. Not possible to run shortcuts or intents. - iOS 27: ❌️ Same as 26.5.
030
Axel Le Pennec @alpennec.com · 24/06/2026
Apple, can you please explain why running Shortcuts & App Intents on an iOS 18 simulator works fine but fails miserably on iOS 26.4+ and iOS 27? Can you please fix that for this release cycle? Feedback: FB23342158 Project is a sample code from Apple: developer.apple.com/documentatio...
130
Axel Le Pennec @alpennec.com · 24/06/2026
We can't drag and drop files to DeviceHub as we used to be able to using Simulator? It was quite handy to import files into apps (onOpenURL) 😒 FB: FB23368633
020
Axel Le Pennec @alpennec.com · 23/06/2026
I tried with the attached code. Wdyt? It seems the available choices come from the suggestedEntities if implemented, then from allEntities (EnumerableEntityQuery). If suggestedEntities, there doesn't seem to be a way to choose something else. And allEntities could mean a lot!
200
Axel Le Pennec @alpennec.com · 23/06/2026
App Intents question (again 😅): I notice that some "Find" intents allow to choose specific related items when filtering (e.g. an album when searching for a photo or an author when searching for books) instead of a textfield. How's that done? What drive the available choices?
210
Axel Le Pennec @alpennec.com · 22/06/2026
I'm trying to run the basic widgets extension template from Xcode on a physical device (iOS 18.7.9) but it fails. I tried rebooting my device twice. I tried using Xcode 26.6 too, same issue. I don't know what to do to get it work...
000
Axel Le Pennec @alpennec.com · 22/06/2026
Why can I only search for an indexed item in Spotlight using the title or the displayName on iOS but I can search by any indexed attribute on macOS? 🤔 Is this a bug or expected? I also posted on Apple developers forums with a feedback (FB23317556): developer.apple.com/forums/threa...
010
Axel Le Pennec @alpennec.com · 18/06/2026
With “Find…” actions in Apple #Shortcuts, is there a way to specify only the date part (not the time) for a filter? I now I can omit the time part in my app’s queries but it’s not very intuitive for a user in my opinion. Asking for a friend implementing #AppIntents.
000
Axel Le Pennec @alpennec.com · 17/06/2026
I also have to make sure there is no required migration before using the NSPersistentContainer. How do you do that in your case? See my simplified code.
100
Axel Le Pennec @alpennec.com · 17/06/2026
I'm looking for a sample #SwiftUI project using the AppIntents framework to read/write data from/to #CoreData (and/or #SwiftData). Do I use the AppDependencyManager thing? A database singleton? Do I use the main thread? A background thread/context? Any idea? Thank you!
120
Axel Le Pennec @alpennec.com · 14/05/2026
Is there a way in #SwiftUI to detect when a sheet is being dismissed by a user to present a confirmationDialog in case of unsaved changes, as recommended by Apple HIG about Sheets? In UIKit, we can use the presentationControllerDidAttemptToDismiss method. Feebdack: FB22777840
120
Axel Le Pennec @alpennec.com · 14/05/2026
I don’t think the position is determined by the ButtonRole. If I use the cancel role for example, it’s also positioned on the trailing edge of the navigation bar. Which seems to be opposite to the cancellationAction ToolbarItemPlacement.
020
Axel Le Pennec @alpennec.com · 13/05/2026
But some people on X pointed that Apple doesn’t respect this guideline. Or maybe a “Close” behaves differently than a “Cancel”? 🤔 What’s Apple stake on this @mikestern.bsky.social? Could you please specify in the Apple HIG if this is valid for both Close and Cancel? Thanks! x.com/vistar941/st...
350
Axel Le Pennec @alpennec.com · 13/05/2026
Apple updated its Human Interface Guidelines for Sheets on March 24, 2026 to add guidance for button placement in the toolbar. "In iOS & iPadOS, the Cancel button belongs on the leading edge of the top toolbar." Time to update my apps 🙂 Documentation: developer.apple.com/design/human...
3123
Axel Le Pennec @alpennec.com · 13/05/2026
@mikestern.bsky.social hey Mike. Is there a way to see all changes made to Apple Human Interface Guidelines instead of having to check each page to see the log? Thanks!
030
Axel Le Pennec @alpennec.com · 06/05/2026
Is there a local LLM I can run on my Mac to translate my app’s string catalogs? #xcode #iosdev
121
Axel Le Pennec @alpennec.com · 27/04/2026
Thanks for checking the init! This was my intuition. By the way, Apple actually provides a “fix” (I would call it a hack) ⬇️ I’ve been using that without knowing if it was the right way to do it, before reading it in the documentation 😅 Documentation (ForEach): developer.apple.com/documentatio...
020
Axel Le Pennec @alpennec.com · 23/04/2026
Flo found an alternative to the free trial toggle on its paywall that seems compliant with Guideline 3.1.2 😮 It replaced the toggle by a “Not sure yet? Start a free trial” button that selects the offer with the free trial while presenting a sheet with all subscription options.
000
Axel Le Pennec @alpennec.com · 09/04/2026
The solution is to use .compositingGroup() on the SwiftUI Menu 🎉 Thanks to @saschagordner.de who pointed me to a StackOverflow answer about the exact same issue: stackoverflow.com/a/79884587 Documentation about compositingGroup: shorturl.at/btdM6
290
Axel Le Pennec @alpennec.com · 09/04/2026
Any idea how to fix this Liquid Glass visual bug? In my app, I have a #SwiftUI Menu that presents an overlay over the whole view. But the Menu stays visible for a short period of time until it goes below the overlay 🫤 Works fine on iOS 17/18. Code: gist.github.com/alpennec/31e...
120
Axel Le Pennec @alpennec.com · 25/03/2026
New app analytics are finally live in App Store Connect! Time to explore 🥳 Next: dark mode? 🌚
051
Axel Le Pennec @alpennec.com · 25/02/2026
Expected behaviour, not a regression nor a bug 🫡 Thanks Apple and the SwiftUI team for being reactive!
010
Axel Le Pennec @alpennec.com · 24/02/2026
Dear SwiftUI, can you please fix the regressions you introduced on iOS 26? FB22043999 In my View, I read the dismiss value from the Environment. Whenever a Menu or Picker is opened, the View body is re evaluated 🤷🏻‍♂️ This unexpected behaviour doesn't happen on iOS 18.5 🙃
040
Axel Le Pennec @alpennec.com · 23/02/2026
Lately, I’ve often had to approve transactions in my banking app when making in-app purchases (even free trial). It asks for approval even if I approved another purchase just a few minutes earlier. I wonder whether this added friction hurts conversion rates 🫤 Have you experienced this as well?
000
Axel Le Pennec @alpennec.com · 22/02/2026
TIL SwiftUI has a pixelLength environment value. It's a shortcut to dividing 1 by the displayScale environment value as I did before 🙃 Documentation: developer.apple.com/documentatio...
040
Axel Le Pennec @alpennec.com · 22/02/2026
By observing the top content inset of the scroll view, I notice it gets updated from 0 to top safeAreaInset value when the view appears, and then when I reach the threshold that adds the title view above (which pushes the scroll view down and stop extending below safe area).
000
Axel Le Pennec @alpennec.com · 22/02/2026
I use .frame(in: .scrollView) to read a scroll view offset and show/hide a title. But I observe a jump in the offset if the content extends below the safe area (when there's no View above). Does adding the title change the frame I read? Should it? Code: gist.github.com/alpennec/388...
100
Axel Le Pennec @alpennec.com · 28/01/2026
I often find myself wanting to log the same message when previewing my app in the Xcode canvas and when running it on a Simulator or a physical device. How would you handle using print() for preview and the unified logging system (Logger) at the same time without repeating?
000
Axel Le Pennec @alpennec.com · 20/01/2026
You can still preview the profile.
010
Axel Le Pennec @alpennec.com · 15/01/2026
Who A/B tested if localized prices actually bring more money or not at the end? I know it depends on the app but curious if it's worth checking. What test methodology have you used and what volume of data required to conclude? Do @revenuecat.com or @superwall.bsky.social have some insights? 👀
110
Axel Le Pennec @alpennec.com · 07/01/2026
After the Swift SDK for Android, Swift in the browser with ElementaryUI 🤩 The best time to learn Swift was eleven years ago. The second best is now 😉 elementary.codes
070
Axel Le Pennec @alpennec.com · 18/12/2025
I dug a bit more in this issue where my accentColor is ignored by my SwiftUI apps when I initialize Mixpanel in my App init (early but required). I noticed it's due to the SDK accessing UIScreen.main.bounds.size... My fix is to comment this line ⬇️ More: github.com/mixpanel/mix...
000
Axel Le Pennec @alpennec.com · 18/12/2025
Confirmed by Apple 🫡
0111
Axel Le Pennec @alpennec.com · 16/12/2025
One tip to speed up your SwiftUI previews 🤩 I wanted to centralize constants like opacity, spacing, or sizes used by my View to speed up prototyping. Stored properties: slow 🐌 as Xcode recompiles the file every time I tweak a value. Computed properties: instant updates 🏎️
2101
Axel Le Pennec @alpennec.com · 15/12/2025
SwiftUI AnyShapeStyle, yay or nay? 🤔 I've been using two foregroundStyle for my shaped view backgrounds: one with a Color (often a UIKit one: secondarySystemBackground) + another one with a HierarchicalShapeStyle. But we can get the same with AnyShapeStyle + BackgroundStyle.
020
Axel Le Pennec @alpennec.com · 09/12/2025
Thanks Craig! 😉
070
Axel Le Pennec @alpennec.com · 07/12/2025
Apple, don't be surprised if developers don't file feedback anymore in Feedback Assistant. I take the time to file detailed feedback with steps, device details + screen recording to help improve things for everyone. Please, don’t reply to ask for things I’ve already provided...
040
Axel Le Pennec @alpennec.com · 16/11/2025
A solution suggested by @fatbobman.com is to "duplicate" the top/bottom content: one hidden in the safeAreaInset of each page + one visible/interactive in an overlay of the parent/container View (ZStack). Of course it depends on the onboarding design. Gist: gist.github.com/alpennec/2a3...
010
Axel Le Pennec @alpennec.com · 16/11/2025
I'm building a custom #SwiftUI navigation flow for an app onboarding but I'm having layout issues when moving from steps with/without safeAreaInset content to steps without/with safeAreaInset content. See blue frame. Any idea how to fix this? Gist: gist.github.com/alpennec/e9c... @fatbobman.com
100
Axel Le Pennec @alpennec.com · 15/11/2025
SwiftUI has been released more than 6 years ago but you still have to use UIDatePicker.appearance() to set a minuteInterval other than the default 1 minute to a date picker 🤦🏻‍♂️ Maybe mesh gradients are more used 🤷🏻‍♂️
060
Axel Le Pennec @alpennec.com · 14/11/2025
TIL that we can create custom attributes for AttributedString 🤩 It's very useful for styling text while respecting localization, especially when the styled segments change per language. I specify each attributed segment directly in my string catalog translation, and voilà! ✨
010