├── .gitignore ├── App.js ├── README.md ├── app.json ├── app ├── HomeScreen.js ├── ProjectScreen.js ├── components │ ├── AddProjectForm.js │ ├── AddTaskForm.js │ ├── IntroText.js │ ├── ProjectList.js │ ├── TaskItem.js │ └── TaskList.js ├── models │ ├── Project.js │ └── Task.js └── styles │ └── colors.js ├── assets ├── adaptive-icon.png ├── favicon.png ├── icon.png └── splash.png ├── babel.config.js ├── index.js ├── ios ├── Podfile ├── Podfile.lock ├── Podfile.properties.json ├── ReactRealmJsTemplateApp.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ └── ReactRealmJsTemplateApp.xcscheme ├── ReactRealmJsTemplateApp.xcworkspace │ └── contents.xcworkspacedata └── ReactRealmJsTemplateApp │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Images.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ └── SplashScreenBackground.imageset │ │ ├── Contents.json │ │ └── image.png │ ├── Info.plist │ ├── ReactRealmJsTemplateApp-Bridging-Header.h │ ├── ReactRealmJsTemplateApp.entitlements │ ├── SplashScreen.storyboard │ ├── Supporting │ └── Expo.plist │ ├── main.m │ └── noop-file.swift ├── metro.config.js ├── package-lock.json ├── package.json └── yarn.lock /.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 | project.xcworkspace 24 | 25 | # Android/IntelliJ 26 | # 27 | build/ 28 | .idea 29 | .gradle 30 | local.properties 31 | *.iml 32 | *.hprof 33 | 34 | # node.js 35 | # 36 | node_modules/ 37 | npm-debug.log 38 | yarn-error.log 39 | 40 | # BUCK 41 | buck-out/ 42 | \.buckd/ 43 | *.keystore 44 | !debug.keystore 45 | 46 | # Bundle artifacts 47 | *.jsbundle 48 | 49 | # CocoaPods 50 | /ios/Pods/ 51 | 52 | # Expo 53 | .expo/ 54 | web-build/ 55 | dist/ 56 | # @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8 57 | # The following patterns were generated by expo-cli 58 | 59 | # OSX 60 | # 61 | .DS_Store 62 | 63 | # Xcode 64 | # 65 | build/ 66 | *.pbxuser 67 | !default.pbxuser 68 | *.mode1v3 69 | !default.mode1v3 70 | *.mode2v3 71 | !default.mode2v3 72 | *.perspectivev3 73 | !default.perspectivev3 74 | xcuserdata 75 | *.xccheckout 76 | *.moved-aside 77 | DerivedData 78 | *.hmap 79 | *.ipa 80 | *.xcuserstate 81 | project.xcworkspace 82 | 83 | # Android/IntelliJ 84 | # 85 | build/ 86 | .idea 87 | .gradle 88 | local.properties 89 | *.iml 90 | *.hprof 91 | 92 | # node.js 93 | # 94 | node_modules/ 95 | npm-debug.log 96 | yarn-error.log 97 | 98 | # BUCK 99 | buck-out/ 100 | \.buckd/ 101 | *.keystore 102 | !debug.keystore 103 | 104 | # Bundle artifacts 105 | *.jsbundle 106 | 107 | # CocoaPods 108 | /ios/Pods/ 109 | 110 | # Expo 111 | .expo/ 112 | web-build/ 113 | dist/ 114 | 115 | # @end expo-cli -------------------------------------------------------------------------------- /App.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { NavigationContainer } from "@react-navigation/native"; 4 | import { createNativeStackNavigator } from "@react-navigation/native-stack"; 5 | 6 | // REALM 7 | import { RealmProvider } from "./app/models/Project"; 8 | 9 | // SCREENS 10 | import { HomeScreen } from "./app/HomeScreen"; 11 | import { ProjectScreen } from "./app/ProjectScreen"; 12 | 13 | const Stack = createNativeStackNavigator(); 14 | function AppWrapper() { 15 | if (!RealmProvider) { 16 | return null; 17 | } 18 | return ( 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | ); 28 | } 29 | 30 | export default AppWrapper; 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Expo Template Realm React Native Starter Application 2 |

3 | 4 | Supports Expo iOS 5 | 6 | Supports Expo Android 7 |

