:iphone: React-Native mobile application for Buttercup

Last update: May 31, 2022

Buttercup Mobile

The mobile application for the Buttercup Credentials Manager.

Buttercup Build Status Backers on Open Collective Sponsors on Open Collective Chat securely on Keybase

Get it from iTunes Get it on Google Play

Main screen Groups screen

About

This repository holds the source for the Buttercup mobile application, which is available for the following platforms:

  • iOS 10+
  • Android 8.0+

The mobile application allows for full integration with Buttercup archives stored on a variety of platforms. Like the other applications, this mobile application makes use of AES 256bit encryption with over 200k PBKDF2 password derivation iterations.

The Buttercup for Mobile application boasts the following features:

  • On-device encryption and decryption
  • Auto-hide screen when app is sent to background (like banking apps)
  • Auto-lock vaults after a certain period of inactivity
  • Add/Edit/Delete entries
  • Unlock vaults even when offline (read-only)
  • Autofilling of login forms in Safari (iOS only)

You can read about the changes and releases of the application in the changelog.

Introduction

This project uses React Native to build native iOS and Android applications from a React/JavaScript codebase. The majority of the codebase is JavaScript which utilises the following platforms:

  • ReactJS
  • Redux
  • React Native Router Flux

As Buttercup makes use of strong cryptography, certain encryption/decryption tasks are performed using pure native code (Objective-C/Java). Only the bare minimum required for increased performance is handled on the native side, with the rest being solely JavaScript.

Installation

Ensure that you're using NodeJS 8 or newer on OSX. Android projects can be built and tested on Linux and Windows, but these platforms are not officially supported.

Before getting started, ensure you follow the official React Native Getting Started guide for your desired platform (iOS/Android). It is also recommended to have the react-native-cli installed:

npm install -g react-native-cli

Run the following to initialise the project:

npm install

Once all dependencies are installed and your target development environments are setup (Xcode for iOS and Android Studio for Android), it should be possible to begin development with virtual devices.

Important note about Node.js support: Development for this project should be performed on Node version 8. Although it may work on versions 6 and newer, we will not be supporting issues raised for these versions. Similarly, we do not currently support NodeJS version 9.

iOS development

Providing Xcode is setup correctly, running the following will launch the application in an iPhone emulator:

npm run start:ios

Android development

Ensure that Android Studio is setup correctly and that an AVD has been created. The virtual device must be on API level 23 or greater running Android 6.0 or newer. You must have the AVD started before continuing with no other devices connected. To ensure you only have one device running, execute the following on the command-line:

adb devices

To run the application in the virtual device, run the following:

npm run start:android

Running on an Android device

To run on an actual device, first terminate any AVDs that are running. Connect the phone over USB and run adb devices to ensure that it shows up. You can then run npm run start:android to launch the application on the device.

The same software version restrictions apply to real devices.

Building an APK

To build a signed APK:

  1. Close all other development resources for the project.
  2. Run npm run build:android to first build the project.
  3. In Android Studio, choose Build > Generate Signed APK.
  4. Build a release APK by following the instructions in the GUI.

Publishing error: duplicate resources

If you encounter a publishing error when generating a signed APK, follow these instructions.

Crypto Library Development

Buttercup Mobile's crypto functionality is written in Rust and lives under ./crypto directory. The binaries are already built and placed inside the relevant directories and you don't usually need to change those. However, if you want to work on the Rust library, the following are required:

  1. Install Rust & Cargo using rustup toolchain
  2. Install cargo lipo to build iOS binaries
  3. Add iOS and Android targets to your rustup toolchain:
# iOS
rustup target add aarch64-apple-ios
rustup target add armv7-apple-ios
rustup target add i386-apple-ios
rustup target add x86_64-apple-ios

# Android
rustup target add aarch64-linux-android
rustup target add armv7-linux-androideabi
rustup target add i686-linux-android
  1. Get Android NDK. We recommend installing it via Android Studio or sdkmanager:
sdkmanager --verbose ndk-bundle
  1. Create the standalone NDKs.
cd crypto && ./create-ndk-standalone.sh
  1. Finally build the binaries:
./build.sh

Contributing

We love contributions - anything from new features and bug fixes to suggestions and questions. Please follow our contribution guide.

Development

Please keep in-line with the code style of each file, regardless of what tests are run (linting etc.). When creating new files their format is expected to closely resemble that of other existing source files.

Contributors

This project exists thanks to all the people who contribute. [Contribute].

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

GitHub

