How to check

24 October 2026

This page lists Photo Enclave’s permissions, libraries, system backup settings, and network test results, so you can judge whether it does what we say: no network access, no data collection. It is not an independent third-party review, but every item says where the data comes from and how you can check it yourself once the app is installed.

The data is for Android 1.2.6.0 (versionCode 1000260, package studio.src.safecamera) and iOS 1.2.6 (build 1260, bundle ID src.studio.enclave). Other versions may differ.

Android permissions

Permissions declared by the release APK after all libraries are merged:

$ 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'

There is no INTERNET, and no ACCESS_NETWORK_STATE, ACCESS_WIFI_STATE, or AD_ID. The last line is a signature-level permission that AndroidX adds to protect the app’s internal broadcasts.

How to check: pull the installed APK from the phone and read it with aapt2 from the Android SDK:

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

Android system backup

The manifest sets android:allowBackup to false and uses android:dataExtractionRules to exclude all data from cloud backup and device-to-device transfer. Neither a system backup nor a phone migration takes the vault with it. To move to a new phone, export a file with “Full encrypted backup” in the app. It is protected by a password you set, which stays on the device.

Backups stored in your Google account before 1.2.6 are not deleted automatically. You can remove them in your Google account’s device backup settings.

How to check: with the base.apk from the previous section:

$ 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

The output shows allowBackup as false and a dataExtractionRules line.

Android libraries

Libraries the app declares directly:

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

There are no advertising, analytics, crash-reporting, or payment libraries. com.google.android.play:review only asks the Play Store app to show its rating dialog, and Google Play handles the rating. play-services-basement, play-services-tasks, and core-common come with it. The app also contains our own native code, compiled with it.

All 91 libraries resolved for 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

How to check: the release build is shrunk and obfuscated, so the libraries are hard to read directly from the package. Whether the app actually goes online can be checked with “Network test: Android” below.

iPhone and iPad permissions

Info.plist has only four usage descriptions: camera, microphone, Face ID, and adding photos to Photos (write only, no read). There is no photo library read access, location, contacts, Bluetooth, background mode, or App Transport Security exception. The entitlements are empty: no iCloud, push notifications, App Groups, or associated domains. The app has no extensions.

How to check: Settings → Privacy & Security → Photos → Photo Enclave offers only “Add Photos Only” and “None”. In Settings → Apps → Photo Enclave, there is nothing beyond the camera, microphone, Face ID, and Photos you have used.

iOS libraries

There are no Swift Package, CocoaPods, or Carthage dependencies. The app links only system frameworks, libc++, and our own static library libClientLib_IOS.a, which is compiled with the app and built into the binary, so it does not appear separately. Below is otool -L for the 1.2.6 release build. Every entry is under /System/Library/Frameworks or /usr/lib.

Dynamic libraries
$ 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)

How to check: the App Store package is not available to ordinary users, so this item cannot be checked directly. Whether the app actually goes online can be checked with “Network test: iPhone” below.

iOS system backup

The vault folder and the disguise canvas are marked with NSURLIsExcludedFromBackupKey, so they are left out of iCloud and computer backups. Settings are still backed up: after restoring from a system backup, your settings come back but the vault does not. To move to a new phone, export a file with “Full encrypted backup” in the app. System backups made before 1.2.6 may still contain old vault content.

Store privacy declarations

These two are declarations we filled in on the store consoles. You can compare them with the data on this page. The iOS project has no PrivacyInfo.xcprivacy.

Network test: iPhone

Method: the App Privacy Report built into iOS records each app’s network activity.

  1. Settings → Privacy & Security → App Privacy Report, turn it on. It only records activity from then on.
  2. Use Photo Enclave normally, including taking photos and videos in the app.
  3. Back in the App Privacy Report, Photo Enclave appears under “Data & Sensor Access”, so the report is recording it. It does not appear under “App Network Activity”.
  4. For the raw records, tap “Save App Privacy Report” at the bottom, copy the file to a computer, and keep only the app’s lines. Network records have the 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"

Our result: 24 October 2026, iPhone 15 Pro, iOS 27.0.1, Photo Enclave 1.2.6. The report covered about 12:18 to 15:57 local time. Photo Enclave had 10 access records (camera and microphone) and 0 network records. In the same report, 6 other apps had 22 network records between them, so the report was recording network activity during that time.

Actions the system performs on the app’s behalf, such as the photo picker, are recorded under the system.

Network test: Android

Method: use adb to look at the app process’s network group, its sockets, and its traffic statistics. Turn on USB debugging, keep Photo Enclave in the foreground, and run the commands below. Replace 10041 with the userId shown on your device.

$ 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

Without a computer: check Photo Enclave’s data usage in the app details in system settings (the name varies by brand, such as “Mobile data” or “Data usage”). It should be 0.

Our result: 24 October 2026, Samsung Galaxy A03s (SM-A037W), Android 13, 1.2.6.0 installed that day. We took 3 photos and recorded a 5-second video in the app, then ran the commands above; the output is shown as it came. Because the app was installed that day, netstats covers all of its use.

Contact

Questions about this page, or a result that differs from what is shown here: support@src.studio