├── .watchmanconfig ├── .gitattributes ├── __mocks__ └── react-native-appearance.js ├── babel.config.js ├── app.json ├── assets └── images │ └── logo.png ├── android ├── app │ ├── debug.keystore │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ ├── values │ │ │ │ │ ├── strings.xml │ │ │ │ │ └── styles.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ └── mipmap-xxxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── reactnativeultimatestarter │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ └── MainApplication.java │ │ │ └── AndroidManifest.xml │ │ └── debug │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── reactnativeultimatestarter │ │ │ └── ReactNativeFlipper.java │ ├── proguard-rules.pro │ ├── build_defs.bzl │ ├── _BUCK │ └── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── settings.gradle ├── build.gradle ├── gradle.properties ├── gradlew.bat └── gradlew ├── src ├── utils │ ├── font.ts │ ├── shape.ts │ ├── platform.ts │ ├── dimensions.ts │ ├── scale.ts │ ├── index.ts │ ├── testUtility │ │ └── test-utils.js │ └── theme │ │ └── index.ts ├── config │ └── index.ts ├── constants │ └── strings.ts ├── api │ └── dummyAPI.ts ├── store │ ├── rootReducer.ts │ └── index.ts ├── slices │ ├── counterSlice.ts │ ├── appSlice.ts │ └── usersSlice.ts ├── types │ └── index.d.ts ├── navigation │ ├── DrawerStack.tsx │ ├── AppNavigation.tsx │ ├── RootStack.tsx │ └── HomeStack.tsx ├── hooks │ ├── useTheme.tsx │ └── startup.tsx ├── containers │ ├── SettingsScreen.tsx │ └── HomeScreen.tsx └── components │ └── shared │ ├── IconButton.tsx │ └── Button.tsx ├── ios ├── ReactNativeUltimateStarter │ ├── Images.xcassets │ │ ├── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── AppDelegate.h │ ├── main.m │ ├── AppDelegate.m │ ├── Info.plist │ └── LaunchScreen.storyboard ├── ReactNativeUltimateStarter.xcworkspace │ ├── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── contents.xcworkspacedata ├── ReactNativeUltimateStarterTests │ ├── Info.plist │ └── ReactNativeUltimateStarterTests.m ├── ReactNativeUltimateStarter-tvOSTests │ └── Info.plist ├── Podfile ├── ReactNativeUltimateStarter-tvOS │ └── Info.plist ├── ReactNativeUltimateStarter.xcodeproj │ ├── xcshareddata │ │ └── xcschemes │ │ │ ├── ReactNativeUltimateStarter.xcscheme │ │ │ └── ReactNativeUltimateStarter-tvOS.xcscheme │ └── project.pbxproj └── Podfile.lock ├── .buckconfig ├── .prettierrc.js ├── .eslintrc.js ├── index.js ├── metro.config.js ├── __tests__ └── components │ ├── IconButton.test.tsx │ └── Button.test.tsx ├── App.tsx ├── .gitignore ├── README.md ├── package.json └── tsconfig.json /.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | -------------------------------------------------------------------------------- /__mocks__/react-native-appearance.js: -------------------------------------------------------------------------------- 1 | export * from 'react-native-appearance/src/mock'; -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['module:metro-react-native-babel-preset'], 3 | }; 4 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ReactNativeUltimateStarter", 3 | "displayName": "ReactNativeUltimateStarter" 4 | } -------------------------------------------------------------------------------- /assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ys-sherzad/react-native-ultimate-starter/HEAD/assets/images/logo.png -------------------------------------------------------------------------------- /android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ys-sherzad/react-native-ultimate-starter/HEAD/android/app/debug.keystore -------------------------------------------------------------------------------- /src/utils/font.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import { SCREEN_WIDTH } from './dimensions'; 4 | 5 | export const rem = SCREEN_WIDTH > 340 ? 18 : 16; -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | ReactNativeUltimateStarter 3 | 4 | -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarter/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | bracketSpacing: false, 3 | jsxBracketSameLine: true, 4 | singleQuote: true, 5 | trailingComma: 'all', 6 | }; 7 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ys-sherzad/react-native-ultimate-starter/HEAD/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /src/config/index.ts: -------------------------------------------------------------------------------- 1 | // BaseURL 2 | export const baseURL = 'https://jsonplaceholder.typicode.com'; 3 | 4 | // Add other configurations (Beware not add app secrets here)... -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ys-sherzad/react-native-ultimate-starter/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ys-sherzad/react-native-ultimate-starter/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ys-sherzad/react-native-ultimate-starter/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: '@react-native-community', 4 | parser: '@typescript-eslint/parser', 5 | plugins: ['@typescript-eslint'], 6 | }; 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ys-sherzad/react-native-ultimate-starter/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ys-sherzad/react-native-ultimate-starter/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ys-sherzad/react-native-ultimate-starter/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ys-sherzad/react-native-ultimate-starter/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ys-sherzad/react-native-ultimate-starter/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ys-sherzad/react-native-ultimate-starter/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ys-sherzad/react-native-ultimate-starter/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.4-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarter/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : UIResponder 5 | 6 | @property (nonatomic, strong) UIWindow *window; 7 | 8 | @end 9 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | import 'react-native-gesture-handler'; 5 | import { AppRegistry } from 'react-native'; 6 | import App from './App'; 7 | import { name as appName } from './app.json'; 8 | 9 | AppRegistry.registerComponent(appName, () => App); 10 | -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarter/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char * argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/constants/strings.ts: -------------------------------------------------------------------------------- 1 | import LocalizedStrings from 'react-native-localization'; 2 | 3 | const Strings = new LocalizedStrings({ 4 | en: { 5 | hello: 'Hello', 6 | }, 7 | fa: { 8 | hello: 'سلام', 9 | }, 10 | ar: { 11 | hello: 'مرحبا' 12 | } 13 | }); 14 | 15 | export default Strings; -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarter.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/utils/shape.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const round = { 4 | borderRadius: 999 5 | }; 6 | const semiRound10 = { 7 | borderRadius: 10 8 | } 9 | const semiRound20 = { 10 | borderRadius: 20 11 | } 12 | 13 | /** 14 | * Add other shapes here. 15 | */ 16 | 17 | export { 18 | round, 19 | semiRound10, 20 | semiRound20, 21 | } -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarter.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /metro.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Metro configuration for React Native 3 | * https://github.com/facebook/react-native 4 | * 5 | * @format 6 | */ 7 | 8 | module.exports = { 9 | transformer: { 10 | getTransformOptions: async () => ({ 11 | transform: { 12 | experimentalImportSupport: false, 13 | inlineRequires: false, 14 | }, 15 | }), 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /src/utils/platform.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import { Platform } from 'react-native'; 4 | 5 | const isIOS = Platform.OS === 'ios'; 6 | const isAndroid = Platform.OS === 'android'; 7 | const isAndroidVersion21AndAbove = Platform.Version >= 21; 8 | 9 | /** 10 | * Add other platform utils 11 | */ 12 | 13 | export { 14 | isIOS, 15 | isAndroid, 16 | isAndroidVersion21AndAbove 17 | }; -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'ReactNativeUltimateStarter' 2 | include ':react-native-appearance' 3 | project(':react-native-appearance').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-appearance/android') 4 | apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) 5 | include ':app' 6 | -------------------------------------------------------------------------------- /src/api/dummyAPI.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import { baseURL } from '../config'; 3 | import { User } from '../types'; 4 | 5 | export default class DummyService { 6 | static async getUsers(): Promise { 7 | try { 8 | const res = await axios.get(baseURL + '/users'); 9 | return res.data; 10 | } catch (ex) { 11 | throw ex; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/reactnativeultimatestarter/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.reactnativeultimatestarter; 2 | 3 | import com.facebook.react.ReactActivity; 4 | 5 | public class MainActivity extends ReactActivity { 6 | 7 | /** 8 | * Returns the name of the main component registered from JavaScript. This is used to schedule 9 | * rendering of the component. 10 | */ 11 | @Override 12 | protected String getMainComponentName() { 13 | return "ReactNativeUltimateStarter"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/utils/dimensions.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import { Dimensions } from 'react-native'; 4 | import { isIOS } from './platform'; 5 | 6 | /** 7 | * device's height and width dimensions 8 | */ 9 | const SCREEN_WIDTH = Dimensions.get('window').width; 10 | const SCREEN_HEIGHT = isIOS ? Dimensions.get('window').height : require('react-native-extra-dimensions-android').get('REAL_WINDOW_HEIGHT'); 11 | 12 | 13 | /** 14 | * Add other dimension needs here 15 | */ 16 | 17 | export { 18 | SCREEN_HEIGHT, 19 | SCREEN_WIDTH 20 | }; -------------------------------------------------------------------------------- /__tests__/components/IconButton.test.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import IconButton from '../../src/components/shared/IconButton'; 3 | import { render, cleanup } from '../../src/utils/testUtility/test-utils'; 4 | 5 | afterEach(cleanup); 6 | 7 | const props = { 8 | iconName: 'users', 9 | onPress: jest.fn(), 10 | }; 11 | 12 | describe('IconButton', () => { 13 | it('renders correctly', () => { 14 | const { getByLabelText } = render(); 15 | expect(getByLabelText('Tap me!')).toBeDefined(); 16 | }); 17 | }); 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/utils/scale.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import { SCREEN_HEIGHT, SCREEN_WIDTH } from './dimensions'; 4 | 5 | //Guideline sizes are based on standard ~5" screen mobile device 6 | const guidelineBaseWidth = 350; 7 | const guidelineBaseHeight = 680; 8 | 9 | const scale = (size: number) => (SCREEN_WIDTH / guidelineBaseWidth) * size; 10 | const verticalScale = (size: number) => (SCREEN_HEIGHT / guidelineBaseHeight) * size; 11 | const moderateScale = (size: number, factor = 0.1) => size + (scale(size) - size) * factor; 12 | 13 | export { 14 | scale, 15 | verticalScale, 16 | moderateScale 17 | }; -------------------------------------------------------------------------------- /src/store/rootReducer.ts: -------------------------------------------------------------------------------- 1 | import { combineReducers } from '@reduxjs/toolkit'; 2 | 3 | // import all reducers here 4 | import counterReducer from '../slices/counterSlice'; 5 | import usersReducer from '../slices/usersSlice'; 6 | import appReducer from '../slices/appSlice'; 7 | 8 | // combine all reducers into a single state object 9 | const rootReducer = combineReducers({ 10 | counter: counterReducer, 11 | users: usersReducer, 12 | app: appReducer 13 | }); 14 | 15 | // export root reducer's state type 16 | export type RootState = ReturnType 17 | 18 | export default rootReducer; -------------------------------------------------------------------------------- /android/app/build_defs.bzl: -------------------------------------------------------------------------------- 1 | """Helper definitions to glob .aar and .jar targets""" 2 | 3 | def create_aar_targets(aarfiles): 4 | for aarfile in aarfiles: 5 | name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] 6 | lib_deps.append(":" + name) 7 | android_prebuilt_aar( 8 | name = name, 9 | aar = aarfile, 10 | ) 11 | 12 | def create_jar_targets(jarfiles): 13 | for jarfile in jarfiles: 14 | name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] 15 | lib_deps.append(":" + name) 16 | prebuilt_jar( 17 | name = name, 18 | binary_jar = jarfile, 19 | ) 20 | -------------------------------------------------------------------------------- /src/slices/counterSlice.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import { createSlice } from '@reduxjs/toolkit'; 4 | import { CounterState } from '../types'; 5 | 6 | /** 7 | * set the initial state for counter 8 | */ 9 | const initialState: CounterState = { 10 | count: 0 11 | } 12 | 13 | /** 14 | * create "counter" slice reducer and its action creators 15 | */ 16 | const counter = createSlice({ 17 | name: 'counter', 18 | initialState, 19 | reducers: { 20 | increment(state) { 21 | state.count++; 22 | } 23 | } 24 | }); 25 | 26 | /** 27 | * export the slice action creators 28 | */ 29 | export const { 30 | increment 31 | } = counter.actions; 32 | 33 | export default counter.reducer; -------------------------------------------------------------------------------- /src/utils/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Importing and exporting all utils here 3 | * In my opinion its just a cleaner way. 4 | * 5 | * Example usage in your components: 6 | * 7 | * import { Dimensions } from 'path/to/utils'; 8 | * 9 | * const styles = StyleSheet.create({ 10 | * container: { 11 | * height: Dimensions.SCREEN_HEIGHT, 12 | * width: Dimensions.SCREEN_WIDTH 13 | * } 14 | * }); 15 | */ 16 | 17 | // dimensions 18 | import * as Dimensions from './dimensions'; 19 | import * as Shape from './shape'; 20 | import * as Scale from './scale'; 21 | 22 | // platform 23 | import * as PlatformUtils from './platform'; 24 | 25 | export { 26 | Dimensions, 27 | Shape, 28 | Scale, 29 | PlatformUtils 30 | }; -------------------------------------------------------------------------------- /src/utils/testUtility/test-utils.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render as rtlRender } from '@testing-library/react-native'; 3 | import { createStore } from 'redux'; 4 | import { Provider } from 'react-redux'; 5 | import reducer from '../../store/rootReducer'; 6 | 7 | function render( 8 | ui, 9 | { 10 | initialState, 11 | store = createStore(reducer, initialState), 12 | ...renderOptions 13 | } = {} 14 | ) { 15 | function Wrapper({ children }) { 16 | 17 | 18 | return {children}; 19 | } 20 | return rtlRender(ui, { wrapper: Wrapper, ...renderOptions }); 21 | } 22 | 23 | // re-export everything 24 | export * from '@testing-library/react-native'; 25 | // override render method 26 | export { render }; -------------------------------------------------------------------------------- /src/types/index.d.ts: -------------------------------------------------------------------------------- 1 | export interface AppState { 2 | theme: Theme; 3 | } 4 | export interface CounterState { 5 | count: number; 6 | } 7 | export interface User { 8 | name: string; 9 | username: string; 10 | email: string; 11 | } 12 | export interface UsersState { 13 | users: User[]; 14 | inProgress: boolean; 15 | error: string | null 16 | } 17 | 18 | export type Theme = { 19 | $mode: string, 20 | $primary: string, 21 | $accent: string, 22 | $background: string, 23 | $headerBackground: string, 24 | $surface: string, 25 | $disabled: string, 26 | $danger: string, 27 | $text: string, 28 | $iconColor: string, 29 | $borderColor: string, 30 | $rippleColor: string, 31 | $statusBarBgColor: string, 32 | } 33 | -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarter/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /src/navigation/DrawerStack.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | // libs 3 | import { createDrawerNavigator } from '@react-navigation/drawer'; 4 | // scenes 5 | import HomeNavigationStack from './HomeStack'; 6 | // theme hook 7 | import useTheme from '../hooks/useTheme'; 8 | 9 | interface DrawerProps { } 10 | 11 | const DrawerStackNavigator = createDrawerNavigator(); 12 | 13 | const DrawerStack = ({ }: DrawerProps) => { 14 | const { theme } = useTheme(); 15 | return ( 16 | 22 | 23 | 24 | ); 25 | }; 26 | 27 | export default DrawerStack; 28 | -------------------------------------------------------------------------------- /src/hooks/useTheme.tsx: -------------------------------------------------------------------------------- 1 | import React, { useCallback } from 'react'; 2 | import { useDispatch, useSelector } from 'react-redux'; 3 | import { setTheme } from '../slices/appSlice'; 4 | import { RootState } from '../store/rootReducer'; 5 | import { themes } from '../utils/theme'; 6 | 7 | /** 8 | * A hook returning theme and toggle function 9 | * for updating / toggling theme state in store 10 | */ 11 | 12 | const useTheme = () => { 13 | const dispatch = useDispatch(); 14 | 15 | const { theme } = useSelector( 16 | (state: RootState) => state.app 17 | ); 18 | const toggleTheme = useCallback( 19 | () => { 20 | dispatch(setTheme({ theme: theme.$mode === 'dark' ? themes.light : themes.dark })); 21 | }, 22 | [theme] 23 | ); 24 | return { theme, toggleTheme }; 25 | }; 26 | 27 | export default useTheme; 28 | 29 | -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarterTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarter-tvOSTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /App.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * React Native Ultimate Starter 3 | * https://github.com/ys-sherzad/react-native-ultimate-starter 4 | * 5 | * @format 6 | */ 7 | 8 | import React from 'react'; 9 | // libs 10 | import { Provider } from 'react-redux'; 11 | import { PersistGate } from 'redux-persist/lib/integration/react'; 12 | // store 13 | import store, { persistor } from './src/store'; 14 | // libs 15 | import { AppearanceProvider } from 'react-native-appearance'; 16 | // main App navigation / entry 17 | import AppNavigation from './src/navigation/AppNavigation'; 18 | 19 | 20 | const App = () => { 21 | return ( 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | ); 30 | }; 31 | 32 | export default App; 33 | -------------------------------------------------------------------------------- /src/utils/theme/index.ts: -------------------------------------------------------------------------------- 1 | 2 | export const themes = { 3 | dark: { 4 | $mode: 'dark', 5 | $primary: 'blue', 6 | $accent: 'green', 7 | $background: '#121212', 8 | $headerBackground: '#202020', 9 | $surface: 'white', 10 | $disabled: 'grey', 11 | $danger: 'red', 12 | $text: 'rgba(255, 255, 255, 0.87)', 13 | $iconColor: 'rgba(255, 255, 255, 0.87)', 14 | $borderColor: 'rgba(255, 255, 255, 0.87)', 15 | $rippleColor: 'rgba(255, 255, 255, .2)', 16 | $statusBarBgColor: '#202020' 17 | }, 18 | light: { 19 | $mode: 'light', 20 | $primary: 'blue', 21 | $accent: 'green', 22 | $background: '#fff', 23 | $headerBackground: 'white', 24 | $surface: 'white', 25 | $disabled: 'grey', 26 | $danger: 'red', 27 | $text: 'black', 28 | $iconColor: 'black', 29 | $borderColor: 'black', 30 | $rippleColor: 'rgba(0,0,0,.2)', 31 | $statusBarBgColor: '#fff', 32 | } 33 | } -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | require_relative '../node_modules/react-native/scripts/react_native_pods' 2 | require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' 3 | 4 | platform :ios, '10.0' 5 | 6 | target 'ReactNativeUltimateStarter' do 7 | config = use_native_modules! 8 | 9 | use_react_native!(:path => config["reactNativePath"]) 10 | 11 | pod 'react-native-appearance', :path => '../node_modules/react-native-appearance' 12 | 13 | target 'ReactNativeUltimateStarterTests' do 14 | inherit! :complete 15 | # Pods for testing 16 | end 17 | 18 | # Enables Flipper. 19 | # 20 | # Note that if you have use_frameworks! enabled, Flipper will not work and 21 | # you should disable these next few lines. 22 | use_flipper! 23 | post_install do |installer| 24 | flipper_post_install(installer) 25 | end 26 | end 27 | 28 | target 'ReactNativeUltimateStarter-tvOS' do 29 | # Pods for ReactNativeUltimateStarter-tvOS 30 | 31 | target 'ReactNativeUltimateStarter-tvOSTests' do 32 | inherit! :search_paths 33 | # Pods for testing 34 | end 35 | end 36 | -------------------------------------------------------------------------------- /src/navigation/AppNavigation.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View } from 'react-native'; 3 | // libs 4 | import { NavigationContainer } from '@react-navigation/native'; 5 | 6 | // main stack navigation 7 | import RooStack from './RootStack'; 8 | 9 | // hook for getting theme from store and its action creator toggle theme, 10 | // and handle status bar style 11 | import useTheme from '../hooks/useTheme'; 12 | 13 | // start up tasks 14 | import startup from '../hooks/startup'; 15 | 16 | 17 | /** 18 | * "NavigationContainer" is wrapped in a view with theme's background color to fix the white flashing background 19 | * while transitioning between screens on some android devices. 20 | */ 21 | const AppNavigation = () => { 22 | // run start up tasks 23 | startup(); 24 | 25 | const { theme } = useTheme(); 26 | return ( 27 | 28 | 29 | 30 | 31 | 32 | ); 33 | }; 34 | 35 | export default AppNavigation; 36 | 37 | 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | 24 | # Android/IntelliJ 25 | # 26 | build/ 27 | .idea 28 | .gradle 29 | local.properties 30 | *.iml 31 | 32 | # Visual Studio Code 33 | # 34 | .vscode/ 35 | 36 | # node.js 37 | # 38 | node_modules/ 39 | npm-debug.log 40 | yarn-error.log 41 | 42 | # BUCK 43 | buck-out/ 44 | \.buckd/ 45 | *.keystore 46 | !debug.keystore 47 | 48 | # fastlane 49 | # 50 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 51 | # screenshots whenever they are needed. 52 | # For more information about the recommended setup visit: 53 | # https://docs.fastlane.tools/best-practices/source-control/ 54 | 55 | */fastlane/report.xml 56 | */fastlane/Preview.html 57 | */fastlane/screenshots 58 | 59 | # Bundle artifact 60 | *.jsbundle 61 | 62 | # CocoaPods 63 | /ios/Pods/ 64 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | ext { 5 | buildToolsVersion = "29.0.2" 6 | minSdkVersion = 16 7 | compileSdkVersion = 29 8 | targetSdkVersion = 29 9 | } 10 | repositories { 11 | google() 12 | jcenter() 13 | } 14 | dependencies { 15 | classpath("com.android.tools.build:gradle:3.5.3") 16 | // NOTE: Do not place your application dependencies here; they belong 17 | // in the individual module build.gradle files 18 | } 19 | } 20 | 21 | allprojects { 22 | repositories { 23 | mavenLocal() 24 | maven { 25 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm 26 | url("$rootDir/../node_modules/react-native/android") 27 | } 28 | maven { 29 | // Android JSC is installed from npm 30 | url("$rootDir/../node_modules/jsc-android/dist") 31 | } 32 | 33 | google() 34 | jcenter() 35 | maven { url 'https://www.jitpack.io' } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 13 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/hooks/startup.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * A hook handling startup tasks 3 | * 4 | * (_handleStatusBar) function runs when theme changes updating the statusbar 5 | */ 6 | 7 | import React from 'react'; 8 | import { StatusBar } from 'react-native'; 9 | import { useSelector } from 'react-redux'; 10 | import { RootState } from '../store/rootReducer'; 11 | import { PlatformUtils } from '../utils'; 12 | 13 | const startup = () => { 14 | 15 | // take "theme" 16 | const { theme } = useSelector( 17 | (state: RootState) => state.app 18 | ); 19 | 20 | // run "_handleStatusBar" only when theme is toggled 21 | React.useEffect(() => { 22 | _handleStatusBar(); 23 | }, [theme]); 24 | 25 | // handle statusbar style on theme change 26 | const _handleStatusBar = () => { 27 | const barStyle = theme.$mode === 'light' 28 | ? 'dark-content' 29 | : 'light-content'; 30 | if (PlatformUtils.isAndroid) { 31 | StatusBar.setBackgroundColor(theme.$statusBarBgColor, true); 32 | } 33 | StatusBar.setBarStyle(barStyle, true); 34 | }; 35 | 36 | // Add other start-up tasks... 37 | 38 | return null; 39 | }; 40 | 41 | export default startup; 42 | 43 | -------------------------------------------------------------------------------- /src/store/index.ts: -------------------------------------------------------------------------------- 1 | import { configureStore, Action } from '@reduxjs/toolkit'; 2 | import { persistReducer, persistStore } from 'redux-persist'; 3 | // middleware 4 | import thunk, { ThunkAction } from 'redux-thunk'; 5 | import logger from 'redux-logger'; 6 | // storage 7 | import AsyncStorage from '@react-native-async-storage/async-storage'; 8 | // root reducer 9 | import rootReducer, { RootState } from './rootReducer'; 10 | 11 | export type AppDispatch = typeof store.dispatch; 12 | export type AppThunk = ThunkAction>; 13 | 14 | /** 15 | * redux-persist configuration 16 | * check https://github.com/rt2zz/redux-persist/blob/master/src/types.js#L13-L27 for other configs 17 | */ 18 | const persistConfig = { 19 | storage: AsyncStorage, 20 | timeout: 0, 21 | key: 'my_app', 22 | whitelist: [] 23 | }; 24 | 25 | const persistedReducer = persistReducer(persistConfig, rootReducer); 26 | 27 | /** 28 | * store configuration 29 | * https://redux-toolkit.js.org/api/configureStore 30 | */ 31 | const store = configureStore({ 32 | reducer: persistedReducer, 33 | middleware: [thunk, logger], 34 | devTools: process.env.NODE_ENV !== 'production' 35 | }); 36 | 37 | export const persistor = persistStore(store); 38 | 39 | export default store; -------------------------------------------------------------------------------- /src/slices/appSlice.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import { createSlice, PayloadAction } from '@reduxjs/toolkit'; 4 | import { AppState, Theme } from '../types'; 5 | import { themes } from '../utils/theme'; 6 | import { Appearance } from 'react-native-appearance'; 7 | 8 | /** 9 | * take system's mode preference 10 | */ 11 | const systemTheme = Appearance.getColorScheme(); 12 | 13 | /** 14 | * 15 | * @param mode light | dark | no-preference 16 | * @returns [Theme] 17 | */ 18 | const getSystemTheme = (mode: 'light' | 'dark' | 'no-preference') => { 19 | if (mode === 'no-preference' || mode === 'light') return themes.light; 20 | return themes.dark; 21 | } 22 | 23 | /** 24 | * set initial state for theme 25 | */ 26 | const initialState: AppState = { 27 | theme: getSystemTheme(systemTheme) 28 | } 29 | 30 | /** 31 | * create slice reducer and action creators 32 | */ 33 | const app = createSlice({ 34 | name: 'app', 35 | initialState, 36 | reducers: { 37 | setTheme(state, action: PayloadAction<{ theme: Theme }>) { 38 | const { theme } = action.payload; 39 | state.theme = theme; 40 | } 41 | } 42 | }); 43 | 44 | /** 45 | * export action creators 46 | */ 47 | export const { 48 | setTheme, 49 | } = app.actions; 50 | 51 | export default app.reducer; -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | org.gradle.jvmargs=-Xmx4608m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | # AndroidX package structure to make it clearer which packages are bundled with the 21 | # Android operating system, and which are packaged with your app's APK 22 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 23 | android.useAndroidX=true 24 | # Automatically convert third-party libraries to use AndroidX 25 | android.enableJetifier=true 26 | 27 | # Version of flipper SDK to use with React Native 28 | FLIPPER_VERSION=0.54.0 29 | -------------------------------------------------------------------------------- /src/containers/SettingsScreen.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Text, View, StyleSheet } from 'react-native'; 3 | import Button from '../components/shared/Button'; 4 | // theme hook 5 | import useTheme from '../hooks/useTheme'; 6 | // utils 7 | import { Scale, Shape } from '../utils'; 8 | 9 | interface SettingsScreenProps { } 10 | 11 | const SettingsScreen = ({ }: SettingsScreenProps) => { 12 | const { toggleTheme, theme } = useTheme(); 13 | return ( 14 | 15 | Current Theme is : {theme.$mode.toUpperCase()} 16 | 19 | 20 | ); 21 | }; 22 | 23 | export default SettingsScreen; 24 | 25 | const styles = StyleSheet.create({ 26 | container: { 27 | flex: 1, 28 | justifyContent: 'center', 29 | alignItems: 'center', 30 | }, 31 | contentText: { 32 | marginVertical: Scale.verticalScale(10) 33 | }, 34 | btn: { 35 | height: 50, 36 | justifyContent: 'center', 37 | paddingHorizontal: 30, 38 | borderWidth: 1, 39 | ...Shape.semiRound10 40 | } 41 | }); 42 | -------------------------------------------------------------------------------- /src/components/shared/IconButton.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { StyleSheet } from 'react-native'; 3 | import Icon from 'react-native-easy-icon'; 4 | // utils 5 | import { Scale, Shape } from '../../utils'; 6 | // components 7 | import Button from './Button'; 8 | // types 9 | import { IconType } from 'react-native-easy-icon/src/Icon'; 10 | // hooks 11 | import useTheme from '../../hooks/useTheme'; 12 | 13 | interface Props { 14 | iconType?: IconType; 15 | iconName: string; 16 | onPress: () => void; 17 | customStyle?: any; 18 | iconSize?: number; 19 | iconColor?: string; 20 | } 21 | 22 | const IconButton = ({ iconType, iconName, onPress, customStyle, iconSize, iconColor }: Props) => { 23 | // use theme 24 | const { theme } = useTheme(); 25 | 26 | return ( 27 | 38 | ); 39 | }; 40 | 41 | export default IconButton; 42 | 43 | const styles = StyleSheet.create({ 44 | container: { 45 | justifyContent: 'center', 46 | alignItems: 'center', 47 | ...Shape.round, 48 | }, 49 | }); 50 | -------------------------------------------------------------------------------- /android/app/_BUCK: -------------------------------------------------------------------------------- 1 | # To learn about Buck see [Docs](https://buckbuild.com/). 2 | # To run your application with Buck: 3 | # - install Buck 4 | # - `npm start` - to start the packager 5 | # - `cd android` 6 | # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` 7 | # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck 8 | # - `buck install -r android/app` - compile, install and run application 9 | # 10 | 11 | load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") 12 | 13 | lib_deps = [] 14 | 15 | create_aar_targets(glob(["libs/*.aar"])) 16 | 17 | create_jar_targets(glob(["libs/*.jar"])) 18 | 19 | android_library( 20 | name = "all-libs", 21 | exported_deps = lib_deps, 22 | ) 23 | 24 | android_library( 25 | name = "app-code", 26 | srcs = glob([ 27 | "src/main/java/**/*.java", 28 | ]), 29 | deps = [ 30 | ":all-libs", 31 | ":build_config", 32 | ":res", 33 | ], 34 | ) 35 | 36 | android_build_config( 37 | name = "build_config", 38 | package = "com.reactnativeultimatestarter", 39 | ) 40 | 41 | android_resource( 42 | name = "res", 43 | package = "com.reactnativeultimatestarter", 44 | res = "src/main/res", 45 | ) 46 | 47 | android_binary( 48 | name = "app", 49 | keystore = "//android/keystores:debug", 50 | manifest = "src/main/AndroidManifest.xml", 51 | package_type = "debug", 52 | deps = [ 53 | ":app-code", 54 | ], 55 | ) 56 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | >*Note: NEEDS UPDATE* 2 | 3 | # React Native Ultimate Starter 🎉 4 | >*Note: This starter is work in progress.* 5 | 6 | Boost your app development and get your project up and running in no time. (iOS & Android) 7 | 8 | ## Features 9 | 10 | 11 | 12 | * [Typescript](https://github.com/microsoft/TypeScript) based, 13 | 14 | * State management with : 15 | * [React Redux](https://react-redux.js.org/introduction/quick-start): React's official bindings for [Redux](https://redux.js.org/introduction/getting-started), 16 | 17 | * [Redux Toolkit](https://redux-toolkit.js.org/introduction/quick-start): Provides a standard way and less boilerplate code to write Redux logic, 18 | 19 | * [Redux Persist](https://github.com/rt2zz/redux-persist): Data persistency, 20 | 21 | * [React Navigation 5](https://reactnavigation.org/docs/getting-started) with stack and drawer showcased, 22 | * Dynamic theme support (dark & light), 23 | * Powered with few custom components Button, IconButton with more coming soon, 24 | * Utils are provided, eg. scale, shape, dimensions...etc. 25 | * [React Native Localization](https://github.com/stefalda/ReactNativeLocalization) 26 | * [React Native Easy Icon](https://github.com/NewBieBR/react-native-easy-icon) 27 | 28 | 29 | | Android | iOS | 30 | | ----------------------------- | ----------------------------------- | 31 | | | | 32 | -------------------------------------------------------------------------------- /__tests__/components/Button.test.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render, cleanup } from '../../src/utils/testUtility/test-utils'; 3 | import Button from '../../src/components/shared/Button'; 4 | import { PlatformUtils } from '../../src/utils'; 5 | 6 | afterEach(cleanup); 7 | 8 | jest.mock('../../src/utils/platform', () => ({ 9 | get isAndroid() { 10 | return true; 11 | }, 12 | })); 13 | 14 | describe('Button - android', () => { 15 | const spy = jest.spyOn(PlatformUtils, 'isAndroid', 'get'); 16 | it('renders button for Android platform', () => { 17 | spy.mockReturnValueOnce(true); 18 | const { getByTestId } = render( 19 | 22 | ); 23 | expect(getByTestId('touchableWithFeedback')).toBeDefined(); 24 | }); 25 | }); 26 | 27 | describe('Button - ios', () => { 28 | const spy = jest.spyOn(PlatformUtils, 'isAndroid', 'get'); 29 | it('renders button for iOS platform', () => { 30 | spy.mockReturnValueOnce(false); 31 | const { getByTestId } = render( 32 | 35 | ); 36 | expect(getByTestId('touchableOpacity')).toBeDefined(); 37 | }); 38 | }); 39 | 40 | describe('Button - without feedback', () => { 41 | it('renders button without feedback when withoutFeedback is true', () => { 42 | const { getByTestId } = render( 43 | ); 46 | 47 | expect(getByTestId('touchableWithoutFeedback')).toBeDefined(); 48 | }); 49 | }); 50 | 51 | 52 | -------------------------------------------------------------------------------- /src/slices/usersSlice.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import { createSlice, PayloadAction } from '@reduxjs/toolkit'; 4 | // service 5 | import DummyService from '../api/dummyAPI'; 6 | // types 7 | import { AppThunk } from '../store'; 8 | import { User, UsersState } from '../types'; 9 | 10 | /** 11 | * set the initial state 12 | */ 13 | const initialState: UsersState = { 14 | users: [], 15 | inProgress: false, 16 | error: null 17 | } 18 | 19 | /** 20 | * create "users" slice reducer and its creator actions 21 | */ 22 | const users = createSlice({ 23 | name: 'users', 24 | initialState, 25 | reducers: { 26 | getUsers(state) { 27 | state.inProgress = true; 28 | state.error = null; 29 | }, 30 | getUsersSuccess(state, action: PayloadAction<{ users: User[] }>) { 31 | const { users } = action.payload; 32 | state.inProgress = false; 33 | state.users = users; 34 | }, 35 | getUsersFailure(state, action: PayloadAction) { 36 | state.inProgress = false; 37 | state.error = action.payload; 38 | } 39 | } 40 | }); 41 | 42 | /** 43 | * export the slice action creators 44 | */ 45 | export const { 46 | getUsers, 47 | getUsersSuccess, 48 | getUsersFailure 49 | } = users.actions; 50 | 51 | export default users.reducer; 52 | 53 | /** 54 | * fetch users from a remote server 55 | */ 56 | export const fetchUsers = (): AppThunk => async dispatch => { 57 | try { 58 | dispatch(getUsers()); 59 | const users = await DummyService.getUsers(); 60 | dispatch(getUsersSuccess({ users })) 61 | } catch (ex) { 62 | dispatch(getUsersFailure('error:' + ex)) 63 | } 64 | } -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarter-tvOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSExceptionDomains 28 | 29 | localhost 30 | 31 | NSExceptionAllowsInsecureHTTPLoads 32 | 33 | 34 | 35 | 36 | NSLocationWhenInUseUsageDescription 37 | 38 | UILaunchStoryboardName 39 | LaunchScreen 40 | UIRequiredDeviceCapabilities 41 | 42 | armv7 43 | 44 | UISupportedInterfaceOrientations 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationLandscapeLeft 48 | UIInterfaceOrientationLandscapeRight 49 | 50 | UIViewControllerBasedStatusBarAppearance 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/navigation/RootStack.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | // libs 3 | import { createStackNavigator } from '@react-navigation/stack'; 4 | // components 5 | import IconButton from '../components/shared/IconButton'; 6 | // scenes 7 | import DrawerStack from './DrawerStack'; 8 | import Second from '../containers/SettingsScreen'; 9 | // utils 10 | import { Scale } from '../utils'; 11 | // theme hook 12 | import useTheme from '../hooks/useTheme'; 13 | 14 | 15 | interface RooStackProps { } 16 | 17 | const RootStackNavigator = createStackNavigator(); 18 | 19 | const RooStack = ({ }: RooStackProps) => { 20 | const { theme } = useTheme() 21 | return ( 22 | 23 | 28 | ({ 32 | headerTitleStyle: { color: theme.$text }, 33 | headerStyle: { backgroundColor: theme.$headerBackground }, 34 | headerLeft: () => ( 35 | navigation.pop()} 37 | iconName='arrow-left' 38 | customStyle={{ 39 | padding: Scale.moderateScale(8), 40 | marginLeft: Scale.moderateScale(8) 41 | }} 42 | /> 43 | ) 44 | })} 45 | /> 46 | 47 | ); 48 | }; 49 | 50 | export default RooStack; 51 | -------------------------------------------------------------------------------- /src/navigation/HomeStack.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | // libs 3 | import { createStackNavigator } from '@react-navigation/stack'; 4 | // scenes 5 | import Home from '../containers/HomeScreen'; 6 | // components 7 | import useTheme from '../hooks/useTheme'; 8 | import IconButton from '../components/shared/IconButton'; 9 | // utils 10 | import { Scale } from '../utils'; 11 | 12 | 13 | interface HomeStackProps { } 14 | 15 | const HomeStackNavigator = createStackNavigator(); 16 | 17 | const HomeStack = ({ }: HomeStackProps) => { 18 | const { theme } = useTheme(); 19 | return ( 20 | 21 | ({ 25 | headerTitleStyle: { color: theme.$text }, 26 | headerStyle: { backgroundColor: theme.$headerBackground }, 27 | headerLeft: () => ( 28 | navigation.openDrawer()} 30 | iconName='menu' 31 | customStyle={{ 32 | padding: Scale.moderateScale(8), 33 | marginLeft: Scale.moderateScale(8), 34 | }} 35 | /> 36 | ), 37 | headerRight: () => ( 38 | navigation.navigate('settings')} 40 | iconName='settings' 41 | customStyle={{ 42 | padding: Scale.moderateScale(8), 43 | marginRight: Scale.moderateScale(8) 44 | }} 45 | /> 46 | ) 47 | })} 48 | /> 49 | 50 | ); 51 | }; 52 | 53 | export default HomeStack; 54 | -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarterTests/ReactNativeUltimateStarterTests.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | #import 5 | #import 6 | 7 | #define TIMEOUT_SECONDS 600 8 | #define TEXT_TO_LOOK_FOR @"Welcome to React" 9 | 10 | @interface ReactNativeUltimateStarterTests : XCTestCase 11 | 12 | @end 13 | 14 | @implementation ReactNativeUltimateStarterTests 15 | 16 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test 17 | { 18 | if (test(view)) { 19 | return YES; 20 | } 21 | for (UIView *subview in [view subviews]) { 22 | if ([self findSubviewInView:subview matching:test]) { 23 | return YES; 24 | } 25 | } 26 | return NO; 27 | } 28 | 29 | - (void)testRendersWelcomeScreen 30 | { 31 | UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; 32 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; 33 | BOOL foundElement = NO; 34 | 35 | __block NSString *redboxError = nil; 36 | #ifdef DEBUG 37 | RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { 38 | if (level >= RCTLogLevelError) { 39 | redboxError = message; 40 | } 41 | }); 42 | #endif 43 | 44 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { 45 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 46 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 47 | 48 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { 49 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { 50 | return YES; 51 | } 52 | return NO; 53 | }]; 54 | } 55 | 56 | #ifdef DEBUG 57 | RCTSetLogFunction(RCTDefaultLogFunction); 58 | #endif 59 | 60 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); 61 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); 62 | } 63 | 64 | 65 | @end 66 | -------------------------------------------------------------------------------- /src/components/shared/Button.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { TouchableWithoutFeedback, TouchableOpacity, TouchableNativeFeedback, View, ViewStyle, StyleProp } from 'react-native'; 3 | // utils 4 | import { PlatformUtils } from '../../utils'; 5 | // hooks 6 | import useTheme from '../../hooks/useTheme'; 7 | 8 | type ButtonProps = React.ComponentProps & { 9 | withoutFeedback?: boolean; 10 | withHitSlop?: boolean; 11 | children: React.ReactNode; 12 | style?: StyleProp; 13 | }; 14 | 15 | const hitSlop = { top: 10, left: 10, right: 10, bottom: 10 }; 16 | 17 | const Button = (props: ButtonProps) => { 18 | const { theme } = useTheme(); 19 | const { withoutFeedback = false, children, style, withHitSlop = false, ...rest } = props; 20 | 21 | const touchableWithoutFeedback = () => ( 22 | 26 | 27 | {children} 28 | 29 | 30 | ); 31 | 32 | const touchableNativeFeedback = () => ( 33 | 44 | 45 | {children} 46 | 47 | 48 | ) 49 | 50 | const touchableOpacity = () => ( 51 | 52 | {children} 53 | 54 | ); 55 | 56 | if (withoutFeedback) { 57 | return touchableWithoutFeedback(); 58 | } else if (PlatformUtils.isAndroid) { 59 | return touchableNativeFeedback(); 60 | } else { 61 | return touchableOpacity(); 62 | } 63 | }; 64 | 65 | export default Button; 66 | -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarter/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #import "AppDelegate.h" 2 | 3 | #import 4 | #import 5 | #import 6 | 7 | #ifdef FB_SONARKIT_ENABLED 8 | #import 9 | #import 10 | #import 11 | #import 12 | #import 13 | #import 14 | 15 | static void InitializeFlipper(UIApplication *application) { 16 | FlipperClient *client = [FlipperClient sharedClient]; 17 | SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults]; 18 | [client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]]; 19 | [client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]]; 20 | [client addPlugin:[FlipperKitReactPlugin new]]; 21 | [client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]]; 22 | [client start]; 23 | } 24 | #endif 25 | 26 | @implementation AppDelegate 27 | 28 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 29 | { 30 | #ifdef FB_SONARKIT_ENABLED 31 | InitializeFlipper(application); 32 | #endif 33 | 34 | RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; 35 | RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge 36 | moduleName:@"ReactNativeUltimateStarter" 37 | initialProperties:nil]; 38 | 39 | rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; 40 | 41 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 42 | UIViewController *rootViewController = [UIViewController new]; 43 | rootViewController.view = rootView; 44 | self.window.rootViewController = rootViewController; 45 | [self.window makeKeyAndVisible]; 46 | return YES; 47 | } 48 | 49 | - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge 50 | { 51 | #if DEBUG 52 | return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; 53 | #else 54 | return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; 55 | #endif 56 | } 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarter/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ReactNativeUltimateStarter 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | LSRequiresIPhoneOS 26 | 27 | NSAppTransportSecurity 28 | 29 | NSAllowsArbitraryLoads 30 | 31 | NSExceptionDomains 32 | 33 | localhost 34 | 35 | NSExceptionAllowsInsecureHTTPLoads 36 | 37 | 38 | 39 | 40 | NSLocationWhenInUseUsageDescription 41 | 42 | UILaunchStoryboardName 43 | LaunchScreen 44 | UIRequiredDeviceCapabilities 45 | 46 | armv7 47 | 48 | UISupportedInterfaceOrientations 49 | 50 | UIInterfaceOrientationPortrait 51 | UIInterfaceOrientationLandscapeLeft 52 | UIInterfaceOrientationLandscapeRight 53 | 54 | UIAppFonts 55 | 56 | AntDesign.ttf 57 | Entypo.ttf 58 | EvilIcons.ttf 59 | Feather.ttf 60 | FontAwesome.ttf 61 | FontAwesome5_Brands.ttf 62 | FontAwesome5_Regular.ttf 63 | FontAwesome5_Solid.ttf 64 | Fontisto.ttf 65 | Foundation.ttf 66 | Ionicons.ttf 67 | MaterialCommunityIcons.ttf 68 | MaterialIcons.ttf 69 | Octicons.ttf 70 | SimpleLineIcons.ttf 71 | Zocial.ttf 72 | 73 | LSApplicationCategoryType 74 | 75 | UIViewControllerBasedStatusBarAppearance 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ReactNativeUltimateStarter", 3 | "version": "0.0.1", 4 | "private": true, 5 | "author": "Yasir Sherzad | ys.sherzad@gmail.com", 6 | "license": "MIT", 7 | "scripts": { 8 | "android": "react-native run-android", 9 | "ios": "react-native run-ios", 10 | "start": "react-native start", 11 | "reset-cache": "npm start -- --reset-cache", 12 | "gradle-clean": "cd android && ./gradlew clean", 13 | "android-test-release": "react-native run-android --variant=release", 14 | "test": "jest", 15 | "lint": "eslint . --ext .js,.jsx,.ts,.tsx" 16 | }, 17 | "dependencies": { 18 | "@react-native-async-storage/async-storage": "^1.13.2", 19 | "@react-native-community/masked-view": "^0.1.10", 20 | "@react-navigation/drawer": "^5.12.3", 21 | "@react-navigation/native": "^5.9.2", 22 | "@react-navigation/stack": "^5.14.2", 23 | "@reduxjs/toolkit": "^1.4.0", 24 | "axios": "^0.21.0", 25 | "install": "^0.13.0", 26 | "npm": "^6.14.8", 27 | "react": "16.13.1", 28 | "react-native": "0.63.4", 29 | "react-native-appearance": "^0.3.4", 30 | "react-native-easy-icon": "^1.0.7", 31 | "react-native-extra-dimensions-android": "^1.2.5", 32 | "react-native-gesture-handler": "^1.10.1", 33 | "react-native-localization": "^2.1.6", 34 | "react-native-reanimated": "^1.13.2", 35 | "react-native-safe-area-context": "^3.1.9", 36 | "react-native-screens": "^2.17.1", 37 | "react-native-vector-icons": "^7.1.0", 38 | "react-redux": "^7.2.2", 39 | "redux-logger": "^3.0.6", 40 | "redux-persist": "^6.0.0", 41 | "redux-thunk": "^2.3.0" 42 | }, 43 | "devDependencies": { 44 | "@babel/core": "^7.8.4", 45 | "@babel/runtime": "^7.8.4", 46 | "@react-native-community/eslint-config": "^1.1.0", 47 | "@testing-library/jest-native": "^3.4.3", 48 | "@testing-library/react-native": "^7.1.0", 49 | "@types/jest": "^25.2.3", 50 | "@types/react-native": "^0.63.2", 51 | "@types/react-redux": "^7.1.11", 52 | "@types/react-test-renderer": "^16.9.2", 53 | "@types/redux-logger": "^3.0.8", 54 | "@typescript-eslint/eslint-plugin": "^2.27.0", 55 | "@typescript-eslint/parser": "^2.27.0", 56 | "babel-jest": "^25.1.0", 57 | "eslint": "^6.5.1", 58 | "jest": "^25.1.0", 59 | "metro-react-native-babel-preset": "^0.59.0", 60 | "react-native-rename": "^2.5.0", 61 | "react-test-renderer": "16.13.1", 62 | "typescript": "^3.8.3" 63 | }, 64 | "jest": { 65 | "preset": "react-native", 66 | "setupFilesAfterEnv": [ 67 | "@testing-library/jest-native/extend-expect" 68 | ], 69 | "moduleFileExtensions": [ 70 | "ts", 71 | "tsx", 72 | "js", 73 | "jsx", 74 | "json", 75 | "node" 76 | ] 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/containers/HomeScreen.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from 'react'; 2 | import { Text, View, Image, StyleSheet } from 'react-native'; 3 | // libs 4 | import { useSelector, useDispatch } from 'react-redux'; 5 | // actions 6 | import { increment } from '../slices/counterSlice'; 7 | import { fetchUsers } from '../slices/usersSlice'; 8 | // types 9 | import { RootState } from '../store/rootReducer'; 10 | // utils 11 | import { Scale, Shape } from '../utils'; 12 | // hooks 13 | import useTheme from '../hooks/useTheme'; 14 | import Button from '../components/shared/Button'; 15 | import IconButton from '../components/shared/IconButton'; 16 | 17 | interface HomeScreenProps { } 18 | 19 | const HomeScreen = ({ }: HomeScreenProps) => { 20 | const { theme } = useTheme(); 21 | const dispatch = useDispatch(); 22 | 23 | // get dummy users list 24 | useEffect(() => { 25 | dispatch(fetchUsers()); 26 | }, []); 27 | 28 | // count state 29 | const { count } = useSelector( 30 | (state: RootState) => state.counter, 31 | ); 32 | // users state 33 | const { users, inProgress, error } = useSelector( 34 | (state: RootState) => state.users 35 | ); 36 | 37 | return ( 38 | 39 | 40 | 41 | 42 | React Native Ultimate Starter 43 | 44 | {count} 45 | 46 | 49 | 50 | 51 | ); 52 | }; 53 | 54 | export default HomeScreen; 55 | 56 | const styles = StyleSheet.create({ 57 | container: { 58 | flex: 1, 59 | justifyContent: 'center', 60 | alignItems: 'center', 61 | padding: Scale.moderateScale(20), 62 | }, 63 | title: { 64 | fontSize: Scale.moderateScale(24), 65 | paddingVertical: Scale.moderateScale(10), 66 | textAlign: 'center' 67 | }, 68 | countText: { 69 | fontSize: Scale.moderateScale(28), 70 | paddingVertical: Scale.moderateScale(50), 71 | textAlign: 'center' 72 | }, 73 | logo: { 74 | height: Scale.moderateScale(120), 75 | width: Scale.moderateScale(120), 76 | resizeMode: 'contain' 77 | }, 78 | btn: { 79 | height: 50, 80 | justifyContent: 'center', 81 | paddingHorizontal: 30, 82 | borderWidth: 1, 83 | ...Shape.semiRound10 84 | } 85 | }); 86 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/reactnativeultimatestarter/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.reactnativeultimatestarter; 2 | 3 | import android.app.Application; 4 | import android.content.Context; 5 | import com.facebook.react.PackageList; 6 | import com.facebook.react.ReactApplication; 7 | import io.expo.appearance.RNCAppearancePackage; 8 | import com.facebook.react.ReactInstanceManager; 9 | import com.facebook.react.ReactNativeHost; 10 | import com.facebook.react.ReactPackage; 11 | import com.facebook.soloader.SoLoader; 12 | import java.lang.reflect.InvocationTargetException; 13 | import java.util.List; 14 | 15 | public class MainApplication extends Application implements ReactApplication { 16 | 17 | private final ReactNativeHost mReactNativeHost = 18 | new ReactNativeHost(this) { 19 | @Override 20 | public boolean getUseDeveloperSupport() { 21 | return BuildConfig.DEBUG; 22 | } 23 | 24 | @Override 25 | protected List getPackages() { 26 | @SuppressWarnings("UnnecessaryLocalVariable") 27 | List packages = new PackageList(this).getPackages(); 28 | // Packages that cannot be autolinked yet can be added manually here, for example: 29 | // packages.add(new MyReactNativePackage()); 30 | return packages; 31 | } 32 | 33 | @Override 34 | protected String getJSMainModuleName() { 35 | return "index"; 36 | } 37 | }; 38 | 39 | @Override 40 | public ReactNativeHost getReactNativeHost() { 41 | return mReactNativeHost; 42 | } 43 | 44 | @Override 45 | public void onCreate() { 46 | super.onCreate(); 47 | SoLoader.init(this, /* native exopackage */ false); 48 | initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); 49 | } 50 | 51 | /** 52 | * Loads Flipper in React Native templates. Call this in the onCreate method with something like 53 | * initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); 54 | * 55 | * @param context 56 | * @param reactInstanceManager 57 | */ 58 | private static void initializeFlipper( 59 | Context context, ReactInstanceManager reactInstanceManager) { 60 | if (BuildConfig.DEBUG) { 61 | try { 62 | /* 63 | We use reflection here to pick up the class that initializes Flipper, 64 | since Flipper library is not available in release mode 65 | */ 66 | Class aClass = Class.forName("com.reactnativeultimatestarter.ReactNativeFlipper"); 67 | aClass 68 | .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class) 69 | .invoke(null, context, reactInstanceManager); 70 | } catch (ClassNotFoundException e) { 71 | e.printStackTrace(); 72 | } catch (NoSuchMethodException e) { 73 | e.printStackTrace(); 74 | } catch (IllegalAccessException e) { 75 | e.printStackTrace(); 76 | } catch (InvocationTargetException e) { 77 | e.printStackTrace(); 78 | } 79 | } 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto init 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto init 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :init 68 | @rem Get command-line arguments, handling Windows variants 69 | 70 | if not "%OS%" == "Windows_NT" goto win9xME_args 71 | 72 | :win9xME_args 73 | @rem Slurp the command line arguments. 74 | set CMD_LINE_ARGS= 75 | set _SKIP=2 76 | 77 | :win9xME_args_slurp 78 | if "x%~1" == "x" goto execute 79 | 80 | set CMD_LINE_ARGS=%* 81 | 82 | :execute 83 | @rem Setup the command line 84 | 85 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 86 | 87 | @rem Execute Gradle 88 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 89 | 90 | :end 91 | @rem End local scope for the variables with windows NT shell 92 | if "%ERRORLEVEL%"=="0" goto mainEnd 93 | 94 | :fail 95 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 96 | rem the _cmd.exe /c_ return code! 97 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 98 | exit /b 1 99 | 100 | :mainEnd 101 | if "%OS%"=="Windows_NT" endlocal 102 | 103 | :omega 104 | -------------------------------------------------------------------------------- /android/app/src/debug/java/com/reactnativeultimatestarter/ReactNativeFlipper.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | *

