Conversation
Add `textContentType` modifier for setting the semantic meaning of text input areas. Wraps SwiftUI's [`textContentType(_:)`](https://developer.apple.com/documentation/swiftui/view/textcontenttype(_:)-ufdv) (iOS 13+), mapping to all 45 [`UITextContentType`](https://developer.apple.com/documentation/uikit/uitextcontenttype) values. Enables iOS autofill for passwords, emails, addresses, credit cards, OTP codes, and more. ```tsx import { textContentType } from "@expo/ui/swift-ui/modifiers"; <TextField placeholder="Username" modifiers={[textContentType("username")]} /> <SecureField placeholder="Password" modifiers={[textContentType("password")]} /> ``` Without this modifier, text fields cannot participate in the iOS keychain autofill system. Values introduced in iOS 17+ (`creditCardExpiration`, `birthdate`, etc.) and iOS 17.4+ (`cellularEID`, `cellularIMEI`) include `#available` guards with sensible fallbacks. # Test Plan - `yarn build` in `packages/expo-ui`: clean - `yarn lint --fix` in `packages/expo-ui`: clean - `yarn lint` in `packages/expo-ui`: clean - `yarn test` in `packages/expo-ui`: 42/42 passing - Regenerated docs API data with `et generate-docs-api-data -p expo-ui` - Applied `.username` to TextField and `.password` to SecureField in bare-expo, verified iOS password autofill suggestion appears above keyboard
# Why
`playsInSilentMode` was only supported on iOS. On Android, the property
was filtered out in `setAudioModeAsync` and had no effect. This adds
Android support so apps can respect the device's silent/vibrate mode.
# How
- Added `playsInSilentMode` field (default `true`) to the `AudioMode`
record in `AudioRecords.kt`
- Stored the value in `AudioModule.kt` when `setAudioModeAsync` is
called
- Added a ringer mode check before playback — when `playsInSilentMode`
is `false` and `AudioManager.getRingerMode()` is not
`RINGER_MODE_NORMAL`, playback is suppressed
- Updated `ExpoAudio.ts` to forward `playsInSilentMode` to the Android
native module (previously filtered out)
- Removed `@platform ios` from the `playsInSilentMode` JSDoc and added
Android-specific documentation
# Test Plan
- Call `setAudioModeAsync({ playsInSilentMode: false })`
- Put Android device in silent/vibrate mode → playback should be
suppressed
- Put Android device in normal ringer mode → playback should work
- Verify default behavior (`playsInSilentMode: true`) is unchanged —
audio plays regardless of ringer mode
# Checklist
- [x] I added a `changelog.md` entry and rebuilt the package sources
according to [this short
guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting)
- [x] This diff will work correctly for `npx expo prebuild` & EAS Build
(eg: updated a module plugin).
- [x] Conforms with the [Documentation Writing Style
Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)
… values to JS (#44550) # Why PR #41339 moved EXConstantsService from expo-constants to expo-modules-core as ConstantsProvider when rewriting to Swift. The Swift code puts optional return values: getManifest() → [String: Any]?, getBuildVersion() → String?) directly into a [String: Any] dictionary literal. This wraps the optional as Optional<T> typed as Any, creating a double-optional when accessed via subscript. The Expo modules bridge can't unwrap this and sends null to JS. The old ObjC code used EXNullIfNil() which always returned a concrete type, avoiding this issue. Partly fixes these issues (also need additional fix): #44527, #44528 Additional fix for above issues: #44551 # How This commit fixes this by explicitly testing getManifest()'s result value before assigning it to the return value in the `constants` accessor. In addition it unwraps getBuildNumber() with ?? "" to avoid the same issue there. Also added test that fails with the old code and passes with the new code. # Test Plan - Added failing swift tests for both manifest and buildNumber. Passes with these fixes. - Also tested in the issue reproduction project: https://github.com/uniquedevs/expo-constants-null-repro-55 # Checklist - [x] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [x] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). --------- Co-authored-by: Expo Bot <34669131+expo-bot@users.noreply.github.com>
# Why The function `getManifest` in the new ConstantsProvider.swift file previously read the `EXConstants.bundle` using `Bundle(for:)` which fails when running using precompiled XCFrameworks since then the´Bundle(for:)` function will try to read the bundle from the XCFramework itself. # How This commit fixes this by explicitly reading the bundle using `Bundle.main.resourceURL` which works when building from source and running with precompiled XCFrameworks. Fixes #44528 and #44527 Required fix: #44550 # Test-plan Tested in the issue reproduction: https://github.com/uniquedevs/expo-constants-null-repro-55 Both with source + xcframeworks. NOTE: ExpoModulesCore is built with `s.static_framework = true` when `!use_framework` is set - so this error should only be visible when using precompiled frameworks - `EXPO_USE_PRECOMPILED_MODULES=1` - when running `pod install`. # Checklist - [x] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [x] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). --------- Co-authored-by: Expo Bot <34669131+expo-bot@users.noreply.github.com>
…44554) # Why When building using precompiled XCFrameworks, we disable use_framework for the modules that are already built as XCFramework. A guard to avoid doing this when NOT using precompiled XCFrameworks was missing. # How Added guard to avoid this when not using precompiled frameworks. # Test-plan Tested in stand-alone project both with/without precompiled xcframeworks when use_framework is set. # Checklist - [x] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [x] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). --------- Co-authored-by: Expo Bot <34669131+expo-bot@users.noreply.github.com>
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )