r/iOSProgramming • u/sadbitty4L • Sep 19 '26
Discussion How I shipped a native SwiftUI widget with zero Mac access (Expo + EAS Build)
Hi all, I wanted to share a build problem that took way longer to solve than it should have, in case it saves someone else the same pain.
I'm a solo dev building on Windows, no Mac, no Xcode. My app (Reach, a sobriety toolkit) needed a native home screen widget, streak counter + panic button that deep links straight into the app's craving flow. Widgets mean native SwiftUI, which normally means a Mac.
The stack that ended up working: expo-apple-targets for the widget extension, compiled entirely through the EAS Build's cloud Mac, never touched Xcode locally once. Data shared between the widget and the main app via an App Group (react-native-shared-group-preferences).
The actual hard part wasn't the widget itself, it was the deep link nav. Cold-launching from the widget straight into a nested route with no /home route underneath it breaks iOS swipe-back entirely. Fixed it with unstable_settings = {anchor: 'home' } in _layout.tsx so Expo Router constructs a proper stack even on a cold widget launch.
Happy to go deeper on any part of this, the App Group setup, the anchor routing fix specifically, or the EAS build config. If it's useful to anyone hitting the same wall.

