Lo sviluppo di quest'applicazione si pone nel contesto della realizzazione di un progetto per Digital Forensics. Lo scopo di quest'applicazione è quello di dare ad un investigatore gli strumenti basilari per tenere traccia dei casi affrontati e gestiti.
L'app si pone quindi l'obiettivo di registrare i casi , con note aggiuntive e tutti gli allegati ad esso riferiti ( come ad esempio foto , poi in futuro si potrà pensare di caricare altri tipi di file multimediali ). Ogni caso può essere etichettato per categoria ( "Furto con Scasso" oppure "Reato IT" o "Aggressione") e ha uno status ( "In corso", "Risolto", "Archiviato").
All'interno di ogni caso sono raccolte quindi evidenze ( file multimediali, per adesso solo foto, modificabili e manipolabili prima di essere caricate sullo storage sul cloud ) , persone coinvolte ( ognuna con un suo ruolo come "Vittima" o "Complice" o "Indiziato"), luoghi di interesse ( espressi in coordinate geografiche ).
Ogni persona può essere registrata anche con un'immagine profilo per dare un volto e avere un report più mnemonico.
Un utente non loggato può usare le funzionalità base dell'applicazione come la possibilità di annotare foto (tracciando dei disegni o evidenziando alcune cose) o modificarle applicando dei filtri (come Sobel, Prewitt, Color Extraction e altri, tutti implementati tramite linguaggio shader SkSL Skai Shading Language). Per gestire effettivamente i casi l'utente deve registrarsi con una mail ( in futuro si potrà predisporre l'accesso con google o altri OAuth provider). Ogni investigatore può avere un'immagine profilo, un badge number e un dipartimento di riferimento.
Tutto il front-end è stato sviluppato con expo-react , un framework basato su javascript per creare applicazioni con performance native su ogni piattaforma. Questo framework offre nativamente centinaia di plugin utili allo scopo , come quello per manipolare le immagini e applicare filtri.
Per il back-end (che consiste di un database PostgreSQL e di uno Storage bucket ad oggetti) si è scelto di usare Supabase, il quale offre un client in javascript per integrato e funzionante, rendendo quindi lo sviluppo agevole.
Per eseguire l'applicazione
- Installare expo e tutte le dipendenze navigando all'interno del progetto e lanciando
npx expo install
o più semplicementenpm i
- Installare l'applicazione Expo Go da Google Play Store o Apple AppStore
- Lanciare da terminale dalla cartella del progetto
npx expo start
- Scannerizzare il qrcode dall'app e tutto dovrebbe funzionare
- Se l'app non reindirizza al progetto , dalla shell con npx expo start in esecuzione premere
s
per switchare tipo di build e riprovare a scansionare il qrcode - Se l'app rimane in fase di "Caricamento", provare a fare il refresh premendo
r
nella shell
- Creare un account Supabase (gratuito, si può fare login con google o github)
- Creare un progetto vuoto
- Dalla dashboard di supabase andare su SQL editor e eseguire lo script in
./supabase/schema.sql
- Dalla dashboard di supabase andare su Storage e creare due buckets, uno chiamato
avatars
e uno chiamatofiles
. Il primo conterrà le foto profilo degli "investigatori" , l'altro i file dei casi come foto delle persone coinvolte o media vari - Creare un file .env nella root del progetto e configurare le chiavi
- EXPO_PUBLIC_SUPABASE_URL (Supabase -> Project Settings -> Data API -> Project URL -> URL)
- EXPO_PUBLIC_SUPABASE_ANON_KEY (Supabase -> Project Settings -> API Keys -> anon public)
npx eas credentials -p android
- Scarica Android Studio da qui https://developer.android.com/studio?hl=it
- Estrai la cartella e avvia android-studio/bin/studio.sh
- Scarica gli SDK in /home/{USER}/Android/Sdk
- Installa i jdk con
sudo dnf android-tools install java-21-openjdk java-21-openjdk-devel
- Aggiungi le seguenti linee al .bashrc
# ANDROID Configuration
export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_HOME/build-tools/36.0.0
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk
- Aggiungi l'id del progetto EAS con
npx eas init --id f0df8e15-d711-4791-b273-8204ba9cb049
- Configura con
npx eas init --id f0df8e15-d711-4791-b273-8204ba9cb049
- Pulisci il progetto e avvia la build
rm -rf node_modules
rm package-lock.json yarn.lock
npx expo install expo-dev-client
npx eas build --platform android --local --profile production
- Modifica il file eas.json aggiungendo questo l'opzione buildType per Android come segue
"production": {
"autoIncrement": true,
"android": {
"buildType": "apk"
}
}
Per far funzionare i componenti delle mappe sulla compilazione nativa è necessario abilitare le API Maps da Google Cloud Platform per il progetto selezionato, come riportato nella (https://docs.expo.dev/versions/latest/sdk/map-view/#deploy-app-with-google-maps)[guida]. Il problema è che per impostare le api, anche se non ti viene inizialmente addebitato nulla ( e sicuramente per il volume di chiamate API che posso fare non arriverei mai a nessun addebito) la postepay Evolution non viene accettata perchè considerata prepagata. Quindi ??? Per ora in sospeso
- Assicurarsi di avere docker installato e attivo
- Assicurarsi di avere la password del database corretta
sudo npx supabase db dump -f supabase/schema.sql