Kullanılmayan görüntüleri tanımlamak için bir python betiği oluşturdum: 'unused_assets.py' @ gist . Şu şekilde kullanılabilir:
python3 unused_assets.py '/Users/DevK/MyProject' '/Users/DevK/MyProject/MyProject/Assets/Assets.xcassets'
Komut dosyasını kullanmanın birkaç kuralı:
- İlk bağımsız değişken olarak proje klasörü yolunu, ikinci bağımsız değişken olarak varlıklar klasörü yolunu geçirmek önemlidir.
- Tüm görüntülerin Assets.xcassets klasöründe tutulduğu ve ya hızlı dosyalarda ya da film şeridi içinde kullanıldığı varsayılır.
İlk versiyondaki sınırlamalar:
- Objektif c dosyaları için çalışmıyor
Geri bildirimlere dayanarak zaman içinde geliştirmeye çalışacağım, ancak ilk sürüm çoğu için iyi olmalı.
Lütfen kodu aşağıda bulabilirsiniz. Her önemli adıma uygun yorumlar eklediğim için kod kendi kendini açıklayıcı olmalıdır .
"""
@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!")