Repository navigation
[widgets] Add React hooks stub - #50834
Merged
Merged
Conversation
behenate
approved these changes
Sep 30, 2026
alanjhughes
pushed a commit
that referenced
this pull request
Oct 1, 2026
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing). If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## @expo/[email protected] ### Minor Changes - Emit `{scheme}://?__expo_url={manifestUrl}` development build launch URLs instead of the legacy `{scheme}://expo-development-client/?url={manifestUrl}` form. Add `EXPO_NO_DEV_MENU=1` to append the reserved `__expo_*` params that keep the dev menu closed to Expo Go and development build launch URLs: the terminal URL, the QR code, `/_expo/link`, `/_expo/open`, `expo start --ios/--android` and `expo run:*`. ([#50290](#50290) by [@gabrieldonadel](https://github.com/gabrieldonadel)) ### Patch Changes - Use development for Xcode configurations with `Debug` in the name and production otherwise in `expo run:ios`. ([#49555](#49555) by [@ramonclaudio](https://github.com/ramonclaudio)) - Use React Native's default `debuggableVariants` to pick the mode in `expo run:android`. ([#50204](#50204) by [@ramonclaudio](https://github.com/ramonclaudio)) - Note in `expo start --help` that setting `CI=1` turns off file watching and Fast Refresh, and how to run without the interactive UI instead. ([#50843](#50843) by [@huntie](https://github.com/huntie)) - Remove `EXPO_UNSTABLE_TUNNEL_V2` env flag, and instead make Expo Tunnels the default. `--tunnel ngrok` may be used to switch to the legacy tunnels. ([#50829](#50829) by [@kitten](https://github.com/kitten)) - Updated dependencies. ([#49529](#49529)) - @expo/[email protected] - @expo/[email protected] ## @expo/[email protected] ### Patch Changes - [Android] Only enable LogBox WebView debugging in debuggable apps. ([#49529](#49529) by [@kosumic](https://github.com/kosumic)) ## @expo/[email protected] ### Patch Changes - Updated dependencies. ([#49529](#49529)) - @expo/[email protected] ## [email protected] ### Patch Changes - Bump recommended `@shopify/flash-list` to `2.3.2` and `@shopify/react-native-skia` to `2.13.1`. ([#50824](#50824) by [@zoontek](https://github.com/zoontek)) - [Android] Fix animated GIF and WebP images showing only their first frame in release builds minified with R8. Fresco 3.7.0 creates these decoders through reflection, and R8 removed their constructors. ([#50815](#50815) by [@lukmccall](https://github.com/lukmccall)) - Remove the `AbortSignal.timeout` and `AbortSignal.any` polyfills now that React Native supports them. ([#50770](#50770) by [@Kudo](https://github.com/Kudo)) - [Internal] [iOS] Simplify the SwiftPM autolinking plugin's internals. The generated packages are unchanged. ([#50547](#50547) by [@chrfalch](https://github.com/chrfalch)) - [iOS] Take module identity, deployment target and dependencies from `expo-modules-autolinking prebuilt-metadata` in the SwiftPM autolinking plugin. ([#50548](#50548) by [@chrfalch](https://github.com/chrfalch)) - [iOS] Fix modules that use Expo Swift macros (`@Field`, `@Record`) failing to build from source with the SwiftPM autolinking plugin. ([#50548](#50548) by [@chrfalch](https://github.com/chrfalch)) - Updated dependencies. ([#49555](#49555), [#50204](#50204), [#50843](#50843), [#50290](#50290), [#49529](#49529), [#50674](#50674), [#50829](#50829)) - @expo/[email protected] - @expo/[email protected] - [email protected] - [email protected] ## [email protected] ### Patch Changes - Updated dependencies. ([#50801](#50801), [#49986](#49986), [#50674](#50674), [#50786](#50786), [#50851](#50851)) - @expo/[email protected] ## [email protected] ### Patch Changes - [iOS] Remove the legacy `metrics.json` file left behind by the JSON storage that was replaced with SQLite. ([#50752](#50752) by [@tsapeta](https://github.com/tsapeta)) - [iOS] Add privacy manifest describing required reason API usage. ([#50734](#50734) by [@enavermate](https://github.com/enavermate)) ## [email protected] ### Patch Changes - [Android] Bind the barcode image analyzer only while barcode scanning is enabled, so the camera preview and captured photo use the same frame. ([#50808](#50808) by [@hitanshur](https://github.com/hitanshur)) ## [email protected] ### Patch Changes - Add missing types to `modelId`. ([#50768](#50768) by [@zoontek](https://github.com/zoontek)) ## [email protected] ### Patch Changes - [iOS] Add privacy manifest describing required reason API usage. ([#50734](#50734) by [@enavermate](https://github.com/enavermate)) ## [email protected] ### Patch Changes - [Android] Fix `tintColor` not applying to SVG colors set to `currentColor`. ([#50744](#50744) by [@apuyou](https://github.com/apuyou)) ## [email protected] ### Patch Changes - Updated dependencies. ([#50734](#50734)) - [email protected] ## [email protected] ### Patch Changes - Add a Jest mock for the Android-only `ExpoIntentLauncher` native module, so importing `expo-intent-launcher` under the `jest-expo/android` preset no longer throws `Cannot find native module 'ExpoIntentLauncher'`. ([#50796](#50796) by [@Abdulrahman3fify](https://github.com/Abdulrahman3fify)) ## [email protected] ### Patch Changes - [Web] Fix spaces in the `subject` and `body` of `composeAsync` appearing as "+" in the mail client. ([#41465](#41465) by [@jpaas](https://github.com/jpaas)) ## [email protected] ### Patch Changes - Lay out `RNHostView` hosted content at the size SwiftUI or Compose gives it on an axis that `matchContents` does not match. ([#50674](#50674) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway)) - Updated dependencies. ([#50805](#50805), [#50844](#50844), [#50806](#50806)) - [email protected] ## [email protected] ### Patch Changes - [iOS] Read host object property names through `getPropNameIdData` instead of building a `std::string` for every access, making property access from JavaScript up to 14% faster for long names. ([#50805](#50805) by [@tsapeta](https://github.com/tsapeta)) - [iOS] The `JavaScriptValue`, `JavaScriptObject` and `JavaScriptArray` initializers now take the runtime as `borrowing`, so callers no longer retain it for the call, making host functions that return strings or numbers up to ~15% faster. ([#50844](#50844) by [@tsapeta](https://github.com/tsapeta)) - [iOS] `JavaScriptValue`, `JavaScriptObject` and `JavaScriptArray` now hold a strong runtime handle instead of a `weak` reference to the runtime, which removes the weak reference traffic and slow-path reference counting from their hot paths (for example `getObject()` ~16×, `getArray()` ~12× and `getProperty(_:)` ~1.8× faster). ([#50806](#50806) by [@tsapeta](https://github.com/tsapeta)) ## [email protected] ### Patch Changes - Allow native push token requests to retry after a transient failure while preserving shared in-flight requests. ([#50848](#50848) by [@JoaoPauloCMarra](https://github.com/JoaoPauloCMarra)) - [Android] Fix notification action buttons going missing after an app update that changes R8 minification, until the app is opened again. ([#50799](#50799) by [@icoric4](https://github.com/icoric4)) ## [email protected] ### Patch Changes - [iOS] Remove legacy `UserDefaults` keys that are no longer read. ([#50752](#50752) by [@tsapeta](https://github.com/tsapeta)) - [iOS] Add privacy manifest describing required reason API usage and the collected data types. ([#50734](#50734) by [@enavermate](https://github.com/enavermate)) - Updated dependencies. ([#50752](#50752), [#50734](#50734)) - [email protected] - [email protected] ## [email protected] ### Patch Changes - Fix missing back animation after opening a screen from a link preview on iOS. ([#50839](#50839) by [@Ubax](https://github.com/Ubax)) - Allow setting the native header's light or dark interface style per `Stack` screen on iOS. ([#50765](#50765) by [@Ubax](https://github.com/Ubax)) - [Internal] Remove the `import-mode` module and read `process.env.EXPO_ROUTER_IMPORT_MODE` directly in `useScreens`. ([#50826](#50826) by [@Ubax](https://github.com/Ubax)) - Fix a crash on launch in production when the app has no `scheme`. ([#50708](#50708) by [@expo-bot](https://github.com/expo-bot)) - Resolve Native Tabs `xcasset` icon names through the iOS asset catalog so symbol sets render. ([#48301](#48301) by [@CavalcanteLeo](https://github.com/CavalcanteLeo)) - Fixes a minor grammatical issue in the error message when `NativeTabs` is used on an unsupported platform. ([#46202](#46202) by [@hassankhan](https://github.com/hassankhan)) - Updated dependencies. ([#49529](#49529)) - @expo/[email protected] - @expo/[email protected] ## [email protected] ### Patch Changes - [Android] Fix the splash screen staying visible over the app on Android 12 and 13 when the activity stops before the splash screen exits, for example when the app starts while the device is locked. This removes the workaround added in #44584. ([#50818](#50818) by [@zoontek](https://github.com/zoontek)) ## @expo/[email protected] ### Patch Changes - [android] Fix `community/picker` `Picker` not updating its displayed label after a selection or a `selectedValue` change. ([#50801](#50801) by [@RaddishIoW](https://github.com/RaddishIoW)) - [web] Fix `ListItem` always showing a pointer cursor, even without an `onPress`, because React Native Web's `Pressable` applies one unconditionally. A `ListItem` with no `onPress` now shows the default cursor instead of misleadingly looking clickable. ([#49986](#49986) by [@timheilman](https://github.com/timheilman)) - [iOS][Android] `RNHostView` `matchContents` accepts `{ horizontal, vertical }`, so hosted content can take its width from the parent and its height from the content. ([#50674](#50674) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway)) - [iOS] Stop linking WidgetKit into apps that use `@expo/ui` without widgets. The `widgetURL`, `activityBackgroundTint`, `widgetAccentedRenderingMode`, and `containerBackground` (`widget` placement) modifiers and the `AccessoryWidgetBackground` view now take effect only inside `expo-widgets` widgets and Live Activities. ([#50786](#50786) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway)) - [iOS] Added the `preferredColorScheme` modifier, which sets the color scheme of a presentation such as `BottomSheet`, including its background. ([#50851](#50851) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway)) ## [email protected] ### Patch Changes - Updated dependencies. ([#50734](#50734)) - [email protected] ## [email protected] ### Patch Changes - Add React hook and component helper stubs to prevent missing API errors when rendering widgets, including `memo` and `forwardRef`. ([#50834](#50834) by [@jakex7](https://github.com/jakex7)) - [iOS] Stop linking WidgetKit into apps that use `@expo/ui` without widgets. The `widgetURL`, `activityBackgroundTint`, `widgetAccentedRenderingMode`, and `containerBackground` (`widget` placement) modifiers and the `AccessoryWidgetBackground` view now take effect only inside `expo-widgets` widgets and Live Activities. ([#50786](#50786) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway)) - Updated dependencies. ([#50801](#50801), [#49986](#49986), [#50674](#50674), [#50786](#50786), [#50851](#50851)) - @expo/[email protected] ## [email protected] ### Patch Changes - Updated dependencies. ([#50824](#50824), [#50815](#50815), [#50770](#50770), [#50547](#50547), [#50548](#50548)) - [email protected] ## [email protected] ### Patch Changes - Updated dependencies. ([#50824](#50824), [#50815](#50815), [#50770](#50770), [#50547](#50547), [#50548](#50548)) - [email protected] ## [email protected] ### Patch Changes - Updated dependencies. ([#50824](#50824), [#50815](#50815), [#50770](#50770), [#50547](#50547), [#50548](#50548)) - [email protected] ## [email protected] ### Patch Changes - Updated dependencies. ([#50824](#50824), [#50801](#50801), [#50744](#50744), [#50815](#50815), [#50839](#50839), [#49986](#49986), [#50765](#50765), [#50768](#50768), [#50770](#50770), [#50674](#50674), [#50826](#50826), [#50708](#50708), [#48301](#48301), [#46202](#46202), [#50818](#50818), [#50547](#50547), [#50548](#50548), [#50786](#50786), [#50851](#50851)) - [email protected] - @expo/[email protected] - [email protected] - [email protected] - [email protected] - [email protected] ## [email protected] ### Patch Changes - Updated dependencies. ([#50824](#50824), [#50815](#50815), [#50839](#50839), [#50765](#50765), [#50770](#50770), [#50826](#50826), [#50708](#50708), [#48301](#48301), [#46202](#46202), [#50818](#50818), [#50547](#50547), [#50548](#50548)) - [email protected] - [email protected] - [email protected] ## @expo/[email protected] No changes in this release. ## [email protected] No changes in this release. Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
zxcvbnmmohd
added a commit
to zxcvbnmmohd/ihsaanly
that referenced
this pull request
Oct 25, 2026
…ub (#48) expo-widgets 58.0.7 evaluates ExpoWidgets.bundle in JavaScriptCore with a React stub that lacks memo. @expo/ui/swift-ui calls memo at module scope (recycling/useRecycledRows), so the bundle threw on load, the extension never got a JS context and every widget, gallery previews included, rendered a RedBox in Debug and nothing in Release. Backport the 58.0.10 stub (expo/expo#50834) as a bun patch, add a test that fails if the patch is lost, and document it next to the widget notes.
zxcvbnmmohd
added a commit
to zxcvbnmmohd/ihsaanly
that referenced
this pull request
Oct 25, 2026
…e key alias (#49) * chore(mobile): replace the lost Android upload key The previous upload keystore (SHA-1 D4:E6:…) was left behind on the old Mac. Nothing had been uploaded to Play with it, so it is replaced rather than recovered. - New upload key, SHA-1 2F:7B:80:AC:43:D7:9D:A5:D8:06:E4:BD:B7:C2:74:54:9F:8D:22:D7, now kept only in 1Password (Private: "Ihsaanly Android upload keystore"). - Both Firebase projects: new SHA-1 and SHA-256 added, the D4:E6 ones removed; google-services.json re-downloaded (new hash and Android OAuth client). - Android API key restrictions updated to the new SHA-1. - ANDROID_UPLOAD_* secrets reset in the development and production environments. - TODO: step 6.1 marked done, with the key history. * docs(repo): branch from production, test on development, PR to production * docs(todo): set up the Apple App IDs, Services IDs, sign-in keys and APNs Dev and prod each have their own App ID, Services ID and Sign in with Apple key, configured in their Firebase project. One APNs key serves both projects. All keys are in 1Password. * ci(mobile): build the signed Android app in GitHub Actions build-android.yml runs on pushes to development or production that touch the app, and by hand. It prebuilds the branch's variant with the environment's EXPO_PUBLIC_* variables, signs with the upload key from the environment secrets, fails unless the output's SHA-1 is the upload key's, and attaches the result to the run: an .apk on development, an .aab on production. app.config.ts takes ANDROID_VERSION_CODE (the run number) as the versionCode, so every build Play receives counts up. * ci(mobile): read the apk signature with apksigner and stop masking the key alias An apk for this minSdk has only the v2+ APK signature, which keytool cannot read. The key alias moves from a secret to a variable, because a secret 'upload' was masked in every log line. * build(mobile): version 0.1.0 with build numbers counting up from 1 app.json version is the semver marketing version, bumped by hand per release. BUILD_NUMBER sets both the iOS buildNumber and the Android versionCode; build-android derives it from the run number, less the two runs that came before. * ci(mobile): build the iOS app and upload it to TestFlight in GitHub Actions Signs automatically with the App Store Connect API key (xcodebuild -allowProvisioningUpdates) on the macos-26 runner with Xcode 26.6, and uploads with the run number as the build number. * fix(ui): draw the selection ring beside the surface so liquid glass can't hide it On iOS 26 the Surface is an expo-glass-effect GlassView, whose full-bounds UIVisualEffectView sits above React Native's border layer, so a border on the Surface never showed. Surface takes a ring colour and draws it from a sibling overlay; ChoiceRow, the onboarding ChoiceTile, LibraryCard and the glossary highlight use it. * fix(ui): draw the entry card's border as a ring beside the surface The 1pt border on the Today entry card sat under liquid glass the same way the selection ring did. Surface's ring now takes a width, and the card passes 1pt, keeping a matching transparent border so its layout is unchanged. * feat(onboarding): clearer how, pause, reminders and starting-point steps The how step names the sunnah acts, and its example circle can be ticked and cleared. The tracking pause says plainly that it is for the days sisters do not pray, with the privacy line above the choice. Reminders drop the daily cap and keep only the quiet hours. The starting point loses the included preview and the counts, so it fits a small phone. * fix(mobile): reload into right-to-left on ios as well Choosing Arabic or Urdu flipped the strings but left the iOS layout left-to-right until the app was reopened by hand. applyDirection now reloads on iOS through the same delayed reloadAppAsync path as Android. The native chrome follows the reload because it is told the direction: expo-router's NavigationContainer reads I18nManager and passes it to the react-native-screens header config, which forces it onto the navigation bar, and the root layout now passes the same answer to NativeTabs, whose iOS tab bar otherwise inherits UIKit's direction and ignores forceRTL. The reopen alert and its strings are gone; the language note now says switching restarts the app, in all ten tables. * feat(ui): tidy the onboarding welcome step Language and appearance are now two side-by-side dropdowns (a sheet of options on iOS and Android, a native select on the web), the star grid shrinks to the height left so the step fits an iPhone SE without scrolling, and the privacy link is gone (About still has it). "Already using Ihsaanly? Sign in" moves into the top bar's leading slot, where Back appears from the second step, so the footer no longer shifts. The old restore string is split into restorePrompt and restoreAction in every language. * fix(mobile): draw the google sign-in button as a pill matching apple's Google's SDK button is a fixed-shape rectangle that takes no corner radius, so on iOS it sat square beside Apple's pill. Google's sign-in now uses the shared branded button (Google's colours, the multicolour G and the approved title) at Apple's 48pt height with full pill corners, on Account and in onboarding's restore. * feat(more): change the starting point after onboarding A More row and screen offer onboarding's three presets again, each with a one-line description. The current choice is derived from the enabled items, so a hand-edited set shows none selected, and replacing one asks first. Pause-only items are left out of the comparison and kept on apply; history and marks are never touched. The web companion gets the same screen. * fix(mobile): render ios widgets by patching the expo-widgets react stub expo-widgets 58.0.7 evaluates ExpoWidgets.bundle in JavaScriptCore with a React stub that lacks memo. @expo/ui/swift-ui calls memo at module scope (recycling/useRecycledRows), so the bundle threw on load, the extension never got a JS context and every widget, gallery previews included, rendered a RedBox in Debug and nothing in Release. Backport the 58.0.10 stub (expo/expo#50834) as a bun patch, add a test that fails if the patch is lost, and document it next to the widget notes. * feat(ui): stack the hijri date, civil date and city on today Today's date line becomes three lines: the Hijri date (in the style the line had), the civil date under it and the city last, both smaller. The city line is left out when no place is set. cityOf moves to core's place module so onboarding, the app's Today route and the companion share one definition. * fix(mobile): keep the large title in place when search opens on ios The integrated search button left UISearchController's hidesNavigationBarDuringPresentation at UIKit's default, so on iOS 27 opening it began the bar's hide presentation and the More and Library large titles lost their leading inset, jumping to the screen edge. Set hideNavigationBar to false on both search bars. * feat(mobile): fill the right now widget and mark done from it The Right now widget showed only the window and the item. It now also says how long the moment stays open ("Open for about 3 more hours", "Closing soon"), how many other things are open ("+2 more now"), and the Hijri date in the bottom corner on the reading side. Small, medium and large get them where they fit; Lock Screen families stay as they were. Android's twin gets the same text from medium up. The timeline gains an entry wherever a rough distance turns, so neither that phrase nor Up next's distance goes stale within an entry. On iOS 17+ a button marks the headline item done without opening the app. The press appends { id, at } to the widget's own timeline in the App Group, which shows the item done at once. The expo-widgets patch now merges a press into every later entry too, not just the pressed one. The app takes taps in on launch, on returning to the foreground and on a press it hears, files each with completeItem at the tap's moment and window, and moves a device-only cursor past them; a republish carries taps not yet taken in. New strings in all ten languages.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
expo-uiusedReact.memo, which is not available in widgets runtime d49a8bcHow
Stub all React hooks and component utils that can potentially be used.
Test Plan
Tested in widgets app.
Checklist
npx expo prebuild& EAS Build (eg: updated a module plugin).