rnbuilder 0.6.84 → 0.6.86
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/README.md +13 -13
- package/lib/utils/setup/android-icon.js +96 -27
- package/lib/utils/setup/firebase.js +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -40,7 +40,7 @@ $ npm install -g rnbuilder
|
|
|
40
40
|
$ rnbuilder COMMAND
|
|
41
41
|
running command...
|
|
42
42
|
$ rnbuilder (-v|--version|version)
|
|
43
|
-
rnbuilder/0.6.
|
|
43
|
+
rnbuilder/0.6.86 darwin-arm64 node-v24.13.0
|
|
44
44
|
$ rnbuilder --help [COMMAND]
|
|
45
45
|
USAGE
|
|
46
46
|
$ rnbuilder COMMAND
|
|
@@ -97,7 +97,7 @@ EXAMPLE
|
|
|
97
97
|
hello world from ./src/build.ts!
|
|
98
98
|
```
|
|
99
99
|
|
|
100
|
-
_See code: [src/commands/build.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.
|
|
100
|
+
_See code: [src/commands/build.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.86/src/commands/build.ts)_
|
|
101
101
|
|
|
102
102
|
## `rnbuilder check-version [MATCH-CHECK]`
|
|
103
103
|
|
|
@@ -116,7 +116,7 @@ EXAMPLE
|
|
|
116
116
|
Nuke certificates ./src/match-check.ts!
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
_See code: [src/commands/check-version.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.
|
|
119
|
+
_See code: [src/commands/check-version.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.86/src/commands/check-version.ts)_
|
|
120
120
|
|
|
121
121
|
## `rnbuilder codepush [BUILD]`
|
|
122
122
|
|
|
@@ -135,7 +135,7 @@ EXAMPLE
|
|
|
135
135
|
Push changes to existing apps ./src/firebase-sync-udids.ts!
|
|
136
136
|
```
|
|
137
137
|
|
|
138
|
-
_See code: [src/commands/codepush.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.
|
|
138
|
+
_See code: [src/commands/codepush.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.86/src/commands/codepush.ts)_
|
|
139
139
|
|
|
140
140
|
## `rnbuilder google-key [MATCH-CHECK]`
|
|
141
141
|
|
|
@@ -154,7 +154,7 @@ EXAMPLE
|
|
|
154
154
|
Nuke certificates ./src/match-check.ts!
|
|
155
155
|
```
|
|
156
156
|
|
|
157
|
-
_See code: [src/commands/google-key.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.
|
|
157
|
+
_See code: [src/commands/google-key.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.86/src/commands/google-key.ts)_
|
|
158
158
|
|
|
159
159
|
## `rnbuilder help [COMMAND]`
|
|
160
160
|
|
|
@@ -186,7 +186,7 @@ EXAMPLE
|
|
|
186
186
|
initialize environment for first run from ./src/initialize.ts!
|
|
187
187
|
```
|
|
188
188
|
|
|
189
|
-
_See code: [src/commands/initialize.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.
|
|
189
|
+
_See code: [src/commands/initialize.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.86/src/commands/initialize.ts)_
|
|
190
190
|
|
|
191
191
|
## `rnbuilder match-check [MATCH-CHECK]`
|
|
192
192
|
|
|
@@ -205,7 +205,7 @@ EXAMPLE
|
|
|
205
205
|
Check match certificates ./src/match-check.ts!
|
|
206
206
|
```
|
|
207
207
|
|
|
208
|
-
_See code: [src/commands/match-check.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.
|
|
208
|
+
_See code: [src/commands/match-check.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.86/src/commands/match-check.ts)_
|
|
209
209
|
|
|
210
210
|
## `rnbuilder match-nuke [BUILD]`
|
|
211
211
|
|
|
@@ -224,7 +224,7 @@ EXAMPLE
|
|
|
224
224
|
Nuke certificates ./src/match-nuke.ts!
|
|
225
225
|
```
|
|
226
226
|
|
|
227
|
-
_See code: [src/commands/match-nuke.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.
|
|
227
|
+
_See code: [src/commands/match-nuke.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.86/src/commands/match-nuke.ts)_
|
|
228
228
|
|
|
229
229
|
## `rnbuilder reject-review [REJECT-REVIEW]`
|
|
230
230
|
|
|
@@ -242,7 +242,7 @@ EXAMPLE
|
|
|
242
242
|
$ rnbuilder reject-review
|
|
243
243
|
```
|
|
244
244
|
|
|
245
|
-
_See code: [src/commands/reject-review.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.
|
|
245
|
+
_See code: [src/commands/reject-review.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.86/src/commands/reject-review.ts)_
|
|
246
246
|
|
|
247
247
|
## `rnbuilder setup [SETUP]`
|
|
248
248
|
|
|
@@ -260,7 +260,7 @@ EXAMPLE
|
|
|
260
260
|
hello world from ./src/setup.ts!
|
|
261
261
|
```
|
|
262
262
|
|
|
263
|
-
_See code: [src/commands/setup.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.
|
|
263
|
+
_See code: [src/commands/setup.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.86/src/commands/setup.ts)_
|
|
264
264
|
|
|
265
265
|
## `rnbuilder setup-gcp`
|
|
266
266
|
|
|
@@ -274,7 +274,7 @@ OPTIONS
|
|
|
274
274
|
-h, --help show CLI help
|
|
275
275
|
```
|
|
276
276
|
|
|
277
|
-
_See code: [src/commands/setup-gcp.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.
|
|
277
|
+
_See code: [src/commands/setup-gcp.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.86/src/commands/setup-gcp.ts)_
|
|
278
278
|
|
|
279
279
|
## `rnbuilder submit-review [SUBMIT-REVIEW]`
|
|
280
280
|
|
|
@@ -293,7 +293,7 @@ EXAMPLE
|
|
|
293
293
|
Push changes to existing apps ./src/firebase-sync-udids.ts!
|
|
294
294
|
```
|
|
295
295
|
|
|
296
|
-
_See code: [src/commands/submit-review.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.
|
|
296
|
+
_See code: [src/commands/submit-review.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.86/src/commands/submit-review.ts)_
|
|
297
297
|
|
|
298
298
|
## `rnbuilder sync-udids [BUILD]`
|
|
299
299
|
|
|
@@ -312,5 +312,5 @@ EXAMPLE
|
|
|
312
312
|
Sync device UDIDs from firebase from ./src/firebase-sync-udids.ts!
|
|
313
313
|
```
|
|
314
314
|
|
|
315
|
-
_See code: [src/commands/sync-udids.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.
|
|
315
|
+
_See code: [src/commands/sync-udids.ts](https://github.com/r0b0t3d/rnbuilder/blob/v0.6.86/src/commands/sync-udids.ts)_
|
|
316
316
|
<!-- commandsstop -->
|
|
@@ -35,53 +35,123 @@ async function generateLegacyIcons(sourceFile, mipmapDir, size) {
|
|
|
35
35
|
}
|
|
36
36
|
async function generateAdaptiveLayers(sourceFile, mipmapDir, canvasSize, safeZoneSize, backgroundColor) {
|
|
37
37
|
await sharp({
|
|
38
|
-
create: {
|
|
38
|
+
create: {
|
|
39
|
+
width: canvasSize,
|
|
40
|
+
height: canvasSize,
|
|
41
|
+
channels: 4,
|
|
42
|
+
background: Object.assign(Object.assign({}, backgroundColor), { alpha: 1 }),
|
|
43
|
+
},
|
|
39
44
|
})
|
|
40
45
|
.png()
|
|
41
46
|
.toFile(path.join(mipmapDir, 'ic_launcher_background.png'));
|
|
42
47
|
const offset = Math.round((canvasSize - safeZoneSize) / 2);
|
|
43
|
-
const foreground = await sharp(sourceFile)
|
|
48
|
+
const foreground = await sharp(sourceFile)
|
|
49
|
+
.resize(safeZoneSize, safeZoneSize)
|
|
50
|
+
.toBuffer();
|
|
44
51
|
await sharp({
|
|
45
|
-
create: {
|
|
52
|
+
create: {
|
|
53
|
+
width: canvasSize,
|
|
54
|
+
height: canvasSize,
|
|
55
|
+
channels: 4,
|
|
56
|
+
background: { r: 0, g: 0, b: 0, alpha: 0 },
|
|
57
|
+
},
|
|
46
58
|
})
|
|
47
59
|
.composite([{ input: foreground, left: offset, top: offset }])
|
|
48
60
|
.png()
|
|
49
61
|
.toFile(path.join(mipmapDir, 'ic_launcher_foreground.png'));
|
|
50
62
|
}
|
|
51
|
-
|
|
52
|
-
//
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
63
|
+
const NOTIFICATION_ICON_NAME = 'ic_stat_notification';
|
|
64
|
+
// Status bar icons render as the alpha shape only. Keep a 2dp-in-24dp margin around the mark.
|
|
65
|
+
const NOTIFICATION_MARK_RATIO = 20 / 24;
|
|
66
|
+
// A pixel counts as mark when it differs from the background by this much (0-255).
|
|
67
|
+
const BACKGROUND_DIFF_FULL_ALPHA = 90;
|
|
68
|
+
// Alpha mask of the logo mark, cropped to its bounding box. Uses the source alpha when the
|
|
69
|
+
// source has transparency. Otherwise (opaque square icon) the mark is whatever differs from
|
|
70
|
+
// the corner background color; using the opaque alpha would give a solid square.
|
|
71
|
+
async function extractMark(sourceFile) {
|
|
72
|
+
const { data, info } = await sharp(sourceFile)
|
|
73
|
+
.ensureAlpha()
|
|
74
|
+
.raw()
|
|
75
|
+
.toBuffer({ resolveWithObject: true });
|
|
76
|
+
const { width, height } = info;
|
|
77
|
+
const pixelCount = width * height;
|
|
78
|
+
const alpha = Buffer.alloc(pixelCount);
|
|
79
|
+
let opaque = true;
|
|
80
|
+
for (let i = 0; i < pixelCount; i++) {
|
|
81
|
+
alpha[i] = data[i * 4 + 3];
|
|
82
|
+
if (alpha[i] !== 255)
|
|
83
|
+
opaque = false;
|
|
58
84
|
}
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
85
|
+
const mask = opaque ? Buffer.alloc(pixelCount) : alpha;
|
|
86
|
+
if (opaque) {
|
|
87
|
+
const [bgR, bgG, bgB] = data;
|
|
88
|
+
for (let i = 0; i < pixelCount; i++) {
|
|
89
|
+
const diff = Math.max(Math.abs(data[i * 4] - bgR), Math.abs(data[i * 4 + 1] - bgG), Math.abs(data[i * 4 + 2] - bgB));
|
|
90
|
+
mask[i] = Math.min(255, Math.round((diff * 255) / BACKGROUND_DIFF_FULL_ALPHA));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
let minX = width;
|
|
94
|
+
let minY = height;
|
|
95
|
+
let maxX = -1;
|
|
96
|
+
let maxY = -1;
|
|
97
|
+
for (let y = 0; y < height; y++) {
|
|
98
|
+
for (let x = 0; x < width; x++) {
|
|
99
|
+
if (mask[y * width + x] > 16) {
|
|
100
|
+
minX = Math.min(minX, x);
|
|
101
|
+
maxX = Math.max(maxX, x);
|
|
102
|
+
minY = Math.min(minY, y);
|
|
103
|
+
maxY = Math.max(maxY, y);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (maxX < 0)
|
|
108
|
+
throw new Error(`No logo mark found in ${sourceFile} for the notification icon`);
|
|
109
|
+
const markWidth = maxX - minX + 1;
|
|
110
|
+
const markHeight = maxY - minY + 1;
|
|
111
|
+
const cropped = Buffer.alloc(markWidth * markHeight);
|
|
112
|
+
for (let y = 0; y < markHeight; y++) {
|
|
113
|
+
mask.copy(cropped, y * markWidth, (minY + y) * width + minX, (minY + y) * width + minX + markWidth);
|
|
114
|
+
}
|
|
115
|
+
return { data: cropped, width: markWidth, height: markHeight };
|
|
116
|
+
}
|
|
117
|
+
async function generateNotificationIcon(mark, drawableDir, size) {
|
|
118
|
+
const inner = Math.round(size * NOTIFICATION_MARK_RATIO);
|
|
119
|
+
const { data, info } = await sharp(mark.data, {
|
|
120
|
+
raw: { width: mark.width, height: mark.height, channels: 1 },
|
|
121
|
+
})
|
|
122
|
+
.resize(inner, inner, { fit: 'inside' })
|
|
123
|
+
.toBuffer({ resolveWithObject: true });
|
|
124
|
+
const left = Math.floor((size - info.width) / 2);
|
|
125
|
+
const top = Math.floor((size - info.height) / 2);
|
|
126
|
+
const alpha = await sharp(data, {
|
|
127
|
+
raw: { width: info.width, height: info.height, channels: info.channels },
|
|
128
|
+
})
|
|
129
|
+
.extend({
|
|
130
|
+
top,
|
|
131
|
+
bottom: size - info.height - top,
|
|
132
|
+
left,
|
|
133
|
+
right: size - info.width - left,
|
|
134
|
+
background: { r: 0, g: 0, b: 0 },
|
|
67
135
|
})
|
|
68
136
|
.png()
|
|
69
137
|
.toBuffer();
|
|
70
|
-
return sharp(rgb).joinChannel(alphaChannel).png().toBuffer();
|
|
71
|
-
}
|
|
72
|
-
async function generateNotificationIcon(sourceFile, drawableDir, size) {
|
|
73
|
-
const mask = await buildSilhouetteMask(sourceFile, size);
|
|
74
138
|
const white = await sharp({
|
|
75
|
-
create: {
|
|
139
|
+
create: {
|
|
140
|
+
width: size,
|
|
141
|
+
height: size,
|
|
142
|
+
channels: 3,
|
|
143
|
+
background: { r: 255, g: 255, b: 255 },
|
|
144
|
+
},
|
|
76
145
|
})
|
|
77
146
|
.png()
|
|
78
147
|
.toBuffer();
|
|
79
148
|
await sharp(white)
|
|
80
|
-
.
|
|
149
|
+
.joinChannel(alpha)
|
|
81
150
|
.png()
|
|
82
|
-
.toFile(path.join(drawableDir,
|
|
151
|
+
.toFile(path.join(drawableDir, `${NOTIFICATION_ICON_NAME}.png`));
|
|
83
152
|
}
|
|
84
153
|
async function generateAndroidIcons({ sourceFile, androidAssetFolder, backgroundColor = { r: 255, g: 255, b: 255 }, }) {
|
|
154
|
+
const notificationMark = await extractMark(sourceFile);
|
|
85
155
|
const anydpiDir = path.join(androidAssetFolder, 'mipmap-anydpi-v26');
|
|
86
156
|
common_1.ensureDir(anydpiDir);
|
|
87
157
|
fs.writeFileSync(path.join(anydpiDir, 'ic_launcher.xml'), ADAPTIVE_ICON_XML, 'utf-8');
|
|
@@ -93,9 +163,8 @@ async function generateAndroidIcons({ sourceFile, androidAssetFolder, background
|
|
|
93
163
|
common_1.ensureDir(drawableDir);
|
|
94
164
|
await generateLegacyIcons(sourceFile, mipmapDir, Math.round(LEGACY_BASE_SIZE * scale));
|
|
95
165
|
await generateAdaptiveLayers(sourceFile, mipmapDir, Math.round(ADAPTIVE_CANVAS_BASE_SIZE * scale), Math.round(ADAPTIVE_SAFE_ZONE_BASE_SIZE * scale), backgroundColor);
|
|
96
|
-
await generateNotificationIcon(
|
|
166
|
+
await generateNotificationIcon(notificationMark, drawableDir, Math.round(NOTIFICATION_BASE_SIZE * scale));
|
|
97
167
|
}
|
|
98
168
|
console.log(`Generated Android launcher + adaptive + notification icons in ${androidAssetFolder}`);
|
|
99
|
-
console.log('Note: reference "ic_notification" from AndroidManifest.xml / push SDK config manually if not already wired.');
|
|
100
169
|
}
|
|
101
170
|
exports.generateAndroidIcons = generateAndroidIcons;
|
|
@@ -90,7 +90,7 @@ exports.provisionFirebase = async ({ client, fastlaneDir, }) => {
|
|
|
90
90
|
const fastlaneEnvPath = path.join(fastlaneDir, '.env');
|
|
91
91
|
const fastlaneEnvVars = env_1.readEnvVars(fastlaneEnvPath);
|
|
92
92
|
await copyServiceAccountFile(clients[client].project, fastlaneDir);
|
|
93
|
-
env_1.setEnvValue('FIREBASE_SERVICE_ACCOUNT_FILE', 'firebase.json', fastlaneEnvVars);
|
|
93
|
+
env_1.setEnvValue('FIREBASE_SERVICE_ACCOUNT_FILE', 'fastlane/firebase.json', fastlaneEnvVars);
|
|
94
94
|
env_1.saveEnvValues(fastlaneEnvVars, fastlaneEnvPath);
|
|
95
95
|
const { apnsKey } = await inquirer.prompt([
|
|
96
96
|
{
|
package/oclif.manifest.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"0.6.
|
|
1
|
+
{"version":"0.6.86","commands":{"build":{"id":"build","description":"Build react native apps","pluginName":"rnbuilder","pluginType":"core","aliases":[],"examples":["$ rnbuilder build\nhello world from ./src/build.ts!\n"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"show CLI help","allowNo":false},"client":{"name":"client","type":"option","char":"c","description":"Set client that you want to build app"},"target":{"name":"target","type":"option","char":"t","description":"Set the build target: android, ios or both","options":["android","ios","android,ios"]},"env":{"name":"env","type":"option","char":"e","description":"Set the environment: prod, staging, dev"},"branch":{"name":"branch","type":"option","char":"b","description":"Set the source branch used to build the app"},"version":{"name":"version","type":"option","char":"v","description":"Set the version number for this build"},"installr":{"name":"installr","type":"option","char":"i","description":"If enabled, the build will be uploaded to installR"},"distribute":{"name":"distribute","type":"option","char":"d","description":"Specify where to distribute app"},"firebase":{"name":"firebase","type":"boolean","char":"f","description":"If enabled, the build will be uploaded to firebase","allowNo":false},"testersIos":{"name":"testersIos","type":"option","char":"t","description":"Tester ids for iOS distribution"},"testersAndroid":{"name":"testersAndroid","type":"option","char":"u","description":"Tester ids for Android distribution"},"gitReset":{"name":"gitReset","type":"boolean","char":"g","description":"Do git reset when building","allowNo":false},"cleanup":{"name":"cleanup","type":"boolean","char":"s","description":"Do cleanup when building","allowNo":false},"groupsIos":{"name":"groupsIos","type":"option","description":"Groups ids for iOS distribution"},"groupsAndroid":{"name":"groupsAndroid","type":"option","description":"Groups ids for Android distribution"},"skipCheckVersion":{"name":"skipCheckVersion","type":"boolean","description":"Skip checking current version on stores","allowNo":false},"install":{"name":"install","type":"boolean","char":"n","description":"Install dependencies before building","allowNo":false}},"args":[{"name":"build"}]},"check-version":{"id":"check-version","description":"Check live versions","pluginName":"rnbuilder","pluginType":"core","aliases":[],"examples":["$ rnbuilder check-version\n Nuke certificates ./src/match-check.ts!\n"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"show CLI help","allowNo":false},"client":{"name":"client","type":"option","char":"c","description":"Select client that you want to sync udids"}},"args":[{"name":"match-check"}]},"codepush":{"id":"codepush","description":"Push changes to existing apps","pluginName":"rnbuilder","pluginType":"core","aliases":[],"examples":["$ rnbuilder codepush\n Push changes to existing apps ./src/firebase-sync-udids.ts!\n"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"show CLI help","allowNo":false},"client":{"name":"client","type":"option","char":"c","description":"Select client that you want to push update"}},"args":[{"name":"build"}]},"google-key":{"id":"google-key","description":"Nuke certificates","pluginName":"rnbuilder","pluginType":"core","aliases":[],"examples":["$ rnbuilder match-check\n Nuke certificates ./src/match-check.ts!\n"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"show CLI help","allowNo":false},"client":{"name":"client","type":"option","char":"c","description":"Select client that you want to sync udids"}},"args":[{"name":"match-check"}]},"initialize":{"id":"initialize","description":"Initialize the environment for first run","pluginName":"rnbuilder","pluginType":"core","aliases":[],"examples":["$ rnbuilder initialize\ninitialize environment for first run from ./src/initialize.ts!\n"],"flags":{},"args":[]},"match-check":{"id":"match-check","description":"Check match certificates","pluginName":"rnbuilder","pluginType":"core","aliases":[],"examples":["$ rnbuilder match-check\n Check match certificates ./src/match-check.ts!\n"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"show CLI help","allowNo":false},"client":{"name":"client","type":"option","char":"c","description":"Select client that you want to check match certificates"}},"args":[{"name":"match-check"}]},"match-nuke":{"id":"match-nuke","description":"Nuke certificates","pluginName":"rnbuilder","pluginType":"core","aliases":[],"examples":["$ rnbuilder match-nuke\n Nuke certificates ./src/match-nuke.ts!\n"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"show CLI help","allowNo":false},"client":{"name":"client","type":"option","char":"c","description":"Select client that you want to sync udids"}},"args":[{"name":"build"}]},"reject-review":{"id":"reject-review","description":"Reject current App Store review version (In Review or Pending Developer Release)","pluginName":"rnbuilder","pluginType":"core","aliases":[],"examples":["$ rnbuilder reject-review\n"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"show CLI help","allowNo":false},"client":{"name":"client","type":"option","char":"c","description":"Select client to reject App Store review version"}},"args":[{"name":"reject-review"}]},"setup-gcp":{"id":"setup-gcp","description":"Setup GCP service account impersonation","pluginName":"rnbuilder","pluginType":"core","aliases":[],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"show CLI help","allowNo":false}},"args":[]},"setup":{"id":"setup","description":"Setup new client","pluginName":"rnbuilder","pluginType":"core","aliases":[],"examples":["$ rnbuilder build\nhello world from ./src/setup.ts!\n"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"show CLI help","allowNo":false}},"args":[{"name":"setup"}]},"submit-review":{"id":"submit-review","description":"Submit ios for review","pluginName":"rnbuilder","pluginType":"core","aliases":[],"examples":["$ rnbuilder submit-review\n Push changes to existing apps ./src/firebase-sync-udids.ts!\n"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"show CLI help","allowNo":false},"client":{"name":"client","type":"option","char":"c","description":"Select client that you want to push update"}},"args":[{"name":"submit-review"}]},"sync-udids":{"id":"sync-udids","description":"Sync device UDIDs from firebase","pluginName":"rnbuilder","pluginType":"core","aliases":[],"examples":["$ rnbuilder sync-udids\n Sync device UDIDs from firebase from ./src/firebase-sync-udids.ts!\n"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"show CLI help","allowNo":false},"client":{"name":"client","type":"option","char":"c","description":"Select client that you want to sync udids"}},"args":[{"name":"build"}]}}}
|