Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions packages/create-app/src/lib/__tests__/bin.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { PLATFORMS, PLUGINS } from '../templates.js';
test('formatConfig', () => {
expect(formatConfig(PLATFORMS, PLUGINS)).toMatchInlineSnapshot(`
"import { pluginPlatformIOS } from '@rnef/plugin-platform-ios';
import { pluginPlatformVisionOS } from '@rnef/plugin-platform-visionos';
import { pluginPlatformAndroid } from '@rnef/plugin-platform-android';
import { pluginMetro } from '@rnef/plugin-metro';
import { pluginRepack } from '@rnef/plugin-repack';
Expand All @@ -15,6 +16,7 @@ test('formatConfig', () => {
},
platforms: {
ios: pluginPlatformIOS(),
visionos: pluginPlatformVisionOS(),
android: pluginPlatformAndroid(),
},
};
Expand Down
8 changes: 8 additions & 0 deletions packages/create-app/src/lib/templates.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,14 @@ export const PLATFORMS: TemplateInfo[] = [
directory: 'template',
importName: 'pluginPlatformIOS',
},
{
type: 'npm',
name: 'visionos',
packageName: '@callstack/rnef-plugin-platform-visionos',
version: 'latest',
directory: 'template',
importName: 'pluginPlatformVisionOS',
},
{
type: 'npm',
name: 'android',
Expand Down
11 changes: 11 additions & 0 deletions packages/plugin-platform-visionos/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# plugin-platform-visionos

This library was generated with [Nx](https://nx.dev).

## Building

Run `nx build plugin-platform-visionos` to build the library.

## Running unit tests

Run `nx test plugin-platform-visionos` to execute the unit tests via [Vitest](https://vitest.dev/).
3 changes: 3 additions & 0 deletions packages/plugin-platform-visionos/eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import baseConfig from '../../eslint.config.js';

export default baseConfig;
27 changes: 27 additions & 0 deletions packages/plugin-platform-visionos/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"name": "@rnef/plugin-platform-visionos",
"version": "0.0.1",
"type": "module",
"exports": {
"types": "./dist/src/index.d.ts",
"import": "./dist/src/index.js"
},
"files": [
"dist",
"src",
"template",
"react-native.config.ts"
],
"scripts": {
"clean-dist": "rm -f dist/package.json",
"publish:verdaccio": "npm publish --registry http://localhost:4873 --userconfig ../../.npmrc"
},
"dependencies": {
"@react-native-community/cli-config-apple": "^16.0.2",
"tslib": "^2.3.0",
"@callstack/rnef-plugin-platform-apple": "^0.0.1"
},
"devDependencies": {
"@callstack/rnef-config": "^0.0.1"
}
}
18 changes: 18 additions & 0 deletions packages/plugin-platform-visionos/project.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "plugin-platform-visionos",
"$schema": "../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/plugin-platform-visionos/src",
"projectType": "library",
"tags": [],
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": ["{options.outputPath}"],
"options": {
"outputPath": "packages/plugin-platform-visionos/dist",
"main": "packages/plugin-platform-visionos/src/index.ts",
"tsConfig": "packages/plugin-platform-visionos/tsconfig.lib.json"
}
}
}
}
13 changes: 13 additions & 0 deletions packages/plugin-platform-visionos/react-native.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import {
getProjectConfig,
getDependencyConfig,
} from '@react-native-community/cli-config-apple';

export default {
platforms: {
visionos: {
projectConfig: getProjectConfig({ platformName: 'visionos' }),
dependencyConfig: getDependencyConfig({ platformName: 'visionos' }),
},
},
};
1 change: 1 addition & 0 deletions packages/plugin-platform-visionos/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './lib/pluginPlatformVisionOS.js';
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { test, expect } from 'vitest';

test('dummy test', () => {
expect(true).toBe(true);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import type { PluginOutput, PluginApi } from '@callstack/rnef-config';
import {
createBuild,
createRun,
getRunOptions,
getBuildOptions,
RunFlags,
BuildFlags,
} from '@callstack/rnef-plugin-platform-apple';
import { getProjectConfig } from '@react-native-community/cli-config-apple';

const projectConfig = getProjectConfig({ platformName: 'visionos' });
const buildOptions = getBuildOptions({ platformName: 'visionos' });
const runOptions = getRunOptions({ platformName: 'visionos' });

export const pluginPlatformVisionOS =
() =>
(api: PluginApi): PluginOutput => {
api.registerCommand({
name: 'build:visionos',
description: 'Build visionOS app.',
action: async (args) => {
const projectRoot = api.getProjectRoot();
const config = projectConfig(projectRoot, {});

if (config) {
await createBuild('visionos', config, args as BuildFlags);
} else {
throw new Error('visionOS project not found.');
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i see that we have v similar errors across codebase when we can't find config. we should find a nice way or do a writeup in docs how to proceed with such case

}
},
options: buildOptions,
});

api.registerCommand({
name: 'run:visionos',
description: 'Run visionOS app.',
action: async (args) => {
const projectRoot = api.getProjectRoot();
const config = projectConfig(projectRoot, {});

if (config) {
await createRun('visionos', config, args as RunFlags, projectRoot);
} else {
throw new Error('visionOS project not found.');
}
},
// @ts-expect-error: fix `simulator` is not defined in `RunFlags`
options: runOptions,
});

return {
name: 'plugin-platform-visionos',
description: 'RNEF plugin for everything visionOS.',
};
};

export default pluginPlatformVisionOS;
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
name: 'RNEF Remote Build - visionOS Simulator'
description: 'Github implementation of the RNEF Remote Build for visionOS Simulator'

inputs:
github-token:
description: "GitHub Token"
required: false
default: ${{ github.token }}
scheme:
description: The workspace scheme to build
required: false
default: "HelloWorld"
architectures:
description: The architectures to build for
required: false
default: "arm64 x86_64"

outputs:
artifact-url:
description: 'URL of the relevant visionOS Simulator build artifact (could be cached)'
value: ${{ steps.cached-url.outcome == 'success' && steps.cached-url.outputs.artifact-url || steps.upload-artifact.outputs.artifact-url }}

runs:
using: "composite"
steps:
- name: Native Fingerprint
id: fingerprint
uses: ./.github/actions/rnef-native-fingerprint
with:
platforms: visionos

- name: Set variables
run: |
echo "ARTIFACT_NAME=${{inputs.scheme}}-${{inputs.architectures}}-${{ steps.fingerprint.outputs.hash}}.tar.gz" >> $GITHUB_ENV
shell: bash

- name: Find artifact URL
id: cached-url
uses: ./.github/actions/find-artifact
with:
name: ${{ env.ARTIFACT_NAME }}

- name: Post Cached Build (if found)
if: steps.cached-url.outputs.artifact-url
uses: ./.github/actions/rnef-post-build
with:
platform: visionOS Simulator
artifact-url: ${{ steps.cached-url.outputs.artifact-url }}

- name: Install Pods
if: ${{ !steps.cached-url.outputs.artifact-url }}
run: |
cd visionos
pod install --verbose
shell: bash

- name: Build visionOS
if: ${{ !steps.cached-url.outputs.artifact-url }}
# Taken from: https://github.com/microsoft/rnx-kit/blob/ac1cfa362ace6172a020d2b4bcdd63c398527c17/incubator/build/scripts/build-apple.sh#L49
# @TODO replace with RNEF CLI call.
run: |
cd visionos
xcworkspace=$(find . -maxdepth 1 -name '*.xcworkspace' -type d | head -1)
xcodebuild \
-workspace "${xcworkspace}" \
-scheme "${{inputs.scheme}}" \
-destination "generic/platform=visionOS Simulator" \
-configuration Debug \
-derivedDataPath DerivedData \
ARCHS="${{inputs.architectures}}" \
CODE_SIGNING_ALLOWED=NO \
CLANG_ADDRESS_SANITIZER=NO \
CLANG_UNDEFINED_BEHAVIOR_SANITIZER=NO \
OTHER_CFLAGS='$(inherited) -fno-sanitize=undefined -fno-sanitize=bounds -fstack-protector-strong' \
OTHER_LDFLAGS='$(inherited) -fno-sanitize=undefined -fno-sanitize=bounds -fstack-protector-strong' \
COMPILER_INDEX_STORE_ENABLE=NO \
build
shell: bash

- name: Prepare Artifact
if: ${{ !steps.cached-url.outputs.artifact-url }}
run: |
app=$(find visionos/DerivedData/Build/Products/Debug-iphonesimulator -maxdepth 1 -name '*.app' -type d | head -1)
app_dir=$(dirname "${app}")
app_name=$(basename "${app}")
tar -C "${app_dir}" -czvf "${{ env.ARTIFACT_NAME }}" "${app_name}"
shell: bash

- name: Upload IPA
id: upload-artifact
if: ${{ !steps.cached-url.outputs.artifact-url }}
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME }}
path: ${{ env.ARTIFACT_NAME }}
if-no-files-found: error

- name: Post Build
if: ${{ !steps.cached-url.outputs.artifact-url }}
uses: ./.github/actions/rnef-post-build
with:
platform: visionOS Simulator
artifact-url: ${{ steps.upload-artifact.outputs.artifact-url }}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Remote Build visionOS Simulator

on:
push:
branches:
- main
pull_request:
branches:
- '**'

concurrency:
group: remote-build-visionos-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
runs-on: macos-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Install dependencies
run: npm install

- name: RNEF Remote Build - visionOS Simulator
uses: ./.github/actions/rnef-remote-build-visionos
with:
architectures: arm64
10 changes: 10 additions & 0 deletions packages/plugin-platform-visionos/template/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "rnef-plugin-platform-visionos-template",
"scripts": {
"visionos": "rnef run:visionos"
},
"devDependencies": {
"@callstack/rnef-plugin-platform-visionos": "^0.0.1",
"@callstack/react-native-visionos": "^0.77.0-rc.0"
}
}
Loading
Loading