Comment vérifier

24 octobre 2026

Cette page présente les autorisations, les bibliothèques, les réglages de sauvegarde système et les résultats de tests réseau de Photo Enclave, pour vous aider à juger si l’app fait ce que nous disons : aucun accès réseau, aucune collecte de données. Ce n’est pas une évaluation indépendante, mais chaque point indique d’où viennent les données et comment les vérifier vous-même une fois l’app installée.

Les données concernent Android 1.2.6.0 (versionCode 1000260, paquet studio.src.safecamera) et iOS 1.2.6 (build 1260, bundle ID src.studio.enclave). D’autres versions peuvent différer.

Autorisations Android

Autorisations déclarées par l’APK de production, une fois toutes les bibliothèques fusionnées :

$ aapt2 dump badging secureCam-release.apk
package: name='studio.src.safecamera' versionCode='1000260' versionName='1.2.6.0'
uses-permission: name='android.permission.CAMERA'
uses-permission: name='android.permission.RECORD_AUDIO'
uses-permission: name='android.permission.USE_BIOMETRIC'
uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' maxSdkVersion='32'
uses-permission: name='android.permission.READ_MEDIA_IMAGES'
uses-permission: name='android.permission.READ_MEDIA_VIDEO'
uses-permission: name='android.permission.READ_MEDIA_VISUAL_USER_SELECTED'
uses-permission: name='studio.src.safecamera.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION'

Il n’y a pas INTERNET, ni ACCESS_NETWORK_STATE, ACCESS_WIFI_STATE ou AD_ID. La dernière ligne est une autorisation de niveau signature qu’AndroidX ajoute pour protéger les diffusions internes de l’app.

Comment vérifier : récupérez l’APK installé sur le téléphone et lisez-le avec aapt2 du SDK Android :

$ adb pull $(adb shell pm path studio.src.safecamera | grep base | cut -d: -f2) base.apk
$ aapt2 dump badging base.apk | grep uses-permission

Sauvegarde système Android

Le manifeste fixe android:allowBackup à false et utilise android:dataExtractionRules pour exclure toutes les données de la sauvegarde cloud et du transfert entre appareils. Ni une sauvegarde système ni un changement de téléphone n’emportent le coffre. Pour passer à un nouveau téléphone, exportez un fichier avec « Sauvegarde chiffrée complète » dans l’app. Il est protégé par un mot de passe que vous choisissez et qui reste sur l’appareil.

Les sauvegardes enregistrées dans votre compte Google avant la 1.2.6 ne sont pas supprimées automatiquement. Vous pouvez les supprimer dans les réglages de sauvegarde des appareils de votre compte Google.

Comment vérifier : avec le base.apk de la section précédente :

$ aapt2 dump xmltree --file AndroidManifest.xml base.apk | grep -E 'allowBackup|dataExtractionRules'
        A: http://schemas.android.com/apk/res/android:allowBackup(0x01010280)=false
        A: http://schemas.android.com/apk/res/android:dataExtractionRules(0x0101063e)=@0x7f140000

La sortie montre allowBackup à false et une ligne dataExtractionRules.

Bibliothèques Android

Bibliothèques déclarées directement par l’app :

androidx.appcompat:appcompat:1.7.1
androidx.camera:camera-camera2:1.6.2
androidx.camera:camera-core:1.6.2
androidx.camera:camera-lifecycle:1.6.2
androidx.concurrent:concurrent-futures:1.3.0
androidx.constraintlayout:constraintlayout:2.2.1
androidx.documentfile:documentfile:1.1.0
androidx.exifinterface:exifinterface:1.4.2
androidx.legacy:legacy-support-v4:1.0.0
androidx.lifecycle:lifecycle-extensions:2.2.0
com.google.android.material:material:1.14.0
com.google.android.play:review:2.0.2

Il n’y a aucune bibliothèque de publicité, d’analyse, de rapports de plantage ou de paiement. com.google.android.play:review demande seulement à l’app Play Store d’afficher sa fenêtre de notation, et Google Play traite la note. play-services-basement, play-services-tasks et core-common arrivent avec elle. L’app contient aussi notre propre code natif, compilé avec elle.

