惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
C
Check Point Blog
博客园 - Franky
V
Visual Studio Blog
云风的 BLOG
云风的 BLOG
aimingoo的专栏
aimingoo的专栏
Microsoft Security Blog
Microsoft Security Blog
V2EX - 技术
V2EX - 技术
AI
AI
Hacker News - Newest:
Hacker News - Newest: "LLM"
Jina AI
Jina AI
S
Security @ Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
H
Hacker News: Front Page
H
Hackread – Cybersecurity News, Data Breaches, AI and More
O
OpenAI News
Attack and Defense Labs
Attack and Defense Labs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
爱范儿
爱范儿
H
Heimdal Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
G
Google Developers Blog
G
GRAHAM CLULEY
V
V2EX
The Register - Security
The Register - Security
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
Schneier on Security
Schneier on Security
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
Help Net Security
Help Net Security
大猫的无限游戏
大猫的无限游戏
C
CERT Recently Published Vulnerability Notes
The GitHub Blog
The GitHub Blog
V
Vulnerabilities – Threatpost
The Last Watchdog
The Last Watchdog
J
Java Code Geeks
S
Secure Thoughts
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
量子位
NISL@THU
NISL@THU
K
Kaspersky official blog
Engineering at Meta
Engineering at Meta
T
Threatpost
Recent Commits to openclaw:main
Recent Commits to openclaw:main
宝玉的分享
宝玉的分享
Security Latest
Security Latest
T
The Exploit Database - CXSecurity.com
博客园_首页
A
Arctic Wolf

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
美观实用的 LiveUseful 如何创造 - 少数派
2018-02-22 · via 少数派

前一阵子我个人的第三个独立作品 LiveUseful 上架了1 。在上架前三天,我印象里在中区工具类最高排名 362 ,ProductHunt 日榜最高时第二,结束时第四,就这个结果来看还是非常好的。虽说只靠这 App 的收入还做不到让我在东京正常过日子,不过这和本文就没什么关系了。

先给不知道这个 App 是干什么的朋友简要做一个介绍。这是一个在你的锁屏壁纸里隐藏东西的工具,你可以用这个工具做到例如:在锁屏中隐藏一个支付宝二维码,在需要给别人看的时候用 3D Touch 呼出。软件本身提供添加文本、图片、二维码,而使用其他 App 的截图,你相当于可以往里加任何东西。详情可以看这篇文章:把二维码藏在锁屏里,解锁春节讨红包新姿势:LiveUseful

LiveUseful 从开始制作到上架历时两个月,基本上全部工作都是我一个人完成(感谢 Lincoln Guang 在图标设计上给出的建议),从最终产品来说还算是圆满。今天我主要是想讲一下我在设计这个 App 的过程以及一些我的想法。希望可以让不是开发者的朋友简单的了解一下,以及给想要做独立开发的朋友一些参考。

产品定位

做个人开发精力非常有限,如果不能把重点放在几个功能上的话,一年半载估计也没办法上架。所以做这样一个 App 的首要任务就是划定功能范围,并给出一个是否添加某项功能的标准。

在 Live Photo 中添加内容由来已久,最早是 Elk 做了一个在锁屏上放汇率表的功能,非常的方便。虽然不能自动更新,但是对于短期旅游来说,直接看大概数值方便对外币形成个概念还是非常不错的。之后有专门在锁屏上放 Todo-list 的软件,StackOverflowError 做的小历我记得也加入了这种功能。但是不管怎么搞,从来没有人做一个通用工具来方便用户在锁屏上放各种东西。

后来少数派编辑 Minja 的这篇文章发出来了,看到这文章阅读量这么高我就觉得这个需求确实存在,于是就决定开始做。

那么作为一个通用工具,这个 App 什么该做,什么不该做呢?首先我一开始就想到了截图这件事情,利用其他 App 的截图,LiveUseful 实际上可以在没有任何自带功能的情况干各种各样的事情。所以,LiveUseful 只需要添加用户最常用的使用场景减少跳出,而不需要什么都堆进去。当用户需要特殊功能的时候可以自己使用其他 App 的截图,而对没有这些特殊需求的用户,App 依然可以显得直观干净。