https://github.com/buttercup/buttercup-mobile
Comments
  • 1. Dropbox unlocking takes several minutes

    ** Describe the issue you're having **

    When opening vault stores in Dropbox unlocking takes several minutes

    What were you doing when the issue occurred? How do we reproduce it?

    Connect to a Dropbox stored vault and try to unlock it

    ** What OS version are you using **

    Android

    What version of Android/iOS are you using? Eg. Android 8.0 / iOS 12.3.1

    Android 9 PKQ1.180729.001 MIUI Global 10.3.7

    ** What device are you using **

    phone

    What phone/tablet are you running the app on?

    POCOPHONE F1

    Reviewed by vladox at 2019-09-27 11:59
  • 2. Offline (local) archive support

    ~Allow for archives to run offline if no network connection is available.~

    ~When saving and offline, write to disk. When a connection is detected, try saving to it (merge then save).~

    ~When saving offline, alert the user to the situation.~

    ~Allow for unlocking when offline. Always store a copy offline.~

    ~This may need to be done in core.~

    Local archives on mobile.

    Reviewed by perry-mitchell at 2017-09-22 15:58
  • 3. i18n

    Hi!

    This PR adds i18n functionality and is currently WIP. I'll add auto detection and a language chooser or something else. I have copied some code from buttercup-desktop and experimented a little (:

    I am pleased about your thoughts and suggestions.

    [UPDATE]

    • Autodetection
    Reviewed by ph1p at 2019-04-26 15:58
  • 4. Implement iOs Native password system

    Hi devs

    Would it be possible to make use of ios password autofill implementation into buttercup ? Some other password manager did and this functionnality is a game changer in ios ecosystem.

    congrat for everything, very nice project

    Reviewed by mne-4d at 2018-11-21 11:09
  • 5. Unable to open Google Drive vault after some time

    Describe the issue you're having

    Adding a Vault stored on drive works well:

    1. in the Vaults menu, click "add"
    2. select "Google Drive"
    3. select "Authenticate"
    4. select one of your google account registered on Android
    5. grant authorization
    6. click on "Connect"
    7. (select folder,) select bcup file.
    8. provide master password and name
    9. unlock: you can access it
    10. close buttercup

    After some time, your Google authentication will expire (likely, a couple of hours).

    1. open buttercup
    2. unlock: you get the following error:

    Please note it is not a typo in the master password: the same happens with biometric unlock.

    What OS version are you using

    Android 9 (last security update: 1st of August 2019), Kernel: 3.18.120-perf+ Buttercup mobile version 1.11.0

    What device are you using

    Oneplus 3T

    Reviewed by feugy at 2019-11-30 09:58
  • 6. [iPhone] App freezes when writing changes

    Hey guy,

    I'm testing our beautiful app. I really like it. But I've a big big case on my iPhone : I can't save anything.

    I test WebDAV and Dropbox. Same result if I create the new file with iPhone or iMac. I try to des/reinstall ...

    I can't save new entry or a new group on the iPhone. He freeze on the "saving" screen.

    Reviewed by C2c-Tuomas at 2018-05-27 08:24
  • 7. Issue/126 - Android Autofill

    This PR should be considered a Work In Progress for two reasons:

    1. ~~Compared to the iOS implementation and experience, so far Android is only about half way. The simplest form of AutoFill is working - with credentials being offered on-screen in the app being logged-into (e.g. Google Chrome). However, kicking the user temporarily into the Buttercup app to choose a credential (like in the iOS implementation) is not yet implemented, and appears to be a much larger undertaking than it was with iOS. Whilst it should indeed be possible to implement the kick-back to Buttercup to choose an (up-to-date) credential, I thought I would put the PR up in case you wanted to get at least what has been implemented into release soon rather than waiting for the whole thing to be complete.~~

    Edit: Point 1 is now working as well

    1. ~~In case you are keen to release based on point 1, there is one other factor to consider first. On Android there is no obvious way (that I can find) to set Butercup to be the AutoFill provider in the Android Settings (which can be a labyrinth at the best of times). The recommended way in the Android dev docs is to request if the user wants to setup autofill, and then programmatically switch to the AutoFill selection settings in the Android Settings app, at which point the user can toggle Buttercup on. I am currently immediately switching directly to the Android Settings page as soon as the app loads, which is obviously a terrible idea, so I would like to formally request for feedback on how, where, and when the app should ask the user if they would like to enable AutoFill. I think this also applies for iOS as well, as currently it is up to the user to manually go and enable AutoFill in the iOS settings.~~

    Edit: Point 2 has been implemented using the same approach as enabling Touch ID on an Archive

    Finally, I'm also going to suggest that the conversation around point 2 be held in the original issue #126, as I feel it is more likely to be seen and participated by the community there.

    Closes #71, Closes #126

    Reviewed by se1exin at 2019-02-09 11:48
  • 8. Android 8.1: 411 connection failed, Owncloud

    When I try to connect buttercup with my owncloud I get the message: "Error: Connection failed, Invalid response: 411 undefined".

    But the connection works using the desktop clients.

    Reviewed by julianpoemp at 2018-01-21 12:55
  • 9. iOS 13: Can't remove vault profiles (app shuts down)

    ** Describe the issue you're having **

    When I wanted to delete my vault profiles (Google Drive and WebDav) , the application shuts down (V. 1.13)

    ** What OS version are you using **

    iOS 13.4.1

    ** What device are you using **

    iPhone X

    Reviewed by datashieldeurope at 2020-04-09 21:10
  • 10. Decrypt WebDav vault on mobile fails

    Error description

    If I create a new vault on my Mac (either with Chrome extension or with the desktop app) I can sync it vice versa. The vault lies on a WebDav. I cannot open it on my iPad with the app. It connects to the WebDav and sees the vault, but decryption failed. The other way round is the same issue. A vault created on my iPad cannot be decrypted on my desktop. I tried this with GoogleDrive instead of WebDay and encountered the same problem.

    After several tests I can narrow it down to the password string. If it contains special characters (like "$"), it won't work. It works if the password is easier.

    Devices

    • MacBook pro 16", latest Big Sur
    • iPad iOS 14.1
    • Synoloy NAS DS 216, WebDav Server, SSL with a valid Let's Encrypt certificate
    • all devices use a German locale

    To reproduce

    • Open the ButterCup App on a Mac
    • Create a ButterCup vault and sync it to a new vault on a WebDav Server or on GoogleDrive
    • use a 16 character password containing numeric and alpha letters, upase and downcase and a "$" sign
    • Open the same vault in Chrome and add a login to the vault
    • Open the ButterCup App on an iPad and connect to the vault on the WebDav

    Experienced Results

    • Vault created on iOS cannot be opened (decrypted) on Desktop and vice versa
    • Vault created in the desktop app can be opened in Chrome on desktop

    Expected Results

    Syncing should work in both directions

    Reviewed by chnoack at 2020-11-18 19:38
  • 11. Touch ID prompts for keychain access (constant)

    When unlocking with touch unlock, I am prompted twice. Once for the typical unlock of the vault, and another when it sync's the credentials to the keychain for autofilling. Any updates to the vault also result in an auth prompt. It seems as though by using the secure storage that the touch/face auth prompt is always required.

    Reviewed by perry-mitchell at 2019-01-18 11:39
  • 12. [Enhancement] Manage attachments

    It would be really nice if it was possible to create new entries from attachments. Probably it is not trivial tho, so parsing the contents of text files into a note entry would be really great, so no need to use (unsafe) copy and paste to store private data.

    Suggestion: make Buttercup receive shared text content or text files using the native Share feature, and then create a Note entry with the content.

    Reviewed by lfom at 2022-06-03 14:58
  • 13. Cannot create new entries

    I cannot longer create entries in version 2.4.2.

    Platform: android 12 Vault type: Dropbox

    Steps to reproduce:

    1. Try to create a new entry
    2. Field the data
    3. Try to save
    4. Toast show saying failed saving entry, request failed: 0 undefined
    Reviewed by ferreria23 at 2022-05-14 10:48
  • 14. [Enhancement] Wallet entries on mobile

    Hello!

    Thanks for maintaining Buttercup once more. As of now, both mobile apps (iOS and Android) do nothing when listing the items in wallet. It would be could if tapping an item it would reveal the CVV code with some cool effect, like flipping the card. Or simply open the full entry so the user can check the code.

    By the way, when the card is Mastecard it is not displayed correctly, i.e. no Mastercard logo. Visa seems to work fine, and the desktop app works fine too.

    Regards

    Reviewed by lfom at 2022-05-02 19:19
  • 15. ENHANCEMENT/SUGGESTION Enhance typography for better (password) legibility

    👋

    (Continued) thanks for ace software ❤️

    As title

    I'm regularly confused, specifically on mobile where it's not as easy as desktop to resolve, about whether it's a "1" (i.e. numeral one) or a "l" (i.e. lowercase L) 😕

    Screenshots:

    IMG_0249 Screenshot 2022-04-04 at 17 42 41

    Screenshot 2022-04-04 at 17 42 41

    Personally, I just think they're too similar - perhaps there's a font with extra glyphs (e.g. I always underline my numerals when I write them to give some additional affordance)..?

    If you're reading and:

    • agree, then please vote up (e.g. +1, like), or;
    • disagree, then please vote down (e.g. -1, dislike) - I'd love to know why?

    Welcome feedback/input

    Hope this helps

    Sincerely

    Reviewed by ldexterldesign at 2022-04-04 16:54
  • 16. OTP QR Code Scanner (camera)

    It could be that I am just missing it but I cant find the qr code scanner anywhere in the app... given that the desktop app doesn't have an interface or mechanism for doing this the mobile app doing it is pretty important. am I just missing something?

    Reviewed by Claywd at 2022-03-23 05:28
