README.md

September 21, 2026 · View on GitHub

FileManager — real security for your files, nothing else

Build status Latest build iOS 18+ MIT license Downloads Last commit

Face ID locked folders Hidden second vault AES-256 encrypted zips Real PDF passwords Self-destructing data Secure delete 100% on-device

Files apps on iOS are fine for browsing, but the moment you want to actually protect something — a real password on a PDF, an encrypted zip, a folder nobody but you can open — you're stuck. FileManager is my answer to that: a sideloaded, no-account, no-backend file manager that treats security features as first-class, not an afterthought.

Everything runs on-device. There's no server, no analytics, no account. The only thing FileManager will ever reach out to the internet for is an optional, manual check against this repo's GitHub releases from the Settings tab — nothing else, ever.

Add to AltStore — one-tap install

On-device, tap the card above. In SideStore, Feather, or anywhere else that asks for a source URL, copy exactly this link — not the address of this GitHub page:

https://raw.githubusercontent.com/xsxs18-dev/FileManager/main/altstore-source.json

Add that once and every future release shows up as an update automatically — see below for details.

Contents

What it does

Files and Folders

The basics, done properly: create folders and files (with real content, not just empty placeholders), edit text files in place, rename anything (including swapping the extension, .txt → .pdf, whatever), multi-select, delete, browse. Tapping a file opens it — a Quick Look preview for most things (including audio and video, like .mp3/.mp4/.wav), a plain-text editor for .txt. An "Import File" button pulls in any file type from Files, iCloud Drive, or any other app's document provider, and "Import Photo" pulls photos and videos straight from your photo library through Apple's picker — no photo library permission needed, since the system hands over only what you actually pick. Move or copy a file into any other folder (hidden and locked folders never show up as destinations), or hand it off to any other app through the system share sheet — one at a time or with a whole multi-selected batch.

Hidden and Face ID-Locked Folders

Mark a folder "hidden" and it's gone from normal browsing, only reachable from its own dedicated Hidden Area. Separately, lock any folder behind Face ID / passcode. The two are independent, so you can mix and match. The Hidden Area itself isn't read-only either — rename, move, copy, lock/unlock, unhide, and delete all work there too, individually or as a multi-selected batch.

A Second, Hidden Vault

Tap the gear icon at the top of Settings seven times to reveal a completely separate, Face ID-only vault. It's stored apart from the regular one and isn't referenced anywhere else in the UI — the seven taps are the only way in. The very first time you unlock it, you're asked to set the self-destruct limit below (you can skip it and leave it at "Never").

Self-Destructing Folders

Set a number of failed Face ID attempts (3, 5, or 10) after which a locked folder — or the secret vault — deletes itself automatically. A cancelled prompt never counts against the limit, only a genuine wrong attempt does. This isn't a normal Settings row: it's only ever asked once, when the secret vault is first created, and after that the only way back into it is tapping "Version" in Settings ten times — so it can't just be switched off by anyone who happens to have your phone unlocked.

Share Sheet Support