这里我选择了文本和二维码,对于所有使用文字的应用场景,有一个加文本的功能基本都能解决问题,二维码则是在大天朝每天都要用的玩意。两个功能的覆盖面都非常广。3 

所以 LiveUseful 最终确定会包含的主要功能就只有文本、图片、二维码。并以此为基础添加一些自定义选项。其他的功能能交给别的 App 做的就交给别的 App 做,我这边只好好做最终生成阶段就可以了。

总之就是好好做一个工具,保持干净。

而在功能分配上,我将添加文字和二维码(包括转写)这两个比较常用的功能放在了普通版本中,而添加图片放在了 Pro 版。使得对于那些轻度用户来说,普通版本其实就已经足够实用,只有重度用户才需要买内购。对于那些只需要把自己微信摆在屏幕上的人来说,普通版本完全够用了。

实现原理

Live Photo 的格式非常简单,一张 JPEG 格式的照片,和一段 QuickTime 格式的视频。不过你只是做一张图一个视频是不够的,你还需要给二者添加关联性的元数据,其中包括:

  • 图片中编号 17 的信息 kFigAppleMakerNote_AssetIdentifier。
  • 视频中 com.apple.quicktime.content.identifier,内容与加在图片中的 AssetIdentifier 一致。
  • 视频中 com.apple.quicktime.still-image-time。

之后才可以把这二者关联为一个 Live Photo。

这一部分的代码在苹果的 Live Photo 范例中都有涉及,就是生成视频的过程需要动动脑子。操作 AVFoundation 还是有一定难度的。最开始为了提高开发速度,我将生成视频和添加元数据放在两个不同的步骤中,这么做其实降低了软件的性能,在软件上架后我就尽快找时间把这两个部分合并了。不得不说 AVFoundation 调试起来挺蛋疼的,因为 API 都比较老,报错的时候甚至连出错的原因都看不着,对于不熟悉这玩意的人来说,简直只能靠猜。。。

因为这篇文章不讲技术细节,点到为止,接下来我来介绍一下软件设计过程中值得注意的点。

使用的工具

设计上使用的是我惯用的 Sketch,Sketch 大法好。

这里没用原型工具。因为从头到尾都是我一个人在做,大概运行起来什么效果都在脑子里,所以也就不需要原型了。Xcode 自不必说,写代码阶段我还使用 SourceTree 来管理 Git 版本,非常好用。

除了这些之外,我还使用 Garageband 制作了 AppStore 介绍视频的背景音乐。

第一个画面

生成 Live Photo 这件事情的过程是基本上固定的,于是整个交互也以线性流程为主。这不仅易于使用,在开发上也同样简便,我基本上采用了模态窗口一层一层叠上去的策略。

整个 App 首先需要的是一个让用户选择照片的画面,由于系统的选择图片框可以取消而且你无法屏蔽这个取消按钮,你必须设计一个画面能够让用户重新开启照片选择框。最开始的设计中,App 首个画面画面是左边这个样子的,整体颜色为黑色,与现在的版本差别很大。

之所以有这样的修改主要的原因是这样的,随着后期的开发进程,我发现我需要找到一个 App 的标志色来放在各种按钮上保持统一,包括在裁剪图片等背景为用户内容的画面。而这种在暗色背景上视觉效果较好的颜色很难与大多数的亮色背景图片搭配,实际效果并不好,所以我把第一屏幕的颜色改为了白色。但是我比较巧合的发现继续保持加载画面为黑色,在加载完全之后变成白色非常有趣,就把启动画面的颜色保留了下来。

需要说的是在第一屏选择完图片之后,会有一个渐变进入下一屏幕,这个渐变其实是我用截图做出来的。模态窗口会直接把图片选择框的动画覆盖掉,导致一个非常生硬的过渡。为了解决这一问题,我在播放动画前对窗口做了截图显示在前面,过渡动画的过程中实际上窗口已经不在了。

