@swiftbrowser/cli 0.18.3 → 0.21.0

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 CHANGED
@@ -27,7 +27,8 @@ the shim does not provide is a compile error, never a wrong rendering.
27
27
  | `build <path> [-o dist]` | A release build, optimized and stripped with `wasm-opt` (17.4 MB for a small app, 4.5 MB with brotli), and a complete static site around it: the app at `/`, filling the window on every screen (a desktop browser gets the regular-width layout; `?mode=frame` shows the iPhone frame), its manifest and catalogs. `--no-optimize` skips wasm-opt. |
28
28
  | `test <path>` | Builds the app's unit tests for WebAssembly against the kit and runs them under Node's WASI, the runtime the browser runs the app in: XCTest and Swift Testing, each when some test imports it. The tests are the Xcode project's unit-test targets that depend on the app or load into it (`TEST_HOST`), each a module that can `@testable import` the app, or for a folder of sources the Swift files under its `Tests` and `*Tests` folders. A failing test, or a trap, fails the command (exit 1); errors name your files. 11 s for a new app's test after the kit is built. UI test targets are not run, and `Bundle.main` holds none of the app's resources yet. |
29
29
  | `kit` | Compiles SwiftBrowser for WebAssembly ahead of a build (the first `dev` or `build` does it otherwise) and prints where the kit is. |
