Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
61271cb
chore: bootstrapped demo Expo app
artus9033 Jan 15, 2026
0282537
chore: use expo config plugin in expo demo app
artus9033 Jan 15, 2026
a9dbb08
chore: reset Expo project
artus9033 Jan 16, 2026
9c92eaa
chore: use workspace specifier for monorepo deps
artus9033 Jan 16, 2026
4a5702a
fix: do not toss up source sets in Gradle plugin
artus9033 Jan 16, 2026
4893be4
feat: base implementation for brownfield Expo config plugin
artus9033 Jan 22, 2026
a65a9f1
chore: update lock files
artus9033 Jan 22, 2026
6aba560
chore: update app.json in ExpoApp
artus9033 Jan 22, 2026
f30f055
chore: enable debug logging in app.json in ExpoApp
artus9033 Jan 22, 2026
594aaf5
feat: use new logging system in the plugin
artus9033 Jan 22, 2026
9e0ba69
feat: templates engine for project modifications
artus9033 Jan 22, 2026
a5840e9
feat: patch for Expo SDK pre v55, fix source file paths
artus9033 Jan 23, 2026
b544e47
feat: implemented Android brownfield plugin
artus9033 Jan 23, 2026
af69bca
chore: update ExpoApp scripts
artus9033 Jan 23, 2026
2afa209
fix: dedent gradle script insertion
artus9033 Jan 23, 2026
64eb48d
fix: depend on Material in AndroidApp; fix typo in gradle scripting c…
artus9033 Jan 23, 2026
23e4c8e
fix: package name in ExpoApp
artus9033 Jan 23, 2026
95b580c
chore: use debug signing config for AndroidApp release variant - for …
artus9033 Jan 23, 2026
a066b02
chore: missing indent in gradleHelpers insertion
artus9033 Jan 23, 2026
0f34957
fix: add missing expo modifications to template build.gradle.kts
artus9033 Jan 23, 2026
0a9c3ca
chore: use the Expo classes in template ReactNativeHostManager.kt
artus9033 Jan 23, 2026
080a124
fix: iOS xcode project processing of target UUID
artus9033 Jan 23, 2026
834d850
fix: make Android Expo config explicitly specify versions of RN Andro…
artus9033 Jan 23, 2026
a4c0913
fix: running package:ios again
thymikee Jan 23, 2026
ccf8f48
chore: udpate rock to 0.12.8
thymikee Jan 23, 2026
4bf29e7
chore: make nodemon watch template files in dev script for brownfield…
artus9033 Jan 23, 2026
ac7abeb
chore: reformat files, extract capitalized string helper, suppress un…
artus9033 Jan 30, 2026
d9050d5
chore: deintegrate isExpo gradle plugin prop in favor of auto-detection
artus9033 Jan 30, 2026
c2648c7
chore: typo in Android native demo app theme name
artus9033 Jan 30, 2026
4a59b38
feat: config Maven publishing for part of the core expo modules
artus9033 Jan 31, 2026
74b0d80
fix: correct artifact, group and version discovery for manually white…
artus9033 Jan 31, 2026
7d9f2f7
feat: inject transitive dependencies into POM publication files
artus9033 Feb 2, 2026
619eb2b
feat: instead of publishing, inject proper POM and Gradle Module JSON…
artus9033 Feb 2, 2026
1d36921
feat: functional Expo demo in AndroidApp
artus9033 Feb 3, 2026
310a7b2
chore: re-enable signing of gradle plugin
artus9033 Feb 3, 2026
1867458
chore: use 0.0.1-snapshot by default in Expo plugin on Android
artus9033 Feb 3, 2026
09c0dce
fix: filter out remaining expo transitive dependencies, add version m…
artus9033 Feb 11, 2026
2ce1d5b
feat: seamless integration of Expo features into the brownfield CLI
artus9033 Feb 12, 2026
1985835
refactor: restructure RNApp sources
artus9033 Feb 12, 2026
a64e2fe
feat: reuse RNApp sources in ExpoApp
artus9033 Feb 12, 2026
adf3ea3
feat: set up flavors for AndroidApp to consume expo or vanilla artifacts
artus9033 Feb 12, 2026
957b5ff
ci: update CI to account for AndroidApp flavors
artus9033 Feb 12, 2026
9390219
chore: remove obsolete comment
artus9033 Feb 12, 2026
7bbc2d1
fix: monorepo-prone expo detection in CLI
artus9033 Feb 12, 2026
e214f81
feat: proper code sharing for RN demo apps
artus9033 Feb 12, 2026
c52ce57
fix: make ReactNativeHostManager singatures match across flavors, pro…
artus9033 Feb 12, 2026
4456f06
fix: restore .brownie.ts files in each project for codegen to work pr…
artus9033 Feb 12, 2026
f0adf90
feat: added an image view to the demo app
artus9033 Feb 12, 2026
341f535
chore: strip obsolete comment
artus9033 Feb 12, 2026
580b19c
fix: proper module name in ios script
artus9033 Feb 12, 2026
5a21b7c
fix: brownie not to crash on Android
artus9033 Feb 12, 2026
afad19d
fix: handle brownie no stores in project in the CLI
artus9033 Feb 12, 2026
b6ba4b7
feat: demo apps reorganized, pulled in clean template for expo app
artus9033 Feb 12, 2026
69b6497
feat: integrate brownie store with Expo demo app
artus9033 Feb 12, 2026
470be26
docs: update docs
artus9033 Feb 12, 2026
a4cd611
Merge branch 'main' into feat/expo-config-plugin
artus9033 Feb 12, 2026
7c3b790
feat: temporarily deintegrate brownie from expo demo before android i…
artus9033 Feb 12, 2026
48fd6e1
Merge branch 'main' into feat/expo-config-plugin
artus9033 Feb 12, 2026
2b1680c
chore: rename expo app project
artus9033 Feb 12, 2026
6058678
chore: re-enable signing of the gradle plugin
artus9033 Feb 12, 2026
77726ee
chore: add changesets
artus9033 Feb 12, 2026
6f7cb58
refactor: format files
artus9033 Feb 12, 2026
9a274d1
fix(ci): path to RN project in androidapp-road-test
artus9033 Feb 12, 2026
e08a74c
refactor: format files to comply with detekt
artus9033 Feb 12, 2026
0f6d0b6
chore: revert changes to brownie
artus9033 Feb 12, 2026
27fb93c
fix: paths in packageIos in RN projects
artus9033 Feb 12, 2026
d867bb3
ci: update workflow for Apple apps
artus9033 Feb 12, 2026
24db114
feat: demo iOS app supporting interchanging brownfield artifacts
artus9033 Feb 12, 2026
0989c60
fix: patchExpoPre55.sh
artus9033 Feb 12, 2026
f4a44b8
fix: reorder build phases in iOS to first run patching after expo con…
artus9033 Feb 13, 2026
54fa5fc
wip: reorder build script phases PoC for Expo config plugin
artus9033 Feb 13, 2026
6d86267
chore: reorder code properly
artus9033 Feb 13, 2026
4f20e9d
chore: use SNAPSHOT for CI and local
hurali97 Feb 16, 2026
9613fda
chore: add plugin publish and patch scripts for local maven
hurali97 Feb 16, 2026
a633cc6
chore: fix appleapp-road-test ci
hurali97 Feb 16, 2026
6d322d1
chore: use macos runner for appleapp CI
hurali97 Feb 16, 2026
515c3fc
fix(ci): update maven path for expo flavor
hurali97 Feb 16, 2026
36771bd
fix(ci): expo android
hurali97 Feb 16, 2026
ffbb9d6
feat: ensure build phase correct order using post_integrate
hurali97 Feb 16, 2026
9bc4954
feat: add ReactNativeHostManager to source files
hurali97 Feb 16, 2026
a5bae9c
fix: use the bundleURL in loadView
hurali97 Feb 16, 2026
70f910f
feat: present Expo RN UI in Apple App
hurali97 Feb 16, 2026
b7f3049
Merge branch 'main' of github.com:callstack/react-native-brownfield i…
hurali97 Feb 17, 2026
52e18f2
chore: use latest version for brownfield-gradle-plugin
hurali97 Feb 17, 2026
5504dd1
feat: add source files to PBXSourcesBuildPhase
hurali97 Feb 17, 2026
e921555
feat: allow entry points other than main
hurali97 Feb 17, 2026
8a9e58f
feat: add configuration for vanilla and expo to AppleApp
hurali97 Feb 17, 2026
45bbe35
fix: add info.plist to AppleApp
hurali97 Feb 17, 2026
881ee41
fix: bundle reference
hurali97 Feb 17, 2026
0588c3c
fix(ci): add guard to only run pods for vanilla
hurali97 Feb 17, 2026
250d8a0
docs: update ExpoApp usages
hurali97 Feb 18, 2026
fee1c47
feat: remove coil dependency from plugin to the lib
hurali97 Feb 18, 2026
f155923
refactor: remove TODO comments
hurali97 Feb 18, 2026
ec05bba
feat: guard script reordering against expo version
hurali97 Feb 18, 2026
1f6bbcb
feat: separate brownie usage by platform
hurali97 Feb 18, 2026
f9bf078
chore: build android app with release variant
hurali97 Feb 18, 2026
1734e3e
docs: add Expo Integration section
hurali97 Feb 18, 2026
1d50f6b
chore: bump versions
hurali97 Feb 18, 2026
6516315
fix: remove color prop
hurali97 Feb 18, 2026
0abb3f7
Update docs/docs/docs/getting-started/expo.mdx
hurali97 Feb 19, 2026
93cc1a3
Update docs/docs/docs/getting-started/expo.mdx
hurali97 Feb 19, 2026
8602909
docs: remove images
hurali97 Feb 19, 2026
0ee3099
refactor: fix indentation
hurali97 Feb 19, 2026
ba6bb5b
feat: use ruby script for post integrate
hurali97 Feb 19, 2026
ebba2ef
Merge branch 'main' of github.com:callstack/react-native-brownfield i…
hurali97 Feb 20, 2026
eab268f
chore: remove changeset bump
hurali97 Feb 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/react-native-brownfield/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
"files": [
"src",
"lib",
"scripts",
"android",
"ios",
"cpp",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
def react_native_brownfield_post_integrate(installer)
projects = installer.aggregate_targets.map(&:user_project).compact.uniq
projects.each do |project|
modified = false

project.native_targets.each do |target|
phases = target.build_phases
expo_idx = phases.index { |p| p.respond_to?(:name) && p.name == '[Expo] Configure project' }
patch_idx = phases.index { |p| p.respond_to?(:name) && p.name == 'Patch ExpoModulesProvider' }

next if expo_idx.nil? || patch_idx.nil?
next if patch_idx > expo_idx

patch = phases.delete_at(patch_idx)
expo_idx = phases.index { |p| p.respond_to?(:name) && p.name == '[Expo] Configure project' }
phases.insert(expo_idx + 1, patch)
modified = true
end

project.save if modified
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -6,44 +6,47 @@ const BROWNFIELD_POD_HOOK_MARKER_START =
'# >>> react-native-brownfield expo phase ordering >>>';
const BROWNFIELD_POD_HOOK_MARKER_END =
'# <<< react-native-brownfield expo phase ordering <<<';
const BROWNFIELD_POST_INTEGRATE_REQUIRE = `require File.join(File.dirname(\`node --print "require.resolve('@callstack/react-native-brownfield/package.json')"\`), "scripts/react_native_brownfield_post_integrate")`;
const REACT_NATIVE_PODS_REQUIRE_REGEX =
/^require File\.join\(File\.dirname\(`node --print "require\.resolve\('react-native\/package\.json'\)"`\), "scripts\/react_native_pods"\)\s*$/m;

function ensureExpoPhaseOrderingHook(podfile: string): string {
if (podfile.includes(BROWNFIELD_POD_HOOK_MARKER_START)) {
function ensureBrownfieldPostIntegrateRequire(podfile: string): string {
if (podfile.includes('scripts/react_native_brownfield_post_integrate')) {
return podfile;
}

const reactNativePodsRequireMatch = podfile.match(
REACT_NATIVE_PODS_REQUIRE_REGEX
);
if (reactNativePodsRequireMatch) {
const requireLine = reactNativePodsRequireMatch[0];
return podfile.replace(
requireLine,
`${requireLine}\n${BROWNFIELD_POST_INTEGRATE_REQUIRE}\n`
);
}

return `${BROWNFIELD_POST_INTEGRATE_REQUIRE}\n\n${podfile}`;
}

function ensureExpoPhaseOrderingHook(podfile: string): string {
let modifiedPodfile = ensureBrownfieldPostIntegrateRequire(podfile);

if (modifiedPodfile.includes(BROWNFIELD_POD_HOOK_MARKER_START)) {
return modifiedPodfile;
}

const hook = `
${BROWNFIELD_POD_HOOK_MARKER_START}
def reorder_brownfield_expo_patch_phase!(installer)
projects = installer.aggregate_targets.map(&:user_project).compact.uniq
projects.each do |project|
modified = false

project.native_targets.each do |target|
phases = target.build_phases
expo_idx = phases.index { |p| p.respond_to?(:name) && p.name == '[Expo] Configure project' }
patch_idx = phases.index { |p| p.respond_to?(:name) && p.name == 'Patch ExpoModulesProvider' }

next if expo_idx.nil? || patch_idx.nil?
next if patch_idx > expo_idx

patch = phases.delete_at(patch_idx)
expo_idx = phases.index { |p| p.respond_to?(:name) && p.name == '[Expo] Configure project' }
phases.insert(expo_idx + 1, patch)
modified = true
end

project.save if modified
end
end

post_integrate do |installer|
reorder_brownfield_expo_patch_phase!(installer)
react_native_brownfield_post_integrate(installer)
end
${BROWNFIELD_POD_HOOK_MARKER_END}
`;

return `${podfile.trimEnd()}\n\n${hook}\n`;
modifiedPodfile = `${modifiedPodfile.trimEnd()}\n\n${hook}\n`;

return modifiedPodfile;
}

/**
Expand Down
Loading