ผมได้สร้างสคริปต์หลามเพื่อระบุภาพที่ไม่ได้ใช้: 'unused_assets.py' @ สรุปสาระสำคัญ สามารถใช้งานได้ดังนี้:
python3 unused_assets.py '/Users/DevK/MyProject' '/Users/DevK/MyProject/MyProject/Assets/Assets.xcassets'
กฎบางประการในการใช้สคริปต์มีดังนี้
- สิ่งสำคัญคือต้องส่งเส้นทางโฟลเดอร์โครงการเป็นอาร์กิวเมนต์แรกเส้นทางโฟลเดอร์สินทรัพย์เป็นอาร์กิวเมนต์ที่สอง
- สันนิษฐานว่ารูปภาพทั้งหมดจะถูกเก็บรักษาไว้ในโฟลเดอร์ Assets.xcassets และใช้ภายในไฟล์ที่รวดเร็วหรือภายในสตอรี่บอร์ด
ข้อ จำกัด ในเวอร์ชันแรก:
- ไม่ทำงานกับไฟล์ c วัตถุประสงค์
ฉันจะพยายามปรับปรุงอยู่ตลอดเวลาตามข้อเสนอแนะอย่างไรก็ตามเวอร์ชันแรกน่าจะดีที่สุด
โปรดดูรหัสด้านล่าง รหัสควรจะอธิบายตนเองที่ผมได้เพิ่มความคิดเห็นที่เหมาะสมกับแต่ละขั้นตอนที่สำคัญ
"""
@author = "Devarshi Kulshreshtha"
@copyright = "Copyright 2020, Devarshi Kulshreshtha"
@license = "GPL"
@version = "1.0.1"
@contact = "kulshreshtha.devarshi@gmail.com"
"""
import sys
import glob
from pathlib import Path
import mmap
import os
import time
start = time.time()
arguments = sys.argv
projectFolderPath = arguments[1].replace("\\", "")
assetsPath = arguments[2].replace("\\", "")
print(f"assetsPath: {assetsPath}")
print(f"projectFolderPath: {projectFolderPath}")
assetsSearchablePath = assetsPath + '/**/*.imageset'
print(f"assetsSearchablePath: {assetsSearchablePath}")
imagesNameCountDict = {}
for imagesetPath in glob.glob(assetsSearchablePath, recursive=True):
encodedImageName = str.encode(Path(imagesetPath).stem)
imagesNameCountDict[encodedImageName] = 0
print("Names of all assets obtained")
swiftFilesSearchablePath = projectFolderPath + '/**/*.swift'
print(f"swiftFilesSearchablePath: {swiftFilesSearchablePath}")
for swiftFilePath in glob.glob(swiftFilesSearchablePath, recursive=True):
with open(swiftFilePath, 'rb', 0) as file, \
mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s:
for encodedImageName in imagesNameCountDict:
if s.find(encodedImageName) != -1:
imagesNameCountDict[encodedImageName] += 1
print("Images searched in all swift files!")
storyboardsSearchablePath = projectFolderPath + '/**/*.storyboard'
print(f"storyboardsSearchablePath: {storyboardsSearchablePath}")
for storyboardPath in glob.glob(storyboardsSearchablePath, recursive=True):
with open(storyboardPath, 'rb', 0) as file, \
mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s:
for encodedImageName in imagesNameCountDict:
if s.find(encodedImageName) != -1:
imagesNameCountDict[encodedImageName] += 1
print("Images searched in all storyboard files!")
print("Here is the list of unused assets:")
print('\n'.join({encodedImageName.decode("utf-8", "strict") for encodedImageName, occurrenceCount in imagesNameCountDict.items() if occurrenceCount == 0}))
print(f"Done in {time.time() - start} seconds!")