mirror of
https://github.com/expo/config-plugins.git
synced 2026-11-13 20:28:07 -10:00
Compare commits
21
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
754fb08327 | ||
|
|
05fe7bf107 | ||
|
|
fa107895b6 | ||
|
|
d31b0273cf | ||
|
|
2f358c25e8 | ||
|
|
d2eb511e1d | ||
|
|
f62a941bc6 | ||
|
|
d784d14486 | ||
|
|
7b0d0225f9 | ||
|
|
c1d25701ca | ||
|
|
5359120dbd | ||
|
|
ed6b3a0ec0 | ||
|
|
efd3284272 | ||
|
|
46bc48726c | ||
|
|
ff47e492e4 | ||
|
|
be969274b9 | ||
|
|
359c1cfcb5 | ||
|
|
6c3fc5dff7 | ||
|
|
99d3927680 | ||
|
|
55482dae5f | ||
|
|
395599abfa |
No files matched your search
@@ -1,81 +0,0 @@
|
||||
name: "\U0001F41B Expo Config Plugin Bug Report"
|
||||
description: Report a reproducible bug with one of the Expo Config Plugins.
|
||||
labels: bug
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >-
|
||||
Thanks for taking the time to file a bug report! Please fill out this
|
||||
form as completely as possible.
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >-
|
||||
If you leave out sections there is a high likelihood your issue will be
|
||||
closed. If you have a question, not a bug report, please post it on our
|
||||
[forums](https://forums.expo.dev/) instead.
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Summary
|
||||
description: Describe the issue in 1 or 2 sentences
|
||||
placeholder: >-
|
||||
Clearly describe what the expected behavior is vs. what is actually
|
||||
happening. This should be as short as possible, while still
|
||||
communicating all the necessary information. If your summary is just 'X
|
||||
library/method isn't working', then you need to continue debugging
|
||||
yourself and provide more information.
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Config Plugin
|
||||
options:
|
||||
- '@config-plugins/android-jsc-intl'
|
||||
- '@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-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-webrtc'
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: What platform(s) does this occur on?
|
||||
multiple: true
|
||||
options:
|
||||
- Android
|
||||
- iOS
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: SDK Version
|
||||
description: What version of the Expo SDK are you using?
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Reproducible demo
|
||||
description: >-
|
||||
This should include as little code as possible, do not simply link your
|
||||
entire project. If a reproducible demo is not provided, it is very
|
||||
likely your issue will be closed. Read [here more
|
||||
guidance](https://stackoverflow.com/help/mcve).
|
||||
validations:
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >-
|
||||
Please make sure contributors can run your code and follow the steps
|
||||
your provided in order to reproduce the bug.
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >-
|
||||
**Realize that it is up to you to debug your code and be as certain as
|
||||
possible that the bug is with Expo, not with your own app.** [Here's an
|
||||
excellent guide to debugging you can
|
||||
follow](https://gist.github.com/brentvatne/5ac00cba0c70b7a06b89a56787d6bc4a).
|
||||
@@ -1,44 +0,0 @@
|
||||
---
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: "\U0001F914 Question about an Expo Config Plugin"
|
||||
about: >-
|
||||
If you have a question about an Expo Config Plugin, please ask it on the
|
||||
forums, discord, Twitter, or Stack Overflow.
|
||||
url: 'https://forums.expo.io/'
|
||||
- about: E2E tests and automation for mobile
|
||||
name: "\U0001F4E6 detox issues"
|
||||
url: 'https://github.com/wix/Detox/issues'
|
||||
- about: FFmpeg Kit for React Native
|
||||
name: "\U0001F4E6 ffmpeg-kit-react-native issues"
|
||||
url: 'https://github.com/tanersener/ffmpeg-kit/issues'
|
||||
- about: Adjust React Native SDK
|
||||
name: "\U0001F4E6 react-native-adjust issues"
|
||||
url: 'https://github.com/adjust/react_native_sdk/issues'
|
||||
- about: React Native Bluetooth Low Energy library
|
||||
name: "\U0001F4E6 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.
|
||||
name: "\U0001F4E6 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
|
||||
name: "\U0001F4E6 react-native-callkeep issues"
|
||||
url: 'https://github.com/react-native-webrtc/react-native-callkeep/issues'
|
||||
- about: Programmatically change the app icon in React Native.
|
||||
name: "\U0001F4E6 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: "\U0001F4E6 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: "\U0001F4E6 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: "\U0001F4E6 react-native-quick-actions issues"
|
||||
url: 'https://github.com/jordanbyron/react-native-quick-actions/issues'
|
||||
- about: WebRTC for React Native
|
||||
name: "\U0001F4E6 react-native-webrtc issues"
|
||||
url: 'https://github.com/react-native-webrtc/react-native-webrtc/issues'
|
||||
@@ -1,22 +0,0 @@
|
||||
name: "⭐️ Config Plugin Request"
|
||||
description: "Suggest an idea for a new Expo Config Plugin."
|
||||
labels: enhancement
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: "This repo is used for publishing out-of-tree plugins that should eventually be upstreamed in a particular package. If the plugin is a utility or used to improve some particular workflow i.e. updates version numbers, than it's probably better suited for a personal repo or utility package."
|
||||
- type: input
|
||||
attributes:
|
||||
label: Library
|
||||
description: What package does this Config Plugin configure.
|
||||
placeholder: URL to a React Native package.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Summary
|
||||
description: Add some info on why this integration is important.
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Any existing examples?
|
||||
placeholder: Have you already created a local plugin for the requested library?
|
||||
@@ -0,0 +1,155 @@
|
||||
name: E2E Test
|
||||
|
||||
on:
|
||||
workflow_dispatch: {}
|
||||
push:
|
||||
branches: [master]
|
||||
paths:
|
||||
- .github/workflows/ios.yml
|
||||
- apps/app/**
|
||||
- packages/**
|
||||
- yarn.lock
|
||||
pull_request:
|
||||
paths:
|
||||
- .github/workflows/ios.yml
|
||||
- apps/app/**
|
||||
- packages/**
|
||||
- yarn.lock
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
ios:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: 👀 Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
- name: 🍺 Install required tools
|
||||
run: |
|
||||
brew tap wix/brew
|
||||
brew install applesimutils
|
||||
brew install watchman
|
||||
echo "$(pwd)/bin" >> $GITHUB_PATH
|
||||
- name: 💎 Setup Ruby and install gems
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
- name: ♻️ Restore workspace node modules
|
||||
uses: actions/cache@v2
|
||||
id: node-modules-cache
|
||||
with:
|
||||
path: |
|
||||
# See "workspaces" → "packages" in the root package.json for the source of truth of
|
||||
# which node_modules are affected by the root yarn.lock
|
||||
node_modules
|
||||
apps/*/node_modules
|
||||
packages/*/node_modules
|
||||
key: ${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }}
|
||||
- name: 🧶 Install node modules in root dir
|
||||
run: yarn install --frozen-lockfile
|
||||
- name: ♻️ Restore apps/app/ios/Pods from cache
|
||||
uses: actions/cache@v2
|
||||
id: pods-cache
|
||||
with:
|
||||
path: "apps/app/ios/Pods"
|
||||
key: ${{ runner.os }}-app-pods-${{ hashFiles('apps/app/ios/Podfile.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-app-pods-
|
||||
- run: yarn global add expo-cli
|
||||
- name: 🔨 Prebuild
|
||||
run: expo prebuild -p ios
|
||||
working-directory: apps/app
|
||||
- name: 🕵️ Debug CocoaPods lockfiles
|
||||
run: git diff Podfile.lock Pods/Manifest.lock
|
||||
working-directory: apps/app/ios
|
||||
continue-on-error: true
|
||||
- name: ⚛️ Display React Native config
|
||||
run: yarn react-native config
|
||||
working-directory: apps/app
|
||||
- name: 🌳 Display pod environment
|
||||
run: pod env
|
||||
working-directory: apps/app/ios
|
||||
- name: 🥥 Install pods in apps/app/ios
|
||||
run: pod install
|
||||
if: steps.pods-cache.outputs.cache-hit != 'true' || hashFiles('apps/app/ios/Podfile.lock') != hashFiles('apps/app/ios/Pods/Manifest.lock')
|
||||
working-directory: apps/app/ios
|
||||
- name: Clean Detox
|
||||
run: yarn detox:clean
|
||||
working-directory: apps/app
|
||||
- name: Build iOS project for Detox
|
||||
run: yarn build:ios-release
|
||||
working-directory: apps/app
|
||||
timeout-minutes: 30
|
||||
- name: Run tests
|
||||
run: yarn test:ios-release
|
||||
working-directory: apps/app
|
||||
- name: Store images of build failures
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: app-artifacts
|
||||
path: apps/app/artifacts
|
||||
|
||||
android:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: 👀 Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
- name: 🍺 Install required tools
|
||||
run: |
|
||||
brew install watchman
|
||||
echo "$(pwd)/bin" >> $GITHUB_PATH
|
||||
- name: ♻️ Restore workspace node modules
|
||||
uses: actions/cache@v2
|
||||
id: node-modules-cache
|
||||
with:
|
||||
path: |
|
||||
# See "workspaces" → "packages" in the root package.json for the source of truth of
|
||||
# which node_modules are affected by the root yarn.lock
|
||||
node_modules
|
||||
apps/*/node_modules
|
||||
packages/*/node_modules
|
||||
key: ${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }}
|
||||
- name: 🧶 Install node modules in root dir
|
||||
run: yarn install --frozen-lockfile
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.gradle/caches
|
||||
key: ${{ runner.os }}-gradle-v20210625-${{ hashFiles('android/*.gradle*') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gradle-v20210625
|
||||
- run: yarn global add expo-cli
|
||||
- name: 🔨 Prebuild
|
||||
run: expo prebuild -p android
|
||||
working-directory: apps/app
|
||||
- name: ⚛️ Display React Native config
|
||||
run: yarn react-native config
|
||||
working-directory: apps/app
|
||||
- name: Clean Detox
|
||||
run: yarn detox:clean
|
||||
working-directory: apps/app
|
||||
- name: Build Android project for Detox
|
||||
run: yarn build:android-release
|
||||
working-directory: apps/app
|
||||
timeout-minutes: 35
|
||||
env:
|
||||
GRADLE_OPTS: "-Dorg.gradle.internal.http.connectionTimeout=180000 -Dorg.gradle.internal.http.socketTimeout=180000 -Dorg.gradle.internal.network.retry.max.attempts=18 -Dorg.gradle.internal.network.retry.initial.backOff=2000"
|
||||
- name: Run tests
|
||||
uses: reactivecircus/android-emulator-runner@v2
|
||||
with:
|
||||
api-level: 29
|
||||
avd-name: app
|
||||
script: yarn test:android-release
|
||||
working-directory: ./apps/app
|
||||
- name: Store images of build failures
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: app-artifacts
|
||||
path: apps/app/artifacts
|
||||
@@ -2,7 +2,7 @@ name: Check Markdown links
|
||||
on:
|
||||
workflow_dispatch: {}
|
||||
push:
|
||||
branches: [main]
|
||||
branches: [master]
|
||||
paths:
|
||||
- .github/workflows/lint-md.yml
|
||||
- "**.md"
|
||||
|
||||
@@ -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 }}
|
||||
@@ -1,32 +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
|
||||
|
||||
# https://github.com/dhoulb/multi-semantic-release
|
||||
- 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
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
@@ -1,7 +1,7 @@
|
||||
name: Test Packages
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
branches: [master]
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
|
||||
@@ -37,7 +37,6 @@ jobs:
|
||||
# Manually add packages here
|
||||
detox,
|
||||
ffmpeg-kit-react-native,
|
||||
ios-stickers,
|
||||
react-native-ble-plx,
|
||||
react-native-blob-util,
|
||||
react-native-google-cast,
|
||||
|
||||
@@ -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/git",
|
||||
{
|
||||
message: "chore: ${nextRelease.version}\n\n${nextRelease.notes}",
|
||||
assets: ["package.json", "CHANGELOG.md", "build/*"],
|
||||
},
|
||||
],
|
||||
"@semantic-release/github",
|
||||
"@semantic-release/npm",
|
||||
],
|
||||
};
|
||||
@@ -0,0 +1 @@
|
||||
2.7.0
|
||||
@@ -1,15 +0,0 @@
|
||||
# Contributing to Expo Config Plugins
|
||||
|
||||
## Submitting 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/`.)
|
||||
2. Use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) including in the PR tile.
|
||||
3. Fill out the entire PR template. Ensure your code is tested locally and has continuous tests in CI.
|
||||
4. Make sure all tests pass on GitHub Actions.
|
||||
5. Wait for a review and adjust the code if necessary.
|
||||
|
||||
## Publishing a release
|
||||
|
||||
All publishing should be handled automatically whenever code is merged to `main`.
|
||||
+2
-3
@@ -1,9 +1,8 @@
|
||||
// export { default } from './src/react-native-quick-actions/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/detox/App';
|
||||
// export { default } from './src/react-native-ble-plx/App';
|
||||
export { default } from './src/react-native-webrtc/App';
|
||||
// export { default } from './src/react-native-webrtc/App';
|
||||
// export { default } from './src/android-jsc-intl/App';
|
||||
// export { default } from './src/ffmpeg-kit-react-native/App';
|
||||
@@ -1,42 +0,0 @@
|
||||
## @expo/app 1.0.0 (2022-03-15)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* create react-native-branch plugin ([0b06baa](https://github.com/expo/config-plugins/commit/0b06baa2b486c5e02d433a4ac785960934f403b9))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* respect old config from expo-branch ([d0e0186](https://github.com/expo/config-plugins/commit/d0e018601c09c0e92191a4eb2998ab0e6fa1c6ec))
|
||||
|
||||
|
||||
### Other chores
|
||||
|
||||
* added start-metro script ([4a7d707](https://github.com/expo/config-plugins/commit/4a7d707b200a3e499d9d71caf49ad4fc1d0a89e0))
|
||||
* update script ([dcf61a9](https://github.com/expo/config-plugins/commit/dcf61a9b9542851095954d84c9054c97c5400dc9))
|
||||
* upgrade to latest react-native-branch ([df98474](https://github.com/expo/config-plugins/commit/df98474d79ed139b42ddd698d13100160c656c26))
|
||||
|
||||
|
||||
### Documentation changes
|
||||
|
||||
* add android-jsc-intl example ([d96c0b2](https://github.com/expo/config-plugins/commit/d96c0b2888da3808d7c4e2dd7993129711ba717d))
|
||||
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* **@config-plugins/android-jsc-intl:** upgraded to 1.0.0
|
||||
* **@config-plugins/detox:** upgraded to 1.0.0
|
||||
* **@config-plugins/ffmpeg-kit-react-native:** upgraded to 1.0.0
|
||||
* **@config-plugins/ios-stickers:** upgraded to 1.0.0
|
||||
* **@config-plugins/react-native-adjust:** upgraded to 1.0.0
|
||||
* **@config-plugins/react-native-ble-plx:** upgraded to 1.0.0
|
||||
* **@config-plugins/react-native-blob-util:** upgraded to 1.0.0
|
||||
* **@config-plugins/react-native-branch:** upgraded to 1.0.0
|
||||
* **@config-plugins/react-native-callkeep:** upgraded to 1.0.0
|
||||
* **@config-plugins/react-native-dynamic-app-icon:** upgraded to 1.0.0
|
||||
* **@config-plugins/react-native-google-cast:** upgraded to 1.0.0
|
||||
* **@config-plugins/react-native-pdf:** upgraded to 1.0.0
|
||||
* **@config-plugins/react-native-quick-actions:** upgraded to 1.0.0
|
||||
* **@config-plugins/react-native-webrtc:** upgraded to 1.0.0
|
||||
+6
-70
@@ -13,89 +13,25 @@
|
||||
"updates": {
|
||||
"fallbackToCacheTimeout": 0
|
||||
},
|
||||
"assetBundlePatterns": ["**/*"],
|
||||
"assetBundlePatterns": [
|
||||
"**/*"
|
||||
],
|
||||
"ios": {
|
||||
"supportsTablet": true,
|
||||
"bundleIdentifier": "dev.bacon.app",
|
||||
"config": {
|
||||
"branch": {
|
||||
"apiKey": "key_live_f9f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8"
|
||||
}
|
||||
}
|
||||
"bundleIdentifier": "com.bacon.app"
|
||||
},
|
||||
"android": {
|
||||
"adaptiveIcon": {
|
||||
"foregroundImage": "./assets/adaptive-icon.png",
|
||||
"backgroundColor": "#FFFFFF"
|
||||
},
|
||||
"config": {
|
||||
"branch": {
|
||||
"apiKey": "key_live_f9f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8"
|
||||
}
|
||||
},
|
||||
"package": "com.bacon.app"
|
||||
},
|
||||
"web": {
|
||||
"favicon": "./assets/favicon.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"
|
||||
]
|
||||
],
|
||||
[
|
||||
"@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-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-blob-util",
|
||||
"@config-plugins/react-native-pdf",
|
||||
"@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"
|
||||
]
|
||||
}
|
||||
]
|
||||
"@config-plugins/detox"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
const iosName = "app";
|
||||
const emulator = "Pixel_3a_API_30";
|
||||
const simulator = "iPhone 13 Pro";
|
||||
const emulator = process.env.CI ? "app" : "Pixel_3a_API_30";
|
||||
const simulator = "iPhone 11";
|
||||
const derivedDataPath = "ios/build";
|
||||
const sdk = "iphonesimulator";
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { by, device, element, expect } from "detox";
|
||||
import { device } from "detox";
|
||||
import * as path from "path";
|
||||
|
||||
import { createCapture } from "../lib";
|
||||
@@ -6,7 +6,10 @@ import { createCapture } from "../lib";
|
||||
const projectRoot = path.resolve(__dirname, "../../");
|
||||
|
||||
// https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/LanguageandLocaleIDs/LanguageandLocaleIDs.html
|
||||
const languages = ["en-US", "nl-NL", "zh-CN"];
|
||||
const languages = [
|
||||
"en-US",
|
||||
// "nl-NL", "zh-CN"
|
||||
];
|
||||
|
||||
for (const locale of languages) {
|
||||
const { captureAsync, resetAppAsync } = createCapture({
|
||||
@@ -21,18 +24,8 @@ for (const locale of languages) {
|
||||
await device.reloadReactNative();
|
||||
});
|
||||
|
||||
it("should have welcome screen", async () => {
|
||||
await expect(element(by.id("welcome"))).toBeVisible();
|
||||
await captureAsync();
|
||||
});
|
||||
|
||||
xit("should show hello screen after tap", async () => {
|
||||
await element(by.id("hello_button")).tap();
|
||||
await captureAsync();
|
||||
});
|
||||
|
||||
xit("should show world screen after tap", async () => {
|
||||
await element(by.id("world_button")).tap();
|
||||
it("should load app", async () => {
|
||||
// await expect(element(by.id("welcome"))).toBeVisible();
|
||||
await captureAsync();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -4,10 +4,19 @@ import * as path from "path";
|
||||
import { setStatusBar } from "./setStatusBar";
|
||||
|
||||
export function getOutputDir(projectRoot: string, locale: string) {
|
||||
return path.resolve(
|
||||
projectRoot,
|
||||
`meta/screenshots/${device.getPlatform()}/${locale}/`
|
||||
);
|
||||
const store = device.getPlatform() === "ios" ? "apple" : "google";
|
||||
return path.resolve(projectRoot, `merch/${store}/preview/${locale}/`);
|
||||
}
|
||||
|
||||
function resolveName(str: string) {
|
||||
if (str && device.getPlatform() === "ios" && typeof str === "string") {
|
||||
// Convert a name like: `E9EA2214-6B88-4223-9872-8232168088FB {"type":"iPhone 12 Pro Max"}`
|
||||
// to `iPhone 12 Pro Max`
|
||||
// Name is important for screenshot sorting
|
||||
const match = str.match(/"type"\s?:\s?"(.*)"}/i)?.[1];
|
||||
return match || str;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
export async function takeScreenshotAsync({
|
||||
@@ -27,8 +36,9 @@ export async function takeScreenshotAsync({
|
||||
if (index == null) {
|
||||
index = fs.readdirSync(outputDir).length;
|
||||
}
|
||||
const deviceName = resolveName(device.name);
|
||||
|
||||
const name = `APP_${device.name}_${index}`.toUpperCase();
|
||||
const name = `APP_${deviceName}-${index}`;
|
||||
const imgPath = path.resolve(outputDir, `${name}.png`);
|
||||
const imagePath = await device.takeScreenshot(name);
|
||||
await fs.promises.copyFile(imagePath, imgPath);
|
||||
@@ -58,7 +68,7 @@ export function createCapture({
|
||||
clearAsync,
|
||||
async resetAppAsync() {
|
||||
// Clear old screen shots
|
||||
await clearAsync();
|
||||
// await clearAsync();
|
||||
// configure status bars
|
||||
|
||||
setStatusBar();
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import "react-native-gesture-handler";
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import Constants from "expo-constants";
|
||||
|
||||
+15
-35
@@ -3,6 +3,7 @@
|
||||
"main": "./index.js",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"detox:clean": "detox clean-framework-cache && detox build-framework-cache",
|
||||
"build:ios": "detox build -c ios.sim.debug",
|
||||
"test:ios": "detox test -c ios.sim.debug",
|
||||
"e2e:ios": "npm run build:ios && npm run test:ios",
|
||||
@@ -13,7 +14,7 @@
|
||||
"test:android": "detox test -c android.emu.debug",
|
||||
"e2e:android": "npm run build:android && npm run test:android",
|
||||
"build:android-release": "detox build -c android.emu.release",
|
||||
"test:android-release": "detox test -c android.emu.release",
|
||||
"test:android-release": "detox test -c android.emu.release --headless",
|
||||
"e2e:android-release": "npm run build:android-release && npm run test:android-release",
|
||||
"clean:android": "pushd android && ./gradlew clean && popd",
|
||||
"start": "expo start --dev-client",
|
||||
@@ -21,48 +22,27 @@
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/android-jsc-intl": "1.0.0",
|
||||
"@config-plugins/detox": "1.0.0",
|
||||
"@config-plugins/ffmpeg-kit-react-native": "1.0.0",
|
||||
"@config-plugins/ios-stickers": "1.0.0",
|
||||
"@config-plugins/react-native-adjust": "1.0.0",
|
||||
"@config-plugins/react-native-ble-plx": "1.0.0",
|
||||
"@config-plugins/react-native-blob-util": "1.0.0",
|
||||
"@config-plugins/react-native-branch": "1.0.0",
|
||||
"@config-plugins/react-native-callkeep": "1.0.0",
|
||||
"@config-plugins/react-native-dynamic-app-icon": "1.0.0",
|
||||
"@config-plugins/react-native-google-cast": "1.0.0",
|
||||
"@config-plugins/react-native-pdf": "1.0.0",
|
||||
"@config-plugins/react-native-quick-actions": "1.0.0",
|
||||
"@config-plugins/react-native-webrtc": "1.0.0",
|
||||
"expo": "^44.0.0",
|
||||
"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",
|
||||
"@config-plugins/detox": "^1.0.0",
|
||||
"expo": "^43.0.0",
|
||||
"expo-localization": "~11.0.0",
|
||||
"expo-splash-screen": "~0.13.5",
|
||||
"expo-status-bar": "~1.1.0",
|
||||
"expo-updates": "~0.10.13",
|
||||
"ffmpeg-kit-react-native": "^4.5.0",
|
||||
"i18n-js": "^3.8.0",
|
||||
"luxon": "^1.27.0",
|
||||
"react": "17.0.1",
|
||||
"react-dom": "17.0.1",
|
||||
"react-native": "0.64.3",
|
||||
"react-native-adjust": "^4.29.5",
|
||||
"react-native-blob-util": "^0.13.17",
|
||||
"react-native-callkeep": "^4.2.0",
|
||||
"react-native-branch": "^5.3.0",
|
||||
"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-reanimated": "~2.2.0",
|
||||
"react-native-safe-area-context": "3.3.2",
|
||||
"react-native-web": "0.17.1",
|
||||
"react-native-webrtc": "^1.89.3"
|
||||
"react-native-screens": "~3.8.0",
|
||||
"react-dom": "17.0.1",
|
||||
"react-native-gesture-handler": "~1.10.2",
|
||||
"react-native-web": "0.17.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9",
|
||||
"@babel/plugin-syntax-jsx": "^7.16.0",
|
||||
"@expo/metro-config": "~0.3.7",
|
||||
"@expo/metro-config": "~0.3.0",
|
||||
"@expo/xcpretty": "^4.1.0",
|
||||
"@types/jest": "^26.0.19",
|
||||
"@types/luxon": "^1.27.1",
|
||||
@@ -70,7 +50,7 @@
|
||||
"@types/react-native": "~0.64.12",
|
||||
"babel-jest": "~25.2.6",
|
||||
"detox": "^19.1.0",
|
||||
"jest": "^26.6.3",
|
||||
"jest": "^26.5.0",
|
||||
"jest-circus": "^26.5.2",
|
||||
"ts-jest": "^26.4.4",
|
||||
"typescript": "~4.3.5"
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
import React from "react";
|
||||
import { SafeAreaView, Text, StyleSheet } from "react-native";
|
||||
import { Adjust, AdjustConfig } from "react-native-adjust";
|
||||
|
||||
export default function App() {
|
||||
React.useEffect(() => {
|
||||
const adjustConfig = new AdjustConfig(
|
||||
"APP_TOKEN",
|
||||
AdjustConfig.EnvironmentSandbox
|
||||
);
|
||||
Adjust.create(adjustConfig);
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<SafeAreaView style={styles.container}>
|
||||
<Text>Adjust SDK</Text>
|
||||
</SafeAreaView>
|
||||
);
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
},
|
||||
});
|
||||
+1
-18
@@ -1,13 +1,9 @@
|
||||
{
|
||||
"name": "@config-plugins/repo",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"postinstall": "expo-yarn-workspaces check-workspace-dependencies",
|
||||
"gen": "ts-node ./scripts/generate-plugin.ts",
|
||||
"update-issue-template": "ts-node ./scripts/gh-issues-config.ts",
|
||||
"start": "lerna run build --parallel -- --watch",
|
||||
"prepare": "lerna run prepare --parallel"
|
||||
"start": "lerna run build --parallel -- --watch"
|
||||
},
|
||||
"workspaces": [
|
||||
"apps/*",
|
||||
@@ -15,21 +11,8 @@
|
||||
],
|
||||
"devDependencies": {
|
||||
"@expo/package-manager": "^0.0.43",
|
||||
"@semantic-release/changelog": "^6.0.1",
|
||||
"@semantic-release/commit-analyzer": "^9.0.2",
|
||||
"@semantic-release/error": "^3.0.0",
|
||||
"@semantic-release/exec": "^6.0.3",
|
||||
"@semantic-release/git": "^10.0.1",
|
||||
"@semantic-release/github": "^8.0.2",
|
||||
"@semantic-release/npm": "^9.0.1",
|
||||
"@semantic-release/release-notes-generator": "^10.0.3",
|
||||
"conventional-changelog-conventionalcommits": "^4.6.3",
|
||||
"multi-semantic-release": "^2.11.1",
|
||||
"semantic-release": "^19.0.2",
|
||||
"@types/js-yaml": "^4.0.5",
|
||||
"@types/prompts": "^2.0.13",
|
||||
"expo-yarn-workspaces": "^1.5.1",
|
||||
"js-yaml": "^4.1.0",
|
||||
"lerna": "3.4.1",
|
||||
"prettier": "^2.2.1",
|
||||
"prompts": "^2.4.1",
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
## @config-plugins/android-jsc-intl 1.0.0 (2022-03-15)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Intl support for android via withAndroidJscIntl ([eb6642c](https://github.com/expo/config-plugins/commit/eb6642c0e7b37d6d9baf196ec40cc520f559e665))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* remove createPluginOnce ([68cf1c0](https://github.com/expo/config-plugins/commit/68cf1c07b2c48249cbbd0732668ea95455636a0b))
|
||||
* run expo prepare ([8d364ed](https://github.com/expo/config-plugins/commit/8d364ed99ea4b0e0e3af73dbcc780819bf55d6c2))
|
||||
|
||||
|
||||
### Other chores
|
||||
|
||||
* upgrade @expo/config-plugins ([#49](https://github.com/expo/config-plugins/issues/49)) ([119e31e](https://github.com/expo/config-plugins/commit/119e31edf110409272ace750f02d651124e1a22d))
|
||||
|
||||
|
||||
### Documentation changes
|
||||
|
||||
* clarify readme ([b524633](https://github.com/expo/config-plugins/commit/b5246338cb37ae41d138bc6253703b0d438fc3e3))
|
||||
@@ -6,7 +6,7 @@ Adding this plugin lets you use `Intl` in your Android app, without using Hermes
|
||||
|
||||
## Expo installation
|
||||
|
||||
> Tested against Expo SDK 44
|
||||
> Tested against Expo SDK 43
|
||||
|
||||
This package cannot be used in the "Expo Go" app because [it requires custom native code](https://docs.expo.io/workflow/customizing/).
|
||||
|
||||
|
||||
@@ -1,15 +1,10 @@
|
||||
{
|
||||
"name": "@config-plugins/android-jsc-intl",
|
||||
"version": "0.0.2",
|
||||
"version": "0.0.1",
|
||||
"description": "Config plugin for android-jsc-intl package",
|
||||
"main": "build/withAndroidJscIntl.js",
|
||||
"types": "build/withAndroidJscIntl.d.ts",
|
||||
"sideEffects": false,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/expo/config-plugins.git",
|
||||
"directory": "packages/android-jsc-intl"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "expo-module build",
|
||||
"clean": "expo-module clean",
|
||||
@@ -31,7 +26,7 @@
|
||||
"preset": "expo-module-scripts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/config-plugins": "^4.1.0"
|
||||
"@expo/config-plugins": "^4.0.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"expo-module-scripts": "^2.0.0"
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
## @config-plugins/detox 1.0.0 (2022-03-15)
|
||||
|
||||
|
||||
### Other chores
|
||||
|
||||
* upgrade @expo/config-plugins ([#49](https://github.com/expo/config-plugins/issues/49)) ([119e31e](https://github.com/expo/config-plugins/commit/119e31edf110409272ace750f02d651124e1a22d))
|
||||
* **networkConfig:** Fix android crash on empty subdomains config ([#46](https://github.com/expo/config-plugins/issues/46)) ([88e0cd0](https://github.com/expo/config-plugins/commit/88e0cd0ccfdcc337e9c03f318d781aa1097e148b)), closes [#3](https://github.com/expo/config-plugins/issues/3)
|
||||
@@ -8,15 +8,14 @@ Ensure you use versions that work together!
|
||||
|
||||
| `expo` | `detox` | `@config-plugins/detox` |
|
||||
| ------ | ------- | ----------------------- |
|
||||
| 44.0.0 | 19.1.0 | ^1.1.0 |
|
||||
| 43.0.0 | 19.1.0 | ~1.0.0 |
|
||||
| 40.0.0 | 18.6.2 | ~0.0.0 |
|
||||
| 43.0.0 | 19.1.0 | 1.0.0 |
|
||||
| 40.0.0 | 18.6.2 | 0.0.0 |
|
||||
|
||||
Most notably, the minimum required Kotlin version changed from `1.3.50` in SDK 40 to `1.4.21` in SDK 43. Failure to use the correct versioning could result in Android build errors like `Execution failed for task ':react-native-screens:compileDebugKotlin'.` or `Execution failed for task ':expo:compileDebugKotlin'.`.
|
||||
|
||||
### Add the package to your npm dependencies
|
||||
|
||||
> Tested against Expo SDK 44
|
||||
> Tested against Expo SDK 43
|
||||
|
||||
```
|
||||
yarn add detox @config-plugins/detox
|
||||
@@ -53,29 +52,6 @@ Detox is an end-to-end (e2e) testing library for iOS and Android. You can use it
|
||||
- Generate the native code `expo prebuild`
|
||||
- Run `yarn detox init -r jest`
|
||||
|
||||
## API
|
||||
|
||||
The plugin provides props for extra customization. Every time you change the props or plugins, you'll need to rebuild (and `prebuild`) the native app. If no extra properties are added, defaults will be used.
|
||||
|
||||
- `skipProguard` (_boolean_): Disable adding proguard minification to the `app/build.gradle`. Defaults to `false`.
|
||||
- `subdomains` (_string[] | '\*'_): Hostnames to add to the network security config. Pass `'*'` to allow all domains. Defaults to `['10.0.2.2', 'localhost']`.
|
||||
|
||||
`app.config.js`
|
||||
|
||||
```ts
|
||||
export default {
|
||||
plugins: [
|
||||
[
|
||||
"@config-plugins/detox",
|
||||
{
|
||||
skipProguard: false,
|
||||
subdomains: ["10.0.2.2", "localhost"],
|
||||
},
|
||||
],
|
||||
],
|
||||
};
|
||||
```
|
||||
|
||||
## FAQ
|
||||
|
||||
If the following commands fail, you can get better debug info by running a subset command:
|
||||
|
||||
+1
-3
@@ -1,5 +1,4 @@
|
||||
import { ConfigPlugin } from "@expo/config-plugins";
|
||||
import { SubdomainsType } from "./withNetworkSecurityConfig";
|
||||
declare const _default: ConfigPlugin<void | {
|
||||
/**
|
||||
* Disable adding proguard minification to the `app/build.gradle`.
|
||||
@@ -10,10 +9,9 @@ declare const _default: ConfigPlugin<void | {
|
||||
/**
|
||||
* Subdomains to add to the network security config.
|
||||
* Pass `['10.0.3.2', 'localhost']` to use Genymotion emulators instead of Google emulators.
|
||||
* Pass `*` to allow all domains.
|
||||
*
|
||||
* @default ['10.0.2.2', 'localhost'] // (Google emulators)
|
||||
*/
|
||||
subdomains?: SubdomainsType | undefined;
|
||||
subdomains?: string[] | undefined;
|
||||
}>;
|
||||
export default _default;
|
||||
+2
-3
@@ -1,9 +1,8 @@
|
||||
import { ConfigPlugin } from "@expo/config-plugins";
|
||||
export declare type SubdomainsType = string[] | "*";
|
||||
export declare function getTemplateFile(subdomains: SubdomainsType): string;
|
||||
export declare function getTemplateFile(subdomains: string[]): string;
|
||||
/**
|
||||
* [Step 6](https://github.com/wix/Detox/blob/master/docs/Introduction.Android.md#6-enable-clear-text-unencrypted-traffic-for-detox). Link the `network_security_config.xml` file to the `AndroidManifest.xml`.
|
||||
*/
|
||||
export declare const withNetworkSecurityConfigManifest: ConfigPlugin<{
|
||||
subdomains: SubdomainsType;
|
||||
subdomains: string[];
|
||||
} | void>;
|
||||
+6
-21
@@ -27,27 +27,16 @@ const config_plugins_1 = require("@expo/config-plugins");
|
||||
const path = __importStar(require("path"));
|
||||
const fs = __importStar(require("fs"));
|
||||
const assert_1 = __importDefault(require("assert"));
|
||||
function getTemplateConfigContent(subdomains) {
|
||||
if (subdomains === "*") {
|
||||
// allow all domains
|
||||
return '<base-config cleartextTrafficPermitted="true" />';
|
||||
}
|
||||
return `
|
||||
function getTemplateFile(subdomains) {
|
||||
return `<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<domain-config cleartextTrafficPermitted="true">
|
||||
${subdomains
|
||||
${subdomains
|
||||
.map((subdomain) => `<domain includeSubdomains="true">${subdomain}</domain>`)
|
||||
.join("")}
|
||||
</domain-config>
|
||||
`;
|
||||
}
|
||||
function getTemplateFile(subdomains) {
|
||||
const content = getTemplateConfigContent(subdomains);
|
||||
return `
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
${content}
|
||||
</network-security-config>
|
||||
`;
|
||||
</network-security-config>
|
||||
`;
|
||||
}
|
||||
exports.getTemplateFile = getTemplateFile;
|
||||
/**
|
||||
@@ -76,10 +65,6 @@ const withNetworkSecurityConfigManifest = (config, props) => {
|
||||
// https://developer.android.com/training/articles/security-config
|
||||
props = { subdomains: ["10.0.2.2", "localhost"] };
|
||||
}
|
||||
if (typeof props.subdomains === "object" && !props.subdomains.length) {
|
||||
// if subdomains is an empty array, skip network config mod
|
||||
return config;
|
||||
}
|
||||
config = withNetworkSecurityConfigFile(config, props);
|
||||
return config_plugins_1.withAndroidManifest(config, (config) => {
|
||||
const application = config_plugins_1.AndroidConfig.Manifest.getMainApplicationOrThrow(config.modResults);
|
||||
|
||||
+4
-4
@@ -26,10 +26,10 @@ function addDetoxProguardRules(buildGradle) {
|
||||
return buildGradle;
|
||||
}
|
||||
return buildGradle.replace(/proguardFiles getDefaultProguardFile\("proguard-android.txt"\),\s?"proguard-rules.pro"/, `proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
|
||||
// Detox-specific additions to pro-guard
|
||||
def detoxProguardRulesPath = new File(["node", "--print", "require.resolve('detox/package.json')"].execute(null, rootDir).text.trim(), "../android/detox/proguard-rules-app.pro")
|
||||
proguardFile(detoxProguardRulesPath)
|
||||
`);
|
||||
// Detox-specific additions to pro-guard
|
||||
def detoxProguardRulesPath = new File(["node", "--print", "require.resolve('detox/package.json')"].execute(null, rootDir).text.trim(), "../android/detox/proguard-rules-app.pro")
|
||||
proguardFile(detoxProguardRulesPath)
|
||||
`);
|
||||
}
|
||||
exports.addDetoxProguardRules = addDetoxProguardRules;
|
||||
exports.default = withProguardGradle;
|
||||
@@ -1,15 +1,10 @@
|
||||
{
|
||||
"name": "@config-plugins/detox",
|
||||
"version": "1.2.0",
|
||||
"version": "1.1.0",
|
||||
"description": "Config plugin to auto configure detox on prebuild",
|
||||
"main": "build/withDetox.js",
|
||||
"types": "build/withDetox.d.ts",
|
||||
"sideEffects": false,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/expo/config-plugins.git",
|
||||
"directory": "packages/detox"
|
||||
},
|
||||
"files": [
|
||||
"build",
|
||||
"app.plugin.js"
|
||||
@@ -30,10 +25,9 @@
|
||||
"e2e"
|
||||
],
|
||||
"dependencies": {
|
||||
"@expo/config-plugins": "^4.1.0"
|
||||
"@expo/config-plugins": "^4.0.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"expo-module-scripts": "^2.0.0"
|
||||
},
|
||||
"upstreamPackage": "detox"
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`getTemplateFile returns domain-config when subdomains is an array 1`] = `
|
||||
"
|
||||
<?xml version=\\"1.0\\" encoding=\\"utf-8\\"?>
|
||||
<network-security-config>
|
||||
|
||||
<domain-config cleartextTrafficPermitted=\\"true\\">
|
||||
<domain includeSubdomains=\\"true\\">localhost</domain>
|
||||
</domain-config>
|
||||
|
||||
</network-security-config>
|
||||
"
|
||||
`;
|
||||
|
||||
exports[`getTemplateFile returns only base-config when subdomains is '*' 1`] = `
|
||||
"
|
||||
<?xml version=\\"1.0\\" encoding=\\"utf-8\\"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted=\\"true\\" />
|
||||
</network-security-config>
|
||||
"
|
||||
`;
|
||||
|
||||
exports[`withNetworkSecurityConfigManifest doesn't modify config if subdomains is an empty array 1`] = `
|
||||
Object {
|
||||
"name": "foo",
|
||||
"slug": "bar",
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`withNetworkSecurityConfigManifest modifies config if subdomains is not empty 1`] = `
|
||||
Object {
|
||||
"mods": Object {
|
||||
"android": Object {
|
||||
"dangerous": [Function],
|
||||
"manifest": [Function],
|
||||
},
|
||||
},
|
||||
"name": "foo",
|
||||
"slug": "bar",
|
||||
}
|
||||
`;
|
||||
@@ -1,38 +0,0 @@
|
||||
import {
|
||||
getTemplateFile,
|
||||
withNetworkSecurityConfigManifest,
|
||||
} from "../withNetworkSecurityConfig";
|
||||
|
||||
describe(getTemplateFile, () => {
|
||||
it(`returns only base-config when subdomains is '*'`, () => {
|
||||
const content = getTemplateFile("*");
|
||||
expect(content).toMatchSnapshot();
|
||||
expect(content).toMatch(/base\-config/);
|
||||
expect(content).not.toMatch(/domain\-config/);
|
||||
});
|
||||
it(`returns domain-config when subdomains is an array`, () => {
|
||||
const content = getTemplateFile(["localhost"]);
|
||||
expect(content).toMatchSnapshot();
|
||||
expect(content).toMatch(/domain\-config/);
|
||||
expect(content).toMatch(/localhost/);
|
||||
});
|
||||
});
|
||||
|
||||
const exp = { name: "foo", slug: "bar" };
|
||||
|
||||
describe(withNetworkSecurityConfigManifest, () => {
|
||||
it(`doesn't modify config if subdomains is an empty array`, () => {
|
||||
const applied = withNetworkSecurityConfigManifest(exp, {
|
||||
subdomains: [],
|
||||
});
|
||||
expect(applied).toMatchSnapshot();
|
||||
expect(applied).toStrictEqual(exp);
|
||||
});
|
||||
it(`modifies config if subdomains is not empty`, () => {
|
||||
const applied = withNetworkSecurityConfigManifest(exp, {
|
||||
subdomains: ["10.0.2.2"],
|
||||
});
|
||||
expect(applied).toMatchSnapshot();
|
||||
expect(applied).toHaveProperty("mods.android");
|
||||
});
|
||||
});
|
||||
@@ -8,7 +8,7 @@ import withDetoxProjectGradle from "./withDetoxProjectGradle";
|
||||
import withDetoxTestAppGradle from "./withDetoxTestAppGradle";
|
||||
import { withDetoxTestClass } from "./withDetoxTestClass";
|
||||
import withKotlinGradle from "./withKotlinGradle";
|
||||
import { withNetworkSecurityConfigManifest, SubdomainsType } from "./withNetworkSecurityConfig";
|
||||
import { withNetworkSecurityConfigManifest } from "./withNetworkSecurityConfig";
|
||||
import withProguardGradle from "./withProguardGradle";
|
||||
|
||||
const withDetox: ConfigPlugin<{
|
||||
@@ -21,11 +21,10 @@ const withDetox: ConfigPlugin<{
|
||||
/**
|
||||
* Subdomains to add to the network security config.
|
||||
* Pass `['10.0.3.2', 'localhost']` to use Genymotion emulators instead of Google emulators.
|
||||
* Pass `*` to allow all domains.
|
||||
*
|
||||
* @default ['10.0.2.2', 'localhost'] // (Google emulators)
|
||||
*/
|
||||
subdomains?: SubdomainsType;
|
||||
subdomains?: string[];
|
||||
} | void> = (config, { skipProguard, subdomains } = {}) => {
|
||||
return withPlugins(
|
||||
config,
|
||||
|
||||
@@ -8,41 +8,28 @@ import * as path from "path";
|
||||
import * as fs from "fs";
|
||||
import assert from "assert";
|
||||
|
||||
export type SubdomainsType = string[] | "*";
|
||||
|
||||
function getTemplateConfigContent(subdomains: SubdomainsType) {
|
||||
if (subdomains === "*") {
|
||||
// allow all domains
|
||||
return '<base-config cleartextTrafficPermitted="true" />';
|
||||
}
|
||||
return `
|
||||
export function getTemplateFile(subdomains: string[]): string {
|
||||
return `<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<domain-config cleartextTrafficPermitted="true">
|
||||
${subdomains
|
||||
.map(
|
||||
(subdomain) =>
|
||||
`<domain includeSubdomains="true">${subdomain}</domain>`
|
||||
)
|
||||
.join("")}
|
||||
${subdomains
|
||||
.map(
|
||||
(subdomain) =>
|
||||
`<domain includeSubdomains="true">${subdomain}</domain>`
|
||||
)
|
||||
.join("")}
|
||||
</domain-config>
|
||||
`;
|
||||
}
|
||||
|
||||
export function getTemplateFile(subdomains: SubdomainsType): string {
|
||||
const content = getTemplateConfigContent(subdomains);
|
||||
return `
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
${content}
|
||||
</network-security-config>
|
||||
`;
|
||||
</network-security-config>
|
||||
`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create `network_security_config.xml` resource file.
|
||||
*/
|
||||
const withNetworkSecurityConfigFile: ConfigPlugin<{
|
||||
subdomains: SubdomainsType;
|
||||
}> = (config, { subdomains }) => {
|
||||
const withNetworkSecurityConfigFile: ConfigPlugin<{ subdomains: string[] }> = (
|
||||
config,
|
||||
{ subdomains }
|
||||
) => {
|
||||
return withDangerousMod(config, [
|
||||
"android",
|
||||
async (config) => {
|
||||
@@ -66,22 +53,14 @@ const withNetworkSecurityConfigFile: ConfigPlugin<{
|
||||
/**
|
||||
* [Step 6](https://github.com/wix/Detox/blob/master/docs/Introduction.Android.md#6-enable-clear-text-unencrypted-traffic-for-detox). Link the `network_security_config.xml` file to the `AndroidManifest.xml`.
|
||||
*/
|
||||
export const withNetworkSecurityConfigManifest: ConfigPlugin<
|
||||
{
|
||||
subdomains: SubdomainsType;
|
||||
} | void
|
||||
> = (config, props) => {
|
||||
export const withNetworkSecurityConfigManifest: ConfigPlugin<{
|
||||
subdomains: string[];
|
||||
} | void> = (config, props) => {
|
||||
if (!props || !props.subdomains) {
|
||||
// (*) 10.0.2.2 for Google emulators, 10.0.3.2 for Genymotion emulators.
|
||||
// https://developer.android.com/training/articles/security-config
|
||||
props = { subdomains: ["10.0.2.2", "localhost"] };
|
||||
}
|
||||
|
||||
if (typeof props.subdomains === "object" && !props.subdomains.length) {
|
||||
// if subdomains is an empty array, skip network config mod
|
||||
return config;
|
||||
}
|
||||
|
||||
config = withNetworkSecurityConfigFile(config, props);
|
||||
return withAndroidManifest(config, (config) => {
|
||||
const application = AndroidConfig.Manifest.getMainApplicationOrThrow(
|
||||
|
||||
@@ -4,7 +4,7 @@ Config plugin to auto configure ffmpeg-kit-react-native when the native code is
|
||||
|
||||
## Expo installation
|
||||
|
||||
> Tested against Expo SDK 44. Most packages worked on iOS. Not all packages have been tested on Android.
|
||||
> Tested against Expo SDK 43. Only the `min` package appeared to work on Android. Most packages worked on iOS.
|
||||
|
||||
> This package cannot be used in the "Expo Go" app because [it requires custom native code](https://docs.expo.io/workflow/customizing/).
|
||||
> First install the package with yarn, npm, or [`expo install`](https://docs.expo.io/workflow/expo-cli/#expo-install).
|
||||
|
||||
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.updateDeploymentTargetXcodeProject = exports.updateDeploymentTargetPodfile = exports.withIosDeploymentTarget = void 0;
|
||||
// Copied from https://github.com/expo/expo-cli/blob/main/packages/install-expo-modules/src/plugins/ios/withIosDeploymentTarget.ts
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
const fs_1 = __importDefault(require("fs"));
|
||||
const path_1 = __importDefault(require("path"));
|
||||
|
||||
@@ -1,15 +1,10 @@
|
||||
{
|
||||
"name": "@config-plugins/ffmpeg-kit-react-native",
|
||||
"version": "0.0.1",
|
||||
"version": "0.0.0",
|
||||
"description": "Config plugin to auto configure FFMPEG on prebuild",
|
||||
"main": "build/withFFMPEG.js",
|
||||
"types": "build/withFFMPEG.d.ts",
|
||||
"sideEffects": false,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/expo/config-plugins.git",
|
||||
"directory": "packages/ffmpeg-kit-react-native"
|
||||
},
|
||||
"files": [
|
||||
"build",
|
||||
"app.plugin.js"
|
||||
@@ -32,12 +27,11 @@
|
||||
"preset": "expo-module-scripts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/config-plugins": "^4.1.0",
|
||||
"@expo/config-plugins": "^4.0.7",
|
||||
"semver": "^7.3.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/semver": "^7.3.9",
|
||||
"expo-module-scripts": "^2.0.0"
|
||||
},
|
||||
"upstreamPackage": "ffmpeg-kit-react-native"
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ Config plugin to auto configure iOS iMessage stickers
|
||||
|
||||
## Install
|
||||
|
||||
> Tested against Expo SDK 44
|
||||
> Tested against Expo SDK 43
|
||||
|
||||
```
|
||||
yarn add @config-plugins/ios-stickers
|
||||
|
||||
Generated
-58
@@ -1,58 +0,0 @@
|
||||
{
|
||||
"title": "@config-plugins/ios-stickers options",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$ref": "#/definitions/Props",
|
||||
"definitions": {
|
||||
"Props": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"stickers": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"$ref": "#/definitions/Sticker"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"icon": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"columns": {
|
||||
"type": "number",
|
||||
"enum": [
|
||||
2,
|
||||
3,
|
||||
4
|
||||
]
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"Sticker": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"image": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"accessibilityLabel": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"image"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -95,6 +95,7 @@ const withStickerAssets = (config, { stickers, icon, size }) => {
|
||||
projectRoot: config.modRequest.projectRoot,
|
||||
cacheType: "ios-stickers",
|
||||
}, {
|
||||
resizeMode: "contain",
|
||||
src,
|
||||
});
|
||||
// let results;
|
||||
|
||||
+1
-6
@@ -4,8 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.normalizeStickersProps = void 0;
|
||||
const schema_utils_1 = require("schema-utils");
|
||||
const options_json_1 = __importDefault(require("./options.json"));
|
||||
const withStickerAssets_1 = require("./withStickerAssets");
|
||||
const withStickerInfoPlist_1 = require("./withStickerInfoPlist");
|
||||
const withStickerXcodeTarget_1 = require("./withStickerXcodeTarget");
|
||||
@@ -31,10 +29,7 @@ function normalizeStickersProps(props = []) {
|
||||
});
|
||||
}
|
||||
exports.normalizeStickersProps = normalizeStickersProps;
|
||||
const withStickerPack = (config, options = {}) => {
|
||||
// Perform option validation.
|
||||
schema_utils_1.validate(options_json_1.default, options);
|
||||
const { stickers, icon, name, columns = 3 } = options;
|
||||
const withStickerPack = (config, { stickers, icon, name, columns = 3 } = {}) => {
|
||||
const size = sizeColumnMap[columns] || "regular";
|
||||
if (!size) {
|
||||
throw new Error(`Column size "${columns}" is invalid. Expected one of: ${Object.keys(sizeColumnMap).join(", ")}`);
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('expo-module-scripts/jest-preset-plugin');
|
||||
@@ -5,11 +5,6 @@
|
||||
"main": "build/withStickerPack.js",
|
||||
"types": "build/withStickerPack.d.ts",
|
||||
"sideEffects": false,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/expo/config-plugins.git",
|
||||
"directory": "packages/ios-stickers"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "expo-module build",
|
||||
"clean": "expo-module clean",
|
||||
@@ -23,10 +18,12 @@
|
||||
"react",
|
||||
"expo"
|
||||
],
|
||||
"jest": {
|
||||
"preset": "expo-module-scripts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/config-plugins": "^4.1.0",
|
||||
"@expo/config-plugins": "^4.0.7",
|
||||
"@expo/image-utils": "^0.3.17",
|
||||
"schema-utils": "^4.0.0",
|
||||
"xcode": "^3.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
import withStickerPack from "../withStickerPack";
|
||||
|
||||
const exp = { name: "foo", slug: "bar" };
|
||||
describe(withStickerPack, () => {
|
||||
it("should not throw when options are valid", () => {
|
||||
expect(() =>
|
||||
withStickerPack(exp, {
|
||||
name: "test",
|
||||
stickers: [{ image: "test.png" }],
|
||||
columns: 2,
|
||||
icon: "test.png",
|
||||
})
|
||||
).not.toThrow();
|
||||
});
|
||||
it("should not throw when no options are provided", () => {
|
||||
expect(() => withStickerPack(exp, {})).not.toThrow();
|
||||
});
|
||||
it("should throw if columns is not a number", () => {
|
||||
expect(() => {
|
||||
withStickerPack(exp, {
|
||||
stickers: [],
|
||||
icon: "",
|
||||
name: "",
|
||||
columns: "3",
|
||||
} as any);
|
||||
}).toThrowErrorMatchingInlineSnapshot(`
|
||||
"Invalid options object. @config-plugins/ios-stickers has been initialized using an options object that does not match the API schema.
|
||||
- options.columns should be one of these:
|
||||
2 | 3 | 4"
|
||||
`);
|
||||
});
|
||||
});
|
||||
@@ -1,58 +0,0 @@
|
||||
{
|
||||
"title": "@config-plugins/ios-stickers options",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$ref": "#/definitions/Props",
|
||||
"definitions": {
|
||||
"Props": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"stickers": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"$ref": "#/definitions/Sticker"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"icon": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"columns": {
|
||||
"type": "number",
|
||||
"enum": [
|
||||
2,
|
||||
3,
|
||||
4
|
||||
]
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"Sticker": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"image": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"accessibilityLabel": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"image"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -173,6 +173,7 @@ export const withStickerAssets: ConfigPlugin<{
|
||||
cacheType: "ios-stickers",
|
||||
},
|
||||
{
|
||||
resizeMode: "contain",
|
||||
src,
|
||||
} as any
|
||||
);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import { ConfigPlugin } from "@expo/config-plugins";
|
||||
import { validate } from "schema-utils";
|
||||
import schema from "./options.json";
|
||||
|
||||
import { Props, Sticker, withStickerAssets } from "./withStickerAssets";
|
||||
import { withStickersPlist } from "./withStickerInfoPlist";
|
||||
import { withStickerXcodeTarget } from "./withStickerXcodeTarget";
|
||||
@@ -31,12 +30,10 @@ export function normalizeStickersProps(
|
||||
});
|
||||
}
|
||||
|
||||
const withStickerPack: ConfigPlugin<Props> = (config, options = {}) => {
|
||||
// Perform option validation.
|
||||
validate(schema as any, options);
|
||||
|
||||
const { stickers, icon, name, columns = 3 } = options;
|
||||
|
||||
const withStickerPack: ConfigPlugin<Props> = (
|
||||
config,
|
||||
{ stickers, icon, name, columns = 3 } = {}
|
||||
) => {
|
||||
const size = sizeColumnMap[columns] || "regular";
|
||||
if (!size) {
|
||||
throw new Error(
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
{
|
||||
"extends": "expo-module-scripts/tsconfig.plugin",
|
||||
"compilerOptions": {
|
||||
"outDir": "./build",
|
||||
"resolveJsonModule": true
|
||||
"outDir": "./build"
|
||||
},
|
||||
"include": ["./src"],
|
||||
"exclude": ["**/__mocks__/*", "**/__tests__/*"]
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
// @generated by expo-module-scripts
|
||||
module.exports = require('expo-module-scripts/eslintrc.base.js');
|
||||
@@ -1,42 +0,0 @@
|
||||
# @config-plugins/react-native-adjust
|
||||
|
||||
Expo Config Plugin to auto configure [`react-native-adjust`](https://www.npmjs.com/package/react-native-adjust) when the native code is generated (`expo prebuild`).
|
||||
|
||||
## Expo installation
|
||||
|
||||
> Tested against Expo SDK 44
|
||||
|
||||
This package cannot be used in the "Expo Go" app because [it requires custom native code](https://docs.expo.io/workflow/customizing/).
|
||||
|
||||
- First install the package with yarn, npm, or [`expo install`](https://docs.expo.io/workflow/expo-cli/#expo-install).
|
||||
|
||||
```sh
|
||||
expo install react-native-adjust @config-plugins/react-native-adjust
|
||||
```
|
||||
|
||||
After installing this npm package, add the [config plugin](https://docs.expo.io/guides/config-plugins/) to the [`plugins`](https://docs.expo.io/versions/latest/config/app/#plugins) array of your `app.json` or `app.config.js`:
|
||||
|
||||
```json
|
||||
{
|
||||
"expo": {
|
||||
"plugins": ["@config-plugins/react-native-adjust"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
If you are targeting Android 12 and above (API level 31), you need to add it in the options of the plugin:
|
||||
|
||||
```json
|
||||
{
|
||||
"expo": {
|
||||
"plugins": [
|
||||
"@config-plugins/react-native-adjust",
|
||||
{ "targetAndroid12": true }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This will add the [appropriate permission](https://github.com/adjust/react_native_sdk#add-permission-to-gather-google-advertising-id) for you.
|
||||
|
||||
Next, rebuild your app as described in the ["Adding custom native code"](https://docs.expo.io/workflow/customizing/) guide.
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require("./build/withReactNativeAdjust");
|
||||
-5
@@ -1,5 +0,0 @@
|
||||
import { ConfigPlugin } from "@expo/config-plugins";
|
||||
declare const _default: ConfigPlugin<void | {
|
||||
targetAndroid12?: boolean | undefined;
|
||||
}>;
|
||||
export default _default;
|
||||
-92
@@ -1,92 +0,0 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
const generateCode_1 = require("@expo/config-plugins/build/utils/generateCode");
|
||||
const withXcodeLinkBinaryWithLibraries = (config, { library, status }) => {
|
||||
return config_plugins_1.withXcodeProject(config, (config) => {
|
||||
const options = status === "optional" ? { weak: true } : {};
|
||||
const target = config_plugins_1.IOSConfig.XcodeUtils.getApplicationNativeTarget({
|
||||
project: config.modResults,
|
||||
projectName: config.modRequest.projectName,
|
||||
});
|
||||
config.modResults.addFramework(library, {
|
||||
target: target.uuid,
|
||||
...options,
|
||||
});
|
||||
return config;
|
||||
});
|
||||
};
|
||||
const addAndroidPackagingOptions = (src) => {
|
||||
return generateCode_1.mergeContents({
|
||||
tag: "react-native-play-services-analytics",
|
||||
src,
|
||||
newSrc: `
|
||||
implementation 'com.google.android.gms:play-services-analytics:18.0.0'
|
||||
implementation 'com.android.installreferrer:installreferrer:2.2'
|
||||
`,
|
||||
anchor: /dependencies(?:\s+)?\{/,
|
||||
// Inside the dependencies block.
|
||||
offset: 1,
|
||||
comment: "//",
|
||||
});
|
||||
};
|
||||
const withGradle = (config) => {
|
||||
return config_plugins_1.withAppBuildGradle(config, (config) => {
|
||||
if (config.modResults.language === "groovy") {
|
||||
config.modResults.contents = addAndroidPackagingOptions(config.modResults.contents).contents;
|
||||
}
|
||||
else {
|
||||
throw new Error("Cannot add Play Services maven gradle because the project build.gradle is not groovy");
|
||||
}
|
||||
return config;
|
||||
});
|
||||
};
|
||||
/**
|
||||
* Apply react-native-adjust configuration for Expo SDK +44 projects.
|
||||
*/
|
||||
const withAdjustPlugin = (config, _props) => {
|
||||
const props = _props || {};
|
||||
config = withXcodeLinkBinaryWithLibraries(config, {
|
||||
library: "iAd.framework",
|
||||
status: "optional",
|
||||
});
|
||||
config = withXcodeLinkBinaryWithLibraries(config, {
|
||||
library: "AdServices.framework",
|
||||
status: "optional",
|
||||
});
|
||||
config = withXcodeLinkBinaryWithLibraries(config, {
|
||||
library: "AdSupport.framework",
|
||||
status: "optional",
|
||||
});
|
||||
config = withXcodeLinkBinaryWithLibraries(config, {
|
||||
library: "StoreKit.framework",
|
||||
status: "optional",
|
||||
});
|
||||
config = withXcodeLinkBinaryWithLibraries(config, {
|
||||
library: "AppTrackingTransparency.framework",
|
||||
status: "optional",
|
||||
});
|
||||
if (props.targetAndroid12) {
|
||||
config = config_plugins_1.AndroidConfig.Version.withBuildScriptExtMinimumVersion(config, {
|
||||
name: "compileSdkVersion",
|
||||
minVersion: 31,
|
||||
});
|
||||
config = config_plugins_1.AndroidConfig.Permissions.withPermissions(config, [
|
||||
"com.google.android.gms.permission.AD_ID",
|
||||
]);
|
||||
}
|
||||
config = withGradle(config);
|
||||
// Return the modified config.
|
||||
return config;
|
||||
};
|
||||
const pkg = {
|
||||
// Prevent this plugin from being run more than once.
|
||||
// This pattern enables users to safely migrate off of this
|
||||
// out-of-tree `@config-plugins/react-native-adjust` to a future
|
||||
// upstream plugin in `react-native-adjust`
|
||||
name: "react-native-adjust",
|
||||
// Indicates that this plugin is dangerously linked to a module,
|
||||
// and might not work with the latest version of that module.
|
||||
version: "UNVERSIONED",
|
||||
};
|
||||
exports.default = config_plugins_1.createRunOncePlugin(withAdjustPlugin, pkg.name, pkg.version);
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"name": "@config-plugins/react-native-adjust",
|
||||
"version": "0.0.1",
|
||||
"description": "Config plugin to auto configure Adjust SDK on prebuild",
|
||||
"main": "build/withReactNativeAdjust.js",
|
||||
"types": "build/withReactNativeAdjust.d.ts",
|
||||
"sideEffects": false,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/expo/config-plugins.git",
|
||||
"directory": "packages/react-native-adjust"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "expo-module build",
|
||||
"clean": "expo-module clean",
|
||||
"lint": "expo-module lint",
|
||||
"test": "expo-module test",
|
||||
"prepare": "expo-module prepare",
|
||||
"prepublishOnly": "expo-module prepublishOnly",
|
||||
"expo-module": "expo-module"
|
||||
},
|
||||
"keywords": [
|
||||
"react",
|
||||
"expo",
|
||||
"config-plugins",
|
||||
"prebuild",
|
||||
"react-native-adjust",
|
||||
"expo-44"
|
||||
],
|
||||
"jest": {
|
||||
"preset": "expo-module-scripts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/config-plugins": "^4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"expo-module-scripts": "^2.0.0"
|
||||
},
|
||||
"upstreamPackage": "react-native-adjust"
|
||||
}
|
||||
@@ -1,124 +0,0 @@
|
||||
import {
|
||||
AndroidConfig,
|
||||
createRunOncePlugin,
|
||||
IOSConfig,
|
||||
withXcodeProject,
|
||||
withAppBuildGradle,
|
||||
ConfigPlugin,
|
||||
} from "@expo/config-plugins";
|
||||
import { mergeContents } from "@expo/config-plugins/build/utils/generateCode";
|
||||
|
||||
const withXcodeLinkBinaryWithLibraries: ConfigPlugin<{
|
||||
library: string;
|
||||
status?: string;
|
||||
}> = (config, { library, status }) => {
|
||||
return withXcodeProject(config, (config) => {
|
||||
const options = status === "optional" ? { weak: true } : {};
|
||||
|
||||
const target = IOSConfig.XcodeUtils.getApplicationNativeTarget({
|
||||
project: config.modResults,
|
||||
projectName: config.modRequest.projectName!,
|
||||
});
|
||||
|
||||
config.modResults.addFramework(library, {
|
||||
target: target.uuid,
|
||||
...options,
|
||||
});
|
||||
|
||||
return config;
|
||||
});
|
||||
};
|
||||
|
||||
const addAndroidPackagingOptions = (src: string) => {
|
||||
return mergeContents({
|
||||
tag: "react-native-play-services-analytics",
|
||||
src,
|
||||
newSrc: `
|
||||
implementation 'com.google.android.gms:play-services-analytics:18.0.0'
|
||||
implementation 'com.android.installreferrer:installreferrer:2.2'
|
||||
`,
|
||||
anchor: /dependencies(?:\s+)?\{/,
|
||||
// Inside the dependencies block.
|
||||
offset: 1,
|
||||
comment: "//",
|
||||
});
|
||||
};
|
||||
|
||||
const withGradle: ConfigPlugin = (config) => {
|
||||
return withAppBuildGradle(config, (config) => {
|
||||
if (config.modResults.language === "groovy") {
|
||||
config.modResults.contents = addAndroidPackagingOptions(
|
||||
config.modResults.contents
|
||||
).contents;
|
||||
} else {
|
||||
throw new Error(
|
||||
"Cannot add Play Services maven gradle because the project build.gradle is not groovy"
|
||||
);
|
||||
}
|
||||
return config;
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Apply react-native-adjust configuration for Expo SDK +44 projects.
|
||||
*/
|
||||
const withAdjustPlugin: ConfigPlugin<void | { targetAndroid12?: boolean }> = (
|
||||
config,
|
||||
_props
|
||||
) => {
|
||||
const props = _props || {};
|
||||
|
||||
config = withXcodeLinkBinaryWithLibraries(config, {
|
||||
library: "iAd.framework",
|
||||
status: "optional",
|
||||
});
|
||||
|
||||
config = withXcodeLinkBinaryWithLibraries(config, {
|
||||
library: "AdServices.framework",
|
||||
status: "optional",
|
||||
});
|
||||
|
||||
config = withXcodeLinkBinaryWithLibraries(config, {
|
||||
library: "AdSupport.framework",
|
||||
status: "optional",
|
||||
});
|
||||
|
||||
config = withXcodeLinkBinaryWithLibraries(config, {
|
||||
library: "StoreKit.framework",
|
||||
status: "optional",
|
||||
});
|
||||
|
||||
config = withXcodeLinkBinaryWithLibraries(config, {
|
||||
library: "AppTrackingTransparency.framework",
|
||||
status: "optional",
|
||||
});
|
||||
|
||||
if (props.targetAndroid12) {
|
||||
config = AndroidConfig.Version.withBuildScriptExtMinimumVersion(config, {
|
||||
name: "compileSdkVersion",
|
||||
minVersion: 31,
|
||||
});
|
||||
|
||||
config = AndroidConfig.Permissions.withPermissions(config, [
|
||||
"com.google.android.gms.permission.AD_ID",
|
||||
]);
|
||||
}
|
||||
|
||||
config = withGradle(config);
|
||||
|
||||
// Return the modified config.
|
||||
return config;
|
||||
};
|
||||
|
||||
const pkg = {
|
||||
// Prevent this plugin from being run more than once.
|
||||
// This pattern enables users to safely migrate off of this
|
||||
// out-of-tree `@config-plugins/react-native-adjust` to a future
|
||||
// upstream plugin in `react-native-adjust`
|
||||
name: "react-native-adjust",
|
||||
// Indicates that this plugin is dangerously linked to a module,
|
||||
// and might not work with the latest version of that module.
|
||||
version: "UNVERSIONED",
|
||||
};
|
||||
|
||||
export default createRunOncePlugin(withAdjustPlugin, pkg.name, pkg.version);
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"extends": "expo-module-scripts/tsconfig.plugin",
|
||||
"compilerOptions": {
|
||||
"outDir": "./build"
|
||||
},
|
||||
"include": ["./src"],
|
||||
"exclude": ["**/__mocks__/*", "**/__tests__/*"]
|
||||
}
|
||||
@@ -4,7 +4,7 @@ Config plugin to auto configure `react-native-ble-plx` when the native code is g
|
||||
|
||||
## Expo installation
|
||||
|
||||
> Tested against Expo SDK 44
|
||||
> Tested against Expo SDK 43
|
||||
|
||||
> This package cannot be used in the "Expo Go" app because [it requires custom native code](https://docs.expo.io/workflow/customizing/).
|
||||
> First install the package with yarn, npm, or [`expo install`](https://docs.expo.io/workflow/expo-cli/#expo-install).
|
||||
|
||||
@@ -5,11 +5,6 @@
|
||||
"main": "build/withBLE.js",
|
||||
"types": "build/withBLE.d.ts",
|
||||
"sideEffects": false,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/expo/config-plugins.git",
|
||||
"directory": "packages/react-native-ble-plx"
|
||||
},
|
||||
"files": [
|
||||
"build",
|
||||
"app.plugin.js"
|
||||
@@ -31,10 +26,9 @@
|
||||
"preset": "expo-module-scripts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/config-plugins": "^4.1.0"
|
||||
"@expo/config-plugins": "^4.0.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"expo-module-scripts": "^2.0.0"
|
||||
},
|
||||
"upstreamPackage": "react-native-ble-plx"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
## @config-plugins/react-native-blob-util 1.0.0 (2022-03-15)
|
||||
|
||||
|
||||
### Other chores
|
||||
|
||||
* upgrade @expo/config-plugins ([#49](https://github.com/expo/config-plugins/issues/49)) ([119e31e](https://github.com/expo/config-plugins/commit/119e31edf110409272ace750f02d651124e1a22d))
|
||||
@@ -4,7 +4,7 @@ Config plugin to auto configure [`react-native-blob-util`][lib] when the native
|
||||
|
||||
### Add the package to your npm dependencies
|
||||
|
||||
> Tested against Expo SDK 44
|
||||
> Tested against Expo SDK 43
|
||||
|
||||
```
|
||||
yarn add react-native-blob-util @config-plugins/react-native-blob-util
|
||||
|
||||
@@ -5,11 +5,6 @@
|
||||
"main": "build/withReactNativeBlobUtil.js",
|
||||
"types": "build/withReactNativeBlobUtil.d.ts",
|
||||
"sideEffects": false,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/expo/config-plugins.git",
|
||||
"directory": "packages/react-native-blob-util"
|
||||
},
|
||||
"files": [
|
||||
"build",
|
||||
"app.plugin.js"
|
||||
@@ -32,10 +27,9 @@
|
||||
"preset": "expo-module-scripts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/config-plugins": "^4.1.0"
|
||||
"@expo/config-plugins": "^4.0.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"expo-module-scripts": "^2.0.0"
|
||||
},
|
||||
"upstreamPackage": "react-native-blob-util"
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
// @generated by expo-module-scripts
|
||||
module.exports = require('expo-module-scripts/eslintrc.base.js');
|
||||
@@ -1,51 +0,0 @@
|
||||
# config-plugins/react-native-branch
|
||||
|
||||
Config plugin to auto configure `react-native-branch` when the native code is generated (`expo prebuild`).
|
||||
|
||||
## Expo installation
|
||||
|
||||
> Tested against Expo SDK 44
|
||||
|
||||
> This package cannot be used in the "Expo Go" app because [it requires custom native code](https://docs.expo.io/workflow/customizing/).
|
||||
> First install the package with yarn, npm, or [`expo install`](https://docs.expo.io/workflow/expo-cli/#expo-install).
|
||||
|
||||
```sh
|
||||
expo install react-native-branch @config-plugins/react-native-branch
|
||||
```
|
||||
|
||||
After installing this npm package, add the [config plugin](https://docs.expo.io/guides/config-plugins/) to the [`plugins`](https://docs.expo.io/versions/latest/config/app/#plugins) array of your `app.json` or `app.config.js`:
|
||||
|
||||
```json
|
||||
{
|
||||
"expo": {
|
||||
"plugins": ["@config-plugins/react-native-branch"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Next, rebuild your app as described in the ["Adding custom native code"](https://docs.expo.io/workflow/customizing/) guide.
|
||||
|
||||
## API
|
||||
|
||||
The plugin provides props for extra customization. Every time you change the props or plugins, you'll need to rebuild (and `prebuild`) the native app. If no extra properties are added, defaults will be used.
|
||||
|
||||
- `apiKey` (_string_): Branch API key. Optional.
|
||||
- `iosAppDomain` (_string_): App Domain for iOS. Optional.
|
||||
|
||||
#### Example
|
||||
|
||||
```json
|
||||
{
|
||||
"expo": {
|
||||
"plugins": [
|
||||
[
|
||||
"@config-plugins/react-native-branch",
|
||||
{
|
||||
"apiKey": "key_live_f9f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8",
|
||||
"iosAppDomain": "awesome-alternate.app.link",
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -1,3 +0,0 @@
|
||||
# Gradle files
|
||||
.gradle/
|
||||
build/
|
||||
@@ -1,52 +0,0 @@
|
||||
apply plugin: 'com.android.library'
|
||||
apply plugin: 'kotlin-android'
|
||||
|
||||
group = 'host.exp.exponent'
|
||||
version = '0.0.1'
|
||||
|
||||
buildscript {
|
||||
// Simple helper that allows the root project to override versions declared by this library.
|
||||
ext.safeExtGet = { prop, fallback ->
|
||||
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${safeExtGet('kotlinVersion', '1.4.21')}")
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion safeExtGet("compileSdkVersion", 30)
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion safeExtGet("minSdkVersion", 21)
|
||||
targetSdkVersion safeExtGet("targetSdkVersion", 30)
|
||||
versionCode 1
|
||||
versionName '1.1.0'
|
||||
}
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation project(':expo-modules-core')
|
||||
implementation project(':react-native-branch')
|
||||
|
||||
//noinspection GradleDynamicVersion
|
||||
implementation 'com.facebook.react:react-native:+'
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${safeExtGet('kotlinVersion', '1.4.21')}"
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
<manifest package="expo.modules.adapters.branch">
|
||||
</manifest>
|
||||
-15
@@ -1,15 +0,0 @@
|
||||
package expo.modules.adapters.branch
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import expo.modules.core.interfaces.ApplicationLifecycleListener
|
||||
import io.branch.rnbranch.RNBranchModule
|
||||
|
||||
class BranchApplicationLifecycleListener(context: Context?) : ApplicationLifecycleListener {
|
||||
var context = context
|
||||
|
||||
override fun onCreate(application: Application) {
|
||||
super.onCreate(application)
|
||||
RNBranchModule.getAutoInstance(this.context)
|
||||
}
|
||||
}
|
||||
-15
@@ -1,15 +0,0 @@
|
||||
package expo.modules.adapters.branch
|
||||
|
||||
import android.content.Context
|
||||
import expo.modules.core.interfaces.ApplicationLifecycleListener
|
||||
import expo.modules.core.interfaces.Package
|
||||
import expo.modules.core.interfaces.ReactActivityLifecycleListener
|
||||
|
||||
class BranchPackage : Package {
|
||||
override fun createApplicationLifecycleListeners(context: Context?): List<ApplicationLifecycleListener> {
|
||||
return listOf(BranchApplicationLifecycleListener(context))
|
||||
}
|
||||
override fun createReactActivityLifecycleListeners(activityContext: Context): List<ReactActivityLifecycleListener> {
|
||||
return listOf(BranchReactActivityLifecycleListener(activityContext))
|
||||
}
|
||||
}
|
||||
-22
@@ -1,22 +0,0 @@
|
||||
package expo.modules.adapters.branch
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import expo.modules.core.interfaces.ReactActivityLifecycleListener
|
||||
import io.branch.rnbranch.RNBranchModule
|
||||
|
||||
|
||||
class BranchReactActivityLifecycleListener(activityContext: Context) : ReactActivityLifecycleListener {
|
||||
override fun onCreate(activity: Activity, savedInstanceState: Bundle?) {
|
||||
RNBranchModule.initSession(activity.getIntent().getData(), activity);
|
||||
}
|
||||
|
||||
override fun onNewIntent(intent: Intent?): Boolean {
|
||||
if (intent != null) {
|
||||
RNBranchModule.onNewIntent(intent);
|
||||
}
|
||||
return super.onNewIntent(intent)
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require("./build/withBranch");
|
||||
-5
@@ -1,5 +0,0 @@
|
||||
export declare type ConfigData = {
|
||||
apiKey?: string;
|
||||
iosAppDomain?: string;
|
||||
iosUniversalLinkDomains?: string[];
|
||||
};
|
||||
-2
@@ -1,2 +0,0 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
-4
@@ -1,4 +0,0 @@
|
||||
import type { ConfigPlugin } from "@expo/config-plugins";
|
||||
import type { ConfigData } from "./types";
|
||||
declare const _default: ConfigPlugin<ConfigData>;
|
||||
export default _default;
|
||||
-23
@@ -1,23 +0,0 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
const withBranchAndroid_1 = require("./withBranchAndroid");
|
||||
const withBranchIOS_1 = require("./withBranchIOS");
|
||||
const withBranch = (config, { apiKey, iosAppDomain, iosUniversalLinkDomains } = {}) => {
|
||||
config = withBranchAndroid_1.withBranchAndroid(config, { apiKey });
|
||||
config = withBranchIOS_1.withBranchIOS(config, {
|
||||
apiKey,
|
||||
iosAppDomain,
|
||||
iosUniversalLinkDomains,
|
||||
});
|
||||
return config;
|
||||
};
|
||||
let pkg = {
|
||||
name: "react-native-branch",
|
||||
};
|
||||
try {
|
||||
const branchPkg = require("react-native-branch/package.json");
|
||||
pkg = branchPkg;
|
||||
}
|
||||
catch (_a) { }
|
||||
exports.default = config_plugins_1.createRunOncePlugin(withBranch, pkg.name, pkg.version);
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
import { AndroidConfig } from "@expo/config-plugins";
|
||||
import type { ConfigPlugin } from "@expo/config-plugins";
|
||||
import type { ExpoConfig } from "@expo/config-types";
|
||||
export declare function getBranchApiKey(config: ExpoConfig): string | null;
|
||||
export declare function setBranchApiKey(apiKey: string, androidManifest: AndroidConfig.Manifest.AndroidManifest): AndroidConfig.Manifest.AndroidManifest;
|
||||
export declare const withBranchAndroid: ConfigPlugin<{
|
||||
apiKey?: string;
|
||||
}>;
|
||||
-37
@@ -1,37 +0,0 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.withBranchAndroid = exports.setBranchApiKey = exports.getBranchApiKey = void 0;
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
const { addMetaDataItemToMainApplication, getMainApplicationOrThrow, removeMetaDataItemFromMainApplication, } = config_plugins_1.AndroidConfig.Manifest;
|
||||
const META_BRANCH_KEY = "io.branch.sdk.BranchKey";
|
||||
function getBranchApiKey(config) {
|
||||
var _a, _b, _c, _d;
|
||||
return (_d = (_c = (_b = (_a = config.android) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.branch) === null || _c === void 0 ? void 0 : _c.apiKey) !== null && _d !== void 0 ? _d : null;
|
||||
}
|
||||
exports.getBranchApiKey = getBranchApiKey;
|
||||
function setBranchApiKey(apiKey, androidManifest) {
|
||||
const mainApplication = getMainApplicationOrThrow(androidManifest);
|
||||
if (apiKey) {
|
||||
// If the item exists, add it back
|
||||
addMetaDataItemToMainApplication(mainApplication, META_BRANCH_KEY, apiKey);
|
||||
}
|
||||
else {
|
||||
// Remove any existing item
|
||||
removeMetaDataItemFromMainApplication(mainApplication, META_BRANCH_KEY);
|
||||
}
|
||||
return androidManifest;
|
||||
}
|
||||
exports.setBranchApiKey = setBranchApiKey;
|
||||
const withBranchAndroid = (config, data) => {
|
||||
var _a;
|
||||
const apiKey = (_a = data.apiKey) !== null && _a !== void 0 ? _a : getBranchApiKey(config);
|
||||
if (!apiKey) {
|
||||
throw new Error("Branch API key is required");
|
||||
}
|
||||
config = config_plugins_1.withAndroidManifest(config, (config) => {
|
||||
config.modResults = setBranchApiKey(apiKey, config.modResults);
|
||||
return config;
|
||||
});
|
||||
return config;
|
||||
};
|
||||
exports.withBranchAndroid = withBranchAndroid;
|
||||
-6
@@ -1,6 +0,0 @@
|
||||
import type { ConfigPlugin, InfoPlist } from "@expo/config-plugins";
|
||||
import type { ExpoConfig } from "@expo/config-types";
|
||||
import type { ConfigData } from "./types";
|
||||
export declare function getBranchApiKey(config: Pick<ExpoConfig, "ios">): string | null;
|
||||
export declare function setBranchApiKey(apiKey: string, infoPlist: InfoPlist): InfoPlist;
|
||||
export declare const withBranchIOS: ConfigPlugin<ConfigData>;
|
||||
-52
@@ -1,52 +0,0 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.withBranchIOS = exports.setBranchApiKey = exports.getBranchApiKey = void 0;
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
function getBranchApiKey(config) {
|
||||
var _a, _b, _c, _d;
|
||||
return (_d = (_c = (_b = (_a = config.ios) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.branch) === null || _c === void 0 ? void 0 : _c.apiKey) !== null && _d !== void 0 ? _d : null;
|
||||
}
|
||||
exports.getBranchApiKey = getBranchApiKey;
|
||||
function setBranchApiKey(apiKey, infoPlist) {
|
||||
if (apiKey === null) {
|
||||
return infoPlist;
|
||||
}
|
||||
return {
|
||||
...infoPlist,
|
||||
branch_key: {
|
||||
live: apiKey,
|
||||
},
|
||||
};
|
||||
}
|
||||
exports.setBranchApiKey = setBranchApiKey;
|
||||
const withBranchIOS = (config, data) => {
|
||||
var _a;
|
||||
// Ensure object exist
|
||||
if (!config.ios) {
|
||||
config.ios = {};
|
||||
}
|
||||
const apiKey = (_a = data.apiKey) !== null && _a !== void 0 ? _a : getBranchApiKey(config);
|
||||
if (!apiKey) {
|
||||
throw new Error("Branch API key is required");
|
||||
}
|
||||
// Update the infoPlist with the branch key and branch domain
|
||||
config = config_plugins_1.withInfoPlist(config, (config) => {
|
||||
config.modResults = setBranchApiKey(apiKey, config.modResults);
|
||||
if (data.iosAppDomain) {
|
||||
config.modResults.branch_app_domain = data.iosAppDomain;
|
||||
}
|
||||
else {
|
||||
delete config.modResults.branch_app_domain;
|
||||
}
|
||||
if (data.iosUniversalLinkDomains) {
|
||||
config.modResults.branch_universal_link_domains =
|
||||
data.iosUniversalLinkDomains;
|
||||
}
|
||||
else {
|
||||
delete config.modResults.branch_universal_link_domains;
|
||||
}
|
||||
return config;
|
||||
});
|
||||
return config;
|
||||
};
|
||||
exports.withBranchIOS = withBranchIOS;
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"platforms": [
|
||||
"android",
|
||||
"ios"
|
||||
],
|
||||
"ios": {
|
||||
"appDelegateSubscribers": ["BranchAppDelegate"]
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
require 'json'
|
||||
|
||||
package = JSON.parse(File.read(File.join(__dir__, '..', 'package.json')))
|
||||
|
||||
Pod::Spec.new do |s|
|
||||
s.name = 'ExpoAdapterBranch'
|
||||
s.version = package['version']
|
||||
s.summary = package['description']
|
||||
s.description = package['description']
|
||||
s.license = package['license']
|
||||
s.author = package['author']
|
||||
s.homepage = package['homepage']
|
||||
s.platform = :ios, '12.0'
|
||||
s.swift_version = '5.4'
|
||||
s.source = { git: 'https://github.com/expo/config-plugins.git' }
|
||||
s.static_framework = true
|
||||
|
||||
s.compiler_flags = %[-DRNBRANCH_VERSION=@\\"#{package["dependencies"]["react-native-branch"]}\\"]
|
||||
|
||||
s.dependency 'ExpoModulesCore'
|
||||
s.dependency 'React-Core'
|
||||
s.dependency 'react-native-branch'
|
||||
|
||||
# Swift/Objective-C compatibility
|
||||
s.pod_target_xcconfig = {
|
||||
'DEFINES_MODULE' => 'YES'
|
||||
}
|
||||
|
||||
if !$ExpoUseSources&.include?(package['name']) && ENV['EXPO_USE_SOURCE'].to_i == 0 && File.exist?("#{s.name}.xcframework") && Gem::Version.new(Pod::VERSION) >= Gem::Version.new('1.10.0')
|
||||
s.source_files = "#{s.name}/**/*.h"
|
||||
s.vendored_frameworks = "#{s.name}.xcframework"
|
||||
else
|
||||
s.source_files = "#{s.name}/**/*.{h,m,swift}"
|
||||
end
|
||||
end
|
||||
@@ -1,17 +0,0 @@
|
||||
import ExpoModulesCore
|
||||
import RNBranch
|
||||
|
||||
public class BranchAppDelegate: ExpoAppDelegateSubscriber {
|
||||
public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
|
||||
RNBranch.initSession(launchOptions: launchOptions, isReferrable: true)
|
||||
return true
|
||||
}
|
||||
|
||||
public func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
|
||||
return RNBranch.application(application, open:url, options:options)
|
||||
}
|
||||
|
||||
public func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
|
||||
return RNBranch.continue(userActivity)
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('expo-module-scripts/jest-preset-plugin');
|
||||
@@ -1,42 +0,0 @@
|
||||
{
|
||||
"name": "@config-plugins/react-native-branch",
|
||||
"version": "0.0.1",
|
||||
"description": "Config plugin to auto configure react-native-branch on prebuild",
|
||||
"author": "650 Industries, Inc.",
|
||||
"license": "MIT",
|
||||
"homepage": "https://docs.expo.dev/versions/latest/sdk/branch/",
|
||||
"main": "build/withBranch.js",
|
||||
"types": "build/withBranch.d.ts",
|
||||
"sideEffects": false,
|
||||
"files": [
|
||||
"android",
|
||||
"app.plugin.js",
|
||||
"build",
|
||||
"expo-module.config.json",
|
||||
"ios"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "expo-module build",
|
||||
"clean": "expo-module clean",
|
||||
"lint": "expo-module lint",
|
||||
"test": "expo-module test",
|
||||
"prepare": "expo-module prepare",
|
||||
"prepublishOnly": "expo-module prepublishOnly",
|
||||
"expo-module": "expo-module"
|
||||
},
|
||||
"keywords": [
|
||||
"expo",
|
||||
"react-native",
|
||||
"react-native-branch"
|
||||
],
|
||||
"jest": {
|
||||
"preset": "expo-module-scripts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/config-plugins": "^4.1.0",
|
||||
"@expo/config-types": "^43.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"expo-module-scripts": "^2.0.0"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
export type ConfigData = {
|
||||
apiKey?: string;
|
||||
iosAppDomain?: string;
|
||||
iosUniversalLinkDomains?: string[];
|
||||
};
|
||||
@@ -1,29 +0,0 @@
|
||||
import { createRunOncePlugin } from "@expo/config-plugins";
|
||||
import type { ConfigPlugin } from "@expo/config-plugins";
|
||||
|
||||
import { withBranchAndroid } from "./withBranchAndroid";
|
||||
import { withBranchIOS } from "./withBranchIOS";
|
||||
import type { ConfigData } from "./types";
|
||||
|
||||
const withBranch: ConfigPlugin<ConfigData> = (
|
||||
config,
|
||||
{ apiKey, iosAppDomain, iosUniversalLinkDomains } = {}
|
||||
) => {
|
||||
config = withBranchAndroid(config, { apiKey });
|
||||
config = withBranchIOS(config, {
|
||||
apiKey,
|
||||
iosAppDomain,
|
||||
iosUniversalLinkDomains,
|
||||
});
|
||||
return config;
|
||||
};
|
||||
|
||||
let pkg: { name: string; version?: string } = {
|
||||
name: "react-native-branch",
|
||||
};
|
||||
try {
|
||||
const branchPkg = require("react-native-branch/package.json");
|
||||
pkg = branchPkg;
|
||||
} catch {}
|
||||
|
||||
export default createRunOncePlugin(withBranch, pkg.name, pkg.version);
|
||||
@@ -1,49 +0,0 @@
|
||||
import { AndroidConfig, withAndroidManifest } from "@expo/config-plugins";
|
||||
import type { ConfigPlugin } from "@expo/config-plugins";
|
||||
import type { ExpoConfig } from "@expo/config-types";
|
||||
|
||||
const {
|
||||
addMetaDataItemToMainApplication,
|
||||
getMainApplicationOrThrow,
|
||||
removeMetaDataItemFromMainApplication,
|
||||
} = AndroidConfig.Manifest;
|
||||
|
||||
const META_BRANCH_KEY = "io.branch.sdk.BranchKey";
|
||||
|
||||
export function getBranchApiKey(config: ExpoConfig) {
|
||||
return config.android?.config?.branch?.apiKey ?? null;
|
||||
}
|
||||
|
||||
export function setBranchApiKey(
|
||||
apiKey: string,
|
||||
androidManifest: AndroidConfig.Manifest.AndroidManifest
|
||||
) {
|
||||
const mainApplication = getMainApplicationOrThrow(androidManifest);
|
||||
|
||||
if (apiKey) {
|
||||
// If the item exists, add it back
|
||||
addMetaDataItemToMainApplication(mainApplication, META_BRANCH_KEY, apiKey);
|
||||
} else {
|
||||
// Remove any existing item
|
||||
removeMetaDataItemFromMainApplication(mainApplication, META_BRANCH_KEY);
|
||||
}
|
||||
|
||||
return androidManifest;
|
||||
}
|
||||
|
||||
export const withBranchAndroid: ConfigPlugin<{ apiKey?: string }> = (
|
||||
config,
|
||||
data
|
||||
) => {
|
||||
const apiKey = data.apiKey ?? getBranchApiKey(config);
|
||||
if (!apiKey) {
|
||||
throw new Error("Branch API key is required");
|
||||
}
|
||||
|
||||
config = withAndroidManifest(config, (config) => {
|
||||
config.modResults = setBranchApiKey(apiKey, config.modResults);
|
||||
return config;
|
||||
});
|
||||
|
||||
return config;
|
||||
};
|
||||
@@ -1,55 +0,0 @@
|
||||
import { withInfoPlist } from "@expo/config-plugins";
|
||||
import type { ConfigPlugin, InfoPlist } from "@expo/config-plugins";
|
||||
import type { ExpoConfig } from "@expo/config-types";
|
||||
import type { ConfigData } from "./types";
|
||||
|
||||
export function getBranchApiKey(config: Pick<ExpoConfig, "ios">) {
|
||||
return config.ios?.config?.branch?.apiKey ?? null;
|
||||
}
|
||||
|
||||
export function setBranchApiKey(
|
||||
apiKey: string,
|
||||
infoPlist: InfoPlist
|
||||
): InfoPlist {
|
||||
if (apiKey === null) {
|
||||
return infoPlist;
|
||||
}
|
||||
|
||||
return {
|
||||
...infoPlist,
|
||||
branch_key: {
|
||||
live: apiKey,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export const withBranchIOS: ConfigPlugin<ConfigData> = (config, data) => {
|
||||
// Ensure object exist
|
||||
if (!config.ios) {
|
||||
config.ios = {};
|
||||
}
|
||||
|
||||
const apiKey = data.apiKey ?? getBranchApiKey(config);
|
||||
if (!apiKey) {
|
||||
throw new Error("Branch API key is required");
|
||||
}
|
||||
|
||||
// Update the infoPlist with the branch key and branch domain
|
||||
config = withInfoPlist(config, (config) => {
|
||||
config.modResults = setBranchApiKey(apiKey, config.modResults);
|
||||
if (data.iosAppDomain) {
|
||||
config.modResults.branch_app_domain = data.iosAppDomain;
|
||||
} else {
|
||||
delete config.modResults.branch_app_domain;
|
||||
}
|
||||
if (data.iosUniversalLinkDomains) {
|
||||
config.modResults.branch_universal_link_domains =
|
||||
data.iosUniversalLinkDomains;
|
||||
} else {
|
||||
delete config.modResults.branch_universal_link_domains;
|
||||
}
|
||||
return config;
|
||||
});
|
||||
|
||||
return config;
|
||||
};
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"extends": "expo-module-scripts/tsconfig.plugin",
|
||||
"compilerOptions": {
|
||||
"outDir": "build",
|
||||
"rootDir": "src"
|
||||
},
|
||||
"include": ["./src"],
|
||||
"exclude": ["**/__mocks__/*", "**/__tests__/*"]
|
||||
}
|
||||
@@ -4,7 +4,7 @@ Config plugin to auto configure react-native-callkeep when the native code is ge
|
||||
|
||||
### Add the package to your npm dependencies
|
||||
|
||||
> Tested against Expo SDK 44
|
||||
> Tested against Expo SDK 43
|
||||
|
||||
```
|
||||
yarn add react-native-callkeep @config-plugins/react-native-callkeep
|
||||
|
||||
+1
-1
@@ -94,7 +94,7 @@ const withCallkeep = (config) => {
|
||||
};
|
||||
const withXcodeLinkBinaryWithLibraries = (config, { library, status }) => {
|
||||
return config_plugins_1.withXcodeProject(config, (config) => {
|
||||
const options = status === "optional" ? { weak: true } : {};
|
||||
const options = status === "optional" ? { settings: { ATTRIBUTES: ["Weak"] } } : {};
|
||||
const target = config_plugins_1.IOSConfig.XcodeUtils.getApplicationNativeTarget({
|
||||
project: config.modResults,
|
||||
projectName: config.modRequest.projectName,
|
||||
|
||||
@@ -5,11 +5,6 @@
|
||||
"main": "build/withCallkeep.js",
|
||||
"types": "build/withCallkeep.d.ts",
|
||||
"sideEffects": false,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/expo/config-plugins.git",
|
||||
"directory": "packages/react-native-callkeep"
|
||||
},
|
||||
"files": [
|
||||
"build",
|
||||
"app.plugin.js"
|
||||
@@ -31,10 +26,9 @@
|
||||
"preset": "expo-module-scripts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/config-plugins": "^4.1.0"
|
||||
"@expo/config-plugins": "^4.0.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"expo-module-scripts": "^2.0.0"
|
||||
},
|
||||
"upstreamPackage": "react-native-callkeep"
|
||||
}
|
||||
}
|
||||
@@ -130,7 +130,7 @@ export const withXcodeLinkBinaryWithLibraries: ConfigPlugin<{
|
||||
}> = (config, { library, status }) => {
|
||||
return withXcodeProject(config, (config) => {
|
||||
const options =
|
||||
status === "optional" ? { weak: true } : {};
|
||||
status === "optional" ? { settings: { ATTRIBUTES: ["Weak"] } } : {};
|
||||
|
||||
const target = IOSConfig.XcodeUtils.getApplicationNativeTarget({
|
||||
project: config.modResults,
|
||||
|
||||
@@ -4,7 +4,7 @@ Config plugin to auto configure `react-native-dynamic-app-icon`
|
||||
|
||||
## Install
|
||||
|
||||
> Tested against Expo SDK 44
|
||||
> Tested against Expo SDK 43
|
||||
|
||||
```
|
||||
yarn add react-native-dynamic-app-icon @config-plugins/react-native-dynamic-app-icon
|
||||
|
||||
@@ -5,11 +5,6 @@
|
||||
"main": "build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
"sideEffects": false,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/expo/config-plugins.git",
|
||||
"directory": "packages/react-native-dynamic-app-icon"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "expo-module build",
|
||||
"clean": "expo-module clean",
|
||||
@@ -27,12 +22,11 @@
|
||||
"preset": "expo-module-scripts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/config-plugins": "^4.1.0",
|
||||
"@expo/config-plugins": "^4.0.7",
|
||||
"@expo/image-utils": "^0.3.17",
|
||||
"xcode": "^3.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"expo-module-scripts": "^2.0.0"
|
||||
},
|
||||
"upstreamPackage": "react-native-dynamic-app-icon"
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ Config plugin to auto configure react-native-google-cast when the native code is
|
||||
|
||||
## Expo installation
|
||||
|
||||
> Tested against Expo SDK 44
|
||||
> Tested against Expo SDK 43
|
||||
|
||||
> This package cannot be used in the "Expo Go" app because [it requires custom native code](https://docs.expo.io/workflow/customizing/).
|
||||
> First install the package with yarn, npm, or [`expo install`](https://docs.expo.io/workflow/expo-cli/#expo-install).
|
||||
|
||||
@@ -5,11 +5,6 @@
|
||||
"main": "build/withGoogleCast.js",
|
||||
"types": "build/withGoogleCast.d.ts",
|
||||
"sideEffects": false,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/expo/config-plugins.git",
|
||||
"directory": "packages/react-native-google-cast"
|
||||
},
|
||||
"files": [
|
||||
"build",
|
||||
"app.plugin.js"
|
||||
@@ -31,10 +26,9 @@
|
||||
"preset": "expo-module-scripts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/config-plugins": "^4.1.0"
|
||||
"@expo/config-plugins": "^4.0.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"expo-module-scripts": "^2.0.0"
|
||||
},
|
||||
"upstreamPackage": "react-native-google-cast"
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ Config plugin to auto configure [`react-native-pdf`][lib] when the native code i
|
||||
|
||||
### Add the package to your npm dependencies
|
||||
|
||||
> Tested against Expo SDK 44
|
||||
> Tested against Expo SDK 43
|
||||
|
||||
```
|
||||
yarn add react-native-pdf react-native-blob-util fbjs @config-plugins/react-native-pdf @config-plugins/react-native-blob-util
|
||||
|
||||
@@ -5,11 +5,6 @@
|
||||
"main": "build/withPdf.js",
|
||||
"types": "build/withPdf.d.ts",
|
||||
"sideEffects": false,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/expo/config-plugins.git",
|
||||
"directory": "packages/react-native-pdf"
|
||||
},
|
||||
"files": [
|
||||
"build",
|
||||
"app.plugin.js"
|
||||
@@ -32,10 +27,9 @@
|
||||
"preset": "expo-module-scripts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/config-plugins": "^4.1.0"
|
||||
"@expo/config-plugins": "^4.0.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"expo-module-scripts": "^2.0.0"
|
||||
},
|
||||
"upstreamPackage": "react-native-pdf"
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ Expo Config Plugin to auto configure [`react-native-quick-actions`](https://www.
|
||||
|
||||
## Expo installation
|
||||
|
||||
> Tested against Expo SDK 44
|
||||
> Tested against Expo SDK 43
|
||||
|
||||
This package cannot be used in the "Expo Go" app because [it requires custom native code](https://docs.expo.io/workflow/customizing/).
|
||||
|
||||
|
||||
Loaded 100 of 109 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user