Compare commits

..
Author SHA1 Message Date
semantic-release-bot 987b109e46 chore: 2.0.0
## @config-plugins/react-native-quick-actions [2.0.0](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-06-13)

### ⚠ BREAKING CHANGES

* add SDK 45 support (#79)

### Features

* add SDK 45 support ([#79](https://github.com/expo/config-plugins/issues/79)) ([96c72dd](https://github.com/expo/config-plugins/commit/96c72dda469ace2b9eafd38ba4d21f1bcd2e3cdf))

### Other chores

* publish packages [no-ci] ([0c7b413](https://github.com/expo/config-plugins/commit/0c7b413a765e4b1ff92b9e3edc2b62077c41ce46))
2022-06-13 13:35:03 +00:00
Derek W. Stavis 226b2a6412 feat(siri-shortcut): Add config plugin (#86) 2022-06-13 15:31:30 +02:00
semantic-release-bot d1a2929130 chore: 2.0.0
## @config-plugins/react-native-google-cast [2.0.0](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-05-30)

### ⚠ BREAKING CHANGES

* add SDK 45 support (#79)

### Features

* add SDK 45 support ([#79](https://github.com/expo/config-plugins/issues/79)) ([96c72dd](https://github.com/expo/config-plugins/commit/96c72dda469ace2b9eafd38ba4d21f1bcd2e3cdf))

### Other chores

* publish packages [no-ci] ([0c7b413](https://github.com/expo/config-plugins/commit/0c7b413a765e4b1ff92b9e3edc2b62077c41ce46))
2022-05-30 22:16:53 +00:00
Evan Bacon a04de8a0e0 Update README.md 2022-05-30 17:13:19 -05:00
semantic-release-bot 20a4ecf8a8 chore: 2.0.1
### @config-plugins/ios-stickers [2.0.1](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-05-30)

### Bug Fixes

* **ios-stickers:** fix app icon generation ([#82](https://github.com/expo/config-plugins/issues/82)) ([190c489](https://github.com/expo/config-plugins/commit/190c489b764f285dbbecfa42fd7ee953fc849dcb))
2022-05-30 21:58:52 +00:00
Evan Bacon 9e8a90d523 Update README.md 2022-05-30 16:54:34 -05:00
semantic-release-bot 9c79b293d8 chore: 2.0.0
## @config-plugins/ffmpeg-kit-react-native [2.0.0](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-05-30)

### ⚠ BREAKING CHANGES

* add SDK 45 support (#79)

### Features

* add SDK 45 support ([#79](https://github.com/expo/config-plugins/issues/79)) ([96c72dd](https://github.com/expo/config-plugins/commit/96c72dda469ace2b9eafd38ba4d21f1bcd2e3cdf))

### Other chores

* publish packages [no-ci] ([0c7b413](https://github.com/expo/config-plugins/commit/0c7b413a765e4b1ff92b9e3edc2b62077c41ce46))
2022-05-30 21:27:42 +00:00
evanbacon 77eb67c5b6 Publish @config-plugins/[email protected] 2022-05-30 16:24:03 -05:00
Evan Bacon 190c489b76 fix(ios-stickers): fix app icon generation (#82) 2022-05-27 16:46:49 -05:00
semantic-release-bot 6c898afd0e chore: 2.0.0
## @config-plugins/react-native-ble-plx [2.0.0](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-05-27)

### ⚠ BREAKING CHANGES

* add SDK 45 support (#79)

### Features

* add SDK 45 support ([#79](https://github.com/expo/config-plugins/issues/79)) ([96c72dd](https://github.com/expo/config-plugins/commit/96c72dda469ace2b9eafd38ba4d21f1bcd2e3cdf))

### Other chores

* publish packages [no-ci] ([0c7b413](https://github.com/expo/config-plugins/commit/0c7b413a765e4b1ff92b9e3edc2b62077c41ce46))
2022-05-27 15:20:49 +00:00
46 changed files with 430 additions and 438 deletions

No files matched your search

+37
View File
@@ -6,6 +6,43 @@
- All packages here are community maintained. Feel free to improve docs, packages, tests, etc.
- We maintain a 1-1 mapping of **native packages** ⇔ `@config-plugins/*`. This means there should be no general utility packages here -- those are better suited for a different repo / NPM namespace.
## Awesome
Here is a list of known packages that have a built-in Config Plugin.
> Not all packages need a config plugin, packages that don't appear here might still work with managed EAS.
- [React Native Firebase](https://rnfirebase.io/) (`@react-native-firebase/perf`, `@react-native-firebase/app`)
- [react-native-nfc-manager](https://github.com/revtel/react-native-nfc-manager)
- [react-native-health](https://github.com/agencyenterprise/react-native-health)
- [@react-native-mapbox-gl/maps](https://github.com/rnmapbox/maps)
- [@logrocket/react-native](https://www.npmjs.com/package/@logrocket/react-native)
- [sentry-expo](https://www.npmjs.com/package/sentry-expo)
- [@leanplum/react-native-sdk](https://github.com/Leanplum/Leanplum-ReactNative-SDK#readme)
- [react-native-fbsdk-next](https://www.npmjs.com/package/react-native-fbsdk-next)
- [@stripe/stripe-react-native](https://www.npmjs.com/package/@stripe/stripe-react-native)
- [@react-native-voice/voice](https://www.npmjs.com/package/@react-native-voice/voice)
- [react-native-imglysdk](https://www.npmjs.com/package/react-native-imglysdk)
- [@viro-community/react-viro](https://github.com/virocommunity/viro)
- [react-native-msal](https://www.npmjs.com/package/react-native-msal)
- [react-native-spotlight-search](https://www.npmjs.com/package/react-native-spotlight-search)
- [newrelic-react-native-agent](https://www.npmjs.com/package/newrelic-react-native-agent)
- [react-native-videoeditorsdk](https://www.npmjs.com/package/react-native-videoeditorsdk)
### Complementary
More out-of-tree plugins which can be used to configure more packages.
- [onesignal-expo-plugin](https://github.com/OneSignal/onesignal-expo-plugin) (for use with `react-native-onesignal`)
- [@lyrahealth-inc/react-native-orientation-plugin](@lyrahealth-inc/react-native-orientation-plugin) (for use with `react-native-orientation-plugin`)
- [airship-expo-plugin](https://www.npmjs.com/package/airship-expo-plugin) (for use with `urbanairship-react-native`)
- [config-plugin-react-native-intercom](https://www.npmjs.com/package/config-plugin-react-native-intercom) (for use with `intercom-react-native`)
- [@allboatsrise/expo-marketingcloudsdk](https://www.npmjs.com/package/@allboatsrise/expo-marketingcloudsdk) (for use with `react-native-marketingcloudsdk`)
- [@ouvio/react-native-background-location-plugin](https://www.npmjs.com/package/@ouvio/react-native-background-location-plugin) (for use with `react-native-background-location-plugin`)
- [with-notifee](https://www.npmjs.com/package/with-notifee) (for use with [notifee](https://notifee.app/))
- [expo-community-flipper](https://www.npmjs.com/package/expo-community-flipper) (for use with Flipper)
## Contributing!
See the [contributing guide](/CONTRIBUTING.md).
@@ -1,80 +0,0 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Whitespace-only changes.
@@ -1,16 +0,0 @@
const path = require("path");
const folderName = path.basename(__dirname);
const cleanName = folderName.replace(/[_\s-]/g, "");
const appId = "dev.bacon." + cleanName;
module.exports = ({ config }) => {
if (!config.extra) config.extra = {};
// Expose CI env variables to the app
config.extra.CI = process.env.CI;
if (!config.ios) config.ios = {};
config.ios.bundleIdentifier = appId;
if (!config.android) config.android = {};
config.android.package = appId;
return config;
};
-8
View File
@@ -1,8 +0,0 @@
{
"expo": {
"icon": "https://icogen.vercel.app/api/icon?icon=1f334",
"plugins": [
"@config-plugins/airbridge-react-native-sdk"
]
}
}
@@ -1,6 +0,0 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
-5
View File
@@ -1,5 +0,0 @@
import { registerRootComponent } from "expo";
import App from "./src/App";
registerRootComponent(App);
@@ -1,6 +0,0 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
@@ -1,25 +0,0 @@
{
"name": "@config-plugins-app/airbridge-react-native-sdk",
"main": "./index.js",
"version": "1.0.0",
"scripts": {
"start": "expo start --dev-client",
"ios": "expo run:ios",
"android": "expo run:android"
},
"dependencies": {
"@config-plugins/airbridge-react-native-sdk": "*",
"expo": "^45.0.0",
"expo-splash-screen": "~0.15.1",
"react": "17.0.2",
"react-native": "0.68.2",
"airbridge-react-native-sdk": "^1.4.5",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9"
},
"private": true
}
@@ -1,10 +0,0 @@
import React from "react";
import { Text, View } from "react-native";
export default function App() {
return (
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
<Text>airbridge-react-native-sdk</Text>
</View>
);
}
@@ -1,3 +0,0 @@
# Gradle files
.gradle/
build/
@@ -1,67 +0,0 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
group = 'host.exp.exponent'
version = '2.0.0'
buildscript {
def expoModulesCorePlugin = new File(project(":expo-modules-core").projectDir.absolutePath, "ExpoModulesCorePlugin.gradle")
if (expoModulesCorePlugin.exists()) {
apply from: expoModulesCorePlugin
applyKotlinExpoModulesCorePlugin()
}
// 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
}
// Ensures backward compatibility
ext.getKotlinVersion = {
if (ext.has("kotlinVersion")) {
ext.kotlinVersion()
} else {
ext.safeExtGet("kotlinVersion", "1.6.10")
}
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${getKotlinVersion()}")
}
}
android {
compileSdkVersion safeExtGet("compileSdkVersion", 31)
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.majorVersion
}
defaultConfig {
minSdkVersion safeExtGet("minSdkVersion", 21)
targetSdkVersion safeExtGet("targetSdkVersion", 31)
versionCode 2
versionName '2.0.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:${getKotlinVersion()}"
}
@@ -1,2 +0,0 @@
<manifest package="expo.modules.adapters.airbridge">
</manifest>
@@ -1,15 +0,0 @@
package expo.modules.adapters.airbridge
import android.app.Application
import android.content.Context
import expo.modules.core.interfaces.ApplicationLifecycleListener
// import io.branch.rnbranch.RNBranchModule
class AirbridgeApplicationLifecycleListener(context: Context?) : ApplicationLifecycleListener {
var context = context
override fun onCreate(application: Application) {
super.onCreate(application)
// RNBranchModule.getAutoInstance(this.context)
}
}
@@ -1,15 +0,0 @@
package expo.modules.adapters.airbridge
import android.content.Context
import expo.modules.core.interfaces.ApplicationLifecycleListener
import expo.modules.core.interfaces.Package
import expo.modules.core.interfaces.ReactActivityLifecycleListener
class AirbridgePackage : Package {
override fun createApplicationLifecycleListeners(context: Context?): List<ApplicationLifecycleListener> {
return listOf(AirbridgeApplicationLifecycleListener(context))
}
override fun createReactActivityLifecycleListeners(activityContext: Context): List<ReactActivityLifecycleListener> {
return listOf(AirbridgeReactActivityLifecycleListener(activityContext))
}
}
@@ -1,22 +0,0 @@
package expo.modules.adapters.airbridge
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import expo.modules.core.interfaces.ReactActivityLifecycleListener
// import io.airbridge.rnbranch.RNBranchModule
class AirbridgeReactActivityLifecycleListener(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/withAirbridgeReactNativeSdk");
@@ -1,9 +0,0 @@
{
"platforms": [
"android",
"ios"
],
"ios": {
"appDelegateSubscribers": ["AirbridgeAppDelegate"]
}
}
@@ -1,35 +0,0 @@
require 'json'
package = JSON.parse(File.read(File.join(__dir__, '..', 'package.json')))
Pod::Spec.new do |s|
s.name = 'ExpoAdapterAirbridge'
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,18 +0,0 @@
import ExpoModulesCore
import AirbridgeRN
public class AirbridgeAppDelegate: ExpoAppDelegateSubscriber {
public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
AirbridgeRN.getInstance("YOUR_APP_TOKEN", appName:"YOUR_APP_NAME", withLaunchOptions:launchOptions)
// 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,25 +0,0 @@
import { ConfigPlugin, createRunOncePlugin } from "@expo/config-plugins";
/**
* Apply airbridge-react-native-sdk configuration for Expo SDK 42 projects.
*/
const withAirbridgeReactNativeSdk: ConfigPlugin<{} | void> = (config, _props = {}) => {
// Support passing no props to the plugin.
const props = _props || {};
// 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/airbridge-react-native-sdk` to a future
// upstream plugin in `airbridge-react-native-sdk`
name: "airbridge-react-native-sdk",
// 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(withAirbridgeReactNativeSdk, pkg.name, pkg.version);
@@ -1,3 +1,19 @@
## @config-plugins/ffmpeg-kit-react-native [2.0.0](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-05-30)
### ⚠ BREAKING CHANGES
* add SDK 45 support (#79)
### Features
* add SDK 45 support ([#79](https://github.com/expo/config-plugins/issues/79)) ([96c72dd](https://github.com/expo/config-plugins/commit/96c72dda469ace2b9eafd38ba4d21f1bcd2e3cdf))
### Other chores
* publish packages [no-ci] ([0c7b413](https://github.com/expo/config-plugins/commit/0c7b413a765e4b1ff92b9e3edc2b62077c41ce46))
### @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)
+7
View File
@@ -1,3 +1,10 @@
### @config-plugins/ios-stickers [2.0.1](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-05-30)
### Bug Fixes
* **ios-stickers:** fix app icon generation ([#82](https://github.com/expo/config-plugins/issues/82)) ([190c489](https://github.com/expo/config-plugins/commit/190c489b764f285dbbecfa42fd7ee953fc849dcb))
## @config-plugins/ios-stickers [2.0.0](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-05-12)
+4 -4
View File
@@ -38,7 +38,7 @@ In your app.json `plugins` array:
]
```
- name: defaults to the iOS app name
- icon: defaults to the iOS app icon
- columns: number of stickers to render, defaults to `3` iirc.
- stickers: local file paths or remote URLs, or `{ image: "...", name: "...", accessibilityLabel: "..." }`. Order is preserved.
- `name`: defaults to the iOS app name
- `icon`: defaults to the iOS app icon
- `columns`: number of stickers to render, defaults to `3`. Can be one of `2`, `3`, `4`.
- `stickers`: local file paths or remote URLs, or `{ image: "...", name: "...", accessibilityLabel: "..." }`. Order is preserved.
@@ -0,0 +1,8 @@
export const generateImageAsync = jest.fn(async (input: any, { src }) => {
const fs = require("fs");
return { source: fs.readFileSync(src) };
});
export const compositeImagesAsync = jest.fn(async ({ foreground }) => {
return foreground;
});
+2
View File
@@ -0,0 +1,2 @@
import { fs } from 'memfs';
module.exports = fs;
@@ -59,11 +59,11 @@ const ICON_CONTENTS = [
idiom: "ios-marketing",
sizes: [
{
platform: "ios",
size: 1024,
scales: [1],
},
{
platform: "ios",
size: [1024, 768],
scales: [1],
},
@@ -108,15 +108,16 @@ async function generateImessageIconsAsync(projectRoot, icon, iconsPath) {
// Save a reference to the generated image so we don't create a duplicate.
generatedIcons[filename] = true;
}
imagesJson.push({
idiom: platform.idiom,
size: `${width}x${height}`,
// @ts-ignore: template types not supported in TS yet
scale: `${scale}x`,
const imgJson = {
filename,
});
idiom: platform.idiom,
scale: `${scale}x`,
size: `${width}x${height}`,
};
// This order closely matches Xcode formatting.
imagesJson.push(imgJson);
if (rest.platform) {
imagesJson[imagesJson.length - 1].platform = rest.platform;
imgJson.platform = rest.platform;
}
}
}
+3 -3
View File
@@ -8,7 +8,7 @@ const config_plugins_1 = require("@expo/config-plugins");
const image_utils_1 = require("@expo/image-utils");
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const withStickerIcon_1 = require("./withStickerIcon");
const generateImessageIconsAsync_1 = require("./generateImessageIconsAsync");
const withStickerXcodeTarget_1 = require("./withStickerXcodeTarget");
const STICKERS_ROOT_PATH = "Stickers.xcassets";
const IMESSAGE_APP_ICON_PATH = "Stickers.xcassets/iMessage App Icon.stickersiconset";
@@ -70,13 +70,13 @@ const withStickerAssets = (config, { stickers, icon, size }) => {
const iMessageAppIconsPath = path_1.default.join(stickerRootPath, IMESSAGE_APP_ICON_PATH);
// Only generate icons if an icon is defined
const imessageIconContents = icon
? await withStickerIcon_1.generateImessageIconsAsync(config.modRequest.projectRoot, icon, iMessageAppIconsPath)
? await generateImessageIconsAsync_1.generateImessageIconsAsync(config.modRequest.projectRoot, icon, iMessageAppIconsPath)
: [];
const iMessageAppIconContentsJsonPath = path_1.default.join(iMessageAppIconsPath, "Contents.json");
fs_1.default.mkdirSync(iMessageAppIconsPath, {
recursive: true,
});
fs_1.default.writeFileSync(iMessageAppIconContentsJsonPath, JSON.stringify({ info: defaultInfo, images: imessageIconContents }, null, 2));
fs_1.default.writeFileSync(iMessageAppIconContentsJsonPath, JSON.stringify({ images: imessageIconContents, info: defaultInfo }, null, 2));
const stickerPackContentsPath = path_1.default.join(stickerRootPath, STICKER_PACK_PATH);
const stickersContents = {
info: defaultInfo,
+12 -1
View File
@@ -1 +1,12 @@
module.exports = require('expo-module-scripts/jest-preset-plugin');
const path = require("path");
const roots = ["__mocks__", "src"];
module.exports = {
...require("expo-module-scripts/jest-preset-plugin"),
rootDir: path.resolve(__dirname),
displayName: require("./package").name,
roots,
setupFiles: ["<rootDir>/jest/setup.js"],
clearMocks: true,
};
+2
View File
@@ -0,0 +1,2 @@
jest.mock("@expo/image-utils");
jest.mock("fs");
+6 -2
View File
@@ -1,10 +1,13 @@
{
"name": "@config-plugins/ios-stickers",
"version": "2.0.0",
"version": "2.0.1",
"description": "Config plugin to auto configure iOS iMessage stickers",
"main": "build/withStickerPack.js",
"types": "build/withStickerPack.d.ts",
"sideEffects": false,
"files": [
"build"
],
"repository": {
"type": "git",
"url": "https://github.com/expo/config-plugins.git",
@@ -30,6 +33,7 @@
"xcode": "^3.0.1"
},
"devDependencies": {
"expo-module-scripts": "^2.0.0"
"expo-module-scripts": "^2.0.0",
"memfs": "^2.15.5"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 80 B

@@ -0,0 +1,111 @@
import { generateImageAsync } from "@expo/image-utils";
import fs from "fs";
import { vol } from "memfs";
import path from "path";
import { generateImessageIconsAsync } from "../generateImessageIconsAsync";
const fsReal = jest.requireActual("fs") as typeof fs;
describe(generateImessageIconsAsync, () => {
it(`should generate imessage icons`, async () => {
vol.fromJSON({}, "/");
await fs.promises.writeFile(
"/icon.png",
await fsReal.promises.readFile(path.join(__dirname, "fixtures/icon.png"))
);
const contents = await generateImessageIconsAsync(
"/",
"/icon.png",
"/output"
);
expect(generateImageAsync).toHaveBeenCalledTimes(13);
expect(contents).toEqual([
{
filename: "[email protected]",
idiom: "iphone",
scale: "2x",
size: "29x29",
},
{
filename: "[email protected]",
idiom: "iphone",
scale: "3x",
size: "29x29",
},
{
filename: "[email protected]",
idiom: "iphone",
scale: "2x",
size: "60x45",
},
{
filename: "[email protected]",
idiom: "iphone",
scale: "3x",
size: "60x45",
},
{
filename: "[email protected]",
idiom: "ipad",
scale: "2x",
size: "29x29",
},
{
filename: "[email protected]",
idiom: "ipad",
scale: "2x",
size: "67x50",
},
{
filename: "[email protected]",
idiom: "ipad",
scale: "2x",
size: "74x55",
},
{
filename: "[email protected]",
idiom: "universal",
platform: "ios",
scale: "2x",
size: "27x20",
},
{
filename: "[email protected]",
idiom: "universal",
platform: "ios",
scale: "3x",
size: "27x20",
},
{
filename: "[email protected]",
idiom: "universal",
platform: "ios",
scale: "2x",
size: "32x24",
},
{
filename: "[email protected]",
idiom: "universal",
platform: "ios",
scale: "3x",
size: "32x24",
},
{
filename: "[email protected]",
idiom: "ios-marketing",
scale: "1x",
size: "1024x1024",
},
{
filename: "[email protected]",
idiom: "ios-marketing",
platform: "ios",
scale: "1x",
size: "1024x768",
},
]);
});
});
@@ -86,12 +86,11 @@ const ICON_CONTENTS: {
idiom: "ios-marketing",
sizes: [
{
platform: "ios",
size: 1024,
scales: [1],
},
{
platform: "ios",
size: [1024, 768],
scales: [1],
},
@@ -148,15 +147,16 @@ export async function generateImessageIconsAsync(
// Save a reference to the generated image so we don't create a duplicate.
generatedIcons[filename] = true;
}
imagesJson.push({
idiom: platform.idiom as ContentsJsonImageIdiom,
size: `${width}x${height}`,
// @ts-ignore: template types not supported in TS yet
scale: `${scale}x`,
const imgJson: ContentsJsonImage = {
filename,
});
idiom: platform.idiom as ContentsJsonImageIdiom,
scale: `${scale}x`,
size: `${width}x${height}`,
};
// This order closely matches Xcode formatting.
imagesJson.push(imgJson);
if (rest.platform) {
imagesJson[imagesJson.length - 1].platform = rest.platform;
imgJson.platform = rest.platform;
}
}
}
@@ -3,7 +3,7 @@ import { generateImageAsync } from "@expo/image-utils";
import fs from "fs";
import path from "path";
import { generateImessageIconsAsync } from "./withStickerIcon";
import { generateImessageIconsAsync } from "./generateImessageIconsAsync";
import { getProjectStickersName } from "./withStickerXcodeTarget";
const STICKERS_ROOT_PATH = "Stickers.xcassets";
@@ -136,7 +136,7 @@ export const withStickerAssets: ConfigPlugin<{
fs.writeFileSync(
iMessageAppIconContentsJsonPath,
JSON.stringify(
{ info: defaultInfo, images: imessageIconContents },
{ images: imessageIconContents, info: defaultInfo },
null,
2
)
@@ -1,3 +1,19 @@
## @config-plugins/react-native-ble-plx [2.0.0](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-05-27)
### ⚠ BREAKING CHANGES
* add SDK 45 support (#79)
### Features
* add SDK 45 support ([#79](https://github.com/expo/config-plugins/issues/79)) ([96c72dd](https://github.com/expo/config-plugins/commit/96c72dda469ace2b9eafd38ba4d21f1bcd2e3cdf))
### Other chores
* publish packages [no-ci] ([0c7b413](https://github.com/expo/config-plugins/commit/0c7b413a765e4b1ff92b9e3edc2b62077c41ce46))
### @config-plugins/react-native-ble-plx [1.0.3](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-05-09)
@@ -1,3 +1,19 @@
## @config-plugins/react-native-google-cast [2.0.0](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-05-30)
### ⚠ BREAKING CHANGES
* add SDK 45 support (#79)
### Features
* add SDK 45 support ([#79](https://github.com/expo/config-plugins/issues/79)) ([96c72dd](https://github.com/expo/config-plugins/commit/96c72dda469ace2b9eafd38ba4d21f1bcd2e3cdf))
### Other chores
* publish packages [no-ci] ([0c7b413](https://github.com/expo/config-plugins/commit/0c7b413a765e4b1ff92b9e3edc2b62077c41ce46))
### @config-plugins/react-native-google-cast [1.0.3](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-03-23)
@@ -1,3 +1,19 @@
## @config-plugins/react-native-quick-actions [2.0.0](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-06-13)
### ⚠ BREAKING CHANGES
* add SDK 45 support (#79)
### Features
* add SDK 45 support ([#79](https://github.com/expo/config-plugins/issues/79)) ([96c72dd](https://github.com/expo/config-plugins/commit/96c72dda469ace2b9eafd38ba4d21f1bcd2e3cdf))
### Other chores
* publish packages [no-ci] ([0c7b413](https://github.com/expo/config-plugins/commit/0c7b413a765e4b1ff92b9e3edc2b62077c41ce46))
### @config-plugins/react-native-quick-actions [1.0.2](https://github.com/expo/config-plugins/compare/@config-plugins/[email protected]...@config-plugins/[email protected]) (2022-03-22)
@@ -1,6 +1,6 @@
# @config-plugins/airbridge-react-native-sdk
# @config-plugins/react-native-siri-shortcut
Expo Config Plugin to auto configure [`airbridge-react-native-sdk`](https://www.npmjs.com/package/airbridge-react-native-sdk) when the native code is generated (`expo prebuild`).
Expo Config Plugin to auto configure [`react-native-siri-shortcut`](https://www.npmjs.com/package/react-native-siri-shortcut) when the native code is generated (`expo prebuild`).
## Expo installation
@@ -11,7 +11,7 @@ This package cannot be used in the "Expo Go" app because [it requires custom nat
- First install the package with yarn, npm, or [`expo install`](https://docs.expo.io/workflow/expo-cli/#expo-install).
```sh
expo install airbridge-react-native-sdk @config-plugins/airbridge-react-native-sdk
expo install react-native-siri-shortcut @config-plugins/react-native-siri-shortcut
```
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`:
@@ -19,7 +19,7 @@ After installing this npm package, add the [config plugin](https://docs.expo.io/
```json
{
"expo": {
"plugins": ["@config-plugins/airbridge-react-native-sdk"]
"plugins": ["@config-plugins/react-native-siri-shortcut"]
}
}
```
@@ -28,9 +28,7 @@ Next, rebuild your app as described in the ["Adding custom native code"](https:/
## 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.
- `foobar` (_boolean_): Does XYZ. Default `false`.
When working with Siri Shorcuts, you need to defined their identifiers on the Xcode project. To achieve the same result using this plugin, just pass an array of strings with the identifiers of your shortcuts, and they will be added automatically during the build cycle:
#### Example
@@ -39,10 +37,11 @@ The plugin provides props for extra customization. Every time you change the pro
"expo": {
"plugins": [
[
"@config-plugins/airbridge-react-native-sdk",
{
// props ...
}
"@config-plugins/react-native-siri-shortcut",
[
"com.example.InitiateWorkout",
"com.example.FinishWorkout",
],
]
]
}
@@ -0,0 +1 @@
module.exports = require("./build/withReactNativeSiriShortcut");
@@ -1,25 +1,15 @@
{
"name": "@config-plugins/airbridge-react-native-sdk",
"name": "@config-plugins/react-native-siri-shortcut",
"version": "0.0.0",
"description": "Config plugin for airbridge-react-native-sdk package",
"author": "650 Industries, Inc.",
"license": "MIT",
"homepage": "https://github.com/expo/config-plugins/tree/main/packages/airbridge-react-native-sdk",
"main": "build/withAirbridgeReactNativeSdk.js",
"types": "build/withAirbridgeReactNativeSdk.d.ts",
"description": "Config plugin for react-native-siri-shortcut package",
"main": "build/withReactNativeSiriShortcut.js",
"types": "build/withReactNativeSiriShortcut.d.ts",
"sideEffects": false,
"repository": {
"type": "git",
"url": "https://github.com/expo/config-plugins.git",
"directory": "packages/airbridge-react-native-sdk"
"directory": "packages/react-native-siri-shortcut"
},
"files": [
"android",
"app.plugin.js",
"build",
"expo-module.config.json",
"ios"
],
"scripts": {
"build": "expo-module build",
"clean": "expo-module clean",
@@ -34,7 +24,7 @@
"expo",
"config-plugins",
"prebuild",
"airbridge-react-native-sdk",
"react-native-siri-shortcut",
"expo-42"
],
"jest": {
@@ -0,0 +1,117 @@
import {
ConfigPlugin,
createRunOncePlugin,
withAppDelegate,
withInfoPlist,
withEntitlementsPlist,
} from "@expo/config-plugins";
import {
mergeContents,
MergeResults,
} from "@expo/config-plugins/build/utils/generateCode";
/**
* Apply react-native-siri-shortcut configuration for Expo SDK 44 projects.
*/
const withReactNativeSiriShortcut: ConfigPlugin<void | string[]> = (
config,
activityTypes
) => {
config = withSiriShortcutAppDelegate(config);
const items = activityTypes || [];
if (!Array.isArray(items) || !items.length) {
return config;
}
return withInfoPlist(config, (config) => {
config.modResults.NSUserActivityTypes = items;
return config;
});
};
export function addSiriShortcutAppDelegateImport(src: string): MergeResults {
return mergeContents({
tag: "react-native-siri-shortcut",
src,
newSrc: "#import <RNSiriShortcuts/RNSiriShortcuts.h>",
anchor: /#import "AppDelegate\.h"/,
offset: 1,
comment: "//",
});
}
export function addSiriShortcutAppDelegateInit(src: string): MergeResults {
const newSrc = [];
newSrc.push(
" BOOL shortcutResult = [RNSSSiriShortcuts application:application continueUserActivity:userActivity restorationHandler:restorationHandler];",
" if (shortcutResult) {",
" return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || shortcutResult;",
" }"
);
console.log(src);
return mergeContents({
tag: "react-native-siri-shortcut-delegate",
src,
newSrc: newSrc.join("\n"),
anchor:
/ return \[super application:application continueUserActivity:userActivity restorationHandler:restorationHandler\] \|\| result;/,
offset: -1,
comment: "//",
});
}
const withSiriEntitlements: ConfigPlugin = (config) => {
return withEntitlementsPlist(config, (config) => {
config.modResults["com.apple.developer.siri"] = true;
return config;
});
};
const withSiriShortcutAppDelegate: ConfigPlugin = (config) => {
let cfg = withAppDelegate(config, (config) => {
if (["objc", "objcpp"].includes(config.modResults.language)) {
try {
config.modResults.contents = addSiriShortcutAppDelegateImport(
config.modResults.contents
).contents;
config.modResults.contents = addSiriShortcutAppDelegateInit(
config.modResults.contents
).contents;
} catch (error: any) {
if (error.code === "ERR_NO_MATCH") {
throw new Error(
`Cannot add Siri Shortcut to the project's AppDelegate because it's malformed. Please report this with a copy of your project AppDelegate.`
);
}
throw error;
}
} else {
throw new Error(
"Cannot setup Siri Shortcut because the AppDelegate is not Objective C"
);
}
return config;
});
cfg = withSiriEntitlements(cfg);
return cfg;
};
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-siri-shortcut` to a future
// upstream plugin in `react-native-siri-shortcut`
name: "react-native-siri-shortcut",
// 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(
withReactNativeSiriShortcut,
pkg.name,
pkg.version
);
+20 -14
View File
@@ -4976,15 +4976,6 @@ airbnb-prop-types@^2.16.0:
prop-types-exact "^1.2.0"
react-is "^16.13.1"
airbridge-react-native-sdk@^1.4.5:
version "1.4.5"
resolved "https://registry.yarnpkg.com/airbridge-react-native-sdk/-/airbridge-react-native-sdk-1.4.5.tgz#281d370b4ff3f4491b80d8a0d6d771de5024c4b9"
integrity sha512-gdpm+p5m6pk5CPQ/hrW+ll5qs3xFunwMDZR3A4v8oRpGSoqDQrelBflWwf3B/ay9dSFwBARfdOsj4H+Mho/LpQ==
dependencies:
lodash.isfunction "^3.0.9"
lodash.isplainobject "^4.0.6"
lodash.isstring "^4.0.1"
ajv-errors@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
@@ -9069,6 +9060,11 @@ fast-diff@^1.1.2:
resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
[email protected]:
version "0.0.2"
resolved "https://registry.yarnpkg.com/fast-extend/-/fast-extend-0.0.2.tgz#f5ec42cf40b9460f521a6387dfb52deeed671dbd"
integrity sha1-9exCz0C5Rg9SGmOH37Ut7u1nHb0=
fast-glob@^2.2.6:
version "2.2.7"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d"
@@ -9541,6 +9537,11 @@ fs-minipass@^2.0.0, fs-minipass@^2.1.0:
dependencies:
minipass "^3.0.0"
fs-monkey@^0.3.3:
version "0.3.3"
resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-0.3.3.tgz#7960bb2b1fa2653731b9d0e2e84812a7e8b3664a"
integrity sha512-FNUvuTAJ3CqCQb5ELn+qCbGR/Zllhf2HtwsdAtBi59s1WeCjKMT81fHcSu7dwIskqGVK+MmOrb7VOBlq3/SItw==
fs-readdir-recursive@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
@@ -13143,11 +13144,6 @@ lodash.isequal@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
lodash.isfunction@^3.0.9:
version "3.0.9"
resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051"
integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==
lodash.ismatch@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37"
@@ -13580,6 +13576,14 @@ [email protected]:
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
memfs@^2.15.5:
version "2.17.1"
resolved "https://registry.yarnpkg.com/memfs/-/memfs-2.17.1.tgz#bfcc11b6308214b4fb33eaca101132722d22e103"
integrity sha512-4kAcqibPAd8DN8/UIW/6OwvbhNq6MqwsQ0pxjo+2ZmxPlQAbn9TAepnRpdeYfw4Qq0Y+QqwE6wngLUowo2fcjg==
dependencies:
fast-extend "0.0.2"
fs-monkey "^0.3.3"
memory-cache@~0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/memory-cache/-/memory-cache-0.2.0.tgz#7890b01d52c00c8ebc9d533e1f8eb17e3034871a"
@@ -20114,8 +20118,10 @@ watchpack@^1.6.1:
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453"
integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==
dependencies:
chokidar "^3.4.1"
graceful-fs "^4.1.2"
neo-async "^2.5.0"
watchpack-chokidar2 "^2.0.1"
optionalDependencies:
chokidar "^3.4.1"
watchpack-chokidar2 "^2.0.1"