返回

使用Ruby快速搜索项目中的无用图片

IOS

在软件开发过程中,管理图片资源是一件令人头疼的事情。随着项目不断发展,图片资源也会不断增加,其中不乏一些被遗弃的无用图片。这些无用图片不仅会占用项目空间,还会影响编译速度。

针对这一痛点,本文将介绍如何使用Ruby编写一个脚本,快速搜索项目中的无用图片。该脚本基于以下原理:查找项目中存放图片资源的文件夹,获取图片的名字,然后遍历项目,查找是否存在引用这些图片的文件。

步骤

1. 查找图片资源文件夹

assets_path = File.join(project_path, "*.xcassets")

2. 获取图片名称

image_names = Dir.glob(File.join(assets_path, "**/*.png"))

3. 遍历项目查找引用

used_image_names = []

Dir.glob("**/*.{h,m,swift}").each do |file|
  used_image_names += file.scan(/UIImage imageNamed: @"(.*?)"/).flatten
end

4. 找出无用图片

unused_image_names = image_names - used_image_names

代码实现

require "fileutils"

def find_unused_images(project_path)
  assets_path = File.join(project_path, "*.xcassets")

  image_names = Dir.glob(File.join(assets_path, "**/*.png"))

  used_image_names = []

  Dir.glob("**/*.{h,m,swift}").each do |file|
    used_image_names += file.scan(/UIImage imageNamed: @"(.*?)"/).flatten
  end

  unused_image_names = image_names - used_image_names

  unused_image_names.each do |image_name|
    image_path = File.join(assets_path, image_name)
    FileUtils.rm(image_path)
  end

  puts "已移除 #{unused_image_names.count} 张无用图片。"
end

使用

将代码复制到一个Ruby脚本中,并传入项目路径作为参数:

ruby find_unused_images.rb ~/Projects/MyProject

脚本将自动查找并删除未被使用的图片。