mirror of
https://github.com/expo/config-plugins.git
synced 2026-11-13 20:28:07 -10:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
83b52a3b61 | ||
|
|
16dfad4dc8 | ||
|
|
0f6493e28d |
No files matched your search
@@ -1,3 +1,10 @@
|
||||
### @config-plugins/ffmpeg-kit-react-native [1.0.3](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-03-22)
|
||||
|
||||
|
||||
### Other chores
|
||||
|
||||
* git ignore build folders ([#59](https://github.com/expo/config-plugins/issues/59)) ([d6050be](https://github.com/expo/config-plugins/commit/d6050beb2a5c68dc59287c27ec388c2002ec7904))
|
||||
|
||||
### @config-plugins/ffmpeg-kit-react-native [1.0.2](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-03-22)
|
||||
|
||||
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
import { ConfigPlugin } from "@expo/config-plugins";
|
||||
export declare const withAndroidFFMPEGPackage: ConfigPlugin<string | undefined>;
|
||||
export declare function addPackageName(src: string, packageName?: string): string;
|
||||
@@ -0,0 +1,54 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.addPackageName = exports.withAndroidFFMPEGPackage = void 0;
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
const generateCode_1 = require("@expo/config-plugins/build/utils/generateCode");
|
||||
const withAndroidFFMPEGPackage = (config, packageName) => {
|
||||
return config_plugins_1.withProjectBuildGradle(config, (config) => {
|
||||
if (config.modResults.language === "groovy") {
|
||||
config.modResults.contents = addPackageName(config.modResults.contents, packageName);
|
||||
}
|
||||
else {
|
||||
throw new Error("Cannot add camera maven gradle because the build.gradle is not groovy");
|
||||
}
|
||||
return config;
|
||||
});
|
||||
};
|
||||
exports.withAndroidFFMPEGPackage = withAndroidFFMPEGPackage;
|
||||
function addPackageName(src, packageName) {
|
||||
const tag = "ffmpeg-kit-react-native-package";
|
||||
const gradleMaven = packageName
|
||||
? `ext { ffmpegKitPackage = "${packageName}" }`
|
||||
: "";
|
||||
return appendContents({
|
||||
tag,
|
||||
src,
|
||||
newSrc: gradleMaven,
|
||||
comment: "//",
|
||||
}).contents;
|
||||
}
|
||||
exports.addPackageName = addPackageName;
|
||||
// Fork of config-plugins mergeContents, but appends the contents to the end of the file.
|
||||
function appendContents({ src, newSrc, tag, comment, }) {
|
||||
const header = generateCode_1.createGeneratedHeaderComment(newSrc, tag, comment);
|
||||
if (!src.includes(header)) {
|
||||
// Ensure the old generated contents are removed.
|
||||
let sanitizedTarget = generateCode_1.removeGeneratedContents(src, tag);
|
||||
if (sanitizedTarget)
|
||||
sanitizedTarget += "\n";
|
||||
const contentsToAdd = [
|
||||
// @something
|
||||
header,
|
||||
// contents
|
||||
newSrc,
|
||||
// @end
|
||||
`${comment} @generated end ${tag}`,
|
||||
].join("\n");
|
||||
return {
|
||||
contents: (sanitizedTarget !== null && sanitizedTarget !== void 0 ? sanitizedTarget : src) + contentsToAdd,
|
||||
didMerge: true,
|
||||
didClear: !!sanitizedTarget,
|
||||
};
|
||||
}
|
||||
return { contents: src, didClear: false, didMerge: false };
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
import { ConfigPlugin } from "@expo/config-plugins";
|
||||
export declare const withPodfilePropertiesPackage: ConfigPlugin<string>;
|
||||
/** Dangerously adds the custom import to the CocoaPods. */
|
||||
export declare const withCocoaPodsImport: ConfigPlugin;
|
||||
export declare function addCocoaPodsImport(src: string): string;
|
||||
@@ -0,0 +1,47 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.addCocoaPodsImport = exports.withCocoaPodsImport = exports.withPodfilePropertiesPackage = void 0;
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
const ios_plugins_1 = require("@expo/config-plugins/build/plugins/ios-plugins");
|
||||
const generateCode_1 = require("@expo/config-plugins/build/utils/generateCode");
|
||||
const fs_1 = require("fs");
|
||||
const path_1 = __importDefault(require("path"));
|
||||
const withPodfilePropertiesPackage = (config, packageName) => {
|
||||
return ios_plugins_1.withPodfileProperties(config, (config) => {
|
||||
// @ts-ignore: wrong type
|
||||
config.modResults["ffmpeg-kit-react-native.subspecs"] = [
|
||||
packageName,
|
||||
].filter(Boolean);
|
||||
return config;
|
||||
});
|
||||
};
|
||||
exports.withPodfilePropertiesPackage = withPodfilePropertiesPackage;
|
||||
/** Dangerously adds the custom import to the CocoaPods. */
|
||||
const withCocoaPodsImport = (c) => {
|
||||
return config_plugins_1.withDangerousMod(c, [
|
||||
"ios",
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
async (config) => {
|
||||
const file = path_1.default.join(config.modRequest.platformProjectRoot, "Podfile");
|
||||
const contents = await fs_1.promises.readFile(file, "utf8");
|
||||
await fs_1.promises.writeFile(file, addCocoaPodsImport(contents), "utf-8");
|
||||
return config;
|
||||
},
|
||||
]);
|
||||
};
|
||||
exports.withCocoaPodsImport = withCocoaPodsImport;
|
||||
function addCocoaPodsImport(src) {
|
||||
return generateCode_1.mergeContents({
|
||||
tag: `ffmpeg-kit-react-native-import`,
|
||||
src,
|
||||
newSrc: ` pod 'ffmpeg-kit-react-native', :subspecs => podfile_properties['ffmpeg-kit-react-native.subspecs'] || [], :podspec => File.join(File.dirname(\`node --print "require.resolve('ffmpeg-kit-react-native/package.json')"\`), "ffmpeg-kit-react-native.podspec")`,
|
||||
anchor: /use_native_modules/,
|
||||
// We can't go after the use_native_modules block because it might have parameters, causing it to be multi-line (see react-native template).
|
||||
offset: 0,
|
||||
comment: "#",
|
||||
}).contents;
|
||||
}
|
||||
exports.addCocoaPodsImport = addCocoaPodsImport;
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
declare type Package = "min" | "min-gpl" | "https" | "https-gpl" | "audio" | "video" | "full" | "full-gpl";
|
||||
export declare type Props = {
|
||||
package?: Package;
|
||||
ios?: {
|
||||
package?: Package;
|
||||
};
|
||||
android?: {
|
||||
package?: Package;
|
||||
};
|
||||
};
|
||||
export {};
|
||||
@@ -0,0 +1,42 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
const withAndroidFFMPEGPackage_1 = require("./withAndroidFFMPEGPackage");
|
||||
const withCocoaPodsImport_1 = require("./withCocoaPodsImport");
|
||||
const withIosDeploymentTarget_1 = require("./withIosDeploymentTarget");
|
||||
let pkg = {
|
||||
name: "ffmpeg-kit-react-native",
|
||||
};
|
||||
try {
|
||||
pkg = require("ffmpeg-kit-react-native/package.json");
|
||||
}
|
||||
catch (_a) {
|
||||
// empty catch block
|
||||
}
|
||||
const withFFMPEG = (config, _props) => {
|
||||
var _a, _b;
|
||||
const props = _props || {};
|
||||
const iosPackage = ((_a = props.ios) === null || _a === void 0 ? void 0 : _a.package) || props.package;
|
||||
const androidPackage = ((_b = props.android) === null || _b === void 0 ? void 0 : _b.package) || props.package;
|
||||
return config_plugins_1.withPlugins(config, [
|
||||
// iOS
|
||||
[withCocoaPodsImport_1.withPodfilePropertiesPackage, iosPackage],
|
||||
[
|
||||
withIosDeploymentTarget_1.withIosDeploymentTarget,
|
||||
// https://github.com/tanersener/ffmpeg-kit/tree/main/react-native#211-package-names
|
||||
{ deploymentTarget: "12.1" },
|
||||
],
|
||||
withCocoaPodsImport_1.withCocoaPodsImport,
|
||||
// Android
|
||||
// Set min SDK Version to 24.
|
||||
[
|
||||
config_plugins_1.AndroidConfig.Version.withBuildScriptExtMinimumVersion,
|
||||
{
|
||||
name: "minSdkVersion",
|
||||
minVersion: 24,
|
||||
},
|
||||
],
|
||||
[withAndroidFFMPEGPackage_1.withAndroidFFMPEGPackage, androidPackage],
|
||||
]);
|
||||
};
|
||||
module.exports = config_plugins_1.createRunOncePlugin(withFFMPEG, pkg.name, pkg.version);
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import { ConfigPlugin, XcodeProject } from "@expo/config-plugins";
|
||||
declare type IosDeploymentTargetConfigPlugin = ConfigPlugin<{
|
||||
deploymentTarget: string;
|
||||
}>;
|
||||
export declare const withIosDeploymentTarget: IosDeploymentTargetConfigPlugin;
|
||||
export declare function updateDeploymentTargetPodfile(contents: string, deploymentTarget: string): string;
|
||||
export declare function updateDeploymentTargetXcodeProject(project: XcodeProject, deploymentTarget: string): XcodeProject;
|
||||
export {};
|
||||
@@ -0,0 +1,61 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": 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"));
|
||||
const semver_1 = __importDefault(require("semver"));
|
||||
const withIosDeploymentTarget = (config, props) => {
|
||||
config = withIosDeploymentTargetPodfile(config, props);
|
||||
config = withIosDeploymentTargetXcodeProject(config, props);
|
||||
return config;
|
||||
};
|
||||
exports.withIosDeploymentTarget = withIosDeploymentTarget;
|
||||
const withIosDeploymentTargetPodfile = (config, props) => {
|
||||
return config_plugins_1.withDangerousMod(config, [
|
||||
"ios",
|
||||
async (config) => {
|
||||
const podfile = path_1.default.join(config.modRequest.platformProjectRoot, "Podfile");
|
||||
let contents = await fs_1.default.promises.readFile(podfile, "utf8");
|
||||
contents = updateDeploymentTargetPodfile(contents, props.deploymentTarget);
|
||||
await fs_1.default.promises.writeFile(podfile, contents);
|
||||
return config;
|
||||
},
|
||||
]);
|
||||
};
|
||||
function updateDeploymentTargetPodfile(contents, deploymentTarget) {
|
||||
return contents.replace(/^(\s*platform :ios, ['"])([\d.]+)(['"])/gm, (match, prefix, version, suffix) => {
|
||||
if (semver_1.default.lt(toSemVer(version), toSemVer(deploymentTarget))) {
|
||||
return `${prefix}${deploymentTarget}${suffix}`;
|
||||
}
|
||||
return match;
|
||||
});
|
||||
}
|
||||
exports.updateDeploymentTargetPodfile = updateDeploymentTargetPodfile;
|
||||
const withIosDeploymentTargetXcodeProject = (config, props) => {
|
||||
return config_plugins_1.withXcodeProject(config, (config) => {
|
||||
config.modResults = updateDeploymentTargetXcodeProject(config.modResults, props.deploymentTarget);
|
||||
return config;
|
||||
});
|
||||
};
|
||||
function updateDeploymentTargetXcodeProject(project, deploymentTarget) {
|
||||
const configurations = project.pbxXCBuildConfigurationSection();
|
||||
// @ts-ignore
|
||||
for (const { buildSettings } of Object.values(configurations !== null && configurations !== void 0 ? configurations : {})) {
|
||||
const currDeploymentTarget = buildSettings === null || buildSettings === void 0 ? void 0 : buildSettings.IPHONEOS_DEPLOYMENT_TARGET;
|
||||
if (currDeploymentTarget &&
|
||||
semver_1.default.lt(toSemVer(currDeploymentTarget), toSemVer(deploymentTarget))) {
|
||||
buildSettings.IPHONEOS_DEPLOYMENT_TARGET = deploymentTarget;
|
||||
}
|
||||
}
|
||||
return project;
|
||||
}
|
||||
exports.updateDeploymentTargetXcodeProject = updateDeploymentTargetXcodeProject;
|
||||
function toSemVer(version) {
|
||||
var _a;
|
||||
return (_a = semver_1.default.coerce(version)) !== null && _a !== void 0 ? _a : new semver_1.default.SemVer("0.0.0");
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@config-plugins/ffmpeg-kit-react-native",
|
||||
"version": "1.0.2",
|
||||
"version": "1.0.3",
|
||||
"description": "Config plugin to auto configure FFMPEG on prebuild",
|
||||
"main": "build/withFFMPEG.js",
|
||||
"types": "build/withFFMPEG.d.ts",
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
### @config-plugins/react-native-adjust [1.0.2](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-03-22)
|
||||
|
||||
|
||||
### Other chores
|
||||
|
||||
* git ignore build folders ([#59](https://github.com/expo/config-plugins/issues/59)) ([d6050be](https://github.com/expo/config-plugins/commit/d6050beb2a5c68dc59287c27ec388c2002ec7904))
|
||||
|
||||
### @config-plugins/react-native-adjust [1.0.1](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-03-16)
|
||||
|
||||
|
||||
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
import { ConfigPlugin } from "@expo/config-plugins";
|
||||
declare const _default: ConfigPlugin<void | {
|
||||
targetAndroid12?: boolean | undefined;
|
||||
}>;
|
||||
export default _default;
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
"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,6 +1,6 @@
|
||||
{
|
||||
"name": "@config-plugins/react-native-adjust",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"description": "Config plugin to auto configure Adjust SDK on prebuild",
|
||||
"main": "build/withReactNativeAdjust.js",
|
||||
"types": "build/withReactNativeAdjust.d.ts",
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
### @config-plugins/react-native-ble-plx [1.0.2](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-03-22)
|
||||
|
||||
|
||||
### Other chores
|
||||
|
||||
* git ignore build folders ([#59](https://github.com/expo/config-plugins/issues/59)) ([d6050be](https://github.com/expo/config-plugins/commit/d6050beb2a5c68dc59287c27ec388c2002ec7904))
|
||||
|
||||
### @config-plugins/react-native-ble-plx [1.0.1](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-03-16)
|
||||
|
||||
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
import { ConfigPlugin } from "@expo/config-plugins";
|
||||
import { BackgroundMode } from "./withBLEBackgroundModes";
|
||||
export { BackgroundMode };
|
||||
declare const _default: ConfigPlugin<void | {
|
||||
isBackgroundEnabled?: boolean | undefined;
|
||||
modes?: BackgroundMode[] | undefined;
|
||||
bluetoothAlwaysPermission?: string | false | undefined;
|
||||
bluetoothPeripheralPermission?: string | false | undefined;
|
||||
}>;
|
||||
export default _default;
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
"use strict";
|
||||
/* eslint-disable flowtype/no-types-missing-file-annotation */
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.BackgroundMode = void 0;
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
const withBLEAndroidManifest_1 = require("./withBLEAndroidManifest");
|
||||
const withBLEBackgroundModes_1 = require("./withBLEBackgroundModes");
|
||||
Object.defineProperty(exports, "BackgroundMode", { enumerable: true, get: function () { return withBLEBackgroundModes_1.BackgroundMode; } });
|
||||
const withBluetoothPermissions_1 = require("./withBluetoothPermissions");
|
||||
const pkg = { name: "react-native-ble-plx", version: "UNVERSIONED" }; //require('react-native-ble-plx/package.json')
|
||||
/**
|
||||
* Apply BLE configuration for Expo SDK 42 projects.
|
||||
*/
|
||||
const withBLE = (config, props = {}) => {
|
||||
var _a;
|
||||
const _props = props || {};
|
||||
const isBackgroundEnabled = (_a = _props.isBackgroundEnabled) !== null && _a !== void 0 ? _a : false;
|
||||
// iOS
|
||||
config = withBluetoothPermissions_1.withBluetoothPermissions(config, _props);
|
||||
config = withBLEBackgroundModes_1.withBLEBackgroundModes(config, _props.modes || []);
|
||||
// Android
|
||||
config = config_plugins_1.AndroidConfig.Permissions.withPermissions(config, [
|
||||
"android.permission.BLUETOOTH",
|
||||
"android.permission.BLUETOOTH_ADMIN",
|
||||
]);
|
||||
config = withBLEAndroidManifest_1.withBLEAndroidManifest(config, { isBackgroundEnabled });
|
||||
return config;
|
||||
};
|
||||
exports.default = config_plugins_1.createRunOncePlugin(withBLE, pkg.name, pkg.version);
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
import { ConfigPlugin, AndroidConfig } from "@expo/config-plugins";
|
||||
declare type InnerManifest = AndroidConfig.Manifest.AndroidManifest['manifest'];
|
||||
declare type ManifestPermission = InnerManifest["permission"];
|
||||
declare type AndroidManifest = {
|
||||
manifest: InnerManifest & {
|
||||
permission?: ManifestPermission;
|
||||
"uses-permission"?: InnerManifest["uses-permission"];
|
||||
"uses-permission-sdk-23"?: InnerManifest["uses-permission"];
|
||||
"uses-feature"?: InnerManifest["uses-feature"];
|
||||
};
|
||||
};
|
||||
export declare const withBLEAndroidManifest: ConfigPlugin<{
|
||||
isBackgroundEnabled: boolean;
|
||||
}>;
|
||||
export declare function addFineControlPermissionToManifest(androidManifest: AndroidManifest): AndroidManifest;
|
||||
export declare function addBLEHardwareFeatureToManifest(androidManifest: AndroidConfig.Manifest.AndroidManifest): AndroidConfig.Manifest.AndroidManifest;
|
||||
export {};
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
"use strict";
|
||||
/* eslint-disable flowtype/no-types-missing-file-annotation */
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.addBLEHardwareFeatureToManifest = exports.addFineControlPermissionToManifest = exports.withBLEAndroidManifest = void 0;
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
const withBLEAndroidManifest = (config, { isBackgroundEnabled }) => {
|
||||
return config_plugins_1.withAndroidManifest(config, (config) => {
|
||||
config.modResults = addFineControlPermissionToManifest(config.modResults);
|
||||
if (isBackgroundEnabled) {
|
||||
config.modResults = addBLEHardwareFeatureToManifest(config.modResults);
|
||||
}
|
||||
return config;
|
||||
});
|
||||
};
|
||||
exports.withBLEAndroidManifest = withBLEAndroidManifest;
|
||||
function addFineControlPermissionToManifest(androidManifest) {
|
||||
var _a;
|
||||
// Add `<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION"/>` to the AndroidManifest.xml
|
||||
if (!Array.isArray(androidManifest.manifest["uses-permission-sdk-23"])) {
|
||||
androidManifest.manifest["uses-permission-sdk-23"] = [];
|
||||
}
|
||||
if (!androidManifest.manifest["uses-permission-sdk-23"].find((item) => item.$["android:name"] === "android.permission.ACCESS_FINE_LOCATION")) {
|
||||
(_a = androidManifest.manifest["uses-permission-sdk-23"]) === null || _a === void 0 ? void 0 : _a.push({
|
||||
$: {
|
||||
"android:name": "android.permission.ACCESS_FINE_LOCATION",
|
||||
},
|
||||
});
|
||||
}
|
||||
return androidManifest;
|
||||
}
|
||||
exports.addFineControlPermissionToManifest = addFineControlPermissionToManifest;
|
||||
// Add this line if your application always requires BLE. More info can be found on: https://developer.android.com/guide/topics/connectivity/bluetooth-le.html#permissions
|
||||
function addBLEHardwareFeatureToManifest(androidManifest) {
|
||||
var _a;
|
||||
// Add `<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>` to the AndroidManifest.xml
|
||||
if (!Array.isArray(androidManifest.manifest["uses-feature"])) {
|
||||
androidManifest.manifest["uses-feature"] = [];
|
||||
}
|
||||
if (!androidManifest.manifest["uses-feature"].find((item) => item.$["android:name"] === "android.hardware.bluetooth_le")) {
|
||||
(_a = androidManifest.manifest["uses-feature"]) === null || _a === void 0 ? void 0 : _a.push({
|
||||
$: {
|
||||
"android:name": "android.hardware.bluetooth_le",
|
||||
"android:required": "true",
|
||||
},
|
||||
});
|
||||
}
|
||||
return androidManifest;
|
||||
}
|
||||
exports.addBLEHardwareFeatureToManifest = addBLEHardwareFeatureToManifest;
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
import { ConfigPlugin } from '@expo/config-plugins';
|
||||
export declare enum BackgroundMode {
|
||||
Central = "central",
|
||||
Peripheral = "peripheral"
|
||||
}
|
||||
/**
|
||||
* Append `UIBackgroundModes` to the `Info.plist`.
|
||||
*/
|
||||
export declare const withBLEBackgroundModes: ConfigPlugin<BackgroundMode[]>;
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.withBLEBackgroundModes = exports.BackgroundMode = void 0;
|
||||
/* eslint-disable flowtype/no-types-missing-file-annotation */
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
var BackgroundMode;
|
||||
(function (BackgroundMode) {
|
||||
BackgroundMode["Central"] = "central";
|
||||
BackgroundMode["Peripheral"] = "peripheral";
|
||||
})(BackgroundMode = exports.BackgroundMode || (exports.BackgroundMode = {}));
|
||||
function ensureKey(arr, key) {
|
||||
if (!arr.find(mode => mode === key)) {
|
||||
arr.push(key);
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
const centralKey = 'bluetooth-central';
|
||||
const peripheralKey = 'bluetooth-peripheral';
|
||||
/**
|
||||
* Append `UIBackgroundModes` to the `Info.plist`.
|
||||
*/
|
||||
const withBLEBackgroundModes = (c, modes) => {
|
||||
return config_plugins_1.withInfoPlist(c, config => {
|
||||
if (!Array.isArray(config.modResults.UIBackgroundModes)) {
|
||||
config.modResults.UIBackgroundModes = [];
|
||||
}
|
||||
if (modes.includes(BackgroundMode.Central)) {
|
||||
config.modResults.UIBackgroundModes = ensureKey(config.modResults.UIBackgroundModes, centralKey);
|
||||
}
|
||||
if (modes.includes(BackgroundMode.Peripheral)) {
|
||||
config.modResults.UIBackgroundModes = ensureKey(config.modResults.UIBackgroundModes, peripheralKey);
|
||||
}
|
||||
// Prevent empty array
|
||||
if (!config.modResults.UIBackgroundModes.length) {
|
||||
delete config.modResults.UIBackgroundModes;
|
||||
}
|
||||
return config;
|
||||
});
|
||||
};
|
||||
exports.withBLEBackgroundModes = withBLEBackgroundModes;
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
import { ConfigPlugin } from "@expo/config-plugins";
|
||||
export declare const withBluetoothPermissions: ConfigPlugin<{
|
||||
bluetoothAlwaysPermission?: string | false;
|
||||
bluetoothPeripheralPermission?: string | false;
|
||||
}>;
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.withBluetoothPermissions = void 0;
|
||||
/* eslint-disable flowtype/no-types-missing-file-annotation */
|
||||
const config_plugins_1 = require("@expo/config-plugins");
|
||||
const BLUETOOTH_ALWAYS = "Allow $(PRODUCT_NAME) to connect to bluetooth devices";
|
||||
const BLUETOOTH_PERIPHERAL_USAGE = "Allow $(PRODUCT_NAME) to connect to bluetooth devices";
|
||||
const withBluetoothPermissions = (c, { bluetoothAlwaysPermission, bluetoothPeripheralPermission } = {}) => {
|
||||
return config_plugins_1.withInfoPlist(c, (config) => {
|
||||
if (bluetoothAlwaysPermission !== false) {
|
||||
config.modResults.NSBluetoothAlwaysUsageDescription =
|
||||
bluetoothAlwaysPermission ||
|
||||
config.modResults.NSBluetoothAlwaysUsageDescription ||
|
||||
BLUETOOTH_ALWAYS;
|
||||
}
|
||||
if (bluetoothPeripheralPermission !== false) {
|
||||
config.modResults.NSBluetoothPeripheralUsageDescription =
|
||||
bluetoothPeripheralPermission ||
|
||||
config.modResults.NSBluetoothPeripheralUsageDescription ||
|
||||
BLUETOOTH_PERIPHERAL_USAGE;
|
||||
}
|
||||
return config;
|
||||
});
|
||||
};
|
||||
exports.withBluetoothPermissions = withBluetoothPermissions;
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@config-plugins/react-native-ble-plx",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"description": "Config plugin to auto configure react-native-ble-plx on prebuild",
|
||||
"main": "build/withBLE.js",
|
||||
"types": "build/withBLE.d.ts",
|
||||
|
||||
Reference in new issue
Block a user