This source code is licensed under the MIT license found in the LICENSE file in the root 5 | * directory of this source tree. 6 | */ 7 | package com.reactnativeultimatestarter; 8 | 9 | import android.content.Context; 10 | import com.facebook.flipper.android.AndroidFlipperClient; 11 | import com.facebook.flipper.android.utils.FlipperUtils; 12 | import com.facebook.flipper.core.FlipperClient; 13 | import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin; 14 | import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin; 15 | import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin; 16 | import com.facebook.flipper.plugins.inspector.DescriptorMapping; 17 | import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; 18 | import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; 19 | import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; 20 | import com.facebook.flipper.plugins.react.ReactFlipperPlugin; 21 | import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; 22 | import com.facebook.react.ReactInstanceManager; 23 | import com.facebook.react.bridge.ReactContext; 24 | import com.facebook.react.modules.network.NetworkingModule; 25 | import okhttp3.OkHttpClient; 26 | 27 | public class ReactNativeFlipper { 28 | public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { 29 | if (FlipperUtils.shouldEnableFlipper(context)) { 30 | final FlipperClient client = AndroidFlipperClient.getInstance(context); 31 | 32 | client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())); 33 | client.addPlugin(new ReactFlipperPlugin()); 34 | client.addPlugin(new DatabasesFlipperPlugin(context)); 35 | client.addPlugin(new SharedPreferencesFlipperPlugin(context)); 36 | client.addPlugin(CrashReporterPlugin.getInstance()); 37 | 38 | NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin(); 39 | NetworkingModule.setCustomClientBuilder( 40 | new NetworkingModule.CustomClientBuilder() { 41 | @Override 42 | public void apply(OkHttpClient.Builder builder) { 43 | builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); 44 | } 45 | }); 46 | client.addPlugin(networkFlipperPlugin); 47 | client.start(); 48 | 49 | // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized 50 | // Hence we run if after all native modules have been initialized 51 | ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); 52 | if (reactContext == null) { 53 | reactInstanceManager.addReactInstanceEventListener( 54 | new ReactInstanceManager.ReactInstanceEventListener() { 55 | @Override 56 | public void onReactContextInitialized(ReactContext reactContext) { 57 | reactInstanceManager.removeReactInstanceEventListener(this); 58 | reactContext.runOnNativeModulesQueueThread( 59 | new Runnable() { 60 | @Override 61 | public void run() { 62 | client.addPlugin(new FrescoFlipperPlugin()); 63 | } 64 | }); 65 | } 66 | }); 67 | } else { 68 | client.addPlugin(new FrescoFlipperPlugin()); 69 | } 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarter.xcodeproj/xcshareddata/xcschemes/ReactNativeUltimateStarter.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 53 | 55 | 61 | 62 | 63 | 64 | 70 | 72 | 78 | 79 | 80 | 81 | 83 | 84 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarter.xcodeproj/xcshareddata/xcschemes/ReactNativeUltimateStarter-tvOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 53 | 55 | 61 | 62 | 63 | 64 | 70 | 72 | 78 | 79 | 80 | 81 | 83 | 84 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "compilerOptions": { 4 | /* Basic Options */ 5 | "target": "esnext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ 6 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 7 | "lib": ["es6"], /* Specify library files to be included in the compilation. */ 8 | "allowJs": true, /* Allow javascript files to be compiled. */ 9 | // "checkJs": true, /* Report errors in .js files. */ 10 | "jsx": "react-native", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 11 | // "declaration": true, /* Generates corresponding '.d.ts' file. */ 12 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 13 | // "outFile": "./", /* Concatenate and emit output to single file. */ 14 | // "outDir": "./", /* Redirect output structure to the directory. */ 15 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 16 | // "removeComments": true, /* Do not emit comments to output. */ 17 | "noEmit": true, /* Do not emit outputs. */ 18 | // "incremental": true, /* Enable incremental compilation */ 19 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 20 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 21 | "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 22 | 23 | /* Strict Type-Checking Options */ 24 | "strict": true, /* Enable all strict type-checking options. */ 25 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 26 | // "strictNullChecks": true, /* Enable strict null checks. */ 27 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 28 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 29 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 30 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 31 | 32 | /* Additional Checks */ 33 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 34 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 35 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 36 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 37 | 38 | /* Module Resolution Options */ 39 | "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 40 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 41 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 42 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 43 | // "typeRoots": [], /* List of folders to include type definitions from. */ 44 | // "types": [], /* Type declaration files to be included in compilation. */ 45 | "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 46 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 47 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 48 | 49 | /* Source Map Options */ 50 | // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 51 | // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */ 52 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 53 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 54 | 55 | /* Experimental Options */ 56 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 57 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 58 | }, 59 | "exclude": [ 60 | "node_modules", "babel.config.js", "metro.config.js", "jest.config.js" 61 | ] 62 | } 63 | -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarter/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 25 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /android/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # 4 | # Copyright 2015 the original author or authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | ## 21 | ## Gradle start up script for UN*X 22 | ## 23 | ############################################################################## 24 | 25 | # Attempt to set APP_HOME 26 | # Resolve links: $0 may be a link 27 | PRG="$0" 28 | # Need this for relative symlinks. 29 | while [ -h "$PRG" ] ; do 30 | ls=`ls -ld "$PRG"` 31 | link=`expr "$ls" : '.*-> \(.*\)$'` 32 | if expr "$link" : '/.*' > /dev/null; then 33 | PRG="$link" 34 | else 35 | PRG=`dirname "$PRG"`"/$link" 36 | fi 37 | done 38 | SAVED="`pwd`" 39 | cd "`dirname \"$PRG\"`/" >/dev/null 40 | APP_HOME="`pwd -P`" 41 | cd "$SAVED" >/dev/null 42 | 43 | APP_NAME="Gradle" 44 | APP_BASE_NAME=`basename "$0"` 45 | 46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 | 49 | # Use the maximum available, or set MAX_FD != -1 to use that value. 50 | MAX_FD="maximum" 51 | 52 | warn () { 53 | echo "$*" 54 | } 55 | 56 | die () { 57 | echo 58 | echo "$*" 59 | echo 60 | exit 1 61 | } 62 | 63 | # OS specific support (must be 'true' or 'false'). 64 | cygwin=false 65 | msys=false 66 | darwin=false 67 | nonstop=false 68 | case "`uname`" in 69 | CYGWIN* ) 70 | cygwin=true 71 | ;; 72 | Darwin* ) 73 | darwin=true 74 | ;; 75 | MINGW* ) 76 | msys=true 77 | ;; 78 | NONSTOP* ) 79 | nonstop=true 80 | ;; 81 | esac 82 | 83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 | 85 | # Determine the Java command to use to start the JVM. 86 | if [ -n "$JAVA_HOME" ] ; then 87 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 88 | # IBM's JDK on AIX uses strange locations for the executables 89 | JAVACMD="$JAVA_HOME/jre/sh/java" 90 | else 91 | JAVACMD="$JAVA_HOME/bin/java" 92 | fi 93 | if [ ! -x "$JAVACMD" ] ; then 94 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 95 | 96 | Please set the JAVA_HOME variable in your environment to match the 97 | location of your Java installation." 98 | fi 99 | else 100 | JAVACMD="java" 101 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 102 | 103 | Please set the JAVA_HOME variable in your environment to match the 104 | location of your Java installation." 105 | fi 106 | 107 | # Increase the maximum file descriptors if we can. 108 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 109 | MAX_FD_LIMIT=`ulimit -H -n` 110 | if [ $? -eq 0 ] ; then 111 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 112 | MAX_FD="$MAX_FD_LIMIT" 113 | fi 114 | ulimit -n $MAX_FD 115 | if [ $? -ne 0 ] ; then 116 | warn "Could not set maximum file descriptor limit: $MAX_FD" 117 | fi 118 | else 119 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 120 | fi 121 | fi 122 | 123 | # For Darwin, add options to specify how the application appears in the dock 124 | if $darwin; then 125 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 126 | fi 127 | 128 | # For Cygwin or MSYS, switch paths to Windows format before running java 129 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then 130 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 131 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 132 | JAVACMD=`cygpath --unix "$JAVACMD"` 133 | 134 | # We build the pattern for arguments to be converted via cygpath 135 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 136 | SEP="" 137 | for dir in $ROOTDIRSRAW ; do 138 | ROOTDIRS="$ROOTDIRS$SEP$dir" 139 | SEP="|" 140 | done 141 | OURCYGPATTERN="(^($ROOTDIRS))" 142 | # Add a user-defined pattern to the cygpath arguments 143 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 144 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 145 | fi 146 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 147 | i=0 148 | for arg in "$@" ; do 149 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 150 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 151 | 152 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 153 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 154 | else 155 | eval `echo args$i`="\"$arg\"" 156 | fi 157 | i=`expr $i + 1` 158 | done 159 | case $i in 160 | 0) set -- ;; 161 | 1) set -- "$args0" ;; 162 | 2) set -- "$args0" "$args1" ;; 163 | 3) set -- "$args0" "$args1" "$args2" ;; 164 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 165 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 166 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 167 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 168 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 169 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 170 | esac 171 | fi 172 | 173 | # Escape application args 174 | save () { 175 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 176 | echo " " 177 | } 178 | APP_ARGS=`save "$@"` 179 | 180 | # Collect all arguments for the java command, following the shell quoting and substitution rules 181 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 182 | 183 | exec "$JAVACMD" "$@" 184 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: "com.android.application" 2 | apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" 3 | 4 | import com.android.build.OutputFile 5 | 6 | /** 7 | * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets 8 | * and bundleReleaseJsAndAssets). 9 | * These basically call `react-native bundle` with the correct arguments during the Android build 10 | * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the 11 | * bundle directly from the development server. Below you can see all the possible configurations 12 | * and their defaults. If you decide to add a configuration block, make sure to add it before the 13 | * `apply from: "../../node_modules/react-native/react.gradle"` line. 14 | * 15 | * project.ext.react = [ 16 | * // the name of the generated asset file containing your JS bundle 17 | * bundleAssetName: "index.android.bundle", 18 | * 19 | * // the entry file for bundle generation. If none specified and 20 | * // "index.android.js" exists, it will be used. Otherwise "index.js" is 21 | * // default. Can be overridden with ENTRY_FILE environment variable. 22 | * entryFile: "index.android.js", 23 | * 24 | * // https://reactnative.dev/docs/performance#enable-the-ram-format 25 | * bundleCommand: "ram-bundle", 26 | * 27 | * // whether to bundle JS and assets in debug mode 28 | * bundleInDebug: false, 29 | * 30 | * // whether to bundle JS and assets in release mode 31 | * bundleInRelease: true, 32 | * 33 | * // whether to bundle JS and assets in another build variant (if configured). 34 | * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants 35 | * // The configuration property can be in the following formats 36 | * // 'bundleIn${productFlavor}${buildType}' 37 | * // 'bundleIn${buildType}' 38 | * // bundleInFreeDebug: true, 39 | * // bundleInPaidRelease: true, 40 | * // bundleInBeta: true, 41 | * 42 | * // whether to disable dev mode in custom build variants (by default only disabled in release) 43 | * // for example: to disable dev mode in the staging build type (if configured) 44 | * devDisabledInStaging: true, 45 | * // The configuration property can be in the following formats 46 | * // 'devDisabledIn${productFlavor}${buildType}' 47 | * // 'devDisabledIn${buildType}' 48 | * 49 | * // the root of your project, i.e. where "package.json" lives 50 | * root: "../../", 51 | * 52 | * // where to put the JS bundle asset in debug mode 53 | * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", 54 | * 55 | * // where to put the JS bundle asset in release mode 56 | * jsBundleDirRelease: "$buildDir/intermediates/assets/release", 57 | * 58 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 59 | * // require('./image.png')), in debug mode 60 | * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", 61 | * 62 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 63 | * // require('./image.png')), in release mode 64 | * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", 65 | * 66 | * // by default the gradle tasks are skipped if none of the JS files or assets change; this means 67 | * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to 68 | * // date; if you have any other folders that you want to ignore for performance reasons (gradle 69 | * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ 70 | * // for example, you might want to remove it from here. 71 | * inputExcludes: ["android/**", "ios/**"], 72 | * 73 | * // override which node gets called and with what additional arguments 74 | * nodeExecutableAndArgs: ["node"], 75 | * 76 | * // supply additional arguments to the packager 77 | * extraPackagerArgs: [] 78 | * ] 79 | */ 80 | 81 | project.ext.react = [ 82 | enableHermes: false, // clean and rebuild if changing 83 | ] 84 | 85 | apply from: "../../node_modules/react-native/react.gradle" 86 | 87 | /** 88 | * Set this to true to create two separate APKs instead of one: 89 | * - An APK that only works on ARM devices 90 | * - An APK that only works on x86 devices 91 | * The advantage is the size of the APK is reduced by about 4MB. 92 | * Upload all the APKs to the Play Store and people will download 93 | * the correct one based on the CPU architecture of their device. 94 | */ 95 | def enableSeparateBuildPerCPUArchitecture = false 96 | 97 | /** 98 | * Run Proguard to shrink the Java bytecode in release builds. 99 | */ 100 | def enableProguardInReleaseBuilds = false 101 | 102 | /** 103 | * The preferred build flavor of JavaScriptCore. 104 | * 105 | * For example, to use the international variant, you can use: 106 | * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` 107 | * 108 | * The international variant includes ICU i18n library and necessary data 109 | * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that 110 | * give correct results when using with locales other than en-US. Note that 111 | * this variant is about 6MiB larger per architecture than default. 112 | */ 113 | def jscFlavor = 'org.webkit:android-jsc:+' 114 | 115 | /** 116 | * Whether to enable the Hermes VM. 117 | * 118 | * This should be set on project.ext.react and mirrored here. If it is not set 119 | * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode 120 | * and the benefits of using Hermes will therefore be sharply reduced. 121 | */ 122 | def enableHermes = project.ext.react.get("enableHermes", false); 123 | 124 | android { 125 | compileSdkVersion rootProject.ext.compileSdkVersion 126 | 127 | compileOptions { 128 | sourceCompatibility JavaVersion.VERSION_1_8 129 | targetCompatibility JavaVersion.VERSION_1_8 130 | } 131 | 132 | defaultConfig { 133 | applicationId "com.reactnativeultimatestarter" 134 | minSdkVersion rootProject.ext.minSdkVersion 135 | targetSdkVersion rootProject.ext.targetSdkVersion 136 | versionCode 1 137 | versionName "1.0" 138 | } 139 | splits { 140 | abi { 141 | reset() 142 | enable enableSeparateBuildPerCPUArchitecture 143 | universalApk false // If true, also generate a universal APK 144 | include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" 145 | } 146 | } 147 | signingConfigs { 148 | debug { 149 | storeFile file('debug.keystore') 150 | storePassword 'android' 151 | keyAlias 'androiddebugkey' 152 | keyPassword 'android' 153 | } 154 | } 155 | buildTypes { 156 | debug { 157 | signingConfig signingConfigs.debug 158 | } 159 | release { 160 | // Caution! In production, you need to generate your own keystore file. 161 | // see https://reactnative.dev/docs/signed-apk-android. 162 | signingConfig signingConfigs.debug 163 | minifyEnabled enableProguardInReleaseBuilds 164 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" 165 | } 166 | } 167 | 168 | // applicationVariants are e.g. debug, release 169 | applicationVariants.all { variant -> 170 | variant.outputs.each { output -> 171 | // For each separate APK per architecture, set a unique version code as described here: 172 | // https://developer.android.com/studio/build/configure-apk-splits.html 173 | def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] 174 | def abi = output.getFilter(OutputFile.ABI) 175 | if (abi != null) { // null for the universal-debug, universal-release variants 176 | output.versionCodeOverride = 177 | versionCodes.get(abi) * 1048576 + defaultConfig.versionCode 178 | } 179 | 180 | } 181 | } 182 | } 183 | 184 | dependencies { 185 | implementation fileTree(dir: "libs", include: ["*.jar"]) 186 | //noinspection GradleDynamicVersion 187 | implementation "com.facebook.react:react-native:+" // From node_modules 188 | 189 | implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" 190 | implementation 'com.android.support:multidex:1.0.3' 191 | 192 | debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") { 193 | exclude group:'com.facebook.fbjni' 194 | } 195 | 196 | debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { 197 | exclude group:'com.facebook.flipper' 198 | exclude group:'com.squareup.okhttp3', module:'okhttp' 199 | } 200 | 201 | debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") { 202 | exclude group:'com.facebook.flipper' 203 | } 204 | 205 | if (enableHermes) { 206 | def hermesPath = "../../node_modules/hermes-engine/android/"; 207 | debugImplementation files(hermesPath + "hermes-debug.aar") 208 | releaseImplementation files(hermesPath + "hermes-release.aar") 209 | } else { 210 | implementation jscFlavor 211 | } 212 | } 213 | 214 | // Run this once to be able to run the application with BUCK 215 | // puts all compile dependencies into folder libs for BUCK to use 216 | task copyDownloadableDepsToLibs(type: Copy) { 217 | from configurations.compile 218 | into 'libs' 219 | } 220 | 221 | apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) 222 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - boost-for-react-native (1.63.0) 3 | - CocoaAsyncSocket (7.6.4) 4 | - CocoaLibEvent (1.0.0) 5 | - DoubleConversion (1.1.6) 6 | - FBLazyVector (0.63.4) 7 | - FBReactNativeSpec (0.63.4): 8 | - Folly (= 2020.01.13.00) 9 | - RCTRequired (= 0.63.4) 10 | - RCTTypeSafety (= 0.63.4) 11 | - React-Core (= 0.63.4) 12 | - React-jsi (= 0.63.4) 13 | - ReactCommon/turbomodule/core (= 0.63.4) 14 | - Flipper (0.54.0): 15 | - Flipper-Folly (~> 2.2) 16 | - Flipper-RSocket (~> 1.1) 17 | - Flipper-DoubleConversion (1.1.7) 18 | - Flipper-Folly (2.3.0): 19 | - boost-for-react-native 20 | - CocoaLibEvent (~> 1.0) 21 | - Flipper-DoubleConversion 22 | - Flipper-Glog 23 | - OpenSSL-Universal (= 1.0.2.20) 24 | - Flipper-Glog (0.3.6) 25 | - Flipper-PeerTalk (0.0.4) 26 | - Flipper-RSocket (1.1.0): 27 | - Flipper-Folly (~> 2.2) 28 | - FlipperKit (0.54.0): 29 | - FlipperKit/Core (= 0.54.0) 30 | - FlipperKit/Core (0.54.0): 31 | - Flipper (~> 0.54.0) 32 | - FlipperKit/CppBridge 33 | - FlipperKit/FBCxxFollyDynamicConvert 34 | - FlipperKit/FBDefines 35 | - FlipperKit/FKPortForwarding 36 | - FlipperKit/CppBridge (0.54.0): 37 | - Flipper (~> 0.54.0) 38 | - FlipperKit/FBCxxFollyDynamicConvert (0.54.0): 39 | - Flipper-Folly (~> 2.2) 40 | - FlipperKit/FBDefines (0.54.0) 41 | - FlipperKit/FKPortForwarding (0.54.0): 42 | - CocoaAsyncSocket (~> 7.6) 43 | - Flipper-PeerTalk (~> 0.0.4) 44 | - FlipperKit/FlipperKitHighlightOverlay (0.54.0) 45 | - FlipperKit/FlipperKitLayoutPlugin (0.54.0): 46 | - FlipperKit/Core 47 | - FlipperKit/FlipperKitHighlightOverlay 48 | - FlipperKit/FlipperKitLayoutTextSearchable 49 | - YogaKit (~> 1.18) 50 | - FlipperKit/FlipperKitLayoutTextSearchable (0.54.0) 51 | - FlipperKit/FlipperKitNetworkPlugin (0.54.0): 52 | - FlipperKit/Core 53 | - FlipperKit/FlipperKitReactPlugin (0.54.0): 54 | - FlipperKit/Core 55 | - FlipperKit/FlipperKitUserDefaultsPlugin (0.54.0): 56 | - FlipperKit/Core 57 | - FlipperKit/SKIOSNetworkPlugin (0.54.0): 58 | - FlipperKit/Core 59 | - FlipperKit/FlipperKitNetworkPlugin 60 | - Folly (2020.01.13.00): 61 | - boost-for-react-native 62 | - DoubleConversion 63 | - Folly/Default (= 2020.01.13.00) 64 | - glog 65 | - Folly/Default (2020.01.13.00): 66 | - boost-for-react-native 67 | - DoubleConversion 68 | - glog 69 | - glog (0.3.5) 70 | - OpenSSL-Universal (1.0.2.20): 71 | - OpenSSL-Universal/Static (= 1.0.2.20) 72 | - OpenSSL-Universal/Static (1.0.2.20) 73 | - RCTRequired (0.63.4) 74 | - RCTTypeSafety (0.63.4): 75 | - FBLazyVector (= 0.63.4) 76 | - Folly (= 2020.01.13.00) 77 | - RCTRequired (= 0.63.4) 78 | - React-Core (= 0.63.4) 79 | - React (0.63.4): 80 | - React-Core (= 0.63.4) 81 | - React-Core/DevSupport (= 0.63.4) 82 | - React-Core/RCTWebSocket (= 0.63.4) 83 | - React-RCTActionSheet (= 0.63.4) 84 | - React-RCTAnimation (= 0.63.4) 85 | - React-RCTBlob (= 0.63.4) 86 | - React-RCTImage (= 0.63.4) 87 | - React-RCTLinking (= 0.63.4) 88 | - React-RCTNetwork (= 0.63.4) 89 | - React-RCTSettings (= 0.63.4) 90 | - React-RCTText (= 0.63.4) 91 | - React-RCTVibration (= 0.63.4) 92 | - React-callinvoker (0.63.4) 93 | - React-Core (0.63.4): 94 | - Folly (= 2020.01.13.00) 95 | - glog 96 | - React-Core/Default (= 0.63.4) 97 | - React-cxxreact (= 0.63.4) 98 | - React-jsi (= 0.63.4) 99 | - React-jsiexecutor (= 0.63.4) 100 | - Yoga 101 | - React-Core/CoreModulesHeaders (0.63.4): 102 | - Folly (= 2020.01.13.00) 103 | - glog 104 | - React-Core/Default 105 | - React-cxxreact (= 0.63.4) 106 | - React-jsi (= 0.63.4) 107 | - React-jsiexecutor (= 0.63.4) 108 | - Yoga 109 | - React-Core/Default (0.63.4): 110 | - Folly (= 2020.01.13.00) 111 | - glog 112 | - React-cxxreact (= 0.63.4) 113 | - React-jsi (= 0.63.4) 114 | - React-jsiexecutor (= 0.63.4) 115 | - Yoga 116 | - React-Core/DevSupport (0.63.4): 117 | - Folly (= 2020.01.13.00) 118 | - glog 119 | - React-Core/Default (= 0.63.4) 120 | - React-Core/RCTWebSocket (= 0.63.4) 121 | - React-cxxreact (= 0.63.4) 122 | - React-jsi (= 0.63.4) 123 | - React-jsiexecutor (= 0.63.4) 124 | - React-jsinspector (= 0.63.4) 125 | - Yoga 126 | - React-Core/RCTActionSheetHeaders (0.63.4): 127 | - Folly (= 2020.01.13.00) 128 | - glog 129 | - React-Core/Default 130 | - React-cxxreact (= 0.63.4) 131 | - React-jsi (= 0.63.4) 132 | - React-jsiexecutor (= 0.63.4) 133 | - Yoga 134 | - React-Core/RCTAnimationHeaders (0.63.4): 135 | - Folly (= 2020.01.13.00) 136 | - glog 137 | - React-Core/Default 138 | - React-cxxreact (= 0.63.4) 139 | - React-jsi (= 0.63.4) 140 | - React-jsiexecutor (= 0.63.4) 141 | - Yoga 142 | - React-Core/RCTBlobHeaders (0.63.4): 143 | - Folly (= 2020.01.13.00) 144 | - glog 145 | - React-Core/Default 146 | - React-cxxreact (= 0.63.4) 147 | - React-jsi (= 0.63.4) 148 | - React-jsiexecutor (= 0.63.4) 149 | - Yoga 150 | - React-Core/RCTImageHeaders (0.63.4): 151 | - Folly (= 2020.01.13.00) 152 | - glog 153 | - React-Core/Default 154 | - React-cxxreact (= 0.63.4) 155 | - React-jsi (= 0.63.4) 156 | - React-jsiexecutor (= 0.63.4) 157 | - Yoga 158 | - React-Core/RCTLinkingHeaders (0.63.4): 159 | - Folly (= 2020.01.13.00) 160 | - glog 161 | - React-Core/Default 162 | - React-cxxreact (= 0.63.4) 163 | - React-jsi (= 0.63.4) 164 | - React-jsiexecutor (= 0.63.4) 165 | - Yoga 166 | - React-Core/RCTNetworkHeaders (0.63.4): 167 | - Folly (= 2020.01.13.00) 168 | - glog 169 | - React-Core/Default 170 | - React-cxxreact (= 0.63.4) 171 | - React-jsi (= 0.63.4) 172 | - React-jsiexecutor (= 0.63.4) 173 | - Yoga 174 | - React-Core/RCTSettingsHeaders (0.63.4): 175 | - Folly (= 2020.01.13.00) 176 | - glog 177 | - React-Core/Default 178 | - React-cxxreact (= 0.63.4) 179 | - React-jsi (= 0.63.4) 180 | - React-jsiexecutor (= 0.63.4) 181 | - Yoga 182 | - React-Core/RCTTextHeaders (0.63.4): 183 | - Folly (= 2020.01.13.00) 184 | - glog 185 | - React-Core/Default 186 | - React-cxxreact (= 0.63.4) 187 | - React-jsi (= 0.63.4) 188 | - React-jsiexecutor (= 0.63.4) 189 | - Yoga 190 | - React-Core/RCTVibrationHeaders (0.63.4): 191 | - Folly (= 2020.01.13.00) 192 | - glog 193 | - React-Core/Default 194 | - React-cxxreact (= 0.63.4) 195 | - React-jsi (= 0.63.4) 196 | - React-jsiexecutor (= 0.63.4) 197 | - Yoga 198 | - React-Core/RCTWebSocket (0.63.4): 199 | - Folly (= 2020.01.13.00) 200 | - glog 201 | - React-Core/Default (= 0.63.4) 202 | - React-cxxreact (= 0.63.4) 203 | - React-jsi (= 0.63.4) 204 | - React-jsiexecutor (= 0.63.4) 205 | - Yoga 206 | - React-CoreModules (0.63.4): 207 | - FBReactNativeSpec (= 0.63.4) 208 | - Folly (= 2020.01.13.00) 209 | - RCTTypeSafety (= 0.63.4) 210 | - React-Core/CoreModulesHeaders (= 0.63.4) 211 | - React-jsi (= 0.63.4) 212 | - React-RCTImage (= 0.63.4) 213 | - ReactCommon/turbomodule/core (= 0.63.4) 214 | - React-cxxreact (0.63.4): 215 | - boost-for-react-native (= 1.63.0) 216 | - DoubleConversion 217 | - Folly (= 2020.01.13.00) 218 | - glog 219 | - React-callinvoker (= 0.63.4) 220 | - React-jsinspector (= 0.63.4) 221 | - React-jsi (0.63.4): 222 | - boost-for-react-native (= 1.63.0) 223 | - DoubleConversion 224 | - Folly (= 2020.01.13.00) 225 | - glog 226 | - React-jsi/Default (= 0.63.4) 227 | - React-jsi/Default (0.63.4): 228 | - boost-for-react-native (= 1.63.0) 229 | - DoubleConversion 230 | - Folly (= 2020.01.13.00) 231 | - glog 232 | - React-jsiexecutor (0.63.4): 233 | - DoubleConversion 234 | - Folly (= 2020.01.13.00) 235 | - glog 236 | - React-cxxreact (= 0.63.4) 237 | - React-jsi (= 0.63.4) 238 | - React-jsinspector (0.63.4) 239 | - react-native-appearance (0.3.4): 240 | - React 241 | - react-native-safe-area-context (3.1.9): 242 | - React-Core 243 | - React-RCTActionSheet (0.63.4): 244 | - React-Core/RCTActionSheetHeaders (= 0.63.4) 245 | - React-RCTAnimation (0.63.4): 246 | - FBReactNativeSpec (= 0.63.4) 247 | - Folly (= 2020.01.13.00) 248 | - RCTTypeSafety (= 0.63.4) 249 | - React-Core/RCTAnimationHeaders (= 0.63.4) 250 | - React-jsi (= 0.63.4) 251 | - ReactCommon/turbomodule/core (= 0.63.4) 252 | - React-RCTBlob (0.63.4): 253 | - FBReactNativeSpec (= 0.63.4) 254 | - Folly (= 2020.01.13.00) 255 | - React-Core/RCTBlobHeaders (= 0.63.4) 256 | - React-Core/RCTWebSocket (= 0.63.4) 257 | - React-jsi (= 0.63.4) 258 | - React-RCTNetwork (= 0.63.4) 259 | - ReactCommon/turbomodule/core (= 0.63.4) 260 | - React-RCTImage (0.63.4): 261 | - FBReactNativeSpec (= 0.63.4) 262 | - Folly (= 2020.01.13.00) 263 | - RCTTypeSafety (= 0.63.4) 264 | - React-Core/RCTImageHeaders (= 0.63.4) 265 | - React-jsi (= 0.63.4) 266 | - React-RCTNetwork (= 0.63.4) 267 | - ReactCommon/turbomodule/core (= 0.63.4) 268 | - React-RCTLinking (0.63.4): 269 | - FBReactNativeSpec (= 0.63.4) 270 | - React-Core/RCTLinkingHeaders (= 0.63.4) 271 | - React-jsi (= 0.63.4) 272 | - ReactCommon/turbomodule/core (= 0.63.4) 273 | - React-RCTNetwork (0.63.4): 274 | - FBReactNativeSpec (= 0.63.4) 275 | - Folly (= 2020.01.13.00) 276 | - RCTTypeSafety (= 0.63.4) 277 | - React-Core/RCTNetworkHeaders (= 0.63.4) 278 | - React-jsi (= 0.63.4) 279 | - ReactCommon/turbomodule/core (= 0.63.4) 280 | - React-RCTSettings (0.63.4): 281 | - FBReactNativeSpec (= 0.63.4) 282 | - Folly (= 2020.01.13.00) 283 | - RCTTypeSafety (= 0.63.4) 284 | - React-Core/RCTSettingsHeaders (= 0.63.4) 285 | - React-jsi (= 0.63.4) 286 | - ReactCommon/turbomodule/core (= 0.63.4) 287 | - React-RCTText (0.63.4): 288 | - React-Core/RCTTextHeaders (= 0.63.4) 289 | - React-RCTVibration (0.63.4): 290 | - FBReactNativeSpec (= 0.63.4) 291 | - Folly (= 2020.01.13.00) 292 | - React-Core/RCTVibrationHeaders (= 0.63.4) 293 | - React-jsi (= 0.63.4) 294 | - ReactCommon/turbomodule/core (= 0.63.4) 295 | - ReactCommon/turbomodule/core (0.63.4): 296 | - DoubleConversion 297 | - Folly (= 2020.01.13.00) 298 | - glog 299 | - React-callinvoker (= 0.63.4) 300 | - React-Core (= 0.63.4) 301 | - React-cxxreact (= 0.63.4) 302 | - React-jsi (= 0.63.4) 303 | - ReactNativeLocalization (2.1.6): 304 | - React 305 | - RNCAsyncStorage (1.13.2): 306 | - React 307 | - RNCMaskedView (0.1.10): 308 | - React 309 | - RNGestureHandler (1.10.1): 310 | - React-Core 311 | - RNReanimated (1.13.2): 312 | - React-Core 313 | - RNScreens (2.17.1): 314 | - React-Core 315 | - RNVectorIcons (7.1.0): 316 | - React 317 | - Yoga (1.14.0) 318 | - YogaKit (1.18.1): 319 | - Yoga (~> 1.14) 320 | 321 | DEPENDENCIES: 322 | - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) 323 | - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) 324 | - FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`) 325 | - Flipper (~> 0.54.0) 326 | - Flipper-DoubleConversion (= 1.1.7) 327 | - Flipper-Folly (~> 2.2) 328 | - Flipper-Glog (= 0.3.6) 329 | - Flipper-PeerTalk (~> 0.0.4) 330 | - Flipper-RSocket (~> 1.1) 331 | - FlipperKit (~> 0.54.0) 332 | - FlipperKit/Core (~> 0.54.0) 333 | - FlipperKit/CppBridge (~> 0.54.0) 334 | - FlipperKit/FBCxxFollyDynamicConvert (~> 0.54.0) 335 | - FlipperKit/FBDefines (~> 0.54.0) 336 | - FlipperKit/FKPortForwarding (~> 0.54.0) 337 | - FlipperKit/FlipperKitHighlightOverlay (~> 0.54.0) 338 | - FlipperKit/FlipperKitLayoutPlugin (~> 0.54.0) 339 | - FlipperKit/FlipperKitLayoutTextSearchable (~> 0.54.0) 340 | - FlipperKit/FlipperKitNetworkPlugin (~> 0.54.0) 341 | - FlipperKit/FlipperKitReactPlugin (~> 0.54.0) 342 | - FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.54.0) 343 | - FlipperKit/SKIOSNetworkPlugin (~> 0.54.0) 344 | - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`) 345 | - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) 346 | - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) 347 | - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) 348 | - React (from `../node_modules/react-native/`) 349 | - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) 350 | - React-Core (from `../node_modules/react-native/`) 351 | - React-Core/DevSupport (from `../node_modules/react-native/`) 352 | - React-Core/RCTWebSocket (from `../node_modules/react-native/`) 353 | - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) 354 | - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) 355 | - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) 356 | - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) 357 | - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) 358 | - react-native-appearance (from `../node_modules/react-native-appearance`) 359 | - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) 360 | - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) 361 | - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) 362 | - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) 363 | - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) 364 | - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) 365 | - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) 366 | - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) 367 | - React-RCTText (from `../node_modules/react-native/Libraries/Text`) 368 | - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) 369 | - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) 370 | - ReactNativeLocalization (from `../node_modules/react-native-localization`) 371 | - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" 372 | - "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)" 373 | - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) 374 | - RNReanimated (from `../node_modules/react-native-reanimated`) 375 | - RNScreens (from `../node_modules/react-native-screens`) 376 | - RNVectorIcons (from `../node_modules/react-native-vector-icons`) 377 | - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) 378 | 379 | SPEC REPOS: 380 | trunk: 381 | - boost-for-react-native 382 | - CocoaAsyncSocket 383 | - CocoaLibEvent 384 | - Flipper 385 | - Flipper-DoubleConversion 386 | - Flipper-Folly 387 | - Flipper-Glog 388 | - Flipper-PeerTalk 389 | - Flipper-RSocket 390 | - FlipperKit 391 | - OpenSSL-Universal 392 | - YogaKit 393 | 394 | EXTERNAL SOURCES: 395 | DoubleConversion: 396 | :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" 397 | FBLazyVector: 398 | :path: "../node_modules/react-native/Libraries/FBLazyVector" 399 | FBReactNativeSpec: 400 | :path: "../node_modules/react-native/Libraries/FBReactNativeSpec" 401 | Folly: 402 | :podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec" 403 | glog: 404 | :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" 405 | RCTRequired: 406 | :path: "../node_modules/react-native/Libraries/RCTRequired" 407 | RCTTypeSafety: 408 | :path: "../node_modules/react-native/Libraries/TypeSafety" 409 | React: 410 | :path: "../node_modules/react-native/" 411 | React-callinvoker: 412 | :path: "../node_modules/react-native/ReactCommon/callinvoker" 413 | React-Core: 414 | :path: "../node_modules/react-native/" 415 | React-CoreModules: 416 | :path: "../node_modules/react-native/React/CoreModules" 417 | React-cxxreact: 418 | :path: "../node_modules/react-native/ReactCommon/cxxreact" 419 | React-jsi: 420 | :path: "../node_modules/react-native/ReactCommon/jsi" 421 | React-jsiexecutor: 422 | :path: "../node_modules/react-native/ReactCommon/jsiexecutor" 423 | React-jsinspector: 424 | :path: "../node_modules/react-native/ReactCommon/jsinspector" 425 | react-native-appearance: 426 | :path: "../node_modules/react-native-appearance" 427 | react-native-safe-area-context: 428 | :path: "../node_modules/react-native-safe-area-context" 429 | React-RCTActionSheet: 430 | :path: "../node_modules/react-native/Libraries/ActionSheetIOS" 431 | React-RCTAnimation: 432 | :path: "../node_modules/react-native/Libraries/NativeAnimation" 433 | React-RCTBlob: 434 | :path: "../node_modules/react-native/Libraries/Blob" 435 | React-RCTImage: 436 | :path: "../node_modules/react-native/Libraries/Image" 437 | React-RCTLinking: 438 | :path: "../node_modules/react-native/Libraries/LinkingIOS" 439 | React-RCTNetwork: 440 | :path: "../node_modules/react-native/Libraries/Network" 441 | React-RCTSettings: 442 | :path: "../node_modules/react-native/Libraries/Settings" 443 | React-RCTText: 444 | :path: "../node_modules/react-native/Libraries/Text" 445 | React-RCTVibration: 446 | :path: "../node_modules/react-native/Libraries/Vibration" 447 | ReactCommon: 448 | :path: "../node_modules/react-native/ReactCommon" 449 | ReactNativeLocalization: 450 | :path: "../node_modules/react-native-localization" 451 | RNCAsyncStorage: 452 | :path: "../node_modules/@react-native-async-storage/async-storage" 453 | RNCMaskedView: 454 | :path: "../node_modules/@react-native-community/masked-view" 455 | RNGestureHandler: 456 | :path: "../node_modules/react-native-gesture-handler" 457 | RNReanimated: 458 | :path: "../node_modules/react-native-reanimated" 459 | RNScreens: 460 | :path: "../node_modules/react-native-screens" 461 | RNVectorIcons: 462 | :path: "../node_modules/react-native-vector-icons" 463 | Yoga: 464 | :path: "../node_modules/react-native/ReactCommon/yoga" 465 | 466 | SPEC CHECKSUMS: 467 | boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c 468 | CocoaAsyncSocket: 694058e7c0ed05a9e217d1b3c7ded962f4180845 469 | CocoaLibEvent: 2fab71b8bd46dd33ddb959f7928ec5909f838e3f 470 | DoubleConversion: cde416483dac037923206447da6e1454df403714 471 | FBLazyVector: 3bb422f41b18121b71783a905c10e58606f7dc3e 472 | FBReactNativeSpec: f2c97f2529dd79c083355182cc158c9f98f4bd6e 473 | Flipper: be611d4b742d8c87fbae2ca5f44603a02539e365 474 | Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41 475 | Flipper-Folly: e4493b013c02d9347d5e0cb4d128680239f6c78a 476 | Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6 477 | Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9 478 | Flipper-RSocket: 64e7431a55835eb953b0bf984ef3b90ae9fdddd7 479 | FlipperKit: ab353d41aea8aae2ea6daaf813e67496642f3d7d 480 | Folly: b73c3869541e86821df3c387eb0af5f65addfab4 481 | glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3 482 | OpenSSL-Universal: ff34003318d5e1163e9529b08470708e389ffcdd 483 | RCTRequired: 082f10cd3f905d6c124597fd1c14f6f2655ff65e 484 | RCTTypeSafety: 8c9c544ecbf20337d069e4ae7fd9a377aadf504b 485 | React: b0a957a2c44da4113b0c4c9853d8387f8e64e615 486 | React-callinvoker: c3f44dd3cb195b6aa46621fff95ded79d59043fe 487 | React-Core: d3b2a1ac9a2c13c3bcde712d9281fc1c8a5b315b 488 | React-CoreModules: 0581ff36cb797da0943d424f69e7098e43e9be60 489 | React-cxxreact: c1480d4fda5720086c90df537ee7d285d4c57ac3 490 | React-jsi: a0418934cf48f25b485631deb27c64dc40fb4c31 491 | React-jsiexecutor: 93bd528844ad21dc07aab1c67cb10abae6df6949 492 | React-jsinspector: 58aef7155bc9a9683f5b60b35eccea8722a4f53a 493 | react-native-appearance: fc2014516054585d531e07aa0b40ab0de1d2be85 494 | react-native-safe-area-context: 86612d2c9a9e94e288319262d10b5f93f0b395f5 495 | React-RCTActionSheet: 89a0ca9f4a06c1f93c26067af074ccdce0f40336 496 | React-RCTAnimation: 1bde3ecc0c104c55df246eda516e0deb03c4e49b 497 | React-RCTBlob: a97d378b527740cc667e03ebfa183a75231ab0f0 498 | React-RCTImage: c1b1f2d3f43a4a528c8946d6092384b5c880d2f0 499 | React-RCTLinking: 35ae4ab9dc0410d1fcbdce4d7623194a27214fb2 500 | React-RCTNetwork: 29ec2696f8d8cfff7331fac83d3e893c95ef43ae 501 | React-RCTSettings: 60f0691bba2074ef394f95d4c2265ec284e0a46a 502 | React-RCTText: 5c51df3f08cb9dedc6e790161195d12bac06101c 503 | React-RCTVibration: ae4f914cfe8de7d4de95ae1ea6cc8f6315d73d9d 504 | ReactCommon: 73d79c7039f473b76db6ff7c6b159c478acbbb3b 505 | ReactNativeLocalization: 9abfb1717d6c6f2e3a4e444c4402d52acbf784cc 506 | RNCAsyncStorage: bc2f81cc1df90c267ce9ed30bb2dbc93b945a8ee 507 | RNCMaskedView: f5c7d14d6847b7b44853f7acb6284c1da30a3459 508 | RNGestureHandler: 5e58135436aacc1c5d29b75547d3d2b9430d052c 509 | RNReanimated: e03f7425cb7a38dcf1b644d680d1bfc91c3337ad 510 | RNScreens: b6c9607e6fe47c1b6e2f1910d2acd46dd7ecea3a 511 | RNVectorIcons: bc69e6a278b14842063605de32bec61f0b251a59 512 | Yoga: 4bd86afe9883422a7c4028c00e34790f560923d6 513 | YogaKit: f782866e155069a2cca2517aafea43200b01fd5a 514 | 515 | PODFILE CHECKSUM: 60ac11ba996ebbb7b75d9a5513ec3de479b16d02 516 | 517 | COCOAPODS: 1.10.1 518 | -------------------------------------------------------------------------------- /ios/ReactNativeUltimateStarter.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 00E356F31AD99517003FC87E /* ReactNativeUltimateStarterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ReactNativeUltimateStarterTests.m */; }; 11 | 067839A5F0DB5550093F3C2F /* libPods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F6A962C967269AEA87A8872B /* libPods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.a */; }; 12 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 13 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 14 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 15 | 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 16 | 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 17 | 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 18 | 2DCD954D1E0B4F2C00145EB5 /* ReactNativeUltimateStarterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ReactNativeUltimateStarterTests.m */; }; 19 | 410C9E13577003C68744CAF3 /* libPods-ReactNativeUltimateStarter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BDD833D2B4B9339C91634CA /* libPods-ReactNativeUltimateStarter.a */; }; 20 | 6B5DCBC78B87747A29CDD0F9 /* libPods-ReactNativeUltimateStarter-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C733CADC7A6A2E5C4D63EC18 /* libPods-ReactNativeUltimateStarter-tvOS.a */; }; 21 | 73885786099FA58E8CB2A211 /* libPods-ReactNativeUltimateStarter-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD801E5D79E3CB214F1E6EB /* libPods-ReactNativeUltimateStarter-tvOSTests.a */; }; 22 | 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; 23 | /* End PBXBuildFile section */ 24 | 25 | /* Begin PBXContainerItemProxy section */ 26 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { 27 | isa = PBXContainerItemProxy; 28 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 29 | proxyType = 1; 30 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A; 31 | remoteInfo = ReactNativeUltimateStarter; 32 | }; 33 | 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = { 34 | isa = PBXContainerItemProxy; 35 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 36 | proxyType = 1; 37 | remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7; 38 | remoteInfo = "ReactNativeUltimateStarter-tvOS"; 39 | }; 40 | /* End PBXContainerItemProxy section */ 41 | 42 | /* Begin PBXFileReference section */ 43 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 44 | 00E356EE1AD99517003FC87E /* ReactNativeUltimateStarterTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReactNativeUltimateStarterTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 46 | 00E356F21AD99517003FC87E /* ReactNativeUltimateStarterTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ReactNativeUltimateStarterTests.m; sourceTree = ""; }; 47 | 13B07F961A680F5B00A75B9A /* ReactNativeUltimateStarter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ReactNativeUltimateStarter.app; sourceTree = BUILT_PRODUCTS_DIR; }; 48 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = ReactNativeUltimateStarter/AppDelegate.h; sourceTree = ""; }; 49 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = ReactNativeUltimateStarter/AppDelegate.m; sourceTree = ""; }; 50 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ReactNativeUltimateStarter/Images.xcassets; sourceTree = ""; }; 51 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ReactNativeUltimateStarter/Info.plist; sourceTree = ""; }; 52 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ReactNativeUltimateStarter/main.m; sourceTree = ""; }; 53 | 2010B6657D3A71786C71AF6C /* Pods-ReactNativeUltimateStarter-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeUltimateStarter-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeUltimateStarter-tvOSTests/Pods-ReactNativeUltimateStarter-tvOSTests.debug.xcconfig"; sourceTree = ""; }; 54 | 2D02E47B1E0B4A5D006451C7 /* ReactNativeUltimateStarter-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ReactNativeUltimateStarter-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 55 | 2D02E4901E0B4A5D006451C7 /* ReactNativeUltimateStarter-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ReactNativeUltimateStarter-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | 343E215F9742A9A2E2939845 /* Pods-ReactNativeUltimateStarter-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeUltimateStarter-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeUltimateStarter-tvOS/Pods-ReactNativeUltimateStarter-tvOS.debug.xcconfig"; sourceTree = ""; }; 57 | 36298ADA6BCAC35AF8C78677 /* Pods-ReactNativeUltimateStarter-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeUltimateStarter-tvOS.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeUltimateStarter-tvOS/Pods-ReactNativeUltimateStarter-tvOS.release.xcconfig"; sourceTree = ""; }; 58 | 374759C3E7EA020335D41411 /* Pods-ReactNativeUltimateStarter.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeUltimateStarter.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeUltimateStarter/Pods-ReactNativeUltimateStarter.debug.xcconfig"; sourceTree = ""; }; 59 | 4BDD833D2B4B9339C91634CA /* libPods-ReactNativeUltimateStarter.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeUltimateStarter.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 60 | 4D32D6C97663E2C491E5810F /* Pods-ReactNativeUltimateStarter-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeUltimateStarter-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeUltimateStarter-tvOSTests/Pods-ReactNativeUltimateStarter-tvOSTests.release.xcconfig"; sourceTree = ""; }; 61 | 5AD801E5D79E3CB214F1E6EB /* libPods-ReactNativeUltimateStarter-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeUltimateStarter-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 62 | 66A39EFE135BA46B457F769D /* Pods-ReactNativeUltimateStarter.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeUltimateStarter.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeUltimateStarter/Pods-ReactNativeUltimateStarter.release.xcconfig"; sourceTree = ""; }; 63 | 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = ReactNativeUltimateStarter/LaunchScreen.storyboard; sourceTree = ""; }; 64 | 971B28B458F785C913809004 /* Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests/Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.release.xcconfig"; sourceTree = ""; }; 65 | B117728BACCADAF189B86E55 /* Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests/Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.debug.xcconfig"; sourceTree = ""; }; 66 | C733CADC7A6A2E5C4D63EC18 /* libPods-ReactNativeUltimateStarter-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeUltimateStarter-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 67 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; 68 | ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; 69 | F6A962C967269AEA87A8872B /* libPods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 70 | /* End PBXFileReference section */ 71 | 72 | /* Begin PBXFrameworksBuildPhase section */ 73 | 00E356EB1AD99517003FC87E /* Frameworks */ = { 74 | isa = PBXFrameworksBuildPhase; 75 | buildActionMask = 2147483647; 76 | files = ( 77 | 067839A5F0DB5550093F3C2F /* libPods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.a in Frameworks */, 78 | ); 79 | runOnlyForDeploymentPostprocessing = 0; 80 | }; 81 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { 82 | isa = PBXFrameworksBuildPhase; 83 | buildActionMask = 2147483647; 84 | files = ( 85 | 410C9E13577003C68744CAF3 /* libPods-ReactNativeUltimateStarter.a in Frameworks */, 86 | ); 87 | runOnlyForDeploymentPostprocessing = 0; 88 | }; 89 | 2D02E4781E0B4A5D006451C7 /* Frameworks */ = { 90 | isa = PBXFrameworksBuildPhase; 91 | buildActionMask = 2147483647; 92 | files = ( 93 | 6B5DCBC78B87747A29CDD0F9 /* libPods-ReactNativeUltimateStarter-tvOS.a in Frameworks */, 94 | ); 95 | runOnlyForDeploymentPostprocessing = 0; 96 | }; 97 | 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = { 98 | isa = PBXFrameworksBuildPhase; 99 | buildActionMask = 2147483647; 100 | files = ( 101 | 73885786099FA58E8CB2A211 /* libPods-ReactNativeUltimateStarter-tvOSTests.a in Frameworks */, 102 | ); 103 | runOnlyForDeploymentPostprocessing = 0; 104 | }; 105 | /* End PBXFrameworksBuildPhase section */ 106 | 107 | /* Begin PBXGroup section */ 108 | 00E356EF1AD99517003FC87E /* ReactNativeUltimateStarterTests */ = { 109 | isa = PBXGroup; 110 | children = ( 111 | 00E356F21AD99517003FC87E /* ReactNativeUltimateStarterTests.m */, 112 | 00E356F01AD99517003FC87E /* Supporting Files */, 113 | ); 114 | path = ReactNativeUltimateStarterTests; 115 | sourceTree = ""; 116 | }; 117 | 00E356F01AD99517003FC87E /* Supporting Files */ = { 118 | isa = PBXGroup; 119 | children = ( 120 | 00E356F11AD99517003FC87E /* Info.plist */, 121 | ); 122 | name = "Supporting Files"; 123 | sourceTree = ""; 124 | }; 125 | 13B07FAE1A68108700A75B9A /* ReactNativeUltimateStarter */ = { 126 | isa = PBXGroup; 127 | children = ( 128 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 129 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 130 | 13B07FB01A68108700A75B9A /* AppDelegate.m */, 131 | 13B07FB51A68108700A75B9A /* Images.xcassets */, 132 | 13B07FB61A68108700A75B9A /* Info.plist */, 133 | 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, 134 | 13B07FB71A68108700A75B9A /* main.m */, 135 | ); 136 | name = ReactNativeUltimateStarter; 137 | sourceTree = ""; 138 | }; 139 | 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { 140 | isa = PBXGroup; 141 | children = ( 142 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */, 143 | ED2971642150620600B7C4FE /* JavaScriptCore.framework */, 144 | 4BDD833D2B4B9339C91634CA /* libPods-ReactNativeUltimateStarter.a */, 145 | F6A962C967269AEA87A8872B /* libPods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.a */, 146 | C733CADC7A6A2E5C4D63EC18 /* libPods-ReactNativeUltimateStarter-tvOS.a */, 147 | 5AD801E5D79E3CB214F1E6EB /* libPods-ReactNativeUltimateStarter-tvOSTests.a */, 148 | ); 149 | name = Frameworks; 150 | sourceTree = ""; 151 | }; 152 | 718EC8CFD3EBE9063D9129BA /* Pods */ = { 153 | isa = PBXGroup; 154 | children = ( 155 | 374759C3E7EA020335D41411 /* Pods-ReactNativeUltimateStarter.debug.xcconfig */, 156 | 66A39EFE135BA46B457F769D /* Pods-ReactNativeUltimateStarter.release.xcconfig */, 157 | B117728BACCADAF189B86E55 /* Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.debug.xcconfig */, 158 | 971B28B458F785C913809004 /* Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.release.xcconfig */, 159 | 343E215F9742A9A2E2939845 /* Pods-ReactNativeUltimateStarter-tvOS.debug.xcconfig */, 160 | 36298ADA6BCAC35AF8C78677 /* Pods-ReactNativeUltimateStarter-tvOS.release.xcconfig */, 161 | 2010B6657D3A71786C71AF6C /* Pods-ReactNativeUltimateStarter-tvOSTests.debug.xcconfig */, 162 | 4D32D6C97663E2C491E5810F /* Pods-ReactNativeUltimateStarter-tvOSTests.release.xcconfig */, 163 | ); 164 | path = Pods; 165 | sourceTree = ""; 166 | }; 167 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = { 168 | isa = PBXGroup; 169 | children = ( 170 | ); 171 | name = Libraries; 172 | sourceTree = ""; 173 | }; 174 | 83CBB9F61A601CBA00E9B192 = { 175 | isa = PBXGroup; 176 | children = ( 177 | 13B07FAE1A68108700A75B9A /* ReactNativeUltimateStarter */, 178 | 832341AE1AAA6A7D00B99B32 /* Libraries */, 179 | 00E356EF1AD99517003FC87E /* ReactNativeUltimateStarterTests */, 180 | 83CBBA001A601CBA00E9B192 /* Products */, 181 | 2D16E6871FA4F8E400B85C8A /* Frameworks */, 182 | 718EC8CFD3EBE9063D9129BA /* Pods */, 183 | ); 184 | indentWidth = 2; 185 | sourceTree = ""; 186 | tabWidth = 2; 187 | usesTabs = 0; 188 | }; 189 | 83CBBA001A601CBA00E9B192 /* Products */ = { 190 | isa = PBXGroup; 191 | children = ( 192 | 13B07F961A680F5B00A75B9A /* ReactNativeUltimateStarter.app */, 193 | 00E356EE1AD99517003FC87E /* ReactNativeUltimateStarterTests.xctest */, 194 | 2D02E47B1E0B4A5D006451C7 /* ReactNativeUltimateStarter-tvOS.app */, 195 | 2D02E4901E0B4A5D006451C7 /* ReactNativeUltimateStarter-tvOSTests.xctest */, 196 | ); 197 | name = Products; 198 | sourceTree = ""; 199 | }; 200 | /* End PBXGroup section */ 201 | 202 | /* Begin PBXNativeTarget section */ 203 | 00E356ED1AD99517003FC87E /* ReactNativeUltimateStarterTests */ = { 204 | isa = PBXNativeTarget; 205 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ReactNativeUltimateStarterTests" */; 206 | buildPhases = ( 207 | 1396BEF3D0D03FC6AEEFA701 /* [CP] Check Pods Manifest.lock */, 208 | 00E356EA1AD99517003FC87E /* Sources */, 209 | 00E356EB1AD99517003FC87E /* Frameworks */, 210 | 00E356EC1AD99517003FC87E /* Resources */, 211 | 08485E40A93AC2F157847959 /* [CP] Copy Pods Resources */, 212 | ); 213 | buildRules = ( 214 | ); 215 | dependencies = ( 216 | 00E356F51AD99517003FC87E /* PBXTargetDependency */, 217 | ); 218 | name = ReactNativeUltimateStarterTests; 219 | productName = ReactNativeUltimateStarterTests; 220 | productReference = 00E356EE1AD99517003FC87E /* ReactNativeUltimateStarterTests.xctest */; 221 | productType = "com.apple.product-type.bundle.unit-test"; 222 | }; 223 | 13B07F861A680F5B00A75B9A /* ReactNativeUltimateStarter */ = { 224 | isa = PBXNativeTarget; 225 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ReactNativeUltimateStarter" */; 226 | buildPhases = ( 227 | D082EFFB32BA2D308D9D1D69 /* [CP] Check Pods Manifest.lock */, 228 | FD10A7F022414F080027D42C /* Start Packager */, 229 | 13B07F871A680F5B00A75B9A /* Sources */, 230 | 13B07F8C1A680F5B00A75B9A /* Frameworks */, 231 | 13B07F8E1A680F5B00A75B9A /* Resources */, 232 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 233 | 66F091685D464DD8326888E6 /* [CP] Copy Pods Resources */, 234 | ); 235 | buildRules = ( 236 | ); 237 | dependencies = ( 238 | ); 239 | name = ReactNativeUltimateStarter; 240 | productName = ReactNativeUltimateStarter; 241 | productReference = 13B07F961A680F5B00A75B9A /* ReactNativeUltimateStarter.app */; 242 | productType = "com.apple.product-type.application"; 243 | }; 244 | 2D02E47A1E0B4A5D006451C7 /* ReactNativeUltimateStarter-tvOS */ = { 245 | isa = PBXNativeTarget; 246 | buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "ReactNativeUltimateStarter-tvOS" */; 247 | buildPhases = ( 248 | 4CCEC5D2E229C2F8B0A079E8 /* [CP] Check Pods Manifest.lock */, 249 | FD10A7F122414F3F0027D42C /* Start Packager */, 250 | 2D02E4771E0B4A5D006451C7 /* Sources */, 251 | 2D02E4781E0B4A5D006451C7 /* Frameworks */, 252 | 2D02E4791E0B4A5D006451C7 /* Resources */, 253 | 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */, 254 | ); 255 | buildRules = ( 256 | ); 257 | dependencies = ( 258 | ); 259 | name = "ReactNativeUltimateStarter-tvOS"; 260 | productName = "ReactNativeUltimateStarter-tvOS"; 261 | productReference = 2D02E47B1E0B4A5D006451C7 /* ReactNativeUltimateStarter-tvOS.app */; 262 | productType = "com.apple.product-type.application"; 263 | }; 264 | 2D02E48F1E0B4A5D006451C7 /* ReactNativeUltimateStarter-tvOSTests */ = { 265 | isa = PBXNativeTarget; 266 | buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "ReactNativeUltimateStarter-tvOSTests" */; 267 | buildPhases = ( 268 | 4C56412A4DE07AB26B52BB2A /* [CP] Check Pods Manifest.lock */, 269 | 2D02E48C1E0B4A5D006451C7 /* Sources */, 270 | 2D02E48D1E0B4A5D006451C7 /* Frameworks */, 271 | 2D02E48E1E0B4A5D006451C7 /* Resources */, 272 | ); 273 | buildRules = ( 274 | ); 275 | dependencies = ( 276 | 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */, 277 | ); 278 | name = "ReactNativeUltimateStarter-tvOSTests"; 279 | productName = "ReactNativeUltimateStarter-tvOSTests"; 280 | productReference = 2D02E4901E0B4A5D006451C7 /* ReactNativeUltimateStarter-tvOSTests.xctest */; 281 | productType = "com.apple.product-type.bundle.unit-test"; 282 | }; 283 | /* End PBXNativeTarget section */ 284 | 285 | /* Begin PBXProject section */ 286 | 83CBB9F71A601CBA00E9B192 /* Project object */ = { 287 | isa = PBXProject; 288 | attributes = { 289 | LastUpgradeCheck = 1130; 290 | TargetAttributes = { 291 | 00E356ED1AD99517003FC87E = { 292 | CreatedOnToolsVersion = 6.2; 293 | TestTargetID = 13B07F861A680F5B00A75B9A; 294 | }; 295 | 13B07F861A680F5B00A75B9A = { 296 | LastSwiftMigration = 1120; 297 | }; 298 | 2D02E47A1E0B4A5D006451C7 = { 299 | CreatedOnToolsVersion = 8.2.1; 300 | ProvisioningStyle = Automatic; 301 | }; 302 | 2D02E48F1E0B4A5D006451C7 = { 303 | CreatedOnToolsVersion = 8.2.1; 304 | ProvisioningStyle = Automatic; 305 | TestTargetID = 2D02E47A1E0B4A5D006451C7; 306 | }; 307 | }; 308 | }; 309 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ReactNativeUltimateStarter" */; 310 | compatibilityVersion = "Xcode 3.2"; 311 | developmentRegion = en; 312 | hasScannedForEncodings = 0; 313 | knownRegions = ( 314 | en, 315 | Base, 316 | ); 317 | mainGroup = 83CBB9F61A601CBA00E9B192; 318 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; 319 | projectDirPath = ""; 320 | projectRoot = ""; 321 | targets = ( 322 | 13B07F861A680F5B00A75B9A /* ReactNativeUltimateStarter */, 323 | 00E356ED1AD99517003FC87E /* ReactNativeUltimateStarterTests */, 324 | 2D02E47A1E0B4A5D006451C7 /* ReactNativeUltimateStarter-tvOS */, 325 | 2D02E48F1E0B4A5D006451C7 /* ReactNativeUltimateStarter-tvOSTests */, 326 | ); 327 | }; 328 | /* End PBXProject section */ 329 | 330 | /* Begin PBXResourcesBuildPhase section */ 331 | 00E356EC1AD99517003FC87E /* Resources */ = { 332 | isa = PBXResourcesBuildPhase; 333 | buildActionMask = 2147483647; 334 | files = ( 335 | ); 336 | runOnlyForDeploymentPostprocessing = 0; 337 | }; 338 | 13B07F8E1A680F5B00A75B9A /* Resources */ = { 339 | isa = PBXResourcesBuildPhase; 340 | buildActionMask = 2147483647; 341 | files = ( 342 | 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, 343 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 344 | ); 345 | runOnlyForDeploymentPostprocessing = 0; 346 | }; 347 | 2D02E4791E0B4A5D006451C7 /* Resources */ = { 348 | isa = PBXResourcesBuildPhase; 349 | buildActionMask = 2147483647; 350 | files = ( 351 | 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */, 352 | ); 353 | runOnlyForDeploymentPostprocessing = 0; 354 | }; 355 | 2D02E48E1E0B4A5D006451C7 /* Resources */ = { 356 | isa = PBXResourcesBuildPhase; 357 | buildActionMask = 2147483647; 358 | files = ( 359 | ); 360 | runOnlyForDeploymentPostprocessing = 0; 361 | }; 362 | /* End PBXResourcesBuildPhase section */ 363 | 364 | /* Begin PBXShellScriptBuildPhase section */ 365 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { 366 | isa = PBXShellScriptBuildPhase; 367 | buildActionMask = 2147483647; 368 | files = ( 369 | ); 370 | inputPaths = ( 371 | ); 372 | name = "Bundle React Native code and images"; 373 | outputPaths = ( 374 | ); 375 | runOnlyForDeploymentPostprocessing = 0; 376 | shellPath = /bin/sh; 377 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; 378 | }; 379 | 08485E40A93AC2F157847959 /* [CP] Copy Pods Resources */ = { 380 | isa = PBXShellScriptBuildPhase; 381 | buildActionMask = 2147483647; 382 | files = ( 383 | ); 384 | inputPaths = ( 385 | "${PODS_ROOT}/Target Support Files/Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests/Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests-resources.sh", 386 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", 387 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", 388 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", 389 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", 390 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", 391 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", 392 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", 393 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", 394 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", 395 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", 396 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", 397 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", 398 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", 399 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", 400 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", 401 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", 402 | "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", 403 | ); 404 | name = "[CP] Copy Pods Resources"; 405 | outputPaths = ( 406 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", 407 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", 408 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", 409 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", 410 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", 411 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", 412 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", 413 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", 414 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", 415 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", 416 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", 417 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", 418 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", 419 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", 420 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", 421 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", 422 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", 423 | ); 424 | runOnlyForDeploymentPostprocessing = 0; 425 | shellPath = /bin/sh; 426 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests/Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests-resources.sh\"\n"; 427 | showEnvVarsInLog = 0; 428 | }; 429 | 1396BEF3D0D03FC6AEEFA701 /* [CP] Check Pods Manifest.lock */ = { 430 | isa = PBXShellScriptBuildPhase; 431 | buildActionMask = 2147483647; 432 | files = ( 433 | ); 434 | inputFileListPaths = ( 435 | ); 436 | inputPaths = ( 437 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 438 | "${PODS_ROOT}/Manifest.lock", 439 | ); 440 | name = "[CP] Check Pods Manifest.lock"; 441 | outputFileListPaths = ( 442 | ); 443 | outputPaths = ( 444 | "$(DERIVED_FILE_DIR)/Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests-checkManifestLockResult.txt", 445 | ); 446 | runOnlyForDeploymentPostprocessing = 0; 447 | shellPath = /bin/sh; 448 | 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"; 449 | showEnvVarsInLog = 0; 450 | }; 451 | 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { 452 | isa = PBXShellScriptBuildPhase; 453 | buildActionMask = 2147483647; 454 | files = ( 455 | ); 456 | inputPaths = ( 457 | ); 458 | name = "Bundle React Native Code And Images"; 459 | outputPaths = ( 460 | ); 461 | runOnlyForDeploymentPostprocessing = 0; 462 | shellPath = /bin/sh; 463 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; 464 | }; 465 | 4C56412A4DE07AB26B52BB2A /* [CP] Check Pods Manifest.lock */ = { 466 | isa = PBXShellScriptBuildPhase; 467 | buildActionMask = 2147483647; 468 | files = ( 469 | ); 470 | inputFileListPaths = ( 471 | ); 472 | inputPaths = ( 473 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 474 | "${PODS_ROOT}/Manifest.lock", 475 | ); 476 | name = "[CP] Check Pods Manifest.lock"; 477 | outputFileListPaths = ( 478 | ); 479 | outputPaths = ( 480 | "$(DERIVED_FILE_DIR)/Pods-ReactNativeUltimateStarter-tvOSTests-checkManifestLockResult.txt", 481 | ); 482 | runOnlyForDeploymentPostprocessing = 0; 483 | shellPath = /bin/sh; 484 | 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"; 485 | showEnvVarsInLog = 0; 486 | }; 487 | 4CCEC5D2E229C2F8B0A079E8 /* [CP] Check Pods Manifest.lock */ = { 488 | isa = PBXShellScriptBuildPhase; 489 | buildActionMask = 2147483647; 490 | files = ( 491 | ); 492 | inputFileListPaths = ( 493 | ); 494 | inputPaths = ( 495 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 496 | "${PODS_ROOT}/Manifest.lock", 497 | ); 498 | name = "[CP] Check Pods Manifest.lock"; 499 | outputFileListPaths = ( 500 | ); 501 | outputPaths = ( 502 | "$(DERIVED_FILE_DIR)/Pods-ReactNativeUltimateStarter-tvOS-checkManifestLockResult.txt", 503 | ); 504 | runOnlyForDeploymentPostprocessing = 0; 505 | shellPath = /bin/sh; 506 | 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"; 507 | showEnvVarsInLog = 0; 508 | }; 509 | 66F091685D464DD8326888E6 /* [CP] Copy Pods Resources */ = { 510 | isa = PBXShellScriptBuildPhase; 511 | buildActionMask = 2147483647; 512 | files = ( 513 | ); 514 | inputPaths = ( 515 | "${PODS_ROOT}/Target Support Files/Pods-ReactNativeUltimateStarter/Pods-ReactNativeUltimateStarter-resources.sh", 516 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", 517 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", 518 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", 519 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", 520 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", 521 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", 522 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", 523 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", 524 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", 525 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", 526 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", 527 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", 528 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", 529 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", 530 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", 531 | "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", 532 | "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", 533 | ); 534 | name = "[CP] Copy Pods Resources"; 535 | outputPaths = ( 536 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", 537 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", 538 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", 539 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", 540 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", 541 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", 542 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", 543 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", 544 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", 545 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", 546 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", 547 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", 548 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", 549 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", 550 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", 551 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", 552 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", 553 | ); 554 | runOnlyForDeploymentPostprocessing = 0; 555 | shellPath = /bin/sh; 556 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeUltimateStarter/Pods-ReactNativeUltimateStarter-resources.sh\"\n"; 557 | showEnvVarsInLog = 0; 558 | }; 559 | D082EFFB32BA2D308D9D1D69 /* [CP] Check Pods Manifest.lock */ = { 560 | isa = PBXShellScriptBuildPhase; 561 | buildActionMask = 2147483647; 562 | files = ( 563 | ); 564 | inputFileListPaths = ( 565 | ); 566 | inputPaths = ( 567 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 568 | "${PODS_ROOT}/Manifest.lock", 569 | ); 570 | name = "[CP] Check Pods Manifest.lock"; 571 | outputFileListPaths = ( 572 | ); 573 | outputPaths = ( 574 | "$(DERIVED_FILE_DIR)/Pods-ReactNativeUltimateStarter-checkManifestLockResult.txt", 575 | ); 576 | runOnlyForDeploymentPostprocessing = 0; 577 | shellPath = /bin/sh; 578 | 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"; 579 | showEnvVarsInLog = 0; 580 | }; 581 | FD10A7F022414F080027D42C /* Start Packager */ = { 582 | isa = PBXShellScriptBuildPhase; 583 | buildActionMask = 2147483647; 584 | files = ( 585 | ); 586 | inputFileListPaths = ( 587 | ); 588 | inputPaths = ( 589 | ); 590 | name = "Start Packager"; 591 | outputFileListPaths = ( 592 | ); 593 | outputPaths = ( 594 | ); 595 | runOnlyForDeploymentPostprocessing = 0; 596 | shellPath = /bin/sh; 597 | shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n"; 598 | showEnvVarsInLog = 0; 599 | }; 600 | FD10A7F122414F3F0027D42C /* Start Packager */ = { 601 | isa = PBXShellScriptBuildPhase; 602 | buildActionMask = 2147483647; 603 | files = ( 604 | ); 605 | inputFileListPaths = ( 606 | ); 607 | inputPaths = ( 608 | ); 609 | name = "Start Packager"; 610 | outputFileListPaths = ( 611 | ); 612 | outputPaths = ( 613 | ); 614 | runOnlyForDeploymentPostprocessing = 0; 615 | shellPath = /bin/sh; 616 | shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n"; 617 | showEnvVarsInLog = 0; 618 | }; 619 | /* End PBXShellScriptBuildPhase section */ 620 | 621 | /* Begin PBXSourcesBuildPhase section */ 622 | 00E356EA1AD99517003FC87E /* Sources */ = { 623 | isa = PBXSourcesBuildPhase; 624 | buildActionMask = 2147483647; 625 | files = ( 626 | 00E356F31AD99517003FC87E /* ReactNativeUltimateStarterTests.m in Sources */, 627 | ); 628 | runOnlyForDeploymentPostprocessing = 0; 629 | }; 630 | 13B07F871A680F5B00A75B9A /* Sources */ = { 631 | isa = PBXSourcesBuildPhase; 632 | buildActionMask = 2147483647; 633 | files = ( 634 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 635 | 13B07FC11A68108700A75B9A /* main.m in Sources */, 636 | ); 637 | runOnlyForDeploymentPostprocessing = 0; 638 | }; 639 | 2D02E4771E0B4A5D006451C7 /* Sources */ = { 640 | isa = PBXSourcesBuildPhase; 641 | buildActionMask = 2147483647; 642 | files = ( 643 | 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */, 644 | 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */, 645 | ); 646 | runOnlyForDeploymentPostprocessing = 0; 647 | }; 648 | 2D02E48C1E0B4A5D006451C7 /* Sources */ = { 649 | isa = PBXSourcesBuildPhase; 650 | buildActionMask = 2147483647; 651 | files = ( 652 | 2DCD954D1E0B4F2C00145EB5 /* ReactNativeUltimateStarterTests.m in Sources */, 653 | ); 654 | runOnlyForDeploymentPostprocessing = 0; 655 | }; 656 | /* End PBXSourcesBuildPhase section */ 657 | 658 | /* Begin PBXTargetDependency section */ 659 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { 660 | isa = PBXTargetDependency; 661 | target = 13B07F861A680F5B00A75B9A /* ReactNativeUltimateStarter */; 662 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; 663 | }; 664 | 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = { 665 | isa = PBXTargetDependency; 666 | target = 2D02E47A1E0B4A5D006451C7 /* ReactNativeUltimateStarter-tvOS */; 667 | targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */; 668 | }; 669 | /* End PBXTargetDependency section */ 670 | 671 | /* Begin XCBuildConfiguration section */ 672 | 00E356F61AD99517003FC87E /* Debug */ = { 673 | isa = XCBuildConfiguration; 674 | baseConfigurationReference = B117728BACCADAF189B86E55 /* Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.debug.xcconfig */; 675 | buildSettings = { 676 | BUNDLE_LOADER = "$(TEST_HOST)"; 677 | GCC_PREPROCESSOR_DEFINITIONS = ( 678 | "DEBUG=1", 679 | "$(inherited)", 680 | ); 681 | INFOPLIST_FILE = ReactNativeUltimateStarterTests/Info.plist; 682 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 683 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 684 | OTHER_LDFLAGS = ( 685 | "-ObjC", 686 | "-lc++", 687 | "$(inherited)", 688 | ); 689 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; 690 | PRODUCT_NAME = "$(TARGET_NAME)"; 691 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ReactNativeUltimateStarter.app/ReactNativeUltimateStarter"; 692 | }; 693 | name = Debug; 694 | }; 695 | 00E356F71AD99517003FC87E /* Release */ = { 696 | isa = XCBuildConfiguration; 697 | baseConfigurationReference = 971B28B458F785C913809004 /* Pods-ReactNativeUltimateStarter-ReactNativeUltimateStarterTests.release.xcconfig */; 698 | buildSettings = { 699 | BUNDLE_LOADER = "$(TEST_HOST)"; 700 | COPY_PHASE_STRIP = NO; 701 | INFOPLIST_FILE = ReactNativeUltimateStarterTests/Info.plist; 702 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 703 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 704 | OTHER_LDFLAGS = ( 705 | "-ObjC", 706 | "-lc++", 707 | "$(inherited)", 708 | ); 709 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; 710 | PRODUCT_NAME = "$(TARGET_NAME)"; 711 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ReactNativeUltimateStarter.app/ReactNativeUltimateStarter"; 712 | }; 713 | name = Release; 714 | }; 715 | 13B07F941A680F5B00A75B9A /* Debug */ = { 716 | isa = XCBuildConfiguration; 717 | baseConfigurationReference = 374759C3E7EA020335D41411 /* Pods-ReactNativeUltimateStarter.debug.xcconfig */; 718 | buildSettings = { 719 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 720 | CLANG_ENABLE_MODULES = YES; 721 | CURRENT_PROJECT_VERSION = 1; 722 | ENABLE_BITCODE = NO; 723 | INFOPLIST_FILE = ReactNativeUltimateStarter/Info.plist; 724 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 725 | OTHER_LDFLAGS = ( 726 | "$(inherited)", 727 | "-ObjC", 728 | "-lc++", 729 | ); 730 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; 731 | PRODUCT_NAME = ReactNativeUltimateStarter; 732 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 733 | SWIFT_VERSION = 5.0; 734 | TARGETED_DEVICE_FAMILY = "1,2"; 735 | VERSIONING_SYSTEM = "apple-generic"; 736 | }; 737 | name = Debug; 738 | }; 739 | 13B07F951A680F5B00A75B9A /* Release */ = { 740 | isa = XCBuildConfiguration; 741 | baseConfigurationReference = 66A39EFE135BA46B457F769D /* Pods-ReactNativeUltimateStarter.release.xcconfig */; 742 | buildSettings = { 743 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 744 | CLANG_ENABLE_MODULES = YES; 745 | CURRENT_PROJECT_VERSION = 1; 746 | INFOPLIST_FILE = ReactNativeUltimateStarter/Info.plist; 747 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 748 | OTHER_LDFLAGS = ( 749 | "$(inherited)", 750 | "-ObjC", 751 | "-lc++", 752 | ); 753 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; 754 | PRODUCT_NAME = ReactNativeUltimateStarter; 755 | SWIFT_VERSION = 5.0; 756 | TARGETED_DEVICE_FAMILY = "1,2"; 757 | VERSIONING_SYSTEM = "apple-generic"; 758 | }; 759 | name = Release; 760 | }; 761 | 2D02E4971E0B4A5E006451C7 /* Debug */ = { 762 | isa = XCBuildConfiguration; 763 | baseConfigurationReference = 343E215F9742A9A2E2939845 /* Pods-ReactNativeUltimateStarter-tvOS.debug.xcconfig */; 764 | buildSettings = { 765 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; 766 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 767 | CLANG_ANALYZER_NONNULL = YES; 768 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 769 | CLANG_WARN_INFINITE_RECURSION = YES; 770 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 771 | DEBUG_INFORMATION_FORMAT = dwarf; 772 | ENABLE_TESTABILITY = YES; 773 | GCC_NO_COMMON_BLOCKS = YES; 774 | INFOPLIST_FILE = "ReactNativeUltimateStarter-tvOS/Info.plist"; 775 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 776 | OTHER_LDFLAGS = ( 777 | "$(inherited)", 778 | "-ObjC", 779 | "-lc++", 780 | ); 781 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.ReactNativeUltimateStarter-tvOS"; 782 | PRODUCT_NAME = "$(TARGET_NAME)"; 783 | SDKROOT = appletvos; 784 | TARGETED_DEVICE_FAMILY = 3; 785 | TVOS_DEPLOYMENT_TARGET = 10.0; 786 | }; 787 | name = Debug; 788 | }; 789 | 2D02E4981E0B4A5E006451C7 /* Release */ = { 790 | isa = XCBuildConfiguration; 791 | baseConfigurationReference = 36298ADA6BCAC35AF8C78677 /* Pods-ReactNativeUltimateStarter-tvOS.release.xcconfig */; 792 | buildSettings = { 793 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; 794 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 795 | CLANG_ANALYZER_NONNULL = YES; 796 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 797 | CLANG_WARN_INFINITE_RECURSION = YES; 798 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 799 | COPY_PHASE_STRIP = NO; 800 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 801 | GCC_NO_COMMON_BLOCKS = YES; 802 | INFOPLIST_FILE = "ReactNativeUltimateStarter-tvOS/Info.plist"; 803 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 804 | OTHER_LDFLAGS = ( 805 | "$(inherited)", 806 | "-ObjC", 807 | "-lc++", 808 | ); 809 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.ReactNativeUltimateStarter-tvOS"; 810 | PRODUCT_NAME = "$(TARGET_NAME)"; 811 | SDKROOT = appletvos; 812 | TARGETED_DEVICE_FAMILY = 3; 813 | TVOS_DEPLOYMENT_TARGET = 10.0; 814 | }; 815 | name = Release; 816 | }; 817 | 2D02E4991E0B4A5E006451C7 /* Debug */ = { 818 | isa = XCBuildConfiguration; 819 | baseConfigurationReference = 2010B6657D3A71786C71AF6C /* Pods-ReactNativeUltimateStarter-tvOSTests.debug.xcconfig */; 820 | buildSettings = { 821 | BUNDLE_LOADER = "$(TEST_HOST)"; 822 | CLANG_ANALYZER_NONNULL = YES; 823 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 824 | CLANG_WARN_INFINITE_RECURSION = YES; 825 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 826 | DEBUG_INFORMATION_FORMAT = dwarf; 827 | ENABLE_TESTABILITY = YES; 828 | GCC_NO_COMMON_BLOCKS = YES; 829 | INFOPLIST_FILE = "ReactNativeUltimateStarter-tvOSTests/Info.plist"; 830 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 831 | OTHER_LDFLAGS = ( 832 | "$(inherited)", 833 | "-ObjC", 834 | "-lc++", 835 | ); 836 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.ReactNativeUltimateStarter-tvOSTests"; 837 | PRODUCT_NAME = "$(TARGET_NAME)"; 838 | SDKROOT = appletvos; 839 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ReactNativeUltimateStarter-tvOS.app/ReactNativeUltimateStarter-tvOS"; 840 | TVOS_DEPLOYMENT_TARGET = 10.1; 841 | }; 842 | name = Debug; 843 | }; 844 | 2D02E49A1E0B4A5E006451C7 /* Release */ = { 845 | isa = XCBuildConfiguration; 846 | baseConfigurationReference = 4D32D6C97663E2C491E5810F /* Pods-ReactNativeUltimateStarter-tvOSTests.release.xcconfig */; 847 | buildSettings = { 848 | BUNDLE_LOADER = "$(TEST_HOST)"; 849 | CLANG_ANALYZER_NONNULL = YES; 850 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 851 | CLANG_WARN_INFINITE_RECURSION = YES; 852 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 853 | COPY_PHASE_STRIP = NO; 854 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 855 | GCC_NO_COMMON_BLOCKS = YES; 856 | INFOPLIST_FILE = "ReactNativeUltimateStarter-tvOSTests/Info.plist"; 857 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 858 | OTHER_LDFLAGS = ( 859 | "$(inherited)", 860 | "-ObjC", 861 | "-lc++", 862 | ); 863 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.ReactNativeUltimateStarter-tvOSTests"; 864 | PRODUCT_NAME = "$(TARGET_NAME)"; 865 | SDKROOT = appletvos; 866 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ReactNativeUltimateStarter-tvOS.app/ReactNativeUltimateStarter-tvOS"; 867 | TVOS_DEPLOYMENT_TARGET = 10.1; 868 | }; 869 | name = Release; 870 | }; 871 | 83CBBA201A601CBA00E9B192 /* Debug */ = { 872 | isa = XCBuildConfiguration; 873 | buildSettings = { 874 | ALWAYS_SEARCH_USER_PATHS = NO; 875 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 876 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 877 | CLANG_CXX_LIBRARY = "libc++"; 878 | CLANG_ENABLE_MODULES = YES; 879 | CLANG_ENABLE_OBJC_ARC = YES; 880 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 881 | CLANG_WARN_BOOL_CONVERSION = YES; 882 | CLANG_WARN_COMMA = YES; 883 | CLANG_WARN_CONSTANT_CONVERSION = YES; 884 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 885 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 886 | CLANG_WARN_EMPTY_BODY = YES; 887 | CLANG_WARN_ENUM_CONVERSION = YES; 888 | CLANG_WARN_INFINITE_RECURSION = YES; 889 | CLANG_WARN_INT_CONVERSION = YES; 890 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 891 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 892 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 893 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 894 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 895 | CLANG_WARN_STRICT_PROTOTYPES = YES; 896 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 897 | CLANG_WARN_UNREACHABLE_CODE = YES; 898 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 899 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 900 | COPY_PHASE_STRIP = NO; 901 | ENABLE_STRICT_OBJC_MSGSEND = YES; 902 | ENABLE_TESTABILITY = YES; 903 | GCC_C_LANGUAGE_STANDARD = gnu99; 904 | GCC_DYNAMIC_NO_PIC = NO; 905 | GCC_NO_COMMON_BLOCKS = YES; 906 | GCC_OPTIMIZATION_LEVEL = 0; 907 | GCC_PREPROCESSOR_DEFINITIONS = ( 908 | "DEBUG=1", 909 | "$(inherited)", 910 | ); 911 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 912 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 913 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 914 | GCC_WARN_UNDECLARED_SELECTOR = YES; 915 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 916 | GCC_WARN_UNUSED_FUNCTION = YES; 917 | GCC_WARN_UNUSED_VARIABLE = YES; 918 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 919 | LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; 920 | LIBRARY_SEARCH_PATHS = ( 921 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", 922 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"", 923 | "\"$(inherited)\"", 924 | ); 925 | MTL_ENABLE_DEBUG_INFO = YES; 926 | ONLY_ACTIVE_ARCH = YES; 927 | SDKROOT = iphoneos; 928 | }; 929 | name = Debug; 930 | }; 931 | 83CBBA211A601CBA00E9B192 /* Release */ = { 932 | isa = XCBuildConfiguration; 933 | buildSettings = { 934 | ALWAYS_SEARCH_USER_PATHS = NO; 935 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 936 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 937 | CLANG_CXX_LIBRARY = "libc++"; 938 | CLANG_ENABLE_MODULES = YES; 939 | CLANG_ENABLE_OBJC_ARC = YES; 940 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 941 | CLANG_WARN_BOOL_CONVERSION = YES; 942 | CLANG_WARN_COMMA = YES; 943 | CLANG_WARN_CONSTANT_CONVERSION = YES; 944 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 945 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 946 | CLANG_WARN_EMPTY_BODY = YES; 947 | CLANG_WARN_ENUM_CONVERSION = YES; 948 | CLANG_WARN_INFINITE_RECURSION = YES; 949 | CLANG_WARN_INT_CONVERSION = YES; 950 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 951 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 952 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 953 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 954 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 955 | CLANG_WARN_STRICT_PROTOTYPES = YES; 956 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 957 | CLANG_WARN_UNREACHABLE_CODE = YES; 958 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 959 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 960 | COPY_PHASE_STRIP = YES; 961 | ENABLE_NS_ASSERTIONS = NO; 962 | ENABLE_STRICT_OBJC_MSGSEND = YES; 963 | GCC_C_LANGUAGE_STANDARD = gnu99; 964 | GCC_NO_COMMON_BLOCKS = YES; 965 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 966 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 967 | GCC_WARN_UNDECLARED_SELECTOR = YES; 968 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 969 | GCC_WARN_UNUSED_FUNCTION = YES; 970 | GCC_WARN_UNUSED_VARIABLE = YES; 971 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 972 | LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; 973 | LIBRARY_SEARCH_PATHS = ( 974 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", 975 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"", 976 | "\"$(inherited)\"", 977 | ); 978 | MTL_ENABLE_DEBUG_INFO = NO; 979 | SDKROOT = iphoneos; 980 | VALIDATE_PRODUCT = YES; 981 | }; 982 | name = Release; 983 | }; 984 | /* End XCBuildConfiguration section */ 985 | 986 | /* Begin XCConfigurationList section */ 987 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ReactNativeUltimateStarterTests" */ = { 988 | isa = XCConfigurationList; 989 | buildConfigurations = ( 990 | 00E356F61AD99517003FC87E /* Debug */, 991 | 00E356F71AD99517003FC87E /* Release */, 992 | ); 993 | defaultConfigurationIsVisible = 0; 994 | defaultConfigurationName = Release; 995 | }; 996 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ReactNativeUltimateStarter" */ = { 997 | isa = XCConfigurationList; 998 | buildConfigurations = ( 999 | 13B07F941A680F5B00A75B9A /* Debug */, 1000 | 13B07F951A680F5B00A75B9A /* Release */, 1001 | ); 1002 | defaultConfigurationIsVisible = 0; 1003 | defaultConfigurationName = Release; 1004 | }; 1005 | 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "ReactNativeUltimateStarter-tvOS" */ = { 1006 | isa = XCConfigurationList; 1007 | buildConfigurations = ( 1008 | 2D02E4971E0B4A5E006451C7 /* Debug */, 1009 | 2D02E4981E0B4A5E006451C7 /* Release */, 1010 | ); 1011 | defaultConfigurationIsVisible = 0; 1012 | defaultConfigurationName = Release; 1013 | }; 1014 | 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "ReactNativeUltimateStarter-tvOSTests" */ = { 1015 | isa = XCConfigurationList; 1016 | buildConfigurations = ( 1017 | 2D02E4991E0B4A5E006451C7 /* Debug */, 1018 | 2D02E49A1E0B4A5E006451C7 /* Release */, 1019 | ); 1020 | defaultConfigurationIsVisible = 0; 1021 | defaultConfigurationName = Release; 1022 | }; 1023 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ReactNativeUltimateStarter" */ = { 1024 | isa = XCConfigurationList; 1025 | buildConfigurations = ( 1026 | 83CBBA201A601CBA00E9B192 /* Debug */, 1027 | 83CBBA211A601CBA00E9B192 /* Release */, 1028 | ); 1029 | defaultConfigurationIsVisible = 0; 1030 | defaultConfigurationName = Release; 1031 | }; 1032 | /* End XCConfigurationList section */ 1033 | }; 1034 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; 1035 | } 1036 | --------------------------------------------------------------------------------