Compare commits

...
6 changed files with 210 additions and 4 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).
+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.
+15
View File
@@ -0,0 +1,15 @@
export declare type ContentsJsonImageIdiom = "iphone" | "ipad" | "ios-marketing" | "universal";
export declare type ContentsJsonImageAppearance = {
appearance: "luminosity";
value: "dark";
};
export declare type ContentsJsonImageScale = "1x" | "2x" | "3x";
export interface ContentsJsonImage {
appearances?: ContentsJsonImageAppearance[];
idiom: ContentsJsonImageIdiom;
size?: string;
scale: ContentsJsonImageScale;
filename?: string;
platform?: string;
}
export declare function generateImessageIconsAsync(projectRoot: string, icon: string, iconsPath: string): Promise<ContentsJsonImage[]>;
+131
View File
@@ -0,0 +1,131 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateImessageIconsAsync = void 0;
const image_utils_1 = require("@expo/image-utils");
const fs_1 = __importDefault(require("fs"));
const path_1 = require("path");
const IMAGE_CACHE_NAME = "ios-stickers-icons";
// Hard-coding seemed like the clearest and safest way to implement the sizes.
const ICON_CONTENTS = [
{
idiom: "iphone",
sizes: [
{
size: 29,
scales: [2, 3],
},
{
size: [60, 45],
scales: [2, 3],
},
],
},
{
idiom: "ipad",
sizes: [
{
size: 29,
scales: [2],
},
{
size: [67, 50],
scales: [2],
},
{
size: [74, 55],
scales: [2],
},
],
},
{
idiom: "universal",
sizes: [
{
platform: "ios",
size: [27, 20],
scales: [2, 3],
},
{
platform: "ios",
size: [32, 24],
scales: [2, 3],
},
],
},
{
idiom: "ios-marketing",
sizes: [
{
size: 1024,
scales: [1],
},
{
platform: "ios",
size: [1024, 768],
scales: [1],
},
],
},
];
async function generateImessageIconsAsync(projectRoot, icon, iconsPath) {
// Ensure the Images.xcassets/AppIcon.appiconset path exists
fs_1.default.mkdirSync(iconsPath, { recursive: true });
// Store the image JSON data for assigning via the Contents.json
const imagesJson = [];
// keep track of icons that have been generated so we can reuse them in the Contents.json
const generatedIcons = {};
for (const platform of ICON_CONTENTS) {
// const isMarketing = platform.idiom === 'ios-marketing';
for (const { size, scales, ...rest } of platform.sizes) {
for (const scale of scales) {
// The marketing icon is special because it makes no sense.
const filename = getAppleIconName(size, scale, platform.idiom);
// Only create an image that hasn't already been generated.
const [width, height] = Array.isArray(size) ? size : [size, size];
if (!(filename in generatedIcons)) {
const iconWSizePx = width * scale;
const iconHSizePx = height * scale;
// Using this method will cache the images in `.expo` based on the properties used to generate them.
// this method also supports remote URLs and using the global sharp instance.
const { source } = await image_utils_1.generateImageAsync({ projectRoot, cacheType: IMAGE_CACHE_NAME }, {
src: icon,
name: filename,
width: iconWSizePx,
height: iconHSizePx,
removeTransparency: true,
// The icon should be square, but if it's not then it will be cropped.
resizeMode: "cover",
// Force the background color to solid white to prevent any transparency.
// TODO: Maybe use a more adaptive option based on the icon color?
backgroundColor: "#ffffff",
});
// Write image buffer to the file system.
const assetPath = path_1.join(iconsPath, filename);
await fs_1.default.promises.writeFile(assetPath, source);
// Save a reference to the generated image so we don't create a duplicate.
generatedIcons[filename] = true;
}
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) {
imgJson.platform = rest.platform;
}
}
}
}
return imagesJson;
}
exports.generateImessageIconsAsync = generateImessageIconsAsync;
function getAppleIconName(size, scale, idiom) {
const [width, height] = Array.isArray(size) ? size : [size, size];
return `App-Icon-${idiom}-${width}x${height}@${scale}x.png`;
}
@@ -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)