### Summary
As an active educational application (
com.senaysoft.*
), we are implementing the alpha
expo-age-range
module to comply with emerging state-level age-assurance regulations. While the Android implementation (Play Age Signals) is working perfectly, the iOS implementation currently forces a steep architectural and UX trade-off due to two major blockers.
We are currently forced to exclude the package from our iOS autolinking to maintain our build pipeline. We are opening this issue/discussion to highlight the exact friction points preventing production adoption on iOS.
### Blocker 1: Xcode 16 / Swift 6 Strict Concurrency Failures
Standard EAS build environments utilizing Xcode 16 / iOS 26 SDK enforce strict Swift 6 concurrency by default. The current
expo-age-range
alpha pod does not pass these checks.
The Failure:
During the
Run fastlane
step, the compiler throws the following error inside the
ExpoAgeRange
target:
task or actor isolated value cannot be sent
Current Workarounds (Both Fragile):
  1. Abandon the iOS implementation entirely via
    expo.autolinking.ios.exclude
    .
  2. Write a custom Config Plugin utilizing
    @expo/config-plugins
    (
    withDangerousMod
    ) to inject Ruby into the
    post_install
    Podfile block, forcing
    SWIFT_STRICT_CONCURRENCY = 'minimal'
    for the pod.
The Request:
Please update the internal Swift files (
AgeRangeModule.swift
, etc.) to comply with Apple's actor isolation rules or apply
@preconcurrency
annotations so standard EAS cloud builds compile cleanly out of the box.
### Blocker 2: JS Exposure of Jurisdiction Eligibility (
isEligibleForAgeFeaturesAsync
)
To prevent severe UX degradation for a global educational app, we need to be able to silently bypass the native age gate modal for users in non-regulated regions.
The Issue:
Because the alpha module currently lacks JavaScript access to Apple's
isEligibleForAgeFeaturesAsync()
pre-check (or equivalent), our fallback logic must aggressively fire
requestAgeRangeAsync()
for
every single user
globally running iOS 26+.
The Request:
Prioritize exposing the eligibility check to the JS bridge. This is critical for allowing us to ping the OS ("Is this user in a regulated jurisdiction?") before needlessly triggering the native Apple age gate for global users who fall outside the scope of Texas/Utah/Louisiana laws.
### Environment
  • Expo SDK: 54 (Alpha track)
  • React Native: 0.81.5
  • Package:
    expo-age-range
    (~0.2.1)
  • Platform: iOS (EAS Build / Xcode 16)