8 | 9 | ## Video Link 10 | - https://www.youtube.com/watch?v=5BwIpiC2H4E 11 | 12 | Simple Expo application to quickly get started with Realm, based on the starter template that is provided by Realm 13 | 14 | ## 📝 Application Notes 15 | - Added relationships so there is a project and a project has mutiple tasks associated with it 16 | - added and additional screen which lists the Projects 17 | - Added React Navigation so that we could move between the screens 18 | - Added a new screen that lists all of the Projects that are in the application 19 | - Added the project name to the task list 20 | - Added the number of tasks associated with the Project to the project list 21 | - Added try catch block to capture errors from the `realm.write` blocks 22 | - Added code to delete the child `Task` objects of the `Project` 23 | - I think that the introduction of the Realm Context is mising some helpful support documentation and links along with how to use the new `useQuery` function. 24 | - I also think that the documentation on relationships is extremely lacking and I did my best to create something that will show it better 25 | 26 | 27 | 28 | ## 🏃 How to build and run locally 29 | 30 | - [Setup development Environment](https://reactnative.dev/docs/environment-setup) 31 | - Build/Run on iOS 🍎 32 | ``` 33 | yarn ios 34 | ``` 35 | ``` 36 | npm run ios 37 | ``` 38 | - Build/Run on Android 🤖 39 | ``` 40 | yarn android 41 | ``` 42 | ``` 43 | npm run android 44 | ``` 45 | 46 | ## 📝 Notes 47 | 48 | - [Setting up Sync](https://docs.mongodb.com/realm/sdk/react-native/quick-start/) 49 | - [Realm JS Documentation](https://docs.mongodb.com/realm/sdk/react-native/) 50 | - [Development Client docs](https://docs.expo.dev/clients/introduction/) 51 | - [Building with EAS](https://docs.expo.dev/eas/) 52 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "expo": { 3 | "name": "ReactRealmJsTemplateApp", 4 | "slug": "ReactRealmJsTemplateApp", 5 | "version": "1.0.0", 6 | "assetBundlePatterns": [ 7 | "**/*" 8 | ], 9 | "ios" : { 10 | "bundleIdentifier" : "aks.com.app1" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/HomeScreen.js: -------------------------------------------------------------------------------- 1 | import React, { useCallback, useMemo } from "react"; 2 | import { 3 | SafeAreaView, 4 | View, 5 | StyleSheet, 6 | Button, 7 | Pressable, 8 | Text, 9 | Alert, 10 | } from "react-native"; 11 | import { Task } from "./models/Task"; 12 | import { Project, useQuery, useRealm } from "./models/Project"; 13 | import IntroText from "./components/IntroText"; 14 | import AddTaskForm from "./components/AddTaskForm"; 15 | import TaskList from "./components/TaskList"; 16 | import colors from "./styles/colors"; 17 | 18 | export function HomeScreen({ navigation }) { 19 | const realm = useRealm(); 20 | const result = useQuery("Task"); 21 | const resultProject = useQuery("Project"); 22 | const tasks = useMemo(() => result.sorted("createdAt"), [result]); 23 | console.log(resultProject); 24 | 25 | const handleAddTask = useCallback( 26 | ({ description, project }) => { 27 | if (!description || !project) { 28 | return; 29 | } 30 | 31 | // Everything in the function passed to "realm.write" is a transaction and will 32 | // hence succeed or fail together. A transcation is the smallest unit of transfer 33 | // in Realm so we want to be mindful of how much we put into one single transaction 34 | // and split them up if appropriate (more commonly seen server side). Since clients 35 | // may occasionally be online during short time spans we want to increase the probability 36 | // of sync participants to successfully sync everything in the transaction, otherwise 37 | // no changes propagate and the transaction needs to start over when connectivity allows. 38 | 39 | try { 40 | realm.write(() => { 41 | // check for project 42 | const q = `name == '${project}'`; 43 | let projectResults = realm.objects("Project").filtered(q); 44 | 45 | // if needed create it 46 | if (!projectResults.length) { 47 | projectResults = [ 48 | realm.create( 49 | "Project", 50 | new Project({ name: project, tasks: [] }) 51 | ), 52 | ]; 53 | } 54 | 55 | const projectO = projectResults[0]; 56 | 57 | const task = realm.create("Task", new Task({ description })); 58 | projectO.tasks.push(task); 59 | 60 | Alert.alert("Success Creating New Task"); 61 | }); 62 | } catch (e) { 63 | Alert.alert("Error Creating Task", e.message); 64 | } 65 | }, 66 | [realm] 67 | ); 68 | 69 | const handleToggleTaskStatus = useCallback( 70 | (task) => { 71 | realm.write(() => { 72 | // Normally when updating a record in a NoSQL or SQL database, we have to type 73 | // a statement that will later be interpreted and used as instructions for how 74 | // to update the record. But in RealmDB, the objects are "live" because they are 75 | // actually referencing the object's location in memory on the device (memory mapping). 76 | // So rather than typing a statement, we modify the object directly by changing 77 | // the property values. If the changes adhere to the schema, Realm will accept 78 | // this new version of the object and wherever this object is being referenced 79 | // locally will also see the changes "live". 80 | task.isComplete = !task.isComplete; 81 | }); 82 | 83 | // Alternatively if passing the ID as the argument to handleToggleTaskStatus: 84 | // realm?.write(() => { 85 | // const task = realm?.objectForPrimaryKey('Task', id); // If the ID is passed as an ObjectId 86 | // const task = realm?.objectForPrimaryKey('Task', Realm.BSON.ObjectId(id)); // If the ID is passed as a string 87 | // task.isComplete = !task.isComplete; 88 | // }); 89 | }, 90 | [realm] 91 | ); 92 | 93 | const handleDeleteTask = useCallback( 94 | (task) => { 95 | realm.write(() => { 96 | realm.delete(task); 97 | 98 | // Alternatively if passing the ID as the argument to handleDeleteTask: 99 | // realm?.delete(realm?.objectForPrimaryKey('Task', id)); 100 | }); 101 | }, 102 | [realm] 103 | ); 104 | 105 | return ( 106 | 107 | 108 | 109 | navigation.navigate("Projects")} 120 | > 121 | 122 | See All Projects 123 | 124 | 125 | 126 | 127 | {tasks.length === 0 ? ( 128 | 129 | ) : ( 130 | 135 | )} 136 | 137 | 138 | ); 139 | } 140 | const styles = StyleSheet.create({ 141 | screen: { 142 | flex: 1, 143 | backgroundColor: colors.darkBlue, 144 | }, 145 | content: { 146 | flex: 1, 147 | paddingHorizontal: 20, 148 | }, 149 | }); 150 | -------------------------------------------------------------------------------- /app/ProjectScreen.js: -------------------------------------------------------------------------------- 1 | import React, { useCallback, useMemo } from "react"; 2 | import { View, StyleSheet, Alert } from "react-native"; 3 | import { Project, useQuery, useRealm } from "./models/Project"; 4 | import { SafeAreaView } from "react-native-safe-area-context"; 5 | import ProjectList from "./components/ProjectList"; 6 | import AddProjectForm from "./components/AddProjectForm"; 7 | import colors from "./styles/colors"; 8 | 9 | export function ProjectScreen({ navigation }) { 10 | const realm = useRealm(); 11 | const result = useQuery("Project"); 12 | const projects = useMemo(() => result.sorted("createdAt", true), [result]); 13 | 14 | const handleAddProject = useCallback( 15 | ({ name }) => { 16 | if (!name) { 17 | return; 18 | } 19 | try { 20 | realm.write(() => { 21 | const project = realm.create( 22 | "Project", 23 | new Project({ name, tasks: [] }) 24 | ); 25 | }); 26 | Alert.alert("Success Creating New Project"); 27 | } catch (e) { 28 | Alert.alert("Error Creating Project", e.message); 29 | } 30 | }, 31 | [realm] 32 | ); 33 | 34 | /** 35 | * 36 | */ 37 | const handleDeleteProject = (project) => { 38 | try { 39 | realm.write(() => { 40 | //delete all tasks associated with project, no cascade delete 41 | realm.delete(project.tasks); 42 | 43 | // delete the actual task 44 | realm?.delete(realm?.objectForPrimaryKey("Project", project?._id)); 45 | }); 46 | Alert.alert("Success Deleting Project"); 47 | } catch (e) { 48 | Alert.alert("Error Deleting Project", e.message); 49 | } 50 | }; 51 | 52 | return ( 53 | 54 | 55 | 56 | 57 | 58 | 59 | ); 60 | } 61 | 62 | export const styles = StyleSheet.create({ 63 | screen: { 64 | flex: 1, 65 | backgroundColor: colors.darkBlue, 66 | }, 67 | content: { 68 | flex: 1, 69 | // paddingTop: 20, 70 | paddingHorizontal: 20, 71 | }, 72 | }); 73 | -------------------------------------------------------------------------------- /app/components/AddProjectForm.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from "react"; 2 | import { 3 | View, 4 | Text, 5 | TextInput, 6 | Pressable, 7 | Platform, 8 | StyleSheet, 9 | } from "react-native"; 10 | 11 | import colors from "../styles/colors"; 12 | 13 | function AddProjectForm({ onSubmit }) { 14 | const [name, setName] = useState(""); 15 | 16 | const handleSubmit = () => { 17 | onSubmit({name}); 18 | setName(""); 19 | }; 20 | 21 | return ( 22 | 23 | 24 | 32 | 33 | 34 | 35 | 36 | 37 | ); 38 | } 39 | 40 | const styles = StyleSheet.create({ 41 | form: { 42 | height: 'auto', 43 | marginBottom: 20, 44 | flexDirection: "row", 45 | ...Platform.select({ 46 | ios: { 47 | shadowColor: colors.black, 48 | shadowOffset: { 49 | width: 0, 50 | height: 4, 51 | }, 52 | shadowOpacity: 0.7, 53 | shadowRadius: 3, 54 | }, 55 | android: { 56 | elevation: 3, 57 | }, 58 | }), 59 | }, 60 | textInput: { 61 | paddingHorizontal: 15, 62 | paddingVertical: Platform.OS === "ios" ? 15 : 0, 63 | borderRadius: 5, 64 | backgroundColor: colors.white, 65 | fontSize: 17, 66 | marginBottom: 12 67 | }, 68 | submit: { 69 | height: 50, 70 | width: 50, 71 | justifyContent: "center", 72 | alignItems: "center", 73 | marginLeft: 20, 74 | borderRadius: 5, 75 | backgroundColor: colors.purple, 76 | }, 77 | icon: { 78 | color: colors.white, 79 | textAlign: "center", 80 | fontSize: 17, 81 | fontWeight: "bold", 82 | }, 83 | }); 84 | 85 | export default AddProjectForm; 86 | -------------------------------------------------------------------------------- /app/components/AddTaskForm.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from "react"; 2 | import { 3 | View, 4 | Text, 5 | TextInput, 6 | Pressable, 7 | Platform, 8 | StyleSheet, 9 | } from "react-native"; 10 | 11 | import colors from "../styles/colors"; 12 | 13 | function AddTaskForm({ onSubmit }) { 14 | const [description, setDescription] = useState(""); 15 | const [project, setProject] = useState(""); 16 | 17 | const handleSubmit = () => { 18 | onSubmit({description, project}); 19 | setDescription(""); 20 | setProject(""); 21 | }; 22 | 23 | return ( 24 | 25 | 26 | 34 | 42 | 43 | 44 | 45 | 46 | 47 | ); 48 | } 49 | 50 | const styles = StyleSheet.create({ 51 | form: { 52 | height: 'auto', 53 | marginBottom: 20, 54 | flexDirection: "row", 55 | ...Platform.select({ 56 | ios: { 57 | shadowColor: colors.black, 58 | shadowOffset: { 59 | width: 0, 60 | height: 4, 61 | }, 62 | shadowOpacity: 0.7, 63 | shadowRadius: 3, 64 | }, 65 | android: { 66 | elevation: 3, 67 | }, 68 | }), 69 | }, 70 | textInput: { 71 | paddingHorizontal: 15, 72 | paddingVertical: Platform.OS === "ios" ? 15 : 0, 73 | borderRadius: 5, 74 | backgroundColor: colors.white, 75 | fontSize: 17, 76 | marginBottom: 12 77 | }, 78 | submit: { 79 | height: 50, 80 | width: 50, 81 | justifyContent: "center", 82 | alignItems: "center", 83 | marginLeft: 20, 84 | borderRadius: 5, 85 | backgroundColor: colors.purple, 86 | }, 87 | icon: { 88 | color: colors.white, 89 | textAlign: "center", 90 | fontSize: 17, 91 | fontWeight: "bold", 92 | }, 93 | }); 94 | 95 | export default AddTaskForm; 96 | -------------------------------------------------------------------------------- /app/components/IntroText.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {View, Text, Pressable, StyleSheet} from 'react-native'; 3 | import openURLInBrowser from 'react-native/Libraries/Core/Devtools/openURLInBrowser'; // TODO: Replace library 4 | 5 | import colors from '../styles/colors'; 6 | 7 | function IntroText() { 8 | return ( 9 | 10 | 11 | Welcome to the Realm React Native JavaScript Template 12 | 13 | 14 | Start adding a task using the form at the top of the screen to see how 15 | they are created in Realm. You can also toggle the task status or remove 16 | it from the list. 17 | 18 | 19 | Learn more about the React Native Realm SDK at: 20 | 21 | 23 | openURLInBrowser('https://docs.mongodb.com/realm/sdk/react-native/') 24 | }> 25 | 26 | docs.mongodb.com/realm/sdk/react-native 27 | 28 | 29 | 30 | ); 31 | } 32 | 33 | const styles = StyleSheet.create({ 34 | content: { 35 | flex: 1, 36 | marginHorizontal: 20, 37 | justifyContent: 'center', 38 | }, 39 | paragraph: { 40 | marginVertical: 10, 41 | textAlign: 'center', 42 | color: 'white', 43 | fontSize: 17, 44 | fontWeight: '500', 45 | }, 46 | link: { 47 | color: colors.purple, 48 | fontWeight: 'bold', 49 | }, 50 | }); 51 | 52 | export default IntroText; 53 | -------------------------------------------------------------------------------- /app/components/ProjectList.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { View, FlatList, StyleSheet, Text, Pressable } from "react-native"; 3 | import { Project } from "../models/Project"; 4 | import colors from "../styles/colors"; 5 | 6 | import TaskItem from "./TaskItem"; 7 | 8 | function ProjectList({ projects, onDelete }) { 9 | return ( 10 | 11 | Project._id.toString()} 14 | renderItem={({ item }) => ( 15 | 16 | 17 | 18 | {item.name} {item.tasks?.length} 19 | 20 | 21 | {item.createdAt.toString()} 22 | 23 | 24 | onDelete(item)} style={styles.deleteButton}> 25 | Delete 26 | 27 | 28 | )} 29 | /> 30 | 31 | ); 32 | } 33 | 34 | const styles = StyleSheet.create({ 35 | listContainer: { 36 | flex: 1, 37 | width: "100%", 38 | justifyContent: "center", 39 | }, 40 | project: { 41 | height: 50, 42 | flex: 1, 43 | alignSelf: "stretch", 44 | flexDirection: "row", 45 | marginVertical: 8, 46 | backgroundColor: colors.white, 47 | borderRadius: 5, 48 | ...Platform.select({ 49 | ios: { 50 | shadowColor: colors.black, 51 | shadowOffset: { 52 | width: 0, 53 | height: 4, 54 | }, 55 | shadowOpacity: 0.7, 56 | shadowRadius: 3, 57 | }, 58 | android: { 59 | elevation: 3, 60 | }, 61 | }), 62 | }, 63 | projectContainer: { 64 | flex: 1, 65 | justifyContent: "center", 66 | }, 67 | projectDescription: { 68 | paddingHorizontal: 10, 69 | color: colors.black, 70 | fontSize: 17, 71 | }, 72 | projectCreatedAt: { 73 | paddingHorizontal: 10, 74 | color: colors.black, 75 | fontSize: 12, 76 | }, 77 | status: { 78 | width: 50, 79 | height: "100%", 80 | justifyContent: "center", 81 | borderTopLeftRadius: 5, 82 | borderBottomLeftRadius: 5, 83 | backgroundColor: colors.gray, 84 | }, 85 | completed: { 86 | backgroundColor: colors.purple, 87 | }, 88 | deleteButton: { 89 | justifyContent: "center", 90 | }, 91 | deleteText: { 92 | marginHorizontal: 10, 93 | color: colors.gray, 94 | fontSize: 17, 95 | }, 96 | icon: { 97 | color: colors.white, 98 | textAlign: "center", 99 | fontSize: 17, 100 | fontWeight: "bold", 101 | }, 102 | }); 103 | 104 | export default ProjectList; 105 | -------------------------------------------------------------------------------- /app/components/TaskItem.js: -------------------------------------------------------------------------------- 1 | import React, {memo} from 'react'; 2 | import {View, Text, Pressable, Platform, StyleSheet} from 'react-native'; 3 | 4 | import colors from '../styles/colors'; 5 | 6 | function TaskItem({description, isComplete, onToggleStatus, onDelete, project}) { 7 | console.log("Task Project - ",project) 8 | return ( 9 | 10 | 13 | {isComplete ? '✓' : '○'} 14 | 15 | 16 | 17 | {description} 18 | 19 | 20 | {project[0]?.name} 21 | 22 | 23 | 24 | Delete 25 | 26 | 27 | ); 28 | } 29 | 30 | const styles = StyleSheet.create({ 31 | task: { 32 | height: 50, 33 | alignSelf: 'stretch', 34 | flexDirection: 'row', 35 | marginVertical: 8, 36 | backgroundColor: colors.white, 37 | borderRadius: 5, 38 | ...Platform.select({ 39 | ios: { 40 | shadowColor: colors.black, 41 | shadowOffset: { 42 | width: 0, 43 | height: 4, 44 | }, 45 | shadowOpacity: 0.7, 46 | shadowRadius: 3, 47 | }, 48 | android: { 49 | elevation: 3, 50 | }, 51 | }), 52 | }, 53 | descriptionContainer: { 54 | flex: 1, 55 | justifyContent: 'center', 56 | }, 57 | description: { 58 | paddingHorizontal: 10, 59 | color: colors.black, 60 | fontSize: 17, 61 | }, 62 | project: { 63 | paddingHorizontal: 10, 64 | color: colors.black, 65 | fontSize: 12, 66 | }, 67 | status: { 68 | width: 50, 69 | height: '100%', 70 | justifyContent: 'center', 71 | borderTopLeftRadius: 5, 72 | borderBottomLeftRadius: 5, 73 | backgroundColor: colors.gray, 74 | }, 75 | completed: { 76 | backgroundColor: colors.purple, 77 | }, 78 | deleteButton: { 79 | justifyContent: 'center', 80 | }, 81 | deleteText: { 82 | marginHorizontal: 10, 83 | color: colors.gray, 84 | fontSize: 17, 85 | }, 86 | icon: { 87 | color: colors.white, 88 | textAlign: 'center', 89 | fontSize: 17, 90 | fontWeight: 'bold', 91 | }, 92 | }); 93 | 94 | // We want to make sure only tasks that change are rerendered 95 | const shouldNotRerender = (prevProps, nextProps) => 96 | prevProps.description === nextProps.description && 97 | prevProps.isComplete === nextProps.isComplete; 98 | 99 | export default memo(TaskItem, shouldNotRerender); 100 | -------------------------------------------------------------------------------- /app/components/TaskList.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {View, FlatList, StyleSheet} from 'react-native'; 3 | 4 | import TaskItem from './TaskItem'; 5 | 6 | function TaskList({tasks, onToggleTaskStatus, onDeleteTask}) { 7 | return ( 8 | 9 | task._id.toString()} 12 | renderItem={({item}) => ( 13 | onToggleTaskStatus(item)} 18 | onDelete={() => onDeleteTask(item)} 19 | // Don't spread the Realm item as such: {...item} 20 | /> 21 | )} 22 | /> 23 | 24 | ); 25 | } 26 | 27 | const styles = StyleSheet.create({ 28 | listContainer: { 29 | flex: 1, 30 | justifyContent: 'center', 31 | }, 32 | }); 33 | 34 | export default TaskList; 35 | -------------------------------------------------------------------------------- /app/models/Project.js: -------------------------------------------------------------------------------- 1 | import { createRealmContext, Realm } from '@realm/react'; 2 | import { Task } from './Task'; 3 | 4 | export class Project { 5 | constructor({id = new Realm.BSON.ObjectId(), name}) { 6 | this.name = name; 7 | this.createdAt = new Date(); 8 | this._id = id; 9 | this.tasks = []; 10 | } 11 | 12 | // To use a class as a Realm object type, define the object schema on the static property "schema". 13 | static schema = { 14 | name: 'Project', 15 | primaryKey: '_id', 16 | properties: { 17 | _id: 'objectId', 18 | name: 'string', 19 | tasks: 'Task[]', 20 | createdAt: 'date' 21 | }, 22 | }; 23 | } 24 | 25 | export const { useRealm, useQuery, RealmProvider } = createRealmContext({ 26 | schema: [Task.schema, Project.schema], 27 | deleteRealmIfMigrationNeeded: true, 28 | }); -------------------------------------------------------------------------------- /app/models/Task.js: -------------------------------------------------------------------------------- 1 | import { Realm, createRealmContext } from '@realm/react'; 2 | 3 | export class Task { 4 | constructor({id = new Realm.BSON.ObjectId(), description, isComplete = false}) { 5 | this.description = description; 6 | this.isComplete = isComplete; 7 | this.createdAt = new Date(); 8 | this._id = id; 9 | } 10 | 11 | // To use a class as a Realm object type, define the object schema on 12 | // the static property "schema". 13 | // 14 | // also creating a relationship back to the parent project using the linkingObjects 15 | // which in this case will be an array of one element, which is the parent. It looks 16 | // weird in the code but in works 17 | // https://docs.mongodb.com/realm/sdk/react-native/examples/define-a-realm-object-model/#define-relationship-properties 18 | // https://stackoverflow.com/questions/69711011/is-there-a-way-to-present-one2many-relation-in-correct-way-in-realm 19 | static schema = { 20 | name: 'Task', 21 | primaryKey: '_id', 22 | properties: { 23 | _id: 'objectId', 24 | description: 'string', 25 | isComplete: {type: 'bool', default: false}, 26 | createdAt: 'date', 27 | project: { type : 'linkingObjects', objectType : 'Project', property: 'tasks' } 28 | }, 29 | }; 30 | } 31 | -------------------------------------------------------------------------------- /app/styles/colors.js: -------------------------------------------------------------------------------- 1 | const colors = { 2 | darkBlue: '#2A3642', 3 | purple: '#6E60F9', 4 | gray: '#B5B5B5', 5 | white: '#FFFFFF', 6 | black: '#000000', 7 | }; 8 | 9 | export default colors; 10 | -------------------------------------------------------------------------------- /assets/adaptive-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronksaunders/ReactNativeRealm-Expo-Template/08b6d2c62aaf3c0485a1ead03e08602b87e82a8c/assets/adaptive-icon.png -------------------------------------------------------------------------------- /assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronksaunders/ReactNativeRealm-Expo-Template/08b6d2c62aaf3c0485a1ead03e08602b87e82a8c/assets/favicon.png -------------------------------------------------------------------------------- /assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronksaunders/ReactNativeRealm-Expo-Template/08b6d2c62aaf3c0485a1ead03e08602b87e82a8c/assets/icon.png -------------------------------------------------------------------------------- /assets/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronksaunders/ReactNativeRealm-Expo-Template/08b6d2c62aaf3c0485a1ead03e08602b87e82a8c/assets/splash.png -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | api.cache(true); 3 | return { 4 | presets: ['babel-preset-expo'], 5 | }; 6 | }; 7 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | import 'expo-dev-client'; 2 | 3 | import 'react-native-get-random-values'; 4 | import "expo-dev-client"; 5 | 6 | import { registerRootComponent } from "expo"; 7 | 8 | import App from "./App"; 9 | 10 | // registerRootComponent calls AppRegistry.registerComponent('main', () => App); 11 | // It also ensures that whether you load the app in the Expo client or in a native build, 12 | // the environment is set up appropriately 13 | registerRootComponent(App); 14 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") 2 | require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") 3 | require File.join(File.dirname(`node --print "require.resolve('@react-native-community/cli-platform-ios/package.json')"`), "native_modules") 4 | 5 | platform :ios, '12.0' 6 | 7 | require 'json' 8 | podfile_properties = JSON.parse(File.read('./Podfile.properties.json')) rescue {} 9 | 10 | target 'ReactRealmJsTemplateApp' do 11 | use_expo_modules! 12 | config = use_native_modules! 13 | 14 | pod 'expo-dev-launcher', path: '../node_modules/expo-dev-launcher', :configurations => :debug 15 | pod 'expo-dev-menu', path: '../node_modules/expo-dev-menu', :configurations => :debug 16 | use_react_native!( 17 | :path => config[:reactNativePath], 18 | :hermes_enabled => podfile_properties['expo.jsEngine'] == 'hermes' 19 | ) 20 | 21 | # Uncomment to opt-in to using Flipper 22 | # 23 | # if !ENV['CI'] 24 | # use_flipper!('Flipper' => '0.75.1', 'Flipper-Folly' => '2.5.3', 'Flipper-RSocket' => '1.3.1') 25 | # end 26 | 27 | post_install do |installer| 28 | react_native_post_install(installer) 29 | 30 | # Workaround `Cycle inside FBReactNativeSpec` error for react-native 0.64 31 | # Reference: https://github.com/software-mansion/react-native-screens/issues/842#issuecomment-812543933 32 | installer.pods_project.targets.each do |target| 33 | if (target.name&.eql?('FBReactNativeSpec')) 34 | target.build_phases.each do |build_phase| 35 | if (build_phase.respond_to?(:name) && build_phase.name.eql?('[CP-User] Generate Specs')) 36 | target.build_phases.move(build_phase, 0) 37 | end 38 | end 39 | end 40 | end 41 | end 42 | 43 | post_integrate do |installer| 44 | begin 45 | expo_patch_react_imports!(installer) 46 | rescue => e 47 | Pod::UI.warn e 48 | end 49 | end 50 | 51 | end 52 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - boost-for-react-native (1.63.0) 3 | - DoubleConversion (1.1.6) 4 | - EXApplication (4.0.2): 5 | - ExpoModulesCore 6 | - EXConstants (13.0.2): 7 | - ExpoModulesCore 8 | - EXErrorRecovery (3.0.5): 9 | - ExpoModulesCore 10 | - EXFileSystem (13.1.3): 11 | - ExpoModulesCore 12 | - EXFont (10.0.5): 13 | - ExpoModulesCore 14 | - EXJSONUtils (0.2.1) 15 | - EXKeepAwake (10.0.2): 16 | - ExpoModulesCore 17 | - EXManifests (0.2.4): 18 | - EXJSONUtils 19 | - Expo (44.0.6): 20 | - ExpoModulesCore 21 | - expo-dev-client (0.8.4): 22 | - EXManifests 23 | - expo-dev-launcher 24 | - expo-dev-menu 25 | - expo-dev-menu-interface 26 | - EXUpdatesInterface 27 | - expo-dev-launcher (0.10.4): 28 | - EXManifests 29 | - expo-dev-launcher/Main (= 0.10.4) 30 | - expo-dev-menu 31 | - expo-dev-menu-interface 32 | - EXUpdatesInterface 33 | - React-Core 34 | - expo-dev-launcher/Main (0.10.4): 35 | - EXManifests 36 | - expo-dev-launcher/Unsafe 37 | - expo-dev-menu 38 | - expo-dev-menu-interface 39 | - EXUpdatesInterface 40 | - React-Core 41 | - expo-dev-launcher/Unsafe (0.10.4): 42 | - EXManifests 43 | - expo-dev-menu 44 | - expo-dev-menu-interface 45 | - EXUpdatesInterface 46 | - React-Core 47 | - expo-dev-menu (0.9.3): 48 | - expo-dev-menu/Main (= 0.9.3) 49 | - expo-dev-menu-interface (0.5.3) 50 | - expo-dev-menu/GestureHandler (0.9.3) 51 | - expo-dev-menu/Main (0.9.3): 52 | - expo-dev-menu-interface 53 | - expo-dev-menu/Vendored 54 | - React-Core 55 | - expo-dev-menu/Reanimated (0.9.3): 56 | - DoubleConversion 57 | - FBLazyVector 58 | - FBReactNativeSpec 59 | - glog 60 | - RCT-Folly 61 | - RCTRequired 62 | - RCTTypeSafety 63 | - React-callinvoker 64 | - React-Core 65 | - React-Core/DevSupport 66 | - React-Core/RCTWebSocket 67 | - React-CoreModules 68 | - React-cxxreact 69 | - React-jsi 70 | - React-jsiexecutor 71 | - React-jsinspector 72 | - React-RCTActionSheet 73 | - React-RCTAnimation 74 | - React-RCTBlob 75 | - React-RCTImage 76 | - React-RCTLinking 77 | - React-RCTNetwork 78 | - React-RCTSettings 79 | - React-RCTText 80 | - React-RCTVibration 81 | - ReactCommon/turbomodule/core 82 | - Yoga 83 | - expo-dev-menu/SafeAreaView (0.9.3) 84 | - expo-dev-menu/Vendored (0.9.3): 85 | - expo-dev-menu/GestureHandler 86 | - expo-dev-menu/Reanimated 87 | - expo-dev-menu/SafeAreaView 88 | - ExpoModulesCore (0.6.5): 89 | - React-Core 90 | - ReactCommon/turbomodule/core 91 | - EXSplashScreen (0.14.2): 92 | - ExpoModulesCore 93 | - React-Core 94 | - EXStructuredHeaders (2.1.1) 95 | - EXUpdates (0.11.6): 96 | - EXManifests 97 | - ExpoModulesCore 98 | - EXStructuredHeaders 99 | - EXUpdatesInterface 100 | - React-Core 101 | - EXUpdatesInterface (0.5.1) 102 | - FBLazyVector (0.64.3) 103 | - FBReactNativeSpec (0.64.3): 104 | - RCT-Folly (= 2020.01.13.00) 105 | - RCTRequired (= 0.64.3) 106 | - RCTTypeSafety (= 0.64.3) 107 | - React-Core (= 0.64.3) 108 | - React-jsi (= 0.64.3) 109 | - ReactCommon/turbomodule/core (= 0.64.3) 110 | - GCDWebServer (3.5.4): 111 | - GCDWebServer/Core (= 3.5.4) 112 | - GCDWebServer/Core (3.5.4) 113 | - glog (0.3.5) 114 | - RCT-Folly (2020.01.13.00): 115 | - boost-for-react-native 116 | - DoubleConversion 117 | - glog 118 | - RCT-Folly/Default (= 2020.01.13.00) 119 | - RCT-Folly/Default (2020.01.13.00): 120 | - boost-for-react-native 121 | - DoubleConversion 122 | - glog 123 | - RCTRequired (0.64.3) 124 | - RCTTypeSafety (0.64.3): 125 | - FBLazyVector (= 0.64.3) 126 | - RCT-Folly (= 2020.01.13.00) 127 | - RCTRequired (= 0.64.3) 128 | - React-Core (= 0.64.3) 129 | - React (0.64.3): 130 | - React-Core (= 0.64.3) 131 | - React-Core/DevSupport (= 0.64.3) 132 | - React-Core/RCTWebSocket (= 0.64.3) 133 | - React-RCTActionSheet (= 0.64.3) 134 | - React-RCTAnimation (= 0.64.3) 135 | - React-RCTBlob (= 0.64.3) 136 | - React-RCTImage (= 0.64.3) 137 | - React-RCTLinking (= 0.64.3) 138 | - React-RCTNetwork (= 0.64.3) 139 | - React-RCTSettings (= 0.64.3) 140 | - React-RCTText (= 0.64.3) 141 | - React-RCTVibration (= 0.64.3) 142 | - React-callinvoker (0.64.3) 143 | - React-Core (0.64.3): 144 | - glog 145 | - RCT-Folly (= 2020.01.13.00) 146 | - React-Core/Default (= 0.64.3) 147 | - React-cxxreact (= 0.64.3) 148 | - React-jsi (= 0.64.3) 149 | - React-jsiexecutor (= 0.64.3) 150 | - React-perflogger (= 0.64.3) 151 | - Yoga 152 | - React-Core/CoreModulesHeaders (0.64.3): 153 | - glog 154 | - RCT-Folly (= 2020.01.13.00) 155 | - React-Core/Default 156 | - React-cxxreact (= 0.64.3) 157 | - React-jsi (= 0.64.3) 158 | - React-jsiexecutor (= 0.64.3) 159 | - React-perflogger (= 0.64.3) 160 | - Yoga 161 | - React-Core/Default (0.64.3): 162 | - glog 163 | - RCT-Folly (= 2020.01.13.00) 164 | - React-cxxreact (= 0.64.3) 165 | - React-jsi (= 0.64.3) 166 | - React-jsiexecutor (= 0.64.3) 167 | - React-perflogger (= 0.64.3) 168 | - Yoga 169 | - React-Core/DevSupport (0.64.3): 170 | - glog 171 | - RCT-Folly (= 2020.01.13.00) 172 | - React-Core/Default (= 0.64.3) 173 | - React-Core/RCTWebSocket (= 0.64.3) 174 | - React-cxxreact (= 0.64.3) 175 | - React-jsi (= 0.64.3) 176 | - React-jsiexecutor (= 0.64.3) 177 | - React-jsinspector (= 0.64.3) 178 | - React-perflogger (= 0.64.3) 179 | - Yoga 180 | - React-Core/RCTActionSheetHeaders (0.64.3): 181 | - glog 182 | - RCT-Folly (= 2020.01.13.00) 183 | - React-Core/Default 184 | - React-cxxreact (= 0.64.3) 185 | - React-jsi (= 0.64.3) 186 | - React-jsiexecutor (= 0.64.3) 187 | - React-perflogger (= 0.64.3) 188 | - Yoga 189 | - React-Core/RCTAnimationHeaders (0.64.3): 190 | - glog 191 | - RCT-Folly (= 2020.01.13.00) 192 | - React-Core/Default 193 | - React-cxxreact (= 0.64.3) 194 | - React-jsi (= 0.64.3) 195 | - React-jsiexecutor (= 0.64.3) 196 | - React-perflogger (= 0.64.3) 197 | - Yoga 198 | - React-Core/RCTBlobHeaders (0.64.3): 199 | - glog 200 | - RCT-Folly (= 2020.01.13.00) 201 | - React-Core/Default 202 | - React-cxxreact (= 0.64.3) 203 | - React-jsi (= 0.64.3) 204 | - React-jsiexecutor (= 0.64.3) 205 | - React-perflogger (= 0.64.3) 206 | - Yoga 207 | - React-Core/RCTImageHeaders (0.64.3): 208 | - glog 209 | - RCT-Folly (= 2020.01.13.00) 210 | - React-Core/Default 211 | - React-cxxreact (= 0.64.3) 212 | - React-jsi (= 0.64.3) 213 | - React-jsiexecutor (= 0.64.3) 214 | - React-perflogger (= 0.64.3) 215 | - Yoga 216 | - React-Core/RCTLinkingHeaders (0.64.3): 217 | - glog 218 | - RCT-Folly (= 2020.01.13.00) 219 | - React-Core/Default 220 | - React-cxxreact (= 0.64.3) 221 | - React-jsi (= 0.64.3) 222 | - React-jsiexecutor (= 0.64.3) 223 | - React-perflogger (= 0.64.3) 224 | - Yoga 225 | - React-Core/RCTNetworkHeaders (0.64.3): 226 | - glog 227 | - RCT-Folly (= 2020.01.13.00) 228 | - React-Core/Default 229 | - React-cxxreact (= 0.64.3) 230 | - React-jsi (= 0.64.3) 231 | - React-jsiexecutor (= 0.64.3) 232 | - React-perflogger (= 0.64.3) 233 | - Yoga 234 | - React-Core/RCTSettingsHeaders (0.64.3): 235 | - glog 236 | - RCT-Folly (= 2020.01.13.00) 237 | - React-Core/Default 238 | - React-cxxreact (= 0.64.3) 239 | - React-jsi (= 0.64.3) 240 | - React-jsiexecutor (= 0.64.3) 241 | - React-perflogger (= 0.64.3) 242 | - Yoga 243 | - React-Core/RCTTextHeaders (0.64.3): 244 | - glog 245 | - RCT-Folly (= 2020.01.13.00) 246 | - React-Core/Default 247 | - React-cxxreact (= 0.64.3) 248 | - React-jsi (= 0.64.3) 249 | - React-jsiexecutor (= 0.64.3) 250 | - React-perflogger (= 0.64.3) 251 | - Yoga 252 | - React-Core/RCTVibrationHeaders (0.64.3): 253 | - glog 254 | - RCT-Folly (= 2020.01.13.00) 255 | - React-Core/Default 256 | - React-cxxreact (= 0.64.3) 257 | - React-jsi (= 0.64.3) 258 | - React-jsiexecutor (= 0.64.3) 259 | - React-perflogger (= 0.64.3) 260 | - Yoga 261 | - React-Core/RCTWebSocket (0.64.3): 262 | - glog 263 | - RCT-Folly (= 2020.01.13.00) 264 | - React-Core/Default (= 0.64.3) 265 | - React-cxxreact (= 0.64.3) 266 | - React-jsi (= 0.64.3) 267 | - React-jsiexecutor (= 0.64.3) 268 | - React-perflogger (= 0.64.3) 269 | - Yoga 270 | - React-CoreModules (0.64.3): 271 | - FBReactNativeSpec (= 0.64.3) 272 | - RCT-Folly (= 2020.01.13.00) 273 | - RCTTypeSafety (= 0.64.3) 274 | - React-Core/CoreModulesHeaders (= 0.64.3) 275 | - React-jsi (= 0.64.3) 276 | - React-RCTImage (= 0.64.3) 277 | - ReactCommon/turbomodule/core (= 0.64.3) 278 | - React-cxxreact (0.64.3): 279 | - boost-for-react-native (= 1.63.0) 280 | - DoubleConversion 281 | - glog 282 | - RCT-Folly (= 2020.01.13.00) 283 | - React-callinvoker (= 0.64.3) 284 | - React-jsi (= 0.64.3) 285 | - React-jsinspector (= 0.64.3) 286 | - React-perflogger (= 0.64.3) 287 | - React-runtimeexecutor (= 0.64.3) 288 | - React-jsi (0.64.3): 289 | - boost-for-react-native (= 1.63.0) 290 | - DoubleConversion 291 | - glog 292 | - RCT-Folly (= 2020.01.13.00) 293 | - React-jsi/Default (= 0.64.3) 294 | - React-jsi/Default (0.64.3): 295 | - boost-for-react-native (= 1.63.0) 296 | - DoubleConversion 297 | - glog 298 | - RCT-Folly (= 2020.01.13.00) 299 | - React-jsiexecutor (0.64.3): 300 | - DoubleConversion 301 | - glog 302 | - RCT-Folly (= 2020.01.13.00) 303 | - React-cxxreact (= 0.64.3) 304 | - React-jsi (= 0.64.3) 305 | - React-perflogger (= 0.64.3) 306 | - React-jsinspector (0.64.3) 307 | - react-native-get-random-values (1.7.2): 308 | - React-Core 309 | - react-native-safe-area-context (3.3.2): 310 | - React-Core 311 | - React-perflogger (0.64.3) 312 | - React-RCTActionSheet (0.64.3): 313 | - React-Core/RCTActionSheetHeaders (= 0.64.3) 314 | - React-RCTAnimation (0.64.3): 315 | - FBReactNativeSpec (= 0.64.3) 316 | - RCT-Folly (= 2020.01.13.00) 317 | - RCTTypeSafety (= 0.64.3) 318 | - React-Core/RCTAnimationHeaders (= 0.64.3) 319 | - React-jsi (= 0.64.3) 320 | - ReactCommon/turbomodule/core (= 0.64.3) 321 | - React-RCTBlob (0.64.3): 322 | - FBReactNativeSpec (= 0.64.3) 323 | - RCT-Folly (= 2020.01.13.00) 324 | - React-Core/RCTBlobHeaders (= 0.64.3) 325 | - React-Core/RCTWebSocket (= 0.64.3) 326 | - React-jsi (= 0.64.3) 327 | - React-RCTNetwork (= 0.64.3) 328 | - ReactCommon/turbomodule/core (= 0.64.3) 329 | - React-RCTImage (0.64.3): 330 | - FBReactNativeSpec (= 0.64.3) 331 | - RCT-Folly (= 2020.01.13.00) 332 | - RCTTypeSafety (= 0.64.3) 333 | - React-Core/RCTImageHeaders (= 0.64.3) 334 | - React-jsi (= 0.64.3) 335 | - React-RCTNetwork (= 0.64.3) 336 | - ReactCommon/turbomodule/core (= 0.64.3) 337 | - React-RCTLinking (0.64.3): 338 | - FBReactNativeSpec (= 0.64.3) 339 | - React-Core/RCTLinkingHeaders (= 0.64.3) 340 | - React-jsi (= 0.64.3) 341 | - ReactCommon/turbomodule/core (= 0.64.3) 342 | - React-RCTNetwork (0.64.3): 343 | - FBReactNativeSpec (= 0.64.3) 344 | - RCT-Folly (= 2020.01.13.00) 345 | - RCTTypeSafety (= 0.64.3) 346 | - React-Core/RCTNetworkHeaders (= 0.64.3) 347 | - React-jsi (= 0.64.3) 348 | - ReactCommon/turbomodule/core (= 0.64.3) 349 | - React-RCTSettings (0.64.3): 350 | - FBReactNativeSpec (= 0.64.3) 351 | - RCT-Folly (= 2020.01.13.00) 352 | - RCTTypeSafety (= 0.64.3) 353 | - React-Core/RCTSettingsHeaders (= 0.64.3) 354 | - React-jsi (= 0.64.3) 355 | - ReactCommon/turbomodule/core (= 0.64.3) 356 | - React-RCTText (0.64.3): 357 | - React-Core/RCTTextHeaders (= 0.64.3) 358 | - React-RCTVibration (0.64.3): 359 | - FBReactNativeSpec (= 0.64.3) 360 | - RCT-Folly (= 2020.01.13.00) 361 | - React-Core/RCTVibrationHeaders (= 0.64.3) 362 | - React-jsi (= 0.64.3) 363 | - ReactCommon/turbomodule/core (= 0.64.3) 364 | - React-runtimeexecutor (0.64.3): 365 | - React-jsi (= 0.64.3) 366 | - ReactCommon/turbomodule/core (0.64.3): 367 | - DoubleConversion 368 | - glog 369 | - RCT-Folly (= 2020.01.13.00) 370 | - React-callinvoker (= 0.64.3) 371 | - React-Core (= 0.64.3) 372 | - React-cxxreact (= 0.64.3) 373 | - React-jsi (= 0.64.3) 374 | - React-perflogger (= 0.64.3) 375 | - RealmJS (10.12.0): 376 | - GCDWebServer 377 | - React 378 | - RNScreens (3.10.2): 379 | - React-Core 380 | - React-RCTImage 381 | - Yoga (1.14.0) 382 | 383 | DEPENDENCIES: 384 | - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) 385 | - EXApplication (from `../node_modules/expo-application/ios`) 386 | - EXConstants (from `../node_modules/expo-constants/ios`) 387 | - EXErrorRecovery (from `../node_modules/expo-error-recovery/ios`) 388 | - EXFileSystem (from `../node_modules/expo-file-system/ios`) 389 | - EXFont (from `../node_modules/expo-font/ios`) 390 | - EXJSONUtils (from `../node_modules/expo-json-utils/ios`) 391 | - EXKeepAwake (from `../node_modules/expo-keep-awake/ios`) 392 | - EXManifests (from `../node_modules/expo-manifests/ios`) 393 | - Expo (from `../node_modules/expo/ios`) 394 | - expo-dev-client (from `../node_modules/expo-dev-client/ios`) 395 | - expo-dev-launcher (from `../node_modules/expo-dev-launcher`) 396 | - expo-dev-menu (from `../node_modules/expo-dev-menu`) 397 | - expo-dev-menu-interface (from `../node_modules/expo-dev-menu-interface/ios`) 398 | - ExpoModulesCore (from `../node_modules/expo-modules-core/ios`) 399 | - EXSplashScreen (from `../node_modules/expo-splash-screen/ios`) 400 | - EXStructuredHeaders (from `../node_modules/expo-structured-headers/ios`) 401 | - EXUpdates (from `../node_modules/expo-updates/ios`) 402 | - EXUpdatesInterface (from `../node_modules/expo-updates-interface/ios`) 403 | - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) 404 | - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) 405 | - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) 406 | - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) 407 | - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) 408 | - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) 409 | - React (from `../node_modules/react-native/`) 410 | - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) 411 | - React-Core (from `../node_modules/react-native/`) 412 | - React-Core/DevSupport (from `../node_modules/react-native/`) 413 | - React-Core/RCTWebSocket (from `../node_modules/react-native/`) 414 | - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) 415 | - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) 416 | - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) 417 | - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) 418 | - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) 419 | - react-native-get-random-values (from `../node_modules/react-native-get-random-values`) 420 | - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) 421 | - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) 422 | - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) 423 | - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) 424 | - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) 425 | - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) 426 | - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) 427 | - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) 428 | - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) 429 | - React-RCTText (from `../node_modules/react-native/Libraries/Text`) 430 | - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) 431 | - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) 432 | - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) 433 | - RealmJS (from `../node_modules/realm`) 434 | - RNScreens (from `../node_modules/react-native-screens`) 435 | - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) 436 | 437 | SPEC REPOS: 438 | trunk: 439 | - boost-for-react-native 440 | - GCDWebServer 441 | 442 | EXTERNAL SOURCES: 443 | DoubleConversion: 444 | :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" 445 | EXApplication: 446 | :path: "../node_modules/expo-application/ios" 447 | EXConstants: 448 | :path: "../node_modules/expo-constants/ios" 449 | EXErrorRecovery: 450 | :path: "../node_modules/expo-error-recovery/ios" 451 | EXFileSystem: 452 | :path: "../node_modules/expo-file-system/ios" 453 | EXFont: 454 | :path: "../node_modules/expo-font/ios" 455 | EXJSONUtils: 456 | :path: "../node_modules/expo-json-utils/ios" 457 | EXKeepAwake: 458 | :path: "../node_modules/expo-keep-awake/ios" 459 | EXManifests: 460 | :path: "../node_modules/expo-manifests/ios" 461 | Expo: 462 | :path: "../node_modules/expo/ios" 463 | expo-dev-client: 464 | :path: "../node_modules/expo-dev-client/ios" 465 | expo-dev-launcher: 466 | :path: "../node_modules/expo-dev-launcher" 467 | expo-dev-menu: 468 | :path: "../node_modules/expo-dev-menu" 469 | expo-dev-menu-interface: 470 | :path: "../node_modules/expo-dev-menu-interface/ios" 471 | ExpoModulesCore: 472 | :path: "../node_modules/expo-modules-core/ios" 473 | EXSplashScreen: 474 | :path: "../node_modules/expo-splash-screen/ios" 475 | EXStructuredHeaders: 476 | :path: "../node_modules/expo-structured-headers/ios" 477 | EXUpdates: 478 | :path: "../node_modules/expo-updates/ios" 479 | EXUpdatesInterface: 480 | :path: "../node_modules/expo-updates-interface/ios" 481 | FBLazyVector: 482 | :path: "../node_modules/react-native/Libraries/FBLazyVector" 483 | FBReactNativeSpec: 484 | :path: "../node_modules/react-native/React/FBReactNativeSpec" 485 | glog: 486 | :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" 487 | RCT-Folly: 488 | :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" 489 | RCTRequired: 490 | :path: "../node_modules/react-native/Libraries/RCTRequired" 491 | RCTTypeSafety: 492 | :path: "../node_modules/react-native/Libraries/TypeSafety" 493 | React: 494 | :path: "../node_modules/react-native/" 495 | React-callinvoker: 496 | :path: "../node_modules/react-native/ReactCommon/callinvoker" 497 | React-Core: 498 | :path: "../node_modules/react-native/" 499 | React-CoreModules: 500 | :path: "../node_modules/react-native/React/CoreModules" 501 | React-cxxreact: 502 | :path: "../node_modules/react-native/ReactCommon/cxxreact" 503 | React-jsi: 504 | :path: "../node_modules/react-native/ReactCommon/jsi" 505 | React-jsiexecutor: 506 | :path: "../node_modules/react-native/ReactCommon/jsiexecutor" 507 | React-jsinspector: 508 | :path: "../node_modules/react-native/ReactCommon/jsinspector" 509 | react-native-get-random-values: 510 | :path: "../node_modules/react-native-get-random-values" 511 | react-native-safe-area-context: 512 | :path: "../node_modules/react-native-safe-area-context" 513 | React-perflogger: 514 | :path: "../node_modules/react-native/ReactCommon/reactperflogger" 515 | React-RCTActionSheet: 516 | :path: "../node_modules/react-native/Libraries/ActionSheetIOS" 517 | React-RCTAnimation: 518 | :path: "../node_modules/react-native/Libraries/NativeAnimation" 519 | React-RCTBlob: 520 | :path: "../node_modules/react-native/Libraries/Blob" 521 | React-RCTImage: 522 | :path: "../node_modules/react-native/Libraries/Image" 523 | React-RCTLinking: 524 | :path: "../node_modules/react-native/Libraries/LinkingIOS" 525 | React-RCTNetwork: 526 | :path: "../node_modules/react-native/Libraries/Network" 527 | React-RCTSettings: 528 | :path: "../node_modules/react-native/Libraries/Settings" 529 | React-RCTText: 530 | :path: "../node_modules/react-native/Libraries/Text" 531 | React-RCTVibration: 532 | :path: "../node_modules/react-native/Libraries/Vibration" 533 | React-runtimeexecutor: 534 | :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" 535 | ReactCommon: 536 | :path: "../node_modules/react-native/ReactCommon" 537 | RealmJS: 538 | :path: "../node_modules/realm" 539 | RNScreens: 540 | :path: "../node_modules/react-native-screens" 541 | Yoga: 542 | :path: "../node_modules/react-native/ReactCommon/yoga" 543 | 544 | SPEC CHECKSUMS: 545 | boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c 546 | DoubleConversion: cf9b38bf0b2d048436d9a82ad2abe1404f11e7de 547 | EXApplication: 54fe5bd6268d697771645e8f1aef8b806a65247a 548 | EXConstants: 88bf79622fbd9b476c96d8ec57fe97ca44fe8e3c 549 | EXErrorRecovery: b0d7582714a2cc896e94a2308a356f94dbf14ef7 550 | EXFileSystem: c7187bfe9ed1eda11e7fda5953125695d791a24b 551 | EXFont: 2597c10ac85a69d348d44d7873eccf5a7576ef5e 552 | EXJSONUtils: 5ee0d5cf76da70ad86f0be1a41cc70f47d69e06f 553 | EXKeepAwake: bf48d7f740a5cd2befed6cf9a49911d385c6c47d 554 | EXManifests: d3464cd2278f4a19cd80c1aa673231570b534c11 555 | Expo: 534e51e607aba8229293297da5585f4b26f50fa1 556 | expo-dev-client: 6856be1c9b8a098a23e1099abee01a9d66bc0fa4 557 | expo-dev-launcher: 875237591555e0258aa1f65442c9a557c5b61b40 558 | expo-dev-menu: 942ad845341d994c8dfb70c83cd840378b81650d 559 | expo-dev-menu-interface: 395d046704878e5de471a89102ddf361cbb7e52f 560 | ExpoModulesCore: 32c0ccb47f477d330ee93db72505380adf0de09a 561 | EXSplashScreen: 21669e598804ee810547dbb6692c8deb5dd8dbf3 562 | EXStructuredHeaders: 4993087b2010dbcc510f5d92555b36f523425e8d 563 | EXUpdates: bd5fa64f02685ed3e96be86b5ca350cdc2cd8d02 564 | EXUpdatesInterface: a9814f422d3cd6e7cfd260d13c27786148ece20e 565 | FBLazyVector: c71c5917ec0ad2de41d5d06a5855f6d5eda06971 566 | FBReactNativeSpec: 659e448d55b59553f2d77e3335e212d392f7a186 567 | GCDWebServer: 2c156a56c8226e2d5c0c3f208a3621ccffbe3ce4 568 | glog: 73c2498ac6884b13ede40eda8228cb1eee9d9d62 569 | RCT-Folly: ec7a233ccc97cc556cf7237f0db1ff65b986f27c 570 | RCTRequired: d34bf57e17cb6e3b2681f4809b13843c021feb6c 571 | RCTTypeSafety: 8dab4933124ed39bb0c1d88d74d61b1eb950f28f 572 | React: ef700aeb19afabff83a9cc5799ac955a9c6b5e0f 573 | React-callinvoker: 5547633d44f3e114b17c03c660ccb5faefd9ed2d 574 | React-Core: 3858d60185d71567962468bf176d582e36e4e25b 575 | React-CoreModules: 29b3397adac0c04915cf93089328664868510717 576 | React-cxxreact: 7e6cc1f4cdfcd40e483dd228fa8a3d3e0ed16f4a 577 | React-jsi: a8b09c29521c798f1783348b37b511ba7b3dbeb3 578 | React-jsiexecutor: df6abc9fafbecb8e5b7a5fbc5e6d4bd017d594d5 579 | React-jsinspector: 34e23860273a23695342f58eed3ffd3ba10c31e0 580 | react-native-get-random-values: 30b3f74ca34e30e2e480de48e4add2706a40ac8f 581 | react-native-safe-area-context: 584dc04881deb49474363f3be89e4ca0e854c057 582 | React-perflogger: cc76a4254d19640f1d8ad1c66fdee800414b805c 583 | React-RCTActionSheet: 7448f049318d8d7e8a9a1ebb742ada721757eea8 584 | React-RCTAnimation: fb9b3fa1a4a9f5e6ab01b3368693ce69860ba76a 585 | React-RCTBlob: a2e7056601c599c19884992f08ebacae810426f9 586 | React-RCTImage: 5a46c12327d0d6f6844a1fe38baa92a1e02847e8 587 | React-RCTLinking: 63dd8305591e1def35267557ed42918aec9eb30b 588 | React-RCTNetwork: d0516e39a5f736b2bff671c3e03804200161dcd3 589 | React-RCTSettings: a09566b14f1649f6c8a39ad1a174bb5c0631bb09 590 | React-RCTText: 04a2f0a281f715f0aed4f515717fafd64510e2c8 591 | React-RCTVibration: c7f845861e79eae13dc1e8217a3cf47a3945b504 592 | React-runtimeexecutor: 493d9abb8b23c3f84e19ae221eeba92cadcb70dc 593 | ReactCommon: 8fea6422328e2fc093e25c9fac67adbcf0f04fb4 594 | RealmJS: b6097dab8af3bcf1cd5fa0ac39a4e4c54980c719 595 | RNScreens: d6da2b9e29cf523832c2542f47bf1287318b1868 596 | Yoga: e6ecf3fa25af9d4c87e94ad7d5d292eedef49749 597 | 598 | PODFILE CHECKSUM: 3b69ba7abaf2c93527195b952bf55eb905aecaf5 599 | 600 | COCOAPODS: 1.11.2 601 | -------------------------------------------------------------------------------- /ios/Podfile.properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "expo.jsEngine": "jsc" 3 | } 4 | -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 11 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 12 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 13 | 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; }; 14 | 88ACF2E96F9C44D2AB3370C7 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1896F91983084EE0892C2827 /* noop-file.swift */; }; 15 | 96905EF65AED1B983A6B3ABC /* libPods-ReactRealmJsTemplateApp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-ReactRealmJsTemplateApp.a */; }; 16 | B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; }; 17 | BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXFileReference section */ 21 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 22 | 13B07F961A680F5B00A75B9A /* ReactRealmJsTemplateApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ReactRealmJsTemplateApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 23 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = ReactRealmJsTemplateApp/AppDelegate.h; sourceTree = ""; }; 24 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = ReactRealmJsTemplateApp/AppDelegate.m; sourceTree = ""; }; 25 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ReactRealmJsTemplateApp/Images.xcassets; sourceTree = ""; }; 26 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ReactRealmJsTemplateApp/Info.plist; sourceTree = ""; }; 27 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ReactRealmJsTemplateApp/main.m; sourceTree = ""; }; 28 | 1896F91983084EE0892C2827 /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "ReactRealmJsTemplateApp/noop-file.swift"; sourceTree = ""; }; 29 | 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-ReactRealmJsTemplateApp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactRealmJsTemplateApp.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 30 | 6C2E3173556A471DD304B334 /* Pods-ReactRealmJsTemplateApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactRealmJsTemplateApp.debug.xcconfig"; path = "Target Support Files/Pods-ReactRealmJsTemplateApp/Pods-ReactRealmJsTemplateApp.debug.xcconfig"; sourceTree = ""; }; 31 | 7A4D352CD337FB3A3BF06240 /* Pods-ReactRealmJsTemplateApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactRealmJsTemplateApp.release.xcconfig"; path = "Target Support Files/Pods-ReactRealmJsTemplateApp/Pods-ReactRealmJsTemplateApp.release.xcconfig"; sourceTree = ""; }; 32 | 955DE23F58404CF791EFC4F2 /* ReactRealmJsTemplateApp-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "ReactRealmJsTemplateApp-Bridging-Header.h"; path = "ReactRealmJsTemplateApp/ReactRealmJsTemplateApp-Bridging-Header.h"; sourceTree = ""; }; 33 | AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = ReactRealmJsTemplateApp/SplashScreen.storyboard; sourceTree = ""; }; 34 | BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; 35 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; 36 | FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-ReactRealmJsTemplateApp/ExpoModulesProvider.swift"; sourceTree = ""; }; 37 | /* End PBXFileReference section */ 38 | 39 | /* Begin PBXFrameworksBuildPhase section */ 40 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { 41 | isa = PBXFrameworksBuildPhase; 42 | buildActionMask = 2147483647; 43 | files = ( 44 | 96905EF65AED1B983A6B3ABC /* libPods-ReactRealmJsTemplateApp.a in Frameworks */, 45 | ); 46 | runOnlyForDeploymentPostprocessing = 0; 47 | }; 48 | /* End PBXFrameworksBuildPhase section */ 49 | 50 | /* Begin PBXGroup section */ 51 | 13B07FAE1A68108700A75B9A /* ReactRealmJsTemplateApp */ = { 52 | isa = PBXGroup; 53 | children = ( 54 | BB2F792B24A3F905000567C9 /* Supporting */, 55 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 56 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 57 | 13B07FB01A68108700A75B9A /* AppDelegate.m */, 58 | 13B07FB51A68108700A75B9A /* Images.xcassets */, 59 | 13B07FB61A68108700A75B9A /* Info.plist */, 60 | 13B07FB71A68108700A75B9A /* main.m */, 61 | AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */, 62 | 1896F91983084EE0892C2827 /* noop-file.swift */, 63 | 955DE23F58404CF791EFC4F2 /* ReactRealmJsTemplateApp-Bridging-Header.h */, 64 | ); 65 | name = ReactRealmJsTemplateApp; 66 | sourceTree = ""; 67 | }; 68 | 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { 69 | isa = PBXGroup; 70 | children = ( 71 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */, 72 | 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-ReactRealmJsTemplateApp.a */, 73 | ); 74 | name = Frameworks; 75 | sourceTree = ""; 76 | }; 77 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | ); 81 | name = Libraries; 82 | sourceTree = ""; 83 | }; 84 | 83CBB9F61A601CBA00E9B192 = { 85 | isa = PBXGroup; 86 | children = ( 87 | 13B07FAE1A68108700A75B9A /* ReactRealmJsTemplateApp */, 88 | 832341AE1AAA6A7D00B99B32 /* Libraries */, 89 | 83CBBA001A601CBA00E9B192 /* Products */, 90 | 2D16E6871FA4F8E400B85C8A /* Frameworks */, 91 | D65327D7A22EEC0BE12398D9 /* Pods */, 92 | D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */, 93 | ); 94 | indentWidth = 2; 95 | sourceTree = ""; 96 | tabWidth = 2; 97 | usesTabs = 0; 98 | }; 99 | 83CBBA001A601CBA00E9B192 /* Products */ = { 100 | isa = PBXGroup; 101 | children = ( 102 | 13B07F961A680F5B00A75B9A /* ReactRealmJsTemplateApp.app */, 103 | ); 104 | name = Products; 105 | sourceTree = ""; 106 | }; 107 | 92DBD88DE9BF7D494EA9DA96 /* ReactRealmJsTemplateApp */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */, 111 | ); 112 | name = ReactRealmJsTemplateApp; 113 | sourceTree = ""; 114 | }; 115 | BB2F792B24A3F905000567C9 /* Supporting */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | BB2F792C24A3F905000567C9 /* Expo.plist */, 119 | ); 120 | name = Supporting; 121 | path = ReactRealmJsTemplateApp/Supporting; 122 | sourceTree = ""; 123 | }; 124 | D65327D7A22EEC0BE12398D9 /* Pods */ = { 125 | isa = PBXGroup; 126 | children = ( 127 | 6C2E3173556A471DD304B334 /* Pods-ReactRealmJsTemplateApp.debug.xcconfig */, 128 | 7A4D352CD337FB3A3BF06240 /* Pods-ReactRealmJsTemplateApp.release.xcconfig */, 129 | ); 130 | path = Pods; 131 | sourceTree = ""; 132 | }; 133 | D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | 92DBD88DE9BF7D494EA9DA96 /* ReactRealmJsTemplateApp */, 137 | ); 138 | name = ExpoModulesProviders; 139 | sourceTree = ""; 140 | }; 141 | /* End PBXGroup section */ 142 | 143 | /* Begin PBXNativeTarget section */ 144 | 13B07F861A680F5B00A75B9A /* ReactRealmJsTemplateApp */ = { 145 | isa = PBXNativeTarget; 146 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ReactRealmJsTemplateApp" */; 147 | buildPhases = ( 148 | 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */, 149 | FD10A7F022414F080027D42C /* Start Packager */, 150 | 13B07F871A680F5B00A75B9A /* Sources */, 151 | 13B07F8C1A680F5B00A75B9A /* Frameworks */, 152 | 13B07F8E1A680F5B00A75B9A /* Resources */, 153 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 154 | 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */, 155 | ); 156 | buildRules = ( 157 | ); 158 | dependencies = ( 159 | ); 160 | name = ReactRealmJsTemplateApp; 161 | productName = ReactRealmJsTemplateApp; 162 | productReference = 13B07F961A680F5B00A75B9A /* ReactRealmJsTemplateApp.app */; 163 | productType = "com.apple.product-type.application"; 164 | }; 165 | /* End PBXNativeTarget section */ 166 | 167 | /* Begin PBXProject section */ 168 | 83CBB9F71A601CBA00E9B192 /* Project object */ = { 169 | isa = PBXProject; 170 | attributes = { 171 | LastUpgradeCheck = 1130; 172 | TargetAttributes = { 173 | 13B07F861A680F5B00A75B9A = { 174 | LastSwiftMigration = 1250; 175 | }; 176 | }; 177 | }; 178 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ReactRealmJsTemplateApp" */; 179 | compatibilityVersion = "Xcode 3.2"; 180 | developmentRegion = en; 181 | hasScannedForEncodings = 0; 182 | knownRegions = ( 183 | en, 184 | Base, 185 | ); 186 | mainGroup = 83CBB9F61A601CBA00E9B192; 187 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; 188 | projectDirPath = ""; 189 | projectRoot = ""; 190 | targets = ( 191 | 13B07F861A680F5B00A75B9A /* ReactRealmJsTemplateApp */, 192 | ); 193 | }; 194 | /* End PBXProject section */ 195 | 196 | /* Begin PBXResourcesBuildPhase section */ 197 | 13B07F8E1A680F5B00A75B9A /* Resources */ = { 198 | isa = PBXResourcesBuildPhase; 199 | buildActionMask = 2147483647; 200 | files = ( 201 | BB2F792D24A3F905000567C9 /* Expo.plist in Resources */, 202 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 203 | 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */, 204 | ); 205 | runOnlyForDeploymentPostprocessing = 0; 206 | }; 207 | /* End PBXResourcesBuildPhase section */ 208 | 209 | /* Begin PBXShellScriptBuildPhase section */ 210 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { 211 | isa = PBXShellScriptBuildPhase; 212 | buildActionMask = 2147483647; 213 | files = ( 214 | ); 215 | inputPaths = ( 216 | ); 217 | name = "Bundle React Native code and images"; 218 | outputPaths = ( 219 | ); 220 | runOnlyForDeploymentPostprocessing = 0; 221 | shellPath = /bin/sh; 222 | shellScript = "export NODE_BINARY=node\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\n`node --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n"; 223 | }; 224 | 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = { 225 | isa = PBXShellScriptBuildPhase; 226 | buildActionMask = 2147483647; 227 | files = ( 228 | ); 229 | inputFileListPaths = ( 230 | ); 231 | inputPaths = ( 232 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 233 | "${PODS_ROOT}/Manifest.lock", 234 | ); 235 | name = "[CP] Check Pods Manifest.lock"; 236 | outputFileListPaths = ( 237 | ); 238 | outputPaths = ( 239 | "$(DERIVED_FILE_DIR)/Pods-ReactRealmJsTemplateApp-checkManifestLockResult.txt", 240 | ); 241 | runOnlyForDeploymentPostprocessing = 0; 242 | shellPath = /bin/sh; 243 | 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"; 244 | showEnvVarsInLog = 0; 245 | }; 246 | 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = { 247 | isa = PBXShellScriptBuildPhase; 248 | buildActionMask = 2147483647; 249 | files = ( 250 | ); 251 | inputPaths = ( 252 | "${PODS_ROOT}/Target Support Files/Pods-ReactRealmJsTemplateApp/Pods-ReactRealmJsTemplateApp-resources.sh", 253 | "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", 254 | "${PODS_CONFIGURATION_BUILD_DIR}/EXUpdates/EXUpdates.bundle", 255 | "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", 256 | "${PODS_CONFIGURATION_BUILD_DIR}/expo-dev-launcher/EXDevLauncher.bundle", 257 | "${PODS_CONFIGURATION_BUILD_DIR}/expo-dev-menu/EXDevMenu.bundle", 258 | ); 259 | name = "[CP] Copy Pods Resources"; 260 | outputPaths = ( 261 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", 262 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXUpdates.bundle", 263 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", 264 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXDevLauncher.bundle", 265 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXDevMenu.bundle", 266 | ); 267 | runOnlyForDeploymentPostprocessing = 0; 268 | shellPath = /bin/sh; 269 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactRealmJsTemplateApp/Pods-ReactRealmJsTemplateApp-resources.sh\"\n"; 270 | showEnvVarsInLog = 0; 271 | }; 272 | FD10A7F022414F080027D42C /* Start Packager */ = { 273 | isa = PBXShellScriptBuildPhase; 274 | buildActionMask = 2147483647; 275 | files = ( 276 | ); 277 | inputFileListPaths = ( 278 | ); 279 | inputPaths = ( 280 | ); 281 | name = "Start Packager"; 282 | outputFileListPaths = ( 283 | ); 284 | outputPaths = ( 285 | ); 286 | runOnlyForDeploymentPostprocessing = 0; 287 | shellPath = /bin/sh; 288 | shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > `node --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/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 `node --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/launchPackager.command'\"` || echo \"Can't start packager automatically\"\n fi\nfi\n"; 289 | showEnvVarsInLog = 0; 290 | }; 291 | /* End PBXShellScriptBuildPhase section */ 292 | 293 | /* Begin PBXSourcesBuildPhase section */ 294 | 13B07F871A680F5B00A75B9A /* Sources */ = { 295 | isa = PBXSourcesBuildPhase; 296 | buildActionMask = 2147483647; 297 | files = ( 298 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 299 | 13B07FC11A68108700A75B9A /* main.m in Sources */, 300 | B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */, 301 | 88ACF2E96F9C44D2AB3370C7 /* noop-file.swift in Sources */, 302 | ); 303 | runOnlyForDeploymentPostprocessing = 0; 304 | }; 305 | /* End PBXSourcesBuildPhase section */ 306 | 307 | /* Begin XCBuildConfiguration section */ 308 | 13B07F941A680F5B00A75B9A /* Debug */ = { 309 | isa = XCBuildConfiguration; 310 | baseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-ReactRealmJsTemplateApp.debug.xcconfig */; 311 | buildSettings = { 312 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 313 | CLANG_ENABLE_MODULES = YES; 314 | CODE_SIGN_ENTITLEMENTS = ReactRealmJsTemplateApp/ReactRealmJsTemplateApp.entitlements; 315 | CURRENT_PROJECT_VERSION = 1; 316 | ENABLE_BITCODE = NO; 317 | GCC_PREPROCESSOR_DEFINITIONS = ( 318 | "$(inherited)", 319 | "FB_SONARKIT_ENABLED=1", 320 | ); 321 | INFOPLIST_FILE = ReactRealmJsTemplateApp/Info.plist; 322 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 323 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 324 | OTHER_LDFLAGS = ( 325 | "$(inherited)", 326 | "-ObjC", 327 | "-lc++", 328 | ); 329 | PRODUCT_BUNDLE_IDENTIFIER = aks.com.app1; 330 | PRODUCT_NAME = ReactRealmJsTemplateApp; 331 | SWIFT_OBJC_BRIDGING_HEADER = "ReactRealmJsTemplateApp/ReactRealmJsTemplateApp-Bridging-Header.h"; 332 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 333 | SWIFT_VERSION = 5.0; 334 | TARGETED_DEVICE_FAMILY = 1; 335 | VERSIONING_SYSTEM = "apple-generic"; 336 | }; 337 | name = Debug; 338 | }; 339 | 13B07F951A680F5B00A75B9A /* Release */ = { 340 | isa = XCBuildConfiguration; 341 | baseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-ReactRealmJsTemplateApp.release.xcconfig */; 342 | buildSettings = { 343 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 344 | CLANG_ENABLE_MODULES = YES; 345 | CODE_SIGN_ENTITLEMENTS = ReactRealmJsTemplateApp/ReactRealmJsTemplateApp.entitlements; 346 | CURRENT_PROJECT_VERSION = 1; 347 | INFOPLIST_FILE = ReactRealmJsTemplateApp/Info.plist; 348 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 349 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 350 | OTHER_LDFLAGS = ( 351 | "$(inherited)", 352 | "-ObjC", 353 | "-lc++", 354 | ); 355 | PRODUCT_BUNDLE_IDENTIFIER = aks.com.app1; 356 | PRODUCT_NAME = ReactRealmJsTemplateApp; 357 | SWIFT_OBJC_BRIDGING_HEADER = "ReactRealmJsTemplateApp/ReactRealmJsTemplateApp-Bridging-Header.h"; 358 | SWIFT_VERSION = 5.0; 359 | TARGETED_DEVICE_FAMILY = 1; 360 | VERSIONING_SYSTEM = "apple-generic"; 361 | }; 362 | name = Release; 363 | }; 364 | 83CBBA201A601CBA00E9B192 /* Debug */ = { 365 | isa = XCBuildConfiguration; 366 | buildSettings = { 367 | ALWAYS_SEARCH_USER_PATHS = NO; 368 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 369 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 370 | CLANG_CXX_LIBRARY = "libc++"; 371 | CLANG_ENABLE_MODULES = YES; 372 | CLANG_ENABLE_OBJC_ARC = YES; 373 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 374 | CLANG_WARN_BOOL_CONVERSION = YES; 375 | CLANG_WARN_COMMA = YES; 376 | CLANG_WARN_CONSTANT_CONVERSION = YES; 377 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 378 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 379 | CLANG_WARN_EMPTY_BODY = YES; 380 | CLANG_WARN_ENUM_CONVERSION = YES; 381 | CLANG_WARN_INFINITE_RECURSION = YES; 382 | CLANG_WARN_INT_CONVERSION = YES; 383 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 384 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 385 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 386 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 387 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 388 | CLANG_WARN_STRICT_PROTOTYPES = YES; 389 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 390 | CLANG_WARN_UNREACHABLE_CODE = YES; 391 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 392 | CODE_SIGN_ENTITLEMENTS = ReactRealmJsTemplateApp/ReactRealmJsTemplateApp.entitlements; 393 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 394 | COPY_PHASE_STRIP = NO; 395 | ENABLE_STRICT_OBJC_MSGSEND = YES; 396 | ENABLE_TESTABILITY = YES; 397 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; 398 | GCC_C_LANGUAGE_STANDARD = gnu99; 399 | GCC_DYNAMIC_NO_PIC = NO; 400 | GCC_NO_COMMON_BLOCKS = YES; 401 | GCC_OPTIMIZATION_LEVEL = 0; 402 | GCC_PREPROCESSOR_DEFINITIONS = ( 403 | "DEBUG=1", 404 | "$(inherited)", 405 | ); 406 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 407 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 408 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 409 | GCC_WARN_UNDECLARED_SELECTOR = YES; 410 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 411 | GCC_WARN_UNUSED_FUNCTION = YES; 412 | GCC_WARN_UNUSED_VARIABLE = YES; 413 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 414 | LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; 415 | LIBRARY_SEARCH_PATHS = "\"$(inherited)\""; 416 | MTL_ENABLE_DEBUG_INFO = YES; 417 | ONLY_ACTIVE_ARCH = YES; 418 | SDKROOT = iphoneos; 419 | }; 420 | name = Debug; 421 | }; 422 | 83CBBA211A601CBA00E9B192 /* Release */ = { 423 | isa = XCBuildConfiguration; 424 | buildSettings = { 425 | ALWAYS_SEARCH_USER_PATHS = NO; 426 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 427 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 428 | CLANG_CXX_LIBRARY = "libc++"; 429 | CLANG_ENABLE_MODULES = YES; 430 | CLANG_ENABLE_OBJC_ARC = YES; 431 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 432 | CLANG_WARN_BOOL_CONVERSION = YES; 433 | CLANG_WARN_COMMA = YES; 434 | CLANG_WARN_CONSTANT_CONVERSION = YES; 435 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 436 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 437 | CLANG_WARN_EMPTY_BODY = YES; 438 | CLANG_WARN_ENUM_CONVERSION = YES; 439 | CLANG_WARN_INFINITE_RECURSION = YES; 440 | CLANG_WARN_INT_CONVERSION = YES; 441 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 442 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 443 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 444 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 445 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 446 | CLANG_WARN_STRICT_PROTOTYPES = YES; 447 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 448 | CLANG_WARN_UNREACHABLE_CODE = YES; 449 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 450 | CODE_SIGN_ENTITLEMENTS = ReactRealmJsTemplateApp/ReactRealmJsTemplateApp.entitlements; 451 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 452 | COPY_PHASE_STRIP = YES; 453 | ENABLE_NS_ASSERTIONS = NO; 454 | ENABLE_STRICT_OBJC_MSGSEND = YES; 455 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; 456 | GCC_C_LANGUAGE_STANDARD = gnu99; 457 | GCC_NO_COMMON_BLOCKS = YES; 458 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 459 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 460 | GCC_WARN_UNDECLARED_SELECTOR = YES; 461 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 462 | GCC_WARN_UNUSED_FUNCTION = YES; 463 | GCC_WARN_UNUSED_VARIABLE = YES; 464 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 465 | LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; 466 | LIBRARY_SEARCH_PATHS = "\"$(inherited)\""; 467 | MTL_ENABLE_DEBUG_INFO = NO; 468 | SDKROOT = iphoneos; 469 | VALIDATE_PRODUCT = YES; 470 | }; 471 | name = Release; 472 | }; 473 | /* End XCBuildConfiguration section */ 474 | 475 | /* Begin XCConfigurationList section */ 476 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ReactRealmJsTemplateApp" */ = { 477 | isa = XCConfigurationList; 478 | buildConfigurations = ( 479 | 13B07F941A680F5B00A75B9A /* Debug */, 480 | 13B07F951A680F5B00A75B9A /* Release */, 481 | ); 482 | defaultConfigurationIsVisible = 0; 483 | defaultConfigurationName = Release; 484 | }; 485 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ReactRealmJsTemplateApp" */ = { 486 | isa = XCConfigurationList; 487 | buildConfigurations = ( 488 | 83CBBA201A601CBA00E9B192 /* Debug */, 489 | 83CBBA211A601CBA00E9B192 /* Release */, 490 | ); 491 | defaultConfigurationIsVisible = 0; 492 | defaultConfigurationName = Release; 493 | }; 494 | /* End XCConfigurationList section */ 495 | }; 496 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; 497 | } 498 | -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp.xcodeproj/xcshareddata/xcschemes/ReactRealmJsTemplateApp.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/ReactRealmJsTemplateApp.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import 4 | 5 | #import 6 | 7 | @interface AppDelegate : EXAppDelegateWrapper 8 | 9 | @end 10 | -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #import "AppDelegate.h" 2 | 3 | #if defined(EX_DEV_MENU_ENABLED) 4 | @import EXDevMenu; 5 | #endif 6 | 7 | #if defined(EX_DEV_LAUNCHER_ENABLED) 8 | #include 9 | #import 10 | #endif 11 | 12 | #import 13 | #import 14 | #import 15 | #import 16 | #import 17 | 18 | #if defined(FB_SONARKIT_ENABLED) && __has_include() 19 | #import 20 | #import 21 | #import 22 | #import 23 | #import 24 | #import 25 | 26 | static void InitializeFlipper(UIApplication *application) { 27 | FlipperClient *client = [FlipperClient sharedClient]; 28 | SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults]; 29 | [client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]]; 30 | [client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]]; 31 | [client addPlugin:[FlipperKitReactPlugin new]]; 32 | [client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]]; 33 | [client start]; 34 | } 35 | #endif 36 | 37 | @implementation AppDelegate 38 | 39 | - (RCTBridge *)initializeReactNativeApp:(NSDictionary *)launchOptions 40 | { 41 | RCTBridge *bridge = [self.reactDelegate createBridgeWithDelegate:self launchOptions:launchOptions]; 42 | RCTRootView *rootView = [self.reactDelegate createRootViewWithBridge:bridge moduleName:@"main" initialProperties:nil]; 43 | rootView.backgroundColor = [UIColor whiteColor]; 44 | UIViewController *rootViewController = [self.reactDelegate createRootViewController]; 45 | rootViewController.view = rootView; 46 | self.window.rootViewController = rootViewController; 47 | [self.window makeKeyAndVisible]; 48 | 49 | return bridge; 50 | } 51 | 52 | 53 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 54 | { 55 | #if defined(FB_SONARKIT_ENABLED) && __has_include() 56 | InitializeFlipper(application); 57 | #endif 58 | 59 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 60 | #if defined(EX_DEV_LAUNCHER_ENABLED) 61 | EXDevLauncherController *controller = [EXDevLauncherController sharedInstance]; 62 | controller.updatesInterface = [EXUpdatesDevLauncherController sharedInstance]; 63 | [controller startWithWindow:self.window delegate:(id)self launchOptions:launchOptions]; 64 | #else 65 | [self initializeReactNativeApp:launchOptions]; 66 | #endif 67 | 68 | [super application:application didFinishLaunchingWithOptions:launchOptions]; 69 | 70 | return YES; 71 | } 72 | 73 | - (NSArray> *)extraModulesForBridge:(RCTBridge *)bridge 74 | { 75 | // If you'd like to export some custom RCTBridgeModules, add them here! 76 | return @[]; 77 | } 78 | 79 | - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { 80 | #ifdef DEBUG 81 | #if defined(EX_DEV_LAUNCHER_ENABLED) 82 | return [[EXDevLauncherController sharedInstance] sourceUrl]; 83 | #else 84 | return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; 85 | #endif 86 | #else 87 | return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; 88 | #endif 89 | } 90 | 91 | // Linking API 92 | - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options { 93 | #if defined(EX_DEV_LAUNCHER_ENABLED) 94 | if ([EXDevLauncherController.sharedInstance onDeepLink:url options:options]) { 95 | return true; 96 | } 97 | #endif 98 | return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options]; 99 | } 100 | 101 | // Universal Links 102 | - (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler { 103 | BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; 104 | return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || result; 105 | } 106 | 107 | @end 108 | 109 | #if defined(EX_DEV_LAUNCHER_ENABLED) 110 | @implementation AppDelegate (EXDevLauncherControllerDelegate) 111 | 112 | - (void)devLauncherController:(EXDevLauncherController *)developmentClientController 113 | didStartWithSuccess:(BOOL)success 114 | { 115 | developmentClientController.appBridge = [self initializeReactNativeApp:[EXDevLauncherController.sharedInstance getLaunchOptions]]; 116 | } 117 | 118 | @end 119 | #endif 120 | -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp/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" : "expo" 37 | } 38 | } -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "expo" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp/Images.xcassets/SplashScreenBackground.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "universal", 5 | "filename": "image.png", 6 | "scale": "1x" 7 | }, 8 | { 9 | "idiom": "universal", 10 | "scale": "2x" 11 | }, 12 | { 13 | "idiom": "universal", 14 | "scale": "3x" 15 | } 16 | ], 17 | "info": { 18 | "version": 1, 19 | "author": "expo" 20 | } 21 | } -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp/Images.xcassets/SplashScreenBackground.imageset/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronksaunders/ReactNativeRealm-Expo-Template/08b6d2c62aaf3c0485a1ead03e08602b87e82a8c/ios/ReactRealmJsTemplateApp/Images.xcassets/SplashScreenBackground.imageset/image.png -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | ReactRealmJsTemplateApp 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 19 | CFBundleShortVersionString 20 | 1.0.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleURLTypes 24 | 25 | 26 | CFBundleURLSchemes 27 | 28 | aks.com.app1 29 | 30 | 31 | 32 | CFBundleURLSchemes 33 | 34 | exp+reactrealmjstemplateapp 35 | 36 | 37 | 38 | CFBundleVersion 39 | 1 40 | LSRequiresIPhoneOS 41 | 42 | NSAppTransportSecurity 43 | 44 | NSAllowsArbitraryLoads 45 | 46 | NSExceptionDomains 47 | 48 | localhost 49 | 50 | NSExceptionAllowsInsecureHTTPLoads 51 | 52 | 53 | 54 | 55 | UILaunchStoryboardName 56 | SplashScreen 57 | UIRequiredDeviceCapabilities 58 | 59 | armv7 60 | 61 | UIRequiresFullScreen 62 | 63 | UIStatusBarStyle 64 | UIStatusBarStyleDefault 65 | UISupportedInterfaceOrientations 66 | 67 | UIInterfaceOrientationPortrait 68 | UIInterfaceOrientationPortraitUpsideDown 69 | UIInterfaceOrientationLandscapeLeft 70 | UIInterfaceOrientationLandscapeRight 71 | 72 | UISupportedInterfaceOrientations~ipad 73 | 74 | UIInterfaceOrientationPortrait 75 | UIInterfaceOrientationPortraitUpsideDown 76 | UIInterfaceOrientationLandscapeLeft 77 | UIInterfaceOrientationLandscapeRight 78 | 79 | UIUserInterfaceStyle 80 | Light 81 | UIViewControllerBasedStatusBarAppearance 82 | 83 | 84 | -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp/ReactRealmJsTemplateApp-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp/ReactRealmJsTemplateApp.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | 8 | -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp/SplashScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp/Supporting/Expo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | EXUpdatesCheckOnLaunch 6 | ALWAYS 7 | EXUpdatesEnabled 8 | 9 | EXUpdatesLaunchWaitMs 10 | 0 11 | EXUpdatesSDKVersion 12 | 44.0.0 13 | EXUpdatesURL 14 | https://exp.host/@anonymous/ReactRealmJsTemplateApp 15 | 16 | -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp/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 | 11 | -------------------------------------------------------------------------------- /ios/ReactRealmJsTemplateApp/noop-file.swift: -------------------------------------------------------------------------------- 1 | // 2 | // @generated 3 | // A blank Swift file must be created for native modules with Swift files to work correctly. 4 | // 5 | -------------------------------------------------------------------------------- /metro.config.js: -------------------------------------------------------------------------------- 1 | // Learn more https://docs.expo.dev/guides/customizing-metro 2 | const { getDefaultConfig } = require('expo/metro-config'); 3 | 4 | module.exports = getDefaultConfig(__dirname); 5 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "start": "expo start --dev-client", 4 | "android": "expo run:android", 5 | "ios": "expo run:ios" 6 | }, 7 | "dependencies": { 8 | "@react-navigation/native": "^6.0.8", 9 | "@react-navigation/native-stack": "^6.5.0", 10 | "@realm/react": "^0.1.0", 11 | "expo": "^44.0.0", 12 | "expo-dev-client": "~0.8.4", 13 | "expo-splash-screen": "~0.14.0", 14 | "expo-status-bar": "~1.2.0", 15 | "expo-updates": "~0.11.2", 16 | "react": "17.0.1", 17 | "react-dom": "17.0.1", 18 | "react-native": "0.64.3", 19 | "react-native-get-random-values": "~1.7.0", 20 | "react-native-safe-area-context": "3.3.2", 21 | "react-native-screens": "~3.10.1", 22 | "react-native-web": "0.17.1", 23 | "realm": "^10.11.0", 24 | "uuid": "^8.3.2" 25 | }, 26 | "devDependencies": { 27 | "@babel/core": "^7.12.9" 28 | }, 29 | "name": "reactrealmjstemplateapp", 30 | "version": "1.0.0", 31 | "private": true 32 | } 33 | --------------------------------------------------------------------------------