অব্যবহৃত চিত্রগুলি সনাক্ত করতে আমি একটি অজগর স্ক্রিপ্ট তৈরি করেছি: 'unused_assets.py' @ গিস্ট । এটি এর মতো ব্যবহার করা যেতে পারে:
python3 unused_assets.py '/Users/DevK/MyProject' '/Users/DevK/MyProject/MyProject/Assets/Assets.xcassets'
স্ক্রিপ্টটি ব্যবহারের জন্য এখানে কয়েকটি বিধি রয়েছে:
- প্রথম আর্গুমেন্ট হিসাবে প্রকল্প ফোল্ডার পথটি পাস করা গুরুত্বপূর্ণ, দ্বিতীয় আর্গুমেন্ট হিসাবে সম্পদ ফোল্ডার পাথ
- ধারণা করা হয় যে সমস্ত চিত্র Assets.xcassets ফোল্ডারে রক্ষণাবেক্ষণ করা হয় এবং তা সুইফ্ট ফাইলের মধ্যে বা স্টোরিবোর্ডের মধ্যে ব্যবহার করা হয়
প্রথম সংস্করণে সীমাবদ্ধতা:
- বস্তুনিষ্ঠ সি ফাইলগুলির জন্য কাজ করে না
আমি সময়ের সাথে এটি উন্নত করার চেষ্টা করব, প্রতিক্রিয়ার ভিত্তিতে, তবে প্রথম সংস্করণটি বেশিরভাগের জন্য ভাল হওয়া উচিত।
কোড নীচে সন্ধান করুন। কোডটি স্ব-বর্ণনামূলক হওয়া উচিত কারণ আমি প্রতিটি গুরুত্বপূর্ণ পদক্ষেপে যথাযথ মন্তব্য যুক্ত করেছি ।
"""
@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!")