利益相关声明:作者与文中产品有直接的利益相关(开发者、自家产品等)

那个总被忘记的瞬间

上个月参加朋友聚会,有人想看我拍的猫咪照片。

我解锁手机,打开照片 App,找到那张照片递过去。对方刚看了一眼,手指一滑——下一张是我和女朋友的亲密合照,再一滑——是身份证照片,再一滑——是……

「等等!别滑了!」我几乎是抢回手机。

事后我才想起来:这些照片我明明应该提前藏到「隐藏相册」里的。但问题是,每次拍完照片都要记得手动隐藏,这本身就是个反人性的操作。 人总会忘记,而忘记的代价就是尴尬。

系统相册的隐藏相册确实支持了 Face ID 保护,这很好。但核心问题依然存在:你需要先记得把照片放进去

我尝试过各种方案:

每次拍完照立刻隐藏——但总会忘记

把私密照片存到「文件」App 的某个角落——找起来太麻烦,而且预览体验很差

用云相册的「私密空间」——还是要上传到别人的服务器,不放心

下载各种「隐私相册」App——要么广告太多,要么设计太丑,要么已经停止维护

最后我意识到:我需要的不是一个「需要记得隐藏」的相册,而是一个「默认就私密」的相册。

于是某个周末,我打开了 Xcode......

▍从 Face ID 保护开始

最开始我只想解决一个问题:给相册加一把锁

听起来简单,但 iOS 开发里坑不少:

坑 :生物识别的权限处理

用户可能拒绝 Face ID 权限,也可能设备不支持。不能因为这些情况就让 App 无法使用。

我的做法是:优先尝试生物识别,如果不支持或用户拒绝,允许使用设备密码作为 fallback。这样既保证了安全性,又不至于把用户挡在门外。

Face ID解锁

▍后台模糊:防止偷瞄的最后一道防线

应用进入后台时,系统会截一张图显示在多任务界面。如果这时候显示的是相册内容,旁边的人一眼就能看到。

我花了很长时间调试 UIApplication.didEnterBackgroundNotification 的时机,确保在截图发生前就显示模糊蒙版。

技术细节:

使用 UIVisualEffectView 实现模糊效果,而不是截图方式,避免内存峰值

监听 didEnterBackgroundNotificationwillEnterForegroundNotification,确保切换流畅

模糊强度可调节,兼顾隐私和美观

app后台时模糊

▍WiFi 传输是个意外收获

解决了隐私保护后,我又遇到了新问题:怎么把电脑里的照片批量传到 Luminara?

数据线 + iTunes?太麻烦了。

AirDrop?不支持 Windows,而且只能一张张传。

微信?压缩画质不说,还得先上传到腾讯的服务器。

我突然想到:为什么不直接在 App 里开一个 HTTP 服务器?

同一 WiFi 下,电脑浏览器访问手机的 IP 地址,就能直接上传下载。不需要安装任何软件,不需要注册账号,原画质传输。

但这个功能的开发比想象中复杂:

挑战 1:大文件传输的内存问题

如果一次性把几个 G 的视频读入内存,App 会直接崩溃。

解决方案是流式传输

上传时,HTTP body 直接写入临时文件,再边读取边解析 multipart 数据

下载时,256KB 分块读取,边读边发送到 socket

支持 HTTP Range 请求,实现断点续传

这样即使传输 4K 视频,内存占用也能控制在几十 MB。

挑战 2:multipart 解析的复杂性

浏览器上传文件时,数据格式是 multipart/form-data。文件字段和文本字段(如 albumId、lastModified)可能跨越多个 TCP 包。

我设计了一个状态机来处理:

inPartHeaders:解析 part 的 headers

inFileContent:流式写入文件内容

inTextContent:累积文本字段内容

最头疼的是边界情况:文件名包含特殊字符(如换行符)会导致 HTTP 响应头被截断。最后通过 RFC 5987 编码才解决。

wifi传输界面

▍备份与恢复:数据安全无忧

随着照片越来越多,我开始担心一个问题:如果手机丢了或损坏了,这些照片怎么办?

iCloud 备份?那意味着照片要上传到苹果的服务器,违背了「本地存储」的初衷。

我在设置界面加入了独立的备份与恢复功能:

一键导出:在设置中点击「备份」,将所有相册、照片、视频、缩略图导出到一个文件夹(包含 albums.json 和 Media 目录),通过系统分享保存到文件App中

实况照片处理:Live Photo 的图片和视频部分分别保存,确保恢复后能正确配对

元数据保留:拍摄时间、地点、相册结构等信息完整保留在 albums.json 中

