FengNiao

是什么

FengNiao 是一个简单的命令行工具,用于删除 Xcode 项目中未使用的图像资源文件。

如何

安装

Mint

Mint 是一个安装和运行 Swift 命令行工具包的工具。请确保您已安装 Xcode,然后

> brew install mint
> mint install onevcat/fengniao

从源码编译

> git clone https://github.com/onevcat/FengNiao.git
> cd FengNiao
> swift build -c release

# Then copy the executable to your PATH, such as `/usr/local/bin`
> sudo cp .build/release/FengNiao /usr/local/bin/fengniao

FengNiao 应该被编译、测试并安装到 /usr/local/bin 目录。

用法

只需导航到您的项目文件夹,然后

> fengniao

它将扫描当前文件夹及其所有子文件夹以查找未使用的图像,然后询问您是否要删除它们。在删除图像之前,请确保您已备份或使用版本控制系统;这将是一个不可恢复的操作。

FengNiao 支持一些参数。您可以通过

> fengniao --help

  -p, --project:
      Root path of your Xcode project. Default is current folder.
  --force:
      Delete the found unused files without asking.
  -e, --exclude:
      Exclude paths from search.
  -r, --resource-extensions:
      Resource file extensions need to be searched. Default is 'imageset jpg png gif pdf'
  -f, --file-extensions:
      In which types of files we should search for resource usage. Default is 'm mm swift xib storyboard'
  --skip-proj-reference:
      Skip the Project file (.pbxproj) reference cleaning.
      By skipping it, the project file will be left untouched. 
      You may want to skip ths step if you are trying to build multiple projects with dependency and keep .pbxproj unchanged while compiling.
  --version:
      Print version.
  -h, --help:
      Print this help message.

在项目中的更日常用法可以是

> fengniao --project . --exclude Carthage Pods

这将在当前文件夹中搜索,但跳过 CarthagePods 文件夹,其中可能包含一些您不想触碰的第三方资源。

与 Xcode 构建阶段一起使用

将 FengNiao 集成到您的 Xcode 构建过程中很容易。通过这样做,您可以确保每次构建项目时都清理您的项目。

在 "Build Phases" 选项卡中添加一个 "Run Script" 阶段

然后将其拖到 "Copy Bundle Resources" 之上,编辑其内容如下

fengniao --exclude Carthage --force

建议排除像 Pods 或 Carthage 这样的供应商文件夹。由于您没有机会确认结果,因此还需要添加 --force 选项。

App 版本

FengNiao 的 GUI 应用程序版本也可用。您可以在 App 文件夹 下找到它。我们不提供预构建的二进制文件。如果需要,请自行构建。感谢 @ldakhoa 的贡献!

工作原理

  1. 在这些文件夹 ["imageset", "launchimage", "appiconset", "bundle"] 中提取资源文件名(默认文件类型:["imageset", "jpg", "png", "gif", "pdf"])。
  2. 使用正则表达式在文件中搜索所有字符串名称(默认文件类型:["m", "mm", "swift", "xib", "storyboard", "plist"])。
  3. 从资源文件中排除所有已使用的字符串名称,我们就得到所有未使用的资源文件。

许可证和信息

FengNiao 以 MIT 许可证开源。这个项目的名称来自中文词语 蜂鸟 (hummingbird),它是世界上最小的鸟。

如果您发现任何问题,请提交 issue。热烈欢迎 Pull Request,但我建议先讨论。

您也可以在 Twitter新浪微博 上关注和联系我。

学习创造

我在中国的一个直播平台上直播了创建这个工具的过程,作为一个实时编码会话。您可以在那里学习如何使用 Swift Package Manager 创建项目,如何在项目中应用面向协议编程 (POP),以及如何以 BDD 方式开发以及编写优秀的测试。

这是一个中文付费系列课程。如果您对此感兴趣,请查看并观看以下链接

现场编程 - 用 Swift 创建命令行工具 fengniao-cli