Compare commits

..
Author SHA1 Message Date
evanbacon e57c2a75a2 Update app.json 2022-05-27 11:54:42 -05:00
evanbacon 92776140fe wip 2022-05-27 11:53:49 -05:00
385 changed files with 18329 additions and 12954 deletions

No files matched your search

+3 -2
View File
@@ -30,17 +30,18 @@ body:
label: Config Plugin label: Config Plugin
options: options:
- '@config-plugins/android-jsc-intl' - '@config-plugins/android-jsc-intl'
- '@config-plugins/apple-settings'
- '@config-plugins/detox' - '@config-plugins/detox'
- '@config-plugins/ffmpeg-kit-react-native' - '@config-plugins/ffmpeg-kit-react-native'
- '@config-plugins/ios-stickers' - '@config-plugins/ios-stickers'
- '@config-plugins/react-native-adjust' - '@config-plugins/react-native-adjust'
- '@config-plugins/react-native-ble-plx'
- '@config-plugins/react-native-blob-util' - '@config-plugins/react-native-blob-util'
- '@config-plugins/react-native-branch' - '@config-plugins/react-native-branch'
- '@config-plugins/react-native-callkeep' - '@config-plugins/react-native-callkeep'
- '@config-plugins/react-native-dynamic-app-icon' - '@config-plugins/react-native-dynamic-app-icon'
- '@config-plugins/react-native-google-cast'
- '@config-plugins/react-native-pdf' - '@config-plugins/react-native-pdf'
- '@config-plugins/react-native-siri-shortcut' - '@config-plugins/react-native-quick-actions'
- '@config-plugins/react-native-webrtc' - '@config-plugins/react-native-webrtc'
validations: validations:
required: true required: true
+11 -4
View File
@@ -11,10 +11,13 @@ contact_links:
url: https://github.com/wix/Detox/issues url: https://github.com/wix/Detox/issues
- about: FFmpeg Kit for React Native - about: FFmpeg Kit for React Native
name: 📦 ffmpeg-kit-react-native issues name: 📦 ffmpeg-kit-react-native issues
url: https://github.com/arthenica/ffmpeg-kit/issues url: https://github.com/tanersener/ffmpeg-kit/issues
- about: Adjust React Native SDK - about: Adjust React Native SDK
name: 📦 react-native-adjust issues name: 📦 react-native-adjust issues
url: https://github.com/adjust/react_native_sdk/issues url: https://github.com/adjust/react_native_sdk/issues
- about: React Native Bluetooth Low Energy library
name: 📦 react-native-ble-plx issues
url: https://github.com/Polidea/react-native-ble-plx/issues
- about: >- - about: >-
A module provides upload, download, and files access API. Supports file A module provides upload, download, and files access API. Supports file
stream read/write for process large files. stream read/write for process large files.
@@ -26,12 +29,16 @@ contact_links:
- about: Programmatically change the app icon in React Native. - about: Programmatically change the app icon in React Native.
name: 📦 react-native-dynamic-app-icon issues name: 📦 react-native-dynamic-app-icon issues
url: https://github.com/idearockers/react-native-dynamic-app-icon/issues url: https://github.com/idearockers/react-native-dynamic-app-icon/issues
- about: React Native wrapper for the Google Cast SDK for iOS and Android
name: 📦 react-native-google-cast issues
url: >-
https://github.com/react-native-google-cast/react-native-google-cast/issues
- about: A react native PDF view component, support ios and android platform - about: A react native PDF view component, support ios and android platform
name: 📦 react-native-pdf issues name: 📦 react-native-pdf issues
url: https://github.com/wonday/react-native-pdf/issues url: https://github.com/wonday/react-native-pdf/issues
- about: A React Native library that enables you to use iOS 12+ Siri Shortcuts. - about: A react-native interface for Touch 3D home screen quick actions
name: 📦 react-native-siri-shortcut issues name: 📦 react-native-quick-actions issues
url: https://github.com/Gustash/react-native-siri-shortcut/issues url: https://github.com/jordanbyron/react-native-quick-actions/issues
- about: WebRTC for React Native - about: WebRTC for React Native
name: 📦 react-native-webrtc issues name: 📦 react-native-webrtc issues
url: https://github.com/react-native-webrtc/react-native-webrtc/issues url: https://github.com/react-native-webrtc/react-native-webrtc/issues
+91
View File
@@ -0,0 +1,91 @@
# AUTO GENERATED:
# This file was generated by running the following in the root directory:
#
# yarn update-dependabot-config
version: 2
updates:
- package-ecosystem: npm
directory: packages/android-jsc-intl
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/detox
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/ffmpeg-kit-react-native
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/ios-stickers
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-adjust
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-ble-plx
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-blob-util
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-branch
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-callkeep
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-dynamic-app-icon
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-google-cast
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-pdf
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-quick-actions
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-webrtc
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
+1 -1
View File
@@ -16,5 +16,5 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- run: yarn install --frozen-lockfile --check-files - run: npm install
- run: npx remark --use validate-links . .github - run: npx remark --use validate-links . .github
+37
View File
@@ -0,0 +1,37 @@
name: Release
# https://github.com/bent10/monorepo-starter/blob/main/docs/recipes/release-automation.md
on:
push:
branches:
- main
jobs:
release:
name: Releasing
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- uses: actions/cache@v2
with:
path: "**/node_modules"
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
- run: yarn install --frozen-lockfile --check-files
- run: yarn lerna run prepare --stream
# If the dry run fails then it will prevent us from automatically breaking the repo.
- name: Semantic release (dry run)
run: npx multi-semantic-release --dry-run --ignore-private-packages
env:
GITHUB_TOKEN: ${{ github.token }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Semantic release
# use `--ignore-packages` to ignore packages on bumping process
# npx multi-semantic-release --ignore-packages=packages/a/**,packages/b/**
run: npx multi-semantic-release --ignore-private-packages
env:
GITHUB_TOKEN: ${{ github.token }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+7 -5
View File
@@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
node: ["18"] node: ["16", "17"]
name: Build with Node ${{ matrix.node }} name: Build with Node ${{ matrix.node }}
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@@ -22,7 +22,7 @@ jobs:
node-version: ${{ matrix.node }} node-version: ${{ matrix.node }}
- run: yarn install --frozen-lockfile --check-files - run: yarn install --frozen-lockfile --check-files
- run: yarn lerna run prepare --stream - run: yarn lerna run prepare --stream
- uses: actions/cache@v4 - uses: actions/cache@v2
with: with:
path: "*" path: "*"
key: v2-${{ github.sha }}-${{ matrix.node }} key: v2-${{ github.sha }}-${{ matrix.node }}
@@ -32,20 +32,22 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
node: ["18"] node: ["16", "17"]
package: [ package: [
# Manually add packages here # Manually add packages here
detox, detox,
ffmpeg-kit-react-native, ffmpeg-kit-react-native,
ios-stickers, ios-stickers,
react-native-ble-plx,
react-native-blob-util, react-native-blob-util,
react-native-branch, react-native-branch,
react-native-siri-shortcut, react-native-google-cast,
react-native-pdf, react-native-pdf,
# react-native-quick-actions,
] ]
name: Test ${{ matrix.package }} on Node ${{ matrix.node }} name: Test ${{ matrix.package }} on Node ${{ matrix.node }}
steps: steps:
- uses: actions/cache@v4 - uses: actions/cache@v2
with: with:
path: "*" path: "*"
key: v2-${{ github.sha }}-${{ matrix.node }} key: v2-${{ github.sha }}-${{ matrix.node }}
-1
View File
@@ -63,4 +63,3 @@ packages/@*/*/build/**
apps/*/ios/* apps/*/ios/*
apps/*/android/* apps/*/android/*
apps/*/web-build/* apps/*/web-build/*
apps/*/dist/*
+62
View File
@@ -0,0 +1,62 @@
// From @byCedric https://github.com/expo/expo-github-action/blob/main/.releaserc.js
const rules = [
{ type: "feat", release: "minor", title: "Features" },
{ type: "fix", release: "patch", title: "Bug Fixes" },
{ type: "test", release: "patch", title: "Tests" },
{ type: "ci", release: "patch", title: "Continuous Integration" },
{ type: "refactor", release: "patch", title: "Code Refactoring" },
{ type: "chore", release: "patch", title: "Other chores" },
{ type: "docs", release: "patch", title: "Documentation changes" },
];
// Simple mapping to order the commit groups
const sortMap = Object.fromEntries(
rules.map((rule, index) => [rule.title, index])
);
module.exports = {
branches: ["main"],
tagFormat: "${version}",
repositoryUrl: "https://github.com/expo/config-plugins.git",
plugins: [
[
"@semantic-release/commit-analyzer",
{
preset: "conventionalcommits",
releaseRules: [
{ breaking: true, release: "major" },
{ revert: true, release: "patch" },
].concat(
rules.map(({ type, release, breaking }) => ({
type,
release,
breaking,
}))
),
},
],
[
"@semantic-release/release-notes-generator",
{
preset: "conventionalcommits",
presetConfig: {
types: rules.map(({ type, title }) => ({ type, section: title })),
},
writerOpts: {
commitGroupsSort: (a, z) => sortMap[a.title] - sortMap[z.title],
},
},
],
"@semantic-release/changelog",
"@semantic-release/npm",
[
"@semantic-release/git",
{
message: "chore: ${nextRelease.version}\n\n${nextRelease.notes}",
assets: ["package.json", "CHANGELOG.md", "build/*"],
},
],
"@semantic-release/github",
],
};
+1 -1
View File
@@ -6,7 +6,7 @@ To submit a pull request:
1. Fork the [repository](https://github.com/expo/config-plugins) and create a feature branch. (Existing contributors can create feature branches without forking. Prefix the branch name with `@your-github-username/`.) 1. Fork the [repository](https://github.com/expo/config-plugins) and create a feature branch. (Existing contributors can create feature branches without forking. Prefix the branch name with `@your-github-username/`.)
2. Run `yarn` in the root directory to generate the build files. 2. Run `yarn` in the root directory to generate the build files.
3. Use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) including in the PR title. 3. Use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) including in the PR tile.
4. Fill out the entire PR template. Ensure your code is tested locally and has continuous tests in CI. 4. Fill out the entire PR template. Ensure your code is tested locally and has continuous tests in CI.
5. Make sure all tests pass on GitHub Actions. 5. Make sure all tests pass on GitHub Actions.
6. Wait for a review and adjust the code if necessary. 6. Wait for a review and adjust the code if necessary.
+1 -59
View File
@@ -1,69 +1,11 @@
# Expo Config Plugins # Expo Config Plugins
- A collection of [Expo config plugins](https://docs.expo.dev/guides/config-plugins/) for configuring the `npx expo prebuild` command. - A collection of [Expo config plugins](https://docs.expo.dev/guides/config-plugins/) for configuring the `expo prebuild` command.
- This repo is to Expo config plugins as [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped) is to TypeScript. - This repo is to Expo config plugins as [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped) is to TypeScript.
- We prefer packages ship their own Expo config plugin (to ensure versioning is aligned), but if they haven't adopted the system yet, the community can add a package here. - We prefer packages ship their own Expo config plugin (to ensure versioning is aligned), but if they haven't adopted the system yet, the community can add a package here.
- All packages here are community maintained. Feel free to improve docs, packages, tests, etc. - All packages here are community maintained. Feel free to improve docs, packages, tests, etc.
- We maintain a 1-1 mapping of **native packages** ⇔ `@config-plugins/*`. This means there should be no general utility packages here -- those are better suited for a different repo / NPM namespace. - We maintain a 1-1 mapping of **native packages** ⇔ `@config-plugins/*`. This means there should be no general utility packages here -- those are better suited for a different repo / NPM namespace.
## First-party plugins
Here is a list of known packages that have a built-in Config Plugin.
> Not all packages need a config plugin, packages that don't appear here might still work with managed EAS.
- [React Native Firebase](https://rnfirebase.io/) (`@react-native-firebase/perf`, `@react-native-firebase/app`, `@react-native-firebase/crashlytics`)
- [react-native-google-cast](https://github.com/react-native-google-cast/react-native-google-cast)
- [react-native-nfc-manager](https://github.com/revtel/react-native-nfc-manager)
- [react-native-health](https://github.com/agencyenterprise/react-native-health)
- [@react-native-mapbox-gl/maps](https://github.com/rnmapbox/maps)
- [@logrocket/react-native](https://www.npmjs.com/package/@logrocket/react-native)
- [sentry-expo](https://www.npmjs.com/package/sentry-expo)
- [@leanplum/react-native-sdk](https://github.com/Leanplum/Leanplum-ReactNative-SDK#readme)
- [react-native-fbsdk-next](https://www.npmjs.com/package/react-native-fbsdk-next)
- [@stripe/stripe-react-native](https://www.npmjs.com/package/@stripe/stripe-react-native)
- [@react-native-voice/voice](https://www.npmjs.com/package/@react-native-voice/voice)
- [react-native-imglysdk](https://www.npmjs.com/package/react-native-imglysdk)
- [@viro-community/react-viro](https://github.com/virocommunity/viro) -- [Guide](https://viro-community.readme.io/docs/integrating-with-expo)
- [react-native-msal](https://www.npmjs.com/package/react-native-msal)
- [react-native-spotlight-search](https://www.npmjs.com/package/react-native-spotlight-search)
- [newrelic-react-native-agent](https://www.npmjs.com/package/newrelic-react-native-agent)
- [react-native-videoeditorsdk](https://www.npmjs.com/package/react-native-videoeditorsdk)
- [notifee](https://notifee.app/)
- [App Clips](https://github.com/bndkt/react-native-app-clip/)
- [iOS Safari Extensions](https://github.com/andrew-levy/react-native-safari-extension/)
- [react-native-ble-plx](https://github.com/dotintent/react-native-ble-plx)
### Complementary
More out-of-tree plugins which can be used to configure more packages.
- [onesignal-expo-plugin](https://github.com/OneSignal/onesignal-expo-plugin) (for use with `react-native-onesignal`)
- Configures **iOS Notification Service Extensions** for rich push notification and custom notification actions.
- [@lyrahealth-inc/react-native-orientation-plugin](https://www.npmjs.com/package/@lyrahealth-inc/react-native-orientation-plugin) (for use with `react-native-orientation-plugin`)
- [airship-expo-plugin](https://www.npmjs.com/package/airship-expo-plugin) (for use with `urbanairship-react-native`)
- [config-plugin-react-native-intercom](https://www.npmjs.com/package/config-plugin-react-native-intercom) (for use with `intercom-react-native`)
- [@allboatsrise/expo-marketingcloudsdk](https://www.npmjs.com/package/@allboatsrise/expo-marketingcloudsdk) (for use with `react-native-marketingcloudsdk`)
- [@ouvio/react-native-background-location-plugin](https://www.npmjs.com/package/@ouvio/react-native-background-location-plugin) (for use with `react-native-background-location-plugin`)
- [expo-community-flipper](https://www.npmjs.com/package/expo-community-flipper) (for use with Flipper)
- [expo-appcenter](https://www.npmjs.com/package/expo-appcenter) (for use with `appcenter`)
- [expo-react-native-freshchat](https://www.npmjs.com/package/expo-react-native-freshchat) (for use with `react-native-freshchat-sdk`)
- [react-native-keyevent-expo-config-plugin](https://github.com/chronsyn/react-native-keyevent-expo-config-plugin) (for use with `react-native-keyevent`)
- [watermelondb-expo-plugin](https://github.com/morrowdigital/watermelondb-expo-plugin) (for use with `@nozbe/watermelondb`)
### No Plugin Required
Just install and rebuild! If a package doesn't require any futher setup then it most likely doesn't need an Expo config plugin. Most packages work without a config plugin (including packages not listed below):
- [react-native-share](https://github.com/react-native-share/react-native-share)
- [@react-native-menu/menu](https://github.com/react-native-menu/menu)
- [react-native-blurhash](https://github.com/mrousavy/react-native-blurhash)
- [react-native-app-shortcuts](https://github.com/lokyoung/react-native-app-shortcuts)
- [react-native-multiple-image-picker](https://github.com/baronha/react-native-multiple-image-picker)
- [`@shopify/flash-list`](https://github.com/Shopify/flash-list)
> Feel free to [open a PR](https://github.com/expo/config-plugins/edit/main/README.md) with missing packages.
## Contributing! ## Contributing!
See the [contributing guide](/CONTRIBUTING.md). See the [contributing guide](/CONTRIBUTING.md).
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Whitespace-only changes.
+8
View File
@@ -0,0 +1,8 @@
{
"expo": {
"icon": "https://icogen.vercel.app/api/icon?icon=1f334",
"plugins": [
"@config-plugins/airbridge-react-native-sdk"
]
}
}
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
File renamed without changes.
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
@@ -0,0 +1,25 @@
{
"name": "@config-plugins-app/airbridge-react-native-sdk",
"main": "./index.js",
"version": "1.0.0",
"scripts": {
"start": "expo start --dev-client",
"ios": "expo run:ios",
"android": "expo run:android"
},
"dependencies": {
"@config-plugins/airbridge-react-native-sdk": "*",
"expo": "^45.0.0",
"expo-splash-screen": "~0.15.1",
"react": "17.0.2",
"react-native": "0.68.2",
"airbridge-react-native-sdk": "^1.4.5",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9"
},
"private": true
}
@@ -1,9 +1,10 @@
import { View, Text } from "react-native"; import React from "react";
import { Text, View } from "react-native";
export default function App() { export default function App() {
return ( return (
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}> <View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
<Text>No-op on this platform</Text> <Text>airbridge-react-native-sdk</Text>
</View> </View>
); );
} }
+4
View File
@@ -0,0 +1,4 @@
{
"12bb71342c6255bbf50437ec8f4441c083f47cdb74bd89160c15e4f43e52a1cb": true,
"40b842e832070c58deac6aa9e08fa459302ee3f9da492c7e77d93d2fbf4a56fd": true
}
+79 -1
View File
@@ -1,2 +1,80 @@
/scripts/start.command node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts /artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
+3 -3
View File
@@ -1,3 +1,3 @@
export { default } from "./src/detox/App"; export { default } from './src/detox/App';
// export { default } from "./src/android-jsc-intl/App"; // export { default } from './src/android-jsc-intl/App';
// export { default } from "./src/react-native-adjust/App"; // export { default } from './src/android-jsc-adjust/App';
+66
View File
@@ -0,0 +1,66 @@
### @expo/app [1.0.1](https://github.com/expo/config-plugins/compare/@expo/[email protected]...@expo/[email protected]) (2022-03-15)
### Bug Fixes
* **ci:** use correct internal versions ([ab8076a](https://github.com/expo/config-plugins/commit/ab8076adf51e9ba0439eba60b153d729a0996b8d))
### Dependencies
* **@config-plugins/android-jsc-intl:** upgraded to 1.0.1
* **@config-plugins/detox:** upgraded to 1.0.1
* **@config-plugins/react-native-adjust:** upgraded to 1.0.0
* **@config-plugins/react-native-ble-plx:** upgraded to 1.0.0
* **@config-plugins/react-native-blob-util:** upgraded to 1.0.1
* **@config-plugins/react-native-branch:** upgraded to 1.0.0
* **@config-plugins/react-native-callkeep:** upgraded to 1.0.0
* **@config-plugins/react-native-dynamic-app-icon:** upgraded to 1.0.0
* **@config-plugins/react-native-google-cast:** upgraded to 1.0.0
* **@config-plugins/react-native-pdf:** upgraded to 1.0.0
* **@config-plugins/react-native-quick-actions:** upgraded to 1.0.0
* **@config-plugins/react-native-webrtc:** upgraded to 1.0.0
## @expo/app 1.0.0 (2022-03-15)
### Features
* create react-native-branch plugin ([0b06baa](https://github.com/expo/config-plugins/commit/0b06baa2b486c5e02d433a4ac785960934f403b9))
### Bug Fixes
* respect old config from expo-branch ([d0e0186](https://github.com/expo/config-plugins/commit/d0e018601c09c0e92191a4eb2998ab0e6fa1c6ec))
### Other chores
* added start-metro script ([4a7d707](https://github.com/expo/config-plugins/commit/4a7d707b200a3e499d9d71caf49ad4fc1d0a89e0))
* update script ([dcf61a9](https://github.com/expo/config-plugins/commit/dcf61a9b9542851095954d84c9054c97c5400dc9))
* upgrade to latest react-native-branch ([df98474](https://github.com/expo/config-plugins/commit/df98474d79ed139b42ddd698d13100160c656c26))
### Documentation changes
* add android-jsc-intl example ([d96c0b2](https://github.com/expo/config-plugins/commit/d96c0b2888da3808d7c4e2dd7993129711ba717d))
### Dependencies
* **@config-plugins/android-jsc-intl:** upgraded to 1.0.0
* **@config-plugins/detox:** upgraded to 1.0.0
* **@config-plugins/ffmpeg-kit-react-native:** upgraded to 1.0.0
* **@config-plugins/ios-stickers:** upgraded to 1.0.0
* **@config-plugins/react-native-adjust:** upgraded to 1.0.0
* **@config-plugins/react-native-ble-plx:** upgraded to 1.0.0
* **@config-plugins/react-native-blob-util:** upgraded to 1.0.0
* **@config-plugins/react-native-branch:** upgraded to 1.0.0
* **@config-plugins/react-native-callkeep:** upgraded to 1.0.0
* **@config-plugins/react-native-dynamic-app-icon:** upgraded to 1.0.0
* **@config-plugins/react-native-google-cast:** upgraded to 1.0.0
* **@config-plugins/react-native-pdf:** upgraded to 1.0.0
* **@config-plugins/react-native-quick-actions:** upgraded to 1.0.0
* **@config-plugins/react-native-webrtc:** upgraded to 1.0.0
+6 -5
View File
@@ -1,10 +1,10 @@
{ {
"expo": { "expo": {
"name": "detoxapp", "name": "app",
"slug": "app", "slug": "app",
"version": "1.0.0", "version": "1.0.0",
"orientation": "portrait", "orientation": "portrait",
"icon": "https://github.com/expo.png", "icon": "https://icogen.vercel.app/api/icon",
"splash": { "splash": {
"image": "./assets/splash.png", "image": "./assets/splash.png",
"resizeMode": "contain", "resizeMode": "contain",
@@ -29,11 +29,12 @@
"favicon": "./assets/favicon.png" "favicon": "./assets/favicon.png"
}, },
"plugins": [ "plugins": [
"@config-plugins/detox",
"@config-plugins/react-native-adjust", "@config-plugins/react-native-adjust",
"@config-plugins/react-native-callkeep", "@config-plugins/react-native-callkeep",
"@config-plugins/android-jsc-intl", "@config-plugins/react-native-blob-util",
"expo-localization" "@config-plugins/react-native-pdf",
"@config-plugins/android-jsc-intl"
] ]
} }
} }
+6
View File
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
+7 -15
View File
@@ -1,21 +1,13 @@
const iosName = "detoxapp"; const iosName = "app";
const simulator = "iPhone 16"; const emulator = "Pixel_3a_API_30";
const simulator = "iPhone 13 Pro";
const derivedDataPath = "ios/build"; const derivedDataPath = "ios/build";
const sdk = "iphonesimulator"; const sdk = "iphonesimulator";
module.exports = { module.exports = {
testRunner: { testRunner: "jest",
$0: "jest", runnerConfig: require.resolve("./e2e/jest.config.js"),
args: { specs: "e2e",
config: require.resolve("./e2e/jest.config.js"),
_: ["e2e"],
},
jest: {
setupTimeout: 300000,
reportSpecs: true,
reportWorkerAssign: true,
},
},
behavior: { behavior: {
init: { init: {
exposeGlobals: false, exposeGlobals: false,
@@ -55,7 +47,7 @@ module.exports = {
emulator: { emulator: {
type: "android.emulator", type: "android.emulator",
device: { device: {
avdName: "Pixel_6_Pro_API_33", avdName: emulator,
}, },
}, },
}, },
File renamed without changes.
+23
View File
@@ -0,0 +1,23 @@
const {
DetoxCircusEnvironment,
SpecReporter,
WorkerAssignReporter,
} = require("detox/runners/jest-circus");
class CustomDetoxEnvironment extends DetoxCircusEnvironment {
constructor(config, context) {
super(config, context);
// Can be safely removed, if you are content with the default value (=300000ms)
this.initTimeout = 300000;
// This takes care of generating status logs on a per-spec basis. By default, Jest only reports at file-level.
// This is strictly optional.
this.registerListeners({
SpecReporter,
WorkerAssignReporter,
});
}
}
module.exports = CustomDetoxEnvironment;
+3 -6
View File
@@ -1,14 +1,11 @@
module.exports = { module.exports = {
testEnvironment: require.resolve("./environment.js"),
testRunner: require.resolve("jest-circus/runner"), testRunner: require.resolve("jest-circus/runner"),
testTimeout: 120000, testTimeout: 120000,
rootDir: "..", testRegex: "/__tests__/.*(e2e)\\.[jt]sx?$",
testMatch: ["<rootDir>/**/__tests__/*"],
transform: { transform: {
"^.+\\.[jt]sx?$": "ts-jest", "^.+\\.[jt]sx?$": "ts-jest",
}, },
reporters: [require.resolve("detox/runners/jest/reporter")], reporters: [require.resolve("detox/runners/jest/streamlineReporter")],
globalSetup: "detox/runners/jest/globalSetup",
globalTeardown: "detox/runners/jest/globalTeardown",
testEnvironment: "detox/runners/jest/testEnvironment",
verbose: true, verbose: true,
}; };
Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

+6
View File
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
+24 -15
View File
@@ -25,28 +25,37 @@
"@config-plugins/detox": "*", "@config-plugins/detox": "*",
"@config-plugins/react-native-adjust": "*", "@config-plugins/react-native-adjust": "*",
"@config-plugins/react-native-callkeep": "*", "@config-plugins/react-native-callkeep": "*",
"detox": "^20.37.0", "expo": "^45.0.0",
"expo": "~53", "detox": "^19.6.9",
"expo-localization": "~16.1.5", "expo-localization": "~13.0.0",
"expo-splash-screen": "~0.30.7", "expo-splash-screen": "~0.15.1",
"expo-status-bar": "~1.3.0",
"expo-updates": "~0.13.1",
"fbjs": "^0.8.18", "fbjs": "^0.8.18",
"i18n-js": "^3.8.0", "i18n-js": "^3.8.0",
"luxon": "^1.27.0", "luxon": "^1.27.0",
"react": "19.0.0", "react": "17.0.2",
"react-native": "0.79.2", "react-dom": "17.0.2",
"react-native-adjust": "^5.1.0", "react-native": "0.68.2",
"react-native-callkeep": "^4.3.16", "react-native-adjust": "^4.29.6",
"react-native-safe-area-context": "5.3.0" "react-native-callkeep": "^4.3.3",
"react-native-safe-area-context": "4.2.4",
"react-native-web": "0.17.7"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.12.9",
"@babel/plugin-syntax-jsx": "^7.16.0", "@babel/plugin-syntax-jsx": "^7.16.0",
"@types/jest": "^29.4.0", "@expo/metro-config": "~0.3.7",
"@expo/xcpretty": "^4.1.2",
"@types/jest": "^26.0.19",
"@types/luxon": "^1.27.1", "@types/luxon": "^1.27.1",
"babel-jest": "^29.5.0", "@types/react": "~17.0.21",
"jest": "~29.7.0", "@types/react-native": "~0.64.12",
"jest-circus": "^29.5.0", "babel-jest": "~25.2.6",
"ts-jest": "^29.0.5", "jest": "^26.6.3",
"typescript": "~5.8.3" "jest-circus": "^26.5.2",
"ts-jest": "^26.4.4",
"typescript": "~4.3.5"
}, },
"private": true "private": true
} }
+1 -1
View File
@@ -9,7 +9,7 @@ set -eu
iosName=$1 iosName=$1
# Debug or Release # Debug or Release
configuration=${3:-"Debug"} configuration=$2
# YES or NO # YES or NO
UseModernBuildSystem=${3:-"NO"} UseModernBuildSystem=${3:-"NO"}
+1 -1
View File
@@ -16,7 +16,7 @@ else
commandFile=$(dirname "$0")/start.command commandFile=$(dirname "$0")/start.command
cat > ${commandFile} << EOF cat > ${commandFile} << EOF
cd "\$(dirname "\$0")/.." cd "\$(dirname "\$0")/.."
# Run 'npx expo start --help' to get more parameters # Run 'react-native start --help' to get more parameters
yarn start --port ${port} yarn start --port ${port}
EOF EOF
# execute the file in a new command line window # execute the file in a new command line window
+1 -1
View File
@@ -8,7 +8,7 @@ export default function App() {
"APP_TOKEN", "APP_TOKEN",
AdjustConfig.EnvironmentSandbox AdjustConfig.EnvironmentSandbox
); );
Adjust.enable(); Adjust.create(adjustConfig);
}, []); }, []);
return ( return (
+3
View File
@@ -0,0 +1,3 @@
const { createWebpackConfigAsync } = require("expo-yarn-workspaces/webpack");
module.exports = createWebpackConfigAsync;
-123
View File
@@ -1,123 +0,0 @@
import withAppleSettings, {
ChildPane,
Group,
RadioGroup,
Slider,
Switch,
TextField,
Title,
} from "@config-plugins/apple-settings";
import { MultiValue } from "@config-plugins/apple-settings/build/models";
import { ConfigContext, ExpoConfig } from "expo/config";
import path from "node:path";
const folderName = path.basename(__dirname);
const cleanName = folderName.replace(/[_\s-]/g, "");
const appId = "dev.bacon." + cleanName;
function withWhiteLabel(config: Partial<ExpoConfig>) {
if (!config.extra) config.extra = {};
// Expose CI env variables to the app
config.extra.CI = process.env.CI;
if (!config.ios) config.ios = {};
config.ios.bundleIdentifier = appId;
if (!config.android) config.android = {};
config.android.package = appId;
return config;
}
module.exports = ({ config }: ConfigContext): Partial<ExpoConfig> => {
config = withWhiteLabel(config);
config = withAppleSettings(config as ExpoConfig, {
// The name of the .plist file to generate. Root is the default and must be provided.
Root: {
// The locales object is optional. If provided, it will be used to generate the localized .strings files.
locales: {
// The Apple locale code. This will be used to generate the .strings file.
en: {
// Name of the localized key.
Name: "Text Field",
},
},
// The page object is required. It will be used to generate the .plist file.
// The contents will be converted directly to plist.
page: {
// The `PreferenceSpecifiers` defines the UI elements to generate.
PreferenceSpecifiers: [
Title({
title: "Title",
value: "Default Title",
key: "title_preference",
}),
// Helper models can be used to generate the UI elements using
// an API that's similar to React Native.
TextField({
title: "Name",
key: "name_preference",
value: "",
keyboardType: "Alphabet",
autoCapitalize: "None",
autoCorrect: "No",
}),
Switch({
title: "Enabled",
key: "enabled_preference",
value: true,
}),
Slider({
key: "slider_preference",
value: 0.5,
}),
// Broken https://forums.developer.apple.com/forums/thread/764519
// RadioGroup({
// value: "option1",
// key: "radio_preference",
// items: [
// {
// title: "Option 1",
// value: "option1",
// },
// {
// title: "Option 2",
// value: "option2",
// },
// ],
// }),
// MultiValue({
// title: "Multi Value",
// key: "multi_value_preference",
// value: "alpha",
// items: [
// {
// title: "Alpha",
// value: "alpha",
// short: "α",
// },
// {
// title: "Beta",
// value: "beta",
// short: "β",
// },
// {
// title: "Delta",
// value: "delta",
// short: "Δ",
// },
// {
// title: "Omega",
// value: "omega",
// short: "Ω",
// },
// ],
// }),
],
},
},
});
return config;
};
-8
View File
@@ -1,8 +0,0 @@
{
"expo": {
"name": "apple-settings",
"icon": "https://github.com/expo.png",
"platforms": ["ios"],
"plugins": [["expo-build-properties", { "ios": { "ccacheEnabled": true } }]]
}
}
-20
View File
@@ -1,20 +0,0 @@
{
"name": "@config-plugins-app/apple-settings",
"main": "./index.js",
"version": "1.0.0",
"scripts": {
"start": "expo start --dev-client",
"ios": "expo run:ios",
"android": "expo run:android"
},
"dependencies": {
"@config-plugins/apple-settings": "*",
"@react-native-community/slider": "4.5.6",
"@react-native-picker/picker": "2.11.0",
"expo": "~53",
"expo-splash-screen": "~0.30.7",
"react": "19.0.0",
"react-native": "0.79.2"
},
"private": true
}
-57
View File
@@ -1,57 +0,0 @@
import React from "react";
import { Button, Linking, StyleSheet, View } from "react-native";
import {
SettingsRadioGroup,
SettingsSlider,
SettingsSwitch,
SettingsTextInput,
SettingsTitle,
} from "./SettingsViews";
const App = () => {
return (
<View style={styles.container}>
{/* <SettingsTitle settingsKey="title_preference" /> */}
<SettingsTextInput
style={{
height: 40,
borderColor: "gray",
borderWidth: 1,
padding: 8,
}}
settingsKey="name_preference"
/>
<SettingsSwitch settingsKey="enabled_preference" />
<SettingsSlider settingsKey="slider_preference" />
<View />
<SettingsRadioGroup settingsKey="radio_preference">
<SettingsRadioGroup.Item label="Option 1" value="option1" />
<SettingsRadioGroup.Item label="Option 2" value="option2" />
</SettingsRadioGroup>
<View />
<Button
title="Launch Settings"
onPress={() => {
Linking.openSettings();
}}
/>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignItems: "stretch",
paddingHorizontal: 56,
gap: 12,
},
value: {
fontSize: 24,
marginVertical: 12,
},
});
export default App;
-91
View File
@@ -1,91 +0,0 @@
import Slider from "@react-native-community/slider";
import { Picker } from "@react-native-picker/picker";
import React from "react";
import { Settings, Switch, Text, TextInput } from "react-native";
export function useSetting<T = string>(key: string): [T, (value: T) => void] {
const [value, setValue] = React.useState<T>(() => Settings.get(key));
React.useEffect(() => {
let isMounted = true;
const callback = Settings.watchKeys(key, () => {
if (isMounted) {
setValue(Settings.get(key));
}
});
return () => {
Settings.clearWatch(callback);
isMounted = false;
};
}, [key]);
return [
value,
(value) => {
Settings.set({ [key]: value });
setValue(value);
},
];
}
export function SettingsSlider({
settingsKey,
...props
}: { settingsKey: string } & Omit<
React.ComponentProps<typeof Slider>,
"selectedValue" | "onValueChange"
>) {
const [value, setValue] = useSetting<number>(settingsKey);
return <Slider {...props} value={value ?? 0} onValueChange={setValue} />;
}
export function SettingsRadioGroup({
settingsKey,
...props
}: { settingsKey: string } & Omit<
React.ComponentProps<typeof Picker>,
"selectedValue" | "onValueChange"
>) {
const [value, setValue] = useSetting<string>(settingsKey);
return (
<Picker
{...props}
selectedValue={value ?? "option1"}
onValueChange={setValue}
/>
);
}
SettingsRadioGroup.Item = Picker.Item;
export function SettingsSwitch({
settingsKey,
...props
}: { settingsKey: string } & Omit<
React.ComponentProps<typeof Switch>,
"value" | "onValueChange"
>) {
const [value, setValue] = useSetting<boolean>(settingsKey);
return <Switch {...props} value={!!value} onValueChange={setValue} />;
}
export function SettingsTitle({
settingsKey,
...props
}: { settingsKey: string } & Omit<
React.ComponentProps<typeof Text>,
"children"
>) {
const [value] = useSetting<string>(settingsKey);
return <Text {...props} children={value} />;
}
export function SettingsTextInput({
settingsKey,
...props
}: { settingsKey: string } & Omit<
React.ComponentProps<typeof TextInput>,
"value" | "onChangeText"
>) {
const [value, setValue] = useSetting<string>(settingsKey);
return <TextInput {...props} value={value} onChangeText={setValue} />;
}
+80
View File
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Whitespace-only changes.
+1 -5
View File
@@ -1,10 +1,6 @@
{ {
"expo": { "expo": {
"name": "ffmpeg", "icon": "https://icogen.vercel.app/api/icon",
"icon": "https://github.com/expo.png",
"splash": {
"image": "https://github.com/expo.png"
},
"plugins": [ "plugins": [
[ [
"@config-plugins/ffmpeg-kit-react-native", "@config-plugins/ffmpeg-kit-react-native",
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
+11 -5
View File
@@ -9,11 +9,17 @@
}, },
"dependencies": { "dependencies": {
"@config-plugins/ffmpeg-kit-react-native": "*", "@config-plugins/ffmpeg-kit-react-native": "*",
"expo": "~53", "expo": "^45.0.0",
"expo-splash-screen": "~0.30.7", "expo-splash-screen": "~0.15.1",
"ffmpeg-kit-react-native": "^6.0.2", "react": "17.0.2",
"react": "19.0.0", "react-native": "0.68.2",
"react-native": "0.79.2" "ffmpeg-kit-react-native": "^4.5.1",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9"
}, },
"private": true "private": true
} }
+10 -23
View File
@@ -1,36 +1,22 @@
import { Session } from "ffmpeg-kit-react-native"; import { Session } from 'ffmpeg-kit-react-native';
import React from "react"; import React from 'react';
import { import { ActivityIndicator, SafeAreaView, ScrollView, Text, View } from 'react-native';
ActivityIndicator,
SafeAreaView,
ScrollView,
Text,
View,
} from "react-native";
import { useMediaInfo, useResolvedValue } from "./useMediaInfo"; import { useMediaInfo, useResolvedValue } from './useMediaInfo';
export default function App() { export default function App() {
const session = useMediaInfo( const session = useMediaInfo('http://techslides.com/demos/sample-videos/small.mp4');
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4"
);
if (!session) { if (!session) {
return ( return <View style={{
<View
style={{
flex: 1, flex: 1,
justifyContent: "center", justifyContent: "center",
alignItems: "center", alignItems: "center",
}} }}><ActivityIndicator /><Text>Loading...</Text></View>
>
<ActivityIndicator />
<Text>Loading...</Text>
</View>
);
} }
return <SessionInfo session={session} />; return <SessionInfo session={session} />
} }
function SessionInfo(props: { session: Session }) { function SessionInfo(props: { session: Session }) {
@@ -49,6 +35,7 @@ function SessionInfo(props: { session: Session }) {
<Text>Duration: {duration}</Text> <Text>Duration: {duration}</Text>
<Text>Output: {output}</Text> <Text>Output: {output}</Text>
</ScrollView> </ScrollView>
</SafeAreaView> </SafeAreaView>
); );
} }
@@ -1,4 +0,0 @@
{
"compilerOptions": {},
"extends": "expo/tsconfig.base"
}
+80
View File
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
View File
Whitespace-only changes.
+2 -6
View File
@@ -1,14 +1,11 @@
{ {
"expo": { "expo": {
"name": "stickers", "icon": "https://icogen.vercel.app/api/icon",
"icon": "https://github.com/expo.png",
"platforms": ["ios"],
"plugins": [ "plugins": [
[ [
"@config-plugins/ios-stickers", "@config-plugins/ios-stickers",
{ {
"name": "Stickers", "name": "Stickers",
"stickerBundleId": "dev.bacon.iosstickers.stickers",
"icon": "./assets/imessage-icon.png", "icon": "./assets/imessage-icon.png",
"columns": 4, "columns": 4,
"stickers": [ "stickers": [
@@ -25,8 +22,7 @@
"./assets/stickers/teapot.png" "./assets/stickers/teapot.png"
] ]
} }
], ]
["expo-build-properties", { "ios": { "ccacheEnabled": true } }]
] ]
} }
} }
+6
View File
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
+6
View File
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
+10 -5
View File
@@ -4,16 +4,21 @@
"version": "1.0.0", "version": "1.0.0",
"scripts": { "scripts": {
"start": "expo start --dev-client", "start": "expo start --dev-client",
"prebuild": "expo prebuild -p ios --template ./expo-template-bare-minimum-50.0.17.tgz",
"ios": "expo run:ios", "ios": "expo run:ios",
"android": "expo run:android" "android": "expo run:android"
}, },
"dependencies": { "dependencies": {
"@config-plugins/ios-stickers": "*", "@config-plugins/ios-stickers": "*",
"expo": "~53", "expo": "^45.0.0",
"expo-splash-screen": "~0.30.7", "expo-splash-screen": "~0.15.1",
"react": "19.0.0", "react": "17.0.2",
"react-native": "0.79.2" "react-native": "0.68.2",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9"
}, },
"private": true "private": true
} }
+1
View File
@@ -1,3 +1,4 @@
import React from "react";
import { Text, View } from "react-native"; import { Text, View } from "react-native";
export default function App() { export default function App() {
+80
View File
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Whitespace-only changes.
+16
View File
@@ -0,0 +1,16 @@
const path = require("path");
const folderName = path.basename(__dirname);
const cleanName = folderName.replace(/[_\s-]/g, "");
const appId = "dev.bacon." + cleanName;
module.exports = ({ config }) => {
if (!config.extra) config.extra = {};
// Expose CI env variables to the app
config.extra.CI = process.env.CI;
if (!config.ios) config.ios = {};
config.ios.bundleIdentifier = appId;
if (!config.android) config.android = {};
config.android.package = appId;
return config;
};
+8
View File
@@ -0,0 +1,8 @@
{
"expo": {
"icon": "https://icogen.vercel.app/api/icon?icon=1f9b7&color_hex=0000ff",
"plugins": [
"@config-plugins/react-native-ble-plx"
]
}
}
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
File renamed without changes.
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
+28
View File
@@ -0,0 +1,28 @@
{
"name": "@config-plugins-app/react-native-ble-plx",
"main": "./index.js",
"version": "1.0.0",
"scripts": {
"start": "expo start --dev-client",
"ios": "expo run:ios",
"android": "expo run:android"
},
"dependencies": {
"@config-plugins/react-native-ble-plx": "*",
"expo": "^45.0.0",
"expo-splash-screen": "~0.15.1",
"react": "17.0.2",
"react-native": "0.68.2",
"react-native-ble-plx": "^2.0.3",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9",
"@types/react": "~17.0.21",
"@types/react-native": "~0.64.12",
"typescript": "~4.3.5"
},
"private": true
}
+32
View File
@@ -0,0 +1,32 @@
import React from 'react';
import { Text, View } from 'react-native';
import useBluetoothDevices, { useManager, useManagerState } from './useBluetoothDevices';
export default function App() {
const bleManager = useManager();
const state = useManagerState(bleManager);
console.log('Info:', state);
return (
<View style={{flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: 'blue'}}>
<Text style={{fontSize: 18, color: 'white'}}>State: {state}</Text>
{state === 'PoweredOn' && <DeviceScanner bleManager={bleManager} />}
</View>
);
}
function DeviceScanner({ bleManager }) {
const [devices] = useBluetoothDevices(bleManager);
React.useEffect(() => {
console.log(devices);
}, [devices]);
return (
<View>
{devices.filter(({name}) => name).map((device, index) => (<Text key={`-${index}`} style={{fontSize: 14, color: 'white'}}>{device.name}</Text>))}
</View>
)
}
@@ -0,0 +1,70 @@
import { useEffect, useMemo, useRef, useState } from "react";
import { BleManager, State, Device } from "react-native-ble-plx";
import { uniqBy } from "lodash";
export function useManager() {
return useMemo(() => new BleManager(), []);
}
export function useManagerState(bleManager: BleManager): State | null {
const [state, setState] = useState<State | null>(null);
const isMounted = useMounted();
useEffect(() => {
if (!bleManager) return;
bleManager.onStateChange((state) => {
if (isMounted.current) {
setState(state);
}
}, true);
}, [bleManager]);
return state;
}
function useMounted() {
const isMounted = useRef(true);
useEffect(() => {
isMounted.current = true;
return () => {
isMounted.current = false;
};
}, []);
return isMounted;
}
export function useBluetoothDevices(
bleManager: BleManager
): [Device[], null | string] {
const isMoutned = useMounted();
const [error, setError] = useState<string | null>(null);
const [devices, setDevices] = useState<Device[]>([]);
useEffect(() => {
bleManager.startDeviceScan(
[],
{ allowDuplicates: false },
(e, scannedDevice) => {
if (!isMoutned.current) return;
if (e) {
setError(e.message);
}
if (!scannedDevice) return;
setDevices((oldDevices) =>
uniqBy([...oldDevices, scannedDevice], "id")
);
}
);
return () => {
bleManager.stopDeviceScan();
};
}, [bleManager]);
return [devices, error];
}
export default useBluetoothDevices;
File renamed without changes.
+80
View File
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Whitespace-only changes.
+2 -7
View File
@@ -1,10 +1,6 @@
{ {
"expo": { "expo": {
"name": "branch", "icon": "https://icogen.vercel.app/api/icon?icon=1f334",
"icon": "https://github.com/expo.png",
"splash": {
"image": "https://github.com/expo.png"
},
"ios": { "ios": {
"config": { "config": {
"branch": { "branch": {
@@ -20,8 +16,7 @@
} }
}, },
"plugins": [ "plugins": [
"@config-plugins/react-native-branch", "@config-plugins/react-native-branch"
["expo-build-properties", { "ios": { "ccacheEnabled": true } }]
] ]
} }
} }
+6
View File
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
+6
View File
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
+11 -5
View File
@@ -9,11 +9,17 @@
}, },
"dependencies": { "dependencies": {
"@config-plugins/react-native-branch": "*", "@config-plugins/react-native-branch": "*",
"expo": "~53", "expo": "^45.0.0",
"expo-splash-screen": "~0.30.7", "expo-splash-screen": "~0.15.1",
"react": "19.0.0", "react": "17.0.2",
"react-native": "0.79.2", "react-native": "0.68.2",
"react-native-branch": "^6.6.0" "react-native-branch": "^5.4.0",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9"
}, },
"private": true "private": true
} }
+1
View File
@@ -1,3 +1,4 @@
import React from "react";
import { Text, View } from "react-native"; import { Text, View } from "react-native";
export default function App() { export default function App() {
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Whitespace-only changes.
+1 -7
View File
@@ -1,11 +1,6 @@
{ {
"expo": { "expo": {
"name": "app-icon",
"icon": "./assets/icons/winter.png", "icon": "./assets/icons/winter.png",
"platforms": ["ios"],
"ios": {
"supportsTablet": true
},
"plugins": [ "plugins": [
[ [
"@config-plugins/react-native-dynamic-app-icon", "@config-plugins/react-native-dynamic-app-icon",
@@ -16,8 +11,7 @@
"./assets/icons/fall.png", "./assets/icons/fall.png",
"./assets/icons/solstice.png" "./assets/icons/solstice.png"
] ]
], ]
["expo-build-properties", { "ios": { "ccacheEnabled": true } }]
] ]
} }
} }
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
@@ -9,11 +9,17 @@
}, },
"dependencies": { "dependencies": {
"@config-plugins/react-native-dynamic-app-icon": "*", "@config-plugins/react-native-dynamic-app-icon": "*",
"expo": "~53", "expo": "^45.0.0",
"expo-splash-screen": "~0.30.7", "expo-splash-screen": "~0.15.1",
"react": "19.0.0", "react": "17.0.2",
"react-native": "0.79.2", "react-native": "0.68.2",
"react-native-dynamic-app-icon": "^1.1.0" "react-native-dynamic-app-icon": "^1.1.0",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9"
}, },
"private": true "private": true
} }
@@ -1,4 +0,0 @@
{
"compilerOptions": {},
"extends": "expo/tsconfig.base"
}
+80
View File
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Whitespace-only changes.
@@ -0,0 +1,16 @@
const path = require("path");
const folderName = path.basename(__dirname);
const cleanName = folderName.replace(/[_\s-]/g, "");
const appId = "dev.bacon." + cleanName;
module.exports = ({ config }) => {
if (!config.extra) config.extra = {};
// Expose CI env variables to the app
config.extra.CI = process.env.CI;
if (!config.ios) config.ios = {};
config.ios.bundleIdentifier = appId;
if (!config.android) config.android = {};
config.android.package = appId;
return config;
};
+8
View File
@@ -0,0 +1,8 @@
{
"expo": {
"icon": "https://icogen.vercel.app/api/icon",
"plugins": [
"@config-plugins/react-native-google-cast"
]
}
}
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
+5
View File
@@ -0,0 +1,5 @@
import { registerRootComponent } from "expo";
import App from "./src/App";
registerRootComponent(App);
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
@@ -0,0 +1,25 @@
{
"name": "@config-plugins-app/react-native-google-cast",
"main": "./index.js",
"version": "1.0.0",
"scripts": {
"start": "expo start --dev-client",
"ios": "expo run:ios",
"android": "expo run:android"
},
"dependencies": {
"@config-plugins/react-native-google-cast": "*",
"expo": "^45.0.0",
"expo-splash-screen": "~0.15.1",
"react": "17.0.2",
"react-native": "0.68.2",
"react-native-google-cast": "^4.1.2",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9"
},
"private": true
}
+86
View File
@@ -0,0 +1,86 @@
import React from "react";
import { View, Text, Button } from "react-native";
import GoogleCast, {
CastState,
CastButton,
useCastState,
useRemoteMediaClient,
} from "react-native-google-cast";
export default function HomeScreen() {
const castState = useCastState();
const client = useRemoteMediaClient();
GoogleCast.showIntroductoryOverlay();
const isConnected = castState === CastState.CONNECTED;
function cast() {
client
.loadMedia({
mediaInfo: {
contentUrl:
"https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/mp4/BigBuckBunny.mp4",
contentType: "video/mp4",
metadata: {
images: [
{
url: "https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/images/480x270/BigBuckBunny.jpg",
},
],
title: "Big Buck Bunny",
subtitle:
"A large and lovable rabbit deals with three tiny bullies, led by a flying squirrel, who are determined to squelch his happiness.",
studio: "Blender Foundation",
type: "movie",
},
streamDuration: 596, // seconds
},
startTime: 10, // seconds
})
.then(console.log)
.catch(console.warn);
}
return (
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
<Text>State: {castState}</Text>
<CastButton style={{ width: 24, height: 24 }} />
<Button
title="Overlay"
onPress={() => {
GoogleCast.showIntroductoryOverlay();
}}
/>
<Button
title="Expanded Controls"
onPress={() => {
GoogleCast.showExpandedControls();
}}
/>
<Button
title="Cast"
disabled={!isConnected}
onPress={() => {
cast();
}}
/>
<Button
title="Pause"
disabled={!isConnected}
onPress={() => {
// cast()
client.pause();
}}
/>
<Button
title="Disconnect"
disabled={!isConnected}
onPress={() => {
GoogleCast.sessionManager.endCurrentSession(true);
}}
/>
</View>
);
}
+80
View File
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Loaded 100 of 385 files, more files were not shown because too many files have changed in this diff. Show more