Les 91 bibliothèques résolues pour releaseRuntimeClasspath
androidx.activity:activity:1.8.0
androidx.annotation:annotation-experimental:1.4.1
androidx.annotation:annotation-jvm:1.8.1
androidx.annotation:annotation:1.8.1
androidx.appcompat:appcompat-resources:1.7.1
androidx.appcompat:appcompat:1.7.1
androidx.arch.core:core-common:2.2.0
androidx.arch.core:core-runtime:2.2.0
androidx.asynclayoutinflater:asynclayoutinflater:1.0.0
androidx.camera:camera-camera2-pipe:1.6.2
androidx.camera:camera-camera2:1.6.2
androidx.camera:camera-core:1.6.2
androidx.camera:camera-lifecycle:1.6.2
androidx.camera.featurecombinationquery:featurecombinationquery:1.6.2
androidx.cardview:cardview:1.0.0
androidx.collection:collection-jvm:1.4.2
androidx.collection:collection:1.4.2
androidx.concurrent:concurrent-futures-ktx:1.3.0
androidx.concurrent:concurrent-futures:1.3.0
androidx.constraintlayout:constraintlayout-core:1.1.1
androidx.constraintlayout:constraintlayout:2.2.1
androidx.coordinatorlayout:coordinatorlayout:1.1.0
androidx.core:core-backported-fixes:1.0.0
androidx.core:core-ktx:1.16.0
androidx.core:core-viewtree:1.0.0
androidx.core:core:1.16.0
androidx.cursoradapter:cursoradapter:1.0.0
androidx.customview:customview:1.2.0
androidx.documentfile:documentfile:1.1.0
androidx.drawerlayout:drawerlayout:1.1.1
androidx.dynamicanimation:dynamicanimation:1.1.0
androidx.emoji2:emoji2-views-helper:1.3.0
androidx.emoji2:emoji2:1.3.0
androidx.exifinterface:exifinterface:1.4.2
androidx.fragment:fragment:1.5.4
androidx.graphics:graphics-shapes-android:1.0.1
androidx.graphics:graphics-shapes:1.0.1
androidx.interpolator:interpolator:1.0.0
androidx.legacy:legacy-support-core-ui:1.0.0
androidx.legacy:legacy-support-core-utils:1.0.0
androidx.legacy:legacy-support-v4:1.0.0
androidx.lifecycle:lifecycle-common:2.6.2
androidx.lifecycle:lifecycle-extensions:2.2.0
androidx.lifecycle:lifecycle-livedata-core:2.6.2
androidx.lifecycle:lifecycle-livedata:2.6.2
androidx.lifecycle:lifecycle-process:2.6.2
androidx.lifecycle:lifecycle-runtime:2.6.2
androidx.lifecycle:lifecycle-service:2.6.2
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2
androidx.lifecycle:lifecycle-viewmodel:2.6.2
androidx.loader:loader:1.0.0
androidx.localbroadcastmanager:localbroadcastmanager:1.0.0
androidx.media:media:1.0.0
androidx.print:print:1.0.0
androidx.profileinstaller:profileinstaller:1.4.0
androidx.recyclerview:recyclerview:1.2.1
androidx.resourceinspection:resourceinspection-annotation:1.0.1
androidx.savedstate:savedstate:1.2.1
androidx.slidingpanelayout:slidingpanelayout:1.0.0
androidx.startup:startup-runtime:1.1.1
androidx.swiperefreshlayout:swiperefreshlayout:1.0.0
androidx.tracing:tracing-android:1.3.0
androidx.tracing:tracing-ktx:1.3.0
androidx.tracing:tracing:1.3.0
androidx.transition:transition:1.5.0
androidx.vectordrawable:vectordrawable-animated:1.1.0
androidx.vectordrawable:vectordrawable:1.1.0
androidx.versionedparcelable:versionedparcelable:1.1.1
androidx.viewpager:viewpager:1.0.0
androidx.viewpager2:viewpager2:1.0.0
com.google.android.gms:play-services-basement:18.4.0
com.google.android.gms:play-services-tasks:18.2.0
com.google.android.material:material:1.14.0
com.google.android.play:core-common:2.0.4
com.google.android.play:review:2.0.2
com.google.auto.value:auto-value-annotations:1.6.3
com.google.dagger:dagger:2.59
com.google.errorprone:error_prone_annotations:2.15.0
com.google.guava:listenablefuture:1.0
jakarta.inject:jakarta.inject-api:2.0.1
javax.inject:javax.inject:1
org.jetbrains:annotations:23.0.0
org.jetbrains.kotlin:kotlin-bom:1.8.22
org.jetbrains.kotlin:kotlin-stdlib:2.2.10
org.jetbrains.kotlinx:atomicfu-jvm:0.28.0
org.jetbrains.kotlinx:atomicfu:0.28.0
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0
org.jspecify:jspecify:1.0.0

Comment vérifier : la version de production est réduite et obscurcie, les bibliothèques sont donc difficiles à lire directement dans le paquet. Pour savoir si l’app se connecte réellement, utilisez « Test réseau : Android » ci-dessous.

Autorisations iPhone et iPad

Info.plist ne contient que quatre descriptions d’usage : appareil photo, micro, Face ID et ajout de photos à Photos (écriture seule, pas de lecture). Pas de lecture de la photothèque, de localisation, de contacts, de Bluetooth, de mode arrière-plan ni d’exception App Transport Security. Les entitlements sont vides : pas d’iCloud, de notifications push, d’App Groups ni de domaines associés. L’app n’a aucune extension.

