Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
731c5b07b4 | ||
|
|
96c72dda46 | ||
|
|
29ee948c98 | ||
|
|
2fc8f5a3bc | ||
|
|
7a570fb05a | ||
|
|
aed09045d6 |
No files matched your search
@@ -56,3 +56,10 @@ xcuserdata
|
||||
packages/*/build/**
|
||||
packages/*/plugin/build/**
|
||||
packages/@*/*/build/**
|
||||
|
||||
|
||||
# App native folders
|
||||
|
||||
apps/*/ios/*
|
||||
apps/*/android/*
|
||||
apps/*/web-build/*
|
||||
@@ -1,9 +1,3 @@
|
||||
// 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/react-native-ble-plx/App';
|
||||
export { default } from './src/react-native-webrtc/App';
|
||||
export { default } from './src/detox/App';
|
||||
// export { default } from './src/android-jsc-intl/App';
|
||||
// export { default } from './src/ffmpeg-kit-react-native/App';
|
||||
// export { default } from './src/android-jsc-adjust/App';
|
||||
@@ -4,7 +4,7 @@
|
||||
"slug": "app",
|
||||
"version": "1.0.0",
|
||||
"orientation": "portrait",
|
||||
"icon": "./assets/icons/winter.png",
|
||||
"icon": "https://icogen.vercel.app/api/icon",
|
||||
"splash": {
|
||||
"image": "./assets/splash.png",
|
||||
"resizeMode": "contain",
|
||||
@@ -16,86 +16,25 @@
|
||||
"assetBundlePatterns": ["**/*"],
|
||||
"ios": {
|
||||
"supportsTablet": true,
|
||||
"bundleIdentifier": "dev.bacon.app",
|
||||
"config": {
|
||||
"branch": {
|
||||
"apiKey": "key_live_f9f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8"
|
||||
}
|
||||
}
|
||||
"bundleIdentifier": "dev.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/android-jsc-intl"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -23,53 +23,35 @@
|
||||
"dependencies": {
|
||||
"@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-branch": "*",
|
||||
"@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": "*",
|
||||
"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",
|
||||
"expo": "^45.0.0",
|
||||
"detox": "^19.6.9",
|
||||
"expo-localization": "~13.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"expo-updates": "~0.13.1",
|
||||
"fbjs": "^0.8.18",
|
||||
"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-safe-area-context": "3.3.2",
|
||||
"react-native-web": "0.17.1",
|
||||
"react-native-webrtc": "^1.89.3"
|
||||
"react": "17.0.2",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"react-native-adjust": "^4.29.6",
|
||||
"react-native-callkeep": "^4.3.3",
|
||||
"react-native-safe-area-context": "4.2.4",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9",
|
||||
"@babel/plugin-syntax-jsx": "^7.16.0",
|
||||
"@expo/metro-config": "~0.3.7",
|
||||
"@expo/xcpretty": "^4.1.0",
|
||||
"@expo/xcpretty": "^4.1.2",
|
||||
"@types/jest": "^26.0.19",
|
||||
"@types/luxon": "^1.27.1",
|
||||
"@types/react": "~17.0.21",
|
||||
"@types/react-native": "~0.64.12",
|
||||
"babel-jest": "~25.2.6",
|
||||
"detox": "^19.1.0",
|
||||
"jest": "^26.6.3",
|
||||
"jest-circus": "^26.5.2",
|
||||
"ts-jest": "^26.4.4",
|
||||
|
||||
@@ -1,142 +0,0 @@
|
||||
import Entypo from '@expo/vector-icons/Entypo';
|
||||
import React from 'react';
|
||||
import { Image, SafeAreaView, Text, View } from 'react-native';
|
||||
import AppIcon from 'react-native-dynamic-app-icon';
|
||||
import TouchableBounce from 'react-native/Libraries/Components/Touchable/TouchableBounce';
|
||||
|
||||
function useIconName() {
|
||||
const [icon, _setIcon] = React.useState(null);
|
||||
|
||||
React.useEffect(() => {
|
||||
let isMounted = true;
|
||||
AppIcon.getIconName((result) => {
|
||||
if (isMounted) _setIcon(result.iconName);
|
||||
});
|
||||
return () => (isMounted = false);
|
||||
}, []);
|
||||
|
||||
const setIcon = React.useCallback(
|
||||
(icon) => {
|
||||
AppIcon.setAppIcon(icon);
|
||||
_setIcon(icon || null);
|
||||
},
|
||||
[_setIcon]
|
||||
);
|
||||
return [icon === "default" ? null : icon, setIcon];
|
||||
}
|
||||
|
||||
|
||||
const icons = [
|
||||
{ name: "Auto", source: require("../../assets/icons/winter.png"), iconId: null },
|
||||
{ name: "Spring", source: require("../../assets/icons/spring.png"), iconId: '0' },
|
||||
{ name: "Summer", source: require("../../assets/icons/summer.png"), iconId: '1' },
|
||||
{ name: "Autumn", source: require("../../assets/icons/autumn.png"), iconId: '2' },
|
||||
{ name: "Fall", source: require("../../assets/icons/fall.png"), iconId: '3' },
|
||||
{ name: "Solstice", source: require("../../assets/icons/solstice.png"), iconId: '4' },
|
||||
|
||||
];
|
||||
|
||||
export default function App() {
|
||||
const [_icon, setIcon] = useIconName();
|
||||
|
||||
return (
|
||||
<SafeAreaView
|
||||
style={{
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<View style={{ width: "100%" }}>
|
||||
{icons.map((icon, index) => {
|
||||
return (
|
||||
<Item
|
||||
onPress={() => {
|
||||
setIcon(icon.iconId);
|
||||
}}
|
||||
isSelected={icon.iconId === _icon}
|
||||
name={icon.name}
|
||||
source={icon.source}
|
||||
key={String(index)}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</View>
|
||||
</SafeAreaView>
|
||||
);
|
||||
}
|
||||
|
||||
function Item({ ...props }) {
|
||||
return (
|
||||
<TouchableBounce
|
||||
onPress={props.onPress}
|
||||
style={{ marginVertical: 8, marginHorizontal: 24 }}
|
||||
>
|
||||
<View
|
||||
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
justifyContent: "space-between",
|
||||
alignItems: "stretch",
|
||||
shadowColor: "#000",
|
||||
shadowOffset: {
|
||||
width: 0,
|
||||
height: 4,
|
||||
},
|
||||
shadowOpacity: props.isSelected ? 0.35 : 0.2,
|
||||
shadowRadius: 8.46,
|
||||
|
||||
backgroundColor: props.isSelected ? "#000" : "#F1F1F1",
|
||||
elevation: 9,
|
||||
paddingHorizontal: 12,
|
||||
paddingVertical: 12,
|
||||
borderRadius: 20,
|
||||
}}
|
||||
>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<Image
|
||||
source={props.source}
|
||||
style={{
|
||||
width: 64,
|
||||
aspectRatio: 1,
|
||||
resizeMode: "cover",
|
||||
borderRadius: 16,
|
||||
}}
|
||||
/>
|
||||
<Text
|
||||
style={{
|
||||
marginLeft: 20,
|
||||
fontSize: 18,
|
||||
fontWeight: "700",
|
||||
color: props.isSelected ? "white" : "black",
|
||||
}}
|
||||
>
|
||||
{props.name}
|
||||
</Text>
|
||||
</View>
|
||||
{props.isSelected && (
|
||||
<Entypo
|
||||
style={{ marginRight: 8 }}
|
||||
name="check"
|
||||
size={20}
|
||||
color="white"
|
||||
/>
|
||||
)}
|
||||
</View>
|
||||
</View>
|
||||
</TouchableBounce>
|
||||
);
|
||||
}
|
||||
@@ -1,87 +0,0 @@
|
||||
import React from "react";
|
||||
import { View, Text, Button } from "react-native";
|
||||
import GoogleCast, {
|
||||
CastState,
|
||||
CastButton,
|
||||
useCastState,
|
||||
useRemoteMediaClient,
|
||||
} from "react-native-google-cast";
|
||||
|
||||
export default function HomeScreen() {
|
||||
const castState = useCastState();
|
||||
const client = useRemoteMediaClient();
|
||||
|
||||
GoogleCast.showIntroductoryOverlay();
|
||||
|
||||
const isConnected = castState === CastState.CONNECTED;
|
||||
|
||||
function cast() {
|
||||
client
|
||||
.loadMedia({
|
||||
mediaInfo: {
|
||||
contentUrl:
|
||||
"https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/mp4/BigBuckBunny.mp4",
|
||||
contentType: "video/mp4",
|
||||
metadata: {
|
||||
images: [
|
||||
{
|
||||
url:
|
||||
"https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/images/480x270/BigBuckBunny.jpg",
|
||||
},
|
||||
],
|
||||
title: "Big Buck Bunny",
|
||||
subtitle:
|
||||
"A large and lovable rabbit deals with three tiny bullies, led by a flying squirrel, who are determined to squelch his happiness.",
|
||||
studio: "Blender Foundation",
|
||||
type: "movie",
|
||||
},
|
||||
streamDuration: 596, // seconds
|
||||
},
|
||||
startTime: 10, // seconds
|
||||
})
|
||||
.then(console.log)
|
||||
.catch(console.warn);
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
|
||||
<Text>State: {castState}</Text>
|
||||
<CastButton style={{ width: 24, height: 24 }} />
|
||||
<Button
|
||||
title="Overlay"
|
||||
onPress={() => {
|
||||
GoogleCast.showIntroductoryOverlay();
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
title="Expanded Controls"
|
||||
onPress={() => {
|
||||
GoogleCast.showExpandedControls();
|
||||
}}
|
||||
/>
|
||||
|
||||
<Button
|
||||
title="Cast"
|
||||
disabled={!isConnected}
|
||||
onPress={() => {
|
||||
cast();
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
title="Pause"
|
||||
disabled={!isConnected}
|
||||
onPress={() => {
|
||||
// cast()
|
||||
client.pause();
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
title="Disconnect"
|
||||
disabled={!isConnected}
|
||||
onPress={() => {
|
||||
GoogleCast.sessionManager.endCurrentSession(true);
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
import React from 'react';
|
||||
import { SafeAreaView, StyleSheet, useWindowDimensions } from 'react-native';
|
||||
import Pdf from 'react-native-pdf';
|
||||
|
||||
const source = {
|
||||
uri: "https://samples.leanpub.com/thereactnativebook-sample.pdf",
|
||||
cache: true,
|
||||
};
|
||||
export default function App() {
|
||||
const { width, height } = useWindowDimensions()
|
||||
|
||||
return (
|
||||
<SafeAreaView style={styles.container}>
|
||||
<Pdf
|
||||
source={source}
|
||||
onLoadComplete={(numberOfPages, filePath) => {
|
||||
console.log(`Number of pages: ${numberOfPages}`);
|
||||
}}
|
||||
onPageChanged={(page, numberOfPages) => {
|
||||
console.log(`Current page: ${page}`);
|
||||
}}
|
||||
onError={(error) => {
|
||||
console.log(error);
|
||||
}}
|
||||
onPressLink={(uri) => {
|
||||
console.log(`Link pressed: ${uri}`);
|
||||
}}
|
||||
style={{ flex: 1, width, height }}
|
||||
/>
|
||||
</SafeAreaView>
|
||||
);
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
justifyContent: "flex-start",
|
||||
alignItems: "center",
|
||||
},
|
||||
|
||||
});
|
||||
@@ -1,58 +0,0 @@
|
||||
import QuickActions from "react-native-quick-actions";
|
||||
import React from "react";
|
||||
import { Text, View } from "react-native";
|
||||
|
||||
import { DeviceEventEmitter } from "react-native";
|
||||
|
||||
function useQuickAction(): QuickActions.ShortcutItem | null {
|
||||
const [item, setItem] = React.useState<QuickActions.ShortcutItem | null>(null);
|
||||
const isMounted = React.useRef(true)
|
||||
React.useEffect(() => {
|
||||
QuickActions.popInitialAction().then(action => {
|
||||
if (isMounted.current) setItem(action);
|
||||
})
|
||||
const sub = DeviceEventEmitter.addListener("quickActionShortcut", data => {
|
||||
if (isMounted.current) {
|
||||
setItem(data);
|
||||
}
|
||||
});
|
||||
return () => {
|
||||
isMounted.current = false;
|
||||
sub.remove();
|
||||
}
|
||||
}, []);
|
||||
return item;
|
||||
}
|
||||
|
||||
function App() {
|
||||
const action = useQuickAction();
|
||||
|
||||
React.useEffect(() => {
|
||||
QuickActions.setShortcutItems([
|
||||
{
|
||||
title: 'Play Song',
|
||||
subtitle: 'NDA - Billie Eilish',
|
||||
icon: 'Play',
|
||||
type: 'alpha',
|
||||
} as any,
|
||||
{
|
||||
title: 'Shuffle',
|
||||
icon: 'Shuffle',
|
||||
type: 'beta',
|
||||
} as any,
|
||||
{
|
||||
title: 'Like Song',
|
||||
icon: 'Love',
|
||||
type: 'gamma',
|
||||
} as any,
|
||||
])
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
|
||||
<Text>Quick Actions</Text>
|
||||
{action && <Text>{JSON.stringify(action, null, 2)}</Text>}
|
||||
</View>
|
||||
);
|
||||
}
|
||||
export default App;
|
||||
@@ -1,66 +0,0 @@
|
||||
|
||||
import React, { useState } from 'react';
|
||||
import { Button, SafeAreaView, StatusBar, StyleSheet, View } from 'react-native';
|
||||
import { mediaDevices, RTCView } from 'react-native-webrtc';
|
||||
|
||||
const App = () => {
|
||||
const [stream, setStream] = useState(null);
|
||||
const start = async () => {
|
||||
console.log('start');
|
||||
if (!stream) {
|
||||
let s;
|
||||
try {
|
||||
s = await mediaDevices.getUserMedia({ video: true });
|
||||
setStream(s);
|
||||
} catch(e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
const stop = () => {
|
||||
console.log('stop');
|
||||
if (stream) {
|
||||
stream.release();
|
||||
setStream(null);
|
||||
}
|
||||
};
|
||||
return (
|
||||
<>
|
||||
<StatusBar barStyle="dark-content" />
|
||||
<SafeAreaView style={styles.body}>
|
||||
{
|
||||
stream &&
|
||||
<RTCView
|
||||
streamURL={stream.toURL()}
|
||||
style={styles.stream} />
|
||||
}
|
||||
<View
|
||||
style={styles.footer}>
|
||||
<Button
|
||||
title = "Start"
|
||||
onPress = {start} />
|
||||
<Button
|
||||
title = "Stop"
|
||||
onPress = {stop} />
|
||||
</View>
|
||||
</SafeAreaView>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
body: {
|
||||
...StyleSheet.absoluteFillObject
|
||||
},
|
||||
stream: {
|
||||
flex: 1
|
||||
},
|
||||
footer: {
|
||||
position: 'absolute',
|
||||
bottom: 0,
|
||||
left: 0,
|
||||
right: 0
|
||||
},
|
||||
});
|
||||
|
||||
export default App;
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# Xcode
|
||||
#
|
||||
build/
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata
|
||||
*.xccheckout
|
||||
*.moved-aside
|
||||
DerivedData
|
||||
*.hmap
|
||||
*.ipa
|
||||
*.xcuserstate
|
||||
project.xcworkspace
|
||||
|
||||
# Android/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon",
|
||||
"plugins": [
|
||||
[
|
||||
"@config-plugins/ffmpeg-kit-react-native",
|
||||
{
|
||||
"package": "min"
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./src/App";
|
||||
|
||||
registerRootComponent(App);
|
||||
@@ -0,0 +1,6 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "@config-plugins-app/ffmpeg-kit-react-native",
|
||||
"main": "./index.js",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client",
|
||||
"ios": "expo run:ios",
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/ffmpeg-kit-react-native": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"ffmpeg-kit-react-native": "^4.5.1",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# Xcode
|
||||
#
|
||||
build/
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata
|
||||
*.xccheckout
|
||||
*.moved-aside
|
||||
DerivedData
|
||||
*.hmap
|
||||
*.ipa
|
||||
*.xcuserstate
|
||||
project.xcworkspace
|
||||
|
||||
# Android/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon",
|
||||
"plugins": [
|
||||
[
|
||||
"@config-plugins/ios-stickers",
|
||||
{
|
||||
"name": "Stickers",
|
||||
"icon": "./assets/imessage-icon.png",
|
||||
"columns": 4,
|
||||
"stickers": [
|
||||
"./assets/stickers/annoyed.png",
|
||||
"./assets/stickers/cuddle.png",
|
||||
"./assets/stickers/crazy.png",
|
||||
"./assets/stickers/cant.png",
|
||||
"./assets/stickers/donno.png",
|
||||
"./assets/stickers/cozzy.png",
|
||||
"./assets/stickers/dork.png",
|
||||
"./assets/stickers/focus.png",
|
||||
"./assets/stickers/avocool.png",
|
||||
"./assets/stickers/coder-girl.png",
|
||||
"./assets/stickers/teapot.png"
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 173 KiB After Width: | Height: | Size: 173 KiB |
|
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 145 KiB |
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 230 KiB After Width: | Height: | Size: 230 KiB |
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 133 KiB |
|
Before Width: | Height: | Size: 177 KiB After Width: | Height: | Size: 177 KiB |
|
Before Width: | Height: | Size: 179 KiB After Width: | Height: | Size: 179 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 182 KiB After Width: | Height: | Size: 182 KiB |
|
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 176 KiB |
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./src/App";
|
||||
|
||||
registerRootComponent(App);
|
||||
@@ -0,0 +1,6 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "@config-plugins-app/ios-stickers",
|
||||
"main": "./index.js",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client",
|
||||
"ios": "expo run:ios",
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/ios-stickers": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
import React from "react";
|
||||
import { Text, View } from "react-native";
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
|
||||
<Text>Open iMessage to find the app</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# Xcode
|
||||
#
|
||||
build/
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata
|
||||
*.xccheckout
|
||||
*.moved-aside
|
||||
DerivedData
|
||||
*.hmap
|
||||
*.ipa
|
||||
*.xcuserstate
|
||||
project.xcworkspace
|
||||
|
||||
# Android/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon?icon=1f9b7&color_hex=0000ff",
|
||||
"plugins": [
|
||||
"@config-plugins/react-native-ble-plx"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./src/App";
|
||||
|
||||
registerRootComponent(App);
|
||||
@@ -0,0 +1,6 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "@config-plugins-app/react-native-ble-plx",
|
||||
"main": "./index.js",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client",
|
||||
"ios": "expo run:ios",
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/react-native-ble-plx": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"react-native-ble-plx": "^2.0.3",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9",
|
||||
"@types/react": "~17.0.21",
|
||||
"@types/react-native": "~0.64.12",
|
||||
"typescript": "~4.3.5"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"compilerOptions": {},
|
||||
"extends": "expo/tsconfig.base"
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# Xcode
|
||||
#
|
||||
build/
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata
|
||||
*.xccheckout
|
||||
*.moved-aside
|
||||
DerivedData
|
||||
*.hmap
|
||||
*.ipa
|
||||
*.xcuserstate
|
||||
project.xcworkspace
|
||||
|
||||
# Android/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon?icon=1f334",
|
||||
"ios": {
|
||||
"config": {
|
||||
"branch": {
|
||||
"apiKey": "key_live_f9f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8"
|
||||
}
|
||||
}
|
||||
},
|
||||
"android": {
|
||||
"config": {
|
||||
"branch": {
|
||||
"apiKey": "key_live_f9f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8"
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": [
|
||||
"@config-plugins/react-native-branch"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./src/App";
|
||||
|
||||
registerRootComponent(App);
|
||||
@@ -0,0 +1,6 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "@config-plugins-app/react-native-branch",
|
||||
"main": "./index.js",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client",
|
||||
"ios": "expo run:ios",
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/react-native-branch": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"react-native-branch": "^5.4.0",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
import React from "react";
|
||||
import { Text, View } from "react-native";
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
|
||||
<Text>Branch</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# Xcode
|
||||
#
|
||||
build/
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata
|
||||
*.xccheckout
|
||||
*.moved-aside
|
||||
DerivedData
|
||||
*.hmap
|
||||
*.ipa
|
||||
*.xcuserstate
|
||||
project.xcworkspace
|
||||
|
||||
# Android/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "./assets/icons/winter.png",
|
||||
"plugins": [
|
||||
[
|
||||
"@config-plugins/react-native-dynamic-app-icon",
|
||||
[
|
||||
"./assets/icons/spring.png",
|
||||
"./assets/icons/summer.png",
|
||||
"./assets/icons/autumn.png",
|
||||
"./assets/icons/fall.png",
|
||||
"./assets/icons/solstice.png"
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./src/App";
|
||||
|
||||
registerRootComponent(App);
|
||||
@@ -0,0 +1,6 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "@config-plugins-app/react-native-dynamic-app-icon",
|
||||
"main": "./index.js",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client",
|
||||
"ios": "expo run:ios",
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/react-native-dynamic-app-icon": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"react-native-dynamic-app-icon": "^1.1.0",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
import Entypo from "@expo/vector-icons/Entypo";
|
||||
import React from "react";
|
||||
import { Image, SafeAreaView, Text, View } from "react-native";
|
||||
import AppIcon from "react-native-dynamic-app-icon";
|
||||
import TouchableBounce from "react-native/Libraries/Components/Touchable/TouchableBounce";
|
||||
|
||||
function useIconName() {
|
||||
const [icon, _setIcon] = React.useState(null);
|
||||
|
||||
React.useEffect(() => {
|
||||
let isMounted = true;
|
||||
AppIcon.getIconName((result) => {
|
||||
if (isMounted) _setIcon(result.iconName);
|
||||
});
|
||||
return () => (isMounted = false);
|
||||
}, []);
|
||||
|
||||
const setIcon = React.useCallback(
|
||||
(icon) => {
|
||||
AppIcon.setAppIcon(icon);
|
||||
_setIcon(icon || null);
|
||||
},
|
||||
[_setIcon]
|
||||
);
|
||||
return [icon === "default" ? null : icon, setIcon];
|
||||
}
|
||||
|
||||
const icons = [
|
||||
{
|
||||
name: "Auto",
|
||||
source: require("../assets/icons/winter.png"),
|
||||
iconId: null,
|
||||
},
|
||||
{
|
||||
name: "Spring",
|
||||
source: require("../assets/icons/spring.png"),
|
||||
iconId: "0",
|
||||
},
|
||||
{
|
||||
name: "Summer",
|
||||
source: require("../assets/icons/summer.png"),
|
||||
iconId: "1",
|
||||
},
|
||||
{
|
||||
name: "Autumn",
|
||||
source: require("../assets/icons/autumn.png"),
|
||||
iconId: "2",
|
||||
},
|
||||
{ name: "Fall", source: require("../assets/icons/fall.png"), iconId: "3" },
|
||||
{
|
||||
name: "Solstice",
|
||||
source: require("../assets/icons/solstice.png"),
|
||||
iconId: "4",
|
||||
},
|
||||
];
|
||||
|
||||
export default function App() {
|
||||
const [_icon, setIcon] = useIconName();
|
||||
|
||||
return (
|
||||
<SafeAreaView
|
||||
style={{
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<View style={{ width: "100%" }}>
|
||||
{icons.map((icon, index) => {
|
||||
return (
|
||||
<Item
|
||||
onPress={() => {
|
||||
setIcon(icon.iconId);
|
||||
}}
|
||||
isSelected={icon.iconId === _icon}
|
||||
name={icon.name}
|
||||
source={icon.source}
|
||||
key={String(index)}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</View>
|
||||
</SafeAreaView>
|
||||
);
|
||||
}
|
||||
|
||||
function Item({ ...props }) {
|
||||
return (
|
||||
<TouchableBounce
|
||||
onPress={props.onPress}
|
||||
style={{ marginVertical: 8, marginHorizontal: 24 }}
|
||||
>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
justifyContent: "space-between",
|
||||
alignItems: "stretch",
|
||||
shadowColor: "#000",
|
||||
shadowOffset: {
|
||||
width: 0,
|
||||
height: 4,
|
||||
},
|
||||
shadowOpacity: props.isSelected ? 0.35 : 0.2,
|
||||
shadowRadius: 8.46,
|
||||
|
||||
backgroundColor: props.isSelected ? "#000" : "#F1F1F1",
|
||||
elevation: 9,
|
||||
paddingHorizontal: 12,
|
||||
paddingVertical: 12,
|
||||
borderRadius: 20,
|
||||
}}
|
||||
>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<Image
|
||||
source={props.source}
|
||||
style={{
|
||||
width: 64,
|
||||
aspectRatio: 1,
|
||||
resizeMode: "cover",
|
||||
borderRadius: 16,
|
||||
}}
|
||||
/>
|
||||
<Text
|
||||
style={{
|
||||
marginLeft: 20,
|
||||
fontSize: 18,
|
||||
fontWeight: "700",
|
||||
color: props.isSelected ? "white" : "black",
|
||||
}}
|
||||
>
|
||||
{props.name}
|
||||
</Text>
|
||||
</View>
|
||||
{props.isSelected && (
|
||||
<Entypo
|
||||
style={{ marginRight: 8 }}
|
||||
name="check"
|
||||
size={20}
|
||||
color="white"
|
||||
/>
|
||||
)}
|
||||
</View>
|
||||
</View>
|
||||
</TouchableBounce>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# Xcode
|
||||
#
|
||||
build/
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata
|
||||
*.xccheckout
|
||||
*.moved-aside
|
||||
DerivedData
|
||||
*.hmap
|
||||
*.ipa
|
||||
*.xcuserstate
|
||||
project.xcworkspace
|
||||
|
||||
# Android/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon",
|
||||
"plugins": [
|
||||
"@config-plugins/react-native-google-cast"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./src/App";
|
||||
|
||||
registerRootComponent(App);
|
||||
@@ -0,0 +1,6 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "@config-plugins-app/react-native-google-cast",
|
||||
"main": "./index.js",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client",
|
||||
"ios": "expo run:ios",
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/react-native-google-cast": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"react-native-google-cast": "^4.1.2",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
import React from "react";
|
||||
import { View, Text, Button } from "react-native";
|
||||
import GoogleCast, {
|
||||
CastState,
|
||||
CastButton,
|
||||
useCastState,
|
||||
useRemoteMediaClient,
|
||||
} from "react-native-google-cast";
|
||||
|
||||
export default function HomeScreen() {
|
||||
const castState = useCastState();
|
||||
const client = useRemoteMediaClient();
|
||||
|
||||
GoogleCast.showIntroductoryOverlay();
|
||||
|
||||
const isConnected = castState === CastState.CONNECTED;
|
||||
|
||||
function cast() {
|
||||
client
|
||||
.loadMedia({
|
||||
mediaInfo: {
|
||||
contentUrl:
|
||||
"https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/mp4/BigBuckBunny.mp4",
|
||||
contentType: "video/mp4",
|
||||
metadata: {
|
||||
images: [
|
||||
{
|
||||
url: "https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/images/480x270/BigBuckBunny.jpg",
|
||||
},
|
||||
],
|
||||
title: "Big Buck Bunny",
|
||||
subtitle:
|
||||
"A large and lovable rabbit deals with three tiny bullies, led by a flying squirrel, who are determined to squelch his happiness.",
|
||||
studio: "Blender Foundation",
|
||||
type: "movie",
|
||||
},
|
||||
streamDuration: 596, // seconds
|
||||
},
|
||||
startTime: 10, // seconds
|
||||
})
|
||||
.then(console.log)
|
||||
.catch(console.warn);
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
|
||||
<Text>State: {castState}</Text>
|
||||
<CastButton style={{ width: 24, height: 24 }} />
|
||||
<Button
|
||||
title="Overlay"
|
||||
onPress={() => {
|
||||
GoogleCast.showIntroductoryOverlay();
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
title="Expanded Controls"
|
||||
onPress={() => {
|
||||
GoogleCast.showExpandedControls();
|
||||
}}
|
||||
/>
|
||||
|
||||
<Button
|
||||
title="Cast"
|
||||
disabled={!isConnected}
|
||||
onPress={() => {
|
||||
cast();
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
title="Pause"
|
||||
disabled={!isConnected}
|
||||
onPress={() => {
|
||||
// cast()
|
||||
client.pause();
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
title="Disconnect"
|
||||
disabled={!isConnected}
|
||||
onPress={() => {
|
||||
GoogleCast.sessionManager.endCurrentSession(true);
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# Xcode
|
||||
#
|
||||
build/
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata
|
||||
*.xccheckout
|
||||
*.moved-aside
|
||||
DerivedData
|
||||
*.hmap
|
||||
*.ipa
|
||||
*.xcuserstate
|
||||
project.xcworkspace
|
||||
|
||||
# Android/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon?icon=🎆",
|
||||
"plugins": [
|
||||
"@config-plugins/react-native-blob-util",
|
||||
"@config-plugins/react-native-pdf"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./src/App";
|
||||
|
||||
registerRootComponent(App);
|
||||
@@ -0,0 +1,6 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"name": "@config-plugins-app/react-native-pdf",
|
||||
"main": "./index.js",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client",
|
||||
"ios": "expo run:ios",
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/react-native-blob-util": "*",
|
||||
"@config-plugins/react-native-pdf": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"react-native-blob-util": "^0.16.0",
|
||||
"react-native-pdf": "^6.5.0",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
import React from "react";
|
||||
import { SafeAreaView, StyleSheet, useWindowDimensions } from "react-native";
|
||||
import Pdf from "react-native-pdf";
|
||||
|
||||
const source = {
|
||||
uri: "https://samples.leanpub.com/thereactnativebook-sample.pdf",
|
||||
cache: true,
|
||||
};
|
||||
export default function App() {
|
||||
const { width, height } = useWindowDimensions();
|
||||
|
||||
return (
|
||||
<SafeAreaView style={styles.container}>
|
||||
<Pdf
|
||||
source={source}
|
||||
onLoadComplete={(numberOfPages, filePath) => {
|
||||
console.log(`Number of pages: ${numberOfPages}`);
|
||||
}}
|
||||
onPageChanged={(page, numberOfPages) => {
|
||||
console.log(`Current page: ${page}`);
|
||||
}}
|
||||
onError={(error) => {
|
||||
console.log(error);
|
||||
}}
|
||||
onPressLink={(uri) => {
|
||||
console.log(`Link pressed: ${uri}`);
|
||||
}}
|
||||
style={{ flex: 1, width, height }}
|
||||
/>
|
||||
</SafeAreaView>
|
||||
);
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
justifyContent: "flex-start",
|
||||
alignItems: "center",
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# Xcode
|
||||
#
|
||||
build/
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata
|
||||
*.xccheckout
|
||||
*.moved-aside
|
||||
DerivedData
|
||||
*.hmap
|
||||
*.ipa
|
||||
*.xcuserstate
|
||||
project.xcworkspace
|
||||
|
||||
# Android/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon",
|
||||
"plugins": [
|
||||
[
|
||||
"@config-plugins/react-native-quick-actions",
|
||||
[
|
||||
{
|
||||
"title": "Take Photo",
|
||||
"type": "photo",
|
||||
"iconType": "UIApplicationShortcutIconTypeCapturePhoto"
|
||||
}
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./src/App";
|
||||
|
||||
registerRootComponent(App);
|
||||