一键恢复:选择备份文件夹,所有数据原样还原到新设备

这样即使换手机,也能在几分钟内完成数据迁移,完全不需要依赖云服务。

数据备份与恢复

▍重复照片检测:释放存储空间

用了一段时间后,我发现手机里有很多重复照片:

同一张照片从微信保存了多次

备份恢复后重复导入

截图分享后忘记删除原图

这些重复照片散落在不同的相册里,手动查找非常麻烦。

Luminara 的重复检测功能,让你可以在应用内快速找到并清理重复照片:

基于图像相似度算法:即使分辨率不同、轻微编辑过的照片也能识别

支持调节相似度阈值:根据需要调整检测敏感度

一键批量清理:选中重复照片后一键删除,释放存储空间

按相册筛选:可以选择只在特定相册中查找重复照片

这个功能让我清理出了冗余的空间。

重复照片检测

▍照片地图:按地点回忆旅行

系统相册其实也有地图功能,但入口隐藏很深,大量照片时在地图上堆叠成一团,根本无法直观看到拍摄地点的分布。

Luminara 把地图作为一级入口,与列表视图并列:

直观展示:地图视图与列表视图随时切换,不需要层层点击

按相册筛选:只看某个旅行相册的照片在地图上的分布

更好的聚类:大量照片时也能清晰呈现地理分布,不会堆叠成一团

时间轴结合:可以在地图上按时间顺序浏览,重温旅行路线

这个功能特别适合喜欢旅行的用户。看着地图上一个个标记,就像重新走了一遍那些地方。

照片地图

▍三种相册视图模式:随心切换

Luminara 提供三种视图模式,满足不同场景需求:

卡片视图:以网格形式展示照片缩略图,适合快速浏览和查找

列表视图:展示照片详情(名称、大小、日期),适合精细管理

时间轴视图:按时间顺序展示照片,重温美好回忆

每种视图都支持滑动手势快速切换,操作流畅自然。

▍媒体查看器:沉浸式体验

打开任意照片或视频,进入沉浸式查看模式:

全屏展示:自动隐藏界面元素,专注内容本身

手势操作:左右滑动切换、双指缩放、长按保存

信息面板:显示照片的详细信息(拍摄时间、地点、大小等)

Live Photo 播放:长按播放动态效果,松手恢复静止

 

▍Live Photo 与更多细节

除了核心功能,Luminara 还支持:

Live Photo 完整支持:保留动态效果,原生支持导出Live Photo

三种视图模式:卡片视图、列表视图、时间轴视图,满足不同场景

多语言支持:中文、英文等语言切换

深色模式:适配 iOS 深色主题,夜间使用更舒适

图标更换:支持更换应用图标,个性化你的 Luminara

▍与系统相册的关系

很多人问我:Luminara 会取代系统相册吗?

我的答案是:不会,它们是互补的。

系统相册适合:

日常随手拍,快速查看

与 iCloud 同步,多设备访问

系统级分享,发送到其他 App

Luminara 适合:

需要隐私保护的照片:Face ID 解锁、后台模糊、独立存储空间,借手机时不再提心吊胆

创建多个独立相册:工作、旅行、家人、宠物……每个主题一个相册,清晰分类

按地点浏览照片:地图视图直观展示照片分布,重温旅行路线

与电脑传输文件:WiFi 传输功能,无需数据线,原画质批量导入导出

清理重复照片:智能检测相似照片,一键释放存储空间

完整备份与恢复:导出到文件夹保存到电脑,换机时快速还原所有数据

管理 Live Photo:完整保留动态效果,支持导出为视频或静态图片

你可以把 Luminara 当作「私密相册」,而不是系统相册的替代品。

▍Pro 版本与免费版

Luminara 采用免费 + Pro 订阅的模式:

免费版:

创建最多 3 个相册

导入最多 10 张照片/视频

基础浏览和管理功能

Pro 版(订阅制或终身买断):

无限相册数量

无限导入数量

重复照片检测

照片地图功能

更换app图标功能

免费版的功能已经足够体验核心功能,如果觉得好用再考虑升级。

 

福利

我给派U们准备了10个Luminara兑换码,想要的UU们可以评论“挖到宝了!Luminara 隐私相册!”,后续会将兑换码发放截图公布出来~

下载链接

App Store 下载 Luminara


你的照片,只属于你。

如果你也重视隐私,厌倦了借手机时的尴尬,不妨试试 Luminara。有任何问题或建议,欢迎在评论区留言,我会认真回复每一条反馈。

本文在少数派独家首发,转载请注明出处。

5
25