:iphone: An iOS client for https://bbs.uestc.edu.cn/ written in react-native, redux and redux-observable.
:iphone: An iOS client for https://bbs.uestc.edu.cn/ written in react-native, redux and redux-observable.

What An iOS client for https://bbs.uestc.edu.cn/ written in react-native, redux and redux-observable, which has been recommended officially as one of

May 11, 2022
iPhone app built with React Native for viewing houses for sale in the Northwest
iPhone app built with React Native for viewing houses for sale in the Northwest

Den Den is an iPhone app built with React Native for viewing houses for sale in the NW from rmls.com. After being frustrated with a site that hasn't c

Feb 10, 2022
GitHub in your pocket :iphone:
GitHub in your pocket :iphone:

GitPoint GitHub in your pocket. Built with React Native. Table of Contents Introduction Features Feedback Contributors Build Process Backers Sponsors

Jun 19, 2022
Audiobook mobile application accomplished with React Native and React ecosystem, just a single code base.
Audiobook mobile application accomplished with React Native and React ecosystem, just a single code base.

Audiobook App Open Source Audiobook mobile application accomplished with React Native and React ecosystem, just a single code base for both android an

May 29, 2022
A shopping mobile application made with react native for Android.
A shopping mobile application made with react native for Android.

This project is a simplified implementation of a shopping system, the project aims to provide the basic features that are expected to be found in a mobile e-commerce applicaion where users can purchase and sell products.