图片裁剪

由于用户要拿我这里生成好的图片去设壁纸,裁剪这一步骤必须在添加内容之前完成。裁剪的目标大小与屏幕相同,于是我直接使用屏幕作为裁剪框,实际上是对设定壁纸过程中隐藏的裁剪流程的复刻,效果非常直观。

在设计裁剪功能的时候,有一个需要注意的点。由于这里的裁剪要严格按照屏幕尺寸进行,我必须避免误操作。比如在滑动图片超出了屏幕范围的时候,我会使裁剪按钮无效,这样可以避免用户在回弹动画过程中点击裁剪而裁剪出尺寸不正确的图片。实现上是靠对比裁剪完图片的宽高比和屏幕的宽高比。

需要避免的情况

功能菜单

之后就会进入功能选择菜单。最早版本的设计是几个按钮横着摆在下面,后来在 Telegram iOS DEV 群中有人说在 iPhone X 上看起来很挤,于是改成了纵向的菜单。而且这种纵向的菜单对点击也非常友好,下面一排就有可能够不到。

这里遇到的问题主要是在配色上。因为我个人是个配色渣,这里需要选择一种适合于大部分用户内容的配色对我来讲还是非常难的,从一开始扎眼睛到现在的这个看起来还算舒服的配色改过无数次。

这里颜色仅应用在主要的功能按钮上,返回和帮助这种功能按钮则是黑白的。这样区分可以让用户看一眼就知道该点哪,减少思维成本

编辑器

选择功能之后会进入编辑界面。在设计这一界面的时候其实比较水到渠成。由于 LiveUseful 的主要目的是生成锁屏壁纸,所以加入的所有内容都不会显示在屏幕的上部(会被时间日期挡住)。所以界面的上半部分理所应当的成为了编辑器的区域。实际上这个区域的大小是我估计出来的,我本来想找到在各个设备上苹果显示时间日期的位置计算方法,但是怎么算都对不上,后来就大概估计了一个所有设备都不会出问题的位置。

我将编辑器分为三部分。导航条、内容区域、工具栏。三个屏幕都以类似的结构进行设计。其中插入图片的界面是比较特殊的,这里的多个按钮的功能差别非常大,想要在堆在一起的情况下把区分开非常难,于是最后选择放到了屏幕下部。

二维码功能的实现其实花了我一些心思,因为我希望能够做到实时刷新二维码。看起来非常酷炫,但渲染的负担也特别大,字一多就会卡死。刚开始我只是一般限制字数,后来发现如果有人输入了一堆汉字,我 App 会直接崩溃。现在一个汉字我按照三个字符计算,同时加入了字数指示之后,算是控制到了一个比较合理的程度。

另外这里的转写二维码也是一个非常重要的功能。因为我决定要让插入图片作为一个内购功能存在,那么如果让用户买内购才能插入支付宝和微信二维码无疑是不要脸。所以我做了这样一个非常方便的功能,你可以直接扫描其他的二维码添加进来。生成的效果不但非常美观,而且体积也更小。

保存图片

编辑完成之后就进入了保存界面,在保存界面中虽然可以预览效果,但这个画面却并不是为了预览效果而存在的。Live Photo 需要一个生成过程,而如果直接把这个过程放在编辑器画面中,又不做一个明显的保存操作的话,会给人一种任务没有完成的感觉。所以这个画面的主要目的其实是对任务已经完成的强调,而非实际上的预览画面。由于这个原因,点击返回的时候会直接退回首页,方便制作新的文件。

一些细节

动画

每个画面出入的部分,UI 元素都添加了一个展开动画。其中菜单画面的动画是较为复杂的,右侧的四个按钮其实是在一个位置展开,而非五个按钮直接平移过去的。有的人可能会觉得做得快一点就无所谓了,但是实际测试中发现,虽然动画非常快,但是假如不做展开而直接用平移,视觉上将会非常奇怪。所以我最后只好乖乖的把动画做了一遍。

