expo-build-properties 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -10,6 +10,12 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 1.0.1 — 2025-08-15
14
+
15
+ ### 🎉 New features
16
+
17
+ - Add `ios.reactNativeReleaseLevel` option ([#38840](https://github.com/expo/expo/pull/38840) by [@gabrieldonadel](https://github.com/gabrieldonadel))
18
+
13
19
  ## 1.0.0 — 2025-08-13
14
20
 
15
21
  ### 🎉 New features
package/build/ios.d.ts CHANGED
@@ -2,3 +2,4 @@ import { ConfigPlugin } from 'expo/config-plugins';
2
2
  import type { PluginConfigType } from './pluginConfig';
3
3
  export declare const withIosBuildProperties: ConfigPlugin<PluginConfigType>;
4
4
  export declare const withIosDeploymentTarget: ConfigPlugin<PluginConfigType>;
5
+ export declare const withIosInfoPlist: ConfigPlugin<PluginConfigType>;
package/build/ios.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.withIosDeploymentTarget = exports.withIosBuildProperties = void 0;
3
+ exports.withIosInfoPlist = exports.withIosDeploymentTarget = exports.withIosBuildProperties = void 0;
4
4
  const config_plugins_1 = require("expo/config-plugins");
5
5
  const { createBuildPodfilePropsConfigPlugin } = config_plugins_1.IOSConfig.BuildProperties;
6
6
  exports.withIosBuildProperties = createBuildPodfilePropsConfigPlugin([
@@ -8,7 +8,8 @@ exports.withIosBuildProperties = createBuildPodfilePropsConfigPlugin([
8
8
  propName: 'newArchEnabled',
9
9
  propValueGetter: (config) => {
10
10
  if (config.ios?.newArchEnabled !== undefined) {
11
- config_plugins_1.WarningAggregator.addWarningIOS('withIosBuildProperties', 'ios.newArchEnabled is deprecated, use app config `newArchEnabled` instead.', 'https://docs.expo.dev/versions/latest/config/app/#newarchenabled');
11
+ config_plugins_1.WarningAggregator.addWarningIOS('withIosBuildProperties', 'ios.newArchEnabled is deprecated, use app config `newArchEnabled` instead.\n' +
12
+ 'https://docs.expo.dev/versions/latest/config/app/#newarchenabled');
12
13
  }
13
14
  return config.ios?.newArchEnabled?.toString();
14
15
  },
@@ -53,6 +54,20 @@ const withIosDeploymentTarget = (config, props) => {
53
54
  return config;
54
55
  };
55
56
  exports.withIosDeploymentTarget = withIosDeploymentTarget;
57
+ const withIosInfoPlist = (config, props) => {
58
+ const reactNativeReleaseLevel = props.ios?.reactNativeReleaseLevel;
59
+ if (reactNativeReleaseLevel) {
60
+ config = withIosReactNativeReleaseLevel(config, { reactNativeReleaseLevel });
61
+ }
62
+ return config;
63
+ };
64
+ exports.withIosInfoPlist = withIosInfoPlist;
65
+ const withIosReactNativeReleaseLevel = (config, { reactNativeReleaseLevel }) => {
66
+ return (0, config_plugins_1.withInfoPlist)(config, (config) => {
67
+ config.modResults['ReactNativeReleaseLevel'] = reactNativeReleaseLevel;
68
+ return config;
69
+ });
70
+ };
56
71
  const withIosDeploymentTargetXcodeProject = (config, props) => {
57
72
  return (0, config_plugins_1.withXcodeProject)(config, (config) => {
58
73
  config.modResults = updateDeploymentTargetXcodeProject(config.modResults, props.deploymentTarget);
@@ -339,6 +339,13 @@ export interface PluginConfigTypeIos {
339
339
  * @deprecated Use `buildReactNativeFromSource` instead.
340
340
  */
341
341
  buildFromSource?: boolean;
342
+ /**
343
+ * The React Native release level to use for the project.
344
+ * This can be used to enable different sets of internal React Native feature flags.
345
+ *
346
+ * @default 'stable'
347
+ */
348
+ reactNativeReleaseLevel?: 'stable' | 'canary' | 'experimental';
342
349
  }
343
350
  /**
344
351
  * Interface representing extra CocoaPods dependency.
@@ -182,6 +182,11 @@ const schema = {
182
182
  },
183
183
  buildReactNativeFromSource: { type: 'boolean', nullable: true },
184
184
  buildFromSource: { type: 'boolean', nullable: true },
185
+ reactNativeReleaseLevel: {
186
+ type: 'string',
187
+ enum: ['stable', 'canary', 'experimental'],
188
+ nullable: true,
189
+ },
185
190
  },
186
191
  nullable: true,
187
192
  },
@@ -26,6 +26,7 @@ const withBuildProperties = (config, props) => {
26
26
  config = (0, android_1.withAndroidDayNightTheme)(config, pluginConfig);
27
27
  config = (0, ios_1.withIosBuildProperties)(config, pluginConfig);
28
28
  config = (0, ios_1.withIosDeploymentTarget)(config, pluginConfig);
29
+ config = (0, ios_1.withIosInfoPlist)(config, pluginConfig);
29
30
  return config;
30
31
  };
31
32
  exports.withBuildProperties = withBuildProperties;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-build-properties",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Config plugin to customize native build properties on prebuild",
5
5
  "main": "build/withBuildProperties.js",
6
6
  "types": "build/withBuildProperties.d.ts",
@@ -35,10 +35,10 @@
35
35
  "semver": "^7.6.0"
36
36
  },
37
37
  "devDependencies": {
38
- "expo-module-scripts": "^5.0.0"
38
+ "expo-module-scripts": "^5.0.1"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "expo": "*"
42
42
  },
43
- "gitHead": "cb7062e2c17d1fb09522834aaaac0e19b766df62"
43
+ "gitHead": "2f7f90d0736af48cb542ccbc8addb836e330693a"
44
44
  }
package/src/ios.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import {
2
- IOSConfig,
3
2
  ConfigPlugin,
4
- withXcodeProject,
5
- XcodeProject,
3
+ IOSConfig,
6
4
  WarningAggregator,
5
+ XcodeProject,
6
+ withInfoPlist,
7
+ withXcodeProject,
7
8
  } from 'expo/config-plugins';
8
9
 
9
10
  import type { PluginConfigType } from './pluginConfig';
@@ -18,8 +19,8 @@ export const withIosBuildProperties = createBuildPodfilePropsConfigPlugin<Plugin
18
19
  if (config.ios?.newArchEnabled !== undefined) {
19
20
  WarningAggregator.addWarningIOS(
20
21
  'withIosBuildProperties',
21
- 'ios.newArchEnabled is deprecated, use app config `newArchEnabled` instead.',
22
- 'https://docs.expo.dev/versions/latest/config/app/#newarchenabled'
22
+ 'ios.newArchEnabled is deprecated, use app config `newArchEnabled` instead.\n' +
23
+ 'https://docs.expo.dev/versions/latest/config/app/#newarchenabled'
23
24
  );
24
25
  }
25
26
  return config.ios?.newArchEnabled?.toString();
@@ -72,6 +73,24 @@ export const withIosDeploymentTarget: ConfigPlugin<PluginConfigType> = (config,
72
73
  return config;
73
74
  };
74
75
 
76
+ export const withIosInfoPlist: ConfigPlugin<PluginConfigType> = (config, props) => {
77
+ const reactNativeReleaseLevel = props.ios?.reactNativeReleaseLevel;
78
+ if (reactNativeReleaseLevel) {
79
+ config = withIosReactNativeReleaseLevel(config, { reactNativeReleaseLevel });
80
+ }
81
+
82
+ return config;
83
+ };
84
+
85
+ const withIosReactNativeReleaseLevel: ConfigPlugin<{
86
+ reactNativeReleaseLevel: 'stable' | 'canary' | 'experimental';
87
+ }> = (config, { reactNativeReleaseLevel }) => {
88
+ return withInfoPlist(config, (config) => {
89
+ config.modResults['ReactNativeReleaseLevel'] = reactNativeReleaseLevel;
90
+ return config;
91
+ });
92
+ };
93
+
75
94
  const withIosDeploymentTargetXcodeProject: ConfigPlugin<{ deploymentTarget: string }> = (
76
95
  config,
77
96
  props
@@ -395,6 +395,14 @@ export interface PluginConfigTypeIos {
395
395
  * @deprecated Use `buildReactNativeFromSource` instead.
396
396
  */
397
397
  buildFromSource?: boolean;
398
+
399
+ /**
400
+ * The React Native release level to use for the project.
401
+ * This can be used to enable different sets of internal React Native feature flags.
402
+ *
403
+ * @default 'stable'
404
+ */
405
+ reactNativeReleaseLevel?: 'stable' | 'canary' | 'experimental';
398
406
  }
399
407
 
400
408
  /**
@@ -750,6 +758,11 @@ const schema: JSONSchemaType<PluginConfigType> = {
750
758
  },
751
759
  buildReactNativeFromSource: { type: 'boolean', nullable: true },
752
760
  buildFromSource: { type: 'boolean', nullable: true },
761
+ reactNativeReleaseLevel: {
762
+ type: 'string',
763
+ enum: ['stable', 'canary', 'experimental'],
764
+ nullable: true,
765
+ },
753
766
  },
754
767
  nullable: true,
755
768
  },
@@ -2,14 +2,14 @@ import { ConfigPlugin } from 'expo/config-plugins';
2
2
 
3
3
  import {
4
4
  withAndroidBuildProperties,
5
+ withAndroidCleartextTraffic,
6
+ withAndroidDayNightTheme,
5
7
  withAndroidProguardRules,
6
8
  withAndroidPurgeProguardRulesOnce,
7
- withAndroidCleartextTraffic,
8
9
  withAndroidQueries,
9
- withAndroidDayNightTheme,
10
10
  withAndroidSettingsGradle,
11
11
  } from './android';
12
- import { withIosBuildProperties, withIosDeploymentTarget } from './ios';
12
+ import { withIosBuildProperties, withIosDeploymentTarget, withIosInfoPlist } from './ios';
13
13
  import { PluginConfigType, validateConfig } from './pluginConfig';
14
14
 
15
15
  /**
@@ -37,6 +37,7 @@ export const withBuildProperties: ConfigPlugin<PluginConfigType> = (config, prop
37
37
 
38
38
  config = withIosBuildProperties(config, pluginConfig);
39
39
  config = withIosDeploymentTarget(config, pluginConfig);
40
+ config = withIosInfoPlist(config, pluginConfig);
40
41
 
41
42
  return config;
42
43
  };