{"id":21247396,"url":"https://github.com/akiver/wordsreminder","last_synced_at":"2025-07-10T22:32:30.231Z","repository":{"id":46630235,"uuid":"174896990","full_name":"akiver/wordsreminder","owner":"akiver","description":"React native application to save words in dictionaries.","archived":false,"fork":false,"pushed_at":"2022-05-22T09:36:26.000Z","size":3056,"stargazers_count":40,"open_issues_count":0,"forks_count":18,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-04-15T00:17:55.670Z","etag":null,"topics":["detox","firestore","react-native","react-native-firebase","reactjs","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akiver.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-11T00:11:21.000Z","updated_at":"2024-04-04T09:45:21.000Z","dependencies_parsed_at":"2022-09-23T03:20:53.654Z","dependency_job_id":null,"html_url":"https://github.com/akiver/wordsreminder","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akiver%2Fwordsreminder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akiver%2Fwordsreminder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akiver%2Fwordsreminder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akiver%2Fwordsreminder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akiver","download_url":"https://codeload.github.com/akiver/wordsreminder/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225659439,"owners_count":17503801,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["detox","firestore","react-native","react-native-firebase","reactjs","typescript"],"created_at":"2024-11-21T02:19:53.317Z","updated_at":"2024-11-21T02:19:53.952Z","avatar_url":"https://github.com/akiver.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WordsReminder\n\nSimple mobile application to save words in dictionaries, built with [react-native](https://facebook.github.io/react-native/) and [react-native-firebase](https://rnfirebase.io/).\n\n## Demo\n\n[![WordsReminder](https://i.imgur.com/V7Jcc4s.jpg)](https://youtu.be/eg-8QK2pXhU)\n\nClick on the picture to watch a brief video ↑\n\n## Setup\n\n**I made this application for personal usage and is not intended to be on Apple / Google stores, you will have to create your own Firebase project.**\n\n### Common platform steps:\n\n#### Firestore\n\n1. Create a [Firebase project](https://console.firebase.google.com/).\n2. Enable `Email/Password` sign-in provider from the [Firebase console](https://console.firebase.google.com/) (**Authentication** section).\n3. Create a **Firestore** database from the **Database** section, when you have to choose the database rules, select locked mode, you will adjust the rules in the next step.\n4. Update the database rules from `Database` -\u003e `Rules` and copy paste the following snippet:\n\n```\nservice cloud.firestore {\n  match /databases/{database}/documents {\n    match /{document=**} {\n      allow read, write: if request.auth.uid != null;\n    }\n  }\n}\n```\n\nThis rule allows only authenticated user to read / write into the database.\n\n#### Project\n\n1. Install `react-native` on your computer. The project is not using Expo, as a result you have to follow the instructions from the `React Native CLI Quickstart` section of the [official documentation](https://facebook.github.io/react-native/docs/getting-started).\n   **Make sure you are able to launch an Hello World `react-native` application before continuing!**\n2. `git clone https://github.com/akiver/wordsreminder.git` (or download the project archive).\n3. `cp .env.example .env`\n4. `yarn` (never tested with `npm`)\n\nFollow the instructions below for your target platform.\n\n### iOS\n\n**Follow common steps from the [setup section](#common-platform-steps) before continuing!**\n\n1. `sudo gem install cocoapods` (if you doesn't have [CocoaPods](https://cocoapods.org/) installed on your MAC).\n2. Generate your own [GoogleService-Info.plist](https://firebase.google.com/docs/ios/setup#add_firebase_to_your_app) (When asking for a **iOS bundle ID**, use someting like `com.myusername.wordsreminder`).\n3. Copy your `GoogleService-Info.plist` into `ios/WordsReminder/GoogleService-Info.plist`\n4. `yarn pod`\n5. `yarn ios` (will run the app in simulator)\n\n### Android\n\n**Follow common steps from the [setup section](#common-platform-steps) before continuing!**\n\n1. Download your `google-services.json` from the project settings of the [firebase console](https://console.firebase.google.com).\n2. Edit this file and rename the field `package_name` to `com.wordsreminder`.\n3. Move the file into `android/app/google-services.json`.\n4. `yarn android` (will run in simulator).\n\n## Install on device (release)\n\n### iOS\n\n**Follow iOS steps from the [setup section](#ios-1) before continuing!**\n\n1. [Setup a code signin team account](https://facebook.github.io/react-native/docs/running-on-device#2-configure-code-signing) (You don't need to be part of\n   Apple Developer Program to install the app on your own device).\n2. `yarn global add ios-deploy` (Required to install the application wihtout xCode)\n3. `yarn ios:release --device=\"Device name\"` You can find your device's name from `Settings` -\u003e `General` -\u003e `About`.\n\n### Android\n\n**Follow Android steps from the [setup section](#Android) before continuing!**\n\n1. Generate a signin key with the [official doc](https://facebook.github.io/react-native/docs/signed-apk-android).\n2. `yarn android:release --deviceId=\"Device ID\"` You can find your device ID with `adb devices`.\n\n## E2E tests\n\nEnd-to-end tests are made with [Detox](https://github.com/wix/Detox) and it uses a real Firestore database.\n\nWhen building the application for E2E tests, the Firestore collections names differ from those used in the \"real\" application.\nDefault names should be fine but you can change it from the `.env` file.\nAll variables with `E2E_` prefix are related to E2E tests.\n\nEach test suites must be able to run independently.\nYou can run 1 specific test suites with `yarn e2e:test:ios e2e/tests/sign-in.test.ts` for example.\n\n**Before running `yarn e2e:build:ios` or `yarn e2e:build:android`, make sure to kill any Metro processes, otherwise it may use the wrong collections names if Metro was started by `yarn ios` or `yarn android`!**\n\n### Setup\n\n1. Generate a service account key (it's a `json` file) from the Firebase console https://console.firebase.google.com/project/PROJECT-ID/settings/serviceaccounts/adminsdk (replace PROJECT-ID by your Firebase project ID in the URL).\n2. Copy paste the json file into the `e2e` folder and rename it to `google-services.json`.\n3. (optional) You can change the `E2E_xxx` variables from the `.env` if needed.\n\n#### iOS\n\n1. Make sure to meet the Detox [requirements](https://github.com/wix/Detox/blob/master/docs/Introduction.GettingStarted.md#prerequisites) and install [applesimutils](https://github.com/wix/Detox/blob/master/docs/Introduction.GettingStarted.md#3-install-applesimutils).\n2. `yarn e2e:build:ios`\n3. `yarn e2e:test:ios`\n\n**When running tests from the simulator, make sure the keyboard is visible, otherwise tests will fail because typing will not work! (it's configurable from Hardware =\u003e Keyboard =\u003e Toggle software keyboard)**\n\n_If you want to run E2E tests with the release build, use `yarn e2e:build:ios:release` then `yarn e2e:test:ios:release`._\n\n#### Android\n\n1. `yarn e2e:start`\n2. `yarn e2e:build:android`\n3. `yarn e2e:test:android`\n\n_If you want to run E2E tests with the release build, use `yarn e2e:build:android:release` then `yarn e2e:test:android:release`._\n\n## Migrations\n\nMigrations allow to change database scheme, data...\nAll migrations must be inside the `migrations` folder and export a `run` function.\n\n### Setup\n\n1. Replace `PROJECT_ID` by your project ID in the `.env` file, your project ID is available from the [Firebase console](https://console.firebase.google.com/).\n2. Create a service account key (it's a json file) from the [Google console](https://console.cloud.google.com/iam-admin/serviceaccounts).\n3. Rename the `.json` file to `serviceAccountKey.json` and paste it into the `migrations` folder.\n4. `yarn migrate`\n\n## SVG\n\nTo generate a svg into a React component:\n\n`npx @svgr/cli --icon --native file.svg`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakiver%2Fwordsreminder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakiver%2Fwordsreminder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakiver%2Fwordsreminder/lists"}