একটি এক্সকোড প্রকল্পে অব্যবহৃত চিত্রগুলি কীভাবে সন্ধান করবেন?


97

এক্সকোড প্রকল্পে অব্যবহৃত চিত্রগুলি খুঁজে পেতে কারও কি এক-লাইন আছে? (ধরে নিচ্ছি যে সমস্ত ফাইল কোডে বা প্রকল্পের ফাইলগুলিতে নাম দ্বারা উল্লেখ করা হয় - কোনও কোড উত্পন্ন ফাইলের নাম নয়))

এই ফাইলগুলির একটি প্রকল্পের জীবন গড়ার প্রবণতা রয়েছে এবং কোনও প্রদত্ত পিএনজি মুছে ফেলা নিরাপদ কিনা তা বলা শক্ত।


4
এটি XCode4 এর জন্যও কাজ করে? এক্সকোড 4-এ সিএমডি-অপ্ট-এ "ফাইল যুক্ত করুন" ডায়ালগটি খোলার জন্য মনে হচ্ছে।
রাজাবন্যা সুব্রামণ্যিয়ান

উত্তর:


61

যে প্রকল্পগুলিতে অন্তর্ভুক্ত নেই এমন ফাইলগুলির জন্য, তবে কেবল ফোল্ডারে হ্যাং-আউট, আপনি টিপতে পারেন

cmd ⌘+ alt ⌥+A

এবং তাদের ধূসর করা হবে না।

ফাইলগুলির জন্য যা xib বা কোডে রেফারেন্স করা হয় না, এর মতো কিছু কাজ করতে পারে:

#!/bin/sh
PROJ=`find . -name '*.xib' -o -name '*.[mh]'`

find . -iname '*.png' | while read png
do
    name=`basename $png`
    if ! grep -qhs "$name" "$PROJ"; then
        echo "$png is not referenced"
    fi
done

6
যদি আপনার ত্রুটির মুখোমুখি হয়: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই, সম্ভবত ফাইল পথের ফাঁকা জায়গাগুলির কারণে এটি। উদ্ধৃতিগুলি গ্রেপ লাইনে যুক্ত করা দরকার, তাই এটি যায়: যদি! grep -qhs "$ নাম" "$ PROJ";
লুকাশজ

8
একটি দৃশ্য যেখানে এটি কার্যকর হয় না তা হ'ল আমরা যখন তাদের নামগুলি তৈরির পরে প্রোগ্রামালিমে চিত্রগুলি লোড করতে পারি। আর্ম 1.png, আর্ম 2.png এর মতো .... আর্ম 22.png। লুপ এবং লোডের জন্য আমি তাদের নামগুলি তৈরি করতে পারি। উদাহরণস্বরূপ গেমস
রাজাভন্যা সুব্রামণিয়ান

আপনার কাছে @ 2x দিয়ে রেটিনা প্রদর্শনের জন্য চিত্র থাকলে তারা অব্যবহৃত হিসাবে তালিকাভুক্ত করবেন। আপনি অতিরিক্ত একটি বিবৃতি যোগ করে এ থেকে মুক্তি পেতে পারেন: যদি [["$ নাম"! = @ 2x ]]; তারপরে
স্টেন

4
এক্সকোড ৫-এ সিএমডি + অপ্ট + এ আর কাজ করার দরকার নেই বলে মনে হচ্ছে এটি কী ট্রিগার করবে?
পাওয়ারটাক

