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
|
# testing
|
||||||
/coverage
|
/coverage
|
||||||
|
|
||||||
|
# Expo
|
||||||
|
.expo
|
||||||
|
dist/
|
||||||
|
web-build/
|
131
App.tsx
|
@ -1,118 +1,27 @@
|
||||||
/**
|
import React from 'react'
|
||||||
* Sample React Native App
|
import { ActivityIndicator, View } from 'react-native'
|
||||||
* https://github.com/facebook/react-native
|
import { Provider } from 'react-redux'
|
||||||
*
|
import { PersistGate } from 'redux-persist/integration/react'
|
||||||
* @format
|
import { store, persistor } from '@store' //NOSONAR
|
||||||
*/
|
import ExpoBare from '@containers/ExpoBare/ExpoBare' //NOSONAR
|
||||||
|
|
||||||
import React from 'react';
|
export default class App extends React.Component<any, any> {
|
||||||
import type {PropsWithChildren} from 'react';
|
|
||||||
import {
|
|
||||||
SafeAreaView,
|
|
||||||
ScrollView,
|
|
||||||
StatusBar,
|
|
||||||
StyleSheet,
|
|
||||||
Text,
|
|
||||||
useColorScheme,
|
|
||||||
View,
|
|
||||||
} from 'react-native';
|
|
||||||
|
|
||||||
import {
|
constructor(Props: any) {
|
||||||
Colors,
|
super(Props)
|
||||||
DebugInstructions,
|
|
||||||
Header,
|
|
||||||
LearnMoreLinks,
|
|
||||||
ReloadInstructions,
|
|
||||||
} from 'react-native/Libraries/NewAppScreen';
|
|
||||||
|
|
||||||
type SectionProps = PropsWithChildren<{
|
this.state = {
|
||||||
title: string;
|
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 {
|
render() {
|
||||||
const isDarkMode = useColorScheme() === 'dark';
|
|
||||||
|
|
||||||
const backgroundStyle = {
|
|
||||||
backgroundColor: isDarkMode ? Colors.darker : Colors.lighter,
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SafeAreaView style={backgroundStyle}>
|
<Provider store={store}>
|
||||||
<StatusBar
|
<PersistGate loading={<ActivityIndicator />} persistor={persistor}>
|
||||||
barStyle={isDarkMode ? 'light-content' : 'dark-content'}
|
<ExpoBare />
|
||||||
backgroundColor={backgroundStyle.backgroundColor}
|
</PersistGate>
|
||||||
/>
|
</Provider>
|
||||||
<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;
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
apply plugin: "com.android.application"
|
apply plugin: "com.android.application"
|
||||||
apply plugin: "org.jetbrains.kotlin.android"
|
apply plugin: "org.jetbrains.kotlin.android"
|
||||||
apply plugin: "com.facebook.react"
|
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.
|
* 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"
|
// The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
|
||||||
// hermesFlags = ["-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
|
buildToolsVersion rootProject.ext.buildToolsVersion
|
||||||
compileSdk rootProject.ext.compileSdkVersion
|
compileSdk rootProject.ext.compileSdkVersion
|
||||||
|
|
||||||
namespace "com.daps"
|
namespace "com.tedqu"
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "com.daps"
|
applicationId "com.tedqu"
|
||||||
minSdkVersion rootProject.ext.minSdkVersion
|
minSdkVersion rootProject.ext.minSdkVersion
|
||||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||||
versionCode 1
|
versionCode 4
|
||||||
versionName "1.0"
|
versionName "1.0"
|
||||||
}
|
}
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
|
@ -108,7 +115,8 @@ dependencies {
|
||||||
// The version of react-native is set by the React Native Gradle Plugin
|
// The version of react-native is set by the React Native Gradle Plugin
|
||||||
implementation("com.facebook.react:react-android")
|
implementation("com.facebook.react:react-android")
|
||||||
implementation("com.facebook.react:flipper-integration")
|
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()) {
|
if (hermesEnabled.toBoolean()) {
|
||||||
implementation("com.facebook.react:hermes-android")
|
implementation("com.facebook.react:hermes-android")
|
||||||
} else {
|
} 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,21 +1,42 @@
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<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
|
<application
|
||||||
android:name=".MainApplication"
|
android:name=".MainApplication"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
android:allowBackup="false"
|
android:allowBackup="false"
|
||||||
|
android:usesCleartextTraffic="true"
|
||||||
android:theme="@style/AppTheme">
|
android:theme="@style/AppTheme">
|
||||||
|
<meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyA3yhFDKARfSmU95yaMMQ3SbsW1kOX_gsA"/>
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
|
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
android:windowSoftInputMode="adjustResize"
|
android:windowSoftInputMode="adjustResize"
|
||||||
android:exported="true">
|
android:exported="true"
|
||||||
|
android:theme="@style/Theme.App.SplashScreen">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
|
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.ReactActivity
|
||||||
import com.facebook.react.ReactActivityDelegate
|
import com.facebook.react.ReactActivityDelegate
|
||||||
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
|
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
|
* Returns the name of the main component registered from JavaScript. This is used to schedule
|
||||||
* rendering of the component.
|
* rendering of the component.
|
||||||
*/
|
*/
|
||||||
override fun getMainComponentName(): String = "Daps"
|
override fun getMainComponentName(): String = "TedQu"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
|
* Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
|
||||||
* which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
|
* which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
|
||||||
*/
|
*/
|
||||||
override fun createReactActivityDelegate(): ReactActivityDelegate =
|
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 android.app.Application
|
||||||
import com.facebook.react.PackageList
|
import com.facebook.react.PackageList
|
||||||
import com.facebook.react.ReactApplication
|
import com.facebook.react.ReactApplication
|
||||||
|
@ -15,7 +17,7 @@ import com.facebook.soloader.SoLoader
|
||||||
class MainApplication : Application(), ReactApplication {
|
class MainApplication : Application(), ReactApplication {
|
||||||
|
|
||||||
override val reactNativeHost: ReactNativeHost =
|
override val reactNativeHost: ReactNativeHost =
|
||||||
object : DefaultReactNativeHost(this) {
|
ReactNativeHostWrapper(this, object : DefaultReactNativeHost(this) {
|
||||||
override fun getPackages(): List<ReactPackage> =
|
override fun getPackages(): List<ReactPackage> =
|
||||||
PackageList(this).packages.apply {
|
PackageList(this).packages.apply {
|
||||||
// Packages that cannot be autolinked yet can be added manually here, for example:
|
// 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 isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
|
||||||
override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
|
override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
|
||||||
}
|
})
|
||||||
|
|
||||||
override val reactHost: ReactHost
|
override val reactHost: ReactHost
|
||||||
get() = getDefaultReactHost(this.applicationContext, reactNativeHost)
|
get() = getDefaultReactHost(this.applicationContext, reactNativeHost)
|
||||||
|
@ -41,5 +43,11 @@ class MainApplication : Application(), ReactApplication {
|
||||||
load()
|
load()
|
||||||
}
|
}
|
||||||
ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager)
|
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>
|
<resources>
|
||||||
<string name="app_name">Daps</string>
|
<string name="app_name">TedQu</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -5,5 +5,9 @@
|
||||||
<!-- Customize your theme here. -->
|
<!-- Customize your theme here. -->
|
||||||
<item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
|
<item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
|
||||||
</style>
|
</style>
|
||||||
|
<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>
|
</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 {
|
buildscript {
|
||||||
ext {
|
ext {
|
||||||
buildToolsVersion = "34.0.0"
|
buildToolsVersion = "34.0.0"
|
||||||
|
@ -10,12 +12,33 @@ buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
flatDir { dirs "$rootDir/../node_modules/react-native-artag-module/android/src/main/libs" }
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath("com.android.tools.build:gradle")
|
classpath("com.android.tools.build:gradle")
|
||||||
|
classpath 'com.google.gms:google-services:4.4.0'
|
||||||
classpath("com.facebook.react:react-native-gradle-plugin")
|
classpath("com.facebook.react:react-native-gradle-plugin")
|
||||||
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin")
|
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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"
|
apply plugin: "com.facebook.react.rootproject"
|
|
@ -10,7 +10,7 @@
|
||||||
# Specifies the JVM arguments used for the daemon process.
|
# Specifies the JVM arguments used for the daemon process.
|
||||||
# The setting is particularly useful for tweaking memory settings.
|
# The setting is particularly useful for tweaking memory settings.
|
||||||
# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
|
# 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.
|
# When configured, Gradle will run in incubating parallel mode.
|
||||||
# This option should only be used with decoupled projects. More details, visit
|
# 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)
|
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
|
||||||
include ':app'
|
include ':app'
|
||||||
includeBuild('../node_modules/@react-native/gradle-plugin')
|
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()
|
72
app.json
|
@ -1,4 +1,72 @@
|
||||||
{
|
{
|
||||||
"name": "Daps",
|
"name": "TedQu",
|
||||||
"displayName": "Daps"
|
"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 = {
|
module.exports = function (api) {
|
||||||
|
api.cache(true);
|
||||||
|
return {
|
||||||
presets: ['module:@react-native/babel-preset'],
|
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>
|
45
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
|
# Resolve react_native_pods.rb with node to allow for hoisting
|
||||||
require Pod::Executable.execute_command('node', ['-p',
|
require Pod::Executable.execute_command('node', ['-p',
|
||||||
'require.resolve(
|
'require.resolve(
|
||||||
|
@ -5,7 +6,9 @@ require Pod::Executable.execute_command('node', ['-p',
|
||||||
{paths: [process.argv[1]]},
|
{paths: [process.argv[1]]},
|
||||||
)', __dir__]).strip
|
)', __dir__]).strip
|
||||||
|
|
||||||
platform :ios, min_ios_version_supported
|
platform :ios, '17.0'
|
||||||
|
$FirebaseSDKVersion = '10.17.0'
|
||||||
|
$RNFirebaseAsStaticFramework = true
|
||||||
prepare_react_native_project!
|
prepare_react_native_project!
|
||||||
|
|
||||||
# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
|
# 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
|
use_frameworks! :linkage => linkage.to_sym
|
||||||
end
|
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!
|
config = use_native_modules!
|
||||||
|
|
||||||
|
# Flags change depending on the env values.
|
||||||
|
flags = get_default_flags()
|
||||||
|
|
||||||
use_react_native!(
|
use_react_native!(
|
||||||
:path => config[:reactNativePath],
|
: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.
|
# Enables Flipper.
|
||||||
#
|
#
|
||||||
# Note that if you have use_frameworks! enabled, Flipper will not work and
|
# 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.
|
# An absolute path to your application root.
|
||||||
:app_path => "#{Pod::Config.instance.installation_root}/.."
|
:app_path => "#{Pod::Config.instance.installation_root}/.."
|
||||||
)
|
)
|
||||||
|
pod 'Firebase/Analytics'
|
||||||
target 'DapsTests' do
|
pod 'FirebaseCore',:modular_headers => true
|
||||||
|
pod 'GoogleUtilities',:modular_headers => true
|
||||||
|
pod 'ExpoModulesCore', path: "../node_modules/expo-modules-core"
|
||||||
|
target 'TedQuTests' do
|
||||||
inherit! :complete
|
inherit! :complete
|
||||||
# Pods for testing
|
# Pods for testing
|
||||||
end
|
end
|
||||||
|
@ -51,5 +71,22 @@ target 'Daps' do
|
||||||
config[:reactNativePath],
|
config[:reactNativePath],
|
||||||
:mac_catalyst_enabled => false
|
: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
|
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
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||||
BuildableName = "Daps.app"
|
BuildableName = "TedQu.app"
|
||||||
BlueprintName = "Daps"
|
BlueprintName = "TedQu"
|
||||||
ReferencedContainer = "container:Daps.xcodeproj">
|
ReferencedContainer = "container:TedQu.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildActionEntry>
|
</BuildActionEntry>
|
||||||
</BuildActionEntries>
|
</BuildActionEntries>
|
||||||
|
@ -33,9 +33,9 @@
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
|
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
|
||||||
BuildableName = "DapsTests.xctest"
|
BuildableName = "TedQuTests.xctest"
|
||||||
BlueprintName = "DapsTests"
|
BlueprintName = "TedQuTests"
|
||||||
ReferencedContainer = "container:Daps.xcodeproj">
|
ReferencedContainer = "container:TedQu.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</TestableReference>
|
</TestableReference>
|
||||||
</Testables>
|
</Testables>
|
||||||
|
@ -55,9 +55,9 @@
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||||
BuildableName = "Daps.app"
|
BuildableName = "TedQu.app"
|
||||||
BlueprintName = "Daps"
|
BlueprintName = "TedQu"
|
||||||
ReferencedContainer = "container:Daps.xcodeproj">
|
ReferencedContainer = "container:TedQu.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</BuildableProductRunnable>
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
|
@ -72,9 +72,9 @@
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||||
BuildableName = "Daps.app"
|
BuildableName = "TedQu.app"
|
||||||
BlueprintName = "Daps"
|
BlueprintName = "TedQu"
|
||||||
ReferencedContainer = "container:Daps.xcodeproj">
|
ReferencedContainer = "container:TedQu.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</BuildableProductRunnable>
|
||||||
</ProfileAction>
|
</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 "AppDelegate.h"
|
||||||
|
#import <Firebase.h>
|
||||||
#import <React/RCTBundleURLProvider.h>
|
#import <React/RCTBundleURLProvider.h>
|
||||||
|
#import <React/RCTLinkingManager.h>
|
||||||
@implementation AppDelegate
|
@implementation AppDelegate
|
||||||
|
|
||||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||||
{
|
{
|
||||||
self.moduleName = @"Daps";
|
self.moduleName = @"TedQu";
|
||||||
// You can add your custom initial props in the dictionary below.
|
// You can add your custom initial props in the dictionary below.
|
||||||
// They will be passed down to the ViewController used by React Native.
|
// They will be passed down to the ViewController used by React Native.
|
||||||
self.initialProps = @{};
|
self.initialProps = @{};
|
||||||
|
[FIRApp configure];
|
||||||
return [super application:application didFinishLaunchingWithOptions:launchOptions];
|
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 |