Compare commits
52 Commits
main
...
update-exi
Author | SHA1 | Date |
---|---|---|
vinoth | 0cdcb56d25 | |
vinoth | 67f411da39 | |
vinoth | 885c596314 | |
vinoth | 2717ef7289 | |
vinoth | 0e0eba6a41 | |
vinoth | e2cf625ae7 | |
vinoth | 7c8ca5a70d | |
vinoth | 43f8833f72 | |
karthik | b53beb26cf | |
vinoth | 03d0244031 | |
vinoth | 732cca9f6f | |
vinoth | 57490862ff | |
vinoth | a087f1ec9d | |
vinoth | f3b3b6495f | |
vinoth | af6b82017c | |
vinoth | 2fb6cba26f | |
vinoth | 5c2438fb79 | |
vinoth | 0ec43ce473 | |
karthik | 97caa2a276 | |
karthik | 1f40003d01 | |
vinoth | 53f05cc65a | |
vinoth | aac93c6e59 | |
karthik | 24932b4113 | |
vinoth | 2a1f8e3f01 | |
vinoth | d84dee5bff | |
vinoth | fa3a7a8c58 | |
Menaka | c403bd514e | |
sangeetha | 0572f05819 | |
Menaka | 7c050e94d2 | |
Menaka | e220baad72 | |
Menaka | bda8fc8bf1 | |
Menaka | 7dba6d1555 | |
Menaka | eb2f78248c | |
Menaka | 3b4afdcef2 | |
sangeetha | 2d7dcf3859 | |
sangeetha | 96af46baa7 | |
sangeetha | b1ccbdce13 | |
sangeetha | 6af1383ff4 | |
sangeetha | bb98376422 | |
sangeetha | 987cd4489f | |
Menaka | bd69442a83 | |
Menaka | ac1d11c7f5 | |
sangeetha | afd00ac8a3 | |
sangeetha | b2ccea60c5 | |
sangeetha | 8b0bd8a5e9 | |
sangeetha | 01f0f00af8 | |
sangeetha | 74df4828ec | |
sangeetha | 3f89eba73a | |
sangeetha | 2bd7b7e959 | |
sangeetha | 231668c9bf | |
sangeetha | 8f40d8ce7f | |
sangeetha | bb4cf099be |
|
@ -64,3 +64,8 @@ yarn-error.log
|
|||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# Expo
|
||||
.expo
|
||||
dist/
|
||||
web-build/
|
137
App.tsx
|
@ -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>
|
||||
)
|
||||
}
|
||||
}
|
|
@ -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 {
|
||||
|
|
|
@ -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"
|
||||
}
|
|
@ -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>
|
After Width: | Height: | Size: 13 KiB |
|
@ -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))
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
|
@ -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>
|
|
@ -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>
|
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 113 KiB |
|
@ -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>
|
|
@ -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>
|
Before Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 896 B |
Before Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 764 B |
After Width: | Height: | Size: 646 B |
Before Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 9.0 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 7.2 KiB |
|
@ -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>
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#FFFFFF</color>
|
||||
</resources>
|
|
@ -1,3 +1,3 @@
|
|||
<resources>
|
||||
<string name="app_name">Daps</string>
|
||||
<string name="app_name">TedQu</string>
|
||||
</resources>
|
||||
|
|
|
@ -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>
|
|
@ -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"
|
|
@ -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
|
||||
|
|
|
@ -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()
|
74
app.json
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 930 B |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 614 KiB |
After Width: | Height: | Size: 7.0 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 468 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 113 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 210 KiB |
|
@ -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",
|
||||
],
|
||||
};
|
||||
};
|
|
@ -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
|
||||
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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)"
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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 */;
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
#import <RCTAppDelegate.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface AppDelegate : RCTAppDelegate
|
||||
|
||||
@end
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
|
@ -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>
|
|
@ -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>
|
47
ios/Podfile
|
@ -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
|
|
@ -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 */
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -0,0 +1,7 @@
|
|||
#import <RCTAppDelegate.h>
|
||||
#import <Expo/Expo.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface AppDelegate : EXAppDelegateWrapper
|
||||
|
||||
@end
|
|
@ -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];
|
||||
}
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 83 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 476 B |
After Width: | Height: | Size: 714 B |
After Width: | Height: | Size: 1.0 KiB |