Skip to content

[pull] main from expo:main#763

Merged
pull[bot] merged 2 commits intocode:mainfrom
expo:main
Apr 11, 2026
Merged

[pull] main from expo:main#763
pull[bot] merged 2 commits intocode:mainfrom
expo:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull bot commented Apr 10, 2026

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 : )

chrfalch and others added 2 commits April 10, 2026 18:22
…44667)

# Why

`BackgroundTaskWork.doWork()` catches `Exception` and converts it into
`Result.failure()`. On the JVM, `CancellationException` is a subclass of
`Exception`, so WorkManager coroutine cancellation can be swallowed by
this generic catch block.

When a running background task worker is cancelled, for example through
`unregisterTask()` calling `stopWorker()`, the coroutine scope may throw
`CancellationException` while waiting for task completion. Returning
`Result.failure()` from that path incorrectly reports a cancelled worker
as a failed worker.

# How

Catch `CancellationException` before the generic `Exception` handler,
log that the worker was cancelled, and rethrow it.

This preserves structured concurrency semantics and lets WorkManager
handle the worker as stopped/cancelled instead of failed.

# Test-plan

- Verified the Android source compiles locally.
- Confirmed the change only affects cancellation handling in
`BackgroundTaskWork.doWork()`.
- Confirmed generic task execution exceptions are still converted to
`Result.failure()` with error output data.

# 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

Currently, the brownfield xcframework cannot be consumed by Objective-C.
Without `DEFINES_MODULE = YES`, Xcode does not generate a Clang
`module.modulemap` for the framework and the xcframework only ships with
`.swiftmodule` interfaces.

This causes: 
- `@import MyAppBrownfield;` to fail in ObjC files 
- `#import <MyAppBrownfield/MyAppBrownfield-Swift.h>` (the generated
ObjC compatibility header) is not available

The brownfield `ExpoBrownfield.podspec` already sets `DEFINES_MODULE =
YES` for the pod target, but this setting was missing from the framework
target created by the config plugin.

# How

Added `DEFINES_MODULE: '"YES"'` to the framework target's common build
settings in `project.ts`. With this flag, Xcode auto-generates a
`module.modulemap` for each architecture slice during the build, which
`xcodebuild -create-xcframework` then includes in both the simulator and
device slices of the xcframework.

# Test Plan

- Run `npx expo prebuild` and build the brownfield xcframework
- Inspect the output: each slice should contain
`Modules/module.modulemap` alongside the existing
`Modules/<TargetName>.swiftmodule/`
- Import the xcframework from an ObjC file with `@import
MyAppBrownfield;` n

# Checklist

<!--
Please check the appropriate items below if they apply to your diff.
-->

- [ ] 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)
- [ ] This diff will work correctly for `npx expo prebuild` & EAS Build
(eg: updated a module plugin).
- [ ] Conforms with the [Documentation Writing Style
Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)
@pull pull bot locked and limited conversation to collaborators Apr 10, 2026
@pull pull bot added the ⤵️ pull label Apr 10, 2026
@pull pull bot merged commit 1d7f7a2 into code:main Apr 11, 2026
19 of 20 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants