trying to get push notifications to work
This commit is contained in:
parent
868ad01c3f
commit
bebdbbad39
@ -26,6 +26,7 @@
|
||||
<category android:name="android.intent.category.BROWSABLE"/>
|
||||
<data android:scheme="myapp"/>
|
||||
<data android:scheme="com.gibbyb.fuse"/>
|
||||
<data android:scheme="exp+fuse"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="false"/>
|
||||
|
0
android/gradlew
vendored
Normal file → Executable file
0
android/gradlew
vendored
Normal file → Executable file
@ -1,10 +1,11 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { StyleSheet, ActivityIndicator, TouchableOpacity } from 'react-native';
|
||||
import { StyleSheet, ActivityIndicator, TouchableOpacity, View } from 'react-native';
|
||||
import { ThemedText } from '@/components/ThemedText';
|
||||
import { ThemedView } from '@/components/ThemedView';
|
||||
import { SafeAreaView } from 'react-native-safe-area-context'; // Import for safe area handling
|
||||
import { LinearGradient } from 'expo-linear-gradient';
|
||||
import axios from 'axios';
|
||||
import ChangeDateDrawer from '@/components/ChangeDateDrawer';
|
||||
import ChangeDateDrawer from '@/components/ChangeDateDrawer'; // Date drawer component
|
||||
|
||||
const API_KEY = process.env.EXPO_PUBLIC_API_KEY;
|
||||
const BASE_URL = process.env.EXPO_PUBLIC_BASE_URL;
|
||||
@ -16,7 +17,6 @@ const fetchCountdownDate = async () => {
|
||||
params: { apiKey: API_KEY }
|
||||
});
|
||||
if (response.data && response.data[0] && response.data[0].countdown) {
|
||||
//console.log('Countdown date:', response.data[0].countdown);
|
||||
return new Date(response.data[0].countdown);
|
||||
} else {
|
||||
console.error('Unexpected API response format:', response.data);
|
||||
@ -98,9 +98,11 @@ export default function TabTwoScreen() {
|
||||
start={{ x: 0, y: 0 }}
|
||||
end={{ x: 1, y: 1 }}
|
||||
>
|
||||
<ThemedView style={styles.container}>
|
||||
<SafeAreaView style={styles.safeContainer}>
|
||||
<ThemedView style={styles.innerContainer}>
|
||||
<ThemedText style={styles.title}>Countdown to Next Visit</ThemedText>
|
||||
<ThemedView style={styles.countdownContainer}>
|
||||
{/* Countdown items displayed horizontally with flexbox */}
|
||||
<CountdownItem value={countdown.days} label={days} />
|
||||
<CountdownItem value={countdown.hours} label={hours} />
|
||||
<CountdownItem value={countdown.minutes} label={minutes} />
|
||||
@ -121,6 +123,7 @@ export default function TabTwoScreen() {
|
||||
/>
|
||||
)}
|
||||
</ThemedView>
|
||||
</SafeAreaView>
|
||||
</LinearGradient>
|
||||
);
|
||||
}
|
||||
@ -135,31 +138,39 @@ function CountdownItem({ value, label }: { value: number; label: string }) {
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
safeContainer: {
|
||||
flex: 1,
|
||||
backgroundColor: 'transparent', // Background color for safety area view
|
||||
},
|
||||
container: {
|
||||
flex: 1,
|
||||
backgroundColor: 'transparent',
|
||||
},
|
||||
innerContainer: {
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
paddingHorizontal: 20, // Padding around the edges
|
||||
backgroundColor: 'transparent',
|
||||
},
|
||||
title: {
|
||||
fontSize: 64,
|
||||
lineHeight: 64,
|
||||
fontWeight: 'bold',
|
||||
marginTop: 100,
|
||||
marginBottom: 60,
|
||||
fontSize: 40, // Shrinking the title for smaller screens
|
||||
lineHeight: 50,
|
||||
fontWeight: '600',
|
||||
textAlign: 'center',
|
||||
paddingHorizontal: 20,
|
||||
paddingHorizontal: 10,
|
||||
},
|
||||
countdownContainer: {
|
||||
flexDirection: 'row',
|
||||
justifyContent: 'center',
|
||||
justifyContent: 'space-around', // Spread countdown items more evenly
|
||||
alignItems: 'center',
|
||||
width: '100%',
|
||||
backgroundColor: 'transparent',
|
||||
marginBottom: 180,
|
||||
marginVertical: 40, // Added some space between countdown and title/button
|
||||
},
|
||||
countdownItem: {
|
||||
margin: 10,
|
||||
lineHeight: 42,
|
||||
alignItems: 'center',
|
||||
marginHorizontal: 10, // Each item has horizontal spacing
|
||||
backgroundColor: 'transparent',
|
||||
},
|
||||
countdownValue: {
|
||||
@ -168,18 +179,18 @@ const styles = StyleSheet.create({
|
||||
fontWeight: 'bold',
|
||||
},
|
||||
countdownLabel: {
|
||||
fontSize: 32,
|
||||
lineHeight: 42,
|
||||
fontSize: 18, // Reducing size of the label for better fit
|
||||
lineHeight: 24,
|
||||
},
|
||||
changeButton: {
|
||||
backgroundColor: '#730FF8',
|
||||
padding: 15,
|
||||
borderRadius: 10,
|
||||
marginTop: 40,
|
||||
padding: 12,
|
||||
borderRadius: 8,
|
||||
marginTop: 20,
|
||||
},
|
||||
changeButtonText: {
|
||||
color: 'white',
|
||||
fontSize: 22,
|
||||
fontSize: 18,
|
||||
fontWeight: 'bold',
|
||||
},
|
||||
});
|
@ -1,5 +1,5 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { StyleSheet } from 'react-native';
|
||||
import { StyleSheet, SafeAreaView } from 'react-native';
|
||||
import { ThemedText } from '@/components/ThemedText';
|
||||
import { ThemedView } from '@/components/ThemedView';
|
||||
import { LinearGradient } from 'expo-linear-gradient';
|
||||
@ -50,9 +50,11 @@ export default function HomeScreen() {
|
||||
start={{ x: 0, y: 0 }}
|
||||
end={{ x: 1, y: 1 }}
|
||||
>
|
||||
<SafeAreaView style={styles.container}>
|
||||
<ThemedView style={styles.container}>
|
||||
<ThemedText style={styles.title}>{message}</ThemedText>
|
||||
</ThemedView>
|
||||
</SafeAreaView>
|
||||
</LinearGradient>
|
||||
);
|
||||
}
|
||||
|
@ -8,30 +8,30 @@ import {
|
||||
TouchableWithoutFeedback,
|
||||
KeyboardAvoidingView,
|
||||
Platform,
|
||||
SafeAreaView, // SafeAreaView import for handling safe areas
|
||||
View
|
||||
} from 'react-native';
|
||||
import { ThemedText } from '@/components/ThemedText';
|
||||
import { ThemedView } from '@/components/ThemedView';
|
||||
import { LinearGradient } from 'expo-linear-gradient';
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||
import axios from 'axios';
|
||||
|
||||
// Environment variables
|
||||
const API_KEY = process.env.EXPO_PUBLIC_API_KEY;
|
||||
const BASE_URL = process.env.EXPO_PUBLIC_BASE_URL;
|
||||
|
||||
export default function SendMessageScreen() {
|
||||
const [message, setMessage] = useState('');
|
||||
const [userId, setUserId] = useState(null);
|
||||
const [inputHeight, setInputHeight] = useState(100);
|
||||
const [userId, setUserId] = useState<number | null>(null); // Use number type for userId
|
||||
const [inputHeight, setInputHeight] = useState(120); // Set initial height for TextInput
|
||||
|
||||
// Update TextInput height dynamically
|
||||
const updateInputHeight = (height: number) => {
|
||||
setInputHeight(Math.max(100, height));
|
||||
setInputHeight(Math.max(120, height)); // Ensure it doesn't shrink below 120px
|
||||
};
|
||||
|
||||
// On component mount, get the user ID from AsyncStorage
|
||||
useEffect(() => {
|
||||
getUserId();
|
||||
}, []);
|
||||
|
||||
const getUserId = async () => {
|
||||
try {
|
||||
const storedUser = await AsyncStorage.getItem('@user');
|
||||
@ -44,7 +44,12 @@ export default function SendMessageScreen() {
|
||||
}
|
||||
};
|
||||
|
||||
getUserId();
|
||||
}, []);
|
||||
|
||||
// Function to send a message
|
||||
const sendMessage = async () => {
|
||||
// Input validation
|
||||
if (!message.trim()) {
|
||||
Alert.alert('Error', 'Please enter a message');
|
||||
return;
|
||||
@ -60,8 +65,8 @@ export default function SendMessageScreen() {
|
||||
params: { apiKey: API_KEY, userId, message }
|
||||
});
|
||||
Alert.alert('Success', 'Message sent successfully');
|
||||
setMessage('');
|
||||
Keyboard.dismiss();
|
||||
setMessage(''); // Clear the message input on success
|
||||
Keyboard.dismiss(); // Dismiss the keyboard
|
||||
} catch (error) {
|
||||
console.error('Failed to send message:', error);
|
||||
Alert.alert('Error', 'Failed to send message. Please try again.');
|
||||
@ -69,75 +74,87 @@ export default function SendMessageScreen() {
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
// Ensure keyboard behaves correctly on both iOS and Android
|
||||
<KeyboardAvoidingView
|
||||
behavior={Platform.OS === "ios" ? "padding" : "height"}
|
||||
style={{flex: 1}}
|
||||
style={{ flex: 1 }}
|
||||
>
|
||||
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
|
||||
<TouchableWithoutFeedback onPress={Keyboard.dismiss}>
|
||||
{/* SafeAreaView for notch and layout safety */}
|
||||
<SafeAreaView style={styles.safeContainer}>
|
||||
<LinearGradient
|
||||
colors={['#F67C0A', '#F60AD3']}
|
||||
style={styles.container}
|
||||
start={{ x: 0, y: 0 }}
|
||||
end={{ x: 1, y: 1 }}
|
||||
>
|
||||
<View style={styles.container}>
|
||||
<View style={styles.chatContainer}>
|
||||
<TextInput
|
||||
style={[styles.input, { height: inputHeight }]}
|
||||
style={[styles.input, { height: inputHeight }]} // Dynamic height
|
||||
value={message}
|
||||
onChangeText={setMessage}
|
||||
placeholder="Send a message"
|
||||
placeholder="Write a message"
|
||||
placeholderTextColor="#FFFFFF"
|
||||
multiline
|
||||
multiline // Allows multiple lines
|
||||
numberOfLines={4}
|
||||
textAlignVertical="top"
|
||||
textAlignVertical="top" // Align text at the top
|
||||
onContentSizeChange={(event) =>
|
||||
updateInputHeight(event.nativeEvent.contentSize.height)
|
||||
}
|
||||
/>
|
||||
|
||||
{/* Send Message Button */}
|
||||
<TouchableOpacity style={styles.button} onPress={sendMessage}>
|
||||
<ThemedText style={styles.buttonText}>Send Message</ThemedText>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</LinearGradient>
|
||||
</SafeAreaView>
|
||||
</TouchableWithoutFeedback>
|
||||
</KeyboardAvoidingView>
|
||||
);
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
safeContainer: {
|
||||
flex: 1,
|
||||
backgroundColor: 'transparent', // Ensure full-screen safe area
|
||||
},
|
||||
container: {
|
||||
flex: 1,
|
||||
alignItems: 'center',
|
||||
padding: 20,
|
||||
backgroundColor: 'transparent',
|
||||
width: '100%',
|
||||
},
|
||||
chatContainer: {
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
paddingHorizontal: 20, // Ensures padding around the input and button
|
||||
},
|
||||
input: {
|
||||
width: '100%',
|
||||
minHeight: 120,
|
||||
minHeight: 150, // Minimum height for the TextInput
|
||||
borderColor: 'transparent',
|
||||
borderWidth: 1,
|
||||
borderRadius: 10,
|
||||
padding: 10,
|
||||
marginBottom: 20,
|
||||
marginTop: 160,
|
||||
fontSize: 42,
|
||||
lineHeight: 60,
|
||||
marginBottom: 10,
|
||||
fontSize: 32, // Adjust font size to shrink for smaller devices
|
||||
lineHeight: 40, // Adjust line height for better readability
|
||||
textAlign: 'center',
|
||||
color: '#FFFFFF',
|
||||
fontWeight: 'bold',
|
||||
backgroundColor: 'transparent',
|
||||
//backgroundColor: 'rgba(0, 0, 0, 0.1)', // Subtle background for text input
|
||||
backgroundColor: 'transparent', // Transparent background
|
||||
},
|
||||
button: {
|
||||
backgroundColor: '#730FF8',
|
||||
padding: 15,
|
||||
borderColor: '#730FF8',
|
||||
paddingVertical: 12,
|
||||
paddingHorizontal: 20,
|
||||
borderRadius: 10,
|
||||
},
|
||||
buttonText: {
|
||||
color: 'white',
|
||||
fontSize: 22,
|
||||
fontSize: 18,
|
||||
fontWeight: 'bold',
|
||||
},
|
||||
});
|
@ -62,14 +62,11 @@ export default function RootLayout() {
|
||||
}, [loaded]);
|
||||
|
||||
const handleUserSelected = async (selectedUser: User) => {
|
||||
setUser(selectedUser);
|
||||
console.log('User selected:', selectedUser); // Debug log
|
||||
try {
|
||||
await AsyncStorage.setItem('@user', JSON.stringify(selectedUser));
|
||||
|
||||
// Store the Push Token to your server when the user is selected (optional)
|
||||
if (expoPushToken) {
|
||||
await savePushToken(selectedUser.id, expoPushToken); // Hypothetical function to send token to server
|
||||
}
|
||||
console.log('User data stored in AsyncStorage:', selectedUser); // Debug log
|
||||
setUser(selectedUser);
|
||||
} catch (e) {
|
||||
console.error('Failed to save user or push token', e);
|
||||
}
|
||||
@ -89,36 +86,38 @@ export default function RootLayout() {
|
||||
useEffect(() => {
|
||||
// Register for push notifications and set the push token
|
||||
registerForPushNotificationsAsync().then(async (token) => {
|
||||
if (token) {
|
||||
setExpoPushToken(token);
|
||||
|
||||
// Upload push token to backend when successfully received
|
||||
const storedUser = await AsyncStorage.getItem('@user');
|
||||
if (!storedUser) {
|
||||
console.log('No user found in AsyncStorage'); // Debug log
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const storedUser = await AsyncStorage.getItem('@user');
|
||||
console.log('Stored user data:', storedUser); // Debug log
|
||||
|
||||
if (storedUser) {
|
||||
const user = JSON.parse(storedUser);
|
||||
console.log('Parsed user data:', user); // Debug log
|
||||
|
||||
// Send the push token to your Next.js API, along with the user's ID
|
||||
await fetch(`${BASE_URL}/api/updatePushToken`, {
|
||||
// Send the push token to your Next.js API
|
||||
await fetch(`${BASE_URL}/updatePushToken`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
apiKey: API_KEY, // Use the API key stored in the environment
|
||||
userId: user.id, // The logged-in user's ID
|
||||
pushToken: token, // The Expo push token collected
|
||||
apiKey: API_KEY,
|
||||
userId: user.id,
|
||||
pushToken: token,
|
||||
}),
|
||||
});
|
||||
|
||||
console.log('Push token successfully sent to backend');
|
||||
console.log('Push token update request sent with user ID:', user.id); // Debug log
|
||||
} else {
|
||||
console.log('No user found in AsyncStorage');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Failed to send push token to backend', error);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Listener for received notifications while the app is running
|
||||
@ -215,10 +214,3 @@ async function registerForPushNotificationsAsync() {
|
||||
|
||||
return token;
|
||||
}
|
||||
|
||||
// (Optional) A function to store push tokens in your backend server
|
||||
async function savePushToken(userId: number, expoPushToken: string) {
|
||||
// You would need to implement this function to save the user's push token to your backend.
|
||||
// For example, you could send a POST request to your Next.js API that stores expoPushToken
|
||||
console.log('Saving push token for user:', userId, 'with token:', expoPushToken);
|
||||
}
|
||||
|
Binary file not shown.
BIN
build-1726251745948.ipa
Normal file
BIN
build-1726251745948.ipa
Normal file
Binary file not shown.
@ -1,11 +1,15 @@
|
||||
PODS:
|
||||
- boost (1.83.0)
|
||||
- DoubleConversion (1.1.6)
|
||||
- EXApplication (5.9.1):
|
||||
- ExpoModulesCore
|
||||
- EXConstants (16.0.2):
|
||||
- ExpoModulesCore
|
||||
- EXJSONUtils (0.13.1)
|
||||
- EXManifests (0.14.3):
|
||||
- ExpoModulesCore
|
||||
- EXNotifications (0.28.16):
|
||||
- ExpoModulesCore
|
||||
- Expo (51.0.32):
|
||||
- ExpoModulesCore
|
||||
- expo-dev-client (4.0.26):
|
||||
@ -217,6 +221,8 @@ PODS:
|
||||
- Yoga
|
||||
- ExpoAsset (10.0.10):
|
||||
- ExpoModulesCore
|
||||
- ExpoDevice (6.0.2):
|
||||
- ExpoModulesCore
|
||||
- ExpoFileSystem (17.0.1):
|
||||
- ExpoModulesCore
|
||||
- ExpoFont (12.0.10):
|
||||
@ -1538,15 +1544,18 @@ PODS:
|
||||
DEPENDENCIES:
|
||||
- boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
|
||||
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
|
||||
- EXApplication (from `../node_modules/expo-application/ios`)
|
||||
- EXConstants (from `../node_modules/expo-constants/ios`)
|
||||
- EXJSONUtils (from `../node_modules/expo-json-utils/ios`)
|
||||
- EXManifests (from `../node_modules/expo-manifests/ios`)
|
||||
- EXNotifications (from `../node_modules/expo-notifications/ios`)
|
||||
- Expo (from `../node_modules/expo`)
|
||||
- expo-dev-client (from `../node_modules/expo-dev-client/ios`)
|
||||
- expo-dev-launcher (from `../node_modules/expo-dev-launcher`)
|
||||
- expo-dev-menu (from `../node_modules/expo-dev-menu`)
|
||||
- expo-dev-menu-interface (from `../node_modules/expo-dev-menu-interface/ios`)
|
||||
- ExpoAsset (from `../node_modules/expo-asset/ios`)
|
||||
- ExpoDevice (from `../node_modules/expo-device/ios`)
|
||||
- ExpoFileSystem (from `../node_modules/expo-file-system/ios`)
|
||||
- ExpoFont (from `../node_modules/expo-font/ios`)
|
||||
- ExpoHead (from `../node_modules/expo-router/ios`)
|
||||
@ -1628,12 +1637,16 @@ EXTERNAL SOURCES:
|
||||
:podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
|
||||
DoubleConversion:
|
||||
:podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
|
||||
EXApplication:
|
||||
:path: "../node_modules/expo-application/ios"
|
||||
EXConstants:
|
||||
:path: "../node_modules/expo-constants/ios"
|
||||
EXJSONUtils:
|
||||
:path: "../node_modules/expo-json-utils/ios"
|
||||
EXManifests:
|
||||
:path: "../node_modules/expo-manifests/ios"
|
||||
EXNotifications:
|
||||
:path: "../node_modules/expo-notifications/ios"
|
||||
Expo:
|
||||
:path: "../node_modules/expo"
|
||||
expo-dev-client:
|
||||
@ -1646,6 +1659,8 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/expo-dev-menu-interface/ios"
|
||||
ExpoAsset:
|
||||
:path: "../node_modules/expo-asset/ios"
|
||||
ExpoDevice:
|
||||
:path: "../node_modules/expo-device/ios"
|
||||
ExpoFileSystem:
|
||||
:path: "../node_modules/expo-file-system/ios"
|
||||
ExpoFont:
|
||||
@ -1789,15 +1804,18 @@ EXTERNAL SOURCES:
|
||||
SPEC CHECKSUMS:
|
||||
boost: d3f49c53809116a5d38da093a8aa78bf551aed09
|
||||
DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5
|
||||
EXApplication: c08200c34daca7af7fd76ac4b9d606077410e8ad
|
||||
EXConstants: 409690fbfd5afea964e5e9d6c4eb2c2b59222c59
|
||||
EXJSONUtils: 30c17fd9cc364d722c0946a550dfbf1be92ef6a4
|
||||
EXManifests: c1fab4c3237675e7b0299ea8df0bcb14baca4f42
|
||||
EXNotifications: b1b174716b287e161350a18de1d253aabceeea2d
|
||||
Expo: 33132a667698a3259a4e6c0af1b4936388e5fa33
|
||||
expo-dev-client: 4f9100af6be210a360aa67f42649881251aa362a
|
||||
expo-dev-launcher: c8e85bf244a2492448c88adbc3585ca13572f7b9
|
||||
expo-dev-menu: 0db38ce92be7228dadb588f7069e037fd9d165d8
|
||||
expo-dev-menu-interface: be32c09f1e03833050f0ee290dcc86b3ad0e73e4
|
||||
ExpoAsset: 323700f291684f110fb55f0d4022a3362ea9f875
|
||||
ExpoDevice: fc94f0e42ecdfd897e7590f2874fc64dfa7e9b1c
|
||||
ExpoFileSystem: 80bfe850b1f9922c16905822ecbf97acd711dc51
|
||||
ExpoFont: 00756e6c796d8f7ee8d211e29c8b619e75cbf238
|
||||
ExpoHead: fcb28a68ed4ba28f177394d2dfb8a0a8824cd103
|
||||
|
@ -3,7 +3,7 @@
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objectVersion = 54;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
@ -30,7 +30,7 @@
|
||||
6C2E3173556A471DD304B334 /* Pods-fuse.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fuse.debug.xcconfig"; path = "Target Support Files/Pods-fuse/Pods-fuse.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
7A4D352CD337FB3A3BF06240 /* Pods-fuse.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fuse.release.xcconfig"; path = "Target Support Files/Pods-fuse/Pods-fuse.release.xcconfig"; sourceTree = "<group>"; };
|
||||
AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = fuse/SplashScreen.storyboard; sourceTree = "<group>"; };
|
||||
B50056BB879EC1FE9A5251D0 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = fuse/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
||||
B50056BB879EC1FE9A5251D0 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = fuse/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
||||
BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = "<group>"; };
|
||||
E3C56C9C8A70435F80C980CD /* fuse-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "fuse-Bridging-Header.h"; path = "fuse/fuse-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
|
||||
@ -273,8 +273,11 @@
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-fuse/Pods-fuse-resources.sh",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/EXApplication/ExpoApplication_privacy.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/EXNotifications/ExpoNotifications_privacy.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/ExpoDevice/ExpoDevice_privacy.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/ExpoSystemUI/ExpoSystemUI_privacy.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNCAsyncStorage/RNCAsyncStorage_resources.bundle",
|
||||
@ -303,8 +306,11 @@
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoApplication_privacy.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoNotifications_privacy.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoDevice_privacy.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoSystemUI_privacy.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCAsyncStorage_resources.bundle",
|
||||
@ -385,9 +391,14 @@
|
||||
"FB_SONARKIT_ENABLED=1",
|
||||
);
|
||||
INFOPLIST_FILE = fuse/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = Fuse;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.lifestyle";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
MARKETING_VERSION = 1.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.1;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
@ -413,9 +424,14 @@
|
||||
CODE_SIGN_ENTITLEMENTS = fuse/fuse.entitlements;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
INFOPLIST_FILE = fuse/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = Fuse;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.lifestyle";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
MARKETING_VERSION = 1.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.1;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
@ -483,14 +499,14 @@
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
||||
LD = "";
|
||||
LDPLUSPLUS = "";
|
||||
LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
/usr/lib/swift,
|
||||
"$(inherited)",
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
" ",
|
||||
);
|
||||
OTHER_LDFLAGS = "$(inherited) ";
|
||||
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
|
||||
SDKROOT = iphoneos;
|
||||
USE_HERMES = true;
|
||||
@ -542,13 +558,13 @@
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
||||
LD = "";
|
||||
LDPLUSPLUS = "";
|
||||
LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
/usr/lib/swift,
|
||||
"$(inherited)",
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
" ",
|
||||
);
|
||||
OTHER_LDFLAGS = "$(inherited) ";
|
||||
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
|
||||
SDKROOT = iphoneos;
|
||||
USE_HERMES = true;
|
||||
|
@ -31,6 +31,12 @@
|
||||
<string>com.gibbyb.fuse</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>exp+fuse</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
@ -46,6 +52,8 @@
|
||||
<key>NSUserActivityTypes</key>
|
||||
<array>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route</string>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route</string>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route</string>
|
||||
</array>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>SplashScreen</string>
|
||||
|
@ -4,6 +4,16 @@
|
||||
<dict>
|
||||
<key>NSPrivacyAccessedAPITypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>NSPrivacyAccessedAPIType</key>
|
||||
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
||||
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||
<array>
|
||||
<string>C617.1</string>
|
||||
<string>0A2A.1</string>
|
||||
<string>3B52.1</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>NSPrivacyAccessedAPIType</key>
|
||||
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
||||
@ -14,12 +24,10 @@
|
||||
</dict>
|
||||
<dict>
|
||||
<key>NSPrivacyAccessedAPIType</key>
|
||||
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
||||
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
|
||||
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||
<array>
|
||||
<string>0A2A.1</string>
|
||||
<string>3B52.1</string>
|
||||
<string>C617.1</string>
|
||||
<string>35F9.1</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
@ -31,14 +39,6 @@
|
||||
<string>85F4.1</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>NSPrivacyAccessedAPIType</key>
|
||||
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
|
||||
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||
<array>
|
||||
<string>35F9.1</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>NSPrivacyCollectedDataTypes</key>
|
||||
<array/>
|
||||
|
@ -1,5 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict/>
|
||||
<dict>
|
||||
<key>aps-environment</key>
|
||||
<string>development</string>
|
||||
</dict>
|
||||
</plist>
|
58
package (conflicted copy 2024-09-25 090959).json
Normal file
58
package (conflicted copy 2024-09-25 090959).json
Normal file
@ -0,0 +1,58 @@
|
||||
{
|
||||
"name": "fuse",
|
||||
"main": "expo-router/entry",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start",
|
||||
"reset-project": "node ./scripts/reset-project.js",
|
||||
"android": "expo run:android",
|
||||
"ios": "expo run:ios",
|
||||
"web": "expo start --web",
|
||||
"test": "jest --watchAll",
|
||||
"lint": "expo lint"
|
||||
},
|
||||
"jest": {
|
||||
"preset": "jest-expo"
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/vector-icons": "^14.0.2",
|
||||
"@react-native-async-storage/async-storage": "^2.0.0",
|
||||
"@react-native-community/datetimepicker": "^8.2.0",
|
||||
"@react-navigation/native": "^6.0.2",
|
||||
"axios": "^1.7.7",
|
||||
"expo": "~51.0.28",
|
||||
"expo-constants": "~16.0.2",
|
||||
"expo-font": "~12.0.9",
|
||||
"expo-linear-gradient": "~13.0.2",
|
||||
"expo-linking": "~6.3.1",
|
||||
"expo-router": "~3.5.23",
|
||||
"expo-splash-screen": "~0.27.5",
|
||||
"expo-status-bar": "~1.12.1",
|
||||
"expo-system-ui": "~3.0.7",
|
||||
"expo-web-browser": "~13.0.3",
|
||||
"react": "18.2.0",
|
||||
"react-dom": "18.2.0",
|
||||
"react-native": "0.74.5",
|
||||
"react-native-dotenv": "^3.4.11",
|
||||
"react-native-gesture-handler": "~2.16.1",
|
||||
"react-native-reanimated": "~3.10.1",
|
||||
"react-native-safe-area-context": "4.10.5",
|
||||
"react-native-screens": "3.31.1",
|
||||
"react-native-vector-icons": "^10.1.0",
|
||||
"react-native-web": "~0.19.10",
|
||||
"expo-dev-client": "~4.0.26",
|
||||
"expo-notifications": "~0.28.17",
|
||||
"expo-device": "~6.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.20.0",
|
||||
"@types/jest": "^29.5.12",
|
||||
"@types/react": "~18.2.45",
|
||||
"@types/react-test-renderer": "^18.0.7",
|
||||
"jest": "^29.2.1",
|
||||
"jest-expo": "~51.0.3",
|
||||
"react-test-renderer": "18.2.0",
|
||||
"typescript": "~5.3.3"
|
||||
},
|
||||
"private": true
|
||||
}
|
20127
package-lock (conflicted copy 2024-09-25 091001).json
Normal file
20127
package-lock (conflicted copy 2024-09-25 091001).json
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user