昨天凌晨两点四十,我在书房把那台 2019 年的旧 MacBook 打开,把刚下好的 ipa 从下载目录拖进了解包用的工作文件夹——文件名是「49tktuku_20260904.ipa」,大小 61.4 MB,Finder 显示的修改时间是 9 月 4 日 18:26。我把终端窗口拉到全屏,敲了第一条 unzip -l,屏幕上滚出三百多行目录,其中有一行让我停了两秒:Payload/TuKu49.app/Assets/ 下面,子目录不是按功能命名,而是按月份,从 2023-11 一直排到 2026-08。
这个细节我后来问过做 iOS 开发的朋友周启明(他在一家做工具类应用的公司待了六年),他的解释是:这批目录是资源热更新留下的痕迹,每次换季推新图,就往对应月份目录里塞,从不清理旧目录。于是安装包越滚越大,一个本该 30 MB 的应用膨胀到了 61.4 MB,而真正在用的资源可能只占三分之一。他原话是:「你打开那个 Assets 目录数一数,2023 年的东西到今天还在包里躺着。」我数了,2023-11 到 2024-03 四个目录,合计 187 个文件,合计 11.2 MB。
Info.plist 里两个不太一致的版本号
继续往下走,我打开 Info.plist。这里出现了一个具体细节:CFBundleShortVersionString 写的是 3.8.2,但 CFBundleVersion 是 3819,而应用内关于页截图里显示的是「v3.8.1」。三个数字对不上。周启明的看法是这个包大概率是灰度构建,构建号跳了一级但界面文案没跟上;另一种可能是测试包直接泄漏到分发渠道。我没有足够证据下结论,但把三个数字并排写下来这件事本身,就比任何模糊的「版本较新」有意义。
我顺手去核对站内另一篇整理帖 49图库恢复正常使用免费打开49 里提到的版本节点,那篇记录的是 8 月下旬恢复访问时对应的 3.7.x 系列,与这个包的跨度隔了将近一个中版本。再对照 49图库app苹果下载安装 里列的安装步骤,其中「检查版本号」那一步只要求「3.7 以上」,说明分发侧对版本并不做严格校验——这也解释了为什么 3.8.2 的包能在多个渠道同时挂着。
我的判断偏保守:一个连版本号三处不一致的安装包,不该被当成「稳定版」推荐给普通用户,灰度包就该明确标成灰度包。
缓存目录与那个奇怪的 4096
真正让我坐直的是沙盒缓存路径的配置。在反编译出来的字符串表里,有一处硬编码的缓存上限:/Library/Caches/com.tuku49.images,配套的清理阈值写死为 4096(单位是 MB,也就是 4 GB)。这意味着应用允许图片缓存一路堆到 4 GB 才触发清理,而在 iOS 上系统本身对单个应用缓存就有更早的回收策略。换句话说,这个阈值形同虚设,只会在系统强杀之前留下一地鸡毛。我把这条截图发给了周启明,他回了两个字:「常见。」然后补了一句:「但 4 GB 确实偏大,正常人写 512。」
为了验证这个路径是否真的被使用,我在模拟器里跑了半小时,用 lsof 盯了一会儿文件句柄,确认 com.tuku49.images 目录在持续增长,半小时堆到 214 MB。这个数字和安装包本身 61.4 MB 放在一起看,能大致理解它的资源策略:包体只是壳,真正的图片靠下载与缓存。这也和 免费下载49tk图库 里提到的「首次加载偏慢、二次打开很快」的现象对得上。
三个具体细节,顺手记在这里
其一,Payload/TuKu49.app/ 下的 Frameworks 目录里混着两个 2022 年的旧静态库,文件名带 _legacy 后缀,体积合计 6.8 MB,看起来是早年为兼容 iOS 12 保留的,如今最低支持版本已经写到 iOS 15,它们属于纯死重。其二,本地化文件里简体中文的 Localizable.strings 有 1,204 条键值,其中 63 条的值为空字符串,集中在「设置」与「关于」两个页面。其三,解包目录的 _CodeSignature 里,签名时间戳是 2026-09-04 02:11,比 Info.plist 里记录的构建时间早了将近一天,说明包在签名后又被替换过资源,这在正常提交流程里不该发生。
这三条我都没有写成定论,因为解包只能看到静态结构,看不到构建流水线。但把细节摆出来,至少能让后来想核对的人少走弯路——尤其是那个空字符串的 63 条,如果你装上后发现设置页某些说明是空白,大概率不是你的网络问题。
一句可能不太受欢迎的话
我得说句不太受欢迎的话:现在很多围绕这类应用的「教程」写得太顺滑了,顺滑到把安装包当成一个不需要审视的黑盒。我不同意这种做法,我认为一个要装进自己手机、要读写相册缓存的东西,值得被打开来看一眼目录结构。这不叫多疑,这叫基本的使用卫生。周启明笑我「太较真」,我认,但较真的人多了,硬编码 4 GB 缓存上限这种事才会少一点。