/openmtp

OpenMTP - Advanced Android File Transfer Application for macOS

Primary LanguageJavaScriptMIT LicenseMIT

OpenMTP | Android File Transfer for macOS

Introduction

Advanced Android File Transfer Application for macOS.

Transferring files between macOS and Android or any other MTP devices has always been a nightmare. There are a few File Transfer MTP apps which are available online but most of them are either too expensive or come with bad UI/UX. The official "Android File Transfer" app for macOS from Google comes with bugs, innumerable limitations, some of which include - not being able to transfer files larger than 4GB, frequent disconnections, unable to rename the folders or files on the android/MTP devices. Most of the other apps available online uses either WiFi or ADB protocol to transfer the files, which is an extremely time-consuming process.

Countless searches to find an app to solve these problems and failing to find one made me restless. So, I took the leap and decided to create an app for us that could help us have a smooth and hassle-free file transfer process from macOS to Android/MTP devices. Created with the objective of giving back to the community, we can all use this app for free in this lifetime.

Features

  • Plug and Play. No hassles, easy and instant connection.
  • Connect via USB cable - Highest data transfer rates.
  • Transfer multiple files which are larger than 4GB in one go.
  • Select between Internal Memory and SD Card.
  • Split pane views for both Local Computer and Android device.
  • Drag 'n Drop your files.
  • Choose between Grid and List view.
  • Use Keyboard Shortcuts to navigate through your files.
  • Safe, Transparent and Open-Source.
  • We don't collect any personally identifiable information.
  • It's FREE and shall ALWAYS remain FREE!!

Installation

Screengrabs

OpenMTP File Explorer

OpenMTP File Transfer

Keyboard Shortcuts

New Folder command+n

Copy command+c

Copy to Queue command+shift+c

Paste command+v

Delete backspace

Refresh command+r

Folder Up command+b

Select All command+a

Rename command+d

Open enter

Switch Tab command+1

Navigate Left left

Navigate Right right

Navigate Up up

Navigate Down down

Select Multiple Items Forward (for Grid view) shift+left

Select Multiple Items Backward (for Grid view) shift+right

Select Multiple Items Forward (for List view) shift+up

Select Multiple Items Backward (for List view) shift+down

Select Multiple Items (using mouse) command+click or shift+click

Building from Source

Requirements: Node.js v10, Git and Yarn package manager

Clone

$ git clone --depth 1 --single-branch --branch master https://github.com/ganeshrvel/openmtp.git

$ cd openmtp
$ yarn

Run

A fresh clone might throw undefined state error. Run the following commands once to fix the issue.

# For Mac and Linux
$ UPGRADE_EXTENSIONS=1 npm run dev

# For Windows
$ set UPGRADE_EXTENSIONS=1 && npm run dev
# Development
$ yarn dev

# Pre-production
$ yarn start

Package

Setup the code signing to build, package and publish the app.

App Notarization for macOS (skip this section for non macOS builds)

  • Rename sample.env file as .env
  • Update APPLEID in .env file
  • Log into your Apple Account
  • Goto Security > APP-SPECIFIC PASSWORDS
  • Click on Generate Password..., enter a password label and click Create
  • Copy the displayed app-specific-password
  • Run
security add-generic-password -a "<apple-developer-account-username>" -w <app-specific-password*> -s "ELECTRON_NOTORIZE_PASSWORD"

Packaging Instructions: https://www.electron.build/code-signing

$ export GH_TOKEN="<github token>"
# For local platform
$ yarn package

# For multiple platforms
$ yarn package-all

Technical Features

  • Built using Electron v6, React v16.8, Redux v4, Webpack v4, Babel v7 and Material UI v4.2
  • Hot module Reload (HMR) for instant feedback.
  • Highly modular.
  • Inbuilt error logging and profile/settings management.
  • Loadables, Dynamic Reducer Injection, Selectors for efficient Code. splitting and performance/startup optimisation.
  • Industry standard State management.
  • JSS, SASS/SCSS styling.
  • Port assigned: 4642

Configurations

  • config/env/env.dev.js and config/env/env.prod.js contain the PORT number of the app.
  • config/dev-app-update.yml file holds the GitHub repo variables required by electron-updater.
  • config/google-analytics-key.js file contains the Google Analytics Tracking ID.
  • package.json build.publish object holds the values for publishing the packaged application.
  • app/constants folder contains all the constants required by the app.

Debugging

# Debugging Guide

electron-react-boilerplate/electron-react-boilerplate#400

# Dispatching redux actions from the main process

electron-react-boilerplate/electron-react-boilerplate#118

electron-react-boilerplate/electron-react-boilerplate#108

# VM112:2 Uncaught TypeError: Cannot read property 'state' of undefined error

# For Mac and Linux
$ UPGRADE_EXTENSIONS=1 npm run dev

# For Windows
$ set UPGRADE_EXTENSIONS=1 && npm run dev

Troubleshooting

# Notarizing Electron apps throws - “You must first sign the relevant contracts online. (1048)” error https://stackoverflow.com/questions/58358449/notarizing-electron-apps-throws-you-must-first-sign-the-relevant-contracts-on

More repos

Accolades and Credits

Contribute

If you are interested in fixing issues and contributing directly to the code base, please see the guidelines.

Buy me a coffee

Help me keep the app FREE and open for all. Paypal me: paypal.me/ganeshrvel

Contacts

Please feel free to contact me at ganeshrvel@outlook.com

License

OpenMTP | Android File Transfer for macOS is released under MIT License.

Copyright © 2018-Present Ganesh Rathinavel