You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
iOS- Onyx files appears in Files and Unable to view attachment after upgrade #102798
Version Number: 9.5.0-0 Reproducible in staging?: Yes Reproducible in production?: Unable to validate in Prod - Provide reasoning. If this was caught during regression testing, add the test name, ID and link from BrowserStack:#101437 Email or phone of affected tester (no customers):[email protected] Issue reported by: Applause Internal Team Bug source: Pull Request QA execution Device used: iPhone 11 iOS 26.7.1 App Component: User Settings
Action Performed:
Preconditions:
Install Prod build and login testing account.
Use another account from second device, send some pdf, image files attachment to testing account
Open Hybrid app
Upgrade to latest staging build
Go to hybrid app again
Tap on Continue until reaching Home
Go to Expensify folder in local Files app
Navigate back to Hybrid app
Go to DM chat with second device account
Open attachment files
Send some attachment files
Expected Result:
OnyxDB should not appears in Expensify folder. User can view the attachment files
Actual Result:
OnyxDB appears in Expensify folder. User unable to view the uploaded attachment files.
Unable to test in Prod because we can not upgrade from prod
👋 Friendly reminder that deploy blockers are time-sensitive ⏱ issues! Check out the open `StagingDeployCash` deploy checklist to see the list of PRs included in this release, then work quickly to do one of the following:
Identify the pull request that introduced this issue and revert it.
Confidence: Medium-high for OnyxDB appearing in Files. Medium for attachments not loading.
Root cause: Before this PR, a local patch stored OnyxDB in Library/Application Support for every host app. The PR removed that patch. NitroSQLite 9.8.x now uses Application Support only if the host app's Info.plist sets RNNitroSQLite_DatabaseLocation = ApplicationSupport. The PR set this key only in the standalone NewDot plist. The HybridApp host app uses its own plist, which lacks the key. So HybridApp creates a new, empty OnyxDB in Documents, and iOS shows that folder in the Files app.
Recommendation: Fix forward (revert if that stalls).
Add RNNitroSQLite_DatabaseLocation = ApplicationSupport to the HybridApp host app's iOS Info.plist. Cherry-pick it to staging. Do not set RNNitroSQLite_AppGroup, because it overrides the location key.
Retest with a fresh prod-to-staging upgrade. Devices that already ran 9.5.0-0 have a split database.
Keep DeployBlockerCash. Without the fix, production HybridApp users would lose local state and queued offline writes. Upstream migration treats a database in Documents as the live copy. If the key ships in a later release, the empty database would overwrite the user's original one.
Upstream 9.8.x reads RNNitroSQLite_DatabaseLocation from the host plist and otherwise falls back to Documents (ios/OnLoad.mm L33-58 in the npm package).
The PR description says HybridApp needs a companion change that sets the same key. That change does not appear in any deploy checklist since 2026-09-15, so it most likely never shipped. I couldn't confirm this directly.
Attachments symptom (not proven from App code). Two explanations fit, and both trace to the 9.8.x upgrade:
The new empty database loses attachment cache records and session data.
Other PRs ruled out. I checked every PR on Deploy Checklist: New Expensify 2026-09-30. Only the two NitroSQLite PRs touch NitroSQLite, the iOS Info.plist, or on-disk storage location. The receipt-storage PRs affect expense receipts, not DM attachments. No PR touched the attachment cache code.
Optional hardening: Extend the Jest check to cover the HybridApp plist, or log the database path at startup on HybridApp.
Next Steps: Reply with @MelvinBot <your feedback> to refine this analysis.
Activity
applause-bot commentedon Oct 1, 2026
While Applause doesn't embed attachments for this bug, here are the links for quick view:
https://platform.applause.com/services/links/v1/external/dc75e874ef6f6dbf391a117a4b00474967ed87055197d2424d8279819aaf54d9
melvin-bot commentedon Oct 1, 2026
You have been assigned to this deploy blocker because you recently merged this PR: #101437
github-actions commentedon Oct 1, 2026
👋 Friendly reminder that deploy blockers are time-sensitive ⏱ issues! Check out the open `StagingDeployCash` deploy checklist to see the list of PRs included in this release, then work quickly to do one of the following:
melvin-bot commentedon Oct 1, 2026
@NicolasBonet @ikevin127 you have been assigned to this deploy blocker because you reviewed the offending PR: #101437
melvin-bot commentedon Oct 1, 2026
@chrispader you have been assigned to this deploy blocker because you authored the offending PR: #101437
melvin-bot commentedon Oct 1, 2026
💬 A slack conversation has been started in #expensify-open-source
MelvinBot commentedon Oct 1, 2026
Deploy Blocker Investigation
Causing PR: chore(deps): Update NitroSQLite to 9.8.2. The auto-assignment is correct.
Confidence: Medium-high for OnyxDB appearing in Files. Medium for attachments not loading.
Root cause: Before this PR, a local patch stored OnyxDB in
Library/Application Supportfor every host app. The PR removed that patch. NitroSQLite 9.8.x now uses Application Support only if the host app'sInfo.plistsetsRNNitroSQLite_DatabaseLocation = ApplicationSupport. The PR set this key only in the standalone NewDot plist. The HybridApp host app uses its own plist, which lacks the key. So HybridApp creates a new, empty OnyxDB inDocuments, and iOS shows that folder in the Files app.Recommendation: Fix forward (revert if that stalls).
RNNitroSQLite_DatabaseLocation = ApplicationSupportto the HybridApp host app's iOSInfo.plist. Cherry-pick it to staging. Do not setRNNitroSQLite_AppGroup, because it overrides the location key.Keep
DeployBlockerCash. Without the fix, production HybridApp users would lose local state and queued offline writes. Upstream migration treats a database inDocumentsas the live copy. If the key ships in a later release, the empty database would overwrite the user's original one.Investigation details
Mechanism
Documents: patches/react-native-nitro-sqlite/...+002+store-database-outside-documents.patch:72-77RNNitroSQLite_DatabaseLocationfrom the host plist and otherwise falls back toDocuments(ios/OnLoad.mmL33-58 in the npm package).Attachments symptom (not proven from App code). Two explanations fit, and both trace to the 9.8.x upgrade:
Other PRs ruled out. I checked every PR on Deploy Checklist: New Expensify 2026-09-30. Only the two NitroSQLite PRs touch NitroSQLite, the iOS
Info.plist, or on-disk storage location. The receipt-storage PRs affect expense receipts, not DM attachments. No PR touched the attachment cache code.Optional hardening: Extend the Jest check to cover the HybridApp plist, or log the database path at startup on HybridApp.
Next Steps: Reply with
@MelvinBot <your feedback>to refine this analysis.view run
chrispader commentedon Oct 1, 2026
@NicolasBonet merging https://github.com/Expensify/Mobile-Expensify/pull/14129 will solve the deploy blocker!
IuliiaHerets commentedon Oct 1, 2026
Tester unable to find the Expensify folder in the local files app. Is there any precondition missing?
102798-1.mp4
IuliiaHerets commentedon Oct 1, 2026
The Expensify folder appears after sending some files
Issue is not reproducible on iPhone 13 Mini/ iOS 26.5 in v9.5.0-5
102798-2.mp4