Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2387fa9bd7 | ||
|
|
91b88cd443 | ||
|
|
a1f6fbc2ec | ||
|
|
fed9abc5b8 | ||
|
|
b368b0bfcb | ||
|
|
2fa8c2b809 | ||
|
|
be399fdb3b | ||
|
|
2927e09799 | ||
|
|
ec4f114b82 | ||
|
|
9a524549b7 | ||
|
|
4a3899c098 | ||
|
|
4eb10b7794 | ||
|
|
bc6856f7d3 | ||
|
|
fa4397d502 | ||
|
|
ace454934c | ||
|
|
581ce227c6 | ||
|
|
a619addd70 | ||
|
|
87797617d7 | ||
|
|
7fb7fb0acf | ||
|
|
90dfa7aa55 | ||
|
|
20e7914cad | ||
|
|
a8393fcfe8 | ||
|
|
c2cfc1e287 | ||
|
|
e650417b40 | ||
|
|
2e57a4fee8 | ||
|
|
93491ad59d | ||
|
|
b90eed0c0c | ||
|
|
1ccbdb4855 | ||
|
|
b20ef67eda | ||
|
|
9e43cce27f | ||
|
|
3740876bc7 | ||
|
|
55e55e598f | ||
|
|
f42cee7428 | ||
|
|
59b1997c34 | ||
|
|
bfb8838d5d | ||
|
|
006142cd7a | ||
|
|
79d464943b | ||
|
|
6f034e11f1 | ||
|
|
9b15ea96f6 | ||
|
|
d7626845d9 | ||
|
|
bf2154da14 | ||
|
|
0f41412dba | ||
|
|
841803b2d4 | ||
|
|
a6d6b1dff8 | ||
|
|
fee9e88c13 | ||
|
|
0cff8edfcd | ||
|
|
b4fe28fa00 | ||
|
|
72da275f24 | ||
|
|
b86291107e | ||
|
|
bce28777d1 | ||
|
|
bf0d5383ab | ||
|
|
4997e975ac | ||
|
|
ed020d236b | ||
|
|
92cae40eab | ||
|
|
f76b3eb281 | ||
|
|
0ec44e86e4 | ||
|
|
6d990ea663 | ||
|
|
9d96dfbd68 | ||
|
|
dca3987857 | ||
|
|
fc16d69ba6 | ||
|
|
bf11a17a81 | ||
|
|
b3c6210ffc | ||
|
|
d3df63fbb2 | ||
|
|
057c6bd978 | ||
|
|
3fbc237fd6 | ||
|
|
6603ab3215 | ||
|
|
9f49f02401 | ||
|
|
14dc560092 | ||
|
|
2dcaff6772 | ||
|
|
68190997b6 | ||
|
|
74f55fc342 | ||
|
|
e32378e8ed | ||
|
|
764a04710b | ||
|
|
837602af36 | ||
|
|
af22acc509 | ||
|
|
994fadc8dd |
No files matched your search
@@ -30,18 +30,17 @@ body:
|
||||
label: Config Plugin
|
||||
options:
|
||||
- '@config-plugins/android-jsc-intl'
|
||||
- '@config-plugins/apple-settings'
|
||||
- '@config-plugins/detox'
|
||||
- '@config-plugins/ffmpeg-kit-react-native'
|
||||
- '@config-plugins/ios-stickers'
|
||||
- '@config-plugins/react-native-adjust'
|
||||
- '@config-plugins/react-native-ble-plx'
|
||||
- '@config-plugins/react-native-blob-util'
|
||||
- '@config-plugins/react-native-branch'
|
||||
- '@config-plugins/react-native-callkeep'
|
||||
- '@config-plugins/react-native-dynamic-app-icon'
|
||||
- '@config-plugins/react-native-google-cast'
|
||||
- '@config-plugins/react-native-pdf'
|
||||
- '@config-plugins/react-native-quick-actions'
|
||||
- '@config-plugins/react-native-siri-shortcut'
|
||||
- '@config-plugins/react-native-webrtc'
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -11,13 +11,10 @@ contact_links:
|
||||
url: https://github.com/wix/Detox/issues
|
||||
- about: FFmpeg Kit for React Native
|
||||
name: 📦 ffmpeg-kit-react-native issues
|
||||
url: https://github.com/tanersener/ffmpeg-kit/issues
|
||||
url: https://github.com/arthenica/ffmpeg-kit/issues
|
||||
- about: Adjust React Native SDK
|
||||
name: 📦 react-native-adjust 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: >-
|
||||
A module provides upload, download, and files access API. Supports file
|
||||
stream read/write for process large files.
|
||||
@@ -29,16 +26,12 @@ contact_links:
|
||||
- about: Programmatically change the app icon in React Native.
|
||||
name: 📦 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
|
||||
name: 📦 react-native-pdf issues
|
||||
url: https://github.com/wonday/react-native-pdf/issues
|
||||
- about: A react-native interface for Touch 3D home screen quick actions
|
||||
name: 📦 react-native-quick-actions issues
|
||||
url: https://github.com/jordanbyron/react-native-quick-actions/issues
|
||||
- about: A React Native library that enables you to use iOS 12+ Siri Shortcuts.
|
||||
name: 📦 react-native-siri-shortcut issues
|
||||
url: https://github.com/Gustash/react-native-siri-shortcut/issues
|
||||
- about: WebRTC for React Native
|
||||
name: 📦 react-native-webrtc issues
|
||||
url: https://github.com/react-native-webrtc/react-native-webrtc/issues
|
||||
@@ -1,91 +0,0 @@
|
||||
# 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
|
||||
@@ -16,5 +16,5 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: npm install
|
||||
- run: yarn install --frozen-lockfile --check-files
|
||||
- run: npx remark --use validate-links . .github
|
||||
@@ -1,37 +0,0 @@
|
||||
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 }}
|
||||
@@ -10,7 +10,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
node: ["16", "17"]
|
||||
node: ["18"]
|
||||
name: Build with Node ${{ matrix.node }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
node-version: ${{ matrix.node }}
|
||||
- run: yarn install --frozen-lockfile --check-files
|
||||
- run: yarn lerna run prepare --stream
|
||||
- uses: actions/cache@v2
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: "*"
|
||||
key: v2-${{ github.sha }}-${{ matrix.node }}
|
||||
@@ -32,22 +32,20 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node: ["16", "17"]
|
||||
node: ["18"]
|
||||
package: [
|
||||
# Manually add packages here
|
||||
detox,
|
||||
ffmpeg-kit-react-native,
|
||||
ios-stickers,
|
||||
react-native-ble-plx,
|
||||
react-native-blob-util,
|
||||
react-native-branch,
|
||||
react-native-google-cast,
|
||||
react-native-siri-shortcut,
|
||||
react-native-pdf,
|
||||
# react-native-quick-actions,
|
||||
]
|
||||
name: Test ${{ matrix.package }} on Node ${{ matrix.node }}
|
||||
steps:
|
||||
- uses: actions/cache@v2
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: "*"
|
||||
key: v2-${{ github.sha }}-${{ matrix.node }}
|
||||
|
||||
@@ -62,4 +62,5 @@ packages/@*/*/build/**
|
||||
|
||||
apps/*/ios/*
|
||||
apps/*/android/*
|
||||
apps/*/web-build/*
|
||||
apps/*/web-build/*
|
||||
apps/*/dist/*
|
||||
@@ -1,62 +0,0 @@
|
||||
// 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",
|
||||
],
|
||||
};
|
||||
@@ -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/`.)
|
||||
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 tile.
|
||||
3. Use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) including in the PR title.
|
||||
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.
|
||||
6. Wait for a review and adjust the code if necessary.
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
# Expo Config Plugins
|
||||
|
||||
- A collection of [Expo config plugins](https://docs.expo.dev/guides/config-plugins/) for configuring the `expo prebuild` command.
|
||||
- A collection of [Expo config plugins](https://docs.expo.dev/guides/config-plugins/) for configuring the `npx expo prebuild` command.
|
||||
- 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.
|
||||
- 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.
|
||||
|
||||
## Awesome
|
||||
## First-party plugins
|
||||
|
||||
Here is a list of known packages that have a built-in Config Plugin.
|
||||
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](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)
|
||||
@@ -23,25 +24,45 @@ Here is a list of known packages that have a built-in Config Plugin.
|
||||
- [@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)
|
||||
- [@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`)
|
||||
- [@lyrahealth-inc/react-native-orientation-plugin](@lyrahealth-inc/react-native-orientation-plugin) (for use with `react-native-orientation-plugin`)
|
||||
- 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`)
|
||||
- [with-notifee](https://www.npmjs.com/package/with-notifee) (for use with [notifee](https://notifee.app/))
|
||||
- [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!
|
||||
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"12bb71342c6255bbf50437ec8f4441c083f47cdb74bd89160c15e4f43e52a1cb": true,
|
||||
"40b842e832070c58deac6aa9e08fa459302ee3f9da492c7e77d93d2fbf4a56fd": true
|
||||
}
|
||||
@@ -1,80 +1,2 @@
|
||||
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
|
||||
/artifacts
|
||||
@@ -1,3 +1,3 @@
|
||||
export { default } from './src/detox/App';
|
||||
// export { default } from './src/android-jsc-intl/App';
|
||||
// export { default } from './src/android-jsc-adjust/App';
|
||||
export { default } from "./src/detox/App";
|
||||
// export { default } from "./src/android-jsc-intl/App";
|
||||
// export { default } from "./src/react-native-adjust/App";
|
||||
@@ -1,66 +0,0 @@
|
||||
### @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
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"expo": {
|
||||
"name": "app",
|
||||
"name": "detoxapp",
|
||||
"slug": "app",
|
||||
"version": "1.0.0",
|
||||
"orientation": "portrait",
|
||||
"icon": "https://icogen.vercel.app/api/icon",
|
||||
"icon": "https://github.com/expo.png",
|
||||
"splash": {
|
||||
"image": "./assets/splash.png",
|
||||
"resizeMode": "contain",
|
||||
@@ -29,12 +29,11 @@
|
||||
"favicon": "./assets/favicon.png"
|
||||
},
|
||||
"plugins": [
|
||||
|
||||
"@config-plugins/detox",
|
||||
"@config-plugins/react-native-adjust",
|
||||
"@config-plugins/react-native-callkeep",
|
||||
"@config-plugins/react-native-blob-util",
|
||||
"@config-plugins/react-native-pdf",
|
||||
"@config-plugins/android-jsc-intl"
|
||||
"@config-plugins/android-jsc-intl",
|
||||
"expo-localization"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -1,13 +1,21 @@
|
||||
const iosName = "app";
|
||||
const emulator = "Pixel_3a_API_30";
|
||||
const simulator = "iPhone 13 Pro";
|
||||
const iosName = "detoxapp";
|
||||
const simulator = "iPhone 16";
|
||||
const derivedDataPath = "ios/build";
|
||||
const sdk = "iphonesimulator";
|
||||
|
||||
module.exports = {
|
||||
testRunner: "jest",
|
||||
runnerConfig: require.resolve("./e2e/jest.config.js"),
|
||||
specs: "e2e",
|
||||
testRunner: {
|
||||
$0: "jest",
|
||||
args: {
|
||||
config: require.resolve("./e2e/jest.config.js"),
|
||||
_: ["e2e"],
|
||||
},
|
||||
jest: {
|
||||
setupTimeout: 300000,
|
||||
reportSpecs: true,
|
||||
reportWorkerAssign: true,
|
||||
},
|
||||
},
|
||||
behavior: {
|
||||
init: {
|
||||
exposeGlobals: false,
|
||||
@@ -47,7 +55,7 @@ module.exports = {
|
||||
emulator: {
|
||||
type: "android.emulator",
|
||||
device: {
|
||||
avdName: emulator,
|
||||
avdName: "Pixel_6_Pro_API_33",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
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;
|
||||
@@ -1,11 +1,14 @@
|
||||
module.exports = {
|
||||
testEnvironment: require.resolve("./environment.js"),
|
||||
testRunner: require.resolve("jest-circus/runner"),
|
||||
testTimeout: 120000,
|
||||
testRegex: "/__tests__/.*(e2e)\\.[jt]sx?$",
|
||||
rootDir: "..",
|
||||
testMatch: ["<rootDir>/**/__tests__/*"],
|
||||
transform: {
|
||||
"^.+\\.[jt]sx?$": "ts-jest",
|
||||
},
|
||||
reporters: [require.resolve("detox/runners/jest/streamlineReporter")],
|
||||
reporters: [require.resolve("detox/runners/jest/reporter")],
|
||||
globalSetup: "detox/runners/jest/globalSetup",
|
||||
globalTeardown: "detox/runners/jest/globalTeardown",
|
||||
testEnvironment: "detox/runners/jest/testEnvironment",
|
||||
verbose: true,
|
||||
};
|
||||
|
Before Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 86 KiB |
@@ -1,6 +0,0 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -25,37 +25,28 @@
|
||||
"@config-plugins/detox": "*",
|
||||
"@config-plugins/react-native-adjust": "*",
|
||||
"@config-plugins/react-native-callkeep": "*",
|
||||
"expo": "^45.0.0",
|
||||
"detox": "^19.6.9",
|
||||
"expo-localization": "~13.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"expo-updates": "~0.13.1",
|
||||
"detox": "^20.37.0",
|
||||
"expo": "~53",
|
||||
"expo-localization": "~16.1.5",
|
||||
"expo-splash-screen": "~0.30.7",
|
||||
"fbjs": "^0.8.18",
|
||||
"i18n-js": "^3.8.0",
|
||||
"luxon": "^1.27.0",
|
||||
"react": "17.0.2",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"react-native-adjust": "^4.29.6",
|
||||
"react-native-callkeep": "^4.3.3",
|
||||
"react-native-safe-area-context": "4.2.4",
|
||||
"react-native-web": "0.17.7"
|
||||
"react": "19.0.0",
|
||||
"react-native": "0.79.2",
|
||||
"react-native-adjust": "^5.1.0",
|
||||
"react-native-callkeep": "^4.3.16",
|
||||
"react-native-safe-area-context": "5.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9",
|
||||
"@babel/plugin-syntax-jsx": "^7.16.0",
|
||||
"@expo/metro-config": "~0.3.7",
|
||||
"@expo/xcpretty": "^4.1.2",
|
||||
"@types/jest": "^26.0.19",
|
||||
"@types/jest": "^29.4.0",
|
||||
"@types/luxon": "^1.27.1",
|
||||
"@types/react": "~17.0.21",
|
||||
"@types/react-native": "~0.64.12",
|
||||
"babel-jest": "~25.2.6",
|
||||
"jest": "^26.6.3",
|
||||
"jest-circus": "^26.5.2",
|
||||
"ts-jest": "^26.4.4",
|
||||
"typescript": "~4.3.5"
|
||||
"babel-jest": "^29.5.0",
|
||||
"jest": "~29.7.0",
|
||||
"jest-circus": "^29.5.0",
|
||||
"ts-jest": "^29.0.5",
|
||||
"typescript": "~5.8.3"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -9,7 +9,7 @@ set -eu
|
||||
|
||||
iosName=$1
|
||||
# Debug or Release
|
||||
configuration=$2
|
||||
configuration=${3:-"Debug"}
|
||||
# YES or NO
|
||||
UseModernBuildSystem=${3:-"NO"}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ else
|
||||
commandFile=$(dirname "$0")/start.command
|
||||
cat > ${commandFile} << EOF
|
||||
cd "\$(dirname "\$0")/.."
|
||||
# Run 'react-native start --help' to get more parameters
|
||||
# Run 'npx expo start --help' to get more parameters
|
||||
yarn start --port ${port}
|
||||
EOF
|
||||
# execute the file in a new command line window
|
||||
|
||||
@@ -8,7 +8,7 @@ export default function App() {
|
||||
"APP_TOKEN",
|
||||
AdjustConfig.EnvironmentSandbox
|
||||
);
|
||||
Adjust.create(adjustConfig);
|
||||
Adjust.enable();
|
||||
}, []);
|
||||
|
||||
return (
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
const { createWebpackConfigAsync } = require("expo-yarn-workspaces/webpack");
|
||||
|
||||
module.exports = createWebpackConfigAsync;
|
||||
@@ -0,0 +1,123 @@
|
||||
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;
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"expo": {
|
||||
"name": "apple-settings",
|
||||
"icon": "https://github.com/expo.png",
|
||||
"platforms": ["ios"],
|
||||
"plugins": [["expo-build-properties", { "ios": { "ccacheEnabled": true } }]]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
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;
|
||||
@@ -0,0 +1,91 @@
|
||||
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} />;
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
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
|
||||
@@ -1,6 +1,10 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon",
|
||||
"name": "ffmpeg",
|
||||
"icon": "https://github.com/expo.png",
|
||||
"splash": {
|
||||
"image": "https://github.com/expo.png"
|
||||
},
|
||||
"plugins": [
|
||||
[
|
||||
"@config-plugins/ffmpeg-kit-react-native",
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -1,6 +0,0 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -9,17 +9,11 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/ffmpeg-kit-react-native": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.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"
|
||||
"expo": "~53",
|
||||
"expo-splash-screen": "~0.30.7",
|
||||
"ffmpeg-kit-react-native": "^6.0.2",
|
||||
"react": "19.0.0",
|
||||
"react-native": "0.79.2"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -1,41 +1,54 @@
|
||||
import { Session } from 'ffmpeg-kit-react-native';
|
||||
import React from 'react';
|
||||
import { ActivityIndicator, SafeAreaView, ScrollView, Text, View } from 'react-native';
|
||||
import { Session } from "ffmpeg-kit-react-native";
|
||||
import React from "react";
|
||||
import {
|
||||
ActivityIndicator,
|
||||
SafeAreaView,
|
||||
ScrollView,
|
||||
Text,
|
||||
View,
|
||||
} from "react-native";
|
||||
|
||||
import { useMediaInfo, useResolvedValue } from './useMediaInfo';
|
||||
import { useMediaInfo, useResolvedValue } from "./useMediaInfo";
|
||||
|
||||
export default function App() {
|
||||
const session = useMediaInfo('http://techslides.com/demos/sample-videos/small.mp4');
|
||||
const session = useMediaInfo(
|
||||
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4"
|
||||
);
|
||||
|
||||
if (!session) {
|
||||
return <View style={{
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
}}><ActivityIndicator /><Text>Loading...</Text></View>
|
||||
}
|
||||
|
||||
return <SessionInfo session={session} />
|
||||
if (!session) {
|
||||
return (
|
||||
<View
|
||||
style={{
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<ActivityIndicator />
|
||||
<Text>Loading...</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
return <SessionInfo session={session} />;
|
||||
}
|
||||
|
||||
function SessionInfo(props: { session: Session }) {
|
||||
const { session } = props;
|
||||
const duration = useResolvedValue(session.getDuration.bind(session));
|
||||
const output = useResolvedValue(session.getOutput.bind(session));
|
||||
return (
|
||||
<SafeAreaView
|
||||
style={{
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<ScrollView>
|
||||
<Text>Duration: {duration}</Text>
|
||||
<Text>Output: {output}</Text>
|
||||
</ScrollView>
|
||||
|
||||
</SafeAreaView>
|
||||
);
|
||||
}
|
||||
const { session } = props;
|
||||
const duration = useResolvedValue(session.getDuration.bind(session));
|
||||
const output = useResolvedValue(session.getOutput.bind(session));
|
||||
return (
|
||||
<SafeAreaView
|
||||
style={{
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<ScrollView>
|
||||
<Text>Duration: {duration}</Text>
|
||||
<Text>Output: {output}</Text>
|
||||
</ScrollView>
|
||||
</SafeAreaView>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"compilerOptions": {},
|
||||
"extends": "expo/tsconfig.base"
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
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
|
||||
@@ -1,11 +1,14 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon",
|
||||
"name": "stickers",
|
||||
"icon": "https://github.com/expo.png",
|
||||
"platforms": ["ios"],
|
||||
"plugins": [
|
||||
[
|
||||
"@config-plugins/ios-stickers",
|
||||
{
|
||||
"name": "Stickers",
|
||||
"stickerBundleId": "dev.bacon.iosstickers.stickers",
|
||||
"icon": "./assets/imessage-icon.png",
|
||||
"columns": 4,
|
||||
"stickers": [
|
||||
@@ -22,7 +25,8 @@
|
||||
"./assets/stickers/teapot.png"
|
||||
]
|
||||
}
|
||||
]
|
||||
],
|
||||
["expo-build-properties", { "ios": { "ccacheEnabled": true } }]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -1,6 +0,0 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -4,21 +4,16 @@
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client",
|
||||
"prebuild": "expo prebuild -p ios --template ./expo-template-bare-minimum-50.0.17.tgz",
|
||||
"ios": "expo run:ios",
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/ios-stickers": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.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"
|
||||
"expo": "~53",
|
||||
"expo-splash-screen": "~0.30.7",
|
||||
"react": "19.0.0",
|
||||
"react-native": "0.79.2"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
import React from "react";
|
||||
import { Text, View } from "react-native";
|
||||
|
||||
export default function App() {
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
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
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon?icon=1f9b7&color_hex=0000ff",
|
||||
"plugins": [
|
||||
"@config-plugins/react-native-ble-plx"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -1,6 +0,0 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -1,28 +0,0 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
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>
|
||||
)
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
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;
|
||||
@@ -1,80 +0,0 @@
|
||||
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
|
||||
@@ -1,6 +1,10 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon?icon=1f334",
|
||||
"name": "branch",
|
||||
"icon": "https://github.com/expo.png",
|
||||
"splash": {
|
||||
"image": "https://github.com/expo.png"
|
||||
},
|
||||
"ios": {
|
||||
"config": {
|
||||
"branch": {
|
||||
@@ -16,7 +20,8 @@
|
||||
}
|
||||
},
|
||||
"plugins": [
|
||||
"@config-plugins/react-native-branch"
|
||||
"@config-plugins/react-native-branch",
|
||||
["expo-build-properties", { "ios": { "ccacheEnabled": true } }]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -1,6 +0,0 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -9,17 +9,11 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/react-native-branch": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"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"
|
||||
"expo": "~53",
|
||||
"expo-splash-screen": "~0.30.7",
|
||||
"react": "19.0.0",
|
||||
"react-native": "0.79.2",
|
||||
"react-native-branch": "^6.6.0"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
import React from "react";
|
||||
import { Text, View } from "react-native";
|
||||
|
||||
export default function App() {
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
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
|
||||
@@ -1,6 +1,11 @@
|
||||
{
|
||||
"expo": {
|
||||
"name": "app-icon",
|
||||
"icon": "./assets/icons/winter.png",
|
||||
"platforms": ["ios"],
|
||||
"ios": {
|
||||
"supportsTablet": true
|
||||
},
|
||||
"plugins": [
|
||||
[
|
||||
"@config-plugins/react-native-dynamic-app-icon",
|
||||
@@ -11,7 +16,8 @@
|
||||
"./assets/icons/fall.png",
|
||||
"./assets/icons/solstice.png"
|
||||
]
|
||||
]
|
||||
],
|
||||
["expo-build-properties", { "ios": { "ccacheEnabled": true } }]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -1,6 +0,0 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -9,17 +9,11 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/react-native-dynamic-app-icon": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"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"
|
||||
"expo": "~53",
|
||||
"expo-splash-screen": "~0.30.7",
|
||||
"react": "19.0.0",
|
||||
"react-native": "0.79.2",
|
||||
"react-native-dynamic-app-icon": "^1.1.0"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"compilerOptions": {},
|
||||
"extends": "expo/tsconfig.base"
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
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
|
||||
@@ -1,16 +0,0 @@
|
||||
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;
|
||||
};
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon",
|
||||
"plugins": [
|
||||
"@config-plugins/react-native-google-cast"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -1,6 +0,0 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
@@ -1,86 +0,0 @@
|
||||
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>
|
||||
);
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
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
|
||||
@@ -1,9 +1,14 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon?icon=🎆",
|
||||
"name": "pdf",
|
||||
"icon": "https://github.com/expo.png",
|
||||
"splash": {
|
||||
"image": "https://github.com/expo.png"
|
||||
},
|
||||
"plugins": [
|
||||
"@config-plugins/react-native-blob-util",
|
||||
"@config-plugins/react-native-pdf"
|
||||
"@config-plugins/react-native-pdf",
|
||||
["expo-build-properties", { "ios": { "ccacheEnabled": true } }]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -1,6 +0,0 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -10,18 +10,12 @@
|
||||
"dependencies": {
|
||||
"@config-plugins/react-native-blob-util": "*",
|
||||
"@config-plugins/react-native-pdf": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"react-native-blob-util": "^0.16.0",
|
||||
"react-native-pdf": "^6.5.0",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9"
|
||||
"expo": "~53",
|
||||
"expo-splash-screen": "~0.30.7",
|
||||
"react": "19.0.0",
|
||||
"react-native": "0.79.2",
|
||||
"react-native-blob-util": "^0.21.2",
|
||||
"react-native-pdf": "^6.7.7"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -1,9 +1,8 @@
|
||||
import React from "react";
|
||||
import { SafeAreaView, StyleSheet, useWindowDimensions } from "react-native";
|
||||
import Pdf from "react-native-pdf";
|
||||
|
||||
const source = {
|
||||
uri: "https://samples.leanpub.com/thereactnativebook-sample.pdf",
|
||||
uri: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
|
||||
cache: true,
|
||||
};
|
||||
export default function App() {
|
||||
@@ -12,6 +11,7 @@ export default function App() {
|
||||
return (
|
||||
<SafeAreaView style={styles.container}>
|
||||
<Pdf
|
||||
trustAllCerts={false}
|
||||
source={source}
|
||||
onLoadComplete={(numberOfPages, filePath) => {
|
||||
console.log(`Number of pages: ${numberOfPages}`);
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
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
|
||||
@@ -1,16 +0,0 @@
|
||||
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;
|
||||
};
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon",
|
||||
"plugins": [
|
||||
[
|
||||
"@config-plugins/react-native-quick-actions",
|
||||
[
|
||||
{
|
||||
"title": "Take Photo",
|
||||
"type": "photo",
|
||||
"iconType": "UIApplicationShortcutIconTypeCapturePhoto"
|
||||
}
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||