This commit is contained in:
henrydays 2019-02-03 20:54:27 +00:00
parent 6d57eb4e5a
commit 4f37d34bb5
7 changed files with 423 additions and 166 deletions

View File

@ -8,16 +8,14 @@ import { connect } from 'react-redux';
import QRCodeScanner from 'react-native-qrcode-scanner';
import {UtilStyles} from './assets/styles'
import * as Actions from './actions'; //Import your actions
import {RkButton,
RkTheme , RkText} from 'react-native-ui-kitten';
import {RkButton, RkTheme , RkText} from 'react-native-ui-kitten';
import Router from './Router'
import Router from './Router'
const SCREEN_HEIGHT = Dimensions.get("window").height;
const SCREEN_WIDTH = Dimensions.get("window").width;
class App extends Component {
constructor(props) {
@ -26,83 +24,88 @@ const SCREEN_WIDTH = Dimensions.get("window").width;
this.state = {
token:false,
tokenData:'',
loggedIn:false,
onHold:true
token:{valid:false},
tokenData: '',
onHold: true,
logged:false
};
}
componentDidMount() {
//verifica se o utilizador tem token guardado
this.props.checkUser();
console.log('logged:'+this.props.loggedIn);
this.props.checkUser();
}
newJWT(jwt) {
this.setState({
jwt: jwt
});
}
onSuccess = (e) => {
this.props.login(e.data,'80f3b6e5');
console.log("tentativa de login");
};
render() {
render() {
if(this.props.onHold){
if(this.props.onHold && !this.props.logged){
return (
<View>
<Text>CARREGANDO {this.props.onHold}</Text>
<ActivityIndicator size="large" color="#0000ff" />
</View>
)
}
{
//console.log('token... '+ this.props.logged)
console.log('token... '+ this.props.token)
//se existir token
//se existir token
if(this.props.logged){
return (
if(this.props.token == true){
return (
<Router></Router>
<Router></Router>
)
)
}else{
}
else{
//se não existir vai para o ecrã de scan QR
return (
//se não existir vai para o ecrã de scan QR
return (
<QRCodeScanner
<QRCodeScanner
showMarker
showMarker
reactivate={true}
onRead={this.onSuccess.bind(this)}
cameraStyle={{ height: SCREEN_HEIGHT }}
onRead={this.onSuccess.bind(this)}
cameraStyle={{ height: SCREEN_HEIGHT }}
customMarker={
customMarker={
<View style={styles.rectangleContainer}>
<View style={styles.logo}>
<Image style={UtilStyles.loginImage}
<View style={styles.rectangleContainer}>
<View style={styles.logo}>
<Image style={UtilStyles.loginImage}
source={require('./assets/img/logo.png')}
/>
</View>
</View>
<View style={{ flexDirection: "row" }}>
<View style={styles.leftAndRightOverlay}>
</View>
<View style={{ flexDirection: "row" }}>
<View style={styles.leftAndRightOverlay}>
</View>
<View style={styles.rectangle}>
@ -127,7 +130,9 @@ const SCREEN_WIDTH = Dimensions.get("window").width;
/>
)
}
}
}
@ -215,10 +220,10 @@ function mapStateToProps(state, props) {
return {
token: state.apiReducer.token,
tokenData:state.apiReducer.tokenData,
token: state.apiReducer.token,
loggedIn: state.apiReducer.loggedIn,
onHold: state.apiReducer.onHold
onHold: state.apiReducer.onHold,
logged:state.apiReducer.logged
}
}

View File

@ -3,6 +3,8 @@ export const API_LOGIN = 'API_LOGIN';
export const CHECK_USER='CHECK_USER';
export const LOGOUT_USER= 'LOGOUT_USER';
export const USER_INFO= 'USER_INFO'
export const HOLD='HOLD'
import { AsyncStorage } from 'react-native';
@ -24,32 +26,55 @@ export function getData(){
};
}
const saveToken = async token => {
try {
await AsyncStorage.setItem('userToken', token);
const saveToken = async token => {
try {
await AsyncStorage.setItem('refreshToken', token.refreshToken).catch(a=>{
})
await AsyncStorage.setItem('userToken', token.access_token).catch(a=>{
})
await AsyncStorage.setItem('expirationDateToken', token.expirationDateToken.toString()).catch(a=>{
})
} catch (error) {
// Error retrieving data
console.log(error.message);
// Error retrieving data
console.log(error.message);
}
};
const getToken = async () => {
var tokem;
obj={}
try {
token = await AsyncStorage.getItem('userToken') || 'none';
obj.access_token = await AsyncStorage.getItem('userToken') || 'none';
obj.expirationDateToken = await AsyncStorage.getItem('expirationDateToken') || 'none';
obj.refreshToken = await AsyncStorage.getItem('refreshToken') || 'none';
} catch (error) {
// Error retrieving data
console.log(error.message);
}
return token;
return obj;
}
const deleteToken = async () => {
try {
await AsyncStorage.removeItem('userToken');
await AsyncStorage.removeItem('expirationDateToken');
await AsyncStorage.removeItem('refreshToken');
} catch (error) {
// Error retrieving data
console.log(error.message);
@ -62,6 +87,7 @@ export function login(user, pass){
return (dispatch)=>{
console.log('user: ' +user + ' password: '+pass );
var details = {
'username': user,
'password': pass,
@ -69,101 +95,137 @@ export function login(user, pass){
};
var formBody = [];
for (var property in details) {
var encodedKey = encodeURIComponent(property);
var encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");
fetch('http://enei2019.uingress.com/internal/api/token', {
method: 'POST',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
},
body: formBody
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
},
body: formBody
}).catch(err=>{
console.log(err);
alert("error");
dispatch({
type: API_LOGIN,
loggedIn:false,
logged:false,
tokenData:'error'
});
}).then(res=>res.json()).then(parsed=>{
console.log('parsed'+parsed.access_token)
// deviceStorage.saveItem(parsed.access_token);
try {
saveToken(parsed.access_token).then(a=>{
console.log('sucess');
}).catch(a=>{
console.log('error saving')
})
} catch (error) {
console.log('Error saving token')
}
dispatch({
type: API_LOGIN,
loggedIn:true,
token:true,
tokenData:parsed
});
}
).then(a=>{})
var obj={
access_token:parsed.access_token,
expirationDateToken:Math.round(new Date().getTime()/1000) + parsed.expires_in,
refreshToken:parsed.refresh_token,
valid:true
};
// deviceStorage.saveItem(parsed.access_token);
saveToken(obj).then(a=>{
obj.valid=true;
dispatch({
type: API_LOGIN,
logged:true,
token: obj
});
}).catch(a=>{
console.log('error saving')
obj.valid=false;
dispatch({
type: API_LOGIN,
logged:true,
token: obj
});
})
}
).then(a=>{
dispatch({
type: API_LOGIN,
logged:true,
token: obj
});
})
}
}
export function getUserInfo(){
export function hold(){
return (dispatch)=>{
getToken().then(a=>{
dispatch({
type: HOLD,
onHold:true
});
}
}
export function getUserInfo(token){
return (dispatch)=>{
//TODO: verificar validade do token
console.log('Chamada "getUserInfo"');
var obj = {
console.log('get user info');
var token;
var obj = {
method: 'GET',
headers: {
'Authorization':"Bearer "+a,
'Authorization':"Bearer "+token.access_token,
},
}
fetch('http://enei2019.uingress.com/internal/api/Attendee/Detail', obj)
.then(function(res) {
//console.log(res._bodyText);
var obj = JSON.parse(res._bodyText);
dispatch({
type: USER_INFO,
user: obj
});
dispatch({ type: USER_INFO, user: obj,onHold:false, logged:true });
})
.then(function(resJson) {
dispatch({ type: USER_INFO, user: '',onHold:false, logged:true });
})
})
}
}
@ -188,25 +250,54 @@ export function logoutUser(){
}
}
//
export function checkUser(){
return (dispatch)=>{
getToken().then(a=>{
console.log('sucess: '+a)
if(a=='none'){
dispatch({type: CHECK_USER,token:false, tokenData:'error', });
if(a.access_token=='none'){
a.valid=false;
console.log('check user deu falso')
dispatch({type: CHECK_USER,token:a,logged:false, onHold:false});
}
else{
dispatch({type: CHECK_USER,token:true, tokenData:a,});
a.valid=true;
console.log('Existe Token em memória' )
//se expirar
if(Math.round(new Date().getTime()/1000) >= a.expirationDateToken){
a.valid=false;
//chamar funçao para renovar
}
console.log("Tempo restante token: "+ Math.round((a.expirationDateToken-Math.round(new Date().getTime()/1000) )/60) +" Minutos");
//fazer validação da data e renovar o token
dispatch({type: CHECK_USER, token:a, logged:true, onHold:false});
}
}).catch(a=>{
console.log('erros');
dispatch({type: CHECK_USER,token:false, tokenData:'error'});
dispatch({type: CHECK_USER,token:false, logged:false});
})

View File

@ -1,6 +1,6 @@
import { combineReducers } from 'redux';
import { DATA_AVAILABLE, API_LOGIN, CHECK_USER, LOGOUT_USER, USER_INFO } from "../actions/" //Import the actions types constant we defined in our actions
import { DATA_AVAILABLE, API_LOGIN, CHECK_USER, LOGOUT_USER, USER_INFO, HOLD } from "../actions/" //Import the actions types constant we defined in our actions
let dataState = { data: [], loading:true ,token:true};
@ -15,32 +15,38 @@ const dataReducer = (state = dataState, action) => {
}
};
let apiState= {token:false, tokenData:'error', loggedIn:false, onHold:true, user:{}}
let apiState= { token:{valid:false}, tokenData:'error', logged:false, onHold:true, user:{}}
const apiReducer = (state = apiState, action) => {
switch(action.type){
case HOLD:
state=Object.assign({},state, {onHold:true});
return state;
case API_LOGIN:
state=Object.assign({},state, { loggedIn:action.loggedIn, tokenData:action.tokenData , token:action.token});
state=Object.assign({},state, { logged:action.logged, token:action.token});
return state;
case CHECK_USER:
state=Object.assign({},state, { token:action.token, tokenData:action.tokenData, onHold:false});
state=Object.assign({},state, { token:action.token, logged:action.logged, onHold:action.onHold});
return state;
case LOGOUT_USER:
state=Object.assign({},state, { token:action.token, tokenData:action.tokenData, loggedIn:action.loggedIn});
state=Object.assign({},state, { token:action.token, logged:false});
return state;
case USER_INFO:
state=Object.assign({},state, { user: action.user });
state=Object.assign({},state, { user: action.user, token: action.token , loggedIn:action.loggedIn, onHold:action.onHold});
return state;

View File

@ -1,15 +1,64 @@
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import { connect } from 'react-redux';
import {bindActionCreators} from 'redux';
import * as Actions from '../actions';
class Calendar extends React.Component {
constructor(props) {
super(props);
this.state = {
token:{valid:false},
logged:true,
onHold:true,
user:{}
};
}
componentDidMount() {
this.props.hold();
//this.props.logoutUser();
//console.log(this.props.token);
this.props.getUserInfo(this.props.token);
//console.log('logged:'+this.props.logged);
//console.log(this.props)
//console.log(this.props.user)
}
export default class Calendar extends React.Component {
render() {
const { navigate } = this.props.navigation;
if(this.props.user.Name!=undefined){
console.log(this.props.user.Name)
return (
<View style={styles.container}>
<Text style={styles.title}>a{this.props.user.Name}</Text>
</View>
);
}
return (
<View style={styles.container}>
<Text style={styles.title}>ups...</Text>
<Text style={styles.title}>fk</Text>
</View>
);
}
}
const styles = StyleSheet.create({
@ -19,4 +68,24 @@ const styles = StyleSheet.create({
alignItems: 'center',
justifyContent: 'space-around',
}
});
});
function mapStateToProps(state, props) {
return {
token: state.apiReducer.token,
loggedIn: state.apiReducer.loggedIn,
onHold: state.apiReducer.onHold,
logged:state.apiReducer.logged,
user:state.apiReducer.user
}
}
function mapDispatchToProps(dispatch) {
return bindActionCreators(Actions, dispatch);
}
export default connect(mapStateToProps, mapDispatchToProps)(Calendar);

View File

@ -1,18 +1,22 @@
import React, {Component} from 'react';
import { Button, View, Text , TouchableOpacity, FlatList, ActivityIndicator} from 'react-native';
import {
RkButton,
RkTheme
} from 'react-native-ui-kitten';
import { connect } from 'react-redux';
import {bindActionCreators} from 'redux';
import * as Actions from '../actions'; //Import your actionss
import Counter from './Counter'
import {createStore} from 'redux';
import {Provider} from 'react-redux'
@ -23,9 +27,8 @@ class Home extends Component {
super(props);
this.state = {
token:false,
tokenData:'',
loggedIn:false,
token:{valid:false},
logged:true,
onHold:true,
user:{}
};
@ -36,50 +39,70 @@ class Home extends Component {
componentDidMount() {
this.props.hold();
//this.props.logoutUser();
this.props.getUserInfo();
//console.log(this.props.token);
this.props.getUserInfo(this.props.token);
console.log('logged:'+this.props.loggedIn);
//console.log('logged:'+this.props.logged);
console.log('there we go')
//console.log(this.props)
console.log(this.props.user)
//console.log(this.props.user)
}
bClick(){
//this.props.logoutUser();
//var navigate = this.props.navigation.navigate
}
_logout = () => {
console.log("asdasd");
// this.props.navigation.navigate('scan');
this.props.getUserInfo();
// this.props.logout();
this.props.logoutUser();
}
render() {
console.log(this.props.user);
const { navigate } = this.props.navigation;
if(this.props.token){
console.log(this.props.user)
if(this.props.onHold){
return (
<View>
<Text>lollsss {this.props.onHold}</Text>
<ActivityIndicator size="large" color="#0000ff" />
</View>
)
}
if(this.props.logged){
console.log("puta que pariu")
return (
<View >
<Button onPress={this._logout} title="LOGOUT"/>
<Text></Text>
<Text>Nome: {this.props.user.Email}</Text>
<Text>city: {this.props.user.City}</Text>
<Text>phone: {this.props.user.Mobile}</Text>
<Text>{this.props.logged}</Text>
<Button onPress={this._logout} title="LOGOUT"/>
<Text> Nomess: {this.props.user.Name}</Text>
<View>
<Text>{this.props.user.Name}</Text>
<Button onPress={this.bClick} title="LOGOUT"/>
</View>
<Text> city: {this.props.user.City}</Text>
<Text> phone: {this.props.user.Mobile}</Text>
</View>
);
}
@ -116,11 +139,9 @@ function mapStateToProps(state, props) {
return {
token: state.apiReducer.token,
user: state.apiReducer.user
user: state.apiReducer.user,
logged: state.apiReducer.logged
}
}

View File

@ -5,6 +5,7 @@
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
@ -35,13 +36,28 @@
2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D16E6891FA4F8E400B85C8A /* libReact.a */; };
2DCD954D1E0B4F2C00145EB5 /* appTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* appTests.m */; };
2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; };
43A080C42246430685BC7859 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A55A26724384416FAF74A98D /* Ionicons.ttf */; };
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; };
BE2BDF992200F95B0001B8A8 /* libRNCamera.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BE2BDF982200F9490001B8A8 /* libRNCamera.a */; };
BE2BDF9A2200F96A0001B8A8 /* libRNGestureHandler.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BE2BDF922200F93B0001B8A8 /* libRNGestureHandler.a */; };
BE2BDFA12200F9880001B8A8 /* libReactNativePermissions.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BE2BDFA02200F9830001B8A8 /* libReactNativePermissions.a */; };
BE2BDFE2220101420001B8A8 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BE2BDFDF2201012E0001B8A8 /* libRNVectorIcons.a */; };
43A080C42246430685BC7859 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A55A26724384416FAF74A98D /* Ionicons.ttf */; };
BEA7C1C022034BC800B47CD7 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1B122034BC800B47CD7 /* MaterialIcons.ttf */; };
BEA7C1C122034BC800B47CD7 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1B222034BC800B47CD7 /* FontAwesome.ttf */; };
BEA7C1C222034BC800B47CD7 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1B322034BC800B47CD7 /* Ionicons.ttf */; };
BEA7C1C322034BC800B47CD7 /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1B422034BC800B47CD7 /* FontAwesome5_Brands.ttf */; };
BEA7C1C422034BC800B47CD7 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1B522034BC800B47CD7 /* SimpleLineIcons.ttf */; };
BEA7C1C522034BC800B47CD7 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1B622034BC800B47CD7 /* Entypo.ttf */; };
BEA7C1C622034BC800B47CD7 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1B722034BC800B47CD7 /* MaterialCommunityIcons.ttf */; };
BEA7C1C722034BC800B47CD7 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1B822034BC800B47CD7 /* Zocial.ttf */; };
BEA7C1C822034BC800B47CD7 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1B922034BC800B47CD7 /* Feather.ttf */; };
BEA7C1C922034BC800B47CD7 /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1BA22034BC800B47CD7 /* FontAwesome5_Regular.ttf */; };
BEA7C1CA22034BC800B47CD7 /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1BB22034BC800B47CD7 /* FontAwesome5_Solid.ttf */; };
BEA7C1CB22034BC800B47CD7 /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1BC22034BC800B47CD7 /* AntDesign.ttf */; };
BEA7C1CC22034BC800B47CD7 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1BD22034BC800B47CD7 /* Foundation.ttf */; };
BEA7C1CD22034BC800B47CD7 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1BE22034BC800B47CD7 /* EvilIcons.ttf */; };
BEA7C1CE22034BC800B47CD7 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BEA7C1BF22034BC800B47CD7 /* Octicons.ttf */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -381,12 +397,27 @@
5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = "<group>"; };
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = "<group>"; };
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = "<group>"; };
A55A26724384416FAF74A98D /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-ionicons/fonts/Ionicons.ttf"; sourceTree = "<group>"; };
ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = "<group>"; };
BE2BDF682200F93B0001B8A8 /* RNGestureHandler.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNGestureHandler.xcodeproj; path = "../node_modules/react-native-gesture-handler/ios/RNGestureHandler.xcodeproj"; sourceTree = "<group>"; };
BE2BDF932200F9490001B8A8 /* RNCamera.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNCamera.xcodeproj; path = "../node_modules/react-native-camera/ios/RNCamera.xcodeproj"; sourceTree = "<group>"; };
BE2BDF9B2200F9830001B8A8 /* ReactNativePermissions.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ReactNativePermissions.xcodeproj; path = "../node_modules/react-native-permissions/ios/ReactNativePermissions.xcodeproj"; sourceTree = "<group>"; };
BE2BDFD92201012E0001B8A8 /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = "<group>"; };
A55A26724384416FAF74A98D /* Ionicons.ttf */ = {isa = PBXFileReference; name = "Ionicons.ttf"; path = "../node_modules/react-native-ionicons/fonts/Ionicons.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
BEA7C1B122034BC800B47CD7 /* MaterialIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = "<group>"; };
BEA7C1B222034BC800B47CD7 /* FontAwesome.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = "<group>"; };
BEA7C1B322034BC800B47CD7 /* Ionicons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = "<group>"; };
BEA7C1B422034BC800B47CD7 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = "<group>"; };
BEA7C1B522034BC800B47CD7 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = "<group>"; };
BEA7C1B622034BC800B47CD7 /* Entypo.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = "<group>"; };
BEA7C1B722034BC800B47CD7 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = "<group>"; };
BEA7C1B822034BC800B47CD7 /* Zocial.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = "<group>"; };
BEA7C1B922034BC800B47CD7 /* Feather.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = "<group>"; };
BEA7C1BA22034BC800B47CD7 /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = "<group>"; };
BEA7C1BB22034BC800B47CD7 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = "<group>"; };
BEA7C1BC22034BC800B47CD7 /* AntDesign.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = "<group>"; };
BEA7C1BD22034BC800B47CD7 /* Foundation.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = "<group>"; };
BEA7C1BE22034BC800B47CD7 /* EvilIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = "<group>"; };
BEA7C1BF22034BC800B47CD7 /* Octicons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -580,6 +611,29 @@
name = Products;
sourceTree = "<group>";
};
624432DF59944E72B6023C91 /* Resources */ = {
isa = PBXGroup;
children = (
BEA7C1BC22034BC800B47CD7 /* AntDesign.ttf */,
BEA7C1B622034BC800B47CD7 /* Entypo.ttf */,
BEA7C1BE22034BC800B47CD7 /* EvilIcons.ttf */,
BEA7C1B922034BC800B47CD7 /* Feather.ttf */,
BEA7C1B222034BC800B47CD7 /* FontAwesome.ttf */,
BEA7C1B422034BC800B47CD7 /* FontAwesome5_Brands.ttf */,
BEA7C1BA22034BC800B47CD7 /* FontAwesome5_Regular.ttf */,
BEA7C1BB22034BC800B47CD7 /* FontAwesome5_Solid.ttf */,
BEA7C1BD22034BC800B47CD7 /* Foundation.ttf */,
BEA7C1B322034BC800B47CD7 /* Ionicons.ttf */,
BEA7C1B722034BC800B47CD7 /* MaterialCommunityIcons.ttf */,
BEA7C1B122034BC800B47CD7 /* MaterialIcons.ttf */,
BEA7C1BF22034BC800B47CD7 /* Octicons.ttf */,
BEA7C1B522034BC800B47CD7 /* SimpleLineIcons.ttf */,
BEA7C1B822034BC800B47CD7 /* Zocial.ttf */,
A55A26724384416FAF74A98D /* Ionicons.ttf */,
);
name = Resources;
sourceTree = "<group>";
};
78C398B11ACF4ADC00677621 /* Products */ = {
isa = PBXGroup;
children = (
@ -689,15 +743,6 @@
name = Products;
sourceTree = "<group>";
};
624432DF59944E72B6023C91 /* Resources */ = {
isa = "PBXGroup";
children = (
A55A26724384416FAF74A98D /* Ionicons.ttf */,
);
name = Resources;
sourceTree = "<group>";
path = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@ -1197,8 +1242,23 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BEA7C1C022034BC800B47CD7 /* MaterialIcons.ttf in Resources */,
BEA7C1CC22034BC800B47CD7 /* Foundation.ttf in Resources */,
BEA7C1C122034BC800B47CD7 /* FontAwesome.ttf in Resources */,
BEA7C1C922034BC800B47CD7 /* FontAwesome5_Regular.ttf in Resources */,
BEA7C1C822034BC800B47CD7 /* Feather.ttf in Resources */,
BEA7C1C222034BC800B47CD7 /* Ionicons.ttf in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
BEA7C1CA22034BC800B47CD7 /* FontAwesome5_Solid.ttf in Resources */,
BEA7C1C422034BC800B47CD7 /* SimpleLineIcons.ttf in Resources */,
BEA7C1CE22034BC800B47CD7 /* Octicons.ttf in Resources */,
BEA7C1CB22034BC800B47CD7 /* AntDesign.ttf in Resources */,
BEA7C1CD22034BC800B47CD7 /* EvilIcons.ttf in Resources */,
BEA7C1C722034BC800B47CD7 /* Zocial.ttf in Resources */,
BEA7C1C622034BC800B47CD7 /* MaterialCommunityIcons.ttf in Resources */,
BEA7C1C322034BC800B47CD7 /* FontAwesome5_Brands.ttf in Resources */,
BEA7C1C522034BC800B47CD7 /* Entypo.ttf in Resources */,
43A080C42246430685BC7859 /* Ionicons.ttf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;

View File

@ -39,6 +39,15 @@
<string>$(PRODUCT_NAME) camera use</string>
<key>Privacy - Camera Usage Description</key>
<string>$(PRODUCT_NAME) camera use</string>
<key>UIAppFonts</key>
<array>
<string>Foundation.ttf</string>
<string>Ionicons.ttf</string>
<string>FontAwesome.ttf</string>
<string>FontAwesome5_Solid.ttf</string>
</array>
<key>LSApplicationCategoryType</key>
<string></string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIRequiredDeviceCapabilities</key>
@ -53,9 +62,5 @@
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIAppFonts</key>
<array>
<string>Ionicons.ttf</string>
</array>
</dict>
</plist>