30
- | `native init [<dir>]` | Writes a [SwiftBrowser Native](https://github.com/noya-app/SwiftBrowser/blob/main/Native/README.md) app: an iOS app whose views are real SwiftUI and whose logic is a [`@swiftbrowser/react`](https://www.npmjs.com/package/@swiftbrowser/react) app running in JavaScriptCore. `<Name>.xcodeproj` holds one app target over `<Name>/` (`<Name>App.swift`, three lines around `NativeApp` and `NativeRootView`; the asset catalog; the `app.js` bundle) and depends on the Swift package `@swiftbrowser/native` ships, at `js/node_modules/@swiftbrowser/native/swift`; `js/` is the JavaScript project (`npm install`, then `npm run build` writes the bundle and `npm run dev` serves it with rebuild and Fast Refresh on save, with `SB_DEV_SERVER` enabled in the scheme). `--name`, `--bundle-id` as for `init`; `--package <dir>` depends on another SwiftBrowserNative package (a checkout's `Native/`); `--icloud` gives the app an iCloud Drive container (`ios/<Name>.entitlements` naming `iCloud.<bundleId>` for documents, and an `ios/Info.plist` that shows its Documents in the Files app), which `fileManager.iCloudDirectory()` answers once the App ID has the iCloud capability; `--sign-in-with-apple` adds the Sign in with Apple entitlement for `signInWithApple` and `SignInWithAppleButton`. |
30
+ | `native init [<dir>]` | Writes a [SwiftBrowser Native](https://github.com/noya-app/SwiftBrowser/blob/main/Native/README.md) app: an iOS app whose views are real SwiftUI and whose logic is a [`@swiftbrowser/react`](https://www.npmjs.com/package/@swiftbrowser/react) app running in JavaScriptCore. `<Name>.xcodeproj` holds one app target over `<Name>/` (`<Name>App.swift`, three lines around `NativeApp` and `NativeRootView`; the asset catalog; the `app.js` bundle) and depends on the Swift package `@swiftbrowser/native` ships, at `js/node_modules/@swiftbrowser/native/swift`; `js/` is the JavaScript project (`npm install`, then `npm run build` writes the bundle and `npm run dev` serves it with rebuild and Fast Refresh on save, with `SB_DEV_SERVER` enabled in the scheme). `--name`, `--bundle-id` as for `init`; `--package <dir>` depends on another SwiftBrowserNative package (a checkout's `Native/`); `--icloud` gives the app an iCloud Drive container (`ios/<Name>.entitlements` naming `iCloud.<bundleId>` for documents, and an `ios/Info.plist` that shows its Documents in the Files app), which `fileManager.iCloudDirectory()` answers once the App ID has the iCloud capability; `--sign-in-with-apple` adds the Sign in with Apple entitlement for `signInWithApple` and `SignInWithAppleButton`. `--with <name>` (repeatable or comma-separated) links an optional Swift package and installs it in the App: `local-model` (SwiftBrowserLocalModel, an open language model on the device for `LanguageModelSession` where Apple Intelligence can't answer) or `dsp` (SwiftBrowserDSP, for `@swiftbrowser/dsp`'s `DSPNode`). `--github` writes GitHub Actions workflows that call SwiftBrowser's reusable ones at this release: `web.yml` deploys the web page to Cloudflare Pages (pull requests to a commented preview), `ios.yml` makes an ad hoc iOS build installed over the air from the same project's `ios` alias; they go in the repository's `.github/workflows` (the nearest folder up with a `.git`), named for the app and limited to its folder when it is inside a larger repository. |
31
+ | `native add <name> [<dir>]` | Links an optional Swift package into an existing native app's Xcode project: the package from beside the SwiftBrowserNative one the project references (`node_modules/@swiftbrowser/native/swift/Packages/<Package>`) and its product in every target that links SwiftBrowserNative. Prints the line to add to the App's `init`; running it again changes nothing. |
31
32
  | `native build <entry> --out <file>` | Bundles the app's entry module (`src/index.tsx`) into the `app.js` the Xcode target ships (`--minify`, `--sourcemap`), as the project's `npm run build` does through `swiftbrowser-native`. `--worker <name>=<entry>` (repeatable) bundles a worker beside it as `<name>.worker.js`, for `createWorker(name)`: a second JavaScriptCore context on a thread of its own, as a page has a Web Worker. |
32
33
  | `native dev <entry> --out <file>` | Serves the bundle with rebuild on save for `NativeApp.watch(url:)` (`--port`, default 5173). |
33
34
  | `native site <entry> --out <dir>` | The native app as a static site the web renderer runs: the SwiftBrowser Native views compiled for WebAssembly against the shim (the module `@swiftbrowser/native` ships; `--module <file>` for another), the bundle and the page, in the layout `build` writes. `--base /path/` for a site served under a path of another site, `--catalog <dir.xcassets>` (repeatable) for the app's named images, `--worker <name>=<entry>` (repeatable) for the app's workers, published beside the bundle for the page's `Worker`, `--name <App>` for the site's app name, `--minify`. |
package/dist/cli.js CHANGED
@@ -17,6 +17,8 @@ ${bold('Usage')}
17
17
  swiftbrowser test <path> the app's unit tests (XCTest, Swift Testing) in WebAssembly
18
18
  swiftbrowser kit [--wasm-macros] compile SwiftBrowser for WebAssembly ahead of builds
19
19
  swiftbrowser native init [<dir>] a new app: SwiftUI views, logic in JavaScript (@swiftbrowser/react), for iOS and the web
20
+ swiftbrowser native add <package> [<dir>] link an optional Swift package into the app: local-model (an open
21
+ language model on the device) or dsp (@swiftbrowser/dsp's synthesis)
20
22
  swiftbrowser native build <entry> --out <file> its app.js bundle for the Xcode target
21
23
  swiftbrowser native dev <entry> --out <file> serve the bundle with rebuild and refresh on save
22
24
  swiftbrowser native site <entry> --out <dir> the native app as a static site, drawn by the web renderer
@@ -29,6 +31,9 @@ ${bold('Options')}
29
31
  --bundle-id <id> the new app's bundle identifier (init, native init; default com.example.<Name>)
30
32
  --icloud give the app an iCloud Drive container (native init): entitlements and Info.plist for fileManager.iCloudDirectory()
31
33
  --sign-in-with-apple give the app the Sign in with Apple entitlement (native init), for signInWithApple and SignInWithAppleButton
34
+ --with <package> link and install an optional Swift package (native init; repeatable or comma-separated): local-model, dsp
35
+ --github GitHub Actions that deploy the web page and the ad hoc iOS build (native init), calling
36
+ SwiftBrowser's reusable workflows at this release
32
37
  --package <dir> the SwiftBrowserNative Swift package the project depends on
33
38
  (native init; default: the one @swiftbrowser/native ships)
34
39
  --minify, --sourcemap bundle options (native build, native dev, native site)
@@ -111,6 +116,8 @@ export async function main(argv) {
111
116
  'wasm-macros': { type: 'boolean' },
112
117
  compiler: { type: 'string' },
113
118
  package: { type: 'string' },
119
+ with: { type: 'string', multiple: true },
120
+ github: { type: 'boolean' },
114
121
  minify: { type: 'boolean' },
115
122
  sourcemap: { type: 'boolean' },
116
123
  },
@@ -211,7 +218,7 @@ export async function main(argv) {
211
218
  return 0;
212
219
  }
213
220
  case 'native': {
214
- const { nativeBuild, nativeDev, nativeInit, nativeSite } = await import('./commands/native.js');
221
+ const { nativeAdd, nativeBuild, nativeDev, nativeInit, nativeSite } = await import('./commands/native.js');
215
222
  const [, subcommand, argument] = positionals;
216
223
  const bundleOptions = () => {
217
224
  if (!argument)
@@ -241,8 +248,13 @@ export async function main(argv) {
241
248
  ...(values['icloud'] ? { icloud: true } : {}),
242
249
  ...(values['sign-in-with-apple'] ? { signInWithApple: true } : {}),
243
250
  ...(values.package !== undefined ? { package: values.package } : {}),
251
+ ...(values.github ? { github: true } : {}),
252
+ ...(values.with !== undefined ? { with: values.with.flatMap((spec) => spec.split(',')).map((name) => name.trim()).filter(Boolean) } : {}),
244
253
  });
245
254
  return 0;
255
+ case 'add':
256
+ nativeAdd(argument, positionals[3]);
257
+ return 0;
246
258
  case 'build':
247
259
  await nativeBuild(bundleOptions());
248
260
  return 0;
@@ -263,7 +275,7 @@ export async function main(argv) {
263
275
  });
264
276
  return 0;
265
277
  default:
266
- throw new CliError(`native takes init, build, dev or site${subcommand ? `, not ${subcommand}` : ''}`, 2);
278
+ throw new CliError(`native takes init, add, build, dev or site${subcommand ? `, not ${subcommand}` : ''}`, 2);
267
279
  }
268
280
  }
269
281
  case 'build': {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type OptionalPackage } from '../nativePackages.js';
1
2
  export interface NativeInitOptions {
2
3
  /** The app name; defaults to one made from the directory's name. */
3
4
  name?: string;
@@ -14,6 +15,15 @@ export interface NativeInitOptions {
14
15
  icloud?: boolean;
15
16
  /** Sign in with Apple: its entitlement (`signInWithApple`, `SignInWithAppleButton`). */
16
17
  signInWithApple?: boolean;
18
+ /** Optional packages the app links and installs (`--with local-model`; nativePackages.ts). */
19
+ with?: readonly string[];
20
+ /**
21
+ * GitHub Actions workflows that deploy the web page and the ad hoc iOS
22
+ * build, calling SwiftBrowser's reusable ones (nativeWorkflows.ts), in the
23
+ * repository's .github/workflows (the nearest folder up with a `.git`, or
24
+ * the app's).
25
+ */
26
+ github?: boolean;
17
27
  }
18
28
  export interface NativeInitResult {
19
29
  dir: string;
@@ -28,6 +38,21 @@ export interface NativeInitResult {
28
38
  * where there is none.
29
39
  */
30
40
  export declare function nativeInit(dirArg: string | undefined, options?: NativeInitOptions): NativeInitResult;
41
+ export interface NativeAddResult {
42
+ /** The project's project.pbxproj. */
43
+ pbxproj: string;
44
+ package: OptionalPackage;
45
+ /** False when the project linked it already. */
46
+ changed: boolean;
47
+ }
48
+ /**
49
+ * `swiftbrowser native add <package> [<dir>]`: links an optional package
50
+ * (nativePackages.ts) into the app's Xcode project in `dir`, from its folder
51
+ * beside the SwiftBrowserNative package the project already references
52
+ * (`node_modules/@swiftbrowser/native/swift/Packages/<folder>`), and says
53
+ * the line to add to the App's `init`. Run again, it changes nothing.
54
+ */
55
+ export declare function nativeAdd(name: string | undefined, dirArg: string | undefined): NativeAddResult;
31
56
  export interface NativeBundleOptions {
32
57
  /** The app's entry module, which calls `run(<App />)`. */
33
58
  entry: string;
@@ -1,12 +1,16 @@
1
- // `swiftbrowser native init|build|dev|site`: SwiftBrowser Native apps (iOS
1
+ // `swiftbrowser native init|add|build|dev|site`: SwiftBrowser Native apps (iOS
2
2
  // apps whose logic is a @swiftbrowser/react app in JavaScriptCore, drawn by
3
- // real SwiftUI, and the same app as a web page). `init` writes a project (nativeTemplate.ts); `build`, `dev`
3
+ // real SwiftUI, and the same app as a web page). `init` writes a project (nativeTemplate.ts), `add`
4
+ // links an optional package into one (nativePackages.ts); `build`, `dev`
4
5
  // and `site` are @swiftbrowser/native's bundler, which the project's npm
5
6
  // scripts also run as `swiftbrowser-native`.
6
7
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
7
8
  import path from 'node:path';
9
+ import { findXcodeProjects } from '@swiftbrowser/xcodeproj';
8
10
  import { CliError, bold, dim, info, ok } from '../log.js';
11
+ import { addPackageToPbxproj, optionalPackage, OPTIONAL_PACKAGES } from '../nativePackages.js';
9
12
  import { DEFAULT_PACKAGE_PATH, nativeGitignoreLines, nativeProjectFiles, nativeReadme } from '../nativeTemplate.js';
13
+ import { nativeWorkflowFiles } from '../nativeWorkflows.js';
10
14
  import { APP_NAME, appNameFrom, mergeGitignore } from '../template.js';
11
15
  /**
12
16
  * Writes a new native app into `dir` (created if missing). An existing
@@ -26,6 +30,15 @@ export function nativeInit(dirArg, options = {}) {
26
30
  if (existsSync(path.join(dir, taken)))
27
31
  throw new CliError(`${path.join(dir, taken)} already exists; pick another --name or directory`);
28
32
  }
33
+ const packages = [...new Set((options.with ?? []).map((name) => packageNamed(name).name))];
34
+ const repo = options.github ? repositoryRoot(dir) : undefined;
35
+ const workflows = repo
36
+ ? nativeWorkflowFiles({ name, bundleId: options.bundleId ?? `com.example.${name}`, directory: path.relative(repo, dir).split(path.sep).join('/') || '.' })
37
+ : [];
38
+ for (const file of workflows) {
39
+ if (existsSync(path.join(repo, file.path)))
40
+ throw new CliError(`${path.join(repo, file.path)} already exists; move it aside or leave out --github`);
41
+ }
29
42
  let packagePath = DEFAULT_PACKAGE_PATH;
30
43
  if (options.package !== undefined) {
31
44
  const resolved = path.resolve(options.package);
@@ -40,9 +53,13 @@ export function nativeInit(dirArg, options = {}) {
40
53
  writeFileSync(file, contents);
41
54
  written.push(relative);
42
55
  };
43
- for (const file of nativeProjectFiles({ name, packagePath, ...(options.bundleId ? { bundleId: options.bundleId } : {}), ...(options.icloud ? { icloud: true } : {}), ...(options.signInWithApple ? { signInWithApple: true } : {}) })) {
56
+ for (const file of nativeProjectFiles({ name, packagePath, ...(options.bundleId ? { bundleId: options.bundleId } : {}), ...(options.icloud ? { icloud: true } : {}), ...(options.signInWithApple ? { signInWithApple: true } : {}), ...(packages.length ? { packages } : {}) })) {
44
57
  write(file.path, file.contents);
45
58
  }
59
+ for (const file of workflows) {
60
+ const relative = path.relative(dir, path.join(repo, file.path)).split(path.sep).join('/');
61
+ write(relative, file.contents);
62
+ }
46
63
  const gitignore = path.join(dir, '.gitignore');
47
64
  const existing = existsSync(gitignore) ? readFileSync(gitignore, 'utf8') : undefined;
48
65
  const merged = mergeGitignore(existing, nativeGitignoreLines(name));
@@ -66,8 +83,76 @@ export function nativeInit(dirArg, options = {}) {
66
83
  const width = Math.max(...steps.map(([command]) => command.length)) + 3;
67
84
  for (const [command, what] of steps)
68
85
  info(` ${command.padEnd(width)}${dim(what)}`);
86
+ if (workflows.length) {
87
+ info(`\n${bold('GitHub Actions')} ${dim(`(${workflows.map((file) => path.basename(file.path)).join(', ')})`)}`);
88
+ info(' the repository\'s secrets: CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID for the web page; for the iOS build also');
89
+ info(' APPLE_TEAM_ID, APPLE_DIST_P12_BASE64, APPLE_DIST_P12_PASSWORD, ASC_KEY_ID, ASC_ISSUER_ID and ASC_KEY_P8');
90
+ }
69
91
  return { dir, name, written };
70
92
  }
93
+ /** The optional package `name` names, as a usage error when there is none. */
94
+ function packageNamed(name) {
95
+ try {
96
+ return optionalPackage(name);
97
+ }
98
+ catch (err) {
99
+ throw new CliError(err.message, 2);
100
+ }
101
+ }
102
+ /** The nearest folder from `dir` up that holds a `.git`, else `dir`. */
103
+ function repositoryRoot(dir) {
104
+ for (let at = dir;; at = path.dirname(at)) {
105
+ if (existsSync(path.join(at, '.git')))
106
+ return at;
107
+ if (path.dirname(at) === at)
108
+ return dir;
109
+ }
110
+ }
111
+ /**
112
+ * `swiftbrowser native add <package> [<dir>]`: links an optional package
113
+ * (nativePackages.ts) into the app's Xcode project in `dir`, from its folder
114
+ * beside the SwiftBrowserNative package the project already references
115
+ * (`node_modules/@swiftbrowser/native/swift/Packages/<folder>`), and says
116
+ * the line to add to the App's `init`. Run again, it changes nothing.
117
+ */
118
+ export function nativeAdd(name, dirArg) {
119
+ if (!name)
120
+ throw new CliError(`native add needs a package: ${OPTIONAL_PACKAGES.map((pkg) => pkg.name).join(' or ')}`, 2);
121
+ const pkg = packageNamed(name);
122
+ const target = path.resolve(dirArg ?? '.');
123
+ const projects = target.endsWith('.xcodeproj') ? [target] : findXcodeProjects(target);
124
+ if (projects.length !== 1) {
125
+ throw new CliError(projects.length === 0 ? `no .xcodeproj in ${target}` : `several projects in ${target}; pass one: ${projects.map((p) => path.basename(p)).join(', ')}`, 2);
126
+ }
127
+ const project = projects[0];
128
+ const pbxproj = path.join(project, 'project.pbxproj');
129
+ const root = path.dirname(project);
130
+ let result;
131
+ try {
132
+ // The core is the local package whose folder has SwiftBrowserNative, or, before `npm install`, @swiftbrowser/native's.
133
+ result = addPackageToPbxproj(readFileSync(pbxproj, 'utf8'), pkg, (relative) => existsSync(path.join(root, relative, 'Sources', 'SwiftBrowserNative')) || /(^|\/)@swiftbrowser\/native\/swift\/?$/.test(relative));
134
+ }
135
+ catch (err) {
136
+ throw new CliError(`${path.relative(process.cwd(), pbxproj) || pbxproj}: ${err.message}`);
137
+ }
138
+ const shown = path.relative(process.cwd(), project) || project;
139
+ if (!result.changed) {
140
+ info(ok(`${shown} links ${bold(pkg.product)} already (${result.targets.join(', ')})`));
141
+ return { pbxproj, package: pkg, changed: false };
142
+ }
143
+ writeFileSync(pbxproj, result.text);
144
+ info(ok(`${shown}: ${bold(pkg.product)} from ${result.packagePath}, linked by ${result.targets.join(', ')}`));
145
+ if (!existsSync(path.join(root, result.packagePath, 'Package.swift'))) {
146
+ info(dim(` ${result.packagePath} is not there yet: it comes with @swiftbrowser/native once installed (a version that ships Packages/${pkg.folder})`));
147
+ }
148
+ info(`\n${bold('Next')}`);
149
+ if (pkg.npm)
150
+ info(` npm install ${pkg.npm}`);
151
+ info(` in the App's init, after import ${pkg.product}:`);
152
+ for (const line of pkg.install)
153
+ info(` ${line}`);
154
+ return { pbxproj, package: pkg, changed: true };
155
+ }
71
156
  const kb = (bytes) => `${(bytes / 1024).toFixed(0)} kB`;
72
157
  /** `swiftbrowser native build <entry> --out <file>`: writes the bundle once. */
73
158
  export async function nativeBuild(options) {
@@ -1 +1 @@
1
- {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/commands/native.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/commands/native.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ export interface OptionalPackage {
2
+ /** What `--with` and `add` take. */
3
+ name: string;
4
+ /** Its folder under the core's `Packages/`. */
5
+ folder: string;
6
+ /** The library product the app links. */
7
+ product: string;
8
+ /** What it gives the app, for help and messages. */
9
+ summary: string;
10
+ /** The Swift the App's `init` runs to install it, after `import <product>`. */
11
+ install: readonly string[];
12
+ /** An npm package the JavaScript side needs, beside @swiftbrowser/react's own API. */
13
+ npm?: string;
14
+ }
15
+ export declare const OPTIONAL_PACKAGES: readonly OptionalPackage[];
16
+ /** The optional package `name` names, or a CliError-worthy message listing the names. */
17
+ export declare function optionalPackage(name: string): OptionalPackage;
18
+ /** An optional package's directory, as the project references it: under the core's. */
19
+ export declare function optionalPackagePath(corePath: string, pkg: OptionalPackage): string;
20
+ export interface AddPackageResult {
21
+ /** The edited project.pbxproj; the same text when the package was already there. */
22
+ text: string;
23
+ /** The core's directory as the project references it. */
24
+ corePath: string;
25
+ /** The package's directory as the project now references it. */
26
+ packagePath: string;
27
+ /** The targets that now link the product (those that link SwiftBrowserNative). */
28
+ targets: string[];
29
+ /** False when every one of those targets linked it already. */
30
+ changed: boolean;
31
+ }
32
+ /**
33
+ * Adds `pkg` to a project that links SwiftBrowserNative from a local package:
34
+ * a reference to its directory under the core's, and its product in the
35
+ * Frameworks of every target that links SwiftBrowserNative. The edit is
36
+ * textual, so the rest of the file stays as it was; the result is parsed
37
+ * again before it is returned. `isCore` says whether a local reference's
38
+ * directory is SwiftBrowserNative's (by default, one ending in
39
+ * `@swiftbrowser/native/swift`).
40
+ */
41
+ export declare function addPackageToPbxproj(text: string, pkg: OptionalPackage, isCore?: (relativePath: string) => boolean): AddPackageResult;
@@ -0,0 +1,217 @@
1
+ // The optional Swift packages of SwiftBrowser Native (Native/Packages in the
2
+ // repository): what an app links only when it uses them, as
3
+ // SwiftBrowserLocalModel's llama.cpp. @swiftbrowser/native ships them beside
4
+ // the core, under `swift/Packages` (packages/native/sync-swift.mjs), so a
5
+ // package's directory is `<the core's directory>/Packages/<folder>`. An app
6
+ // gets one from `swiftbrowser native init --with <name>` (nativeTemplate.ts)
7
+ // or, for a project that exists, `swiftbrowser native add <name>`, which
8
+ // edits its project.pbxproj here as Xcode's "Add Local…" would.
9
+ import { createHash } from 'node:crypto';
10
+ import { parsePbxproj } from '@swiftbrowser/xcodeproj';
11
+ export const OPTIONAL_PACKAGES = [
12
+ {
13
+ name: 'local-model',
14
+ folder: 'SwiftBrowserLocalModel',
15
+ product: 'SwiftBrowserLocalModel',
16
+ summary: "an open language model on the device (llama.cpp) for LanguageModelSession where Apple Intelligence can't answer",
17
+ install: [
18
+ '// An open model for LanguageModelSession where Apple Intelligence cannot answer, downloaded',
19
+ '// when the app calls SystemLanguageModel.default.download() (SwiftBrowserLocalModel).',
20
+ 'LocalLanguageModel.install([.llama3_2_1B])',
21
+ ],
22
+ },
23
+ {
24
+ name: 'dsp',
25
+ folder: 'SwiftBrowserDSP',
26
+ product: 'SwiftBrowserDSP',
27
+ summary: "@swiftbrowser/dsp's synthesis on the audio thread: DSPNode in the app's AudioEngine",
28
+ install: ['// The program node of the audio engine, for @swiftbrowser/dsp\'s DSPNode (SwiftBrowserDSP).', 'SwiftBrowserDSP.install()'],
29
+ npm: '@swiftbrowser/dsp',
30
+ },
31
+ {
32
+ name: 'shader',
33
+ folder: 'SwiftBrowserShader',
34
+ product: 'SwiftBrowserShader',
35
+ summary: "@swiftbrowser/shader's ShaderView drawn by Metal: shaders written in its language on the GPU",
36
+ install: ["// ShaderView's Metal view, for @swiftbrowser/shader (SwiftBrowserShader).", 'SwiftBrowserShader.install()'],
37
+ npm: '@swiftbrowser/shader',
38
+ },
39
+ ];
40
+ /** The optional package `name` names, or a CliError-worthy message listing the names. */
41
+ export function optionalPackage(name) {
42
+ const found = OPTIONAL_PACKAGES.find((pkg) => pkg.name === name || pkg.folder === name || pkg.product === name);
43
+ if (!found)
44
+ throw new Error(`no optional package ${name}; there are ${OPTIONAL_PACKAGES.map((pkg) => pkg.name).join(', ')}`);
45
+ return found;
46
+ }
47
+ /** An optional package's directory, as the project references it: under the core's. */
48
+ export function optionalPackagePath(corePath, pkg) {
49
+ return `${corePath.replace(/\/+$/, '')}/Packages/${pkg.folder}`;
50
+ }
51
+ /**
52
+ * Adds `pkg` to a project that links SwiftBrowserNative from a local package:
53
+ * a reference to its directory under the core's, and its product in the
54
+ * Frameworks of every target that links SwiftBrowserNative. The edit is
55
+ * textual, so the rest of the file stays as it was; the result is parsed
56
+ * again before it is returned. `isCore` says whether a local reference's
57
+ * directory is SwiftBrowserNative's (by default, one ending in
58
+ * `@swiftbrowser/native/swift`).
59
+ */
60
+ export function addPackageToPbxproj(text, pkg, isCore = defaultIsCore) {
61
+ const doc = parsePbxproj(text);
62
+ const { objects } = doc;
63
+ const root = objects[doc.rootObject];
64
+ if (!root)
65
+ throw new Error('the project has no root object');
66
+ const localRefs = strings(root['packageReferences']).filter((id) => objects[id]?.isa === 'XCLocalSwiftPackageReference');
67
+ const pathOf = (id) => String(objects[id]['relativePath'] ?? '');
68
+ const cores = localRefs.filter((id) => !/\/Packages\/[^/]+$/.test(pathOf(id)) && isCore(pathOf(id)));
69
+ if (cores.length !== 1) {
70
+ throw new Error(cores.length === 0
71
+ ? 'the project does not reference SwiftBrowserNative as a local package (node_modules/@swiftbrowser/native/swift, as swiftbrowser native init writes)'
72
+ : `the project references several local packages that could be SwiftBrowserNative's: ${cores.map(pathOf).join(', ')}`);
73
+ }
74
+ const corePath = pathOf(cores[0]);
75
+ const packagePath = optionalPackagePath(corePath, pkg);
76
+ const productsOf = (target) => strings(target['packageProductDependencies']);
77
+ const productName = (id) => objects[id]?.['productName'];
78
+ const targets = Object.entries(objects).filter(([, object]) => object.isa === 'PBXNativeTarget' && productsOf(object).some((id) => productName(id) === 'SwiftBrowserNative'));
79
+ if (targets.length === 0)
80
+ throw new Error('no target links SwiftBrowserNative');
81
+ const edits = [];
82
+ const fresh = freshIds(doc, `${pkg.folder}:${packagePath}`);
83
+ let packageRef = localRefs.find((id) => pathOf(id) === packagePath);
84
+ if (!packageRef) {
85
+ packageRef = fresh('package-ref');
86
+ edits.push(arrayEntry(text, doc.rootObject, 'packageReferences', `${packageRef} /* XCLocalSwiftPackageReference "${packagePath}" */`));
87
+ edits.push(sectionObject(text, 'XCLocalSwiftPackageReference', `\t\t${packageRef} /* XCLocalSwiftPackageReference "${packagePath}" */ = {\n\t\t\tisa = XCLocalSwiftPackageReference;\n\t\t\trelativePath = ${quoted(packagePath)};\n\t\t};\n`));
88
+ }
89
+ const names = [];
90
+ for (const [targetId, target] of targets) {
91
+ names.push(String(target['name'] ?? targetId));
92
+ if (productsOf(target).some((id) => productName(id) === pkg.product))
93
+ continue;
94
+ const productDep = fresh(`product-dep:${targetId}`);
95
+ const buildFile = fresh(`build-file:${targetId}`);
96
+ edits.push(arrayEntry(text, targetId, 'packageProductDependencies', `${productDep} /* ${pkg.product} */`));
97
+ edits.push(sectionObject(text, 'XCSwiftPackageProductDependency', `\t\t${productDep} /* ${pkg.product} */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = ${pkg.product};\n\t\t};\n`));
98
+ edits.push(sectionObject(text, 'PBXBuildFile', `\t\t${buildFile} /* ${pkg.product} in Frameworks */ = {isa = PBXBuildFile; productRef = ${productDep} /* ${pkg.product} */; };\n`));
99
+ const frameworks = strings(target['buildPhases']).find((id) => objects[id]?.isa === 'PBXFrameworksBuildPhase');
100
+ if (!frameworks)
101
+ throw new Error(`target ${String(target['name'])} has no Frameworks build phase`);
102
+ edits.push(arrayEntry(text, frameworks, 'files', `${buildFile} /* ${pkg.product} in Frameworks */`));
103
+ }
104
+ if (edits.length === 0)
105
+ return { text, corePath, packagePath, targets: names, changed: false };
106
+ const edited = apply(text, edits);
107
+ // The edit must read back as the project with the package in it.
108
+ const check = parsePbxproj(edited);
109
+ for (const [targetId] of targets) {
110
+ const deps = strings(check.objects[targetId]['packageProductDependencies']);
111
+ if (!deps.some((id) => check.objects[id]?.['productName'] === pkg.product))
112
+ throw new Error('the edited project does not read back with the package');
113
+ }
114
+ return { text: edited, corePath, packagePath, targets: names, changed: true };
115
+ }
116
+ const defaultIsCore = (relativePath) => /(^|\/)@swiftbrowser\/native\/swift\/?$/.test(relativePath);
117
+ function strings(value) {
118
+ return Array.isArray(value) ? value.filter((item) => typeof item === 'string') : [];
119
+ }
120
+ /** Object ids for the new objects: 24 hex digits, stable for the project and role, none already in it. */
121
+ function freshIds(doc, seed) {
122
+ const taken = new Set(Object.keys(doc.objects));
123
+ return (role) => {
124
+ for (let attempt = 0;; attempt++) {
125
+ const id = createHash('sha1').update(`native-add/${doc.rootObject}/${seed}/${role}/${attempt}`).digest('hex').slice(0, 24).toUpperCase();
126
+ if (!taken.has(id)) {
127
+ taken.add(id);
128
+ return id;
129
+ }
130
+ }
131
+ };
132
+ }
133
+ function quoted(value) {
134
+ return /^[A-Za-z0-9_./$-]+$/.test(value) ? value : JSON.stringify(value);
135
+ }
136
+ function apply(text, edits) {
137
+ // Stable for equal offsets, so objects added to one section keep their order.
138
+ const sorted = edits.map((edit, index) => ({ ...edit, index })).sort((a, b) => b.at - a.at || b.index - a.index);
139
+ let result = text;
140
+ for (const { at, insert } of sorted)
141
+ result = result.slice(0, at) + insert + result.slice(at);
142
+ return result;
143
+ }
144
+ /** A new object at the end of `isa`'s section, or at the start of `objects` when the file has no such section. */
145
+ function sectionObject(text, isa, object) {
146
+ const end = text.indexOf(`/* End ${isa} section */`);
147
+ if (end >= 0)
148
+ return { at: text.lastIndexOf('\n', end) + 1, insert: object };
149
+ const objects = /\bobjects\s*=\s*\{[^\n]*\n/.exec(text);
150
+ if (!objects)
151
+ throw new Error('the project has no objects dictionary');
152
+ return { at: objects.index + objects[0].length, insert: `\n/* Begin ${isa} section */\n${object}/* End ${isa} section */\n` };
153
+ }
154
+ /**
155
+ * An entry at the end of the array `key` of the object `id`. The array must be
156
+ * there: a project that links SwiftBrowserNative has its package references,
157
+ * its target's product dependencies and its Frameworks files.
158
+ */
159
+ function arrayEntry(text, id, key, entry) {
160
+ const [start, end] = objectSpan(text, id);
161
+ const keyAt = new RegExp(`(^|[\\s;{])${key}\\s*=\\s*\\(`, 'g');
162
+ keyAt.lastIndex = start;
163
+ let match;
164
+ while ((match = keyAt.exec(text)) && match.index < end) {
165
+ const open = match.index + match[0].length - 1;
166
+ const close = matching(text, open);
167
+ const lineStart = text.lastIndexOf('\n', close) + 1;
168
+ const before = text.slice(lineStart, close);
169
+ if (/^[ \t]*$/.test(before))
170
+ return { at: lineStart, insert: `${before}\t${entry},\n` };
171
+ const last = text.slice(open + 1, close).trimEnd();
172
+ return { at: close, insert: `${last === '' || last.endsWith(',') ? '' : ', '}${entry}, ` };
173
+ }
174
+ throw new Error(`object ${id} has no ${key} array`);
175
+ }
176
+ /** Where object `id`'s dictionary is in the text: from its `{` to its `}`. */
177
+ function objectSpan(text, id) {
178
+ const definition = new RegExp(`(^|\\n)[ \\t]*${id}(\\s*/\\*[^*]*\\*/)?\\s*=\\s*\\{`).exec(text);
179
+ if (!definition)
180
+ throw new Error(`object ${id} is not in the project`);
181
+ const open = definition.index + definition[0].length - 1;
182
+ return [open, matching(text, open)];
183
+ }
184
+ /** The offset of the bracket closing the one at `open`, past strings and comments. */
185
+ function matching(text, open) {
186
+ const pairs = { '{': '}', '(': ')' };
187
+ const stack = [];
188
+ for (let i = open; i < text.length; i++) {
189
+ const char = text[i];
190
+ if (char === '"') {
191
+ for (i++; i < text.length && text[i] !== '"'; i++)
192
+ if (text[i] === '\\')
193
+ i++;
194
+ }
195
+ else if (char === '/' && text[i + 1] === '*') {
196
+ i = text.indexOf('*/', i + 2) + 1;
197
+ if (i === 0)
198
+ break;
199
+ }
200
+ else if (char === '/' && text[i + 1] === '/') {
201
+ i = text.indexOf('\n', i);
202
+ if (i < 0)
203
+ break;
204
+ }
205
+ else if (char in pairs) {
206
+ stack.push(pairs[char]);
207
+ }
208
+ else if (char === '}' || char === ')') {
209
+ if (stack.pop() !== char)
210
+ break;
211
+ if (stack.length === 0)
212
+ return i;
213
+ }
214
+ }
215
+ throw new Error('unbalanced brackets in the project');
216
+ }
217
+ //# sourceMappingURL=nativePackages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativePackages.js","sourceRoot":"","sources":["../src/nativePackages.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,12 @@ export interface NativeTemplateOptions {
21
21
  icloud?: boolean;
22
22
  /** Sign in with Apple: the `com.apple.developer.applesignin` entitlement (the App ID needs the capability). */
23
23
  signInWithApple?: boolean;
24
+ /**
25
+ * The optional packages the app links (`--with`, nativePackages.ts): each
26
+ * from its folder under the core's `Packages/`, installed in the App's
27
+ * `init` (the Showcase's SwiftBrowserLocalModel and SwiftBrowserDSP).
28
+ */
29
+ packages?: readonly string[];
24
30
  }
25
31
  /** The Xcode project and asset catalog alone: what the examples under Native/Examples regenerate. */
26
32
  export declare function nativeXcodeFiles(options: NativeTemplateOptions): TemplateFile[];
@@ -12,6 +12,7 @@
12
12
  // the same generator, depending on the repository's `Native/` package.
13
13
  import { createHash } from 'node:crypto';
14
14
  import { readFileSync } from 'node:fs';
15
+ import { optionalPackage, optionalPackagePath } from './nativePackages.js';
15
16
  import { ACCENT_COLOR, APP_ICON, APP_NAME, CATALOG_INFO, WORKSPACE } from './template.js';
16
17
  /** This package's version, which the new project's `package.json` pins `@swiftbrowser/native` and `@swiftbrowser/react` to. */
17
18
  const VERSION = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version;
@@ -25,7 +26,7 @@ export function nativeXcodeFiles(options) {
25
26
  const bundleId = options.bundleId ?? `com.example.${name}`;
26
27
  const packagePath = options.packagePath ?? DEFAULT_PACKAGE_PATH;
27
28
  return [
28
- { path: `${name}.xcodeproj/project.pbxproj`, contents: pbxproj(name, bundleId, packagePath, options.infoPlist ?? {}, { icloud: options.icloud === true, entitlements: options.icloud === true || options.signInWithApple === true }) },
29
+ { path: `${name}.xcodeproj/project.pbxproj`, contents: pbxproj(name, bundleId, packagePath, options.infoPlist ?? {}, { icloud: options.icloud === true, entitlements: options.icloud === true || options.signInWithApple === true }, (options.packages ?? []).map(optionalPackage)) },
29
30
  { path: `${name}.xcodeproj/project.xcworkspace/contents.xcworkspacedata`, contents: WORKSPACE },
30
31
  ...(options.icloud || options.signInWithApple
31
32
  ? [{ path: `ios/${name}.entitlements`, contents: entitlements(bundleId, { icloud: options.icloud === true, signInWithApple: options.signInWithApple === true }) }]
@@ -43,9 +44,9 @@ export function nativeProjectFiles(options) {
43
44
  const version = options.version ?? VERSION;
44
45
  return [
45
46
  ...nativeXcodeFiles(options),
46
- { path: `ios/${name}App.swift`, contents: appSource(name) },
47
+ { path: `ios/${name}App.swift`, contents: appSource(name, (options.packages ?? []).map(optionalPackage)) },
47
48
  { path: 'ios/NativeFunctions.swift', contents: nativeFunctionsSource(name) },
48
- { path: 'package.json', contents: json(packageJson(name, version)) },
49
+ { path: 'package.json', contents: json(packageJson(name, version, (options.packages ?? []).map(optionalPackage))) },
49
50
  { path: 'tsconfig.json', contents: json(TSCONFIG) },
50
51
  { path: 'vite.config.ts', contents: VITE_CONFIG },
51
52
  { path: 'src/index.tsx', contents: INDEX },
@@ -94,12 +95,14 @@ The native side is the \`ios/\` folder (the Xcode target's): \`${name}App.swift\
94
95
  \`NativeFunctions.swift\` is where Swift the JavaScript calls goes. A function registered with
95
96
  \`NativeFunctions.register\` runs from \`callNative(name, params)\`, what Swift sends with
96
97
  \`NativeFunctions.send\` reaches \`onNativeEvent(name, listener)\`, and a SwiftUI view registered with
97
- \`NativeRegistry\` renders through \`<Native name=...>\` (all from \`@swiftbrowser/native\`).
98
+ \`ViewRegistry\` renders through \`<RegisteredView name=...>\` (from \`@swiftbrowser/react\`; the functions are
99
+ from \`@swiftbrowser/native\`).
98
100
  `;
99
101
  }
100
- function appSource(name) {
101
- return `import SwiftBrowserNative
102
- import SwiftUI
102
+ function appSource(name, packages = []) {
103
+ const imports = ['SwiftBrowserNative', 'SwiftUI', ...packages.map((pkg) => pkg.product)].sort().map((module) => `import ${module}`).join('\n');
104
+ const installs = packages.map((pkg) => `\n${pkg.install.map((line) => ` ${line}`).join('\n')}`).join('');
105
+ return `${imports}
103
106
 
104
107
  // The whole native side of the app. The logic is JavaScript: \`../src\` builds
105
108
  // to \`app.js\` in this folder (\`npm run build\` at the project's root), which Xcode bundles
@@ -119,7 +122,7 @@ struct ${name}App: App {
119
122
 
120
123
  init() {
121
124
  // Swift the JavaScript calls (NativeFunctions.swift), registered before the bundle loads.
122
- registerNativeFunctions()
125
+ registerNativeFunctions()${installs}
123
126
  }
124
127
 
125
128
  var body: some Scene {
@@ -176,12 +179,12 @@ func registerNativeFunctions() {
176
179
  }
177
180
  }
178
181
 
179
- // A SwiftUI view for \`<Native name="MapView" props={{ region }} onEvent={...}>\` registers the same way:
180
- // NativeRegistry.register("MapView") { context in MapView(region: context.props["region"]) { context.send(...) } }
182
+ // A SwiftUI view for \`<RegisteredView name="MapView" props={{ region }} onEvent={...}>\` registers the same way:
183
+ // ViewRegistry.register("MapView") { context in MapView(region: context.props["region"]) { context.send(...) } }
181
184
  }
182
185
  `;
183
186
  }
184
- function packageJson(name, version) {
187
+ function packageJson(name, version, packages = []) {
185
188
  return {
186
189
  name: `${name.toLowerCase()}-app`,
187
190
  private: true,
@@ -199,6 +202,7 @@ function packageJson(name, version) {
199
202
  '@swiftbrowser/native': version,
200
203
  '@swiftbrowser/react': version,
201
204
  '@swiftbrowser/web': version,
205
+ ...Object.fromEntries(packages.flatMap((pkg) => (pkg.npm ? [[pkg.npm, version]] : []))),
202
206
  react: '^19.3.0',
203
207
  'react-reconciler': '^0.34.0',
204
208
  },
@@ -290,6 +294,12 @@ function webIndexHtml(name) {
290
294
  var coarse = typeof matchMedia === 'function' && matchMedia('(pointer: coarse)').matches;
291
295
  var device = mode === 'device' || (mode !== 'frame' && coarse);
292
296
  document.documentElement.setAttribute('data-sb-mode', device ? 'device' : 'frame');
297
+ // The preview's device (src/deviceFrame.ts in @swiftbrowser/web): ?device=, else the last one picked.
298
+ var frame = new URLSearchParams(location.search).get('device');
299
+ try { frame = frame || localStorage.getItem('sb-device-frame'); } catch (e) {}
300
+ document.documentElement.setAttribute('data-sb-frame', frame === 'ipad' || frame === 'none' ? frame : 'iphone');
301
+ // ?toolbar=0: the toolbar's close button hid it (src/deviceFrame.ts).
302
+ if (new URLSearchParams(location.search).get('toolbar') === '0') document.documentElement.setAttribute('data-sb-toolbar', 'hidden');
293
303
  })();
294
304
  </script>
295
305
  </head>
@@ -314,9 +324,9 @@ function webIndexHtml(name) {
314
324
  <rect x="16" y="0" width="3.33" height="12.33" rx="1" />
315
325
  </svg>
316
326
  <svg class="glyph glyph-wifi" viewBox="0 0 16.3 12.33" width="16.3" height="12.33">
317
- <path class="wifi-band" d="M1.08 3.87A11.0 11.0 0 0 1 15.22 3.87" stroke-width="2.6" />
318
- <path class="wifi-band" d="M3.91 7.24A6.6 6.6 0 0 1 12.39 7.24" stroke-width="2.9" />
319
- <path d="M8.15 12.3L5.64 9.31A3.9 3.9 0 0 1 10.66 9.31Z" />
327
+ <path d="M0.02 3.3A12.15 12.15 0 0 1 16.28 3.3L14.41 5.38A9.35 9.35 0 0 0 1.89 5.38Z" />
328
+ <path d="M2.8 6.38A8 8 0 0 1 13.5 6.38L11.66 8.43A5.25 5.25 0 0 0 4.64 8.43Z" />
329
+ <path d="M8.15 12.33L5.54 9.43A3.9 3.9 0 0 1 10.76 9.43Z" />
320
330
  </svg>
321
331
  <svg class="glyph glyph-battery" viewBox="0 0 28 13" width="28" height="13">
322
332
  <rect class="battery-shell" x="0.5" y="0.5" width="24" height="12" rx="3.5" />
@@ -347,13 +357,14 @@ function webIndexHtml(name) {
347
357
  /** The web entry: mounts the app in the page, following the page's theme toggle and, on a phone, the system's appearance and the safe areas. */
348
358
  function webMain(name) {
349
359
  return `// The app in a browser: the same React app the iOS app runs, drawn by
350
- // @swiftbrowser/web's renderer. A desktop gets it in the iPhone frame with a
351
- // theme toggle; a phone gets it full screen, following the system's
360
+ // @swiftbrowser/web's renderer. A desktop gets it in an iPhone, an iPad or the
361
+ // whole window (the toolbar's Device picker) with a theme toggle; a phone gets it full screen, following the system's
352
362
  // appearance (\`?mode=frame\` / \`?mode=device\` force one).
353
363
 
354
364
  import '@swiftbrowser/web/src/styles.css';
355
365
  import '@swiftbrowser/web/src/page.css';
356
366
  import { mount } from '@swiftbrowser/react';
367
+ import { installDeviceFrame } from '@swiftbrowser/web/src/deviceFrame';
357
368
  import { readViewportInsets, watchViewport } from '@swiftbrowser/web/src/deviceMode';
358
369
  import type { ColorScheme } from '@swiftbrowser/web/src/protocol';
359
370
  import { App } from '../src/App';
@@ -405,6 +416,10 @@ try {
405
416
  lastSize = size;
406
417
  mounted.renderer.viewportChanged();
407
418
  });
419
+ } else {
420
+ // A desktop: the toolbar's Device picker draws the app in an iPhone, an
421
+ // iPad or no device, remembered for the next visit (?device= picks one).
422
+ installDeviceFrame(mounted.renderer);
408
423
  }
409
424
  } catch (error) {
410
425
  status.textContent = error instanceof Error ? error.message : String(error);
@@ -423,8 +438,17 @@ function objectId(name, role) {
423
438
  function settings(pairs) {
424
439
  return pairs.map(([key, value]) => `\t\t\t\t${key} = ${value};`).join('\n');
425
440
  }
426
- function pbxproj(name, bundleId, packagePath, infoPlist, capabilities = { icloud: false, entitlements: false }) {
441
+ function pbxproj(name, bundleId, packagePath, infoPlist, capabilities = { icloud: false, entitlements: false }, packages = []) {
427
442
  const id = (role) => objectId(name, role);
443
+ // Each optional package: its reference, its product and the product's build file, after SwiftBrowserNative's.
444
+ const more = packages.map((pkg) => ({
445
+ path: optionalPackagePath(packagePath, pkg),
446
+ product: pkg.product,
447
+ packageRef: id(`package-ref:${optionalPackagePath(packagePath, pkg)}`),
448
+ productDep: id(`product-dep:${pkg.product}`),
449
+ buildFile: id(`build-file:${pkg.product}`),
450
+ }));
451
+ const lines = (line) => more.map((pkg) => `\n${line(pkg)}`).join('');
428
452
  const app = id('product');
429
453
  const folder = id('folder');
430
454
  const frameworks = id('frameworks');
@@ -521,7 +545,7 @@ function pbxproj(name, bundleId, packagePath, infoPlist, capabilities = { icloud
521
545
  objects = {
522
546
 
523
547
  /* Begin PBXBuildFile section */
524
- ${buildFile} /* SwiftBrowserNative in Frameworks */ = {isa = PBXBuildFile; productRef = ${productDep} /* SwiftBrowserNative */; };
548
+ ${buildFile} /* SwiftBrowserNative in Frameworks */ = {isa = PBXBuildFile; productRef = ${productDep} /* SwiftBrowserNative */; };${lines((pkg) => `\t\t${pkg.buildFile} /* ${pkg.product} in Frameworks */ = {isa = PBXBuildFile; productRef = ${pkg.productDep} /* ${pkg.product} */; };`)}
525
549
  /* End PBXBuildFile section */
526
550
 
527
551
  /* Begin PBXFileReference section */
@@ -541,7 +565,7 @@ function pbxproj(name, bundleId, packagePath, infoPlist, capabilities = { icloud
541
565
  isa = PBXFrameworksBuildPhase;
542
566
  buildActionMask = 2147483647;
543
567
  files = (
544
- ${buildFile} /* SwiftBrowserNative in Frameworks */,
568
+ ${buildFile} /* SwiftBrowserNative in Frameworks */,${lines((pkg) => `\t\t\t\t${pkg.buildFile} /* ${pkg.product} in Frameworks */,`)}
545
569
  );
546
570
  runOnlyForDeploymentPostprocessing = 0;
547
571
  };
@@ -584,7 +608,7 @@ function pbxproj(name, bundleId, packagePath, infoPlist, capabilities = { icloud
584
608
  );
585
609
  name = ${name};
586
610
  packageProductDependencies = (
587
- ${productDep} /* SwiftBrowserNative */,
611
+ ${productDep} /* SwiftBrowserNative */,${lines((pkg) => `\t\t\t\t${pkg.productDep} /* ${pkg.product} */,`)}
588
612
  );
589
613
  productName = ${name};
590
614
  productReference = ${app} /* ${name}.app */;
@@ -615,7 +639,7 @@ function pbxproj(name, bundleId, packagePath, infoPlist, capabilities = { icloud
615
639
  mainGroup = ${mainGroup};
616
640
  minimizedProjectReferenceProxies = 1;
617
641
  packageReferences = (
618
- ${packageRef} /* XCLocalSwiftPackageReference "${packagePath}" */,
642
+ ${packageRef} /* XCLocalSwiftPackageReference "${packagePath}" */,${lines((pkg) => `\t\t\t\t${pkg.packageRef} /* XCLocalSwiftPackageReference "${pkg.path}" */,`)}
619
643
  );
620
644
  preferredProjectObjectVersion = 77;
621
645
  productRefGroup = ${products} /* Products */;
@@ -703,14 +727,14 @@ ${targetSettings}
703
727
  ${packageRef} /* XCLocalSwiftPackageReference "${packagePath}" */ = {
704
728
  isa = XCLocalSwiftPackageReference;
705
729
  relativePath = ${quoted(packagePath)};
706
- };
730
+ };${lines((pkg) => `\t\t${pkg.packageRef} /* XCLocalSwiftPackageReference "${pkg.path}" */ = {\n\t\t\tisa = XCLocalSwiftPackageReference;\n\t\t\trelativePath = ${quoted(pkg.path)};\n\t\t};`)}
707
731
  /* End XCLocalSwiftPackageReference section */
708
732
 
709
733
  /* Begin XCSwiftPackageProductDependency section */
710
734
  ${productDep} /* SwiftBrowserNative */ = {
711
735
  isa = XCSwiftPackageProductDependency;
712
736
  productName = SwiftBrowserNative;
713
- };
737
+ };${lines((pkg) => `\t\t${pkg.productDep} /* ${pkg.product} */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = ${pkg.product};\n\t\t};`)}
714
738
  /* End XCSwiftPackageProductDependency section */
715
739
  };
716
740
  rootObject = ${project} /* Project object */;
@@ -1 +1 @@
1
- {"version":3,"file":"nativeTemplate.js","sourceRoot":"","sources":["../src/nativeTemplate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nativeTemplate.js","sourceRoot":"","sources":["../src/nativeTemplate.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,8EAA8E;AAC9E,0EAA0E;AAC1E,6EAA6E;AAC7E,4EAA4E;AAC5E,2EAA2E;AAC3E,2EAA2E;AAC3E,kEAAkE;AAClE,2EAA2E;AAC3E,2EAA2E;AAC3E,uEAAuE;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAwB,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAqB,SAAS,EAAE,MAAM,eAAe,CAAC;AAE7G,+HAA+H;AAC/H,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAyB,CAAC,OAAO,CAAC;AAEvI,wGAAwG;AACxG,MAAM,CAAC,MAAM,oBAAoB,GAAG,yCAAyC,CAAC;AA8B9E,qGAAqG;AACrG,MAAM,UAAU,gBAAgB,CAAC,OAA8B;IAC7D,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,IAAI,EAAE,CAAC;IAC3D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC;IAChE,OAAO;QACL,EAAE,IAAI,EAAE,GAAG,IAAI,4BAA4B,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,eAAe,KAAK,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE;QACrR,EAAE,IAAI,EAAE,GAAG,IAAI,yDAAyD,EAAE,QAAQ,EAAE,SAAS,EAAE;QAC/F,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,eAAe;YAC3C,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,IAAI,eAAe,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;YAClK,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,EAAE,IAAI,EAAE,GAAG,IAAI,qCAAqC,IAAI,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;QAC7F,EAAE,IAAI,EAAE,mCAAmC,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE;QAC3E,EAAE,IAAI,EAAE,wDAAwD,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE;QAChG,EAAE,IAAI,EAAE,sDAAsD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;KAC3F,CAAC;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,kBAAkB,CAAC,OAA8B;IAC/D,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;IAC3C,OAAO;QACL,GAAG,gBAAgB,CAAC,OAAO,CAAC;QAC5B,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE;QAC1G,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE;QAC5E,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;QACnH,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;QACnD,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,WAAW,EAAE;QACjD,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC1C,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE;QACtC,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE;QACxD,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;KAClD,CAAC;AACJ,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO;QACL,wEAAwE;QACxE,YAAY;QACZ,WAAW;QACX,eAAe;QACf,SAAS;QACT,aAAa;QACb,cAAc;QACd,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,KAAK,IAAI;;;;;;;;;;;;;yDAauC,IAAI;;;;;;;;iEAQI,IAAI;;;;;;CAMpE,CAAC;AACF,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,WAAuC,EAAE;IACxE,MAAM,OAAO,GAAG,CAAC,oBAAoB,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/I,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChH,OAAO,GAAG,OAAO;;;;;;;;;;;SAWV,IAAI;;;;;;;;;mCASsB,QAAQ;;;;;;;;;;;;;;;;;;;;;;CAsB1C,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,OAAO;;;;4DAImD,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B/D,CAAC;AACF,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,OAAe,EAAE,WAAuC,EAAE;IAC3F,OAAO;QACL,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM;QACjC,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,OAAO,IAAI,qBAAqB,IAAI,mDAAmD;QACpG,OAAO,EAAE;YACP,KAAK,EAAE,mEAAmE;YAC1E,GAAG,EAAE,oEAAoE;YACzE,WAAW,EAAE,YAAY;YACzB,SAAS,EAAE,MAAM;YACjB,SAAS,EAAE,+BAA+B;SAC3C;QACD,YAAY,EAAE;YACZ,sBAAsB,EAAE,OAAO;YAC/B,qBAAqB,EAAE,OAAO;YAC9B,mBAAmB,EAAE,OAAO;YAC5B,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvF,KAAK,EAAE,SAAS;YAChB,kBAAkB,EAAE,SAAS;SAC9B;QACD,eAAe,EAAE;YACf,cAAc,EAAE,SAAS;YACzB,UAAU,EAAE,QAAQ;YACpB,IAAI,EAAE,QAAQ;SACf;KACF,CAAC;AACJ,CAAC;AAED,MAAM,QAAQ,GAAG;IACf,eAAe,EAAE;QACf,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,gBAAgB,EAAE,SAAS;QAC3B,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,cAAc,CAAC;QACtC,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,CAAC,aAAa,CAAC;QACtB,MAAM,EAAE,IAAI;QACZ,cAAc,EAAE,IAAI;QACpB,kBAAkB,EAAE,IAAI;QACxB,eAAe,EAAE,IAAI;QACrB,oBAAoB,EAAE,IAAI;QAC1B,YAAY,EAAE,IAAI;QAClB,MAAM,EAAE,IAAI;KACb;IACD,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC;CAC1C,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;CAUnB,CAAC;AAEF,MAAM,KAAK,GAAG;;;;;;CAMb,CAAC;AAEF,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;CAoBX,CAAC;AAEF,2HAA2H;AAC3H,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO;;;;;;;;;;;uDAW8C,IAAI;aAC9C,IAAI;;;;;;;;;;;;;;;;;;;;;oCAqBmB,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CvC,CAAC;AACF,CAAC;AAED,gJAAgJ;AAChJ,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAgCG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCf,CAAC;AACF,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAE/E,oEAAoE;AACpE,MAAM,MAAM,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAE5G,kHAAkH;AAClH,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAY;IAC1C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACtG,CAAC;AAED,SAAS,QAAQ,CAAC,KAAqC;IACrD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,OAAO,CACd,IAAY,EACZ,QAAgB,EAChB,WAAmB,EACnB,SAAiC,EACjC,eAA2D,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,EACjG,WAAuC,EAAE;IAEzC,MAAM,EAAE,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,8GAA8G;IAC9G,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,EAAE,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC;QAC3C,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,EAAE,CAAC,eAAe,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;QACtE,UAAU,EAAE,EAAE,CAAC,eAAe,GAAG,CAAC,OAAO,EAAE,CAAC;QAC5C,SAAS,EAAE,EAAE,CAAC,cAAc,GAAG,CAAC,OAAO,EAAE,CAAC;KAC3C,CAAC,CAAC,CAAC;IACJ,MAAM,KAAK,GAAG,CAAC,IAA4C,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrH,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC5B,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC5B,MAAM,aAAa,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,cAAc,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;IAEnC,MAAM,eAAe,GAAG,CAAC,KAAc,EAAU,EAAE,CACjD,QAAQ,CAAC;QACP,CAAC,0BAA0B,EAAE,IAAI,CAAC;QAClC,CAAC,8DAA8D,EAAE,KAAK,CAAC;QACvE,CAAC,wBAAwB,EAAE,KAAK,CAAC;QACjC,CAAC,6BAA6B,EAAE,WAAW,CAAC;QAC5C,CAAC,sBAAsB,EAAE,KAAK,CAAC;QAC/B,CAAC,uBAAuB,EAAE,KAAK,CAAC;QAChC,CAAC,wBAAwB,EAAE,KAAK,CAAC;QACjC,CAAC,mCAAmC,EAAE,KAAK,CAAC;QAC5C,CAAC,mCAAmC,EAAE,gBAAgB,CAAC;QACvD,CAAC,kBAAkB,EAAE,IAAI,CAAC;QAC1B,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;QACnE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,CAAC;QAClD,CAAC,4BAA4B,EAAE,KAAK,CAAC;QACrC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,CAAC,+BAA+B,EAAE,KAAK,CAAC;QACxC,CAAC,yBAAyB,EAAE,OAAO,CAAC;QACpC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,CAAC,sBAAsB,EAAE,KAAK,CAAC;QAC/B,GAAG,CAAC,KAAK;YACP,CAAC,CAAC;gBACE,CAAC,wBAAwB,EAAE,GAAG,CAAC;gBAC/B,CAAC,8BAA8B,EAAE,+DAA+D,CAAC;aAClG;YACH,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,4BAA4B,EAAE,WAAW,CAAC;QAC3C,CAAC,8BAA8B,EAAE,gBAAgB,CAAC;QAClD,CAAC,4BAA4B,EAAE,MAAM,CAAC;QACtC,CAAC,sCAAsC,EAAE,KAAK,CAAC;QAC/C,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1D,CAAC,eAAe,EAAE,KAAK,CAAC;QACxB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,CAAC,SAAS,EAAE,UAAU,CAAC;QACvB,GAAG,CAAC,KAAK;YACP,CAAC,CAAC;gBACE,CAAC,qCAAqC,EAAE,sBAAsB,CAAC;gBAC/D,CAAC,0BAA0B,EAAE,UAAU,CAAC;aACzC;YACH,CAAC,CAAC;gBACE,CAAC,wBAAwB,EAAE,aAAa,CAAC;gBACzC,CAAC,kBAAkB,EAAE,KAAK,CAAC;aAC5B,CAAC;KACP,CAAC,CAAC;IAEL,MAAM,cAAc,GAAG,QAAQ,CAAC;QAC9B,CAAC,oCAAoC,EAAE,SAAS,CAAC;QACjD,CAAC,gDAAgD,EAAE,aAAa,CAAC;QACjE,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,EAAE,OAAO,IAAI,eAAe,CAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClH,CAAC,iBAAiB,EAAE,WAAW,CAAC;QAChC,CAAC,yBAAyB,EAAE,GAAG,CAAC;QAChC,CAAC,iBAAiB,EAAE,KAAK,CAAC;QAC1B,CAAC,yBAAyB,EAAE,KAAK,CAAC;QAClC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,gBAAgB,CAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,CAAC,mCAAmC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;aACtB,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,GAAG,EAAoB,EAAE,CAAC,CAAC,iBAAiB,GAAG,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC;QACpF,CAAC,qDAAqD,EAAE,KAAK,CAAC;QAC9D,CAAC,wDAAwD,EAAE,KAAK,CAAC;QACjE,CAAC,yCAAyC,EAAE,KAAK,CAAC;QAClD,CAAC,qDAAqD,EAAE,oJAAoJ,CAAC;QAC7M,CAAC,uDAAuD,EAAE,2GAA2G,CAAC;QACtK,CAAC,yBAAyB,EAAE,mFAAmF,CAAC;QAChH,CAAC,mBAAmB,EAAE,KAAK,CAAC;QAC5B,CAAC,2BAA2B,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC,cAAc,EAAE,kBAAkB,CAAC;QACpC,CAAC,wBAAwB,EAAE,KAAK,CAAC;QACjC,CAAC,eAAe,EAAE,KAAK,CAAC;QACxB,CAAC,wBAAwB,EAAE,OAAO,CAAC;KACpC,CAAC,CAAC;IAEH,OAAO;;;;;;;;;IASL,SAAS,+EAA+E,UAAU,gCAAgC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,SAAS,OAAO,GAAG,CAAC,OAAO,yDAAyD,GAAG,CAAC,UAAU,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC;;;;IAI1R,GAAG,OAAO,IAAI,yGAAyG,IAAI;;;;IAI3H,MAAM;;;;;;;;IAQN,UAAU;;;;MAIR,SAAS,2CAA2C,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,GAAG,CAAC,SAAS,OAAO,GAAG,CAAC,OAAO,oBAAoB,CAAC;;;;;;;IAOpI,SAAS;;;MAGP,MAAM;MACN,QAAQ;;;;IAIV,QAAQ;;;MAGN,GAAG,OAAO,IAAI;;;;;;;;IAQhB,MAAM,OAAO,IAAI;;8BAES,aAAa,qDAAqD,IAAI;;MAE9F,OAAO;MACP,UAAU;MACV,SAAS;;;;;;;MAOT,MAAM;;YAEA,IAAI;;MAEV,UAAU,6BAA6B,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,GAAG,CAAC,UAAU,OAAO,GAAG,CAAC,OAAO,MAAM,CAAC;;mBAE3F,IAAI;wBACC,GAAG,OAAO,IAAI;;;;;;IAMlC,OAAO;;;;;;;OAOJ,MAAM;;;;;8BAKiB,cAAc,gDAAgD,IAAI;;;;;;;iBAO/E,SAAS;;;MAGpB,UAAU,qCAAqC,WAAW,QAAQ,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,GAAG,CAAC,UAAU,qCAAqC,GAAG,CAAC,IAAI,OAAO,CAAC;;;uBAG9I,QAAQ;;;;MAIzB,MAAM,OAAO,IAAI;;;;;;IAMnB,SAAS;;;;;;;;;;IAUT,OAAO;;;;;;;;;;IAUP,YAAY;;;EAGd,eAAe,CAAC,IAAI,CAAC;;;;IAInB,cAAc;;;EAGhB,eAAe,CAAC,KAAK,CAAC;;;;IAIpB,WAAW;;;EAGb,cAAc;;;;IAIZ,aAAa;;;EAGf,cAAc;;;;;;;IAOZ,cAAc,gDAAgD,IAAI;;;MAGhE,YAAY;MACZ,cAAc;;;;;IAKhB,aAAa,qDAAqD,IAAI;;;MAGpE,WAAW;MACX,aAAa;;;;;;;;IAQf,UAAU,qCAAqC,WAAW;;oBAE1C,MAAM,CAAC,WAAW,CAAC;MACjC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,UAAU,qCAAqC,GAAG,CAAC,IAAI,6EAA6E,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;;;;IAI5L,UAAU;;;MAGR,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,UAAU,OAAO,GAAG,CAAC,OAAO,8EAA8E,GAAG,CAAC,OAAO,WAAW,CAAC;;;gBAGjJ,OAAO;;CAEtB,CAAC;AACF,CAAC;AAED,mGAAmG;AACnG,SAAS,MAAM,CAAC,IAAY;IAC1B,MAAM,SAAS,GAAG;;wCAEoB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;kCAC9B,IAAI;kCACJ,IAAI;kDACY,IAAI;kCACpB,CAAC;IACjC,OAAO;;;;;;;;;;;;;;;cAeK,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;WAyBZ,SAAS;;;;;;;;;;;;;;;;;;WAkBT,SAAS;;;;;;;;;;;CAWnB,CAAC;AACF,CAAC;AAED,oHAAoH;AACpH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,eAAgE,EAAE,MAAM,EAAE,IAAI,EAAE;IAC7H,MAAM,SAAS,GAAG,UAAU,QAAQ,EAAE,CAAC;IACvC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,YAAY,CAAC,eAAe,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC;;;UAGP,CAAC,CAAC;IACV,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC;;YAEL,SAAS;;;;;;;;YAQT,SAAS;UACX,CAAC,CAAC;IACV,CAAC;IACD,OAAO;;;;EAIP,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;;CAGnB,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAgB;IAC1D,OAAO;;;;;;gBAMO,QAAQ;;;;;aAKX,IAAI;;;;;;;CAOhB,CAAC;AACF,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { TemplateFile } from './template.js';
2
+ /** The repository whose reusable workflows the callers use. */
3
+ export declare const WORKFLOWS_REPOSITORY = "noya-app/SwiftBrowser";
4
+ export interface NativeWorkflowOptions {
5
+ /** The app's name: its Xcode project and scheme. */
6
+ name: string;
7
+ bundleId: string;
8
+ /** The app's folder relative to the repository's root, `.` when it is the root. */
9
+ directory: string;
10
+ /** The Cloudflare Pages project; one made from the name by default. */
11
+ pagesProject?: string;
12
+ /** The SwiftBrowser release the workflows are pinned to; this package's by default. */
13
+ version?: string;
14
+ }
15
+ /** A Cloudflare Pages project name from an app name: `WeatherApp` → `weather-app`. */
16
+ export declare function pagesProjectName(name: string): string;
17
+ /** The two workflow files, relative to the repository's root. */
18
+ export declare function nativeWorkflowFiles(options: NativeWorkflowOptions): TemplateFile[];
@@ -0,0 +1,109 @@
1
+ // The GitHub Actions workflows of a new native app (`swiftbrowser native init
2
+ // --github`): two short callers of SwiftBrowser's reusable workflows, the
3
+ // web page (sb-web.yml) and the ad hoc iOS build (sb-ios-adhoc.yml), pinned
4
+ // to the release the app's @swiftbrowser packages are at, so the two move
5
+ // together. They go in the repository's .github/workflows, which may be
6
+ // above the app's folder (a monorepo), naming the app's folder.
7
+ import { readFileSync } from 'node:fs';
8
+ const VERSION = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version;
9
+ /** The repository whose reusable workflows the callers use. */
10
+ export const WORKFLOWS_REPOSITORY = 'noya-app/SwiftBrowser';
11
+ /** A Cloudflare Pages project name from an app name: `WeatherApp` → `weather-app`. */
12
+ export function pagesProjectName(name) {
13
+ return name
14
+ .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
15
+ .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')
16
+ .toLowerCase()
17
+ .replace(/[^a-z0-9-]+/g, '-')
18
+ .replace(/^-+|-+$/g, '')
19
+ .slice(0, 58);
20
+ }
21
+ /** The two workflow files, relative to the repository's root. */
22
+ export function nativeWorkflowFiles(options) {
23
+ const { name, bundleId } = options;
24
+ const directory = options.directory.replace(/\/+$/, '') || '.';
25
+ const project = options.pagesProject ?? pagesProjectName(name);
26
+ const version = options.version ?? VERSION;
27
+ const atRoot = directory === '.';
28
+ // In a monorepo, named for the app, and run only for what changes it.
29
+ const file = (kind) => `.github/workflows/${atRoot ? kind : `${pagesProjectName(name)}-${kind}`}.yml`;
30
+ const web = file('web');
31
+ const ios = file('ios');
32
+ const paths = (own) => (atRoot ? '' : `\n paths:\n - '${directory}/**'\n - ${own}`);
33
+ const uses = (workflow) => `${WORKFLOWS_REPOSITORY}/.github/workflows/${workflow}@v${version}`;
34
+ const directoryLine = atRoot ? '' : `\n directory: ${directory}`;
35
+ return [
36
+ {
37
+ path: web,
38
+ contents: `name: ${name} web
39
+
40
+ # ${name} as a web page on Cloudflare Pages: main deploys to
41
+ # https://${project}.pages.dev, a pull request to a preview whose address is
42
+ # commented on it. SwiftBrowser's reusable sb-web.yml does the work, at the
43
+ # release the app's @swiftbrowser packages are at: move the two together.
44
+ #
45
+ # Secrets: CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID (a token that can
46
+ # edit Cloudflare Pages); without them the page is built but not deployed.
47
+
48
+ on:
49
+ push:
50
+ branches: [main]${paths(web)}
51
+ pull_request:${paths(web)}
52
+ workflow_dispatch:
53
+
54
+ concurrency:
55
+ group: ${pagesProjectName(name)}-web-\${{ github.ref }}
56
+ cancel-in-progress: true
57
+
58
+ permissions:
59
+ contents: read
60
+ pull-requests: write
61
+
62
+ jobs:
63
+ web:
64
+ uses: ${uses('sb-web.yml')}
65
+ with:${directoryLine}
66
+ pages-project: ${project}
67
+ secrets: inherit
68
+ `,
69
+ },
70
+ {
71
+ path: ios,
72
+ contents: `name: ${name} iOS build
73
+
74
+ # ${name} as an ad hoc build that installs over the air, from
75
+ # https://ios.${project}.pages.dev, on the iPhones registered with the team:
76
+ # the profile is made fresh for each build with every registered device.
77
+ # SwiftBrowser's reusable sb-ios-adhoc.yml does the work, at the release the
78
+ # app's @swiftbrowser packages are at: move the two together. By hand only,
79
+ # as a macOS runner costs ten Linux minutes a minute; add a push trigger
80
+ # with the app's paths to build on every change.
81
+ #
82
+ # Secrets: APPLE_TEAM_ID, APPLE_DIST_P12_BASE64 and APPLE_DIST_P12_PASSWORD
83
+ # (an Apple Distribution certificate), ASC_KEY_ID, ASC_ISSUER_ID and
84
+ # ASC_KEY_P8 (an App Store Connect API key with the Admin or App Manager
85
+ # role), CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID.
86
+
87
+ on:
88
+ workflow_dispatch:
89
+
90
+ concurrency:
91
+ group: ${pagesProjectName(name)}-ios
92
+ cancel-in-progress: false
93
+
94
+ permissions:
95
+ contents: read
96
+
97
+ jobs:
98
+ ios:
99
+ uses: ${uses('sb-ios-adhoc.yml')}
100
+ with:
101
+ app: ${name}
102
+ bundle-id: ${bundleId}${directoryLine}
103
+ pages-project: ${project}
104
+ secrets: inherit
105
+ `,
106
+ },
107
+ ];
108
+ }
109
+ //# sourceMappingURL=nativeWorkflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeWorkflows.js","sourceRoot":"","sources":["../src/nativeWorkflows.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,0EAA0E;AAC1E,4EAA4E;AAC5E,0EAA0E;AAC1E,wEAAwE;AACxE,gEAAgE;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAyB,CAAC,OAAO,CAAC;AAEvI,+DAA+D;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAc5D,sFAAsF;AACtF,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI;SACR,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC;SACxC,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,mBAAmB,CAAC,OAA8B;IAChE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;IAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;IAC3C,MAAM,MAAM,GAAG,SAAS,KAAK,GAAG,CAAC;IACjC,sEAAsE;IACtE,MAAM,IAAI,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,qBAAqB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,MAAM,CAAC;IACtH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,KAAK,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,0BAA0B,SAAS,iBAAiB,GAAG,EAAE,CAAC,CAAC;IACjH,MAAM,IAAI,GAAG,CAAC,QAAgB,EAAU,EAAE,CAAC,GAAG,oBAAoB,sBAAsB,QAAQ,KAAK,OAAO,EAAE,CAAC;IAC/G,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sBAAsB,SAAS,EAAE,CAAC;IACtE,OAAO;QACL;YACE,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,SAAS,IAAI;;IAEzB,IAAI;YACI,OAAO;;;;;;;;;sBASG,KAAK,CAAC,GAAG,CAAC;iBACf,KAAK,CAAC,GAAG,CAAC;;;;WAIhB,gBAAgB,CAAC,IAAI,CAAC;;;;;;;;;YASrB,IAAI,CAAC,YAAY,CAAC;WACnB,aAAa;uBACD,OAAO;;CAE7B;SACI;QACD;YACE,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,SAAS,IAAI;;IAEzB,IAAI;gBACQ,OAAO;;;;;;;;;;;;;;;;WAgBZ,gBAAgB,CAAC,IAAI,CAAC;;;;;;;;YAQrB,IAAI,CAAC,kBAAkB,CAAC;;aAEvB,IAAI;mBACE,QAAQ,GAAG,aAAa;uBACpB,OAAO;;CAE7B;SACI;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swiftbrowser/cli",
3
- "version": "0.18.3",
3
+ "version": "0.21.0",
4
4
  "description": "Run an iOS SwiftUI app in the browser: init, doctor, check, dev and build for an Xcode project or a folder of Swift sources.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -22,12 +22,12 @@
22
22
  "build": "tsc -p tsconfig.build.json"
23
23
  },
24
24
  "dependencies": {
25
- "@swiftbrowser/kit": "0.18.3",
26
- "@swiftbrowser/native": "0.18.3",
27
- "@swiftbrowser/swift": "0.18.3",
28
- "@swiftbrowser/wasm-compiler": "0.18.3",
29
- "@swiftbrowser/web": "0.18.3",
30
- "@swiftbrowser/xcodeproj": "0.18.3"
25
+ "@swiftbrowser/kit": "0.21.0",
26
+ "@swiftbrowser/native": "0.21.0",
27
+ "@swiftbrowser/swift": "0.21.0",
28
+ "@swiftbrowser/wasm-compiler": "0.21.0",
29
+ "@swiftbrowser/web": "0.21.0",
30
+ "@swiftbrowser/xcodeproj": "0.21.0"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@types/node": "^26.6.4",