Files
gui/apps/kitchen-sink-go/plugins/expo-modules-core-swift6.js
zeekay 4620297b84 chore(layout): rename code/ → pkgs/ + apps/ + templates/ for cross-repo consistency
Match the layout convention used elsewhere in the Hanzo / Liquidity stack
(pkgs/* for libraries, apps/* for consumer apps, templates/* for starters).

Layout changes:
  pkgs/    ← code/{compiler,core,packages,ui,ui-admin}/
  apps/    ← code/{admin-base,admin-tasks,demos,gui.hanzo.ai,
              kitchen-sink*,sandbox,tests}/
  templates/  ← code/starters/* (flattened — no more starters/ subdir)

Updated:
- package.json workspaces glob.
- All scripts/* path references (postinstall, format, repair, release,
  sync-gui-versions, ci-serve, check-references, etc).
- ../../tasks/scripts/sync-admin-ui.sh — DEFAULT_SRC now points at
  ../gui/apps/admin-tasks (and scrubbed Tamagui mentions in comments).
- ~/work/hanzo/HANZO_BINARY.md doctrine doc.
- ~/work/hanzo/ui/pkg/ui/BASES.md framework-bases doc.
- gui CLAUDE.md, CONTRIBUTING.md.
- Memory entries.

Side-effect fix: ui-admin/src/primitives/index.ts now re-exports
PageShell from ../shell/PageShell. Several IAM identity pages
(GroupEdit, OrgEdit, GroupTree, UserEdit, RoleEdit) imported PageShell
from ./primitives — pre-existing barrel mismatch the test suite missed
because the smoke tests don't full-render. The rename surfaced it via
production build; back-compat re-export keeps both barrels working.

Verification:
- bun install: clean.
- ui-admin tests: 127/127 green.
- admin-tasks vite build: 721 KB JS / 213 KB gzip + 10 KB CSS, clean.
2026-04-27 14:33:21 -07:00

77 lines
3.0 KiB
JavaScript

// workaround: expo-modules-core 55.x ships Swift 6 strict concurrency
// which requires SWIFT_VERSION=6 to compile (uses @MainActor in conformance clauses).
// SWIFT_STRICT_CONCURRENCY=minimal suppresses the resulting concurrency warnings
// that would otherwise become errors in swift 6 mode.
// tracking issue: https://github.com/expo/expo/issues/42525
// remove this plugin once expo-modules-core ships a fix or expo SDK 56+ resolves it.
const { withDangerousMod } = require('@expo/config-plugins')
const fs = require('fs')
const path = require('path')
module.exports = function withExpoModulesCoreSwift6(config) {
return withDangerousMod(config, [
'ios',
async (config) => {
const podfilePath = path.join(config.modRequest.platformProjectRoot, 'Podfile')
// the Podfile may not exist yet during early prebuild phases - skip if so
if (!fs.existsSync(podfilePath)) {
return config
}
let podfile = fs.readFileSync(podfilePath, 'utf8')
// avoid double-injection
if (podfile.includes('# workaround: expo-modules-core 55.x')) {
return config
}
const workaround = `
# workaround: expo-modules-core 55.x requires Swift 6 mode with isolated
# conformances (SE-0470) for @MainActor in protocol conformance syntax.
# SWIFT_STRICT_CONCURRENCY=minimal suppresses concurrency warnings/errors.
installer.pods_project.targets.each do |target|
if target.name == 'ExpoModulesCore'
target.build_configurations.each do |build_config|
build_config.build_settings['SWIFT_VERSION'] = '6'
build_config.build_settings['SWIFT_STRICT_CONCURRENCY'] = 'minimal'
flags = build_config.build_settings['OTHER_SWIFT_FLAGS'] || '$(inherited)'
unless flags.include?('IsolatedConformances')
build_config.build_settings['OTHER_SWIFT_FLAGS'] = "#{flags} -enable-upcoming-feature IsolatedConformances"
end
end
end
# workaround: ContextMenuAuxiliaryPreview uses deprecated transform: .default
# which is an error in Xcode 26 / Swift 6.2 strict mode.
if target.name == 'ContextMenuAuxiliaryPreview'
target.build_configurations.each do |build_config|
build_config.build_settings['SWIFT_TREAT_WARNINGS_AS_ERRORS'] = 'NO'
build_config.build_settings['GCC_TREAT_WARNINGS_AS_ERRORS'] = 'NO'
end
end
end
`
// insert before the closing `end` of post_install block
const updated = podfile.replace(
/(post_install do \|installer\|.*?)(^\s+end\s*\nend)/ms,
`$1${workaround}$2`
)
if (updated === podfile) {
console.warn(
'[expo-modules-core-swift6] WARNING: could not find post_install block in Podfile - workaround not applied'
)
} else {
console.log(
'[expo-modules-core-swift6] applied ExpoModulesCore Swift 6 workaround to Podfile'
)
}
if (updated !== podfile) {
fs.writeFileSync(podfilePath, updated)
}
return config
},
])
}