Jun 13, 2022
Social Marketplace is a Mobile Application built with React Native
Social Marketplace is a Mobile Application built with React Native

Social Marketplace is a Mobile Application built with React Native. Description Social Marketplace to sell what you don't need anymore. the app suppor

Feb 16, 2022
This is the mobile version of my application curriculum-simulator powered by react native

This is the mobile version of my application curriculum-simulator powered by react native

Apr 12, 2022
A mobile application to deploy private VPN servers in the cloud with DNS ad-blocking and other features
A mobile application to deploy private VPN servers in the cloud with DNS ad-blocking and other features

ZudVPN A mobile application to deploy a personal VPN server in the cloud (DigitalOcean, AWS, GCP, Azure and others) with DNS ad-blocking and other fea

May 26, 2022
ReactNative Mobile Application Functional NFT Marketplace UI
ReactNative Mobile Application Functional NFT Marketplace UI

This is an implementation of the functional UI of an open source NFT Marketplace focused on African Art and collectables.

Jun 18, 2022
React Native mobile app for Magento 2.x
React Native mobile app for Magento 2.x

Open source React Native mobile app for Magento 2 Magento React Native is a fully functional eCommerce App for your Magento 2 website. It uses Magento

May 28, 2022
Short-term memory training game (mobile). Built with React Native and Redux.
Short-term memory training game (mobile). Built with React Native and Redux.

sequent Short-term memory training game. Remember the sequential order of numbers displaying on your screen. Free, no ads, open source. Created in Rea

Apr 17, 2022
Mobile app for Chatwoot - React Native
Mobile app for Chatwoot - React Native

Mobile app for chatwoot platform. Built with React Native Chatwoot is an opensource alternative to Intercom, Zendesk, Drift, Crisp etc. Supported Chat

Jun 23, 2022
Project management mobile app built with React Native
Project management mobile app built with React Native

Project Management mobile app built with ReactNative App UI Mockup project_management_mobile_app3.mp4 App Screenshots Like this project? Don't forget

Jun 13, 2022
Built with Expo, React Native, and GraphQL, Lexicon is a pre-built mobile discussions app that you can customize for your users.

Built with Expo, React Native, and GraphQL, Lexicon is a pre-built mobile discussions app that you can customize for your users.

May 21, 2022
NLW Heat - Front End Mobile with React Native with TypeScript.
NLW Heat - Front End Mobile with React Native with TypeScript.

Projeto | Layout | Tecnologias | Licença ?? Projeto Na trilha Impulse do NLW Heat desenvolvemos uma aplicação onde o usuário pode enviar e ver expecta

Jun 2, 2022
Android mobile client for Reddit - Made in React Native

Redditech | Reddit client Recreate the Reddit client using the Reddit open API. Following this subject which you can find here ! Contributors Gabriel

Jan 27, 2022
Niche is a job portal mobile app concept built with React Native.
Niche is a job portal mobile app concept built with React Native.

Niche is a job portal mobile app concept built with React Native. A simple prototype consisting of two screens. However, a great user experience and crafty animations using Reanimated 2.

May 31, 2022
:clipboard: mobile app for a consultancy hub - made with react native, expo, styled components and typescript
:clipboard: mobile app for a consultancy hub - made with react native, expo, styled components and typescript

Consulty Consulty App A marketplace to find a consultant for your next step. ?? Project | Features | Integrations | Technologies | Getting Started | L

Apr 19, 2022