十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Filza 手动修改 iOS 系统文件:plist、权限与回滚实战

Filza 手动修改 iOS 系统文件:plist、权限与回滚实战 1. 先弄明白 Filza 这个工具到底站在哪个位置Filza 在圈子里的地位很特殊它不是那种装完就能玩的应用而是一把打开系统文件系统的钥匙。你把它装到设备上第一眼看到的是一个朴素到有点寒酸的文件列表——目录树、文件大小、修改时间跟桌面上那些花里胡哨的 App 完全是两个世界的东西。但就是这个界面能让你看到普通应用一辈子都看不到的路径系统的偏好设置文件、应用沙盒里的数据库、主题资源包、字体缓存甚至开机加载的守护进程配置。所以聊 Filza 的手动修改技巧本质上聊的是三件事你知不知道该改哪个文件、你知不知道用什么格式改、你知不知道改完之后怎么让它生效。这三件事里任何一环断了结果往往不是没效果而是白苹果或者无限重启。我在早期折腾的时候就因为随手改了一个 plist 里的布尔值重启之后直接卡在引导阶段最后只能重刷系统。那一次的教训让我明白Filza 的难点从来不是操作而是判断。这篇文章面向的是已经能让 Filza 正常读写系统目录、但每次动手都心里发虚的朋友。如果你只是想删删缓存、看看文件结构那随便翻翻就能满足但如果你想真正掌握手动改系统这件事下面这些内容建议一句一句看。全文围绕 Filza 的实际操作展开涉及目录认知、权限换算、plist 编辑、资源替换、备份回滚和排错思路所有步骤都是我在自己的设备上反复验证过的路径和参数。CYDIAME 这个圈子里的老玩家应该都清楚这类工具的教学最忌讳照抄命令所以我尽量把每一步背后的原因说透让你在遇到新场景时能自己推。1.1 它是文件管理器但不是普通意义上的文件管理器普通文件管理器活在应用沙盒里能看的只有自己那一亩三分地。Filza 装在有系统读写权限的环境下之后进程是以更高权限运行的这就意味着它能穿透沙盒边界直接访问/var、/System、/Library这些核心区域。这个差别用生活场景类比就是普通 App 是住在小区的某套房子里只能在自家客厅厨房转悠Filza 拿到的是物业总钥匙能进配电房、水泵间、监控室。钥匙越大闯祸的代价也越大——配电房里拉错一个闸整栋楼都黑。具体到操作层面Filza 有几个能力是它真正的价值所在根目录级浏览从/开始完整遍历整个文件系统包括隐藏目录和.开头的配置文件。文本与结构化编辑内置编辑器能直接打开 plist、conf、json、xmlplist 还能以树状形式展开比纯文本改起来安全得多。属性修改每个文件都能查看和修改权限位读/写/执行、所有者、所属组这是手动改系统绕不开的一环。压缩解包zip、tar、7z 都能处理替换资源包的时候特别方便。文件搜索按名称、按内容、按大小筛选找那些藏在深层目录里的配置文件时能省很多时间。临时文件服务可以起一个本地访问入口让同一网络里的电脑浏览器直接读写设备文件批量传素材时比数据线来回插拔舒服。1.2 为什么新手第一次动手就容易出事出事的根源基本集中在两个认知盲区上。第一个盲区是不知道文件格式有讲究。iOS 上的 plist 有两种形态XML 文本格式和二进制格式。用文本编辑器硬改二进制 plist编辑器会把不可见字节当成乱码处理保存之后文件结构就彻底毁了。Filza 的 plist 编辑器能识别两种格式并自动转换但前提是你得用对入口——长按文件选择以属性列表方式打开而不是双击之后选文本编辑。第二个盲区是不知道权限和所有权会跟着变。文件复制粘贴到新位置之后权限位和所有者经常被打回默认值。一个本该属于 root、权限 755 的可执行文件变成 mobile 所有、权限 644系统加载的时候就会直接跳过它表现出来就是我明明改对了文件但完全没反应。这种问题最难查因为文件内容明明是对的肉眼根本看不出毛病。提醒第一次操作之前先把要改的文件原样复制一份到/var/mobile/Documents/下面命名成带日期的备份。这个习惯看着笨但能救你无数次。2. 动手前的环境确认与目录地图2.1 环境确认先确认你的写入权限是真的很多人以为 Filza 装上了就等于有了全部权限其实不对。Filza 在不同环境下拿到的权限差别很大有些环境里它只能读不能写系统分区有些环境里根分区是只读挂载的你点了保存界面上显示已保存实际上磁盘上根本没变。确认方法很直接找一个你确定要改的文件改完保存退出编辑器再重新打开看内容变没变。如果变回去了说明写入被拦住了。另一种情况是保存时直接报权限不足这种就是进程权限不够需要换个安装来源或者调整运行方式。还有一种容易被忽略的情况根分区挂载状态。部分环境下/是只读的能写的是/var和用户数据区。如果你要改的目标在/System或者/Applications下面就得先确认根分区可写。这个判断建议在动手前就做好别改到一半才发现写不进去。版本选择上我的建议是优先选与你系统版本匹配的版本别盲目追新。新版本可能修了 bug也可能改了某些路径的处理逻辑尤其是涉及 plist 编辑器的部分改动过一次保存策略之后不少老教程的步骤就不适用了。2.2 权限体系mobile、root、wheel 到底谁是谁iOS 继承了类 Unix 的权限模型理解它的最短路径就是记住三组数字。第一组是用户身份。root的 UID 是 0系统里的超级用户什么都能干mobile的 UID 是 501普通应用进程一般以这个身份跑wheel是组GID 为 0通常作为管理员组存在。你在 Filza 属性页里看到的所有者和所属组填的就是这三者。第二组是权限位。它分三段所有者权限、同组用户权限、其他用户权限。每段用三个字符表示r是读、w是写、x是执行没这个权限就是-。比如rwxr-xr-x表示所有者可读可写可执行其他人只能读和执行。第三组是数字换算。这是手动改系统必须会的计算r4、w2、x1每段三个字符相加得到一个数字。rwx就是 4217r-x是 4015r--是 4---是 0。所以rwxr-xr-x换算成数字就是755rw-r--r--是644。我把常用的几组值整理成表改权限的时候直接对号入座权限数字字符表示典型用途755rwxr-xr-x可执行文件、目录、脚本644rw-r--r--普通配置文件、plist、图片700rwx------私有目录、敏感数据目录600rw-------私有配置文件777rwxrwxrwx一般不推荐仅临时排错用有个细节值得单独说目录的x权限含义和文件不一样。对文件来说x是能不能运行对目录来说x是能不能进入和遍历。一个目录如果没有x权限哪怕有r权限你也只能看到文件名点不进去也读不到内容。我第一次遇到这个坑的时候盯着一个明明可读却打不开的目录查了半天最后才发现是权限位少了一个x。2.3 iOS 目录地图哪些能碰哪些坚决别碰记住几个高频路径比记一堆命令有用得多。用户数据区/var/mobile/是普通应用的数据老家相对安全出问题最多是某个 App 数据错乱删掉重装即可恢复。/var/mobile/Library/Preferences/下面放的是各个应用的偏好设置 plist很多改配置的需求都落在这里。应用沙盒/var/containers/Bundle/Application/是应用本体可执行文件和资源/var/mobile/Containers/Data/Application/是应用运行时数据。这两个目录下面都是随机字符串命名的文件夹找具体应用的时候需要用搜索或者看文件夹里的Info.plist来确认身份。系统资源区/System/Library/下面全是系统级的东西字体、框架、系统应用资源、声音文件都在这里。这个区域是高风险区改错一个文件可能直接导致开机失败。我的原则是除非有明确的、验证过的教程指向具体文件否则不主动在这里做探索性修改。主题与插件区/Library/Themes/是主题资源常见位置替换图标、改状态栏样式这类需求通常在这里动手。共享文档区/var/mobile/Documents/和/var/mobile/Media/是相对自由的空间适合放备份、放素材、做中转。注意/System和/var上层的部分目录属于系统启动关键路径改动它们之前请务必确认你有完整的回滚手段。没有备份就不要动手这是底线。3. 手动修改的四类高频场景实操3.1 plist 编辑改配置的主力战场plist 是 iOS 上最普遍的结构化配置文件改配置、开关功能、改默认值绝大多数需求最终都落到它身上。第一步是确定格式。在 Filza 里找到目标文件后长按看菜单里有没有以属性列表方式打开。有的话说明它被识别为 plist直接用这个方式打开最安全如果没有那它可能是二进制格式但未被识别这时候先复制一份出来用编辑器以文本方式打开看看头几行——如果是?xml version1.0开头就是 XML 格式可以放心用文本编辑器改如果是一堆看不懂的方块和乱码那就是二进制格式别硬改。第二步是定位键值。plist 本质是键值对加嵌套字典和数组。树状视图里你会看到Key、Type、Value三列找到你要改的那个键看清它的 Type 是什么Boolean只能填true或falseNumber只能填数字String才能填文本。把 String 类型的值填进 Boolean 字段保存的时候可能不报错但读取方解析失败效果就是功能异常或者直接崩溃。第三步也是最重要的一步改完让它生效。plist 修改之后对应的进程通常不会自动重新读取需要重启对应进程或者重启系统。轻量的做法是重启桌面重一点的做法是重启设备。这里有个经验改完先别急着重启先退出编辑器再重新打开确认保存成功确认无误再重启能省掉一轮重启发现没改上的无效等待。几个实操注意事项一次只改一个键值改完立即验证。批量修改出问题时你根本不知道是哪一个导致的。不要删除不认识的键。有些键看起来没用实际上是版本兼容性标记删了可能引发旧版本逻辑分支。数组类型的值不要手动调整顺序除非你明确知道顺序有意义。3.2 资源替换图标、音效、字体怎么换才不出事资源替换的出错率比 plist 编辑低因为大部分资源是图片和音频格式对了基本就能生效。但它有一个隐藏门槛尺寸和命名规范。图片资源方面iOS 的图标资源通常成套存在同一张图有多个尺寸变体文件名后面带着2x、3x这类后缀表示不同倍率。替换的时候如果只替换了一张在高倍率屏幕上会看到模糊或者拉伸。正确做法是先看清楚原文件夹里有哪些变体然后按同样的尺寸和命名一一对应替换一张都不能少。音效资源相对简单但要注意格式。系统音效一般是特定编码的音频文件直接放一个普通格式进去可能不被识别。稳妥做法是先用 Filza 的播放功能确认原文件能播然后新文件尽量保持同样的编码参数。字体替换是这三者里最需要谨慎的。替换系统字体之后如果字体文件本身有问题输入法、状态栏、部分应用界面都可能出现方块或者错位。而且字体影响范围是全局的一旦出问题很难局部回退。提示替换系统字体之前一定先把原字体文件完整备份到/var/mobile/Documents/。字体出问题之后恢复原文件比重刷系统快得多这一步省不得。3.3 权限与所有权修正让改动真正被系统接受前面提过复制粘贴会让权限和所有者变回默认值所以任何复制过去覆盖的操作做完之后都要检查一遍属性。Filza 里查看和修改属性的入口是长按文件选属性或者点进文件详情页找权限相关的栏目。你会看到三组权限的开关以及所有者和所属组两个输入框。修改的判断标准很简单让新文件的属性和它所在目录里同类文件保持一致。比如你要替换/System/Library/下面的某个文件就去看同一个目录里其他文件的属性和权限是什么照着填。这比死记这个文件该是 755靠谱得多因为不同系统版本、不同分区的规范确实会有差异。有一个场景特别容易踩坑目录权限。你替换了一整个文件夹文件夹里每个文件都检查了但文件夹本身权限不对导致系统遍历不进去。所以替换目录之后目录本身和目录内的文件都要检查一个都不能漏。实际操作时我一般按这个顺序走先看目标目录里一个正常文件的权限作为基准。把新文件的权限改到一致。把新文件的所有者和所属组改到一致。退出属性页重新进一次确认改动被保存下来了。再去重启对应进程或者重启设备。第 4 步看着多余其实很有必要。权限修改偶尔会因为进程权限不足而静默失败界面显示改了磁盘上没变。重新进一次确认能避免后面无意义的排查。3.4 备份与回滚给自己留一条退路前面反复提备份这里说清楚怎么做才有效。备份不是简单复制一份。有效的备份要满足三个条件位置安全、属性一致、能找得到。位置安全备份别放在同一个目录下。你改的那个目录如果被整体替换或者删除放在旁边的备份一起没了。放到/var/mobile/Documents/backup_日期/这种独立位置比较稳。属性一致只用复制粘贴做的备份属性是默认值。回滚的时候你还需要重新把权限和所有者改回原样。更稳的办法是先记录下原文件的属性和权限截图或者手记回滚时照着填。能找得到备份文件名要能一眼看出是什么、什么时候备份的。com.apple.springboard.plist.bak_0415这种命名比备份1有用一百倍。回滚的流程就是备份的反向操作把备份文件复制回原位置然后把权限和所有者改回原值最后重启对应进程。这里有一个容易忽略的点回滚也要重启才生效。有些人把文件放回去了发现症状没消失就以为回滚失败其实只是进程还在用旧的内存副本。如果你要做的改动比较大比如替换一整套资源建议在动手前用 Filza 的压缩功能把整个目录打包成一个压缩包放在安全位置。出问题的时候解包覆盖比逐个文件恢复快得多也不容易漏。4. 常见问题排查与踩坑实录4.1 问题速查表把高频问题整理成一张表遇到情况先对号入座能省很多瞎试的时间。现象最可能的原因排查方向保存成功但重启后没变化保存到了错误位置或目标进程用了缓存副本确认文件路径是否正确退出编辑器重开确认内容修改后应用闪退plist 格式或类型错误用属性列表方式重新打开检查键值 Type修改完全没反应权限或所有者不对对照同目录正常文件的属性和权限保存时报权限不足进程权限不够或分区只读确认写入权限和分区挂载状态开机卡住或者无法进入系统改了启动关键路径的文件进入恢复模式回滚或重新刷入系统替换的图片显示模糊只替换了部分尺寸变体检查目录内所有2x、3x变体字体替换后出现方块字体文件不兼容恢复原字体文件4.2 三个典型排查案例案例一改了偏好设置重启之后完全没变化。这件事我遇到过不止一次。第一次排查了很久以为是文件路径找错了反复核对之后确认路径没问题。后来发现原因是这个应用的偏好设置被系统的偏好服务缓存了光重启应用没用需要重启设备让缓存重新加载。第二次遇到类似情况原因又不一样改动的是应用沙盒内的偏好文件但应用实际读取的是另一个位置的同名文件不同系统版本路径有调整。所以排查顺序建议是先确认路径再确认保存最后才怀疑缓存。案例二替换了图标桌面上部分图标正常部分图标还是旧的。这个问题出在图标缓存上。系统的图标缓存不会因为文件替换立即刷新需要重启桌面。但即使重启桌面某些位置的缓存依然顽固最后还是重启设备才彻底生效。顺带说一句如果重启之后还有个别图标没变检查是不是漏了某个尺寸变体——这种现象和缓存的区别是缓存问题是全部旧漏文件问题是个别旧。案例三权限改成 755 之后文件依然不生效。这个案例最能说明属性检查这一环不能省。当时我把权限改成 755反复确认了好几遍还是不行。最后发现所有者不对——文件是 mobile 所有而同目录其他文件都是 root 所有。改成 root 之后立刻正常。所以权限和所有权必须一起看只看权限位是不够的。4.3 三条我踩过坑之后不敢忘的规矩第一条不认识的路径不动手。每次看到一个陌生目录我都会先花几分钟搞清楚它属于哪一块用户数据、系统资源还是启动配置确认风险等级之后再决定要不要碰。这个习惯看起来拖慢了效率实际上帮我避开了绝大多数灾难性操作。第二条一次只改一个变量。想同时改配置、换图标、调权限那就分三次做每次做完验证一遍。混在一起改出了问题根本没法定位是哪一步的锅。我早期图省事把几个改动一次性做完结果出问题之后花了两个小时才定位到是其中一处 plist 的类型写错了。第三条动手前先问自己回滚要几步。如果需要五步以上的操作才能回滚那说明改动幅度太大了应该拆小一点或者先做个更彻底的备份。这个自问自答的环节让我好几次在最后一刻放弃了冲动操作。最后分享一个日常用得很顺的小技巧在/var/mobile/Documents/下建一个固定的工作目录里面按待改文件备份、素材、回滚包分三个子文件夹。每次动手之前把要改的文件复制进待改文件备份并加上日期改动过程中需要用的素材放素材大批量改动前打的压缩包放回滚包。一个目录结构固定下来之后回滚的时候你永远知道东西在哪不会出现备份了但找不到的尴尬。这套习惯坚持了两年多救我的次数大概有七八次值。
返回列表