cmd কমান্ড + + অপ্ট + একটি Images.xcassets ফাইল আউট ধূসর যদিও তারা প্রকল্পের :( একটি অংশ বলে মনে হচ্ছে না
tettoffensive

80

এটি আরও দৃ solution় সমাধান - এটি কোনও পাঠ্য ফাইলে বেস নামের কোনও রেফারেন্স পরীক্ষা করে। উপরের সমাধানগুলিতে স্টোরিবোর্ড ফাইলগুলি অন্তর্ভুক্ত নয় এমন নোটগুলি (সম্পূর্ণরূপে বোধগম্য, সেগুলি তাদের উপস্থিত ছিল না) Note

আক এটিকে খুব দ্রুত করে তোলে তবে এই স্ক্রিপ্টটি ঘন ঘন চলতে পারে তবে কিছু স্পষ্ট অপ্টিমাইজেশন রয়েছে। উদাহরণস্বরূপ, আপনার কাছে রেটিনা / নন-রেটিনা উভয় সম্পদ থাকলে এই কোডটি প্রতিটি বেসনামকে দুবার পরীক্ষা করে।

#!/bin/bash

for i in `find . -name "*.png" -o -name "*.jpg"`; do 
    file=`basename -s .jpg "$i" | xargs basename -s .png | xargs basename -s @2x`
    result=`ack -i "$file"`
    if [ -z "$result" ]; then
        echo "$i"
    fi
done

# Ex: to remove from git
# for i in `./script/unused_images.sh`; do git rm "$i"; done

12
Homebrew ইনস্টল করুন এবং তারপরে একটি করুন brew install ack
মার্কো

4
ধন্যবাদ এই উত্তরটি ফাঁকা স্থান সহ ফাইল এবং ফোল্ডারগুলিও সঠিকভাবে পরিচালনা করে।
djskinner

4
@ জোহনি আপনাকে ফাইলটি এক্সিকিউটেবল ( chmod a+x FindUnusedImages.sh) তৈরি করতে হবে , তারপরে এটি বাশ থেকে অন্য কোনও প্রোগ্রামের মতো চালান./FindUnusedImages.sh
মাইক স্প্রেগ

4
আমি পিবিএক্সপ্রজ ফাইলগুলি উপেক্ষা করার জন্য একটি পরিবর্তন করেছি (এইভাবে এক্সকোড প্রকল্পে থাকা ফাইলগুলিকে উপেক্ষা করে, কিন্তু কোড বা নিবস / স্টোরিবোর্ডে ব্যবহৃত হয় না): result=`ack --ignore-file=match:/.\.pbxproj/ -i "$file"` এর জন্য এসিপি 2.0 এবং তার বেশি প্রয়োজন
মাইক স্প্রেগ

4
মিলানপাঞ্চল, আপনি স্ক্রিপ্টটি যে কোনও জায়গায় রাখতে পারেন, এবং আপনি কেবল ইমেজগুলির সন্ধানের জন্য রুট হিসাবে যে ডিরেক্টরিটি ব্যবহার করতে চান তা প্রয়োগ করে (যেমন আপনার প্রকল্পের মূল ফোল্ডার)। উদাহরণস্বরূপ আপনি এটি ~ / স্ক্রিপ্টে রাখতে পারেন এবং তারপরে আপনার প্রকল্পের মূল ফোল্ডারে যান এবং সরাসরি স্ক্রিপ্টের দিকে ইশারা করে এটি চালনা করতে পারেন: ~ / স্ক্রিপ্ট / অব্যবহৃত_মাজেস.শ
এরিক ভ্যান ডের নিউট

25

অনুগ্রহ করে একটি চেষ্টা করুন এলএসউনজিউজড রিসোর্স

এটি জেফডনেট-এর অব্যবহৃত দ্বারা প্রচণ্ডভাবে প্রভাবিত , তবে সত্যই অব্যবহৃত খুব ধীর এবং ফলাফলগুলি সম্পূর্ণ সঠিক নয়। সুতরাং আমি কিছু কর্মক্ষমতা অপ্টিমাইজেশন করেছি, অনুসন্ধানের গতি অব্যবহৃত থেকে বেশি দ্রুত।


4
বাহ যে দুর্দান্ত সরঞ্জাম! এই স্ক্রিপ্টগুলি চালানোর চেষ্টা করার চেয়ে অনেক ভাল। আপনি দৃশ্যত ব্যবহার না করা সমস্ত চিত্র দেখতে পাবেন এবং নিজের ইচ্ছামত মুছতে পারেন। একটি গ্যাচা আমি পেয়েছি যদিও এটি
প্লাস্টে

4
অবশ্যই অসাধারণ এবং আমার দিন সংরক্ষণ করুন! থ্রেডে সেরা সমাধান। আপনি দোলা।
জাকাহাও

4
থ্রেড সেরা। আমি আশা করি এটি আরও বেশি ছিল এবং আমি একাধিকবার ভোট দিতে পারতাম!
ইয়োভ শোয়ার্জ

আপনি কি জানেন যে মৃত কোড সনাক্তকরণের জন্য এর সাথে অনুরূপ কিছু আছে কিনা? উদাহরণস্বরূপ, যে পদ্ধতিগুলির জন্য আর কল হয় না (কমপক্ষে আর স্ট্যাটিকালি বলা হয় না )।
সুপারপুসিও

24

আমি রোমানের সমাধানটি চেষ্টা করেছিলাম এবং রেটিনা চিত্রগুলি হ্যান্ডেল করতে আমি কয়েকটি টুইট যুক্ত করেছি। এটি কার্যকরভাবে কাজ করে তবে মনে রাখবেন যে চিত্রের নাম কোডের মাধ্যমে প্রোগ্রামগতভাবে তৈরি করা যেতে পারে এবং এই স্ক্রিপ্টটি ভুলভাবে এই চিত্রগুলিকে অনর্থনযুক্ত হিসাবে তালিকাভুক্ত করবে। উদাহরণস্বরূপ, আপনার থাকতে পারে

NSString *imageName = [NSString stringWithFormat:@"image_%d.png", 1];

এই স্ক্রিপ্টটি ভুলভাবে বিবেচনা করবে যে image_1.pngএটি নির্বিঘ্ন।

পরিবর্তিত স্ক্রিপ্টটি এখানে:

#!/bin/sh
PROJ=`find . -name '*.xib' -o -name '*.[mh]' -o -name '*.storyboard' -o -name '*.mm'`

for png in `find . -name '*.png'`
do
   name=`basename -s .png $png`
   name=`basename -s @2x $name`
   if ! grep -qhs "$name" "$PROJ"; then
        echo "$png"
   fi
done

কী @ 2x basename সাফিক্স সুইচ না?
থ্যাডন

4
এফওয়াইআই, নামের ফাঁকা জায়গায় ফোল্ডারগুলি স্ক্রিপ্টের সাথে সমস্যা সৃষ্টি করে।
স্টিভ

4
যদি আপনার ত্রুটির মুখোমুখি হয়: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই, সম্ভবত ফাইল পথের ফাঁকা জায়গাগুলির কারণে এটি। উদ্ধৃতিগুলি গ্রেপ লাইনে যুক্ত করা দরকার, তাই এটি যায়: যদি! grep -qhs "$ নাম" "$ PROJ";
লুকাশজ

4
এই স্ক্রিপ্টটি আমার সমস্ত ফাইল তালিকাভুক্ত করে
jjxtra

4
আমি জানি না কেন এটি আমার জন্য কাজ করছে না এটি আমাকে সমস্ত পিএনজি চিত্র দেয়
ওমর ওবায়েদ

12

আপনি পাতলা চেষ্টা করতে পারেন হতে পারে , একটি শালীন কাজ করে।

আপডেট: এম্কম্যানাস আইডিয়া সহ, আমি এগিয়ে গিয়েছিলাম এবং কেবল কোনও মেশিনে অতিরিক্ত সেটআপ এড়াতে কোনও এসি ছাড়াই একটি ছোট ব্যবহার তৈরি করেছি।

https://github.com/arun80/xcodeutils


4
স্লেন্ডার প্রদান করা অ্যাপ্লিকেশন। বেশ কয়েকটি মিথ্যা ইতিবাচক এবং বাণিজ্যিক পণ্যগুলির পক্ষে ভাল নয়। Emcmanus দ্বারা সরবরাহিত স্ক্রিপ্টটি সত্যিই দুর্দান্ত।
অরুণ

6

কেবলমাত্র এই স্ক্রিপ্টটি আমার জন্য কাজ করছে যা ফাইলের নামগুলিতে এমনকি স্থান পরিচালনা করছে:

সম্পাদনা করুন

swiftফাইলগুলি সমর্থন করার জন্য আপডেট করা হয়েছে এবং cocoapod। ডিফল্টরূপে এটি পডস ডির বাদ দিয়ে কেবল প্রকল্পের ফাইলগুলি পরীক্ষা করে। পাশাপাশি পডস ফোল্ডারটি পরীক্ষা করতে চালানোর জন্য, --podঅ্যাট্রিবিউট দিয়ে চালান:

/.finunusedimages.sh --pod

আসল লিপিটি এখানে:

#!/bin/sh

#varables
baseCmd="find ." 
attrs="-name '*.xib' -o -name '*.[mh]' -o -name '*.storyboard' -o -name '*.mm' -o -name '*.swift'"
excudePodFiles="-not \( -path  */Pods/* -prune \)"
imgPathes="find . -iname '*.png' -print0"


#finalize commands
if [ "$1" != "--pod" ]; then
    echo "Pod files excluded"
    attrs="$excudePodFiles $attrs"
    imgPathes="find . $excudePodFiles -iname '*.png' -print0"
fi

#select project files to check
projFiles=`eval "$baseCmd $attrs"`
echo "Looking for in files: $projFiles"

#check images
eval "$imgPathes" | while read -d $'\0' png
do
   name=`basename -s .png "$png"`
   name=`basename -s @2x $name`
   name=`basename -s @3x $name`

   if grep -qhs "$name" $projFiles; then
        echo "(used - $png)"
   else
        echo "!!!UNUSED - $png"
   fi
done

এই স্ক্রিপ্টে অনেকগুলি চিহ্নিত করেছেন ব্যবহৃত হিসাবে সম্পদ অব্যবহৃত । উন্নতি প্রয়োজন।
আর্টেম শ্মাটকভ

বড়, গভীর প্রকল্পের স্তরক্রমগুলিও পছন্দ করে না: ./findunused.sh: লাইন 28: / usr / বিন / গ্রেপ: যুক্তি তালিকা খুব দীর্ঘ
মার্টিন-গিলস লাভোই

3

সম্পদ ক্যাটালগগুলি ব্যবহার করে প্রকল্পগুলি পরিচালনা করতে @ এডএমসিমনাস দ্বারা সরবরাহিত দুর্দান্ত উত্তরে আমি খুব সামান্য পরিবর্তন করেছি।

#!/bin/bash

for i in `find . -name "*.imageset"`; do
    file=`basename -s .imageset "$i"`
    result=`ack -i "$file" --ignore-dir="*.xcassets"`
    if [ -z "$result" ]; then
        echo "$i"
    fi
done

আমি সত্যিই বাশ স্ক্রিপ্টগুলি লিখি না, সুতরাং এখানে যদি কিছু উন্নতি করতে হয় (সম্ভবত) মন্তব্যগুলিতে আমাকে জানান এবং আমি এটি আপডেট করব।


ফাইলগুলির নাম ফাঁকা নিয়ে আমার একটি সমস্যা রয়েছে। আমি কোডের ঠিক আগে (`আইএফএস = $ '\ n'` সেট করার জন্য দরকারী এটি খুঁজে পেয়েছি (এটি একটি অভ্যন্তরীণ ক্ষেত্র বিভাজককে নতুন লাইনে সেট করে) - যদি আবার ফাইলগুলির নামে নতুন লাইন থাকে তবে কাজ করবে না।
লরা ক্যালিনাইউ

2

আপনি এটি একটি শেল স্ক্রিপ্ট করতে পারেন grep আপনার উত্স কোড এবং আপনার প্রকল্প ফোল্ডারের সাথে প্রতিষ্ঠিত চিত্রগুলি তুলনা করতে পারে।

এখানে লোক (গুলি) এর জন্য GREPএবংLS

সহজেই আপনি আপনার উত্স ফাইলের সমস্ত লুপ করতে পারবেন, অ্যারেতে চিত্রগুলি সংরক্ষণ করুন বা কিছু সমান এবং ব্যবহার করতে পারেন

cat file.m | grep [-V] myImage.png

এই কৌশল দ্বারা, আপনি আপনার প্রকল্পের উত্স কোডে সমস্ত চিত্র অনুসন্ধান করতে পারেন !!

আশাকরি এটা সাহায্য করবে!


2

আমি একটি লুয়া স্ক্রিপ্ট লিখেছি, আমি নিশ্চিত যে আমি এটি ভাগ করতে পারি কারণ আমি এটি কাজ করেছিলাম, তবে এটি ভালভাবে কাজ করে। মূলত এটি এটি করে:

এক ধাপ - স্থির চিত্রের রেফারেন্স (সহজ বিট, অন্যান্য উত্তরগুলি দিয়ে coveredাকা)

  • পুনরাবৃত্তভাবে চিত্র ডায়ারগুলির মাধ্যমে দেখায় এবং চিত্রের নামগুলি বের করে
  • .png এবং @ 2x এর চিত্রের নামগুলি স্ট্রিপ করে (চিত্রটিতে নাম ব্যবহার করা প্রয়োজন / ব্যবহৃত হয় না :)
  • উত্স ফাইলগুলিতে প্রতিটি চিত্রের নামের জন্য পাঠ্য অনুসন্ধান করে (স্ট্রিং আক্ষরিক অভ্যন্তরে থাকা আবশ্যক)

পদক্ষেপ দুটি- গতিশীল চিত্র রেফারেন্স (মজাদার বিট)

  • ফর্ম্যাট স্পেসিফায়ারযুক্ত উত্সে সমস্ত স্ট্রিং লিটারেলের একটি তালিকা বের করে (যেমন,% @)
  • এই স্ট্রিংগুলিতে নিয়মিত প্রকাশের সাথে ফর্ম্যাট স্পেসিফায়ারদের প্রতিস্থাপন করে (উদাহরণস্বরূপ, "foo% dbar" "foo [0-9] * বার" হয়ে যায়
  • এই রেজেেক্স স্ট্রিংগুলি ব্যবহার করে চিত্রের নামগুলি চিত্রের সাহায্যে অনুসন্ধান করে

তারপরে এটি কোনও অনুসন্ধানে পাওয়া যায় নি যা মুছে ফেলে।

প্রান্তের ক্ষেত্রে হ'ল কোনও সার্ভার থেকে আসা চিত্রের নামগুলি পরিচালনা করা হয় না। এটি পরিচালনা করতে আমরা এই অনুসন্ধানে সার্ভার কোডটি অন্তর্ভুক্ত করি।


ঝরঝরে। কৌতূহলের বাইরে ফর্ম্যাট স্পেসিফায়ারদেরকে ওয়াইল্ডকার্ড রেজেক্সেসে রূপান্তর করার জন্য কি কিছু উপযোগিতা রয়েছে? কেবলমাত্র ভাবছেন যে সমস্ত স্পেসিফায়ার এবং প্ল্যাটফর্মগুলি নির্ভুলভাবে সংযোজন করতে আপনাকে অনেক জটিলতা করতে হবে। (ফর্ম্যাট সুনির্দিষ্ট দস্তাবেজগুলি)
এড ম্যাকম্যানাস

2

আপনি এক্সকোডের জন্য ফোকাসপাস অ্যাপ ব্যবহার করতে পারেন । এক্সকোড প্রকল্পের সাথে অনুপস্থিত চিত্র এবং প্রচুর অন্যান্য ইস্যু / লঙ্ঘনের সন্ধান পাওয়া সত্যিই ভাল good


ভালো দেখায় যেহেতু Xcode 9. ক্যান নিশ্চিত আপডেট করা হয় নি যে এটি XCode 11. সাথে কাজ করে না
রবিন Daugherty

2

অন্যান্য উত্তরগুলি ব্যবহার করে, এটি দুটি ডিরেক্টরিতে কীভাবে চিত্রগুলি উপেক্ষা করবেন এবং pbxproj বা xcassets ফাইলগুলিতে চিত্রগুলির উপস্থিতিগুলি অনুসন্ধান করবেন না তার একটি ভাল উদাহরণ (অ্যাপ্লিকেশন আইকন এবং স্প্ল্যাশ পর্দার সাথে সাবধানতা অবলম্বন করুন)। আপনার ডিরেক্টরিটি মেলানোর জন্য --ignore-dir = *। Xcassets এ * পরিবর্তন করুন:

#!/bin/bash

for i in `find . -not \( -path ./Frameworks -prune \) -not \( -path ./Carthage -prune \) -not \( -path ./Pods -prune \) -name "*.png" -o -name "*.jpg"`; do 
    file=`basename -s .jpg "$i" | xargs basename -s .png | xargs basename -s @2x | xargs basename -s @3x`
    result=`ack -i --ignore-file=ext:pbxproj --ignore-dir=*.xcassets "$file"`
    if [ -z "$result" ]; then
        echo "$i"
    fi
done

2

আমি এই কাঠামোটি ব্যবহার করেছি: -

http://jeffhodnett.github.io/Unused/

ভাল কাজ ভাল! আমি কেবল 2 টি জায়গাগুলি দেখেছি যখন ইমেজের নামগুলি সার্ভার থেকে হয় এবং যখন সম্পদ ফোল্ডারের ভিতরে চিত্রের সম্পত্তির নামটি চিত্রের নাম থেকে আলাদা হয় ...


এটি সম্পদের সন্ধান করে না, কেবলমাত্র এমন চিত্র ফাইলগুলির জন্য যা সরাসরি উল্লেখ করা হয় না। আপনি যদি নিজের মতো করে সম্পদ ব্যবহার করেন তবে দুর্ভাগ্যক্রমে এই সরঞ্জামটি আপনার পক্ষে কাজ করবে না।
রবিন ডৌহার্টি

0

অব্যবহৃত চিত্রগুলি খুঁজতে http://jeffhodnett.github.io/Unused/ ব্যবহার করুন ।


আমার কাছে মনে হচ্ছে যে এই অ্যাপ্লিকেশনটি ফোল্ডারের নামগুলির জায়গাগুলি ভালভাবে পরিচালনা করে না। এবং এটি আমার বড় প্রকল্পের জন্য বেশ ধীর।
ইনগাহাম

0

অব্যবহৃত চিত্রগুলি সনাক্ত করতে আমি একটি অজগর স্ক্রিপ্ট তৈরি করেছি: 'unused_assets.py' @ গিস্ট । এটি এর মতো ব্যবহার করা যেতে পারে:

python3 unused_assets.py '/Users/DevK/MyProject' '/Users/DevK/MyProject/MyProject/Assets/Assets.xcassets'

স্ক্রিপ্টটি ব্যবহারের জন্য এখানে কয়েকটি বিধি রয়েছে:

  • প্রথম আর্গুমেন্ট হিসাবে প্রকল্প ফোল্ডার পথটি পাস করা গুরুত্বপূর্ণ, দ্বিতীয় আর্গুমেন্ট হিসাবে সম্পদ ফোল্ডার পাথ
  • ধারণা করা হয় যে সমস্ত চিত্র Assets.xcassets ফোল্ডারে রক্ষণাবেক্ষণ করা হয় এবং তা সুইফ্ট ফাইলের মধ্যে বা স্টোরিবোর্ডের মধ্যে ব্যবহার করা হয়

প্রথম সংস্করণে সীমাবদ্ধতা:

  • বস্তুনিষ্ঠ সি ফাইলগুলির জন্য কাজ করে না

আমি সময়ের সাথে এটি উন্নত করার চেষ্টা করব, প্রতিক্রিয়ার ভিত্তিতে, তবে প্রথম সংস্করণটি বেশিরভাগের জন্য ভাল হওয়া উচিত।

কোড নীচে সন্ধান করুন। কোডটি স্ব-বর্ণনামূলক হওয়া উচিত কারণ আমি প্রতিটি গুরুত্বপূর্ণ পদক্ষেপে যথাযথ মন্তব্য যুক্ত করেছি

# Usage e.g.: python3 unused_assets.py '/Users/DevK/MyProject' '/Users/DevK/MyProject/MyProject/Assets/Assets.xcassets'
# It is important to pass project folder path as first argument, assets folder path as second argument
# It is assumed that all the images are maintained within Assets.xcassets folder and are used either within swift files or within storyboards

"""
@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

# obtain start time
start = time.time()

arguments = sys.argv

# pass project folder path as argument 1
projectFolderPath = arguments[1].replace("\\", "") # replacing backslash with space
# pass assets folder path as argument 2
assetsPath = arguments[2].replace("\\", "") # replacing backslash with space

print(f"assetsPath: {assetsPath}")
print(f"projectFolderPath: {projectFolderPath}")

# obtain all assets / images 
# obtain paths for all assets

assetsSearchablePath = assetsPath + '/**/*.imageset'  #alternate way to append: fr"{assetsPath}/**/*.imageset"
print(f"assetsSearchablePath: {assetsSearchablePath}")

imagesNameCountDict = {} # empty dict to store image name as key and occurrence count
for imagesetPath in glob.glob(assetsSearchablePath, recursive=True):
    # storing the image name as encoded so that we save some time later during string search in file 
    encodedImageName = str.encode(Path(imagesetPath).stem)
    # initializing occurrence count as 0
    imagesNameCountDict[encodedImageName] = 0

print("Names of all assets obtained")

# search images in swift files
# obtain paths for all swift files

swiftFilesSearchablePath = projectFolderPath + '/**/*.swift' #alternate way to append: fr"{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:
        # search all the assests within the swift file
        for encodedImageName in imagesNameCountDict:
            # file search
            if s.find(encodedImageName) != -1:
                # updating occurrence count, if found 
                imagesNameCountDict[encodedImageName] += 1

print("Images searched in all swift files!")

# search images in storyboards
# obtain path for all storyboards

storyboardsSearchablePath = projectFolderPath + '/**/*.storyboard' #alternate way to append: fr"{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:
        # search all the assests within the storyboard file
        for encodedImageName in imagesNameCountDict:
            # file search
            if s.find(encodedImageName) != -1:
                # updating occurrence count, if found
                imagesNameCountDict[encodedImageName] += 1

print("Images searched in all storyboard files!")
print("Here is the list of unused assets:")

# printing all image names, for which occurrence count is 0
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!")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.