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.
OpenMTP 3.0 features a new MTP kernel and it was written from the scratch. It promises a file copy speed of 30 to 40 MB/s on low and mid range devices and 100 to 120 MB/s on higher end devices. The all new and powerful MTP kernel is named after Dr. A. P. J. Abdul Kalam
Do checkout the Go package which I've written to build Kalam Kernel: github.com/ganeshrvel/go-mtpx. Feel free to raise PRs.
Kalam
Kernel updates, which includes new device supports, fixes, stability improvements. macOS Big Sur (11.0) or above will receive the above said updatesKalam
Kernel on macOS 10.13 (OS X El High Sierra) and lower. Only the "Legacy" MTP mode will continue working on these outdated machines.Intel
and ARM64
machines # newer versions:
brew install openmtp --cask
# older versions:
brew cask install openmtp
Command | Keyboard Shortcut |
---|---|
Delete | backspace |
New Folder | command (⌘)+n |
Copy | command (⌘)+c |
Copy to Queue | command (⌘)+shift+c |
Paste | command (⌘)+v |
Refresh | command (⌘) +r |
Folder Up | command (⌘)+b |
Select All | command (⌘)+a |
Rename | command (⌘)+d |
Switch Tab | command(⌘)+1 |
Open | enter |
Navigate Left | left |
Navigate Right | right |
Navigate Up | up |
Navigate Down | down |
Select Multiple Items Forward (in Grid View) | shift+left |
Select Multiple Items Backward (in Grid View) | shift+right |
Select Multiple Items Forward (in List View) | shift+up |
Select Multiple Items Backward (in List View) | shift+down |
Select Multiple Items (with mouse) | command (⌘)+click or shift+click |
Requirements: Node.js v16, Git and Yarn package manager
$ git clone https://github.com/ganeshrvel/openmtp.git
$ cd openmtp
# install yarn
npm install -g yarn
# install sentry cli
npm -g i @sentry/cli
$ yarn
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
# On terminal run
$ "/path/to/OpenMTP.app/Contents/MacOS/OpenMTP" --remote-debugging-port=6363
localhost:6363
6363
APPLEID
: <Apple developer account username>
APPLE_APP_SPECIFIC_PASSWORD
: <App-Specific Password>
APPLE_TEAM_ID
: <Apple Team ID>
SENTRY_URL
: https://sentry.io/
SENTRY_ORG
: <Sentry Organization Name>
SENTRY_PROJECT
: <Sentry Project>
SENTRY_TOKEN_ID
: <Sentry Auth Token>
event:admin, event:read, member:read, org:read, project:read, project:releases, team:read
GITHUB_TOKEN
: Personal access token
Contents - (Read and Write access to code)
admin:gpg_key, admin:public_key, repo, user, workflow
CSC_LINK
:
Default Keychains
menu in the left -> Login -> My CertificatesDeveloper ID Application
in the top search barDeveloper ID Application
, for the organization, create one from here: Apple Developer CertificatesDeveloper ID Application
in the top search barDeveloper ID Application: <User Name> (XXXYYYZZZ)
Mac Developer ID Application: <User Name>
Mac Developer ID Application: <User Name>
Mac Developer ID Application: <User Name>
Mac Developer ID Application: <User Name>
CERTIFICATE_PRIVATE_KEY.p12
CSC_KEY_PASSWORD
, note this downbase64 -i CERTIFICATE_PRIVATE_KEY.p12 -o CERTIFICATE_PRIVATE_KEY.txt
CERTIFICATE_PRIVATE_KEY.txt
CSC_LINK
CSC_KEY_PASSWORD
is the password from the above stepCODEMAGIC_AUTH_TOKEN_ID
: <CodeMagic API Token>
CODEMAGIC_INTEL_X64_WORKFLOW_ID_PROD
: <Prod codeMagic workflow id>
codemagic.yaml
, (mostly macos-intel-x64-build-prod
)CODEMAGIC_INTEL_X64_WORKFLOW_ID_DEV
: <Dev codeMagic workflow id>
codemagic.yaml
, (mostly macos-intel-x64-build-dev
)PUBLISH_PROD_REPOSITORY
: <Repository to publish the production app>
PUBLISH_DEV_REPOSITORY
: <Repository to publish the dev app>
CODEMAGIC_PUBLISH_PROJECT_ID
: <Codemagic intel project id>
PUBLISH_EMAIL
: Email address to receive the updates on publish
Setup the code signing to build, package (locally) and publish the app.
App Notarization for macOS (skip this section for non macOS builds)
APPLEID
and APPLE_APP_SPECIFIC_PASSWORD
in .env filesecurity add-generic-password -a "<apple-developer-account-username>" -w <app-specific-password> -s "APPLE_APP_SPECIFIC_PASSWORD"
Sentry
npm install -g @sentry/wizard
sentry-wizard --integration electron
# Upload Debug Information
# Everytime the electron.js version is upgraded run:
node sentry-symbols.js
sentry-cli login
Packaging Instructions: https://www.electron.build/code-signing
$ export GH_TOKEN="<github token>"
# For local platform
$ yarn package
# For multiple platforms
$ yarn package-all
https://github.com/electron-react-boilerplate/electron-react-boilerplate/issues/400
https://github.com/electron-react-boilerplate/electron-react-boilerplate/issues/118
https://github.com/electron-react-boilerplate/electron-react-boilerplate/issues/108
# For Mac and Linux
$ UPGRADE_EXTENSIONS=1 npm run dev
# For Windows
$ set UPGRADE_EXTENSIONS=1 && npm run dev
Speech framework is not compatible with macOS < 10.15
yarn install
will throw a npm-rebuild errornode-mac-permissions
dependency from package.json
default.plugins
in the file webpack/config.base.js
new webpack.IgnorePlugin({ resourceRegExp: /^(node-mac-permissions)$/u }),
NODE_MAC_PERMISSIONS_MIN_OS
constant defines the minimum os version that is required to show the macos usage access permission popupA special thanks to CodeMagic and Kevin Suhajda for sponsoring their CI/CD VMs, thus making the app releases more streamlined and much easier now. 🎊🎊 Do checkout their products section for more.
Special shoutout to @CodyJung for adding the Fujifilm and Garmin devices support. 🔥🔥
Thanks to Ms Ayushi Bothra for contributing to the documentation and pages.
App logo was contributed by Shubhendu Mitra. Make sure to check out more of his works on Behance.
Thanks to Vladimir Menshakov for android-file-transfer-linux (the MTP legacy Kernel)
Shoutout to @yennsarah, @h0tk3y, @riginoommen, @AjithKumarvm, @kiranshaji555, Dick Cowan, Kjell Dankert, Thorolf E.R. Weißhuhn and to all other community members who helped me test the application.
This app was built upon https://github.com/ganeshrvel/electron-react-redux-advanced-boilerplate which is a heavily modified fork of https://github.com/electron-react-boilerplate/electron-react-boilerplate.
The icons used in the app were made by flaticon, good-ware and kiranshastry which is licensed under CC 3.0 BY.
The "no image found" icon was made by Phonlaphat Thongsriphong.
If you are interested in fixing issues and contributing directly to the code base, please see the guidelines.
Help me keep the app FREE and open for all.
Please feel free to contact me at ganeshrvel@outlook.com
OpenMTP | Android File Transfer for macOS is released under MIT License.
Copyright © 2018-Present Ganesh Rathinavel