二维码位置

有些人可能会奇怪我为什么要把二维码放在那么靠下的位置上,这主要是为了防止被系统的音乐播放窗口挡住。如果你一边听播客,又要给别人看二维码的话,就能发现这个位置的意义了。

自动保存

假如你已经添加了一些内容,但退回到了菜单画面,那么你的修改将会被保存,这可以防止误操作和一些反悔的情况。

使用上次照片

这个功能是给那些经常换二维码内容或者每天拿来做备忘录的用户设计的。如果每次都让这些用户重新裁剪照片,就完全称不上是高效了,所以我允许用户使用上次使用过的照片,从而能够把这部分时间节约出来。我现在也在为那些成天换壁纸内容不变的用户考虑,也许未来的版本会添加保存内容的功能。

Hack 系统的原罪

就难度来讲,除了 AVFoundation 比较坑之外其他的地方都没有什么特别大的问题。整个制作过程中遇到的最大的坑其实是系统,Live Photo 拿来隐藏内容并不是苹果设计的初衷,所以在实现上苹果并没有对此有任何优化。这导致了相当多的问题。

首先,系统为了能够节约内存,把锁屏上的 Live Photo 压的比较狠,其实你放在锁屏上的东西会显得虚。虽然经过我测试,完全不影响二维码等的扫描,但确实看着不顺眼。简介里我已经写的非常清楚了系统会压缩不是我的问题,最后用户还是会归结为我的问题来给我打差评。

除了发虚,还有就是位置不对的问题。iOS 壁纸有一个视差效果的功能,为了实现这一效果,需要把壁纸放大一圈提供移动的空间。这就导致一些用户在设置壁纸的时候由于没有自己缩放,二维码被下面的解锁提示挡住。发生这件事的时候,用户也会来给我打差评。

第三个是 Live Photo 本身的功能稳定性。在进行预览的时候,Live Photo 经常会出现播放不正常,例如闪烁、延迟等,有时候甚至完全不能播放。我在调试的时候也遇到了好几次,一开始以为是我自己的 Bug,但是怎么修都不对,结果重启就好了。令人非常绝望。用户也因为这个给我打过差评。

总结一下就是,我这个 App 要解决的问题都不是我造成的问题。而且不管你在简介里怎么强调,一些用户还是一眼不看并直接当成是你的问题。所以最后为了不再需要每天在 iTunes 上回复这些会误导人的评论,我做了一个全屏的提示,确认之后才会生成图片。虽然很丑,但这是我让他们好好看一眼的唯一方法了。

总结

以上就是我在设计这款 App 的过程中想到的一些点。最终做出来的产品不管是从美观还是易用的角度都达到了我对整个产品的预期。经过过年期间一天一个版本的迭代,现在使用已经非常顺畅了。之后我还准备加入添加列表的功能以及其他更有用的自定义,以及进行无障碍优化等。不过是否花时间在上面还是要取决于收入和我自己有没有时间。如果你还有什么关于这个 App 的有价值的问题,欢迎在评论区和我讨论。

DLC

除了这些制作的事情,我还想说些题外话。作为一个个人开发者,死抠软件的细节几乎是天性。之前也见其他的开发者讲过类似的话,由于最终产生的产品是自己一个人的作品,所以很多人都会以对待艺术品的完美主义去对待自己的产品。这就导致我们经常会花费很多多余的精力去死抠一些用户压根就不会注意的细节,包括一些动画的长度啊,交互的步骤啊,这其实是一件非常累人的事情。而且即便心里清楚这个投入产出比并不值得,也还是忍不住去调。

就我个人而言,在我每次做作品期间,基本上都睡不好觉。晚上睡着之前脑子里会一直想着没修完的 bug 和还能加的功能。要是突然想到什么就立刻爬起来记上,甚至有的时候会爬起来把功能做了再继续睡觉。

某种程度上说,独立开发软件作为作品之于其作者的意义早已超越了作为商品之于其收入的意义。

希望你喜欢 LiveUseful,下次见。