Coder Social home page Coder Social logo

gtp95 / irmamobile Goto Github PK

View Code? Open in Web Editor NEW

This project forked from privacybydesign/irmamobile

0.0 0.0 0.0 13.49 MB

IRMA app for iOS and Android

License: Other

Shell 0.34% Ruby 0.88% Objective-C 0.36% Java 1.95% Go 3.03% Dart 92.71% Swift 0.61% HTML 0.01% MATLAB 0.01% Dockerfile 0.10%

irmamobile's Introduction

irmamobile

Authentication made easy, privacy-friendly, and secure

IRMA offers a privacy-friendly, flexible and secure solution to many authentication problems, putting the user in full control over his/her data.

The IRMA app manages the user's IRMA cards containing personal data. It can receive new cards, selectively disclose data contained in the user's cards to others, and attaching data to signed statements. These data can be relevant properties, such as: "I am over 18", "my name is ..." and "I am entitled to access ....". They are only stored on the user's device and nowhere else.

Get it on Google Play Get it on Apple App Store Get it on F-Droid

Screenshot of the IRMA app on iOS, showing the PIN screen   Screenshot of the IRMA app on Android, showing the wallet screen with three cards   Screenshot of the IRMA app on iOS, showing the wallet screen with a card expanded Screenshot of the IRMA app on Android, showing the data disclosure screen  

Development setup

  • Clone the project

    git clone --recursive [email protected]:privacybydesign/irmamobile.git
    
  • If your forgot to include --recursive in your git clone, make sure to init and update the submodules:

    cd irmamobile
    git submodule init
    git submodule update
    
  • Install Java development kit. Java 11 should work. Java 8 is not supported anymore.

    # On Debian / Ubuntu
    apt install openjdk-11-jdk
    
    # On MacOS
    # TODO: Install via `brew install openjdk@11`, but how to replace system Java?
    
  • Install the Android SDK tools by going to the Android developer download page. Make sure to install the build-tools and platform for Android >= 28. In addition to the SDK platform, the following SDK tools need to be installed:

    • Android SDK Command-line Tools
    • Android SDK Build-Tools
    • Android SDK Platform-Tools
    • NDK version 21.x (version 22.x is not supported by gomobile yet)
    • CMake

    If you're using the SDK Manager of Android Studio: you can find specific versions for Build-Tools by enabling the option Show Package Details.

  • Update your environment. You installed the Android SDK in the previous step, but you will still need to update your PATH to make sure you can access the utilities provided and to make sure that flutter keeps working, you will need to export an ANDROID_HOME environment variable:

    echo 'export ANDROID_HOME="/YOUR/PATH/TO/android-sdk"' >> "$HOME/.bashrc"
    echo 'export PATH="$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH"' >> "$HOME/.bashrc"
    
  • Download Flutter from the download page and follow their installation steps. Make sure to update your $PATH again.

  • Run flutter doctor to see what steps remain to get a fully operational development environment for flutter (this may include accepting the android licenses). At this point you could also download your development environment.

  • Install Go from the Go download page or by using your OS package manager.

  • Run go install golang.org/x/mobile/cmd/gomobile@latest to install gomobile.

  • Run gomobile init to initialize gomobile.

  • Create the irmagobridge: ./bind_go.sh.

  • Start an emulator or connect a device via USB and run the flutter project: flutter run. You can also use Android Studio or Visual Studio Code for this step. On Android, sometimes the build flavor is not picked up automatically. This can be identified when the flutter tool cannot find the generated apk after building. In this case run flutter run --flavor alpha. In case you run the flutter project via Android Studio, you can specify the build flavor in the run configuration. On iOS, no custom flavor should be specified.

  • You can use flutter run -t to run different app configurations, for example run flutter run -t lib/main_prototypes.dart to start the app in the prototypes menu.

JSON serialization code

This project uses json_serializer. To re-generate serialization code, run ./codegen.sh

Integration tests

The integration tests are in development, so not all use cases are covered yet.

As preliminary to run the integration tests, you need a fully configured irmamobile development setup.

Run locally using an iOS/Android simulator