Comment vérifier : Réglages → Confidentialité et sécurité → Photos → Photo Enclave ne propose que « Ajouter des photos uniquement » et « Aucun ». Dans Réglages → Apps → Photo Enclave, il n’y a rien d’autre que l’appareil photo, le micro, Face ID et Photos que vous avez utilisés.

Bibliothèques iOS

Aucune dépendance Swift Package Manager, CocoaPods ou Carthage. L’app ne lie que des frameworks système, libc++ et notre propre bibliothèque statique libClientLib_IOS.a, compilée avec l’app et intégrée au binaire, donc absente de la liste. Voici otool -L pour la version de production 1.2.6. Chaque entrée se trouve sous /System/Library/Frameworks ou /usr/lib.

Bibliothèques dynamiques
$ otool -L enclave.app/enclave
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 2200.27.0)
/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 5027.0.69)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1359.0.0)
/System/Library/Frameworks/AVFAudio.framework/AVFAudio (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/AVFoundation.framework/AVFoundation (compatibility version 1.0.0, current version 2.0.0)
/System/Library/Frameworks/AudioToolbox.framework/AudioToolbox (compatibility version 1.0.0, current version 1000.0.0)
/System/Library/Frameworks/Combine.framework/Combine (compatibility version 1.0.0, current version 3023.0.0)
/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 5027.0.69)
/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics (compatibility version 64.0.0, current version 2050.0.0)
/System/Library/Frameworks/CoreImage.framework/CoreImage (compatibility version 1.0.0, current version 7.0.0)
/System/Library/Frameworks/CoreMedia.framework/CoreMedia (compatibility version 1.0.0, current version 3350.77.1)
/System/Library/Frameworks/CoreVideo.framework/CoreVideo (compatibility version 1.2.0, current version 758.27.0)
/System/Library/Frameworks/CryptoKit.framework/CryptoKit (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/ImageIO.framework/ImageIO (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/LocalAuthentication.framework/LocalAuthentication (compatibility version 1.0.0, current version 2319.12.210)
/System/Library/Frameworks/Metal.framework/Metal (compatibility version 1.0.0, current version 382.5.3, weak)
/System/Library/Frameworks/Photos.framework/Photos (compatibility version 1.0.0, current version 912.20.123)
/System/Library/Frameworks/PhotosUI.framework/PhotosUI (compatibility version 1.0.0, current version 912.20.123)
/System/Library/Frameworks/QuartzCore.framework/QuartzCore (compatibility version 1.2.0, current version 1223.6.12)
/System/Library/Frameworks/Security.framework/Security (compatibility version 1.0.0, current version 62460.2.3)
/System/Library/Frameworks/SwiftUI.framework/SwiftUI (compatibility version 1.0.0, current version 8.0.85)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 9127.0.85)
/System/Library/Frameworks/VideoToolbox.framework/VideoToolbox (compatibility version 1.0.0, current version 3350.77.1)
/usr/lib/swift/libswiftAVFoundation.dylib (compatibility version 1.0.0, current version 2450.77.1)
/usr/lib/swift/libswiftCore.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/swift/libswiftCoreAudio.dylib (compatibility version 1.0.0, current version 482.102.0, weak)
/usr/lib/swift/libswiftCoreFoundation.dylib (compatibility version 1.0.0, current version 120.100.0)
/usr/lib/swift/libswiftCoreImage.dylib (compatibility version 1.0.0, current version 3.0.0, weak)
/usr/lib/swift/libswiftCoreLocation.dylib (compatibility version 1.0.0, current version 57.0.0, weak)
/usr/lib/swift/libswiftCoreMIDI.dylib (compatibility version 1.0.0, current version 6.0.0, weak)
/usr/lib/swift/libswiftDarwin.dylib (compatibility version 1.0.0, current version 428.0.10, weak)
/usr/lib/swift/libswiftDispatch.dylib (compatibility version 1.0.0, current version 1605.0.2)
/usr/lib/swift/libswiftMetal.dylib (compatibility version 1.0.0, current version 382.5.3, weak)
/usr/lib/swift/libswiftOSLog.dylib (compatibility version 1.0.0, current version 10.0.0, weak)
/usr/lib/swift/libswiftObjectiveC.dylib (compatibility version 1.0.0, current version 973.1.0)
/usr/lib/swift/libswiftQuartzCore.dylib (compatibility version 1.0.0, current version 5.0.0, weak)
/usr/lib/swift/libswiftSpatial.dylib (compatibility version 1.0.0, current version 1.0.0, weak)
/usr/lib/swift/libswiftUniformTypeIdentifiers.dylib (compatibility version 1.0.0, current version 919.0.1)
/usr/lib/swift/libswiftXPC.dylib (compatibility version 1.0.0, current version 167.0.2, weak)
/usr/lib/swift/libswift_Concurrency.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/swift/libswiftos.dylib (compatibility version 1.0.0, current version 1090.0.0)
/usr/lib/swift/libswiftsimd.dylib (compatibility version 1.0.0, current version 25.0.0, weak)
/usr/lib/swift/libswiftCoreGraphics.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/swift/libswiftCoreMedia.dylib (compatibility version 1.0.0, current version 3350.77.1)

Comment vérifier : le paquet de l’App Store n’est pas accessible aux utilisateurs, ce point ne peut donc pas être vérifié directement. Pour savoir si l’app se connecte réellement, utilisez « Test réseau : iPhone » ci-dessous.

Sauvegarde système iOS

Le dossier du coffre et le canevas du mode camouflage portent NSURLIsExcludedFromBackupKey et n’entrent ni dans la sauvegarde iCloud ni dans la sauvegarde sur ordinateur. Les réglages restent sauvegardés : après une restauration depuis une sauvegarde système, les réglages reviennent, mais pas le coffre. Pour passer à un nouveau téléphone, exportez un fichier avec « Sauvegarde chiffrée complète » dans l’app. Les sauvegardes système faites avant la 1.2.6 peuvent encore contenir l’ancien contenu du coffre.

Déclarations de confidentialité des stores

Ces deux déclarations ont été remplies par nous dans les consoles des stores. Vous pouvez les comparer aux données de cette page. Le projet iOS n’a pas de PrivacyInfo.xcprivacy.

Test réseau : iPhone

Méthode : le rapport de confidentialité des apps intégré à iOS enregistre l’activité réseau de chaque app.

  1. Réglages → Confidentialité et sécurité → Rapport de confidentialité des apps, activez-le. Il n’enregistre qu’à partir de ce moment.
  2. Utilisez Photo Enclave normalement, y compris pour prendre des photos et des vidéos dans l’app.
  3. De retour dans le rapport, Photo Enclave apparaît sous « Accès aux données et aux capteurs » : le rapport l’enregistre bien. Il n’apparaît pas sous « Activité réseau des apps ».
  4. Pour les données brutes, touchez « Enregistrer le rapport de confidentialité des apps » en bas, copiez le fichier sur un ordinateur et gardez seulement les lignes de l’app. Les entrées réseau ont le type networkActivity.
$ grep src.studio.enclave App_Privacy_Report_v4_*.ndjson > enclave.ndjson
$ grep -o '"type":"[a-zA-Z]*"' enclave.ndjson | sort | uniq -c
  10 "type":"access"

Notre résultat : 24 octobre 2026, iPhone 15 Pro, iOS 27.0.1, Photo Enclave 1.2.6. Le rapport couvrait environ 12 h 18 à 15 h 57, heure locale. Photo Enclave avait 10 entrées d’accès (appareil photo et micro) et 0 entrée réseau. Dans le même rapport, 6 autres apps avaient 22 entrées réseau au total : le rapport enregistrait donc bien l’activité réseau pendant cette période.

Ce que le système fait pour le compte de l’app, comme le sélecteur de photos, est attribué au système.

Test réseau : Android

Méthode : avec adb, examiner le groupe réseau du processus de l’app, ses sockets et ses statistiques de trafic. Activez le débogage USB, gardez Photo Enclave au premier plan et lancez les commandes ci-dessous. Remplacez 10041 par le userId affiché sur votre appareil.

$ adb shell dumpsys package studio.src.safecamera | grep -E 'userId|versionName'
    userId=10041
    versionName=1.2.6.0
$ adb shell cat /proc/$(adb shell pidof studio.src.safecamera)/status | grep Groups
Groups:	9997 20041 50041
$ adb shell cat /proc/net/tcp /proc/net/tcp6 /proc/net/udp /proc/net/udp6 | awk '$8==10041' | wc -l
0
$ adb shell dumpsys netstats detail | grep 'uid=10041'
    uid=10041 set=1

Sans ordinateur : regardez la consommation de données de Photo Enclave dans les détails de l’app, dans les réglages système (le nom varie selon la marque : « Données mobiles », « Consommation des données »). Elle doit être de 0.

Notre résultat : 24 octobre 2026, Samsung Galaxy A03s (SM-A037W), Android 13, 1.2.6.0 installé le jour même. Nous avons pris 3 photos et enregistré une vidéo de 5 secondes dans l’app, puis lancé les commandes ci-dessus ; la sortie est reproduite telle quelle. L’app ayant été installée le jour même, netstats couvre toute son utilisation.

Contact

Une question sur cette page, ou un résultat différent de celui montré ici : support@src.studio