Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6c898afd0e | ||
|
|
b55b04d5fd | ||
|
|
0c7b413a76 | ||
|
|
731c5b07b4 | ||
|
|
96c72dda46 | ||
|
|
29ee948c98 | ||
|
|
2fc8f5a3bc | ||
|
|
7a570fb05a | ||
|
|
aed09045d6 | ||
|
|
ad810c8b11 | ||
|
|
e445cb4bc8 | ||
|
|
9b22a71343 | ||
|
|
e49a241243 | ||
|
|
2e06dcae54 | ||
|
|
a24ea1df58 | ||
|
|
50646306c5 | ||
|
|
6fbb2192ad | ||
|
|
7c3cda4f79 | ||
|
|
a78e569f54 | ||
|
|
3fee1c0e6e | ||
|
|
31aee40ee3 | ||
|
|
21c49280d4 | ||
|
|
ce1a818564 | ||
|
|
241d378a54 | ||
|
|
d1bf616248 | ||
|
|
a99c60efd5 | ||
|
|
331ecb163f | ||
|
|
1003ddb2ec | ||
|
|
5ca4e44a49 | ||
|
|
4103b4eb7d | ||
|
|
f8023bf04c | ||
|
|
1b3e87f930 | ||
|
|
5e3ed6d5e4 | ||
|
|
f46f340623 | ||
|
|
99f18da4ed | ||
|
|
999cc00275 | ||
|
|
363d36b0bb | ||
|
|
37d11f1867 | ||
|
|
7ecaaf5bd9 | ||
|
|
9ff7299176 | ||
|
|
f1bd9a7e27 | ||
|
|
83b52a3b61 | ||
|
|
16dfad4dc8 | ||
|
|
0f6493e28d | ||
|
|
0d55f9c8c9 | ||
|
|
fa85f7cf36 | ||
|
|
28997c1062 | ||
|
|
d6050beb2a | ||
|
|
5f4e90059e | ||
|
|
c3a375b292 | ||
|
|
1648e8598b | ||
|
|
e2d2b27494 | ||
|
|
ff8b167764 | ||
|
|
eee366bebc | ||
|
|
72fa3e14ef | ||
|
|
6324eb041b | ||
|
|
480ec19161 | ||
|
|
39a9e63fe9 | ||
|
|
7ffc38a808 | ||
|
|
97dcf1aca6 | ||
|
|
4dcc613a70 | ||
|
|
b07ab9e848 | ||
|
|
7411365343 |
No files matched your search
@@ -0,0 +1 @@
|
|||||||
|
/* @EvanBacon
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
name: "\U0001F41B Expo Config Plugin Bug Report"
|
name: 🐛 Expo Config Plugin Bug Report
|
||||||
description: Report a reproducible bug with one of the Expo Config Plugins.
|
description: Report a reproducible bug with one of the Expo Config Plugins.
|
||||||
labels: bug
|
labels: bug
|
||||||
body:
|
body:
|
||||||
@@ -36,6 +36,7 @@ body:
|
|||||||
- '@config-plugins/react-native-adjust'
|
- '@config-plugins/react-native-adjust'
|
||||||
- '@config-plugins/react-native-ble-plx'
|
- '@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-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-google-cast'
|
||||||
|
|||||||
@@ -1,44 +1,44 @@
|
|||||||
---
|
---
|
||||||
blank_issues_enabled: false
|
blank_issues_enabled: false
|
||||||
contact_links:
|
contact_links:
|
||||||
- name: "\U0001F914 Question about an Expo Config Plugin"
|
- name: 🤔 Question about an Expo Config Plugin
|
||||||
about: >-
|
about: >-
|
||||||
If you have a question about an Expo Config Plugin, please ask it on the
|
If you have a question about an Expo Config Plugin, please ask it on the
|
||||||
forums, discord, Twitter, or Stack Overflow.
|
forums, discord, Twitter, or Stack Overflow.
|
||||||
url: 'https://forums.expo.io/'
|
url: https://forums.expo.io/
|
||||||
- about: E2E tests and automation for mobile
|
- about: E2E tests and automation for mobile
|
||||||
name: "\U0001F4E6 detox issues"
|
name: 📦 detox issues
|
||||||
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: "\U0001F4E6 ffmpeg-kit-react-native issues"
|
name: 📦 ffmpeg-kit-react-native issues
|
||||||
url: 'https://github.com/tanersener/ffmpeg-kit/issues'
|
url: https://github.com/tanersener/ffmpeg-kit/issues
|
||||||
- about: Adjust React Native SDK
|
- about: Adjust React Native SDK
|
||||||
name: "\U0001F4E6 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
|
- about: React Native Bluetooth Low Energy library
|
||||||
name: "\U0001F4E6 react-native-ble-plx issues"
|
name: 📦 react-native-ble-plx issues
|
||||||
url: 'https://github.com/Polidea/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.
|
||||||
name: "\U0001F4E6 react-native-blob-util issues"
|
name: 📦 react-native-blob-util issues
|
||||||
url: 'https://github.com/RonRadtke/react-native-blob-util/issues'
|
url: https://github.com/RonRadtke/react-native-blob-util/issues
|
||||||
- about: iOS 10 CallKit and Android ConnectionService Framework For React Native
|
- about: iOS 10 CallKit and Android ConnectionService Framework For React Native
|
||||||
name: "\U0001F4E6 react-native-callkeep issues"
|
name: 📦 react-native-callkeep issues
|
||||||
url: 'https://github.com/react-native-webrtc/react-native-callkeep/issues'
|
url: https://github.com/react-native-webrtc/react-native-callkeep/issues
|
||||||
- about: Programmatically change the app icon in React Native.
|
- about: Programmatically change the app icon in React Native.
|
||||||
name: "\U0001F4E6 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
|
- about: React Native wrapper for the Google Cast SDK for iOS and Android
|
||||||
name: "\U0001F4E6 react-native-google-cast issues"
|
name: 📦 react-native-google-cast issues
|
||||||
url: >-
|
url: >-
|
||||||
https://github.com/react-native-google-cast/react-native-google-cast/issues
|
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: "\U0001F4E6 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 interface for Touch 3D home screen quick actions
|
- about: A react-native interface for Touch 3D home screen quick actions
|
||||||
name: "\U0001F4E6 react-native-quick-actions issues"
|
name: 📦 react-native-quick-actions issues
|
||||||
url: 'https://github.com/jordanbyron/react-native-quick-actions/issues'
|
url: https://github.com/jordanbyron/react-native-quick-actions/issues
|
||||||
- about: WebRTC for React Native
|
- about: WebRTC for React Native
|
||||||
name: "\U0001F4E6 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
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<!--
|
||||||
|
🚨 We use semantic release (a bot publishes everything automatically)
|
||||||
|
🚨 so please use conventional commit style for the PR title:
|
||||||
|
🚨 https://www.conventionalcommits.org/en/v1.0.0/
|
||||||
|
🚨 Example: feat(detox): add new step
|
||||||
|
-->
|
||||||
|
|
||||||
|
# Why
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Please describe the motivation for this PR, and link to relevant GitHub issues, forums posts, or feature requests.
|
||||||
|
-->
|
||||||
|
|
||||||
|
# How
|
||||||
|
|
||||||
|
<!--
|
||||||
|
How did you build this feature or fix this bug and why?
|
||||||
|
-->
|
||||||
|
|
||||||
|
# Test Plan
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Please describe how you tested this change and how a reviewer could reproduce your test, especially if this PR does not include automated tests! If possible, please also provide terminal output and/or screenshots demonstrating your test/reproduction.
|
||||||
|
-->
|
||||||
@@ -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,25 +0,0 @@
|
|||||||
name: PR Title
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- "*"
|
|
||||||
types:
|
|
||||||
- opened
|
|
||||||
- reopened
|
|
||||||
- edited
|
|
||||||
- synchronize
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
main:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: aslafy-z/[email protected]
|
|
||||||
# continue-on-error: true
|
|
||||||
id: title-check
|
|
||||||
with:
|
|
||||||
success-state: PR title is valid
|
|
||||||
failure-state: "PR title does not follow the conventional commit spec: https://www.conventionalcommits.org/en/v1.0.0/"
|
|
||||||
context-name: pr-title
|
|
||||||
preset: conventional-changelog-angular@latest
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
@@ -40,6 +40,7 @@ jobs:
|
|||||||
ios-stickers,
|
ios-stickers,
|
||||||
react-native-ble-plx,
|
react-native-ble-plx,
|
||||||
react-native-blob-util,
|
react-native-blob-util,
|
||||||
|
react-native-branch,
|
||||||
react-native-google-cast,
|
react-native-google-cast,
|
||||||
react-native-pdf,
|
react-native-pdf,
|
||||||
# react-native-quick-actions,
|
# react-native-quick-actions,
|
||||||
@@ -54,8 +55,12 @@ jobs:
|
|||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node }}
|
node-version: ${{ matrix.node }}
|
||||||
|
- name: Lint ${{ matrix.package }}
|
||||||
|
run: yarn lint --max-warnings 0
|
||||||
|
working-directory: packages/${{ matrix.package }}
|
||||||
- name: Test ${{ matrix.package }}
|
- name: Test ${{ matrix.package }}
|
||||||
run: cd packages/${{ matrix.package }} && yarn test
|
run: yarn test
|
||||||
|
working-directory: packages/${{ matrix.package }}
|
||||||
env:
|
env:
|
||||||
CI: true
|
CI: true
|
||||||
EXPO_DEBUG: true
|
EXPO_DEBUG: true
|
||||||
@@ -51,4 +51,15 @@ xcuserdata
|
|||||||
# VSCode
|
# VSCode
|
||||||
.history/
|
.history/
|
||||||
|
|
||||||
# packages/*/build/
|
# Ignore build folders
|
||||||
|
|
||||||
|
packages/*/build/**
|
||||||
|
packages/*/plugin/build/**
|
||||||
|
packages/@*/*/build/**
|
||||||
|
|
||||||
|
|
||||||
|
# App native folders
|
||||||
|
|
||||||
|
apps/*/ios/*
|
||||||
|
apps/*/android/*
|
||||||
|
apps/*/web-build/*
|
||||||
@@ -5,10 +5,22 @@
|
|||||||
To submit a pull request:
|
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. Use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) including in the PR tile.
|
2. Run `yarn` in the root directory to generate the build files.
|
||||||
3. Fill out the entire PR template. Ensure your code is tested locally and has continuous tests in CI.
|
3. Use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) including in the PR tile.
|
||||||
4. Make sure all tests pass on GitHub Actions.
|
4. Fill out the entire PR template. Ensure your code is tested locally and has continuous tests in CI.
|
||||||
5. Wait for a review and adjust the code if necessary.
|
5. Make sure all tests pass on GitHub Actions.
|
||||||
|
6. Wait for a review and adjust the code if necessary.
|
||||||
|
|
||||||
|
## Creating a plugin
|
||||||
|
|
||||||
|
- Plugins can be generated by running `yarn gen`.
|
||||||
|
- Add plugins to the example in [`apps/app`](/apps/app/package.json) to test them.
|
||||||
|
- The example app should always stay in a state of regeneration.
|
||||||
|
|
||||||
|
Be sure to run the following scripts in the **root directory** to update automation tools:
|
||||||
|
|
||||||
|
- Update dependabot: `yarn update-dependabot-config`
|
||||||
|
- Update the issue template: `yarn update-issue-template`
|
||||||
|
|
||||||
## Publishing a release
|
## Publishing a release
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
# Expo Config Plugins
|
# Expo Config Plugins
|
||||||
|
|
||||||
A collection of custom WIP config plugins for Expo dev clients. Use at your own discretion.
|
- 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.
|
||||||
|
- 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.
|
||||||
|
|
||||||
|
## Contributing!
|
||||||
|
|
||||||
## Creating a plugin
|
See the [contributing guide](/CONTRIBUTING.md).
|
||||||
|
|
||||||
- Plugins can be generated by running `yarn gen`.
|
|
||||||
- Add plugins to the example in [`apps/app`](/apps/app/package.json) to test them.
|
|
||||||
- The example app should always stay in a state of regeneration.
|
|
||||||
@@ -1,9 +1,3 @@
|
|||||||
// export { default } from './src/react-native-quick-actions/App';
|
export { default } from './src/detox/App';
|
||||||
// export { default } from './src/react-native-pdf/App';
|
|
||||||
// export { default } from './src/react-native-dynamic-app-icon/App';
|
|
||||||
// export { default } from './src/react-native-google-cast/App';
|
|
||||||
// export { default } from './src/detox/App';
|
|
||||||
// export { default } from './src/react-native-ble-plx/App';
|
|
||||||
export { default } from './src/react-native-webrtc/App';
|
|
||||||
// export { default } from './src/android-jsc-intl/App';
|
// export { default } from './src/android-jsc-intl/App';
|
||||||
// export { default } from './src/ffmpeg-kit-react-native/App';
|
// export { default } from './src/android-jsc-adjust/App';
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
"slug": "app",
|
"slug": "app",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"orientation": "portrait",
|
"orientation": "portrait",
|
||||||
"icon": "./assets/icons/winter.png",
|
"icon": "https://icogen.vercel.app/api/icon",
|
||||||
"splash": {
|
"splash": {
|
||||||
"image": "./assets/splash.png",
|
"image": "./assets/splash.png",
|
||||||
"resizeMode": "contain",
|
"resizeMode": "contain",
|
||||||
@@ -16,86 +16,25 @@
|
|||||||
"assetBundlePatterns": ["**/*"],
|
"assetBundlePatterns": ["**/*"],
|
||||||
"ios": {
|
"ios": {
|
||||||
"supportsTablet": true,
|
"supportsTablet": true,
|
||||||
"bundleIdentifier": "dev.bacon.app",
|
"bundleIdentifier": "dev.bacon.app"
|
||||||
"config": {
|
|
||||||
"branch": {
|
|
||||||
"apiKey": "key_live_f9f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"android": {
|
"android": {
|
||||||
"adaptiveIcon": {
|
"adaptiveIcon": {
|
||||||
"foregroundImage": "./assets/adaptive-icon.png",
|
"foregroundImage": "./assets/adaptive-icon.png",
|
||||||
"backgroundColor": "#FFFFFF"
|
"backgroundColor": "#FFFFFF"
|
||||||
},
|
},
|
||||||
"config": {
|
|
||||||
"branch": {
|
|
||||||
"apiKey": "key_live_f9f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"package": "com.bacon.app"
|
"package": "com.bacon.app"
|
||||||
},
|
},
|
||||||
"web": {
|
"web": {
|
||||||
"favicon": "./assets/favicon.png"
|
"favicon": "./assets/favicon.png"
|
||||||
},
|
},
|
||||||
"plugins": [
|
"plugins": [
|
||||||
[
|
|
||||||
"@config-plugins/react-native-dynamic-app-icon",
|
|
||||||
[
|
|
||||||
"./assets/icons/spring.png",
|
|
||||||
"./assets/icons/summer.png",
|
|
||||||
"./assets/icons/autumn.png",
|
|
||||||
"./assets/icons/fall.png",
|
|
||||||
"./assets/icons/solstice.png"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"@config-plugins/react-native-quick-actions",
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"title": "Take Photo",
|
|
||||||
"type": "photo",
|
|
||||||
"iconType": "UIApplicationShortcutIconTypeCapturePhoto"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"@config-plugins/ffmpeg-kit-react-native",
|
|
||||||
{
|
|
||||||
"package": "min"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"@config-plugins/detox",
|
|
||||||
"@config-plugins/react-native-adjust",
|
"@config-plugins/react-native-adjust",
|
||||||
"@config-plugins/react-native-branch",
|
|
||||||
"@config-plugins/react-native-google-cast",
|
|
||||||
"@config-plugins/react-native-ble-plx",
|
|
||||||
"@config-plugins/react-native-webrtc",
|
|
||||||
"@config-plugins/react-native-callkeep",
|
"@config-plugins/react-native-callkeep",
|
||||||
"@config-plugins/react-native-blob-util",
|
"@config-plugins/react-native-blob-util",
|
||||||
"@config-plugins/react-native-pdf",
|
"@config-plugins/react-native-pdf",
|
||||||
"@config-plugins/android-jsc-intl",
|
"@config-plugins/android-jsc-intl"
|
||||||
[
|
|
||||||
"@config-plugins/ios-stickers",
|
|
||||||
{
|
|
||||||
"name": "Stickers",
|
|
||||||
"icon": "./assets/imessage-icon.png",
|
|
||||||
"columns": 4,
|
|
||||||
"stickers": [
|
|
||||||
"./assets/stickers/annoyed.png",
|
|
||||||
"./assets/stickers/cuddle.png",
|
|
||||||
"./assets/stickers/crazy.png",
|
|
||||||
"./assets/stickers/cant.png",
|
|
||||||
"./assets/stickers/donno.png",
|
|
||||||
"./assets/stickers/cozzy.png",
|
|
||||||
"./assets/stickers/dork.png",
|
|
||||||
"./assets/stickers/focus.png",
|
|
||||||
"./assets/stickers/avocool.png",
|
|
||||||
"./assets/stickers/coder-girl.png",
|
|
||||||
"./assets/stickers/teapot.png"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -23,53 +23,35 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@config-plugins/android-jsc-intl": "*",
|
"@config-plugins/android-jsc-intl": "*",
|
||||||
"@config-plugins/detox": "*",
|
"@config-plugins/detox": "*",
|
||||||
"@config-plugins/ffmpeg-kit-react-native": "*",
|
|
||||||
"@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-branch": "*",
|
|
||||||
"@config-plugins/react-native-callkeep": "*",
|
"@config-plugins/react-native-callkeep": "*",
|
||||||
"@config-plugins/react-native-dynamic-app-icon": "*",
|
"expo": "^45.0.0",
|
||||||
"@config-plugins/react-native-google-cast": "*",
|
"detox": "^19.6.9",
|
||||||
"@config-plugins/react-native-pdf": "*",
|
"expo-localization": "~13.0.0",
|
||||||
"@config-plugins/react-native-quick-actions": "*",
|
"expo-splash-screen": "~0.15.1",
|
||||||
"@config-plugins/react-native-webrtc": "*",
|
"expo-status-bar": "~1.3.0",
|
||||||
"expo": "^44.0.0",
|
"expo-updates": "~0.13.1",
|
||||||
"expo-localization": "~12.0.0",
|
|
||||||
"expo-splash-screen": "~0.14.0",
|
|
||||||
"expo-status-bar": "~1.2.0",
|
|
||||||
"expo-updates": "~0.11.2",
|
|
||||||
"fbjs": "^0.8.18",
|
"fbjs": "^0.8.18",
|
||||||
"ffmpeg-kit-react-native": "^4.5.0",
|
|
||||||
"i18n-js": "^3.8.0",
|
"i18n-js": "^3.8.0",
|
||||||
"luxon": "^1.27.0",
|
"luxon": "^1.27.0",
|
||||||
"react": "17.0.1",
|
"react": "17.0.2",
|
||||||
"react-dom": "17.0.1",
|
"react-dom": "17.0.2",
|
||||||
"react-native": "0.64.3",
|
"react-native": "0.68.2",
|
||||||
"react-native-adjust": "^4.29.5",
|
"react-native-adjust": "^4.29.6",
|
||||||
"react-native-blob-util": "^0.13.17",
|
"react-native-callkeep": "^4.3.3",
|
||||||
"react-native-callkeep": "^4.2.0",
|
"react-native-safe-area-context": "4.2.4",
|
||||||
"react-native-branch": "^5.3.0",
|
"react-native-web": "0.17.7"
|
||||||
"react-native-dynamic-app-icon": "^1.1.0",
|
|
||||||
"react-native-google-cast": "^4.1.2",
|
|
||||||
"react-native-pdf": "^6.4.0",
|
|
||||||
"react-native-quick-actions": "^0.3.13",
|
|
||||||
"react-native-safe-area-context": "3.3.2",
|
|
||||||
"react-native-web": "0.17.1",
|
|
||||||
"react-native-webrtc": "^1.89.3"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.12.9",
|
"@babel/core": "^7.12.9",
|
||||||
"@babel/plugin-syntax-jsx": "^7.16.0",
|
"@babel/plugin-syntax-jsx": "^7.16.0",
|
||||||
"@expo/metro-config": "~0.3.7",
|
"@expo/metro-config": "~0.3.7",
|
||||||
"@expo/xcpretty": "^4.1.0",
|
"@expo/xcpretty": "^4.1.2",
|
||||||
"@types/jest": "^26.0.19",
|
"@types/jest": "^26.0.19",
|
||||||
"@types/luxon": "^1.27.1",
|
"@types/luxon": "^1.27.1",
|
||||||
"@types/react": "~17.0.21",
|
"@types/react": "~17.0.21",
|
||||||
"@types/react-native": "~0.64.12",
|
"@types/react-native": "~0.64.12",
|
||||||
"babel-jest": "~25.2.6",
|
"babel-jest": "~25.2.6",
|
||||||
"detox": "^19.1.0",
|
|
||||||
"jest": "^26.6.3",
|
"jest": "^26.6.3",
|
||||||
"jest-circus": "^26.5.2",
|
"jest-circus": "^26.5.2",
|
||||||
"ts-jest": "^26.4.4",
|
"ts-jest": "^26.4.4",
|
||||||
|
|||||||
@@ -1,142 +0,0 @@
|
|||||||
import Entypo from '@expo/vector-icons/Entypo';
|
|
||||||
import React from 'react';
|
|
||||||
import { Image, SafeAreaView, Text, View } from 'react-native';
|
|
||||||
import AppIcon from 'react-native-dynamic-app-icon';
|
|
||||||
import TouchableBounce from 'react-native/Libraries/Components/Touchable/TouchableBounce';
|
|
||||||
|
|
||||||
function useIconName() {
|
|
||||||
const [icon, _setIcon] = React.useState(null);
|
|
||||||
|
|
||||||
React.useEffect(() => {
|
|
||||||
let isMounted = true;
|
|
||||||
AppIcon.getIconName((result) => {
|
|
||||||
if (isMounted) _setIcon(result.iconName);
|
|
||||||
});
|
|
||||||
return () => (isMounted = false);
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const setIcon = React.useCallback(
|
|
||||||
(icon) => {
|
|
||||||
AppIcon.setAppIcon(icon);
|
|
||||||
_setIcon(icon || null);
|
|
||||||
},
|
|
||||||
[_setIcon]
|
|
||||||
);
|
|
||||||
return [icon === "default" ? null : icon, setIcon];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const icons = [
|
|
||||||
{ name: "Auto", source: require("../../assets/icons/winter.png"), iconId: null },
|
|
||||||
{ name: "Spring", source: require("../../assets/icons/spring.png"), iconId: '0' },
|
|
||||||
{ name: "Summer", source: require("../../assets/icons/summer.png"), iconId: '1' },
|
|
||||||
{ name: "Autumn", source: require("../../assets/icons/autumn.png"), iconId: '2' },
|
|
||||||
{ name: "Fall", source: require("../../assets/icons/fall.png"), iconId: '3' },
|
|
||||||
{ name: "Solstice", source: require("../../assets/icons/solstice.png"), iconId: '4' },
|
|
||||||
|
|
||||||
];
|
|
||||||
|
|
||||||
export default function App() {
|
|
||||||
const [_icon, setIcon] = useIconName();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<SafeAreaView
|
|
||||||
style={{
|
|
||||||
flex: 1,
|
|
||||||
justifyContent: "center",
|
|
||||||
alignItems: "center",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<View style={{ width: "100%" }}>
|
|
||||||
{icons.map((icon, index) => {
|
|
||||||
return (
|
|
||||||
<Item
|
|
||||||
onPress={() => {
|
|
||||||
setIcon(icon.iconId);
|
|
||||||
}}
|
|
||||||
isSelected={icon.iconId === _icon}
|
|
||||||
name={icon.name}
|
|
||||||
source={icon.source}
|
|
||||||
key={String(index)}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</View>
|
|
||||||
</SafeAreaView>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function Item({ ...props }) {
|
|
||||||
return (
|
|
||||||
<TouchableBounce
|
|
||||||
onPress={props.onPress}
|
|
||||||
style={{ marginVertical: 8, marginHorizontal: 24 }}
|
|
||||||
>
|
|
||||||
<View
|
|
||||||
|
|
||||||
style={{
|
|
||||||
flexDirection: "row",
|
|
||||||
justifyContent: "space-between",
|
|
||||||
alignItems: "stretch",
|
|
||||||
shadowColor: "#000",
|
|
||||||
shadowOffset: {
|
|
||||||
width: 0,
|
|
||||||
height: 4,
|
|
||||||
},
|
|
||||||
shadowOpacity: props.isSelected ? 0.35 : 0.2,
|
|
||||||
shadowRadius: 8.46,
|
|
||||||
|
|
||||||
backgroundColor: props.isSelected ? "#000" : "#F1F1F1",
|
|
||||||
elevation: 9,
|
|
||||||
paddingHorizontal: 12,
|
|
||||||
paddingVertical: 12,
|
|
||||||
borderRadius: 20,
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<View
|
|
||||||
style={{
|
|
||||||
flexDirection: "row",
|
|
||||||
flex: 1,
|
|
||||||
alignItems: "center",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<View
|
|
||||||
style={{
|
|
||||||
flexDirection: "row",
|
|
||||||
flex: 1,
|
|
||||||
alignItems: "center",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Image
|
|
||||||
source={props.source}
|
|
||||||
style={{
|
|
||||||
width: 64,
|
|
||||||
aspectRatio: 1,
|
|
||||||
resizeMode: "cover",
|
|
||||||
borderRadius: 16,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
<Text
|
|
||||||
style={{
|
|
||||||
marginLeft: 20,
|
|
||||||
fontSize: 18,
|
|
||||||
fontWeight: "700",
|
|
||||||
color: props.isSelected ? "white" : "black",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{props.name}
|
|
||||||
</Text>
|
|
||||||
</View>
|
|
||||||
{props.isSelected && (
|
|
||||||
<Entypo
|
|
||||||
style={{ marginRight: 8 }}
|
|
||||||
name="check"
|
|
||||||
size={20}
|
|
||||||
color="white"
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</View>
|
|
||||||
</View>
|
|
||||||
</TouchableBounce>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1,87 +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,41 +0,0 @@
|
|||||||
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",
|
|
||||||
cache: true,
|
|
||||||
};
|
|
||||||
export default function App() {
|
|
||||||
const { width, height } = useWindowDimensions()
|
|
||||||
|
|
||||||
return (
|
|
||||||
<SafeAreaView style={styles.container}>
|
|
||||||
<Pdf
|
|
||||||
source={source}
|
|
||||||
onLoadComplete={(numberOfPages, filePath) => {
|
|
||||||
console.log(`Number of pages: ${numberOfPages}`);
|
|
||||||
}}
|
|
||||||
onPageChanged={(page, numberOfPages) => {
|
|
||||||
console.log(`Current page: ${page}`);
|
|
||||||
}}
|
|
||||||
onError={(error) => {
|
|
||||||
console.log(error);
|
|
||||||
}}
|
|
||||||
onPressLink={(uri) => {
|
|
||||||
console.log(`Link pressed: ${uri}`);
|
|
||||||
}}
|
|
||||||
style={{ flex: 1, width, height }}
|
|
||||||
/>
|
|
||||||
</SafeAreaView>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const styles = StyleSheet.create({
|
|
||||||
container: {
|
|
||||||
flex: 1,
|
|
||||||
justifyContent: "flex-start",
|
|
||||||
alignItems: "center",
|
|
||||||
},
|
|
||||||
|
|
||||||
});
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
import QuickActions from "react-native-quick-actions";
|
|
||||||
import React from "react";
|
|
||||||
import { Text, View } from "react-native";
|
|
||||||
|
|
||||||
import { DeviceEventEmitter } from "react-native";
|
|
||||||
|
|
||||||
function useQuickAction(): QuickActions.ShortcutItem | null {
|
|
||||||
const [item, setItem] = React.useState<QuickActions.ShortcutItem | null>(null);
|
|
||||||
const isMounted = React.useRef(true)
|
|
||||||
React.useEffect(() => {
|
|
||||||
QuickActions.popInitialAction().then(action => {
|
|
||||||
if (isMounted.current) setItem(action);
|
|
||||||
})
|
|
||||||
const sub = DeviceEventEmitter.addListener("quickActionShortcut", data => {
|
|
||||||
if (isMounted.current) {
|
|
||||||
setItem(data);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return () => {
|
|
||||||
isMounted.current = false;
|
|
||||||
sub.remove();
|
|
||||||
}
|
|
||||||
}, []);
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
function App() {
|
|
||||||
const action = useQuickAction();
|
|
||||||
|
|
||||||
React.useEffect(() => {
|
|
||||||
QuickActions.setShortcutItems([
|
|
||||||
{
|
|
||||||
title: 'Play Song',
|
|
||||||
subtitle: 'NDA - Billie Eilish',
|
|
||||||
icon: 'Play',
|
|
||||||
type: 'alpha',
|
|
||||||
} as any,
|
|
||||||
{
|
|
||||||
title: 'Shuffle',
|
|
||||||
icon: 'Shuffle',
|
|
||||||
type: 'beta',
|
|
||||||
} as any,
|
|
||||||
{
|
|
||||||
title: 'Like Song',
|
|
||||||
icon: 'Love',
|
|
||||||
type: 'gamma',
|
|
||||||
} as any,
|
|
||||||
])
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
return (
|
|
||||||
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
|
|
||||||
<Text>Quick Actions</Text>
|
|
||||||
{action && <Text>{JSON.stringify(action, null, 2)}</Text>}
|
|
||||||
</View>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
export default App;
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
|
|
||||||
import React, { useState } from 'react';
|
|
||||||
import { Button, SafeAreaView, StatusBar, StyleSheet, View } from 'react-native';
|
|
||||||
import { mediaDevices, RTCView } from 'react-native-webrtc';
|
|
||||||
|
|
||||||
const App = () => {
|
|
||||||
const [stream, setStream] = useState(null);
|
|
||||||
const start = async () => {
|
|
||||||
console.log('start');
|
|
||||||
if (!stream) {
|
|
||||||
let s;
|
|
||||||
try {
|
|
||||||
s = await mediaDevices.getUserMedia({ video: true });
|
|
||||||
setStream(s);
|
|
||||||
} catch(e) {
|
|
||||||
console.error(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const stop = () => {
|
|
||||||
console.log('stop');
|
|
||||||
if (stream) {
|
|
||||||
stream.release();
|
|
||||||
setStream(null);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<StatusBar barStyle="dark-content" />
|
|
||||||
<SafeAreaView style={styles.body}>
|
|
||||||
{
|
|
||||||
stream &&
|
|
||||||
<RTCView
|
|
||||||
streamURL={stream.toURL()}
|
|
||||||
style={styles.stream} />
|
|
||||||
}
|
|
||||||
<View
|
|
||||||
style={styles.footer}>
|
|
||||||
<Button
|
|
||||||
title = "Start"
|
|
||||||
onPress = {start} />
|
|
||||||
<Button
|
|
||||||
title = "Stop"
|
|
||||||
onPress = {stop} />
|
|
||||||
</View>
|
|
||||||
</SafeAreaView>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const styles = StyleSheet.create({
|
|
||||||
body: {
|
|
||||||
...StyleSheet.absoluteFillObject
|
|
||||||
},
|
|
||||||
stream: {
|
|
||||||
flex: 1
|
|
||||||
},
|
|
||||||
footer: {
|
|
||||||
position: 'absolute',
|
|
||||||
bottom: 0,
|
|
||||||
left: 0,
|
|
||||||
right: 0
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
export default 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
|
||||||
@@ -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;
|
||||||
|
};
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"expo": {
|
||||||
|
"icon": "https://icogen.vercel.app/api/icon",
|
||||||
|
"plugins": [
|
||||||
|
[
|
||||||
|
"@config-plugins/ffmpeg-kit-react-native",
|
||||||
|
{
|
||||||
|
"package": "min"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
module.exports = function(api) {
|
||||||
|
api.cache(true);
|
||||||
|
return {
|
||||||
|
presets: ['babel-preset-expo'],
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -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/ffmpeg-kit-react-native",
|
||||||
|
"main": "./index.js",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"scripts": {
|
||||||
|
"start": "expo start --dev-client",
|
||||||
|
"ios": "expo run:ios",
|
||||||
|
"android": "expo run:android"
|
||||||
|
},
|
||||||
|
"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"
|
||||||
|
},
|
||||||
|
"private": true
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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;
|
||||||
|
};
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"expo": {
|
||||||
|
"icon": "https://icogen.vercel.app/api/icon",
|
||||||
|
"plugins": [
|
||||||
|
[
|
||||||
|
"@config-plugins/ios-stickers",
|
||||||
|
{
|
||||||
|
"name": "Stickers",
|
||||||
|
"icon": "./assets/imessage-icon.png",
|
||||||
|
"columns": 4,
|
||||||
|
"stickers": [
|
||||||
|
"./assets/stickers/annoyed.png",
|
||||||
|
"./assets/stickers/cuddle.png",
|
||||||
|
"./assets/stickers/crazy.png",
|
||||||
|
"./assets/stickers/cant.png",
|
||||||
|
"./assets/stickers/donno.png",
|
||||||
|
"./assets/stickers/cozzy.png",
|
||||||
|
"./assets/stickers/dork.png",
|
||||||
|
"./assets/stickers/focus.png",
|
||||||
|
"./assets/stickers/avocool.png",
|
||||||
|
"./assets/stickers/coder-girl.png",
|
||||||
|
"./assets/stickers/teapot.png"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 173 KiB After Width: | Height: | Size: 173 KiB |
|
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 145 KiB |
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 230 KiB After Width: | Height: | Size: 230 KiB |
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 133 KiB |
|
Before Width: | Height: | Size: 177 KiB After Width: | Height: | Size: 177 KiB |
|
Before Width: | Height: | Size: 179 KiB After Width: | Height: | Size: 179 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 182 KiB After Width: | Height: | Size: 182 KiB |
|
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 176 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
module.exports = function(api) {
|
||||||
|
api.cache(true);
|
||||||
|
return {
|
||||||
|
presets: ['babel-preset-expo'],
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -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,24 @@
|
|||||||
|
{
|
||||||
|
"name": "@config-plugins-app/ios-stickers",
|
||||||
|
"main": "./index.js",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"scripts": {
|
||||||
|
"start": "expo start --dev-client",
|
||||||
|
"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"
|
||||||
|
},
|
||||||
|
"private": true
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { Text, View } from "react-native";
|
||||||
|
|
||||||
|
export default function App() {
|
||||||
|
return (
|
||||||
|
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
|
||||||
|
<Text>Open iMessage to find the app</Text>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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;
|
||||||
|
};
|
||||||
@@ -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'],
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -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,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
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {},
|
||||||
|
"extends": "expo/tsconfig.base"
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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;
|
||||||
|
};
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"expo": {
|
||||||
|
"icon": "https://icogen.vercel.app/api/icon?icon=1f334",
|
||||||
|
"ios": {
|
||||||
|
"config": {
|
||||||
|
"branch": {
|
||||||
|
"apiKey": "key_live_f9f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"android": {
|
||||||
|
"config": {
|
||||||
|
"branch": {
|
||||||
|
"apiKey": "key_live_f9f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"plugins": [
|
||||||
|
"@config-plugins/react-native-branch"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
module.exports = function(api) {
|
||||||
|
api.cache(true);
|
||||||
|
return {
|
||||||
|
presets: ['babel-preset-expo'],
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -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-branch",
|
||||||
|
"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-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"
|
||||||
|
},
|
||||||
|
"private": true
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { Text, View } from "react-native";
|
||||||
|
|
||||||
|
export default function App() {
|
||||||
|
return (
|
||||||
|
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
|
||||||
|
<Text>Branch</Text>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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;
|
||||||
|
};
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"expo": {
|
||||||
|
"icon": "./assets/icons/winter.png",
|
||||||
|
"plugins": [
|
||||||
|
[
|
||||||
|
"@config-plugins/react-native-dynamic-app-icon",
|
||||||
|
[
|
||||||
|
"./assets/icons/spring.png",
|
||||||
|
"./assets/icons/summer.png",
|
||||||
|
"./assets/icons/autumn.png",
|
||||||
|
"./assets/icons/fall.png",
|
||||||
|
"./assets/icons/solstice.png"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
module.exports = function(api) {
|
||||||
|
api.cache(true);
|
||||||
|
return {
|
||||||
|
presets: ['babel-preset-expo'],
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -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-dynamic-app-icon",
|
||||||
|
"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-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"
|
||||||
|
},
|
||||||
|
"private": true
|
||||||
|
}
|
||||||
@@ -0,0 +1,159 @@
|
|||||||
|
import Entypo from "@expo/vector-icons/Entypo";
|
||||||
|
import React from "react";
|
||||||
|
import { Image, SafeAreaView, Text, View } from "react-native";
|
||||||
|
import AppIcon from "react-native-dynamic-app-icon";
|
||||||
|
import TouchableBounce from "react-native/Libraries/Components/Touchable/TouchableBounce";
|
||||||
|
|
||||||
|
function useIconName() {
|
||||||
|
const [icon, _setIcon] = React.useState(null);
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
let isMounted = true;
|
||||||
|
AppIcon.getIconName((result) => {
|
||||||
|
if (isMounted) _setIcon(result.iconName);
|
||||||
|
});
|
||||||
|
return () => (isMounted = false);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const setIcon = React.useCallback(
|
||||||
|
(icon) => {
|
||||||
|
AppIcon.setAppIcon(icon);
|
||||||
|
_setIcon(icon || null);
|
||||||
|
},
|
||||||
|
[_setIcon]
|
||||||
|
);
|
||||||
|
return [icon === "default" ? null : icon, setIcon];
|
||||||
|
}
|
||||||
|
|
||||||
|
const icons = [
|
||||||
|
{
|
||||||
|
name: "Auto",
|
||||||
|
source: require("../assets/icons/winter.png"),
|
||||||
|
iconId: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Spring",
|
||||||
|
source: require("../assets/icons/spring.png"),
|
||||||
|
iconId: "0",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Summer",
|
||||||
|
source: require("../assets/icons/summer.png"),
|
||||||
|
iconId: "1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Autumn",
|
||||||
|
source: require("../assets/icons/autumn.png"),
|
||||||
|
iconId: "2",
|
||||||
|
},
|
||||||
|
{ name: "Fall", source: require("../assets/icons/fall.png"), iconId: "3" },
|
||||||
|
{
|
||||||
|
name: "Solstice",
|
||||||
|
source: require("../assets/icons/solstice.png"),
|
||||||
|
iconId: "4",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default function App() {
|
||||||
|
const [_icon, setIcon] = useIconName();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<SafeAreaView
|
||||||
|
style={{
|
||||||
|
flex: 1,
|
||||||
|
justifyContent: "center",
|
||||||
|
alignItems: "center",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<View style={{ width: "100%" }}>
|
||||||
|
{icons.map((icon, index) => {
|
||||||
|
return (
|
||||||
|
<Item
|
||||||
|
onPress={() => {
|
||||||
|
setIcon(icon.iconId);
|
||||||
|
}}
|
||||||
|
isSelected={icon.iconId === _icon}
|
||||||
|
name={icon.name}
|
||||||
|
source={icon.source}
|
||||||
|
key={String(index)}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</View>
|
||||||
|
</SafeAreaView>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function Item({ ...props }) {
|
||||||
|
return (
|
||||||
|
<TouchableBounce
|
||||||
|
onPress={props.onPress}
|
||||||
|
style={{ marginVertical: 8, marginHorizontal: 24 }}
|
||||||
|
>
|
||||||
|
<View
|
||||||
|
style={{
|
||||||
|
flexDirection: "row",
|
||||||
|
justifyContent: "space-between",
|
||||||
|
alignItems: "stretch",
|
||||||
|
shadowColor: "#000",
|
||||||
|
shadowOffset: {
|
||||||
|
width: 0,
|
||||||
|
height: 4,
|
||||||
|
},
|
||||||
|
shadowOpacity: props.isSelected ? 0.35 : 0.2,
|
||||||
|
shadowRadius: 8.46,
|
||||||
|
|
||||||
|
backgroundColor: props.isSelected ? "#000" : "#F1F1F1",
|
||||||
|
elevation: 9,
|
||||||
|
paddingHorizontal: 12,
|
||||||
|
paddingVertical: 12,
|
||||||
|
borderRadius: 20,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<View
|
||||||
|
style={{
|
||||||
|
flexDirection: "row",
|
||||||
|
flex: 1,
|
||||||
|
alignItems: "center",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<View
|
||||||
|
style={{
|
||||||
|
flexDirection: "row",
|
||||||
|
flex: 1,
|
||||||
|
alignItems: "center",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Image
|
||||||
|
source={props.source}
|
||||||
|
style={{
|
||||||
|
width: 64,
|
||||||
|
aspectRatio: 1,
|
||||||
|
resizeMode: "cover",
|
||||||
|
borderRadius: 16,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<Text
|
||||||
|
style={{
|
||||||
|
marginLeft: 20,
|
||||||
|
fontSize: 18,
|
||||||
|
fontWeight: "700",
|
||||||
|
color: props.isSelected ? "white" : "black",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{props.name}
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
{props.isSelected && (
|
||||||
|
<Entypo
|
||||||
|
style={{ marginRight: 8 }}
|
||||||
|
name="check"
|
||||||
|
size={20}
|
||||||
|
color="white"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</TouchableBounce>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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;
|
||||||
|
};
|
||||||
@@ -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'],
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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;
|
||||||
|
};
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"expo": {
|
||||||
|
"icon": "https://icogen.vercel.app/api/icon?icon=🎆",
|
||||||
|
"plugins": [
|
||||||
|
"@config-plugins/react-native-blob-util",
|
||||||
|
"@config-plugins/react-native-pdf"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
module.exports = function(api) {
|
||||||
|
api.cache(true);
|
||||||
|
return {
|
||||||
|
presets: ['babel-preset-expo'],
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import { registerRootComponent } from "expo";
|
||||||
|
|
||||||
|
import App from "./src/App";
|
||||||
|
|
||||||
|
registerRootComponent(App);
|
||||||