The full set of integration tests can be started in the following way:

  # For an iOS testing device/simulator
  flutter test integration_test/test_all.dart
  # For an Android testing device/simulator
  flutter test integration_test/test_all.dart --flavor=alpha

You can also run the integration tests in a specific test file only. For example:

  flutter test integration_test/issuance_test.dart

Note: flutter test also supports directory paths as argument. When doing this, all tests in that particular directory are run. However, a new build is made for every test file. Running multiple tests in this way takes much more time for that reason.

Run on Android natively

To natively run the integration tests on Android, you can use the command below.

  flutter pub get
  (cd android && ./gradlew app:connectedAlphaDebugAndroidTest -Ptarget=`pwd`/../integration_test/test_all.dart)

You can also manually build APKs for testing using Fastlane.

  bundle exec fastlane android_build_integration_test

The APKs can be found in ./fastlane/build. They can be uploaded to services like Google Firebase. You can also run them locally using the following commands:

  adb install ./fastlane/build/app-alpha-debug.apk
  adb install ./fastlane/build/app-alpha-debug-androidTest.apk
  adb shell am instrument -w -r foundation.privacybydesign.irmamobile.alpha.test/androidx.test.runner.AndroidJUnitRunner

Run on iOS natively

To natively run the integration tests as XCTests on iOS, you can do this using XCode.

At first, you need to choose which test you want to run. For example, to run the tests in issuance_test.dart you execute:

  flutter build ios integration_test/issuance_test.dart --config-only

The tests can be started by opening the ios/Runner.xcworkspace in XCode and then start the tests via Product > Test.

You can use testing services like Google Firebase to easily run your tests on physical devices. The testing service of your choice needs to support XCTest (not to be confused with XCUITest). You can make a build for this purpose using Fastlane:

  bundle exec fastlane ios_build_integration_test

The integration test build should be provisioned with at least a development provisioning profile. More information about how to set the provisioning profile can be found in the Fastlane documentation.

The generated ./fastlane/build/ios_tests.zip can be uploaded to Google Firebase.

Fastlane

For build automation we use Fastlane scripting. These scripts are used by our CI tooling (i.e. the GitHub Actions workflows in .github/workflows). Documentation about the Fastlane scripting can be found here.

Troubleshooting

  • Have you checked out the two submodules of this repository? If find ./irma_configuration is empty, this is the case.
  • If something has changed in the irmagobridge or in irmago then rerunning ./bind_go.sh is required.
  • In case you get the warning that the ndk-bundle cannot be found, please set the ANDROID_NDK_HOME environment variable to the right ndk version directory. These version directories can be found in $ANDROID_HOME/ndk. For example, you have to specify export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/21.1.6352462. You can also make a symlink in ANDROID_HOME by doing ln -s $ANDROID_HOME/ndk/<NDK_VERSION> $ANDROID_HOME/ndk-bundle. In here <NDK_VERSION> should be replaced with the NDK version you want to use.
  • When you get an error related to x_cgo_inittls while running ./bind_go.sh, you probably use an incorrect version of the Android NDK (see above) or your Go version is too old.
  • When you are working with Windows, you need to manually make a symlink between the configuration folders. You can do this by opening a terminal as administrator and use the following command: mklink /d .\android\app\src\main\assets\irma_configuration .\irma_configuration.
  • When you are building for iOS using XCode and you get Dart Error: Can't load Kernel binary: Invalid kernel binary format version., then likely your Flutter cache is corrupted. You can empty and reload the Flutter cache in the following way:
pushd $(which flutter)/../
rm -rf ./cache
flutter doctor
flutter precache --ios
popd
flutter pub get
cd ./ios && pod install

irmamobile's People

Contributors

bobhageman avatar confiks avatar creativecode avatar dalderliesten avatar dependabot[bot] avatar edwinm avatar frayoshi avatar geertjohan avatar gtp95 avatar ivard avatar leonbotros avatar marlonbaeten avatar mikeclickr avatar poussinou avatar rnijveld avatar ronaldkoster86 avatar rowang077 avatar sietseringers avatar sjoerdlmkns avatar steincavelaars avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.