Compare commits

...

52 Commits

Author SHA1 Message Date
vinoth 0cdcb56d25 Merge pull request 'teacher edit image issue fix' (#18) from update-existing-code into development
Reviewed-on: WizdomWaves/TedQuMobileApp#18
2024-12-25 15:43:18 +00:00
vinoth 67f411da39 teacher edit image issue fix 2024-12-25 21:12:42 +05:30
vinoth 885c596314 Merge pull request 'drawernavigation and instantfeedback time fixes' (#17) from update-existing-code into development
Reviewed-on: WizdomWaves/TedQuMobileApp#17
2024-12-25 05:39:56 +00:00
vinoth 2717ef7289 drawernavigation and instantfeedback time fixes 2024-12-25 11:09:00 +05:30
vinoth 0e0eba6a41 Merge pull request 'image to base64 view and student, teacher, dairy' (#16) from update-existing-code into development
Reviewed-on: WizdomWaves/TedQuMobileApp#16
2024-12-19 06:10:34 +00:00
vinoth e2cf625ae7 image to base64 view and student, teacher, dairy 2024-12-19 10:54:37 +05:30
vinoth 7c8ca5a70d Merge pull request 'bugfix studentprofile' (#15) from update-existing-code into development
Reviewed-on: WizdomWaves/TedQuMobileApp#15
2024-12-11 04:32:24 +00:00
vinoth 43f8833f72 bugfix studentprofile 2024-12-11 10:01:27 +05:30
karthik b53beb26cf sprint-bug-fixing (#12)
Co-authored-by: Karthik Sammy <10769@intelizign.com>
Reviewed-on: WizdomWaves/TedQuMobileApp#12
2024-12-06 10:55:13 +00:00
vinoth 03d0244031 Merge pull request 'url issue fixed' (#11) from update-existing-code into development
Reviewed-on: WizdomWaves/TedQuMobileApp#11
2024-12-06 10:52:04 +00:00
vinoth 732cca9f6f url issue fixed 2024-12-06 16:21:27 +05:30
vinoth 57490862ff Merge pull request 'update-existing-code' (#10) from update-existing-code into development
Reviewed-on: WizdomWaves/TedQuMobileApp#10
2024-12-04 04:21:31 +00:00
vinoth a087f1ec9d forgotpassword and calendar issue fixed 2024-12-04 09:51:07 +05:30
vinoth f3b3b6495f bug fixes artag redirect and psychometric 2024-12-04 09:48:20 +05:30
vinoth af6b82017c Merge pull request 'psychometric issue fixed' (#9) from update-existing-code into development
Reviewed-on: WizdomWaves/TedQuMobileApp#9
2024-11-22 13:02:05 +00:00
vinoth 2fb6cba26f psychometric issue fixed 2024-11-22 18:31:38 +05:30
vinoth 5c2438fb79 Merge pull request 'bug fixes psychometic' (#8) from update-existing-code into development
Reviewed-on: WizdomWaves/TedQuMobileApp#8
2024-11-22 12:38:32 +00:00
vinoth 0ec43ce473 bug fixes psychometic 2024-11-22 18:08:05 +05:30
karthik 97caa2a276 sprint-bug-fixing (#7)
Co-authored-by: Karthik Sammy <10769@intelizign.com>
Reviewed-on: WizdomWaves/TedQuMobileApp#7
2024-11-22 11:33:18 +00:00
karthik 1f40003d01 sprint-bug-fixing (#6)
Co-authored-by: Karthik Sammy <10769@intelizign.com>
Reviewed-on: WizdomWaves/TedQuMobileApp#6
2024-11-20 05:47:35 +00:00
vinoth 53f05cc65a Merge pull request 'Assessment student list bug fix' (#5) from update-existing-code into development
Reviewed-on: WizdomWaves/TedQuMobileApp#5
2024-11-15 07:00:31 +00:00
vinoth aac93c6e59 Assessment student list bug fix 2024-11-15 12:30:06 +05:30
karthik 24932b4113 sprint-bug-fixing (#4)
General pull & push

Co-authored-by: Karthik Sammy <10769@intelizign.com>
Reviewed-on: WizdomWaves/TedQuMobileApp#4
2024-11-15 04:39:46 +00:00
vinoth 2a1f8e3f01 Merge pull request 'update-existing-code' (#3) from update-existing-code into development
Reviewed-on: WizdomWaves/TedQuMobileApp#3
2024-11-14 06:05:02 +00:00
vinoth d84dee5bff ios cameraview update bug fixes 2024-11-14 11:34:10 +05:30
vinoth fa3a7a8c58 remove console log 2024-11-07 12:54:29 +05:30
Menaka c403bd514e remove usestate 2024-11-07 12:50:21 +05:30
sangeetha 0572f05819 Merge pull request 'update-existing-code' (#2) from update-existing-code into development
Reviewed-on: sangeetha/DapsUpdateMobileApp#2
2024-11-07 04:41:23 +00:00
Menaka 7c050e94d2 bug fixes and homestudy, calendar 2024-11-07 10:09:13 +05:30
Menaka e220baad72 assessment and quizz import 2024-09-03 22:55:41 +05:30
Menaka bda8fc8bf1 maxdate update student and teacher 2024-09-03 15:37:55 +05:30
Menaka 7dba6d1555 Diary response update 2024-09-03 12:53:09 +05:30
Menaka eb2f78248c Assessment intial commit 2024-08-23 11:27:41 +05:30
Menaka 3b4afdcef2 Add DOB field, Offlinepage and fix bug 2024-08-21 18:45:40 +05:30
sangeetha 2d7dcf3859 Ar tag , report psycho and document scan plugin 2024-08-13 12:34:00 +05:30
sangeetha 96af46baa7 bug fixes and gender add for student 2024-07-31 15:17:34 +05:30
sangeetha b1ccbdce13 core opencv framework added 2024-07-31 15:10:54 +05:30
sangeetha 6af1383ff4 Merge pull request 'update-existing-code' (#1) from update-existing-code into development
Reviewed-on: sangeetha/DapsUpdateMobileApp#1
2024-07-12 11:19:32 +00:00
sangeetha bb98376422 ios vector icons and swipe back, otp page ui 2024-07-12 12:26:45 +05:30
sangeetha 987cd4489f remove sign to auth fix invalid token 2024-07-02 12:52:15 +05:30
Menaka bd69442a83 Update Title and Picker dropdown 2024-06-29 11:45:31 +05:30
Menaka ac1d11c7f5 Update image upload , refresh and edit 2024-06-28 11:12:24 +05:30
sangeetha afd00ac8a3 image upload fix dropdown fix 2024-06-27 13:15:05 +05:30
sangeetha b2ccea60c5 map api key update 2024-06-19 16:56:11 +05:30
sangeetha 8b0bd8a5e9 ios firebase notifification fix 2024-06-19 14:33:45 +05:30
sangeetha 01f0f00af8 ios app and splash screen added. 2024-06-18 17:17:19 +05:30
sangeetha 74df4828ec ios build run 2024-06-18 10:47:16 +05:30
sangeetha 3f89eba73a comman fix and navigation fic and title fix 2024-06-17 22:32:00 +05:30
sangeetha 2bd7b7e959 Daps to TedQu project name repalce 2024-06-17 21:51:25 +05:30
sangeetha 231668c9bf navigation fix and school list issue fix 2024-06-11 17:31:33 +05:30
sangeetha 8f40d8ce7f async-storage and props.route.params fixes 2024-06-10 11:49:56 +05:30
sangeetha bb4cf099be add with existing src project 2024-06-07 17:57:15 +05:30
1191 changed files with 448657 additions and 2915 deletions

5
.gitignore vendored
View File

@ -64,3 +64,8 @@ yarn-error.log
# testing
/coverage
# Expo
.expo
dist/
web-build/

137
App.tsx
View File

@ -1,118 +1,27 @@
/**
* Sample React Native App
* https://github.com/facebook/react-native
*
* @format
*/
import React from 'react'
import { ActivityIndicator, View } from 'react-native'
import { Provider } from 'react-redux'
import { PersistGate } from 'redux-persist/integration/react'
import { store, persistor } from '@store' //NOSONAR
import ExpoBare from '@containers/ExpoBare/ExpoBare' //NOSONAR
import React from 'react';
import type {PropsWithChildren} from 'react';
import {
SafeAreaView,
ScrollView,
StatusBar,
StyleSheet,
Text,
useColorScheme,
View,
} from 'react-native';
export default class App extends React.Component<any, any> {
import {
Colors,
DebugInstructions,
Header,
LearnMoreLinks,
ReloadInstructions,
} from 'react-native/Libraries/NewAppScreen';
constructor(Props: any) {
super(Props)
type SectionProps = PropsWithChildren<{
title: string;
}>;
this.state = {
users: []
}
}
function Section({children, title}: SectionProps): React.JSX.Element {
const isDarkMode = useColorScheme() === 'dark';
return (
<View style={styles.sectionContainer}>
<Text
style={[
styles.sectionTitle,
{
color: isDarkMode ? Colors.white : Colors.black,
},
]}>
{title}
</Text>
<Text
style={[
styles.sectionDescription,
{
color: isDarkMode ? Colors.light : Colors.dark,
},
]}>
{children}
</Text>
</View>
);
}
function App(): React.JSX.Element {
const isDarkMode = useColorScheme() === 'dark';
const backgroundStyle = {
backgroundColor: isDarkMode ? Colors.darker : Colors.lighter,
};
return (
<SafeAreaView style={backgroundStyle}>
<StatusBar
barStyle={isDarkMode ? 'light-content' : 'dark-content'}
backgroundColor={backgroundStyle.backgroundColor}
/>
<ScrollView
contentInsetAdjustmentBehavior="automatic"
style={backgroundStyle}>
<Header />
<View
style={{
backgroundColor: isDarkMode ? Colors.black : Colors.white,
}}>
<Section title="Step One">
Edit <Text style={styles.highlight}>App.tsx</Text> to change this
screen and then come back to see your edits.
</Section>
<Section title="See Your Changes">
<ReloadInstructions />
</Section>
<Section title="Debug">
<DebugInstructions />
</Section>
<Section title="Learn More">
Read the docs to discover what to do next:
</Section>
<LearnMoreLinks />
</View>
</ScrollView>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
sectionContainer: {
marginTop: 32,
paddingHorizontal: 24,
},
sectionTitle: {
fontSize: 24,
fontWeight: '600',
},
sectionDescription: {
marginTop: 8,
fontSize: 18,
fontWeight: '400',
},
highlight: {
fontWeight: '700',
},
});
export default App;
render() {
return (
<Provider store={store}>
<PersistGate loading={<ActivityIndicator />} persistor={persistor}>
<ExpoBare />
</PersistGate>
</Provider>
)
}
}

View File

@ -1,6 +1,8 @@
apply plugin: "com.android.application"
apply plugin: "org.jetbrains.kotlin.android"
apply plugin: "com.facebook.react"
apply plugin: 'com.google.gms.google-services'
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
/**
* This is the configuration block to customize your React Native Android app.
@ -49,6 +51,11 @@ react {
//
// The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
// hermesFlags = ["-O", "-output-source-map"]
//
// Added by install-expo-modules
entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", rootDir.getAbsoluteFile().getParentFile().getAbsolutePath(), "android", "absolute"].execute(null, rootDir).text.trim())
cliFile = new File(["node", "--print", "require.resolve('@expo/cli')"].execute(null, rootDir).text.trim())
bundleCommand = "export:embed"
}
/**
@ -74,12 +81,12 @@ android {
buildToolsVersion rootProject.ext.buildToolsVersion
compileSdk rootProject.ext.compileSdkVersion
namespace "com.daps"
namespace "com.tedqu"
defaultConfig {
applicationId "com.daps"
applicationId "com.tedqu"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionCode 4
versionName "1.0"
}
signingConfigs {
@ -108,7 +115,8 @@ dependencies {
// The version of react-native is set by the React Native Gradle Plugin
implementation("com.facebook.react:react-android")
implementation("com.facebook.react:flipper-integration")
implementation files('../../node_modules/react-native-artag-module/android/libs/artag-lib.aar')
implementation files('../../node_modules/react-native-artag-module/android/libs/artag-libcon.aar')
if (hermesEnabled.toBoolean()) {
implementation("com.facebook.react:hermes-android")
} else {

View File

@ -0,0 +1,48 @@
{
"project_info": {
"project_number": "395498595576",
"project_id": "secure-unison-413505",
"storage_bucket": "secure-unison-413505.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:395498595576:android:58a62f106e5d9380d1870d",
"android_client_info": {
"package_name": "com.daps"
}
},
"oauth_client": [],
"api_key": [
{
"current_key": "AIzaSyBLJjGONhS-wxfy7iYo7qt1fdaNfx75buo"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": []
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:395498595576:android:31a5c81f3dd46052d1870d",
"android_client_info": {
"package_name": "com.tedqu"
}
},
"oauth_client": [],
"api_key": [
{
"current_key": "AIzaSyBLJjGONhS-wxfy7iYo7qt1fdaNfx75buo"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": []
}
}
}
],
"configuration_version": "1"
}

View File

@ -1,25 +1,46 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
<uses-permission android:name="android.permission.USE_BIOMETRIC"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.READ_CALENDAR"/>
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme">
<meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyA3yhFDKARfSmU95yaMMQ3SbsW1kOX_gsA"/>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize"
android:exported="true">
android:exported="true"
android:theme="@style/Theme.App.SplashScreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
</manifest>

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -1,5 +1,5 @@
package com.daps
package com.tedqu
import expo.modules.ReactActivityDelegateWrapper
import com.facebook.react.ReactActivity
import com.facebook.react.ReactActivityDelegate
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
@ -11,12 +11,12 @@ class MainActivity : ReactActivity() {
* Returns the name of the main component registered from JavaScript. This is used to schedule
* rendering of the component.
*/
override fun getMainComponentName(): String = "Daps"
override fun getMainComponentName(): String = "TedQu"
/**
* Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
* which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
*/
override fun createReactActivityDelegate(): ReactActivityDelegate =
DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)
ReactActivityDelegateWrapper(this, BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled))
}

View File

@ -1,5 +1,7 @@
package com.daps
package com.tedqu
import android.content.res.Configuration
import expo.modules.ApplicationLifecycleDispatcher
import expo.modules.ReactNativeHostWrapper
import android.app.Application
import com.facebook.react.PackageList
import com.facebook.react.ReactApplication
@ -15,7 +17,7 @@ import com.facebook.soloader.SoLoader
class MainApplication : Application(), ReactApplication {
override val reactNativeHost: ReactNativeHost =
object : DefaultReactNativeHost(this) {
ReactNativeHostWrapper(this, object : DefaultReactNativeHost(this) {
override fun getPackages(): List<ReactPackage> =
PackageList(this).packages.apply {
// Packages that cannot be autolinked yet can be added manually here, for example:
@ -28,7 +30,7 @@ class MainApplication : Application(), ReactApplication {
override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
}
})
override val reactHost: ReactHost
get() = getDefaultReactHost(this.applicationContext, reactNativeHost)
@ -41,5 +43,11 @@ class MainApplication : Application(), ReactApplication {
load()
}
ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager)
ApplicationLifecycleDispatcher.onApplicationCreate(this)
}
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig)
}
}

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<vector
android:height="108dp"
android:width="108dp"
android:viewportHeight="108"
android:viewportWidth="108"
xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z"/>
<path android:fillColor="#00000000" android:pathData="M9,0L9,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,0L19,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M29,0L29,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M39,0L39,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M49,0L49,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M59,0L59,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M69,0L69,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M79,0L79,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M89,0L89,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M99,0L99,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,9L108,9"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,19L108,19"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,29L108,29"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,39L108,39"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,49L108,49"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,59L108,59"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,69L108,69"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,79L108,79"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,89L108,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,99L108,99"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,29L89,29"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,39L89,39"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,49L89,49"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,59L89,59"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,69L89,69"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,79L89,79"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M29,19L29,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M39,19L39,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M49,19L49,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M59,19L59,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M69,19L69,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M79,19L79,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
</vector>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file was created by '@expo/configure-splash-screen' and some of it's content shouldn't be modified by hand
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/splashscreen_background"/>
</layer-list>

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Below line is handled by '@expo/configure-splash-screen' command and it's discouraged to modify it manually -->
<color name="splashscreen_background">#FFFFFF</color>
</resources>

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#FFFFFF</color>
</resources>

View File

@ -1,3 +1,3 @@
<resources>
<string name="app_name">Daps</string>
<string name="app_name">TedQu</string>
</resources>

View File

@ -5,5 +5,9 @@
<!-- Customize your theme here. -->
<item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
</style>
</resources>
<style name="Theme.App.SplashScreen" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Below line is handled by '@expo/configure-splash-screen' command and it's discouraged to modify it manually -->
<item name="android:windowBackground">@drawable/splashscreen</item>
<!-- Customize your splash screen theme here -->
</style>
</resources>

View File

@ -1,3 +1,5 @@
def REACT_NATIVE_VERSION = new File(['node', '--print',"JSON.parse(require('fs').readFileSync(require.resolve('react-native/package.json'), 'utf-8')).version"].execute(null, rootDir).text.trim())
buildscript {
ext {
buildToolsVersion = "34.0.0"
@ -10,12 +12,33 @@ buildscript {
repositories {
google()
mavenCentral()
flatDir { dirs "$rootDir/../node_modules/react-native-artag-module/android/src/main/libs" }
}
dependencies {
classpath("com.android.tools.build:gradle")
classpath 'com.google.gms:google-services:4.4.0'
classpath("com.facebook.react:react-native-gradle-plugin")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin")
}
}
apply plugin: "com.facebook.react.rootproject"
allprojects {
configurations.all {
resolutionStrategy {
force "com.facebook.react:react-native:" + REACT_NATIVE_VERSION
}
}
repositories {
// * Your other repositories here *
// * Add a new maven block after other repositories / blocks *
maven {
// expo-camera bundles a custom com.google.android:cameraview
url "$rootDir/../node_modules/expo-camera/android/maven"
}
}
// ...
}
apply plugin: "com.facebook.react.rootproject"

View File

@ -10,7 +10,7 @@
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
org.gradle.jvmargs=-Xmx4608m -XX:MaxMetaspaceSize=512m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit

View File

@ -1,4 +1,10 @@
rootProject.name = 'Daps'
rootProject.name = 'TedQu'
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app'
includeBuild('../node_modules/@react-native/gradle-plugin')
include ':expo-modules-core'
include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')
apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle")
useExpoModules()

View File

@ -1,4 +1,72 @@
{
"name": "Daps",
"displayName": "Daps"
}
"name": "TedQu",
"displayName": "TedQu",
"expo": {
"name": "TedQu",
"slug": "TedQu",
"version": "1.0.0",
"assetBundlePatterns": [
"**/*"
],
"icon": "./assets/TedQu-logo.png",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"userInterfaceStyle": "automatic",
"ios": {
"userInterfaceStyle": "automatic",
"supportsTablet": true,
"bundleIdentifier": "com.tedqu",
"buildNumber": "1",
"infoPlist": {},
"UISupportedInterfaceOrientations": [
"UIInterfaceOrientationLandscapeRight",
"UIInterfaceOrientationLandscapeLeft",
"UIInterfaceOrientationPortrait"
],
"config": {
"googleSignIn": {
"reservedClientId": "com.googleusercontent.apps.471149260378-fuhroembdcb02953uoc2spuua282lnqo"
}
},
"googleServicesFile": "./ios/TedQu/GoogleService-Info.plist",
"entitlements": {
"com.apple.developer.networking.wifi-info": "true"
}
},
"android": {
"userInterfaceStyle": "automatic",
"package": "com.tedqu",
"versionCode": 1,
"googleServicesFile": "./android/app/google-services.json",
"config": {
"googleMaps": {
"apiKey": "AIzaSyA3yhFDKARfSmU95yaMMQ3SbsW1kOX_gsA"
}
}
},
"web": {
"config": {
"firebase": {
"appId": "1:471149260378:web:845b7d9fcd34e8d231f263",
"apiKey": "AIzaSyDQeueg89r_nM6Jj828323jioF9dw7M3Pg",
"measurementId": "G-0LSMY5C97W",
"projectId": "expobare-a5553",
"messagingSenderId": "471149260378"
}
}
},
"extra": {
"APP_NAME": "Expo React Native",
"ENVMODE": "Development",
"BASE_URL": "https://dev.wizdomwaves.in",
"AUTH_BASE_URL": "https://dev-auth.wizdomwaves.in/auth",
"APP_BASE_URL": "https://dev-api.wizdomwaves.in/api",
"LICENSE_BASE_URL": "http://admin.wizdomedge.in",
"APP_VERSION": "2.0",
"APP_DATE" : "27-03-2023"
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

BIN
assets/DAPS_official.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
assets/TedQu-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
assets/TedQu-white.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
assets/TedQuLogo2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

BIN
assets/artag.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
assets/avatar.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
assets/banner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 KiB

BIN
assets/dapsLogo2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
assets/edu_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
assets/graduate2_1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
assets/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
assets/left-right-brain.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
assets/profile.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 KiB

BIN
assets/school_pin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
assets/splash.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
assets/splashdaps.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

BIN
assets/student.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
assets/target-arrow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

View File

@ -1,3 +1,44 @@
module.exports = {
presets: ['module:@react-native/babel-preset'],
};
module.exports = function (api) {
api.cache(true);
return {
presets: ['module:@react-native/babel-preset'],
plugins: [
[
'module-resolver',
{
root: ['.'],
extensions: [
'.ios.ts',
'.android.ts',
'.ts',
'.ios.tsx',
'.android.tsx',
'.tsx',
'.jsx',
'.js',
'.json',
],
alias: {
'@config': './src/config',
'@constants': './src/constants',
'@theme': './src/theme',
'@layout': './src/layout',
'@components': './src/components',
'@screens': './src/screens',
'@assets': './src/assets',
'@utils': './src/utils',
'@navigation': './src/navigation',
'@actions': './src/actions',
'@reducers': './src/reducers',
'@store': './src/store',
'@sagas': './src/sagas',
'@containers': './src/containers',
'@models': './src/models',
'@api': './src/api'
},
},
],
"react-native-reanimated/plugin",
],
};
};

2
hosts Normal file
View File

@ -0,0 +1,2 @@
127.0.0.1 localhost
::1 ip6-localhost

22
ios/ArtagViewManager.m Normal file
View File

@ -0,0 +1,22 @@
//
// ArtagView.m
// TedQu
//
// Created by RSP on 26/07/24.
//
#import <Foundation/Foundation.h>
#import <React/RCTUtils.h>
#import <React/RCTViewManager.h>
@interface RCT_EXTERN_MODULE(ArtagViewManager, RCTViewManager)
RCT_EXPORT_VIEW_PROPERTY(intValue, NSNumber)
RCT_EXPORT_VIEW_PROPERTY(stringValue, NSString)
RCT_EXPORT_VIEW_PROPERTY(type, NSNumber)
RCT_EXPORT_VIEW_PROPERTY(cards, NSArray)
RCT_EXPORT_VIEW_PROPERTY(classes, NSDictionary)
RCT_EXPORT_VIEW_PROPERTY(options, NSDictionary)
RCT_EXPORT_VIEW_PROPERTY(onChange, RCTBubblingEventBlock)
@end

View File

@ -0,0 +1,15 @@
import Foundation
import React
import UIKit
@objc(ArtagViewManager)
class ArtagViewManager: RCTViewManager {
override func view() -> UIView! {
return CameraView()
}
override static func requiresMainQueueSetup() -> Bool {
return true;
}
}

806
ios/CameraView.swift Normal file
View File

@ -0,0 +1,806 @@
import UIKit
import AVFoundation
import React
@objc(CameraView)
class CameraView: UIView, AVCaptureVideoDataOutputSampleBufferDelegate {
var captureSession: AVCaptureSession!
var videoOutput: AVCaptureVideoDataOutput?
var videoPreviewLayer: AVCaptureVideoPreviewLayer?
var overlayImageView: UIImageView!
var titleLabel: UILabel!
var bottomLeftLabel: UILabel!
var cardData:NSArray!
var CARD_SCANNING_TYPE:Int!
var classData:NSDictionary?
var optionData:NSDictionary!
//var cardResult:NSDictionary!
var cardResult: [[String: Any]] = []
var correctAnswer:NSString! = ""
var scanCardButton1: UIButton!
var saveCardButton:UIButton!
var startScan:Bool = false
var attendanceTotalLabel: UILabel!
var attendanceTotalCount: UILabel!
var standardLabel: UILabel!
var standardName: UILabel!
private var timer: Timer?
private let timeLabel: UILabel = {
let label = UILabel()
//label.backgroundColor = UIColor.white.withAlphaComponent(0.7)
label.textColor = .white
label.textAlignment = .center
label.font = UIFont.systemFont(ofSize: 16, weight: .bold)
return label
}()
var answers = [
["is_correct": false, "option": "A"],
["is_correct": false, "option": "B"],
["is_correct": false, "option": "C"],
["is_correct": false, "option": "D"]
]
@objc var title: String? {
didSet {
titleLabel.text = title
}
}
@objc var type: NSNumber? {
didSet {
if let type = type {
CARD_SCANNING_TYPE = type.intValue
if (CARD_SCANNING_TYPE == 1){
createCorrectAnsLayout(context: self, scanCardButton:scanCardButton1)
}
}
}
}
@objc var cards: NSArray? {
didSet {
if let cards = cards {
cardData = cards
addCardsToTopRight(cards)
let cardResultCount = cardResult.count
let cardsCount = cards.count
attendanceTotalCount.text = "\(cardResultCount) / \(cardsCount)"
}
}
}
@objc var classes: NSDictionary? {
didSet {
if let classes = classes {
classData = classes
if let className = classes["class_name"] as? String {
standardName.text = className
}
}
}
}
@objc var options: NSDictionary? {
didSet {
if let options = options {
optionData = options
if let standard_Label = options["standardLabel"] as? String {
standardLabel.text = standard_Label
}
if let attendance_label = options["attendanceLabel"] as? String {
attendanceTotalLabel.text = attendance_label
}
}
}
}
@objc func setIntValue(_ val: NSNumber) {
}
@objc var onChange: RCTBubblingEventBlock?
override init(frame: CGRect) {
super.init(frame: frame)
setupCaptureSession()
setupOverlayImageView()
setupTitleLabel()
setupTimeLabel()
setupOrientationChangeObserver()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setupCaptureSession()
setupOverlayImageView()
setupTitleLabel()
setupTimeLabel()
setupOrientationChangeObserver()
}
func setupOrientationChangeObserver() {
UIDevice.current.setValue(UIInterfaceOrientation.landscapeLeft.rawValue, forKey: "orientation")
UIViewController.attemptRotationToDeviceOrientation()
// NotificationCenter.default.addObserver(self, selector: #selector(orientationChanged), name: UIDevice.orientationDidChangeNotification, object: nil)
}
@objc func orientationChanged() {
let orientation = UIDevice.current.orientation
switch orientation {
case .landscapeLeft, .landscapeRight:
adjustImageViewForLandscape()
default:
break
}
}
func adjustImageViewForLandscape() {
overlayImageView.frame = self.bounds
overlayImageView.setNeedsLayout()
}
var isAuthorized: Bool {
get async {
let status = AVCaptureDevice.authorizationStatus(for: .video)
// Determine if the user previously authorized camera access.
var isAuthorized = status == .authorized
// If the system hasn't determined the user's authorization status,
// explicitly prompt them for approval.
if status == .notDetermined {
isAuthorized = await AVCaptureDevice.requestAccess(for: .video)
}
return isAuthorized
}
}
private func setupCaptureSession() {
captureSession = AVCaptureSession()
guard let captureSession = captureSession else { return }
guard let videoCaptureDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) else { return }
let videoInput: AVCaptureDeviceInput
do {
videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)
} catch {
print("Error creating video input: \(error)")
return
}
if captureSession.canAddInput(videoInput) {
captureSession.addInput(videoInput)
} else {
print("Could not add video input to capture session")
return
}
videoOutput = AVCaptureVideoDataOutput()
guard let videoOutput = videoOutput else { return }
videoOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
videoOutput.alwaysDiscardsLateVideoFrames = true
videoOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA]
if captureSession.canAddOutput(videoOutput) {
captureSession.addOutput(videoOutput)
} else {
print("Could not add video output to capture session")
return
}
videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
guard let videoPreviewLayer = videoPreviewLayer else { return }
videoPreviewLayer.videoGravity = .resizeAspectFill
videoPreviewLayer.frame = self.layer.bounds
self.layer.addSublayer(videoPreviewLayer)
captureSession.startRunning()
}
override func layoutSubviews() {
super.layoutSubviews()
videoPreviewLayer?.frame = self.bounds
}
private func setupTimeLabel() {
timeLabel.frame = CGRect(x: 10, y: 10, width: 100, height: 30)
self.addSubview(timeLabel)
bringSubviewToFront(timeLabel)
timeLabel.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
timeLabel.topAnchor.constraint(equalTo: self.topAnchor, constant: 20),
timeLabel.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 20)
])
// Update the time every second
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [weak self] _ in
self?.updateTimeLabel()
}
}
private func updateTimeLabel() {
let formatter = DateFormatter()
formatter.dateFormat = "h:mm:ss a" // 12:11:11 PM format
let currentTime = formatter.string(from: Date())
timeLabel.text = currentTime
}
deinit {
captureSession.stopRunning()
timer?.invalidate()
}
private func setupTitleLabel() {
let attendanceLayout = createAttendanceLayout()
self.addSubview(attendanceLayout)
bringSubviewToFront(attendanceLayout)
let standardLayout = createStandardLayout(relativeTo: attendanceLayout)
self.addSubview(standardLayout)
bringSubviewToFront(standardLayout)
scanCardButton1 = UIButton(type: .system)
scanCardButton1.setTitleColor(.gray, for: .normal)
scanCardButton1.translatesAutoresizingMaskIntoConstraints = false
scanCardButton1.addTarget(self, action: #selector(scanCard), for: .touchUpInside)
self.addSubview(scanCardButton1)
bringSubviewToFront(scanCardButton1)
let buttonSize: CGFloat = 60
NSLayoutConstraint.activate([
scanCardButton1.widthAnchor.constraint(equalToConstant: buttonSize),
scanCardButton1.heightAnchor.constraint(equalToConstant: buttonSize),
scanCardButton1.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -10),
scanCardButton1.centerXAnchor.constraint(equalTo: self.centerXAnchor)
])
scanCardButton1.backgroundColor = .white
scanCardButton1.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
let image = UIImage(systemName: "camera")?.withRenderingMode(.alwaysTemplate)
scanCardButton1.setImage(image, for: .normal)
scanCardButton1.tintColor = .gray
// Making the button round and setting border color to red
scanCardButton1.layer.cornerRadius = buttonSize / 2
scanCardButton1.layer.borderWidth = 3
scanCardButton1.layer.borderColor = UIColor.red.cgColor
scanCardButton1.imageEdgeInsets = UIEdgeInsets(top: -10, left: -10, bottom: -10, right: -10)
saveCardButton = UIButton(type: .system)
//saveCardButton.setTitle("Save", for: .normal)
saveCardButton.setTitleColor(.blue, for: .normal)
// Set the layout constraints
saveCardButton.translatesAutoresizingMaskIntoConstraints = false
saveCardButton.addTarget(self, action: #selector(saveCard), for: .touchUpInside)
self.addSubview(saveCardButton)
bringSubviewToFront(saveCardButton)
saveCardButton.frame = CGRect(x: 100, y: 100, width: 200, height: 50)
//saveCardButton.contentEdgeInsets = UIEdgeInsets(top: 40, left: 40, bottom: 40, right: 40)
let saveimage = UIImage(systemName: "doc")?.withRenderingMode(.alwaysTemplate)
saveCardButton.setImage(saveimage, for: .normal)
saveCardButton.tintColor = .gray
let savebuttonSize: CGFloat = 50
NSLayoutConstraint.activate([
saveCardButton.widthAnchor.constraint(equalToConstant: savebuttonSize),
saveCardButton.heightAnchor.constraint(equalToConstant: savebuttonSize),
saveCardButton.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -10),
saveCardButton.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20)
])
//
saveCardButton.backgroundColor = .white
saveCardButton.contentEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
saveCardButton.layer.cornerRadius = savebuttonSize / 2
saveCardButton.layer.borderWidth = 2
saveCardButton.layer.borderColor = UIColor.red.cgColor
attendanceTotalCount = createLabel(withText: "0/6")
attendanceTotalLabel = createLabel(withText: "Instant Feedback")
standardName = createLabel(withText: "XII A")
standardLabel = createLabel(withText: "Standard")
// Create horizontal stack views for each row
let row1StackView = UIStackView(arrangedSubviews: [attendanceTotalCount, standardName])
row1StackView.axis = .horizontal
row1StackView.distribution = .fillEqually
row1StackView.spacing = 1
let row2StackView = UIStackView(arrangedSubviews: [attendanceTotalLabel, standardLabel])
row2StackView.axis = .horizontal
row2StackView.distribution = .fillEqually
row2StackView.spacing = 1
// Create a vertical stack view to hold the two rows
let mainStackView = UIStackView(arrangedSubviews: [row1StackView, row2StackView])
mainStackView.axis = .vertical
mainStackView.distribution = .fillEqually
mainStackView.spacing = 1
// Add the main stack view to the view
self.addSubview(mainStackView)
bringSubviewToFront(mainStackView)
mainStackView.translatesAutoresizingMaskIntoConstraints = false
// Set constraints for the main stack view
NSLayoutConstraint.activate([
mainStackView.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 20),
mainStackView.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -20),
mainStackView.widthAnchor.constraint(equalToConstant: 200), // Adjust as needed
mainStackView.heightAnchor.constraint(equalToConstant: 50) // Adjust as needed
])
}
@objc func scanCard() {
if (startScan) {
startScan = false;
scanCardButton1.setImage(UIImage(systemName: "camera"), for: .normal)
}else{
startScan = true;
scanCardButton1.setImage(UIImage(systemName: "pause.fill"), for: .normal)
}
}
@objc func saveCard() {
if(startScan){
if let onChange = onChange {
var dictionary: [String: Any] = [:]
if let classData = classData as? [String: Any],
let academicYear = classData["academic_year"] as? Int {
dictionary["academic_year"] = academicYear
} else {
print("Failed to extract academic year")
}
if let academic_year = classData?["academic_year"] as? String {
dictionary["academic_year"] = academic_year
}
if let class_id = classData?["class_id"] as? String {
dictionary["class_id"] = class_id
}
if let subject_id = classData?["subject_id"] as? String {
dictionary["subject_id"] = subject_id
}
dictionary["status"] = true
if (CARD_SCANNING_TYPE == 0) {
dictionary["attendance_details"] = cardResult
}
else if (CARD_SCANNING_TYPE == 1) {
if let name = classData?["name"] as? String {
dictionary["name"] = name
}
if let topics = classData?["topics"] as? String {
dictionary["topics"] = topics
}
if let subject_id = classData?["subject_id"] as? String {
dictionary["subject_id"] = subject_id
}
dictionary["correct_answer"] = correctAnswer
dictionary["answers"] = answers
dictionary["feedback_result"] = cardResult
}
else if (CARD_SCANNING_TYPE == 2) {
dictionary["quiz_result"] = cardResult
}
// onChange(["attendance_details": data, "academic_year": academicYear, "class_id": "35", "status": true, "subject_id": "5"])
if CARD_SCANNING_TYPE == 1 && (correctAnswer == nil || correctAnswer.length == 0){
showToast(message: "Please choose the correct answer.", font: .systemFont(ofSize: 12.0))
}else{
onChange(dictionary)
startScan = false;
scanCardButton1.setImage(UIImage(systemName: "camera"), for: .normal)
captureSession.stopRunning()
}
}
}
}
func showToast(message : String, font: UIFont) {
let toastLabel = UILabel(frame: CGRect(x: self.frame.size.width/2 - 75, y: self.frame.size.height-100, width: 200, height: 35))
toastLabel.backgroundColor = UIColor.black.withAlphaComponent(0.6)
toastLabel.textColor = UIColor.white
toastLabel.font = font
toastLabel.textAlignment = .center;
toastLabel.text = message
toastLabel.alpha = 1.0
toastLabel.layer.cornerRadius = 10;
toastLabel.clipsToBounds = true
self.addSubview(toastLabel)
bringSubviewToFront(toastLabel)
UIView.animate(withDuration: 4.0, delay: 0.1, options: .curveEaseOut, animations: {
toastLabel.alpha = 0.0
}, completion: {(isCompleted) in
toastLabel.removeFromSuperview()
})
}
func createCorrectAnsLayout(context: UIView, scanCardButton: UIButton) -> UIView {
let correctAnsLayout = UIView()
correctAnsLayout.translatesAutoresizingMaskIntoConstraints = false
context.addSubview(correctAnsLayout)
NSLayoutConstraint.activate([
correctAnsLayout.bottomAnchor.constraint(equalTo: context.bottomAnchor, constant: -10),
correctAnsLayout.leadingAnchor.constraint(equalTo: scanCardButton.trailingAnchor, constant: 20),
correctAnsLayout.trailingAnchor.constraint(equalTo: saveCardButton.leadingAnchor, constant: -10)
])
let buttonTitles = ["A", "B", "C", "D"]
var previousButton: UIButton?
for (index, title) in buttonTitles.enumerated() {
let button = UIButton(type: .system)
button.setTitle(title, for: .normal)
button.backgroundColor = .gray
button.setTitleColor(.white, for: .normal)
button.titleLabel?.font = UIFont.systemFont(ofSize: 20) // Increase font size
button.layer.cornerRadius = 20 // Make the button rounded
button.layer.masksToBounds = true
button.translatesAutoresizingMaskIntoConstraints = false
button.tag = 1000 + index
button.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside)
correctAnsLayout.addSubview(button)
NSLayoutConstraint.activate([
button.topAnchor.constraint(equalTo: correctAnsLayout.topAnchor),
button.bottomAnchor.constraint(equalTo: correctAnsLayout.bottomAnchor),
button.heightAnchor.constraint(equalToConstant: 40),
button.widthAnchor.constraint(equalToConstant: 40)
])
if let previousButton = previousButton {
NSLayoutConstraint.activate([
button.leadingAnchor.constraint(equalTo: previousButton.trailingAnchor, constant: 10),
button.widthAnchor.constraint(equalTo: previousButton.widthAnchor)
])
} else {
NSLayoutConstraint.activate([
button.leadingAnchor.constraint(equalTo: correctAnsLayout.leadingAnchor)
])
}
previousButton = button
}
return correctAnsLayout
}
@objc func buttonTapped(_ sender: UIButton) {
// Update the answers array
let tag = sender.tag - 1000
for index in 0..<answers.count {
answers[index]["is_correct"] = (index == tag)
}
let selectedOption = answers[tag]["option"] as! String
correctAnswer = selectedOption as NSString
// Update the button colors
for button in sender.superview!.subviews where button is UIButton {
(button as! UIButton).backgroundColor = .gray
}
sender.backgroundColor = .green
}
func addCardsToTopRight(_ CARD_LISTS: NSArray) {
let containerView = UIView()
containerView.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(containerView)
bringSubviewToFront(containerView)
let tableLayout = createCardsDesignTableLayout(context: containerView)
containerView.addSubview(tableLayout)
NSLayoutConstraint.activate([
containerView.topAnchor.constraint(equalTo: self.topAnchor, constant: 20),
containerView.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20),
tableLayout.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
tableLayout.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
tableLayout.topAnchor.constraint(equalTo: containerView.topAnchor),
tableLayout.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
])
var tableRow = UIStackView()
tableRow.axis = .horizontal
tableRow.spacing = 5
//tableRow.alignment = .leading
tableRow.alignment = .center // Centers the buttons vertically
tableRow.distribution = .equalSpacing // Ensures equal spacing between buttons
for (index, card) in CARD_LISTS.enumerated() {
guard let cardDict = card as? [String: Any] else { continue }
if index % 5 == 0 {
tableRow = UIStackView()
tableRow.axis = .horizontal
tableRow.spacing = 5
tableRow.alignment = .center // Centers the buttons vertically
tableRow.distribution = .equalSpacing // Ensures equal spacing between buttons
tableRow.translatesAutoresizingMaskIntoConstraints = false
tableRow.isLayoutMarginsRelativeArrangement = false
tableLayout.addArrangedSubview(tableRow)
}
let cardButton = UIButton(type: .system)
cardButton.backgroundColor = UIColor.darkGray
if let cardId = cardDict["card_id"] as? Int {
cardButton.setTitle("\(cardId)", for: .normal)
cardButton.tag = cardId
} else if let cardId = cardDict["card_id"] as? String, let cardIdInt = Int(cardId) {
cardButton.setTitle(cardId, for: .normal)
cardButton.tag = cardIdInt
if let is_attendance_taken = self.classData?["is_attendance_taken"], is_attendance_taken as! Bool {
if let is_present = cardDict["is_present"] as? Bool, !is_present {
cardButton.backgroundColor = .red
}
}
} else {
print("Could not cast card_id to Int for card: \(cardDict)")
}
cardButton.setTitleColor(.white, for: .normal)
cardButton.titleLabel?.font = UIFont.boldSystemFont(ofSize: 12)
cardButton.layer.cornerRadius = 12
cardButton.contentEdgeInsets = .zero
NSLayoutConstraint.activate([
cardButton.heightAnchor.constraint(equalToConstant: 24),
cardButton.widthAnchor.constraint(equalToConstant: 24)
])
tableRow.addArrangedSubview(cardButton)
}
}
func createCardLabel(withText text: String) -> UILabel {
let label = UILabel()
label.text = text
label.textColor = .white
label.textAlignment = .center
label.font = UIFont(name: "OpenSans-Bold", size: 17)
label.minimumScaleFactor = 0.5
label.adjustsFontSizeToFitWidth = true
label.backgroundColor = .systemBlue
label.layer.cornerRadius = 10
label.layer.masksToBounds = true
label.translatesAutoresizingMaskIntoConstraints = false
label.heightAnchor.constraint(equalToConstant: 55).isActive = true
label.widthAnchor.constraint(equalToConstant: 55).isActive = true
return label
}
func createCardsDesignTableLayout(context: UIView) -> UIStackView {
let cardDesign = UIStackView()
cardDesign.axis = .vertical
cardDesign.spacing = 2
cardDesign.alignment = .leading
cardDesign.translatesAutoresizingMaskIntoConstraints = false
context.addSubview(cardDesign)
bringSubviewToFront(cardDesign)
return cardDesign
}
func createLabel(withText text: String) -> UILabel {
let label = UILabel()
label.text = text
label.textColor = .white
label.textAlignment = .center
label.font = UIFont.systemFont(ofSize: 11)
return label
}
func createAttendanceLayout() -> UIView {
let attendanceLayout = UIView()
attendanceLayout.translatesAutoresizingMaskIntoConstraints = false
attendanceLayout.backgroundColor = .red // Just for visibility, remove or set your color
attendanceLayout.accessibilityIdentifier = "attendance_layout_id"
return attendanceLayout
}
func createStandardLayout(relativeTo attendanceLayout: UIView) -> UIView {
let standardLayout = UIView()
standardLayout.translatesAutoresizingMaskIntoConstraints = false
standardLayout.backgroundColor = .blue // Just for visibility, remove or set your color
standardLayout.accessibilityIdentifier = "standard_layout_id"
return standardLayout
}
@objc var stringValue: String = "" {
didSet {
// Update the view with the new string value
}
}
func hasValue(cardlists: [Any], key: String, value: Int) -> Bool {
for cardD in cardData {
guard let cardDict = cardD as? [String: Any] else { continue }
if let cardIdString = cardDict[key] as? String, let cardIdInt = Int(cardIdString) {
if cardIdInt == value {
return true
}
}
}
return false
}
func hasStudentPresent(cardlists: [Any], key: String, value: Int) -> Bool {
if let is_attendance_taken = self.classData?["is_attendance_taken"], is_attendance_taken as! Bool {
for cardD in cardData {
guard let cardDict = cardD as? [String: Any] else { continue }
if let cardIdString = cardDict[key] as? String, let cardIdInt = Int(cardIdString) {
if cardIdInt == value {
if let is_present = cardDict["is_present"] as? Bool, !is_present {
return false
}
}
}
}
}
return true
}
private func storeCardResult(_ resultsArray : [[String: Any]]){
for marker in resultsArray {
let id = marker["card_id"] as! Int
let answer = marker["answer"] as! NSString
let cardExists = hasValue(cardlists: cardData as! [Any], key: "card_id", value: id)
if (cardExists) {
if (CARD_SCANNING_TYPE == 0) {
if let index = self.cardResult.firstIndex(where: { $0["card_id"] as! Int == id }) {
self.cardResult[index]["answer"] = answer
} else {
self.cardResult.append(["answer": answer, "attendance": 1, "card_id": id])
}
}else if(CARD_SCANNING_TYPE == 1){
let studentPresent = hasStudentPresent(cardlists: cardData as! [Any], key: "card_id", value: id)
if(studentPresent){
if let index = self.cardResult.firstIndex(where: { $0["card_id"] as! Int == id }) {
self.cardResult[index]["answer"] = answer
} else {
self.cardResult.append(["answer": answer, "attendance": 1, "card_id": id])
}
}
}else if(CARD_SCANNING_TYPE == 2){
var serial = 0
if let serial_no = classData?["serial_no"] as? Int {
serial = serial_no
}
if let index = self.cardResult.firstIndex(where: { $0["card_id"] as! Int == id }) {
self.cardResult[index]["answer"] = answer
} else {
self.cardResult.append(["answer": answer, "serial_no": serial, "card_id": id])
}
}
}
}
}
private func setupOverlayImageView() {
overlayImageView = UIImageView()
overlayImageView.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(overlayImageView)
bringSubviewToFront(overlayImageView)
NSLayoutConstraint.activate([
overlayImageView.leadingAnchor.constraint(equalTo: self.leadingAnchor),
overlayImageView.trailingAnchor.constraint(equalTo: self.trailingAnchor),
overlayImageView.topAnchor.constraint(equalTo: self.topAnchor),
overlayImageView.bottomAnchor.constraint(equalTo: self.bottomAnchor)
])
}
func updateOverlayImage(image: UIImage) {
overlayImageView.image = image
bringSubviewToFront(overlayImageView)
}
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
let ciImage = CIImage(cvPixelBuffer: imageBuffer)
let context = CIContext()
guard let cgImage = context.createCGImage(ciImage, from: ciImage.extent) else { return }
let uiImage = UIImage(cgImage: cgImage)
DispatchQueue.global(qos: .userInitiated).async {
let result = Wrapper.drawDetectedMarkers(on: uiImage, startScan: self.startScan, card_SCANNING_TYPE:Int32(self.CARD_SCANNING_TYPE)) as NSDictionary
let processedImage = result["image"] as! UIImage
let markerIds = result["markerIds"] as! [Int]
let resultsArray = result["resultsArray"] as! [[String: Any]]
DispatchQueue.main.async {
self.overlayImageView.image = processedImage
for markerId in markerIds {
if let cardButton = self.viewWithTag(markerId) as? UIButton {
if cardButton.backgroundColor != UIColor.red {
cardButton.backgroundColor = .green
}
}
}
self.storeCardResult(resultsArray)
let cardResultCount = self.cardResult.count
let cardsCount = self.cardData.count
self.attendanceTotalCount.text = "\(cardResultCount) / \(cardsCount)"
}
}
}
}

View File

@ -1,684 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
00E356F31AD99517003FC87E /* DapsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* DapsTests.m */; };
0C80B921A6F3F58F76C31292 /* libPods-Daps.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-Daps.a */; };
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
7699B88040F8A987B510C191 /* libPods-Daps-DapsTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-Daps-DapsTests.a */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
remoteInfo = Daps;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
00E356EE1AD99517003FC87E /* DapsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DapsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
00E356F21AD99517003FC87E /* DapsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DapsTests.m; sourceTree = "<group>"; };
13B07F961A680F5B00A75B9A /* Daps.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Daps.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Daps/AppDelegate.h; sourceTree = "<group>"; };
13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = Daps/AppDelegate.mm; sourceTree = "<group>"; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Daps/Images.xcassets; sourceTree = "<group>"; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Daps/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Daps/main.m; sourceTree = "<group>"; };
19F6CBCC0A4E27FBF8BF4A61 /* libPods-Daps-DapsTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Daps-DapsTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
3B4392A12AC88292D35C810B /* Pods-Daps.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Daps.debug.xcconfig"; path = "Target Support Files/Pods-Daps/Pods-Daps.debug.xcconfig"; sourceTree = "<group>"; };
5709B34CF0A7D63546082F79 /* Pods-Daps.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Daps.release.xcconfig"; path = "Target Support Files/Pods-Daps/Pods-Daps.release.xcconfig"; sourceTree = "<group>"; };
5B7EB9410499542E8C5724F5 /* Pods-Daps-DapsTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Daps-DapsTests.debug.xcconfig"; path = "Target Support Files/Pods-Daps-DapsTests/Pods-Daps-DapsTests.debug.xcconfig"; sourceTree = "<group>"; };
5DCACB8F33CDC322A6C60F78 /* libPods-Daps.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Daps.a"; sourceTree = BUILT_PRODUCTS_DIR; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = Daps/LaunchScreen.storyboard; sourceTree = "<group>"; };
89C6BE57DB24E9ADA2F236DE /* Pods-Daps-DapsTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Daps-DapsTests.release.xcconfig"; path = "Target Support Files/Pods-Daps-DapsTests/Pods-Daps-DapsTests.release.xcconfig"; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
00E356EB1AD99517003FC87E /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
7699B88040F8A987B510C191 /* libPods-Daps-DapsTests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
0C80B921A6F3F58F76C31292 /* libPods-Daps.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
00E356EF1AD99517003FC87E /* DapsTests */ = {
isa = PBXGroup;
children = (
00E356F21AD99517003FC87E /* DapsTests.m */,
00E356F01AD99517003FC87E /* Supporting Files */,
);
path = DapsTests;
sourceTree = "<group>";
};
00E356F01AD99517003FC87E /* Supporting Files */ = {
isa = PBXGroup;
children = (
00E356F11AD99517003FC87E /* Info.plist */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
13B07FAE1A68108700A75B9A /* Daps */ = {
isa = PBXGroup;
children = (
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
13B07FB01A68108700A75B9A /* AppDelegate.mm */,
13B07FB51A68108700A75B9A /* Images.xcassets */,
13B07FB61A68108700A75B9A /* Info.plist */,
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
13B07FB71A68108700A75B9A /* main.m */,
);
name = Daps;
sourceTree = "<group>";
};
2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
isa = PBXGroup;
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
5DCACB8F33CDC322A6C60F78 /* libPods-Daps.a */,
19F6CBCC0A4E27FBF8BF4A61 /* libPods-Daps-DapsTests.a */,
);
name = Frameworks;
sourceTree = "<group>";
};
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
isa = PBXGroup;
children = (
);
name = Libraries;
sourceTree = "<group>";
};
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
13B07FAE1A68108700A75B9A /* Daps */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
00E356EF1AD99517003FC87E /* DapsTests */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
BBD78D7AC51CEA395F1C20DB /* Pods */,
);
indentWidth = 2;
sourceTree = "<group>";
tabWidth = 2;
usesTabs = 0;
};
83CBBA001A601CBA00E9B192 /* Products */ = {
isa = PBXGroup;
children = (
13B07F961A680F5B00A75B9A /* Daps.app */,
00E356EE1AD99517003FC87E /* DapsTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
BBD78D7AC51CEA395F1C20DB /* Pods */ = {
isa = PBXGroup;
children = (
3B4392A12AC88292D35C810B /* Pods-Daps.debug.xcconfig */,
5709B34CF0A7D63546082F79 /* Pods-Daps.release.xcconfig */,
5B7EB9410499542E8C5724F5 /* Pods-Daps-DapsTests.debug.xcconfig */,
89C6BE57DB24E9ADA2F236DE /* Pods-Daps-DapsTests.release.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
00E356ED1AD99517003FC87E /* DapsTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "DapsTests" */;
buildPhases = (
A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,
00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */,
C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */,
F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
00E356F51AD99517003FC87E /* PBXTargetDependency */,
);
name = DapsTests;
productName = DapsTests;
productReference = 00E356EE1AD99517003FC87E /* DapsTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
13B07F861A680F5B00A75B9A /* Daps */ = {
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Daps" */;
buildPhases = (
C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */,
E235C05ADACE081382539298 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
);
name = Daps;
productName = Daps;
productReference = 13B07F961A680F5B00A75B9A /* Daps.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
83CBB9F71A601CBA00E9B192 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1210;
TargetAttributes = {
00E356ED1AD99517003FC87E = {
CreatedOnToolsVersion = 6.2;
TestTargetID = 13B07F861A680F5B00A75B9A;
};
13B07F861A680F5B00A75B9A = {
LastSwiftMigration = 1120;
};
};
};
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Daps" */;
compatibilityVersion = "Xcode 12.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 83CBB9F61A601CBA00E9B192;
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
13B07F861A680F5B00A75B9A /* Daps */,
00E356ED1AD99517003FC87E /* DapsTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
00E356EC1AD99517003FC87E /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F8E1A680F5B00A75B9A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"$(SRCROOT)/.xcode.env.local",
"$(SRCROOT)/.xcode.env",
);
name = "Bundle React Native code and images";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
};
00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Daps/Pods-Daps-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Daps/Pods-Daps-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Daps/Pods-Daps-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Daps-DapsTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
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";
showEnvVarsInLog = 0;
};
C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Daps-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
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";
showEnvVarsInLog = 0;
};
C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Daps-DapsTests/Pods-Daps-DapsTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Daps-DapsTests/Pods-Daps-DapsTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Daps-DapsTests/Pods-Daps-DapsTests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Daps/Pods-Daps-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Daps/Pods-Daps-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Daps/Pods-Daps-resources.sh\"\n";
showEnvVarsInLog = 0;
};
F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Daps-DapsTests/Pods-Daps-DapsTests-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Daps-DapsTests/Pods-Daps-DapsTests-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Daps-DapsTests/Pods-Daps-DapsTests-resources.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
00E356EA1AD99517003FC87E /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
00E356F31AD99517003FC87E /* DapsTests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F871A680F5B00A75B9A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
13B07FC11A68108700A75B9A /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 13B07F861A680F5B00A75B9A /* Daps */;
targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-Daps-DapsTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
INFOPLIST_FILE = DapsTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
"$(inherited)",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Daps.app/Daps";
};
name = Debug;
};
00E356F71AD99517003FC87E /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-Daps-DapsTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;
INFOPLIST_FILE = DapsTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
"$(inherited)",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Daps.app/Daps";
};
name = Release;
};
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-Daps.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Daps/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = Daps;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-Daps.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1;
INFOPLIST_FILE = Daps/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = Daps;
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
83CBBA201A601CBA00E9B192 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
"$(inherited)",
);
LIBRARY_SEARCH_PATHS = (
"\"$(SDKROOT)/usr/lib/swift\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
OTHER_CPLUSPLUSFLAGS = (
"$(OTHER_CFLAGS)",
"-DFOLLY_NO_CONFIG",
"-DFOLLY_MOBILE=1",
"-DFOLLY_USE_LIBCPP=1",
"-DFOLLY_CFG_NO_COROUTINES=1",
);
SDKROOT = iphoneos;
};
name = Debug;
};
83CBBA211A601CBA00E9B192 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
"$(inherited)",
);
LIBRARY_SEARCH_PATHS = (
"\"$(SDKROOT)/usr/lib/swift\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = NO;
OTHER_CPLUSPLUSFLAGS = (
"$(OTHER_CFLAGS)",
"-DFOLLY_NO_CONFIG",
"-DFOLLY_MOBILE=1",
"-DFOLLY_USE_LIBCPP=1",
"-DFOLLY_CFG_NO_COROUTINES=1",
);
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "DapsTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
00E356F61AD99517003FC87E /* Debug */,
00E356F71AD99517003FC87E /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Daps" */ = {
isa = XCConfigurationList;
buildConfigurations = (
13B07F941A680F5B00A75B9A /* Debug */,
13B07F951A680F5B00A75B9A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Daps" */ = {
isa = XCConfigurationList;
buildConfigurations = (
83CBBA201A601CBA00E9B192 /* Debug */,
83CBBA211A601CBA00E9B192 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
}

View File

@ -1,6 +0,0 @@
#import <RCTAppDelegate.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : RCTAppDelegate
@end

View File

@ -1,53 +0,0 @@
{
"images" : [
{
"idiom" : "iphone",
"scale" : "2x",
"size" : "20x20"
},
{
"idiom" : "iphone",
"scale" : "3x",
"size" : "20x20"
},
{
"idiom" : "iphone",
"scale" : "2x",
"size" : "29x29"
},
{
"idiom" : "iphone",
"scale" : "3x",
"size" : "29x29"
},
{
"idiom" : "iphone",
"scale" : "2x",
"size" : "40x40"
},
{
"idiom" : "iphone",
"scale" : "3x",
"size" : "40x40"
},
{
"idiom" : "iphone",
"scale" : "2x",
"size" : "60x60"
},
{
"idiom" : "iphone",
"scale" : "3x",
"size" : "60x60"
},
{
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -1,6 +0,0 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -1,52 +0,0 @@
<?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>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>Daps</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
<dict>
<!-- Do not change NSAllowsArbitraryLoads to true, or you will risk app rejection! -->
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSAllowsLocalNetworking</key>
<true/>
</dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
</dict>
</plist>

View File

@ -0,0 +1,30 @@
<?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>
<key>API_KEY</key>
<string>AIzaSyDlYXX9r7Y-8dF6n9rucRGV3COckxHXT1g</string>
<key>GCM_SENDER_ID</key>
<string>395498595576</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.tedqu</string>
<key>PROJECT_ID</key>
<string>secure-unison-413505</string>
<key>STORAGE_BUCKET</key>
<string>secure-unison-413505.appspot.com</string>
<key>IS_ADS_ENABLED</key>
<false></false>
<key>IS_ANALYTICS_ENABLED</key>
<false></false>
<key>IS_APPINVITE_ENABLED</key>
<true></true>
<key>IS_GCM_ENABLED</key>
<true></true>
<key>IS_SIGNIN_ENABLED</key>
<true></true>
<key>GOOGLE_APP_ID</key>
<string>1:395498595576:ios:edfd21806a9213ccd1870d</string>
</dict>
</plist>

View File

@ -1,3 +1,4 @@
require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
# Resolve react_native_pods.rb with node to allow for hoisting
require Pod::Executable.execute_command('node', ['-p',
'require.resolve(
@ -5,7 +6,9 @@ require Pod::Executable.execute_command('node', ['-p',
{paths: [process.argv[1]]},
)', __dir__]).strip
platform :ios, min_ios_version_supported
platform :ios, '17.0'
$FirebaseSDKVersion = '10.17.0'
$RNFirebaseAsStaticFramework = true
prepare_react_native_project!
# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
@ -25,11 +28,25 @@ if linkage != nil
use_frameworks! :linkage => linkage.to_sym
end
target 'Daps' do
target 'TedQu' do
use_expo_modules!
post_integrate do |installer|
begin
expo_patch_react_imports!(installer)
rescue => e
Pod::UI.warn e
end
end
config = use_native_modules!
# Flags change depending on the env values.
flags = get_default_flags()
use_react_native!(
:path => config[:reactNativePath],
# Hermes is now enabled by default. Disable by setting this flag to false.
:hermes_enabled => flags[:hermes_enabled],
:fabric_enabled => flags[:fabric_enabled],
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
@ -38,8 +55,11 @@ target 'Daps' do
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/.."
)
target 'DapsTests' do
pod 'Firebase/Analytics'
pod 'FirebaseCore',:modular_headers => true
pod 'GoogleUtilities',:modular_headers => true
pod 'ExpoModulesCore', path: "../node_modules/expo-modules-core"
target 'TedQuTests' do
inherit! :complete
# Pods for testing
end
@ -51,5 +71,22 @@ target 'Daps' do
config[:reactNativePath],
:mac_catalyst_enabled => false
)
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
end
if target.name == 'Flipper'
file_path = 'Pods/Flipper/xplat/Flipper/FlipperTransportTypes.h'
contents = File.read(file_path)
unless contents.include?('#include <functional>')
File.open(file_path, 'w') do |file|
file.puts('#include <functional>')
file.puts(contents)
end
end
end
end
end
end
end

1818
ios/Podfile.lock Normal file

File diff suppressed because it is too large Load Diff

19
ios/PrefixHeader.pch Normal file
View File

@ -0,0 +1,19 @@
//
// PrefixHeader.pch
// TedQu
//
// Created by RSP on 26/07/24.
//
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
// Include any system framework and library headers here that should be included in all compilation units.
// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.
#endif /* PrefixHeader_pch */
#ifdef __cplusplus
#include <opencv2/opencv.hpp>
#import <opencv2/aruco.hpp>
#endif /* PrefixHeader_pch */

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="22155" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="Y6W-OH-hqX">
<device id="retina6_12" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22131"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="s0d-6b-0kx">
<objects>
<viewController storyboardIdentifier="SplashScreenViewController" id="Y6W-OH-hqX" sceneMemberID="viewController">
<imageView key="view" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="TedQuSplach" id="eEi-Ik-ZM9">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Ief-a0-LHa" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="62" y="-34"/>
</scene>
</scenes>
<resources>
<image name="TedQuSplach" width="271.66665649414062" height="533.33331298828125"/>
</resources>
</document>

View File

@ -0,0 +1,22 @@
//
// TedQu-Bridging-Header.h
// TedQu
//
// Created by RSP on 26/07/24.
//
#ifndef TedQu_Bridging_Header_h
#define TedQu_Bridging_Header_h
#endif /* TedQu_Bridging_Header_h */
#import "Wrapper.h"
#pragma once
#import <Foundation/Foundation.h>
#import <React/RCTEventEmitter.h>
#import <React/RCTUIManager.h>
#import <React/RCTViewManager.h>
#import <React/RCTBridgeModule.h>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +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>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@ -15,9 +15,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "Daps.app"
BlueprintName = "Daps"
ReferencedContainer = "container:Daps.xcodeproj">
BuildableName = "TedQu.app"
BlueprintName = "TedQu"
ReferencedContainer = "container:TedQu.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
@ -33,9 +33,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
BuildableName = "DapsTests.xctest"
BlueprintName = "DapsTests"
ReferencedContainer = "container:Daps.xcodeproj">
BuildableName = "TedQuTests.xctest"
BlueprintName = "TedQuTests"
ReferencedContainer = "container:TedQu.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
@ -55,9 +55,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "Daps.app"
BlueprintName = "Daps"
ReferencedContainer = "container:Daps.xcodeproj">
BuildableName = "TedQu.app"
BlueprintName = "TedQu"
ReferencedContainer = "container:TedQu.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
@ -72,9 +72,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "Daps.app"
BlueprintName = "Daps"
ReferencedContainer = "container:Daps.xcodeproj">
BuildableName = "TedQu.app"
BlueprintName = "TedQu"
ReferencedContainer = "container:TedQu.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:TedQu.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>

View File

@ -0,0 +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>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

7
ios/TedQu/AppDelegate.h Normal file
View File

@ -0,0 +1,7 @@
#import <RCTAppDelegate.h>
#import <Expo/Expo.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : EXAppDelegateWrapper
@end

View File

@ -1,16 +1,16 @@
#import "AppDelegate.h"
#import <Firebase.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTLinkingManager.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.moduleName = @"Daps";
self.moduleName = @"TedQu";
// You can add your custom initial props in the dictionary below.
// They will be passed down to the ViewController used by React Native.
self.initialProps = @{};
[FIRApp configure];
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 714 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Some files were not shown because too many files have changed in this diff Show More