README.md
September 21, 2026 · View on GitHub
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.
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
| UI | SwiftUI everywhere, except where iOS forces UIKit (the document scanner, the Share Extension host) |
PDFKit — creation, rendering, and real owner/user password encryption | |
| ZIP | ZIPFoundation for archiving, CryptoKit (AES-GCM) for encryption |
| Generic file encryption | CryptoKit (AES-GCM), salted per file, .fvenc output |
| Face ID | LocalAuthentication |
| Localization | a String Catalog (Localizable.xcstrings), English source + German |
| App ↔ Share Extension | the 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.