FileManager shows up when you tap Share in any other app. Send a file over, then open FileManager to finish bringing it in. (This deliberately doesn't rely on an App Group, since that needs a real, fully provisioned Apple Developer account — the extension hands files to the app over the system clipboard instead, briefly, so it works with any signing setup. Named/custom pasteboards would avoid touching your actual clipboard, but Apple deprecated those for exactly this kind of app-to-extension handoff back in iOS 10.)

If you've had FileManager open recently, the share sheet also offers a destination folder picker, built the same way — the app quietly drops a list of your folder names onto the clipboard whenever it's open, and the extension reads it back. It's best-effort: without an App Group the extension can't browse your vault directly, so if that list isn't there (or the folder you picked got renamed, hidden, or deleted in the meantime), the file just falls back to landing in My Files.

ZIP with Real Encryption

Create and extract zip archives from anything in the app. Password-protect them with AES-256. (ZIPFoundation doesn't support encrypted zips natively, so files are individually encrypted with CryptoKit before they ever get zipped.)

Encrypt Anything

PDFs and ZIPs get their own proper encryption schemes (see below), and every other file type — photos, text, whatever — can be encrypted with a password straight from its context menu, using AES-GCM.

PDF Creator

A dedicated tab that combines photos from your library, images already sitting in your vault, a document scan, or typed text into a PDF, without having to dig through folders first.

Real PDF Passwords

Lock a PDF with a real owner/user password through PDFKit — the kind of protection that works when you open the file in any PDF reader, not just this app.

Secure Delete

An opt-in toggle, visible in Settings, that overwrites a file's bytes with random data before removing it, so simple undelete/recovery tools come up empty. Off by default since it's slower, especially on large files.

Themes and Settings

Four built-in themes (light blue/black, red/black, light blue/white, red/white), plus a one-tap check against this repo's latest release so you know when to update. Settings shows your current version and build number, and a Changelog screen lists what changed in every past release, pulled straight from GitHub Releases.

Localization

The UI follows your device's system language. Currently English and German; PRs for more are welcome.

Screenshots

Coming soon — open an issue or PR if you'd like to contribute some real device shots.

Getting it running

Add it to AltStore, SideStore, or Feather

This is the easiest way, and the only one where updates find you automatically instead of the other way around. FileManager publishes itself as an AltStore source — add it once, and every new release shows up as an update in the app, no GitHub visits required.

Tap to add the source directly if you're reading this on the device you want to install to. Otherwise, add it manually — in AltStore that's Browse → Sources → Add Source; in SideStore or Feather, look for Add Source / Repos — and paste exactly this URL:

https://raw.githubusercontent.com/xsxs18-dev/FileManager/main/altstore-source.json

That's raw.githubusercontent.com, not github.com — the plain repo link above is a webpage for humans to read, not a source file a sideloading app can parse, and pasting it in will just silently do nothing.

Note: this only works with AltStore Classic and its compatible clients (SideStore, Feather), not AltStore PAL — PAL requires every app to pass Apple's notarization process under a paid Apple Developer account, which is exactly what this project avoids needing.

Download and sign manually

Every push to main builds an unsigned .ipa on GitHub Actions and publishes it straight to a new Release — one release per build, tagged build-N, with the raw .ipa attached as a downloadable asset (not zipped, unlike the Actions artifact tab). Grab the latest one and sign it with your own free (or paid) Apple ID using:

  • Sideloadly, or
  • AltStore — handles the 7-day re-signing free accounts need automatically

Build from source

You'll need a Mac with Xcode and XcodeGen (the .xcodeproj isn't committed — it's generated from project.yml):

brew install xcodegen
git clone https://github.com/xsxs18-dev/FileManager.git
cd FileManager
xcodegen generate
open FileManager.xcodeproj

Set your own signing team in Xcode and build to a device.

How it's built

Swift SwiftUI PDFKit ZIPFoundation CryptoKit LocalAuthentication XcodeGen

UISwiftUI everywhere, except where iOS forces UIKit (the document scanner, the Share Extension host)
PDFPDFKit — creation, rendering, and real owner/user password encryption
ZIPZIPFoundation for archiving, CryptoKit (AES-GCM) for encryption
Generic file encryptionCryptoKit (AES-GCM), salted per file, .fvenc output
Face IDLocalAuthentication
Localizationa String Catalog (Localizable.xcstrings), English source + German
App ↔ Share Extensionthe system pasteboard + a custom URL scheme (filemanager://), no App Group, no entitlements at all
Project layout
FileManager/
├── App/            entry point
├── DesignSystem/   colors, spacing, type, theme definitions, shared styles
├── Models/         FileItem, ZipManifest
├── Services/       FileSystemService, ZipService, PDFService, CryptoService,
│                   FileEncryptionService, AuthenticationService,
│                   FolderProtectionStore, ThemeManager, UpdateChecker
├── Shared/         PendingImportStore, shared with the extension
├── Views/          screens and sheets (Files tab, PDF Creator tab, Settings tab, ...)
└── Resources/      Assets.xcassets, Info.plist, Localizable.xcstrings

ShareExtension/     the Share Sheet extension target
project.yml         XcodeGen project definition
.github/workflows/  CI — builds an unsigned .ipa and cuts a GitHub Release for every push

Known rough edges

Click to expand
  • The Share Sheet's folder picker only works if FileManager was opened recently enough for its folder list to still be on the clipboard — otherwise a shared file falls back to My Files, and you have to open FileManager afterwards for it to actually show up. That's the tradeoff for not needing an App Group (and therefore not needing a real, fully provisioned Apple Developer account) to make the Share Extension work.
  • Sending a file from the Share Sheet briefly replaces whatever's on your clipboard, since that's the handoff mechanism. It gets cleared out once FileManager picks the file up.
  • The Share Extension's own UI is English-only for now, regardless of your system language — only the main app is localized.
  • No landscape-optimized layout yet.
  • No iPad-specific split view.

Contributions and bug reports welcome — this is a small side project, not a polished product, and it'll stay that way unless people find it useful enough to push on.

License

MIT — see LICENSE. Do whatever you want with it.