diff --git a/dist/cookie/{{cookiecutter.project_slug}}/.gitattributes b/dist/cookie/{{cookiecutter.project_slug}}/.gitattributes deleted file mode 100644 index 45a3dcb2a..000000000 --- a/dist/cookie/{{cookiecutter.project_slug}}/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -# Windows files should use crlf line endings -# https://help.github.com/articles/dealing-with-line-endings/ -*.bat text eol=crlf diff --git a/dist/cookie/{{cookiecutter.project_slug}}/.gitignore b/dist/cookie/{{cookiecutter.project_slug}}/.gitignore deleted file mode 100644 index ad572e632..000000000 --- a/dist/cookie/{{cookiecutter.project_slug}}/.gitignore +++ /dev/null @@ -1,59 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -# BUCK -buck-out/ -\.buckd/ -*.keystore -!debug.keystore - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/ - -*/fastlane/report.xml -*/fastlane/Preview.html -*/fastlane/screenshots - -# Bundle artifact -*.jsbundle - -# CocoaPods -/ios/Pods/ diff --git a/dist/cookie/{{cookiecutter.project_slug}}/README.md b/dist/cookie/{{cookiecutter.project_slug}}/README.md index 368a3c671..195e885c8 100644 --- a/dist/cookie/{{cookiecutter.project_slug}}/README.md +++ b/dist/cookie/{{cookiecutter.project_slug}}/README.md @@ -1,37 +1,52 @@ # {{cookiecutter.project_slug}} -Welcome to your new Crowdbotics app. +Welcome to your new Crowdbotics app. This is a repository for a mobile application developed with Django and React Native, built with [Crowdbotics](https://crowdbotics.com) ## What is Crowdbotics? + Crowdbotics is an easy way to build software applications of all kinds. You can build production, high-caliber software applications in minutes, rather than weeks or months, even if you're not a software developer. The reason this works is that most software applications and features we want to build are similar to applications that have been built before. We've crawled hundreds of thousands of public code repositories to teach the Crowdbotics engine how to create software. As a result, Crowdbotics can generate new applications automatically in a standardized way. +## Table of Contents + +- [{{cookiecutter.project_slug}}](#cookiecutterproject_slug) + - [What is Crowdbotics?](#what-is-crowdbotics) + - [Table of Contents](#table-of-contents) + - [Useful Links](#useful-links) + - [Project Description](#project-description) + - [Project Structure](#project-structure) + - [Features](#features) +- [Getting Started: Backend](#getting-started-backend) + - [Docker Setup (Recommended)](#docker-setup-recommended) + - [Local Setup (Alternative to Docker)](#local-setup-alternative-to-docker) + - [Installation](#installation) + - [Getting Started](#getting-started) +- [Usage](#usage) + - [Admin Panel](#admin-panel) + - [API Documentation](#api-documentation) +- [Getting started: Frontend](#getting-started-frontend) + - [Mobile App Related Installation](#mobile-app-related-installation) + - [Metro](#metro) + - [Android](#android) + - [iOS](#ios) + - [Modules (THIS SECTION IS AUTO-GENERATED, PLEASE DO NOT EDIT)](#modules-this-section-is-auto-generated-please-do-not-edit) + - [Setup react-native-vector-icons](#setup-react-native-vector-icons) + - [Running with Fastlane](#running-with-fastlane) + - [For Android](#for-android) + - [For iOS](#for-ios) + - [React Native Web](#react-native-web) +- [License](#license) + ### Useful Links -[App Dashboard](https://app.crowdbotics.com/) -· -[Knowledgebase](https://knowledge.crowdbotics.com/) -· -[Developer Training](https://knowledge.crowdbotics.com/crowdbotics-developer-training) -· -[Forum](https://discuss.crowdbotics.com/) -· -[Tech Support](https://crowdbotics.slack.com/archives/CGSAV319V) -## Table of Contents -1. [Project Description](#project-description) -2. [Project Structure](#project-structure) -3. [Modules](#modules) -4. [Getting Started: Frontend](#getting-started-frontend) - - [Installation](#installation) - - [Running with Fastlane](#running-with-fastlane) - - [Android](#android-1) - - [iOS](#ios-1) - - [React Native Web](#react-native-web) -5. [Getting Started: Backend](backend#readme) -6. [License](#license) +- [App Dashboard](https://app.crowdbotics.com/) +- [Knowledgebase](https://knowledge.crowdbotics.com/) +- [Developer Training](https://knowledge.crowdbotics.com/crowdbotics-developer-training) +- [Forum](https://discuss.crowdbotics.com/) +- [Tech Support](https://crowdbotics.slack.com/archives/CGSAV319V) ## Project Description @@ -40,32 +55,145 @@ As a result, Crowdbotics can generate new applications automatically in a standa ## Project Structure . - ├── ... - ├── android # Android native files - ├── backend # Django backend REST API - ├── ios # iOS native files - ├── modules # Modules - ├── public - ├── screens - ├── store # Application state storage - ├── ... + ├── .circleci + │   ├── config.yml + │   └── webhook_callback.sh + ├── .github + │   └── dependabot.yml ├── README.md - └── ... + ├── backend # Django backend REST API + | |-- ... + │   ├── Dockerfile + │   ├── Pipfile + │   ├── docker-compose.override.yml + │   ├── docker-compose.yml + │   ├── home # Starter home app + │   ├── manage.py + │   ├── modules # Crowdbotics Modules app + │   ├── static # Static assets + │   ├── {{cookiecutter.project_slug}} # Django project configurations + │   ├── users # Starter users app + │   └── web_build # React Native Web build + ├── heroku.yml + └── mobile + ├── ... + ├── App.js + ├── android # Android native files + ├── ios # iOS native files + ├── modules # Modules + ├── options + ├── package.json + ├── store # Application state storage + └── ... + +## Features + +1. **Local Authentication** using email and password with [allauth](https://pypi.org/project/django-allauth/) +2. **Rest API** using [django rest framework](http://www.django-rest-framework.org/) +3. **Forgot Password** +4. [Bootstrap4](https://getbootstrap.com/docs/4.0/getting-started/introduction/) +5. Toast Notification +6. Inline content editor in homepage + +# Getting Started: Backend + +Following are instructions on setting up your development environment. + +The recommended way for running the project locally and for development is using Docker. + +It's possible to also run the project without Docker. + +## Docker Setup (Recommended) + +This project is set up to run using [Docker Compose](https://docs.docker.com/compose/) by default. It is the recommended way. You can also use existing Docker Compose files as basis for custom deployment, e.g. [Docker Swarm](https://docs.docker.com/engine/swarm/), [kubernetes](https://kubernetes.io/), etc. + +1. Install Docker: + - Linux - [get.docker.com](https://get.docker.com/) + - Windows or MacOS - [Docker Desktop](https://www.docker.com/products/docker-desktop) +2. Clone this repo and `cd {{cookiecutter.project_slug}}/backend` +3. Make sure `Pipfile.lock` exists. If it doesn't, generate it with: + + ```sh + $ docker run -it --rm -v "$PWD":/django -w /django python:3.7 pip3 install --no-cache-dir -q pipenv && pipenv lock + ``` + +4. Use `.env.example` to create `.env`: + ```sh + $ cp .env.example .env + ``` +5. Update `.env` and `docker-compose.override.yml` replacing all `` + + Use `python -c 'from secrets import token_urlsafe; print("SECRET_KEY=" + token_urlsafe(50))'` to generate the random `SECRET_KEY` +6. Start up the containers: + + ```sh + $ docker-compose up + ``` + + This will build the necessary containers and start them, including the web server on the host and port you specified in `.env`. + + Current (project) directory will be mapped with the container meaning any edits you make will be picked up by the container. + +7. Seed the Postgres DB (in a separate terminal): + ```sh + $ docker-compose exec web python3 manage.py makemigrations + $ docker-compose exec web python3 manage.py migrate + ``` +8. Create a superuser if required: + ```sh + $ docker-compose exec web python3 manage.py createsuperuser + ``` + You will find an activation link in the server log output. + +## Local Setup (Alternative to Docker) + +1. [Postgresql](https://www.postgresql.org/download/) +2. [Python](https://www.python.org/downloads/release/python-365/) + +### Installation + +1. Install [pipenv](https://pypi.org/project/pipenv/) +2. Clone this repo and `cd {{cookiecutter.project_slug}}/backend` +3. Run `pip install --user --upgrade pipenv` to get the latest pipenv version. +4. Run `pipenv --python 3.6` +5. Run `pipenv install` +6. Run `cp .env.example .env` +7. Update .env file `DATABASE_URL` with your `database_name`, `database_user`, `database_password`, if you use postgresql. + Can alternatively set it to `sqlite:////tmp/my-tmp-sqlite.db`, if you want to use sqlite for local development. + +### Getting Started + +1. Run `pipenv shell` +2. Run `python manage.py makemigrations` +3. Run `python manage.py migrate` +4. Run `python manage.py runserver` -## Modules (THIS SECTION IS AUTO-GENERATED, PLEASE DO NOT EDIT) +# Usage -This section will show any installed modules you add from the Storyboard Modules section. +## Admin Panel + +Admin Panel can be accessed through http://localhost:8000/admin/. If you are the Project Owner, admin credentials can be generated from App > Settings on [Crowdbotics App Dashboard](https://app.crowdbotics.com/). If not, please request your PM or Project Owner to generate admin credentials and share with you. + +## API Documentation + +API Documentation is generated automatically and can be access through http://localhost:8000/api-docs/. Please make sure you are signed in to the admin panel before navigating to this page. # Getting started: Frontend This section outlines instructions on setting up a local development environment for the frontend of your application. -## Installation +## Mobile App Related Installation ### Metro After cloning the repo, install the dependencies locally with [Yarn](https://yarnpkg.com/): +Goto `/mobile` and run `yarn install` + +```sh +cd {{cookiecutter.project_slug}}/mobile +``` + ```sh yarn install ``` @@ -89,6 +217,10 @@ pod install --repo-update --project-directory=ios npx react-native run-ios ``` +## Modules (THIS SECTION IS AUTO-GENERATED, PLEASE DO NOT EDIT) + +This section will show any installed modules you add from the Storyboard Modules section. + ### Setup react-native-vector-icons Follow instructions at their [README.md](https://github.com/oblador/react-native-vector-icons/blob/master/README.md#installation) @@ -111,7 +243,7 @@ The commands for Android and iOS are the same: - Build and upload a beta (requires signing): `bundle exec fastlane beta` - Build or promote a release: `bundle exec fastlane deploy` -### Android +### For Android Publish an Android app you must first create an app in the Play Console and manually upload an APK. After the first upload run `bundle exec fastlane supply init` from `android/` to sync with the Play store. All future releases will be @@ -120,7 +252,7 @@ uploaded automatically. Android uses tracks. A beta release will build the app and upload to the beta track. Deploying will promote from beta to production. -### iOS +### For iOS CB developers must follow fastlane's [codesigning guide](https://codesigning.guide/) for using match. Match will automatically sign iOS builds. @@ -141,6 +273,7 @@ Please follow the steps - the web_build folder is generated and copied to backend/ automatically. please commit/push the web_build folder to git # License + The use of code in this repository is governed by Crowdbotics [Terms and Conditions](https://www.crowdbotics.com/terms-of-service). Created with ❤️ by [Crowdbotics](https://www.crowdbotics.com/) diff --git a/dist/cookie/{{cookiecutter.project_slug}}/.buckconfig b/dist/cookie/{{cookiecutter.project_slug}}/mobile/.buckconfig similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/.buckconfig rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/.buckconfig diff --git a/dist/cookie/{{cookiecutter.project_slug}}/.crowdbotics.json b/dist/cookie/{{cookiecutter.project_slug}}/mobile/.crowdbotics.json similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/.crowdbotics.json rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/.crowdbotics.json diff --git a/dist/cookie/{{cookiecutter.project_slug}}/.editorconfig b/dist/cookie/{{cookiecutter.project_slug}}/mobile/.editorconfig similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/.editorconfig rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/.editorconfig diff --git a/dist/cookie/{{cookiecutter.project_slug}}/.env.template b/dist/cookie/{{cookiecutter.project_slug}}/mobile/.env.template similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/.env.template rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/.env.template diff --git a/dist/cookie/{{cookiecutter.project_slug}}/.eslintrc.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/.eslintrc.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/.eslintrc.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/.eslintrc.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/.flowconfig b/dist/cookie/{{cookiecutter.project_slug}}/mobile/.flowconfig similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/.flowconfig rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/.flowconfig diff --git a/dist/cookie/{{cookiecutter.project_slug}}/mobile/.gitattributes b/dist/cookie/{{cookiecutter.project_slug}}/mobile/.gitattributes new file mode 100644 index 000000000..3592e3c39 --- /dev/null +++ b/dist/cookie/{{cookiecutter.project_slug}}/mobile/.gitattributes @@ -0,0 +1,11 @@ +# Windows files should use crlf line endings +# https://help.github.com/articles/dealing-with-line-endings/ +*.bat text eol=crlf + +# Normalize line endings to avoid spurious failures in the core test suite on Windows. +*html text eol=lf +*css text eol=lf +*js text eol=lf +tests/staticfiles_tests/apps/test/static/test/*txt text eol=lf +tests/staticfiles_tests/project/documents/test/*txt text eol=lf +docs/releases/*.txt merge=union diff --git a/dist/cookie/{{cookiecutter.project_slug}}/mobile/.gitignore b/dist/cookie/{{cookiecutter.project_slug}}/mobile/.gitignore new file mode 100644 index 000000000..e68e2247d --- /dev/null +++ b/dist/cookie/{{cookiecutter.project_slug}}/mobile/.gitignore @@ -0,0 +1,187 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# BUCK +buck-out/ +\.buckd/ +*.keystore +!debug.keystore + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +*/fastlane/report.xml +*/fastlane/Preview.html +*/fastlane/screenshots + +# Bundle artifact +*.jsbundle + +# CocoaPods +/ios/Pods/ + +# ----------------------------------------------------------------------------- +# Python and Django gitignore +# ----------------------------------------------------------------------------- + + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST +.terraform + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ +tests/.coverage +tests/report/ +tests/coverage_html/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal +staticfiles/ + +# Postgress DB +postgres-data/ + +# Sphinx documentation +docs/_build/ +docs/locale/ + +# PyBuilder +.pybuilder/ +target/ + +# IPython +profile_default/ +ipython_config.py + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintainted in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ \ No newline at end of file diff --git a/dist/cookie/{{cookiecutter.project_slug}}/.prettierrc.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/.prettierrc.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/.prettierrc.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/.prettierrc.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/.watchmanconfig b/dist/cookie/{{cookiecutter.project_slug}}/mobile/.watchmanconfig similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/.watchmanconfig rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/.watchmanconfig diff --git a/dist/cookie/{{cookiecutter.project_slug}}/App.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/App.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/App.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/App.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/Gemfile b/dist/cookie/{{cookiecutter.project_slug}}/mobile/Gemfile similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/Gemfile rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/Gemfile diff --git a/dist/cookie/{{cookiecutter.project_slug}}/Gemfile.lock b/dist/cookie/{{cookiecutter.project_slug}}/mobile/Gemfile.lock similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/Gemfile.lock rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/Gemfile.lock diff --git a/dist/cookie/{{cookiecutter.project_slug}}/__tests__/App-test.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/__tests__/App-test.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/__tests__/App-test.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/__tests__/App-test.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/_BUCK b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/_BUCK similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/_BUCK rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/_BUCK diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/build.gradle b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/build.gradle similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/build.gradle rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/build.gradle diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/build_defs.bzl b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/build_defs.bzl similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/build_defs.bzl rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/build_defs.bzl diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/debug.keystore b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/debug.keystore similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/debug.keystore rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/debug.keystore diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/proguard-rules.pro b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/proguard-rules.pro similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/proguard-rules.pro rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/proguard-rules.pro diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/debug/AndroidManifest.xml b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/debug/AndroidManifest.xml similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/debug/AndroidManifest.xml rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/debug/AndroidManifest.xml diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/debug/java/com/{{cookiecutter.project_slug}}/ReactNativeFlipper.java b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/debug/java/com/{{cookiecutter.project_slug}}/ReactNativeFlipper.java similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/debug/java/com/{{cookiecutter.project_slug}}/ReactNativeFlipper.java rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/debug/java/com/{{cookiecutter.project_slug}}/ReactNativeFlipper.java diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/AndroidManifest.xml b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/AndroidManifest.xml similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/AndroidManifest.xml rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/AndroidManifest.xml diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/java/com/{{cookiecutter.project_slug}}/MainActivity.java b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/java/com/{{cookiecutter.project_slug}}/MainActivity.java similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/java/com/{{cookiecutter.project_slug}}/MainActivity.java rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/java/com/{{cookiecutter.project_slug}}/MainActivity.java diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/java/com/{{cookiecutter.project_slug}}/MainApplication.java b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/java/com/{{cookiecutter.project_slug}}/MainApplication.java similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/java/com/{{cookiecutter.project_slug}}/MainApplication.java rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/java/com/{{cookiecutter.project_slug}}/MainApplication.java diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/values/strings.xml b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/values/strings.xml similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/values/strings.xml rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/values/strings.xml diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/values/styles.xml b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/values/styles.xml similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/app/src/main/res/values/styles.xml rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/app/src/main/res/values/styles.xml diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/build.gradle b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/build.gradle similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/build.gradle rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/build.gradle diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/fastlane/Appfile b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/fastlane/Appfile similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/fastlane/Appfile rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/fastlane/Appfile diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/fastlane/Fastfile b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/fastlane/Fastfile similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/fastlane/Fastfile rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/fastlane/Fastfile diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/fastlane/Pluginfile b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/fastlane/Pluginfile similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/fastlane/Pluginfile rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/fastlane/Pluginfile diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/fastlane/README.md b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/fastlane/README.md similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/fastlane/README.md rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/fastlane/README.md diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/gradle.properties b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/gradle.properties similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/gradle.properties rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/gradle.properties diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/gradle/wrapper/gradle-wrapper.jar b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/gradle/wrapper/gradle-wrapper.jar rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/gradle/wrapper/gradle-wrapper.jar diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/gradle/wrapper/gradle-wrapper.properties b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/gradle/wrapper/gradle-wrapper.properties rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/gradle/wrapper/gradle-wrapper.properties diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/gradlew b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/gradlew similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/gradlew rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/gradlew diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/gradlew.bat b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/gradlew.bat similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/gradlew.bat rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/gradlew.bat diff --git a/dist/cookie/{{cookiecutter.project_slug}}/android/settings.gradle b/dist/cookie/{{cookiecutter.project_slug}}/mobile/android/settings.gradle similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/android/settings.gradle rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/android/settings.gradle diff --git a/dist/cookie/{{cookiecutter.project_slug}}/app.json b/dist/cookie/{{cookiecutter.project_slug}}/mobile/app.json similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/app.json rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/app.json diff --git a/dist/cookie/{{cookiecutter.project_slug}}/babel.config.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/babel.config.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/babel.config.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/babel.config.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/config-overrides.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/config-overrides.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/config-overrides.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/config-overrides.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/index.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/index.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/index.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/index.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/Podfile b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/Podfile similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/Podfile rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/Podfile diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/fastlane/Appfile b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/fastlane/Appfile similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/fastlane/Appfile rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/fastlane/Appfile diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/fastlane/Fastfile b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/fastlane/Fastfile similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/fastlane/Fastfile rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/fastlane/Fastfile diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/fastlane/Matchfile b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/fastlane/Matchfile similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/fastlane/Matchfile rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/fastlane/Matchfile diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/fastlane/README.md b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/fastlane/README.md similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/fastlane/README.md rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/fastlane/README.md diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}.xcodeproj/project.pbxproj b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}.xcodeproj/project.pbxproj similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}.xcodeproj/project.pbxproj rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}.xcodeproj/project.pbxproj diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}.xcodeproj/xcshareddata/xcschemes/{{cookiecutter.project_slug}}.xcscheme b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}.xcodeproj/xcshareddata/xcschemes/{{cookiecutter.project_slug}}.xcscheme similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}.xcodeproj/xcshareddata/xcschemes/{{cookiecutter.project_slug}}.xcscheme rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}.xcodeproj/xcshareddata/xcschemes/{{cookiecutter.project_slug}}.xcscheme diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}/AppDelegate.h b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}/AppDelegate.h similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}/AppDelegate.h rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}/AppDelegate.h diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}/AppDelegate.m b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}/AppDelegate.m similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}/AppDelegate.m rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}/AppDelegate.m diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}/Images.xcassets/AppIcon.appiconset/Contents.json b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}/Images.xcassets/AppIcon.appiconset/Contents.json rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}/Images.xcassets/Contents.json b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}/Images.xcassets/Contents.json similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}/Images.xcassets/Contents.json rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}/Images.xcassets/Contents.json diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}/Info.plist b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}/Info.plist similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}/Info.plist rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}/Info.plist diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}/LaunchScreen.storyboard b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}/LaunchScreen.storyboard similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}/LaunchScreen.storyboard rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}/LaunchScreen.storyboard diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}/main.m b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}/main.m similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}/main.m rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}/main.m diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}Tests/Info.plist b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}Tests/Info.plist similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}Tests/Info.plist rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}Tests/Info.plist diff --git a/dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}Tests/{{cookiecutter.project_slug}}Tests.m b/dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}Tests/{{cookiecutter.project_slug}}Tests.m similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/ios/{{cookiecutter.project_slug}}Tests/{{cookiecutter.project_slug}}Tests.m rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/ios/{{cookiecutter.project_slug}}Tests/{{cookiecutter.project_slug}}Tests.m diff --git a/dist/cookie/{{cookiecutter.project_slug}}/metro.config.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/metro.config.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/metro.config.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/metro.config.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/modules/index.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/modules/index.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/modules/index.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/modules/index.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/modules/modules.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/modules/modules.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/modules/modules.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/modules/modules.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/modules/package.json b/dist/cookie/{{cookiecutter.project_slug}}/mobile/modules/package.json similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/modules/package.json rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/modules/package.json diff --git a/dist/cookie/{{cookiecutter.project_slug}}/modules/yourapp.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/modules/yourapp.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/modules/yourapp.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/modules/yourapp.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/options/index.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/options/index.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/options/index.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/options/index.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/options/options.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/options/options.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/options/options.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/options/options.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/package.json b/dist/cookie/{{cookiecutter.project_slug}}/mobile/package.json similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/package.json rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/package.json diff --git a/dist/cookie/{{cookiecutter.project_slug}}/public/index.html b/dist/cookie/{{cookiecutter.project_slug}}/mobile/public/index.html similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/public/index.html rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/public/index.html diff --git a/dist/cookie/{{cookiecutter.project_slug}}/screens/index.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/screens/index.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/screens/index.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/screens/index.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/screens/package.json b/dist/cookie/{{cookiecutter.project_slug}}/mobile/screens/package.json similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/screens/package.json rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/screens/package.json diff --git a/dist/cookie/{{cookiecutter.project_slug}}/store/README.md b/dist/cookie/{{cookiecutter.project_slug}}/mobile/store/README.md similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/store/README.md rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/store/README.md diff --git a/dist/cookie/{{cookiecutter.project_slug}}/store/custom/.keep b/dist/cookie/{{cookiecutter.project_slug}}/mobile/store/custom/.keep similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/store/custom/.keep rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/store/custom/.keep diff --git a/dist/cookie/{{cookiecutter.project_slug}}/store/index.js b/dist/cookie/{{cookiecutter.project_slug}}/mobile/store/index.js similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/store/index.js rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/store/index.js diff --git a/dist/cookie/{{cookiecutter.project_slug}}/store/package.json b/dist/cookie/{{cookiecutter.project_slug}}/mobile/store/package.json similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/store/package.json rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/store/package.json diff --git a/dist/cookie/{{cookiecutter.project_slug}}/yarn.lock b/dist/cookie/{{cookiecutter.project_slug}}/mobile/yarn.lock similarity index 100% rename from dist/cookie/{{cookiecutter.project_slug}}/yarn.lock rename to dist/cookie/{{cookiecutter.project_slug}}/mobile/yarn.lock diff --git a/dist/raw/ProjectName/.gitattributes b/dist/raw/ProjectName/.gitattributes deleted file mode 100644 index 45a3dcb2a..000000000 --- a/dist/raw/ProjectName/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -# Windows files should use crlf line endings -# https://help.github.com/articles/dealing-with-line-endings/ -*.bat text eol=crlf diff --git a/dist/raw/ProjectName/.gitignore b/dist/raw/ProjectName/.gitignore deleted file mode 100644 index ad572e632..000000000 --- a/dist/raw/ProjectName/.gitignore +++ /dev/null @@ -1,59 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -# BUCK -buck-out/ -\.buckd/ -*.keystore -!debug.keystore - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/ - -*/fastlane/report.xml -*/fastlane/Preview.html -*/fastlane/screenshots - -# Bundle artifact -*.jsbundle - -# CocoaPods -/ios/Pods/ diff --git a/dist/raw/ProjectName/README.md b/dist/raw/ProjectName/README.md index ec5028c0c..195e885c8 100644 --- a/dist/raw/ProjectName/README.md +++ b/dist/raw/ProjectName/README.md @@ -1,37 +1,52 @@ -# ProjectName +# {{cookiecutter.project_slug}} -Welcome to your new Crowdbotics app. +Welcome to your new Crowdbotics app. This is a repository for a mobile application developed with Django and React Native, built with [Crowdbotics](https://crowdbotics.com) ## What is Crowdbotics? + Crowdbotics is an easy way to build software applications of all kinds. You can build production, high-caliber software applications in minutes, rather than weeks or months, even if you're not a software developer. The reason this works is that most software applications and features we want to build are similar to applications that have been built before. We've crawled hundreds of thousands of public code repositories to teach the Crowdbotics engine how to create software. As a result, Crowdbotics can generate new applications automatically in a standardized way. +## Table of Contents + +- [{{cookiecutter.project_slug}}](#cookiecutterproject_slug) + - [What is Crowdbotics?](#what-is-crowdbotics) + - [Table of Contents](#table-of-contents) + - [Useful Links](#useful-links) + - [Project Description](#project-description) + - [Project Structure](#project-structure) + - [Features](#features) +- [Getting Started: Backend](#getting-started-backend) + - [Docker Setup (Recommended)](#docker-setup-recommended) + - [Local Setup (Alternative to Docker)](#local-setup-alternative-to-docker) + - [Installation](#installation) + - [Getting Started](#getting-started) +- [Usage](#usage) + - [Admin Panel](#admin-panel) + - [API Documentation](#api-documentation) +- [Getting started: Frontend](#getting-started-frontend) + - [Mobile App Related Installation](#mobile-app-related-installation) + - [Metro](#metro) + - [Android](#android) + - [iOS](#ios) + - [Modules (THIS SECTION IS AUTO-GENERATED, PLEASE DO NOT EDIT)](#modules-this-section-is-auto-generated-please-do-not-edit) + - [Setup react-native-vector-icons](#setup-react-native-vector-icons) + - [Running with Fastlane](#running-with-fastlane) + - [For Android](#for-android) + - [For iOS](#for-ios) + - [React Native Web](#react-native-web) +- [License](#license) + ### Useful Links -[App Dashboard](https://app.crowdbotics.com/) -· -[Knowledgebase](https://knowledge.crowdbotics.com/) -· -[Developer Training](https://knowledge.crowdbotics.com/crowdbotics-developer-training) -· -[Forum](https://discuss.crowdbotics.com/) -· -[Tech Support](https://crowdbotics.slack.com/archives/CGSAV319V) -## Table of Contents -1. [Project Description](#project-description) -2. [Project Structure](#project-structure) -3. [Modules](#modules) -4. [Getting Started: Frontend](#getting-started-frontend) - - [Installation](#installation) - - [Running with Fastlane](#running-with-fastlane) - - [Android](#android-1) - - [iOS](#ios-1) - - [React Native Web](#react-native-web) -5. [Getting Started: Backend](backend#readme) -6. [License](#license) +- [App Dashboard](https://app.crowdbotics.com/) +- [Knowledgebase](https://knowledge.crowdbotics.com/) +- [Developer Training](https://knowledge.crowdbotics.com/crowdbotics-developer-training) +- [Forum](https://discuss.crowdbotics.com/) +- [Tech Support](https://crowdbotics.slack.com/archives/CGSAV319V) ## Project Description @@ -40,32 +55,145 @@ As a result, Crowdbotics can generate new applications automatically in a standa ## Project Structure . - ├── ... - ├── android # Android native files - ├── backend # Django backend REST API - ├── ios # iOS native files - ├── modules # Modules - ├── public - ├── screens - ├── store # Application state storage - ├── ... + ├── .circleci + │   ├── config.yml + │   └── webhook_callback.sh + ├── .github + │   └── dependabot.yml ├── README.md - └── ... + ├── backend # Django backend REST API + | |-- ... + │   ├── Dockerfile + │   ├── Pipfile + │   ├── docker-compose.override.yml + │   ├── docker-compose.yml + │   ├── home # Starter home app + │   ├── manage.py + │   ├── modules # Crowdbotics Modules app + │   ├── static # Static assets + │   ├── {{cookiecutter.project_slug}} # Django project configurations + │   ├── users # Starter users app + │   └── web_build # React Native Web build + ├── heroku.yml + └── mobile + ├── ... + ├── App.js + ├── android # Android native files + ├── ios # iOS native files + ├── modules # Modules + ├── options + ├── package.json + ├── store # Application state storage + └── ... + +## Features + +1. **Local Authentication** using email and password with [allauth](https://pypi.org/project/django-allauth/) +2. **Rest API** using [django rest framework](http://www.django-rest-framework.org/) +3. **Forgot Password** +4. [Bootstrap4](https://getbootstrap.com/docs/4.0/getting-started/introduction/) +5. Toast Notification +6. Inline content editor in homepage + +# Getting Started: Backend + +Following are instructions on setting up your development environment. + +The recommended way for running the project locally and for development is using Docker. + +It's possible to also run the project without Docker. + +## Docker Setup (Recommended) + +This project is set up to run using [Docker Compose](https://docs.docker.com/compose/) by default. It is the recommended way. You can also use existing Docker Compose files as basis for custom deployment, e.g. [Docker Swarm](https://docs.docker.com/engine/swarm/), [kubernetes](https://kubernetes.io/), etc. + +1. Install Docker: + - Linux - [get.docker.com](https://get.docker.com/) + - Windows or MacOS - [Docker Desktop](https://www.docker.com/products/docker-desktop) +2. Clone this repo and `cd {{cookiecutter.project_slug}}/backend` +3. Make sure `Pipfile.lock` exists. If it doesn't, generate it with: + + ```sh + $ docker run -it --rm -v "$PWD":/django -w /django python:3.7 pip3 install --no-cache-dir -q pipenv && pipenv lock + ``` + +4. Use `.env.example` to create `.env`: + ```sh + $ cp .env.example .env + ``` +5. Update `.env` and `docker-compose.override.yml` replacing all `` + + Use `python -c 'from secrets import token_urlsafe; print("SECRET_KEY=" + token_urlsafe(50))'` to generate the random `SECRET_KEY` +6. Start up the containers: + + ```sh + $ docker-compose up + ``` + + This will build the necessary containers and start them, including the web server on the host and port you specified in `.env`. + + Current (project) directory will be mapped with the container meaning any edits you make will be picked up by the container. + +7. Seed the Postgres DB (in a separate terminal): + ```sh + $ docker-compose exec web python3 manage.py makemigrations + $ docker-compose exec web python3 manage.py migrate + ``` +8. Create a superuser if required: + ```sh + $ docker-compose exec web python3 manage.py createsuperuser + ``` + You will find an activation link in the server log output. + +## Local Setup (Alternative to Docker) + +1. [Postgresql](https://www.postgresql.org/download/) +2. [Python](https://www.python.org/downloads/release/python-365/) + +### Installation + +1. Install [pipenv](https://pypi.org/project/pipenv/) +2. Clone this repo and `cd {{cookiecutter.project_slug}}/backend` +3. Run `pip install --user --upgrade pipenv` to get the latest pipenv version. +4. Run `pipenv --python 3.6` +5. Run `pipenv install` +6. Run `cp .env.example .env` +7. Update .env file `DATABASE_URL` with your `database_name`, `database_user`, `database_password`, if you use postgresql. + Can alternatively set it to `sqlite:////tmp/my-tmp-sqlite.db`, if you want to use sqlite for local development. + +### Getting Started + +1. Run `pipenv shell` +2. Run `python manage.py makemigrations` +3. Run `python manage.py migrate` +4. Run `python manage.py runserver` -## Modules (THIS SECTION IS AUTO-GENERATED, PLEASE DO NOT EDIT) +# Usage -This section will show any installed modules you add from the Storyboard Modules section. +## Admin Panel + +Admin Panel can be accessed through http://localhost:8000/admin/. If you are the Project Owner, admin credentials can be generated from App > Settings on [Crowdbotics App Dashboard](https://app.crowdbotics.com/). If not, please request your PM or Project Owner to generate admin credentials and share with you. + +## API Documentation + +API Documentation is generated automatically and can be access through http://localhost:8000/api-docs/. Please make sure you are signed in to the admin panel before navigating to this page. # Getting started: Frontend This section outlines instructions on setting up a local development environment for the frontend of your application. -## Installation +## Mobile App Related Installation ### Metro After cloning the repo, install the dependencies locally with [Yarn](https://yarnpkg.com/): +Goto `/mobile` and run `yarn install` + +```sh +cd {{cookiecutter.project_slug}}/mobile +``` + ```sh yarn install ``` @@ -89,6 +217,10 @@ pod install --repo-update --project-directory=ios npx react-native run-ios ``` +## Modules (THIS SECTION IS AUTO-GENERATED, PLEASE DO NOT EDIT) + +This section will show any installed modules you add from the Storyboard Modules section. + ### Setup react-native-vector-icons Follow instructions at their [README.md](https://github.com/oblador/react-native-vector-icons/blob/master/README.md#installation) @@ -111,7 +243,7 @@ The commands for Android and iOS are the same: - Build and upload a beta (requires signing): `bundle exec fastlane beta` - Build or promote a release: `bundle exec fastlane deploy` -### Android +### For Android Publish an Android app you must first create an app in the Play Console and manually upload an APK. After the first upload run `bundle exec fastlane supply init` from `android/` to sync with the Play store. All future releases will be @@ -120,7 +252,7 @@ uploaded automatically. Android uses tracks. A beta release will build the app and upload to the beta track. Deploying will promote from beta to production. -### iOS +### For iOS CB developers must follow fastlane's [codesigning guide](https://codesigning.guide/) for using match. Match will automatically sign iOS builds. @@ -141,6 +273,7 @@ Please follow the steps - the web_build folder is generated and copied to backend/ automatically. please commit/push the web_build folder to git # License + The use of code in this repository is governed by Crowdbotics [Terms and Conditions](https://www.crowdbotics.com/terms-of-service). Created with ❤️ by [Crowdbotics](https://www.crowdbotics.com/) diff --git a/dist/raw/ProjectName/.buckconfig b/dist/raw/ProjectName/mobile/.buckconfig similarity index 100% rename from dist/raw/ProjectName/.buckconfig rename to dist/raw/ProjectName/mobile/.buckconfig diff --git a/dist/raw/ProjectName/.crowdbotics.json b/dist/raw/ProjectName/mobile/.crowdbotics.json similarity index 100% rename from dist/raw/ProjectName/.crowdbotics.json rename to dist/raw/ProjectName/mobile/.crowdbotics.json diff --git a/dist/raw/ProjectName/.editorconfig b/dist/raw/ProjectName/mobile/.editorconfig similarity index 100% rename from dist/raw/ProjectName/.editorconfig rename to dist/raw/ProjectName/mobile/.editorconfig diff --git a/dist/raw/ProjectName/.env.template b/dist/raw/ProjectName/mobile/.env.template similarity index 100% rename from dist/raw/ProjectName/.env.template rename to dist/raw/ProjectName/mobile/.env.template diff --git a/dist/raw/ProjectName/.eslintrc.js b/dist/raw/ProjectName/mobile/.eslintrc.js similarity index 100% rename from dist/raw/ProjectName/.eslintrc.js rename to dist/raw/ProjectName/mobile/.eslintrc.js diff --git a/dist/raw/ProjectName/.flowconfig b/dist/raw/ProjectName/mobile/.flowconfig similarity index 100% rename from dist/raw/ProjectName/.flowconfig rename to dist/raw/ProjectName/mobile/.flowconfig diff --git a/dist/raw/ProjectName/mobile/.gitattributes b/dist/raw/ProjectName/mobile/.gitattributes new file mode 100644 index 000000000..3592e3c39 --- /dev/null +++ b/dist/raw/ProjectName/mobile/.gitattributes @@ -0,0 +1,11 @@ +# Windows files should use crlf line endings +# https://help.github.com/articles/dealing-with-line-endings/ +*.bat text eol=crlf + +# Normalize line endings to avoid spurious failures in the core test suite on Windows. +*html text eol=lf +*css text eol=lf +*js text eol=lf +tests/staticfiles_tests/apps/test/static/test/*txt text eol=lf +tests/staticfiles_tests/project/documents/test/*txt text eol=lf +docs/releases/*.txt merge=union diff --git a/dist/raw/ProjectName/mobile/.gitignore b/dist/raw/ProjectName/mobile/.gitignore new file mode 100644 index 000000000..e68e2247d --- /dev/null +++ b/dist/raw/ProjectName/mobile/.gitignore @@ -0,0 +1,187 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# BUCK +buck-out/ +\.buckd/ +*.keystore +!debug.keystore + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +*/fastlane/report.xml +*/fastlane/Preview.html +*/fastlane/screenshots + +# Bundle artifact +*.jsbundle + +# CocoaPods +/ios/Pods/ + +# ----------------------------------------------------------------------------- +# Python and Django gitignore +# ----------------------------------------------------------------------------- + + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST +.terraform + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ +tests/.coverage +tests/report/ +tests/coverage_html/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal +staticfiles/ + +# Postgress DB +postgres-data/ + +# Sphinx documentation +docs/_build/ +docs/locale/ + +# PyBuilder +.pybuilder/ +target/ + +# IPython +profile_default/ +ipython_config.py + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintainted in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ \ No newline at end of file diff --git a/dist/raw/ProjectName/.prettierrc.js b/dist/raw/ProjectName/mobile/.prettierrc.js similarity index 100% rename from dist/raw/ProjectName/.prettierrc.js rename to dist/raw/ProjectName/mobile/.prettierrc.js diff --git a/dist/raw/ProjectName/.watchmanconfig b/dist/raw/ProjectName/mobile/.watchmanconfig similarity index 100% rename from dist/raw/ProjectName/.watchmanconfig rename to dist/raw/ProjectName/mobile/.watchmanconfig diff --git a/dist/raw/ProjectName/App.js b/dist/raw/ProjectName/mobile/App.js similarity index 100% rename from dist/raw/ProjectName/App.js rename to dist/raw/ProjectName/mobile/App.js diff --git a/dist/raw/ProjectName/Gemfile b/dist/raw/ProjectName/mobile/Gemfile similarity index 100% rename from dist/raw/ProjectName/Gemfile rename to dist/raw/ProjectName/mobile/Gemfile diff --git a/dist/raw/ProjectName/Gemfile.lock b/dist/raw/ProjectName/mobile/Gemfile.lock similarity index 100% rename from dist/raw/ProjectName/Gemfile.lock rename to dist/raw/ProjectName/mobile/Gemfile.lock diff --git a/dist/raw/ProjectName/__tests__/App-test.js b/dist/raw/ProjectName/mobile/__tests__/App-test.js similarity index 100% rename from dist/raw/ProjectName/__tests__/App-test.js rename to dist/raw/ProjectName/mobile/__tests__/App-test.js diff --git a/dist/raw/ProjectName/android/app/_BUCK b/dist/raw/ProjectName/mobile/android/app/_BUCK similarity index 100% rename from dist/raw/ProjectName/android/app/_BUCK rename to dist/raw/ProjectName/mobile/android/app/_BUCK diff --git a/dist/raw/ProjectName/android/app/build.gradle b/dist/raw/ProjectName/mobile/android/app/build.gradle similarity index 100% rename from dist/raw/ProjectName/android/app/build.gradle rename to dist/raw/ProjectName/mobile/android/app/build.gradle diff --git a/dist/raw/ProjectName/android/app/build_defs.bzl b/dist/raw/ProjectName/mobile/android/app/build_defs.bzl similarity index 100% rename from dist/raw/ProjectName/android/app/build_defs.bzl rename to dist/raw/ProjectName/mobile/android/app/build_defs.bzl diff --git a/dist/raw/ProjectName/android/app/debug.keystore b/dist/raw/ProjectName/mobile/android/app/debug.keystore similarity index 100% rename from dist/raw/ProjectName/android/app/debug.keystore rename to dist/raw/ProjectName/mobile/android/app/debug.keystore diff --git a/dist/raw/ProjectName/android/app/proguard-rules.pro b/dist/raw/ProjectName/mobile/android/app/proguard-rules.pro similarity index 100% rename from dist/raw/ProjectName/android/app/proguard-rules.pro rename to dist/raw/ProjectName/mobile/android/app/proguard-rules.pro diff --git a/dist/raw/ProjectName/android/app/src/debug/AndroidManifest.xml b/dist/raw/ProjectName/mobile/android/app/src/debug/AndroidManifest.xml similarity index 100% rename from dist/raw/ProjectName/android/app/src/debug/AndroidManifest.xml rename to dist/raw/ProjectName/mobile/android/app/src/debug/AndroidManifest.xml diff --git a/dist/raw/ProjectName/android/app/src/debug/java/com/projectname/ReactNativeFlipper.java b/dist/raw/ProjectName/mobile/android/app/src/debug/java/com/projectname/ReactNativeFlipper.java similarity index 100% rename from dist/raw/ProjectName/android/app/src/debug/java/com/projectname/ReactNativeFlipper.java rename to dist/raw/ProjectName/mobile/android/app/src/debug/java/com/projectname/ReactNativeFlipper.java diff --git a/dist/raw/ProjectName/android/app/src/main/AndroidManifest.xml b/dist/raw/ProjectName/mobile/android/app/src/main/AndroidManifest.xml similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/AndroidManifest.xml rename to dist/raw/ProjectName/mobile/android/app/src/main/AndroidManifest.xml diff --git a/dist/raw/ProjectName/android/app/src/main/java/com/projectname/MainActivity.java b/dist/raw/ProjectName/mobile/android/app/src/main/java/com/projectname/MainActivity.java similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/java/com/projectname/MainActivity.java rename to dist/raw/ProjectName/mobile/android/app/src/main/java/com/projectname/MainActivity.java diff --git a/dist/raw/ProjectName/android/app/src/main/java/com/projectname/MainApplication.java b/dist/raw/ProjectName/mobile/android/app/src/main/java/com/projectname/MainApplication.java similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/java/com/projectname/MainApplication.java rename to dist/raw/ProjectName/mobile/android/app/src/main/java/com/projectname/MainApplication.java diff --git a/dist/raw/ProjectName/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/dist/raw/ProjectName/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png rename to dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png diff --git a/dist/raw/ProjectName/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/dist/raw/ProjectName/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png rename to dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png diff --git a/dist/raw/ProjectName/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/dist/raw/ProjectName/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png rename to dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/dist/raw/ProjectName/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/dist/raw/ProjectName/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png rename to dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/dist/raw/ProjectName/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/dist/raw/ProjectName/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename to dist/raw/ProjectName/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/dist/raw/ProjectName/android/app/src/main/res/values/strings.xml b/dist/raw/ProjectName/mobile/android/app/src/main/res/values/strings.xml similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/res/values/strings.xml rename to dist/raw/ProjectName/mobile/android/app/src/main/res/values/strings.xml diff --git a/dist/raw/ProjectName/android/app/src/main/res/values/styles.xml b/dist/raw/ProjectName/mobile/android/app/src/main/res/values/styles.xml similarity index 100% rename from dist/raw/ProjectName/android/app/src/main/res/values/styles.xml rename to dist/raw/ProjectName/mobile/android/app/src/main/res/values/styles.xml diff --git a/dist/raw/ProjectName/android/build.gradle b/dist/raw/ProjectName/mobile/android/build.gradle similarity index 100% rename from dist/raw/ProjectName/android/build.gradle rename to dist/raw/ProjectName/mobile/android/build.gradle diff --git a/dist/raw/ProjectName/android/fastlane/Appfile b/dist/raw/ProjectName/mobile/android/fastlane/Appfile similarity index 100% rename from dist/raw/ProjectName/android/fastlane/Appfile rename to dist/raw/ProjectName/mobile/android/fastlane/Appfile diff --git a/dist/raw/ProjectName/android/fastlane/Fastfile b/dist/raw/ProjectName/mobile/android/fastlane/Fastfile similarity index 100% rename from dist/raw/ProjectName/android/fastlane/Fastfile rename to dist/raw/ProjectName/mobile/android/fastlane/Fastfile diff --git a/dist/raw/ProjectName/android/fastlane/Pluginfile b/dist/raw/ProjectName/mobile/android/fastlane/Pluginfile similarity index 100% rename from dist/raw/ProjectName/android/fastlane/Pluginfile rename to dist/raw/ProjectName/mobile/android/fastlane/Pluginfile diff --git a/dist/raw/ProjectName/android/fastlane/README.md b/dist/raw/ProjectName/mobile/android/fastlane/README.md similarity index 100% rename from dist/raw/ProjectName/android/fastlane/README.md rename to dist/raw/ProjectName/mobile/android/fastlane/README.md diff --git a/dist/raw/ProjectName/android/gradle.properties b/dist/raw/ProjectName/mobile/android/gradle.properties similarity index 100% rename from dist/raw/ProjectName/android/gradle.properties rename to dist/raw/ProjectName/mobile/android/gradle.properties diff --git a/dist/raw/ProjectName/android/gradle/wrapper/gradle-wrapper.jar b/dist/raw/ProjectName/mobile/android/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from dist/raw/ProjectName/android/gradle/wrapper/gradle-wrapper.jar rename to dist/raw/ProjectName/mobile/android/gradle/wrapper/gradle-wrapper.jar diff --git a/dist/raw/ProjectName/android/gradle/wrapper/gradle-wrapper.properties b/dist/raw/ProjectName/mobile/android/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from dist/raw/ProjectName/android/gradle/wrapper/gradle-wrapper.properties rename to dist/raw/ProjectName/mobile/android/gradle/wrapper/gradle-wrapper.properties diff --git a/dist/raw/ProjectName/android/gradlew b/dist/raw/ProjectName/mobile/android/gradlew similarity index 100% rename from dist/raw/ProjectName/android/gradlew rename to dist/raw/ProjectName/mobile/android/gradlew diff --git a/dist/raw/ProjectName/android/gradlew.bat b/dist/raw/ProjectName/mobile/android/gradlew.bat similarity index 100% rename from dist/raw/ProjectName/android/gradlew.bat rename to dist/raw/ProjectName/mobile/android/gradlew.bat diff --git a/dist/raw/ProjectName/android/settings.gradle b/dist/raw/ProjectName/mobile/android/settings.gradle similarity index 100% rename from dist/raw/ProjectName/android/settings.gradle rename to dist/raw/ProjectName/mobile/android/settings.gradle diff --git a/dist/raw/ProjectName/app.json b/dist/raw/ProjectName/mobile/app.json similarity index 100% rename from dist/raw/ProjectName/app.json rename to dist/raw/ProjectName/mobile/app.json diff --git a/dist/raw/ProjectName/babel.config.js b/dist/raw/ProjectName/mobile/babel.config.js similarity index 100% rename from dist/raw/ProjectName/babel.config.js rename to dist/raw/ProjectName/mobile/babel.config.js diff --git a/dist/raw/ProjectName/config-overrides.js b/dist/raw/ProjectName/mobile/config-overrides.js similarity index 100% rename from dist/raw/ProjectName/config-overrides.js rename to dist/raw/ProjectName/mobile/config-overrides.js diff --git a/dist/raw/ProjectName/index.js b/dist/raw/ProjectName/mobile/index.js similarity index 100% rename from dist/raw/ProjectName/index.js rename to dist/raw/ProjectName/mobile/index.js diff --git a/dist/raw/ProjectName/ios/Podfile b/dist/raw/ProjectName/mobile/ios/Podfile similarity index 100% rename from dist/raw/ProjectName/ios/Podfile rename to dist/raw/ProjectName/mobile/ios/Podfile diff --git a/dist/raw/ProjectName/ios/ProjectName.xcodeproj/project.pbxproj b/dist/raw/ProjectName/mobile/ios/ProjectName.xcodeproj/project.pbxproj similarity index 100% rename from dist/raw/ProjectName/ios/ProjectName.xcodeproj/project.pbxproj rename to dist/raw/ProjectName/mobile/ios/ProjectName.xcodeproj/project.pbxproj diff --git a/dist/raw/ProjectName/ios/ProjectName.xcodeproj/xcshareddata/xcschemes/ProjectName.xcscheme b/dist/raw/ProjectName/mobile/ios/ProjectName.xcodeproj/xcshareddata/xcschemes/ProjectName.xcscheme similarity index 100% rename from dist/raw/ProjectName/ios/ProjectName.xcodeproj/xcshareddata/xcschemes/ProjectName.xcscheme rename to dist/raw/ProjectName/mobile/ios/ProjectName.xcodeproj/xcshareddata/xcschemes/ProjectName.xcscheme diff --git a/dist/raw/ProjectName/ios/ProjectName/AppDelegate.h b/dist/raw/ProjectName/mobile/ios/ProjectName/AppDelegate.h similarity index 100% rename from dist/raw/ProjectName/ios/ProjectName/AppDelegate.h rename to dist/raw/ProjectName/mobile/ios/ProjectName/AppDelegate.h diff --git a/dist/raw/ProjectName/ios/ProjectName/AppDelegate.m b/dist/raw/ProjectName/mobile/ios/ProjectName/AppDelegate.m similarity index 100% rename from dist/raw/ProjectName/ios/ProjectName/AppDelegate.m rename to dist/raw/ProjectName/mobile/ios/ProjectName/AppDelegate.m diff --git a/dist/raw/ProjectName/ios/ProjectName/Images.xcassets/AppIcon.appiconset/Contents.json b/dist/raw/ProjectName/mobile/ios/ProjectName/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from dist/raw/ProjectName/ios/ProjectName/Images.xcassets/AppIcon.appiconset/Contents.json rename to dist/raw/ProjectName/mobile/ios/ProjectName/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/dist/raw/ProjectName/ios/ProjectName/Images.xcassets/Contents.json b/dist/raw/ProjectName/mobile/ios/ProjectName/Images.xcassets/Contents.json similarity index 100% rename from dist/raw/ProjectName/ios/ProjectName/Images.xcassets/Contents.json rename to dist/raw/ProjectName/mobile/ios/ProjectName/Images.xcassets/Contents.json diff --git a/dist/raw/ProjectName/ios/ProjectName/Info.plist b/dist/raw/ProjectName/mobile/ios/ProjectName/Info.plist similarity index 100% rename from dist/raw/ProjectName/ios/ProjectName/Info.plist rename to dist/raw/ProjectName/mobile/ios/ProjectName/Info.plist diff --git a/dist/raw/ProjectName/ios/ProjectName/LaunchScreen.storyboard b/dist/raw/ProjectName/mobile/ios/ProjectName/LaunchScreen.storyboard similarity index 100% rename from dist/raw/ProjectName/ios/ProjectName/LaunchScreen.storyboard rename to dist/raw/ProjectName/mobile/ios/ProjectName/LaunchScreen.storyboard diff --git a/dist/raw/ProjectName/ios/ProjectName/main.m b/dist/raw/ProjectName/mobile/ios/ProjectName/main.m similarity index 100% rename from dist/raw/ProjectName/ios/ProjectName/main.m rename to dist/raw/ProjectName/mobile/ios/ProjectName/main.m diff --git a/dist/raw/ProjectName/ios/ProjectNameTests/Info.plist b/dist/raw/ProjectName/mobile/ios/ProjectNameTests/Info.plist similarity index 100% rename from dist/raw/ProjectName/ios/ProjectNameTests/Info.plist rename to dist/raw/ProjectName/mobile/ios/ProjectNameTests/Info.plist diff --git a/dist/raw/ProjectName/ios/ProjectNameTests/ProjectNameTests.m b/dist/raw/ProjectName/mobile/ios/ProjectNameTests/ProjectNameTests.m similarity index 100% rename from dist/raw/ProjectName/ios/ProjectNameTests/ProjectNameTests.m rename to dist/raw/ProjectName/mobile/ios/ProjectNameTests/ProjectNameTests.m diff --git a/dist/raw/ProjectName/ios/fastlane/Appfile b/dist/raw/ProjectName/mobile/ios/fastlane/Appfile similarity index 100% rename from dist/raw/ProjectName/ios/fastlane/Appfile rename to dist/raw/ProjectName/mobile/ios/fastlane/Appfile diff --git a/dist/raw/ProjectName/ios/fastlane/Fastfile b/dist/raw/ProjectName/mobile/ios/fastlane/Fastfile similarity index 100% rename from dist/raw/ProjectName/ios/fastlane/Fastfile rename to dist/raw/ProjectName/mobile/ios/fastlane/Fastfile diff --git a/dist/raw/ProjectName/ios/fastlane/Matchfile b/dist/raw/ProjectName/mobile/ios/fastlane/Matchfile similarity index 100% rename from dist/raw/ProjectName/ios/fastlane/Matchfile rename to dist/raw/ProjectName/mobile/ios/fastlane/Matchfile diff --git a/dist/raw/ProjectName/ios/fastlane/README.md b/dist/raw/ProjectName/mobile/ios/fastlane/README.md similarity index 100% rename from dist/raw/ProjectName/ios/fastlane/README.md rename to dist/raw/ProjectName/mobile/ios/fastlane/README.md diff --git a/dist/raw/ProjectName/metro.config.js b/dist/raw/ProjectName/mobile/metro.config.js similarity index 100% rename from dist/raw/ProjectName/metro.config.js rename to dist/raw/ProjectName/mobile/metro.config.js diff --git a/dist/raw/ProjectName/modules/index.js b/dist/raw/ProjectName/mobile/modules/index.js similarity index 100% rename from dist/raw/ProjectName/modules/index.js rename to dist/raw/ProjectName/mobile/modules/index.js diff --git a/dist/raw/ProjectName/modules/modules.js b/dist/raw/ProjectName/mobile/modules/modules.js similarity index 100% rename from dist/raw/ProjectName/modules/modules.js rename to dist/raw/ProjectName/mobile/modules/modules.js diff --git a/dist/raw/ProjectName/modules/package.json b/dist/raw/ProjectName/mobile/modules/package.json similarity index 100% rename from dist/raw/ProjectName/modules/package.json rename to dist/raw/ProjectName/mobile/modules/package.json diff --git a/dist/raw/ProjectName/modules/yourapp.js b/dist/raw/ProjectName/mobile/modules/yourapp.js similarity index 100% rename from dist/raw/ProjectName/modules/yourapp.js rename to dist/raw/ProjectName/mobile/modules/yourapp.js diff --git a/dist/raw/ProjectName/options/index.js b/dist/raw/ProjectName/mobile/options/index.js similarity index 100% rename from dist/raw/ProjectName/options/index.js rename to dist/raw/ProjectName/mobile/options/index.js diff --git a/dist/raw/ProjectName/options/options.js b/dist/raw/ProjectName/mobile/options/options.js similarity index 100% rename from dist/raw/ProjectName/options/options.js rename to dist/raw/ProjectName/mobile/options/options.js diff --git a/dist/raw/ProjectName/package.json b/dist/raw/ProjectName/mobile/package.json similarity index 100% rename from dist/raw/ProjectName/package.json rename to dist/raw/ProjectName/mobile/package.json diff --git a/dist/raw/ProjectName/public/index.html b/dist/raw/ProjectName/mobile/public/index.html similarity index 100% rename from dist/raw/ProjectName/public/index.html rename to dist/raw/ProjectName/mobile/public/index.html diff --git a/dist/raw/ProjectName/screens/index.js b/dist/raw/ProjectName/mobile/screens/index.js similarity index 100% rename from dist/raw/ProjectName/screens/index.js rename to dist/raw/ProjectName/mobile/screens/index.js diff --git a/dist/raw/ProjectName/screens/package.json b/dist/raw/ProjectName/mobile/screens/package.json similarity index 100% rename from dist/raw/ProjectName/screens/package.json rename to dist/raw/ProjectName/mobile/screens/package.json diff --git a/dist/raw/ProjectName/store/README.md b/dist/raw/ProjectName/mobile/store/README.md similarity index 100% rename from dist/raw/ProjectName/store/README.md rename to dist/raw/ProjectName/mobile/store/README.md diff --git a/dist/raw/ProjectName/store/custom/.keep b/dist/raw/ProjectName/mobile/store/custom/.keep similarity index 100% rename from dist/raw/ProjectName/store/custom/.keep rename to dist/raw/ProjectName/mobile/store/custom/.keep diff --git a/dist/raw/ProjectName/store/index.js b/dist/raw/ProjectName/mobile/store/index.js similarity index 100% rename from dist/raw/ProjectName/store/index.js rename to dist/raw/ProjectName/mobile/store/index.js diff --git a/dist/raw/ProjectName/store/package.json b/dist/raw/ProjectName/mobile/store/package.json similarity index 100% rename from dist/raw/ProjectName/store/package.json rename to dist/raw/ProjectName/mobile/store/package.json diff --git a/dist/raw/ProjectName/yarn.lock b/dist/raw/ProjectName/mobile/yarn.lock similarity index 100% rename from dist/raw/ProjectName/yarn.lock rename to dist/raw/ProjectName/mobile/yarn.lock diff --git a/scaffold/install.js b/scaffold/install.js index 8e40015ea..ab329e34f 100755 --- a/scaffold/install.js +++ b/scaffold/install.js @@ -3,81 +3,105 @@ const fs = require("fs"); const path = require("path"); const cwd = process.cwd(); const customFiles = path.join(cwd, "custom"); +const mobileDir = path.join(cwd, "mobile"); const { execSync } = require("child_process"); -// docs -fs.copyFileSync( - path.join(customFiles, "README.md"), - path.join(cwd, "README.md") -); +// Create mobile subdirectory in a app root directory +fs.mkdirSync(mobileDir); -// Crowdbotics modules, store, options and screens files -fs.renameSync(path.join(customFiles, "modules"), path.join(cwd, "modules")); -fs.renameSync(path.join(customFiles, "screens"), path.join(cwd, "screens")); -fs.renameSync(path.join(customFiles, "options"), path.join(cwd, "options")); -fs.renameSync(path.join(customFiles, "store"), path.join(cwd, "store")); -fs.renameSync(path.join(customFiles, "public"), path.join(cwd, "public")); -fs.copyFileSync(path.join(customFiles, "App.js"), path.join(cwd, "App.js")); - -// CircleCI -fs.renameSync(path.join(customFiles, ".circleci"), path.join(cwd, ".circleci")); -// Github -fs.renameSync(path.join(customFiles, ".github"), path.join(cwd, ".github")); - -// File overrides -fs.copyFileSync( - path.join(customFiles, "babel.config.js"), - path.join(cwd, "babel.config.js") -); -fs.copyFileSync( - path.join(customFiles, "heroku.yml"), - path.join(cwd, "heroku.yml") -); -fs.copyFileSync( - path.join(customFiles, "metro.config.js"), - path.join(cwd, "metro.config.js") -); -fs.copyFileSync( - path.join(customFiles, ".eslintrc.js"), - path.join(cwd, ".eslintrc.js") -); -fs.copyFileSync( - path.join(customFiles, ".prettierrc.js"), - path.join(cwd, ".prettierrc.js") -); -fs.copyFileSync( - path.join(customFiles, "config-overrides.js"), - path.join(cwd, "config-overrides.js") -); -fs.copyFileSync( - path.join(customFiles, ".crowdbotics.json"), - path.join(cwd, ".crowdbotics.json") -); -fs.copyFileSync( - path.join(customFiles, "package.json"), - path.join(cwd, "package.json") -); +// Custom template folders to move in a app root directory +const customFoldersToMoveRootDir = [ + ".circleci", // CircleCI + ".github", // Github +]; -// dotenv -fs.copyFileSync(path.join(customFiles, ".env"), path.join(cwd, ".env")); -fs.copyFileSync( - path.join(customFiles, ".env.template"), - path.join(cwd, ".env.template") -); +for (let folder of customFoldersToMoveRootDir) { + fs.renameSync(path.join(customFiles, folder), path.join(cwd, folder)); +} -// rubygems -fs.copyFileSync(path.join(customFiles, "Gemfile"), path.join(cwd, "Gemfile")); -fs.copyFileSync( - path.join(customFiles, "Gemfile.lock"), - path.join(cwd, "Gemfile.lock") -); +// Custom template files to move in a app root directory +const customFilesToMoveRootDir = [ + "README.md", // docs + "heroku.yml", +]; + +for (let file of customFilesToMoveRootDir) { + fs.copyFileSync(path.join(customFiles, file), path.join(cwd, file)); +} + +// Custom template folders to move in a app mobile subdirectory +const customFoldersToMoveMobileDir = [ + "store", + "public", + "modules", + "screens", + "options", +] -// native files -execSync(`cp -r ${path.join(customFiles, "android")} ${path.join(cwd)}`); -execSync(`cp -r ${path.join(customFiles, "ios")} ${path.join(cwd)}`); +for (let folder of customFoldersToMoveMobileDir) { + fs.renameSync(path.join(customFiles, folder), path.join(mobileDir, folder)); +} + +//Custom template files to overrides in the mobile subdirectory +const filesToOverride = [ + ".env", + "App.js", + "Gemfile", + "package.json", + "Gemfile.lock", + ".eslintrc.js", + ".env.template", + ".prettierrc.js", + "babel.config.js", + "metro.config.js", + ".crowdbotics.json", + "config-overrides.js", +]; + +for (let file of filesToOverride) { + fs.copyFileSync( + path.join(customFiles, file), + path.join(mobileDir, file) + ); +} + +// Move required template files from app root directory to mobile subdirectory +const requiredRootTemplateFiles = [ + "app.json", + "index.js", + ".gitignore", + ".flowconfig", + ".buckconfig", + ".editorconfig", + ".gitattributes", + ".watchmanconfig", +]; + +for (let file of requiredRootTemplateFiles) { + fs.renameSync(path.join(cwd, file), path.join(mobileDir, file)); +} + +// Copy all native files from custom templates directory to mobile subdirectory recursively +const nativeFiles = [ + "android", + "ios", +]; + +for (let file of nativeFiles) { + execSync(`cp -r ${path.join(customFiles, file)} ${path.join(mobileDir)}`); +} + +// Copy required template files from app root directory to mobile subdirectory recursively +const requiredRootTemplateFolders = [ + "__tests__", +]; + +for (let folder of requiredRootTemplateFolders) { + execSync(`cp -r ${path.join(cwd, folder)} ${path.join(mobileDir)}`); +} // package.json manipulation -const packageFile = path.join(cwd, "package.json"); +const packageFile = path.join(mobileDir, "package.json"); const packageJson = require(packageFile); const dependencies = require(path.join(customFiles, "dependencies.json")); packageJson.dependencies = Object.assign( @@ -92,3 +116,30 @@ fs.writeFileSync(packageFile, JSON.stringify(packageJson, null, 2)); // Cleanup fs.rmdirSync(path.join(customFiles), { recursive: true }); + +//Cleanup template files and folders in root directory +const templateFilesToRemove = [ + "App.js", + ".prettierrc.js", + ".eslintrc.js", + "metro.config.js", + "babel.config.js", + "package.json" +]; + +// Remove template files from app root directory +for (let file of templateFilesToRemove) { + fs.unlinkSync(path.join(cwd, file)); +} + +// Remove template folders from app root directory +const templateFoldersToRemove = [ + "android", + "ios", + "__tests__", + "node_modules" +]; + +for (let folder of templateFoldersToRemove) { + fs.rmdirSync(path.join(cwd, folder), { recursive: true }); +} \ No newline at end of file diff --git a/scaffold/template/custom/README.md b/scaffold/template/custom/README.md index ec5028c0c..195e885c8 100644 --- a/scaffold/template/custom/README.md +++ b/scaffold/template/custom/README.md @@ -1,37 +1,52 @@ -# ProjectName +# {{cookiecutter.project_slug}} -Welcome to your new Crowdbotics app. +Welcome to your new Crowdbotics app. This is a repository for a mobile application developed with Django and React Native, built with [Crowdbotics](https://crowdbotics.com) ## What is Crowdbotics? + Crowdbotics is an easy way to build software applications of all kinds. You can build production, high-caliber software applications in minutes, rather than weeks or months, even if you're not a software developer. The reason this works is that most software applications and features we want to build are similar to applications that have been built before. We've crawled hundreds of thousands of public code repositories to teach the Crowdbotics engine how to create software. As a result, Crowdbotics can generate new applications automatically in a standardized way. +## Table of Contents + +- [{{cookiecutter.project_slug}}](#cookiecutterproject_slug) + - [What is Crowdbotics?](#what-is-crowdbotics) + - [Table of Contents](#table-of-contents) + - [Useful Links](#useful-links) + - [Project Description](#project-description) + - [Project Structure](#project-structure) + - [Features](#features) +- [Getting Started: Backend](#getting-started-backend) + - [Docker Setup (Recommended)](#docker-setup-recommended) + - [Local Setup (Alternative to Docker)](#local-setup-alternative-to-docker) + - [Installation](#installation) + - [Getting Started](#getting-started) +- [Usage](#usage) + - [Admin Panel](#admin-panel) + - [API Documentation](#api-documentation) +- [Getting started: Frontend](#getting-started-frontend) + - [Mobile App Related Installation](#mobile-app-related-installation) + - [Metro](#metro) + - [Android](#android) + - [iOS](#ios) + - [Modules (THIS SECTION IS AUTO-GENERATED, PLEASE DO NOT EDIT)](#modules-this-section-is-auto-generated-please-do-not-edit) + - [Setup react-native-vector-icons](#setup-react-native-vector-icons) + - [Running with Fastlane](#running-with-fastlane) + - [For Android](#for-android) + - [For iOS](#for-ios) + - [React Native Web](#react-native-web) +- [License](#license) + ### Useful Links -[App Dashboard](https://app.crowdbotics.com/) -· -[Knowledgebase](https://knowledge.crowdbotics.com/) -· -[Developer Training](https://knowledge.crowdbotics.com/crowdbotics-developer-training) -· -[Forum](https://discuss.crowdbotics.com/) -· -[Tech Support](https://crowdbotics.slack.com/archives/CGSAV319V) -## Table of Contents -1. [Project Description](#project-description) -2. [Project Structure](#project-structure) -3. [Modules](#modules) -4. [Getting Started: Frontend](#getting-started-frontend) - - [Installation](#installation) - - [Running with Fastlane](#running-with-fastlane) - - [Android](#android-1) - - [iOS](#ios-1) - - [React Native Web](#react-native-web) -5. [Getting Started: Backend](backend#readme) -6. [License](#license) +- [App Dashboard](https://app.crowdbotics.com/) +- [Knowledgebase](https://knowledge.crowdbotics.com/) +- [Developer Training](https://knowledge.crowdbotics.com/crowdbotics-developer-training) +- [Forum](https://discuss.crowdbotics.com/) +- [Tech Support](https://crowdbotics.slack.com/archives/CGSAV319V) ## Project Description @@ -40,32 +55,145 @@ As a result, Crowdbotics can generate new applications automatically in a standa ## Project Structure . - ├── ... - ├── android # Android native files - ├── backend # Django backend REST API - ├── ios # iOS native files - ├── modules # Modules - ├── public - ├── screens - ├── store # Application state storage - ├── ... + ├── .circleci + │   ├── config.yml + │   └── webhook_callback.sh + ├── .github + │   └── dependabot.yml ├── README.md - └── ... + ├── backend # Django backend REST API + | |-- ... + │   ├── Dockerfile + │   ├── Pipfile + │   ├── docker-compose.override.yml + │   ├── docker-compose.yml + │   ├── home # Starter home app + │   ├── manage.py + │   ├── modules # Crowdbotics Modules app + │   ├── static # Static assets + │   ├── {{cookiecutter.project_slug}} # Django project configurations + │   ├── users # Starter users app + │   └── web_build # React Native Web build + ├── heroku.yml + └── mobile + ├── ... + ├── App.js + ├── android # Android native files + ├── ios # iOS native files + ├── modules # Modules + ├── options + ├── package.json + ├── store # Application state storage + └── ... + +## Features + +1. **Local Authentication** using email and password with [allauth](https://pypi.org/project/django-allauth/) +2. **Rest API** using [django rest framework](http://www.django-rest-framework.org/) +3. **Forgot Password** +4. [Bootstrap4](https://getbootstrap.com/docs/4.0/getting-started/introduction/) +5. Toast Notification +6. Inline content editor in homepage + +# Getting Started: Backend + +Following are instructions on setting up your development environment. + +The recommended way for running the project locally and for development is using Docker. + +It's possible to also run the project without Docker. + +## Docker Setup (Recommended) + +This project is set up to run using [Docker Compose](https://docs.docker.com/compose/) by default. It is the recommended way. You can also use existing Docker Compose files as basis for custom deployment, e.g. [Docker Swarm](https://docs.docker.com/engine/swarm/), [kubernetes](https://kubernetes.io/), etc. + +1. Install Docker: + - Linux - [get.docker.com](https://get.docker.com/) + - Windows or MacOS - [Docker Desktop](https://www.docker.com/products/docker-desktop) +2. Clone this repo and `cd {{cookiecutter.project_slug}}/backend` +3. Make sure `Pipfile.lock` exists. If it doesn't, generate it with: + + ```sh + $ docker run -it --rm -v "$PWD":/django -w /django python:3.7 pip3 install --no-cache-dir -q pipenv && pipenv lock + ``` + +4. Use `.env.example` to create `.env`: + ```sh + $ cp .env.example .env + ``` +5. Update `.env` and `docker-compose.override.yml` replacing all `` + + Use `python -c 'from secrets import token_urlsafe; print("SECRET_KEY=" + token_urlsafe(50))'` to generate the random `SECRET_KEY` +6. Start up the containers: + + ```sh + $ docker-compose up + ``` + + This will build the necessary containers and start them, including the web server on the host and port you specified in `.env`. + + Current (project) directory will be mapped with the container meaning any edits you make will be picked up by the container. + +7. Seed the Postgres DB (in a separate terminal): + ```sh + $ docker-compose exec web python3 manage.py makemigrations + $ docker-compose exec web python3 manage.py migrate + ``` +8. Create a superuser if required: + ```sh + $ docker-compose exec web python3 manage.py createsuperuser + ``` + You will find an activation link in the server log output. + +## Local Setup (Alternative to Docker) + +1. [Postgresql](https://www.postgresql.org/download/) +2. [Python](https://www.python.org/downloads/release/python-365/) + +### Installation + +1. Install [pipenv](https://pypi.org/project/pipenv/) +2. Clone this repo and `cd {{cookiecutter.project_slug}}/backend` +3. Run `pip install --user --upgrade pipenv` to get the latest pipenv version. +4. Run `pipenv --python 3.6` +5. Run `pipenv install` +6. Run `cp .env.example .env` +7. Update .env file `DATABASE_URL` with your `database_name`, `database_user`, `database_password`, if you use postgresql. + Can alternatively set it to `sqlite:////tmp/my-tmp-sqlite.db`, if you want to use sqlite for local development. + +### Getting Started + +1. Run `pipenv shell` +2. Run `python manage.py makemigrations` +3. Run `python manage.py migrate` +4. Run `python manage.py runserver` -## Modules (THIS SECTION IS AUTO-GENERATED, PLEASE DO NOT EDIT) +# Usage -This section will show any installed modules you add from the Storyboard Modules section. +## Admin Panel + +Admin Panel can be accessed through http://localhost:8000/admin/. If you are the Project Owner, admin credentials can be generated from App > Settings on [Crowdbotics App Dashboard](https://app.crowdbotics.com/). If not, please request your PM or Project Owner to generate admin credentials and share with you. + +## API Documentation + +API Documentation is generated automatically and can be access through http://localhost:8000/api-docs/. Please make sure you are signed in to the admin panel before navigating to this page. # Getting started: Frontend This section outlines instructions on setting up a local development environment for the frontend of your application. -## Installation +## Mobile App Related Installation ### Metro After cloning the repo, install the dependencies locally with [Yarn](https://yarnpkg.com/): +Goto `/mobile` and run `yarn install` + +```sh +cd {{cookiecutter.project_slug}}/mobile +``` + ```sh yarn install ``` @@ -89,6 +217,10 @@ pod install --repo-update --project-directory=ios npx react-native run-ios ``` +## Modules (THIS SECTION IS AUTO-GENERATED, PLEASE DO NOT EDIT) + +This section will show any installed modules you add from the Storyboard Modules section. + ### Setup react-native-vector-icons Follow instructions at their [README.md](https://github.com/oblador/react-native-vector-icons/blob/master/README.md#installation) @@ -111,7 +243,7 @@ The commands for Android and iOS are the same: - Build and upload a beta (requires signing): `bundle exec fastlane beta` - Build or promote a release: `bundle exec fastlane deploy` -### Android +### For Android Publish an Android app you must first create an app in the Play Console and manually upload an APK. After the first upload run `bundle exec fastlane supply init` from `android/` to sync with the Play store. All future releases will be @@ -120,7 +252,7 @@ uploaded automatically. Android uses tracks. A beta release will build the app and upload to the beta track. Deploying will promote from beta to production. -### iOS +### For iOS CB developers must follow fastlane's [codesigning guide](https://codesigning.guide/) for using match. Match will automatically sign iOS builds. @@ -141,6 +273,7 @@ Please follow the steps - the web_build folder is generated and copied to backend/ automatically. please commit/push the web_build folder to git # License + The use of code in this repository is governed by Crowdbotics [Terms and Conditions](https://www.crowdbotics.com/terms-of-service). Created with ❤️ by [Crowdbotics](https://www.crowdbotics.com/)