Commit 7dfd54fa authored by Wei Han's avatar Wei Han

create contacts done

parent c6c3917f
import React, { useEffect, useState, useCallback } from 'react'; import React, { useEffect, useState, useCallback } from 'react';
import { View, Text, Button, StyleSheet, Alert, Linking, Platform, NativeModules } from 'react-native'; import { View, Text, Button, StyleSheet, Alert, Linking, Platform, NativeModules } from 'react-native';
import { check, request, PERMISSIONS, RESULTS } from 'react-native-permissions'; import { check, request, PERMISSIONS, RESULTS } from 'react-native-permissions';
// import AsyncStorage from '@react-native-async-storage/async-storage';
import DeviceInfo from 'react-native-device-info'; import DeviceInfo from 'react-native-device-info';
import Contacts from 'react-native-contacts';
const permissionsList = Platform.select({ const permissionsList = Platform.select({
android: [ android: [
{ key: 'READ_CONTACTS', android: PERMISSIONS.ANDROID.READ_CONTACTS }, // 👈 NEW
{ key: 'READ_PHONE_STATE', android: PERMISSIONS.ANDROID.READ_PHONE_STATE }, { key: 'READ_PHONE_STATE', android: PERMISSIONS.ANDROID.READ_PHONE_STATE },
{ key: 'READ_CALL_LOG', android: PERMISSIONS.ANDROID.READ_CALL_LOG }, { key: 'READ_CALL_LOG', android: PERMISSIONS.ANDROID.READ_CALL_LOG },
{ key: 'Display Over Other Apps', android: null }, // overlay special case { key: 'WRITE_CONTACTS', android: PERMISSIONS.ANDROID.WRITE_CONTACTS }, // 👈 Added
{ key: 'Display Over Other Apps', android: null },
],
ios: [
{ key: 'Call Directory Extension', ios: true },
{ key: 'CONTACTS', ios: PERMISSIONS.IOS.CONTACTS }, // 👈 Added
], ],
ios: [{ key: 'Call Directory Extension', ios: true }],
})!; })!;
const { OverlayPermission } = NativeModules; const { OverlayPermission } = NativeModules;
type CallDirectoryManagerType = { type CallDirectoryManagerType = {
...@@ -20,22 +26,6 @@ type CallDirectoryManagerType = { ...@@ -20,22 +26,6 @@ type CallDirectoryManagerType = {
}; };
const CallDirectoryManager: CallDirectoryManagerType | undefined = NativeModules.CallDirectoryManager; const CallDirectoryManager: CallDirectoryManagerType | undefined = NativeModules.CallDirectoryManager;
// async function saveVIPNumber(name: string, number: string) {
// try {
// await AsyncStorage.setItem('vipName', name);
// await AsyncStorage.setItem('vipNumber', number);
// const {VIPStorage} = NativeModules;
// if (!VIPStorage) {
// console.error("❌ VIPStorage is undefined. Did you register StoragePackage in MainApplication?");
// return;
// }
// await VIPStorage.saveVIP(name, number);
// console.log('VIPStorage from NativeModules:', NativeModules.VIPStorage);
// } catch (error) {
// console.error('Failed to save VIP info:', error);
// }
// }
async function checkOverlayPermission() { async function checkOverlayPermission() {
if (Platform.OS === 'android') { if (Platform.OS === 'android') {
try { try {
...@@ -53,44 +43,42 @@ async function checkOverlayPermission() { ...@@ -53,44 +43,42 @@ async function checkOverlayPermission() {
return false; return false;
} }
} else { } else {
return true; // iOS doesn't require this return true;
} }
} }
const openOverlaySettings = async () => { const openOverlaySettings = async () => {
if (Platform.OS === 'android') { if (Platform.OS === 'android') {
const pkg = DeviceInfo.getBundleId(); // gets your app package name const pkg = DeviceInfo.getBundleId();
try { try {
await Linking.openSettings(); // fallback await Linking.openSettings();
await Linking.openURL(`package:${pkg}`); await Linking.openURL(`package:${pkg}`);
} catch (err) { } catch (err) {
console.warn('Failed to open overlay settings:', err); console.warn('Failed to open overlay settings:', err);
}
} }
}; }
};
export default function App() { export default function App() {
const [statuses, setStatuses] = useState<Record<string, string>>({}); const [statuses, setStatuses] = useState<Record<string, string>>({});
const checkAllPermissions = useCallback(async () => { const checkAllPermissions = useCallback(async () => {
const newStatuses: Record<string, string> = {}; const newStatuses: Record<string, string> = {};
if (Platform.OS === 'ios') { if (Platform.OS === 'ios') {
try { try {
if (CallDirectoryManager) { if (CallDirectoryManager) {
const status = await CallDirectoryManager.getEnabledStatusForExtension( const status = await CallDirectoryManager.getEnabledStatusForExtension(
"com.whoscall.whosallDirectoryExtension" "com.whoscall.whoscallDirectoryExtension"
); );
newStatuses['Call Directory Extension'] = status === 2 ? RESULTS.GRANTED : RESULTS.DENIED; newStatuses['Call Directory Extension'] = status === 2 ? RESULTS.GRANTED : RESULTS.DENIED;
} else {
console.warn("⚠️ CallDirectoryManager native module not available");
newStatuses['Call Directory Extension'] = RESULTS.DENIED;
} }
} catch (e) { } catch (e) {
console.error("Error checking Call Directory extension:", e); console.error("Error checking Call Directory extension:", e);
newStatuses['Call Directory Extension'] = RESULTS.DENIED; newStatuses['Call Directory Extension'] = RESULTS.DENIED;
} }
} else { }
for (const perm of permissionsList) { for (const perm of permissionsList) {
if (perm.key === 'Display Over Other Apps') { if (perm.key === 'Display Over Other Apps') {
const granted = await checkOverlayPermission(); const granted = await checkOverlayPermission();
...@@ -101,118 +89,71 @@ export default function App() { ...@@ -101,118 +89,71 @@ export default function App() {
if ('android' in perm && perm.android) { if ('android' in perm && perm.android) {
const result = await check(perm.android); const result = await check(perm.android);
newStatuses[perm.key] = result; newStatuses[perm.key] = result;
} else if ('ios' in perm && typeof perm.ios === 'string') {
const result = await check(perm.ios);
newStatuses[perm.key] = result;
} }
} }
setStatuses(newStatuses); setStatuses(newStatuses);
// Request missing permissions
for (const perm of permissionsList) { for (const perm of permissionsList) {
if (newStatuses[perm.key] !== RESULTS.GRANTED) { if (newStatuses[perm.key] !== RESULTS.GRANTED) {
if (perm.key === 'Display Over Other Apps') { if ('android' in perm && perm.android) {
Alert.alert(
'Overlay Permission Required',
'This app needs permission to display over other apps.',
[{ text: 'Open Settings', onPress: openOverlaySettings }]
);
} else if ('android' in perm && perm.android) {
const result = await request(perm.android); const result = await request(perm.android);
setStatuses(prev => ({ ...prev, [perm.key]: result })); setStatuses(prev => ({ ...prev, [perm.key]: result }));
} else if ('ios' in perm && typeof perm.ios === 'string') {
const result = await request(perm.ios);
setStatuses(prev => ({ ...prev, [perm.key]: result }));
} }
} }
} }
}
if (Platform.OS === 'ios') {
try {
if (CallDirectoryManager) {
const status = await CallDirectoryManager.getEnabledStatusForExtension(
"com.whoscall.whoscallDirectoryExtension"
);
let mapped: typeof RESULTS[keyof typeof RESULTS]; // tells TS it's a valid RESULTS value
if (status === 2) {
mapped = RESULTS.GRANTED; // enabled
} else if (status === 1) {
mapped = RESULTS.DENIED; // disabled by user
} else {
mapped = RESULTS.UNAVAILABLE; // unknown / not supported
}
newStatuses['Call Directory Extension'] = mapped;
} else {
console.warn("⚠️ CallDirectoryManager native module not available");
newStatuses['Call Directory Extension'] = RESULTS.DENIED;
Alert.alert(
"Enable Caller ID",
"Go to Settings → Phone → Call Blocking & Identification and enable [whoscall] to see caller ID labels.",
[
{ text: "Open Settings", onPress: () => Linking.openURL("app-settings:") },
{ text: "Cancel", style: "cancel" }
]
);
}
} catch (e) {
console.error("Error checking Call Directory extension:", e);
newStatuses['Call Directory Extension'] = RESULTS.DENIED;
Alert.alert(
"Enable Caller ID",
"Go to Settings → Phone → Call Blocking & Identification and enable [Your App] to see caller ID labels.",
[
{ text: "Open Settings", onPress: () => Linking.openURL("app-settings:") },
{ text: "Cancel", style: "cancel" }
]
);
}
}
}, []); }, []);
useEffect(() => { useEffect(() => {
console.log("PermissionsScreen mounted"); console.log("PermissionsScreen mounted");
console.log("All NativeModules keys:", Object.keys(NativeModules));
// console.log("VIPStorage:", NativeModules.VIPStorage);
// saveVIPNumber('VIP User', '+60123456789');
checkAllPermissions(); checkAllPermissions();
},[checkAllPermissions]); }, [checkAllPermissions]);
const allGranted = Object.values(statuses).every(s => s === RESULTS.GRANTED); const allGranted = Object.values(statuses).every(s => s === RESULTS.GRANTED);
// --- iOS: Call Directory management --- // ✅ New: Function to insert contact
// const checkCallDirectoryStatus = async () => { const insertContact = async () => {
// if (Platform.OS !== "ios" || !CallDirectoryManager) { try {
// console.warn("CallDirectoryManager not available on this platform"); // double-check permission
// return; const perm = Platform.OS === 'android'
// } ? await check(PERMISSIONS.ANDROID.WRITE_CONTACTS)
// try { : await check(PERMISSIONS.IOS.CONTACTS);
// const status = await CallDirectoryManager.getEnabledStatusForExtension(
// "com.whoscall.whoscallDirectoryExtension" // <-- must match your extension bundle ID if (perm !== RESULTS.GRANTED) {
// ); Alert.alert("Permission Needed", "Please grant contacts permission to save contacts.");
// console.log("Call Directory status:", status); return;
// if (status === 2) { }
// Alert.alert("✅ Enabled", "Call Directory Extension is enabled");
// } else { const newContact = {
// Alert.alert( displayName: 'Support Line',
// "⚠️ Not Enabled", givenName: 'Support',
// "Go to Settings → Phone → Call Blocking & Identification and enable Whoscall." familyName: 'Line',
// ); phoneNumbers: [{ label: 'mobile', number: '+60123456789' }],
// } emailAddresses: [{ label: 'work', email: 'support@example.com' }],
// } catch (e) { };
// console.error("Error checking Call Directory status:", e);
// } await Contacts.addContact(newContact);
// }; Alert.alert('✅ Success', 'Contact added successfully');
} catch (error) {
console.error('Failed to add contact:', error);
Alert.alert('❌ Error', String(error));
}
};
const reloadCallDirectory = async () => { const reloadCallDirectory = async () => {
if (Platform.OS !== "ios" || !CallDirectoryManager) { if (Platform.OS !== "ios" || !CallDirectoryManager) return;
console.warn("CallDirectoryManager not available on this platform");
return;
}
try { try {
const success = await CallDirectoryManager.reloadExtension( const success = await CallDirectoryManager.reloadExtension(
"com.whoscall.whoscallDirectoryExtension" "com.whoscall.whoscallDirectoryExtension"
); );
console.log("Reload result:", success); if (success) Alert.alert("🔄 Reloaded", "Extension reloaded successfully");
if (success) {
Alert.alert("🔄 Reloaded", "Extension reloaded successfully");
}
} catch (e) { } catch (e) {
console.error("Error reloading Call Directory:", e); console.error("Error reloading Call Directory:", e);
Alert.alert("❌ Reload Failed", String(e)); Alert.alert("❌ Reload Failed", String(e));
...@@ -234,12 +175,15 @@ export default function App() { ...@@ -234,12 +175,15 @@ export default function App() {
</Text> </Text>
</View> </View>
))} ))}
{Platform.OS === "android" && allGranted && <Text style={styles.granted}>All permissions granted ✅</Text>} {Platform.OS === "android" && allGranted && <Text style={styles.granted}>All permissions granted ✅</Text>}
<Button title="Check Again" onPress={checkAllPermissions} />
<Button title="Check Again" onPress={checkAllPermissions} />
<Button title="➕ Add Contact" onPress={insertContact} />
{Platform.OS === "ios" && ( {Platform.OS === "ios" && (
<> <Button title="Reload Call Directory" onPress={reloadCallDirectory} />
<Button title="Reload Call Directory" onPress={reloadCallDirectory} />
</>
)} )}
</View> </View>
); );
......
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
<uses-permission android:name="android.permission.READ_CALL_LOG" /> <uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACTION_MANAGE_OVERLAY_PERMISSION" /> <uses-permission android:name="android.permission.ACTION_MANAGE_OVERLAY_PERMISSION" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application <application
android:name=".MainApplication" android:name=".MainApplication"
......
# Resolve react_native_pods.rb with node to allow for hoisting def node_require(script)
require Pod::Executable.execute_command('node', ['-p', # Resolve script with node to allow for hoisting
'require.resolve( require Pod::Executable.execute_command('node', ['-p',
"react-native/scripts/react_native_pods.rb", "require.resolve(
{paths: [process.argv[1]]}, '#{script}',
)', __dir__]).strip {paths: [process.argv[1]]},
)", __dir__]).strip
end
node_require('react-native/scripts/react_native_pods.rb')
node_require('react-native-permissions/scripts/setup.rb')
platform :ios, min_ios_version_supported platform :ios, min_ios_version_supported
prepare_react_native_project! prepare_react_native_project!
# ⬇️ uncomment the permissions you need
setup_permissions([
# 'AppTrackingTransparency',
# 'Bluetooth',
# 'Calendars',
# 'CalendarsWriteOnly',
# 'Camera',
'Contacts',
# 'FaceID',
# 'LocationAccuracy',
# 'LocationAlways',
# 'LocationWhenInUse',
# 'MediaLibrary',
# 'Microphone',
# 'Motion',
# 'Notifications',
# 'PhotoLibrary',
# 'PhotoLibraryAddOnly',
# 'Reminders',
# 'Siri',
# 'SpeechRecognition',
# 'StoreKit',
])
linkage = ENV['USE_FRAMEWORKS'] linkage = ENV['USE_FRAMEWORKS']
if linkage != nil if linkage != nil
Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
...@@ -19,17 +48,20 @@ target 'whoscall' do ...@@ -19,17 +48,20 @@ target 'whoscall' do
use_react_native!( use_react_native!(
:path => config[:reactNativePath], :path => config[:reactNativePath],
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/.." :app_path => "#{Pod::Config.instance.installation_root}/.."
) )
pod 'react-native-contacts', :path => '../node_modules/react-native-contacts'
# 👇 ADD THIS for react-native-permissions contacts handler
# permissions_path = '../node_modules/react-native-permissions/ios'
# pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts"
post_install do |installer| post_install do |installer|
# https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202
react_native_post_install( react_native_post_install(
installer, installer,
config[:reactNativePath], config[:reactNativePath],
:mac_catalyst_enabled => false, :mac_catalyst_enabled => false,
# :ccache_enabled => true
) )
end end
end end
...@@ -1748,6 +1748,34 @@ PODS: ...@@ -1748,6 +1748,34 @@ PODS:
- React-RCTFBReactNativeSpec - React-RCTFBReactNativeSpec
- ReactCommon/turbomodule/core - ReactCommon/turbomodule/core
- SocketRocket - SocketRocket
- react-native-contacts (8.0.7):
- boost
- DoubleConversion
- fast_float
- fmt
- glog
- hermes-engine
- RCT-Folly
- RCT-Folly/Fabric
- RCTRequired
- RCTTypeSafety
- React-Core
- React-debug
- React-Fabric
- React-featureflags
- React-graphics
- React-ImageManager
- React-jsi
- React-NativeModulesApple
- React-RCTFabric
- React-renderercss
- React-rendererdebug
- React-utils
- ReactCodegen
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- react-native-safe-area-context (5.6.1): - react-native-safe-area-context (5.6.1):
- boost - boost
- DoubleConversion - DoubleConversion
...@@ -2443,6 +2471,7 @@ DEPENDENCIES: ...@@ -2443,6 +2471,7 @@ DEPENDENCIES:
- React-logger (from `../node_modules/react-native/ReactCommon/logger`) - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
- React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`)
- React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`)
- react-native-contacts (from `../node_modules/react-native-contacts`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
- React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`) - React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`)
...@@ -2566,6 +2595,8 @@ EXTERNAL SOURCES: ...@@ -2566,6 +2595,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon" :path: "../node_modules/react-native/ReactCommon"
React-microtasksnativemodule: React-microtasksnativemodule:
:path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks"
react-native-contacts:
:path: "../node_modules/react-native-contacts"
react-native-safe-area-context: react-native-safe-area-context:
:path: "../node_modules/react-native-safe-area-context" :path: "../node_modules/react-native-safe-area-context"
React-NativeModulesApple: React-NativeModulesApple:
...@@ -2645,76 +2676,77 @@ SPEC CHECKSUMS: ...@@ -2645,76 +2676,77 @@ SPEC CHECKSUMS:
fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd
glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 glog: 5683914934d5b6e4240e497e0f4a3b42d1854183
hermes-engine: 4f8246b1f6d79f625e0d99472d1f3a71da4d28ca hermes-engine: 4f8246b1f6d79f625e0d99472d1f3a71da4d28ca
RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 RCT-Folly: 59ec0ac1f2f39672a0c6e6cecdd39383b764646f
RCTDeprecation: c4b9e2fd0ab200e3af72b013ed6113187c607077 RCTDeprecation: c4b9e2fd0ab200e3af72b013ed6113187c607077
RCTRequired: e97dd5dafc1db8094e63bc5031e0371f092ae92a RCTRequired: e97dd5dafc1db8094e63bc5031e0371f092ae92a
RCTTypeSafety: 720403058b7c1380c6a3ae5706981d6362962c89 RCTTypeSafety: 720403058b7c1380c6a3ae5706981d6362962c89
React: f1486d005993b0af01943af1850d3d4f3b597545 React: f1486d005993b0af01943af1850d3d4f3b597545
React-callinvoker: 133f69368c8559e744efa345223625d412f5dfbe React-callinvoker: 133f69368c8559e744efa345223625d412f5dfbe
React-Core: 559823921b4f294c2840fa8238ca958a29ddc211 React-Core: d6d8c1fd33697cec596d33b820456505ee305686
React-CoreModules: c41e7bbfabbc420783bb926f45837a0d5e53341e React-CoreModules: 81ab751a7668ba161440f9623b994e1a6a3019fe
React-cxxreact: 9cb9fa738274a1b36b97ede09c8a6717dec1a20b React-cxxreact: 16f2a2751d0dce8b569f23c1914edc90f655b01b
React-debug: e01581e1589f329e61c95b332bf7f4969b10564b React-debug: e01581e1589f329e61c95b332bf7f4969b10564b
React-defaultsnativemodule: bbb39447caa6b6cf9405fa0099f828c083640faa React-defaultsnativemodule: e956b1d8fe15cc79d23061db229bf88170565f2f
React-domnativemodule: 03744d12b6d56d098531a933730bf1d4cb79bdfb React-domnativemodule: a18b0f7a31b9c75f12fa369baece5542d1265b36
React-Fabric: 530b3993a12a96e8a7cdb9f0ef48e605277b572e React-Fabric: c0237a32c3c0dbea2d2b294c8e95605e1dfe2f57
React-FabricComponents: 271ec2a9b2c00ac66fd6d1fd24e9e964d907751d React-FabricComponents: 65b03884bd5d9f24c79a631d7d26f0fa079bc4aa
React-FabricImage: d0af66e976dbab7f8b81e36dd369fc70727d2695 React-FabricImage: de1ea2f2a0b32ad02e5cbb64827d1eec0439cf0d
React-featureflags: 269704c8eff86e0485c9d384e286350fcda6eb70 React-featureflags: 02de9c35256cc624269b01d670d99e1fd706ea8d
React-featureflagsnativemodule: db1e5d88a912fb08a5ece33fcf64e1b732da8467 React-featureflagsnativemodule: 8b84e67edbaa7b9318390c5bd3ae19790a74f356
React-graphics: b19d03a01b0722b4dc82f47acb56dc3ed41937e7 React-graphics: 004b40c1b236ea3bb8de6693439bef9797922ba9
React-hermes: 811606c0aca5a3f9c6fa8e4994e02ca8f677e68e React-hermes: 2179a018b2f86652f6f33ef23efd9e5ac284b247
React-idlecallbacksnativemodule: 3a3df629cd50046c7e4354f9025aefe8f2c84601 React-idlecallbacksnativemodule: f54ea68f984b12e42feed1e7110623b2c38df4d1
React-ImageManager: 0d53866c63132791e37bb2373f93044fdef14aa3 React-ImageManager: 9dd04b7b62bc5397f876ca5fb1b712e700ce390c
React-jserrorhandler: d5700d6ab7162fd575287502a3c5d601d98e7f09 React-jserrorhandler: 2f90bf50fffea1d012e7f3d717c6adf748b1813d
React-jsi: ece95417fedbed0e7153a855cb8342b7c72ab75e React-jsi: b27208f8866e53238534f65f304903e4eff25e05
React-jsiexecutor: 2b0bb644b533df2f5c0cd6ade9a4560d0bf1dd84 React-jsiexecutor: 1d3e827797f592c393860dea91aaa6d53c7715e7
React-jsinspector: 0c160f8510a8852bdf2dac12f0b1949efc18200b React-jsinspector: bda319277ae779bc476b736fe3a497c6aed304cd
React-jsinspectorcdp: f4b84409f453f61ddd8614ad45139bc594ec6bb5 React-jsinspectorcdp: 69e1736edfd5420037680b7b4557fa748c3c8216
React-jsinspectornetwork: 8f2f0ca8c871ca19b571f426002c0012e7fb2aee React-jsinspectornetwork: 7aa707b057c6129b4af59e0c9160436bbab25022
React-jsinspectortracing: 33f6b977eb8a4bc1e3d1a4b948809aca083143f9 React-jsinspectortracing: b4a8a328ad2697f9638daa4b7cc054e0303fa47f
React-jsitooling: 2c61529b589e17229a9f0a4a4fc35aa7ad495850 React-jsitooling: a6c7e2829437b28665e97a398b3374d443125e24
React-jsitracing: 838a7b0c013c4aff7d382d7fdc78cf442013ba1d React-jsitracing: d87ae17dd0eef7844e605945da926c5433fe2b51
React-logger: 7aef4d74123e5e3d267e5af1fbf5135b5a0d8381 React-logger: d27dd2000f520bf891d24f6e141cde34df41f0ee
React-Mapbuffer: 91e0eab42a6ae7f3e34091a126d70fc53bd3823e React-Mapbuffer: 0746ffab5ac0f49b7c9347338e3d0c1d9dd634c8
React-microtasksnativemodule: 1ead4fe154df3b1ba34b5a9e35ef3c4bdfa72ccb React-microtasksnativemodule: b0fb3f97372df39bda3e657536039f1af227cc29
react-native-safe-area-context: c6e2edd1c1da07bdce287fa9d9e60c5f7b514616 react-native-contacts: 97feb22c88d4c74c4ad0264a4b7281d7d14f3e69
React-NativeModulesApple: eff2eba56030eb0d107b1642b8f853bc36a833ac react-native-safe-area-context: 6d8a7b750e496e37bda47c938320bf2c734d441f
React-NativeModulesApple: 9ec9240159974c94886ebbe4caec18e3395f6aef
React-oscompat: b12c633e9c00f1f99467b1e0e0b8038895dae436 React-oscompat: b12c633e9c00f1f99467b1e0e0b8038895dae436
React-perflogger: 58d12c4e5df1403030c97b9c621375c312cca454 React-perflogger: ccf4fd2664b00818645e588623c7531a8b32d114
React-performancetimeline: 0ee0a3236c77a4ee6d8a6189089e41e4003d292e React-performancetimeline: a866ba759d8e06e9ba174b4421677edcae487baf
React-RCTActionSheet: 3f741a3712653611a6bfc5abceb8260af9d0b218 React-RCTActionSheet: 3f741a3712653611a6bfc5abceb8260af9d0b218
React-RCTAnimation: 408ad69ea136e99a463dd33eadecc29e586b3d72 React-RCTAnimation: 2edeebfba175cc2e937e2752209ab605d3c48f21
React-RCTAppDelegate: f03b46e80b8a3dbfa84b35abfe123e02f3ceef83 React-RCTAppDelegate: e292321e83ee966897244a032216a70930b758d6
React-RCTBlob: bd42e92a00ad22eaab92ffe5c137e7a2f725887a React-RCTBlob: 8dfb24b6dd4a5af45e1e59e2fd925b2df1e44d08
React-RCTFabric: b99ab638c73cf2d57b886eafdbfb2e4909b0eb9a React-RCTFabric: b25b02a2016f5cb15926a60c77a8d75865aa3558
React-RCTFBReactNativeSpec: 7ad9aba0e0655e3f29be0a1c3fd4a888fab04dcf React-RCTFBReactNativeSpec: 20338571a1ed853d01da6c68576aa6e8e107b6f6
React-RCTImage: 0f1c74f7cd20027f8c34976a211b35d4263a0add React-RCTImage: c7fe8c2f2ae8bad98ab4d944d5d50a889da4b652
React-RCTLinking: 6d7dfc3a74110df56c3a73cc7626bf4415656542 React-RCTLinking: 9ac21ce9f1af914bb01c06af3752db2ec840d0ee
React-RCTNetwork: 6a25d8645a80d5b86098675ca39bf8fcf1afa08b React-RCTNetwork: 09a5de71d757dbad4b3fe3615839290200b932aa
React-RCTRuntime: 38bfe9766565ae3293ca230bc51c9c020a8bc98a React-RCTRuntime: da3f1e0ce088c20350044cdf1efcd7f8d9b9b40c
React-RCTSettings: 651d9ae2cdd32f547ad0d225a2c13886d6ad2358 React-RCTSettings: fee112652ac7569ea9abe910206e1685f5f9adba
React-RCTText: 9bc66cd288478e23195e01f5cb45eba79986b2b4 React-RCTText: 7ee9d0bc16b3a8149f8df6d70c48e724d0db1d89
React-RCTVibration: 371226f5667a00c76d792dcdb5c2e0fcbcde0c3b React-RCTVibration: 619d613abaeb05f6fbc2b2e5e33f724f05df8eb8
React-rendererconsistency: a05f6c37f9389c53213d1e28798e441fa6fbdbcd React-rendererconsistency: a05f6c37f9389c53213d1e28798e441fa6fbdbcd
React-renderercss: 6e4febfa014b0f53bc171a62b0f713ddbdbb9860 React-renderercss: 3decb27a81648fcdee837c59994b51fff5be5a67
React-rendererdebug: e94bf27b9d55ef2795caa8e43aa92abc4a373b8b React-rendererdebug: 3b9a92d36932af52e1b473f2a89ea4b05dbdecdf
React-RuntimeApple: 723be5159519eba1cd92449acb29436d21571b82 React-RuntimeApple: 4e35fb74be4b721c2e1fd6d54ec66456fa7043e9
React-RuntimeCore: f58eb0f01065c9d27d91de10b2e4ab4c76d83b0e React-RuntimeCore: 0fd7ac6e3e9dd20cb47e87c6b9f35832dd445d5e
React-runtimeexecutor: f615ec8742d0b5820170f7c8b4d2c7cb75d93ac9 React-runtimeexecutor: 7680156c9f3a5a49c688bc33f9ec5ea1b00527f5
React-RuntimeHermes: fddb258e03d330d1132bb19e78fe51ac2f3f41ac React-RuntimeHermes: 435b7104a3c749af6251353dcb7317a8e53cbd73
React-runtimescheduler: e92a31460e654ced8587debeec37553315e1b6a5 React-runtimescheduler: 8056b916168e446ea44531883928034e62e76a81
React-timing: 97ada2c47b4c5932e7f773c7d239c52b90d6ca68 React-timing: 36da85e32e53008ce73f87528818191e7f2508ba
React-utils: f0949d247a46b4c09f03e5a3cb1167602d0b729a React-utils: 71e53d55ce778c6e7c7c9db4b1b9d63ef8f55289
ReactAppDependencyProvider: 3eb9096cb139eb433965693bbe541d96eb3d3ec9 ReactAppDependencyProvider: 448b422f8af1dedf81374eacc90a15439a0ed7f5
ReactCodegen: 4d203eddf6f977caa324640a20f92e70408d648b ReactCodegen: 3baedb0c33f963250c866151b825a3c5194b12f1
ReactCommon: ce5d4226dfaf9d5dacbef57b4528819e39d3a120 ReactCommon: e897f9a1b4afab370cfefaaf5fb3c80371bc3937
RNCAsyncStorage: 29f0230e1a25f36c20b05f65e2eb8958d6526e82 RNCAsyncStorage: 302f2fac014fd450046c120567ca364632da682b
RNDeviceInfo: d863506092aef7e7af3a1c350c913d867d795047 RNDeviceInfo: feea80a690d2bde1fe51461cf548039258bd03f2
RNPermissions: 56d8a958b1d8cf7f4c30a732619b7b6b6b92bfda RNPermissions: 17f561b238129ae26ab9295195b02a24e547e4f5
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
Yoga: 11c9686a21e2cd82a094a723649d9f4507200fb0 Yoga: 11c9686a21e2cd82a094a723649d9f4507200fb0
PODFILE CHECKSUM: fc09e4987141cdbdb9225f2448b4fa7d29d3c937 PODFILE CHECKSUM: bda321bb39bb9f59028a640a2b85e01ca2f6a62d
COCOAPODS: 1.16.2 COCOAPODS: 1.16.2
...@@ -3,16 +3,16 @@ ...@@ -3,16 +3,16 @@
archiveVersion = 1; archiveVersion = 1;
classes = { classes = {
}; };
objectVersion = 70; objectVersion = 77;
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
0410826D011576D314605BD9 /* libPods-whoscall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F6CFA299F105635DA208C0DF /* libPods-whoscall.a */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
2FE699522E681911009FD0E6 /* whoscallDirectoryExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 2FE6994B2E681911009FD0E6 /* whoscallDirectoryExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 2FE699522E681911009FD0E6 /* whoscallDirectoryExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 2FE6994B2E681911009FD0E6 /* whoscallDirectoryExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; }; 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
A3AA3DDDD267D1DE50433D9E /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; }; A3AA3DDDD267D1DE50433D9E /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; };
BF6E4643B15FA0776CCE4173 /* libPods-whoscall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CBA21964B066F08CEC5325D /* libPods-whoscall.a */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
...@@ -40,21 +40,21 @@ ...@@ -40,21 +40,21 @@
/* End PBXCopyFilesBuildPhase section */ /* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
121AADEC182EBFA46E71BFE9 /* Pods-whoscall.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-whoscall.debug.xcconfig"; path = "Target Support Files/Pods-whoscall/Pods-whoscall.debug.xcconfig"; sourceTree = "<group>"; };
13B07F961A680F5B00A75B9A /* whoscall.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = whoscall.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07F961A680F5B00A75B9A /* whoscall.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = whoscall.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = whoscall/Images.xcassets; sourceTree = "<group>"; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = whoscall/Images.xcassets; sourceTree = "<group>"; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = whoscall/Info.plist; sourceTree = "<group>"; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = whoscall/Info.plist; sourceTree = "<group>"; };
13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = whoscall/PrivacyInfo.xcprivacy; sourceTree = "<group>"; }; 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = whoscall/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
2FE6994B2E681911009FD0E6 /* whoscallDirectoryExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = whoscallDirectoryExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 2FE6994B2E681911009FD0E6 /* whoscallDirectoryExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = whoscallDirectoryExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
67DF90D1374D6A0ED9C8E09D /* Pods-whoscall.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-whoscall.release.xcconfig"; path = "Target Support Files/Pods-whoscall/Pods-whoscall.release.xcconfig"; sourceTree = "<group>"; };
761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = whoscall/AppDelegate.swift; sourceTree = "<group>"; }; 761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = whoscall/AppDelegate.swift; sourceTree = "<group>"; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = whoscall/LaunchScreen.storyboard; sourceTree = "<group>"; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = whoscall/LaunchScreen.storyboard; sourceTree = "<group>"; };
E95D2201546CD28779324AAF /* Pods-whoscall.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-whoscall.release.xcconfig"; path = "Target Support Files/Pods-whoscall/Pods-whoscall.release.xcconfig"; sourceTree = "<group>"; }; 8CBA21964B066F08CEC5325D /* libPods-whoscall.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-whoscall.a"; sourceTree = BUILT_PRODUCTS_DIR; };
915C4099EC0663C11966262F /* Pods-whoscall.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-whoscall.debug.xcconfig"; path = "Target Support Files/Pods-whoscall/Pods-whoscall.debug.xcconfig"; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
F6CFA299F105635DA208C0DF /* libPods-whoscall.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-whoscall.a"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
2FE699562E681911009FD0E6 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { 2FE699562E681911009FD0E6 /* Exceptions for "whoscallDirectoryExtension" folder in "whoscallDirectoryExtension" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet; isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = ( membershipExceptions = (
Info.plist, Info.plist,
...@@ -64,7 +64,14 @@ ...@@ -64,7 +64,14 @@
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
/* Begin PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFileSystemSynchronizedRootGroup section */
2FE6994C2E681911009FD0E6 /* whoscallDirectoryExtension */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (2FE699562E681911009FD0E6 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = whoscallDirectoryExtension; sourceTree = "<group>"; }; 2FE6994C2E681911009FD0E6 /* whoscallDirectoryExtension */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
2FE699562E681911009FD0E6 /* Exceptions for "whoscallDirectoryExtension" folder in "whoscallDirectoryExtension" target */,
);
path = whoscallDirectoryExtension;
sourceTree = "<group>";
};
/* End PBXFileSystemSynchronizedRootGroup section */ /* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
...@@ -72,7 +79,7 @@ ...@@ -72,7 +79,7 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
0410826D011576D314605BD9 /* libPods-whoscall.a in Frameworks */, BF6E4643B15FA0776CCE4173 /* libPods-whoscall.a in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
...@@ -102,7 +109,7 @@ ...@@ -102,7 +109,7 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */, ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
F6CFA299F105635DA208C0DF /* libPods-whoscall.a */, 8CBA21964B066F08CEC5325D /* libPods-whoscall.a */,
); );
name = Frameworks; name = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -141,8 +148,8 @@ ...@@ -141,8 +148,8 @@
BBD78D7AC51CEA395F1C20DB /* Pods */ = { BBD78D7AC51CEA395F1C20DB /* Pods */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
121AADEC182EBFA46E71BFE9 /* Pods-whoscall.debug.xcconfig */, 915C4099EC0663C11966262F /* Pods-whoscall.debug.xcconfig */,
E95D2201546CD28779324AAF /* Pods-whoscall.release.xcconfig */, 67DF90D1374D6A0ED9C8E09D /* Pods-whoscall.release.xcconfig */,
); );
path = Pods; path = Pods;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -154,14 +161,14 @@ ...@@ -154,14 +161,14 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "whoscall" */; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "whoscall" */;
buildPhases = ( buildPhases = (
67B6D626B1DB7B156945ECA4 /* [CP] Check Pods Manifest.lock */, 50D30F19591250BA2FD36E7D /* [CP] Check Pods Manifest.lock */,
13B07F871A680F5B00A75B9A /* Sources */, 13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */, 13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
2FE699532E681911009FD0E6 /* Embed Foundation Extensions */, 2FE699532E681911009FD0E6 /* Embed Foundation Extensions */,
5F0A539D1614410270C2C189 /* [CP] Embed Pods Frameworks */, 8201A6A5AEE353E6273DA7DF /* [CP] Embed Pods Frameworks */,
4BCC9D61081E766D39E74EA7 /* [CP] Copy Pods Resources */, B59890C4B6E0941619A983D3 /* [CP] Copy Pods Resources */,
); );
buildRules = ( buildRules = (
); );
...@@ -199,6 +206,7 @@ ...@@ -199,6 +206,7 @@
83CBB9F71A601CBA00E9B192 /* Project object */ = { 83CBB9F71A601CBA00E9B192 /* Project object */ = {
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
BuildIndependentTargetsInParallel = NO;
LastSwiftUpdateCheck = 1640; LastSwiftUpdateCheck = 1640;
LastUpgradeCheck = 1210; LastUpgradeCheck = 1210;
TargetAttributes = { TargetAttributes = {
...@@ -211,7 +219,6 @@ ...@@ -211,7 +219,6 @@
}; };
}; };
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "whoscall" */; buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "whoscall" */;
compatibilityVersion = "Xcode 12.0";
developmentRegion = en; developmentRegion = en;
hasScannedForEncodings = 0; hasScannedForEncodings = 0;
knownRegions = ( knownRegions = (
...@@ -219,6 +226,7 @@ ...@@ -219,6 +226,7 @@
Base, Base,
); );
mainGroup = 83CBB9F61A601CBA00E9B192; mainGroup = 83CBB9F61A601CBA00E9B192;
preferredProjectObjectVersion = 77;
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
projectDirPath = ""; projectDirPath = "";
projectRoot = ""; projectRoot = "";
...@@ -266,28 +274,29 @@ ...@@ -266,28 +274,29 @@
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
}; };
4BCC9D61081E766D39E74EA7 /* [CP] Copy Pods Resources */ = { 50D30F19591250BA2FD36E7D /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputFileListPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-whoscall/Pods-whoscall-resources-${CONFIGURATION}-input-files.xcfilelist",
); );
inputPaths = ( inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
); );
name = "[CP] Copy Pods Resources"; name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = ( outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-whoscall/Pods-whoscall-resources-${CONFIGURATION}-output-files.xcfilelist",
); );
outputPaths = ( outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-whoscall-checkManifestLockResult.txt",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-whoscall/Pods-whoscall-resources.sh\"\n"; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
5F0A539D1614410270C2C189 /* [CP] Embed Pods Frameworks */ = { 8201A6A5AEE353E6273DA7DF /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
...@@ -295,39 +304,30 @@ ...@@ -295,39 +304,30 @@
inputFileListPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-whoscall/Pods-whoscall-frameworks-${CONFIGURATION}-input-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-whoscall/Pods-whoscall-frameworks-${CONFIGURATION}-input-files.xcfilelist",
); );
inputPaths = (
);
name = "[CP] Embed Pods Frameworks"; name = "[CP] Embed Pods Frameworks";
outputFileListPaths = ( outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-whoscall/Pods-whoscall-frameworks-${CONFIGURATION}-output-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-whoscall/Pods-whoscall-frameworks-${CONFIGURATION}-output-files.xcfilelist",
); );
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-whoscall/Pods-whoscall-frameworks.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-whoscall/Pods-whoscall-frameworks.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
67B6D626B1DB7B156945ECA4 /* [CP] Check Pods Manifest.lock */ = { B59890C4B6E0941619A983D3 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputFileListPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-whoscall/Pods-whoscall-resources-${CONFIGURATION}-input-files.xcfilelist",
); );
inputPaths = ( name = "[CP] Copy Pods Resources";
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = ( outputFileListPaths = (
); "${PODS_ROOT}/Target Support Files/Pods-whoscall/Pods-whoscall-resources-${CONFIGURATION}-output-files.xcfilelist",
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-whoscall-checkManifestLockResult.txt",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-whoscall/Pods-whoscall-resources.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
/* End PBXShellScriptBuildPhase section */ /* End PBXShellScriptBuildPhase section */
...@@ -361,7 +361,7 @@ ...@@ -361,7 +361,7 @@
/* Begin XCBuildConfiguration section */ /* Begin XCBuildConfiguration section */
13B07F941A680F5B00A75B9A /* Debug */ = { 13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 121AADEC182EBFA46E71BFE9 /* Pods-whoscall.debug.xcconfig */; baseConfigurationReference = 915C4099EC0663C11966262F /* Pods-whoscall.debug.xcconfig */;
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
...@@ -390,7 +390,7 @@ ...@@ -390,7 +390,7 @@
}; };
13B07F951A680F5B00A75B9A /* Release */ = { 13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = E95D2201546CD28779324AAF /* Pods-whoscall.release.xcconfig */; baseConfigurationReference = 67DF90D1374D6A0ED9C8E09D /* Pods-whoscall.release.xcconfig */;
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
......
...@@ -31,6 +31,8 @@ ...@@ -31,6 +31,8 @@
<key>NSAllowsLocalNetworking</key> <key>NSAllowsLocalNetworking</key>
<true/> <true/>
</dict> </dict>
<key>NSContactsUsageDescription</key>
<string>This app needs access to save contacts for support numbers.</string>
<key>NSLocationWhenInUseUsageDescription</key> <key>NSLocationWhenInUseUsageDescription</key>
<string></string> <string></string>
<key>RCTNewArchEnabled</key> <key>RCTNewArchEnabled</key>
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
"@react-native/new-app-screen": "0.81.1", "@react-native/new-app-screen": "0.81.1",
"react": "19.1.0", "react": "19.1.0",
"react-native": "0.81.1", "react-native": "0.81.1",
"react-native-contacts": "^8.0.7",
"react-native-device-info": "^14.0.4", "react-native-device-info": "^14.0.4",
"react-native-permissions": "^5.4.2", "react-native-permissions": "^5.4.2",
"react-native-safe-area-context": "^5.5.2" "react-native-safe-area-context": "^5.5.2"
......
...@@ -5391,6 +5391,11 @@ react-is@^19.1.0: ...@@ -5391,6 +5391,11 @@ react-is@^19.1.0:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.1.1.tgz#038ebe313cf18e1fd1235d51c87360eb87f7c36a" resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.1.1.tgz#038ebe313cf18e1fd1235d51c87360eb87f7c36a"
integrity sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA== integrity sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==
react-native-contacts@^8.0.7:
version "8.0.7"
resolved "https://registry.yarnpkg.com/react-native-contacts/-/react-native-contacts-8.0.7.tgz#486fcc1cc267a2c5bceb51f46263a3e10dbb2650"
integrity sha512-9JyH+3MXZcOD1+Lm+kl1DeQzT24ayZ//LonTSZM2cln66mHgC2MzW1wBQAJ7EL9eu5NSjSav4c4BIWuOsods6Q==
react-native-device-info@^14.0.4: react-native-device-info@^14.0.4:
version "14.0.4" version "14.0.4"
resolved "https://registry.yarnpkg.com/react-native-device-info/-/react-native-device-info-14.0.4.tgz#56b24ace9ff29a66bdfc667209086421ed6cfdce" resolved "https://registry.yarnpkg.com/react-native-device-info/-/react-native-device-info-14.0.4.tgz#56b24ace9ff29a66bdfc667209086421ed6cfdce"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment