LSUnusedResources:iOS/macOS开发者的资源清理神器
痛点:项目臃肿的隐形问题
你是否曾遇到过这样的情况:项目编译包体积越来越大,启动速度越来越慢,但就是找不到问题所在?经过仔细排查,发现项目中存在大量未被使用的图片、资源文件,它们像"冗余文件"一样占据着宝贵的存储空间,拖慢编译速度,增加包体积。
传统的解决方案要么效率低下,要么准确性堪忧。手动检查成千上万个资源文件几乎不可能,而现有的工具要么速度慢如蜗牛,要么识别率不高,经常误报漏报。
LSUnusedResources:专业级资源清理解决方案
LSUnusedResources 是一款专为 Xcode 项目设计的 Mac 应用程序,它能够智能识别项目中未使用的图片和资源文件。相比其他类似工具,它在性能和准确性方面都有显著提升。
核心特性对比
| 特性 | LSUnusedResources | 传统工具 |
|---|---|---|
| 搜索速度 | ⚡️ 极快(优化算法) | 🐢 缓慢 |
| 准确性 | 🎯 高精度(智能模式匹配) | ❓ 经常误报 |
| 相似名称识别 | ✅ 支持(正则表达式) | ❌ 不支持 |
| 多格式支持 | 📁 全面(见下文) | ⚠️ 有限 |
| 用户体验 | 🎨 图形界面 | ⌨️ 命令行 |
支持的文件类型
资源文件格式:
png,jpg,jpeg,gif标准图片格式imageset(Assets.xcassets)launchimage(启动图)appiconset(应用图标)- 其他 bundle 资源
代码文件格式:
h,m,mm(Objective-C/C++)swift(Swift语言)xib,storyboard(界面文件)strings(本地化文件)c,cpp(C/C++文件)html,js,json,css(Web相关)
技术实现原理
算法流程图
flowchart TD
A[选择项目目录] --> B[扫描资源文件]
B --> C[正则匹配代码引用]
C --> D[智能排除已使用资源]
D --> E[生成未使用资源列表]
E --> F[可视化展示结果]
核心算法解析
LSUnusedResources 采用双阶段检测机制:
-
资源文件扫描阶段
// 获取项目中所有资源文件 - (void)startWithProjectPath:(NSString *)projectPath excludeFolders:(NSArray *)excludeFolders resourceSuffixs:(NSArray *)resourceSuffixs; -
代码引用分析阶段
// 使用正则表达式匹配代码中的资源引用 - (NSSet *)getMatchStringWithContent:(NSString *)content pattern:(NSString*)pattern groupIndex:(NSInteger)index;
智能相似名称识别
这是 LSUnusedResources 的核心功能。对于动态生成的资源名称,工具能够智能识别:
// 示例:动态拼接资源名称
NSInteger index = random() % 4;
UIImage *img0 = [UIImage imageNamed:[NSString stringWithFormat:@"icon_tag_%d", index]];
// 工具会识别以下资源为已使用:
// icon_tag_0.png, icon_tag_1.png, icon_tag_2.png, icon_tag_3.png
识别算法基于正则表达式模式:([-_]?\d+),能够处理多种命名约定:
icon_tag_1.png→ 识别模式:icon_tag_icon-title-2.png→ 识别模式:icon-title-icontest3.png→ 识别模式:icontest
使用指南
快速开始四步曲
-
下载安装
# 从发布页面下载最新版本 wget https://gitcode.com/gh_mirrors/ls/LSUnusedResources/raw/master/Release/LSUnusedResources.app.zip unzip LSUnusedResources.app.zip -
选择项目目录
- 点击
Browse...按钮 - 选择你的 Xcode 项目根目录
- 点击
-
开始扫描
- 点击
Search按钮启动扫描 - 等待扫描完成(通常只需几秒到几分钟)
- 点击
-
分析结果
- 查看未使用资源列表
- 使用 "Ignore similar name" 选项优化结果
高级配置选项
// 自定义排除目录
NSArray *excludeFolders = @[@"Pods", @"DerivedData", @"Carthage"];
// 自定义资源后缀
NSArray *resourceSuffixs = @[@"png", @"jpg", @"jpeg", @"gif", @"bundle"];
// 自定义文件类型模式
NSArray *resourcePatterns = @[
@{@"PatternEnable": @1, @"PatternSuffix": @"h", @"PatternRegex": @"([a-zA-Z0-9_-]*)\\.(png|gif|jpg)", @"PatternGroupIndex": @1}
];
实战案例
案例一:大型电商应用优化
问题: 一个拥有 3000+ 资源文件的大型电商应用,包体积超过 200MB。
使用 LSUnusedResources 后:
- 发现 487 个未使用图片资源
- 清理后包体积减少 45MB
- 编译时间缩短 30%
案例二:跨平台项目整合
问题: 多个团队协作的项目,资源管理混乱,存在大量重复和未使用文件。
解决方案:
- 使用 LSUnusedResources 进行全量扫描
- 建立资源使用规范
- 定期执行资源清理任务
最佳实践
开发流程集成
timeline
title 资源管理开发流程
section 开发阶段
新功能开发 : 添加所需资源
代码提交前 : 运行LSUnusedResources检查
section 测试阶段
CI/CD集成 : 自动资源检查
测试报告 : 包含资源使用情况
section 发布阶段
最终检查 : 确认无未使用资源
包体积优化 : 移除冗余文件
团队协作规范
-
命名规范
- 使用有意义的资源名称
- 避免使用数字后缀(除非是序列资源)
-
定期清理
- 每月执行一次全面扫描
- 每个版本发布前进行检查
-
文档记录
- 记录资源使用情况
- 建立资源deprecation机制
性能优势
基准测试对比
| 项目规模 | LSUnusedResources | 其他工具 |
|---|---|---|
| 小型项目(100文件) | < 1秒 | 2-3秒 |
| 中型项目(1000文件) | 3-5秒 | 15-20秒 |
| 大型项目(5000+文件) | 10-30秒 | 2-5分钟 |
内存使用优化
LSUnusedResources 采用流式处理和内存映射技术,即使处理超大型项目也能保持低内存占用:
- 峰值内存使用:< 50MB
- 磁盘IO优化:最小化文件读取次数
- 多线程处理:充分利用多核性能
技术深度解析
正则表达式引擎
工具内置了针对不同文件类型的优化正则模式:
// Objective-C代码模式
NSString *ojbcPattern = @"@\"(.*?)\"";
// XIB/Storyboard模式
NSString *xibPattern = @"image name=\"(.+?)\"";
// HTML模式
NSString *htmlPattern = @"img\\s+src=[\"\'](.*?)[\"\']";
// JSON模式
NSString *jsonPattern = @":\\s*\"(.*?)\"";
智能缓存机制
classDiagram
class ResourceCache {
-NSDictionary *fileHashCache
-NSDictionary *patternCache
+getFileHash(path)
+getPatternForSuffix(suffix)
+clearCache()
}
class ResourceScanner {
-ResourceCache *cache
+scanProject(path)
+getUnusedResources()
}
ResourceScanner --> ResourceCache
总结
LSUnusedResources 不仅仅是一个工具,更是 iOS/macOS 开发工作流中的重要环节。它解决了长期困扰开发者的资源管理难题,提供了:
- 🚀 极致的性能体验 - 相比传统工具速度提升5-10倍
- 🎯 精准的识别能力 - 智能相似名称识别,减少误报
- 🛠️ 完善的生态集成 - 支持各种开发场景和文件类型
- 📊 直观的结果展示 - 图形化界面,操作简单
无论是个人开发者还是大型团队,LSUnusedResources 都能帮助你保持项目的整洁和高效,让资源管理不再是负担,而是开发流程的自然组成部分。
立即尝试 LSUnusedResources,让你的项目轻装上阵!
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
ruoyi-plus-soybeanRuoYi-Plus-Soybean 是一个现代化的企业级多租户管理系统,它结合了 RuoYi-Vue-Plus 的强大后端功能和 Soybean Admin 的现代化前端特性,为开发者提供了完整的企业管理解决方案。Vue06- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00