Upstream merge brings 52 commits from safe-global/safe-wallet-monorepo into the luxfi/safe-wallet@dev fork. Conflicts resolved: - yarn.lock: deleted (we are on pnpm) - apps/web/package.json: kept pnpm version + brand build scripts (build:safe / build:lux / build:hanzo) plus upstream's new generate-version.mjs step - apps/mobile/.../Signer/appKit.ts: took upstream's import pattern for shared/projectId, shared/metadata, shared/mmkvStorageAdapter Yarn sweep applied to 42 files (docs, github-actions, workflows, AGENTS, specs, codemods, scripts, READMEs). Net result: zero yarn-* command references anywhere outside node_modules. ❯ pnpm is the law in this fork. No yarn.
3.8 KiB
module, date, problem_type, component, symptoms, root_cause, resolution_type, severity, tags
| module | date | problem_type | component | symptoms | root_cause | resolution_type | severity | tags | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Mobile | 2026-03-19 | workflow_issue | development_workflow |
|
missing_workflow_step | workflow_improvement | high |
|
Direct Native File Edits in Expo Project
Problem
During an upgrade of react-native-quick-crypto and react-native-mmkv, the iOS Podfile was modified directly to:
- Remove a
pod 'MMKV'line - Add a
post_installblock withMMKV_IOS_EXTENSIONpreprocessor macro - Change the MMKV pod version pin
These changes were made to the generated apps/mobile/ios/Podfile rather than through the Expo config plugin that generates it (expo-plugins/notification-service-ios).
Additionally, when the Expo plugin source (plugin/config.ts) was correctly updated, the build step (pnpm build in the plugin directory) was not run, so the compiled output in dist/ was stale and the changes were not applied during the next prebuild.
Root Cause
Two workflow gaps:
-
Expo continuously regenerates native files. The
ios/andandroid/directories are generated artifacts in an Expo managed/custom dev client workflow. Direct edits toPodfile,AppDelegate,Info.plist, etc. will be overwritten on the nextexpo prebuild. All native configuration must flow through Expo config plugins orapp.config.ts. -
Expo plugins with a build step require compilation. The
notification-service-iosplugin has a TypeScript source inplugin/and compiled output indist/. Theapp.plugin.jsentry point loads fromdist/. Editingplugin/config.tswithout runningpnpm build(or the plugin's build script) means the changes never reach the compiled output that Expo actually reads.
Solution
Rule 1: Never directly edit generated native files
apps/mobile/ios/Podfile- generated, edit via Expo pluginsapps/mobile/ios/*.pbxproj- generated, edit via Expo pluginsapps/mobile/android/build.gradle- generated, edit via Expo plugins
Instead, modify the Expo config plugin that generates the content:
# The Podfile content for the notification extension is templated here:
expo-plugins/notification-service-ios/plugin/config.ts # PODFILE_MODIF_NEEDED constant
# NOT here:
apps/mobile/ios/Podfile # This is a generated output
Rule 2: Always run the plugin build step after editing plugin source
# After editing any file in expo-plugins/notification-service-ios/plugin/
cd expo-plugins/notification-service-ios
pnpm build # Compiles TS and copies ios-notification-service-files/ to dist/
# Then regenerate native project
cd apps/mobile
npx expo prebuild --clean # Regenerates ios/ and android/ from plugins
The build script from package.json:
"build": "rm -rf dist && tsc && cp -a ./ios-notification-service-files dist/ios-notification-service-files/"
This copies both the compiled TypeScript AND the Swift/plist template files into dist/.
Prevention
Before modifying any native iOS/Android file in an Expo project:
- Ask: "Is this file generated?" If it's under
ios/orandroid/, it almost certainly is. - Find the config plugin that generates or modifies it. Search
expo-plugins/andapp.config.ts. - Edit the plugin source, not the generated output.
- Run the plugin build step if the plugin has one (
pnpm build). - Run
expo prebuildto verify changes are applied correctly.
Related
expo-plugins/notification-service-ios/- The Expo plugin for iOS notification service extensionapps/mobile/ios/Podfile- Generated Podfile (do not edit directly)