2009-09-21 5 views
94

में अप्रयुक्त विधियों और # आयात में एक आईफोन ऐप पर लंबे समय तक काम करने के बाद, मुझे एहसास हुआ कि मेरा कोड काफी गंदा है, जिसमें कई # आयात और विधियां शामिल नहीं हैं जिन्हें उपयोगी नहीं कहा जाता है।ऑब्जेक्टिव-सी

मैं जानना चाहता हूं कि कोड की उन बेकार रेखाओं का पता लगाने के लिए कोई संकलक निर्देश या तरीका है या नहीं। क्या एक्सकोड का पता लगाने के लिए कोई उपकरण है?

उत्तर

66

एक्सकोड आपको विशिष्ट संकलक चेतावनियों के लिए सेटिंग्स की जांच करने की अनुमति देता है जो आपको कुछ प्रकार के अप्रयुक्त कोड की चेतावनी दे सकता है। (स्रोत सूची में परियोजना का चयन करें और फ़ाइल> जानकारी प्राप्त करें, फिर बिल्ड टैब चुनें।) यहाँ कुछ कर रहे हैं जो रुचि का हो सकता है (जो बजना और जीसीसी 4.2 मेरे लिए के लिए प्रदर्शन):

  • अप्रयुक्त कार्य
  • अप्रयुक्त पैरामीटर
  • अप्रयुक्त मान

मैं अप्रयुक्त आयात का पता लगाने के लिए कोई विकल्प नहीं दिख रहा है, लेकिन वह थोड़ा सरल है - कम तकनीकी दृष्टिकोण केवल आपके जब तक आयात बयान टिप्पणी करने के लिए है एक संकलन त्रुटि/चेतावनी प्राप्त करें।

अप्रयुक्त उद्देश्य-सी विधियों को अप्रयुक्त सी कार्यों की तुलना में पता लगाना बहुत मुश्किल है क्योंकि संदेशों को गतिशील रूप से प्रेषित किया जाता है। एक चेतावनी या त्रुटि आपको बता सकती है कि आपके पास एक संभावित समस्या है, लेकिन किसी की कमी यह गारंटी नहीं देती है कि आपके पास रनटाइम त्रुटियां नहीं होंगी।


संपादित करें: एक और अच्छा तरीका है (संभावित) का पता लगाने के अप्रयुक्त तरीकों वास्तविक फांसी से कोड कवरेज की जांच करने के लिए है। यह आमतौर पर स्वचालित इकाई परीक्षण के साथ किया जाता है, लेकिन यह नहीं होना चाहिए।

This blog post एक्सकोड का उपयोग कर यूनिट परीक्षण और कोड कवरेज का एक सभ्य परिचय है। gcov (जो केवल जीसीसी द्वारा जेनरेट किए गए कोड के साथ काम करता है) सेक्शन बताता है कि एक्सकोड को उपकरण कोड बनाने के लिए कैसे प्राप्त किया जाए, यह रिकॉर्ड कर सकता है कि यह कितनी बार निष्पादित किया गया है। यदि आप सिम्युलेटर में स्पिन के लिए अपने ऐप का एक वाद्य यंत्र बनाते हैं, तो उस पर gcov चलाएं, आप देख सकते हैं कि CoverStory (एक काफी सरल जीयूआई) या lcov (एचटीएमएल रिपोर्ट बनाने के लिए पर्ल स्क्रिप्ट्स) जैसे टूल का उपयोग करके कौन सा कोड निष्पादित किया गया था)।

मैं gcov और lcovCHDataStructures.framework के लिए उपयोग करता हूं और प्रत्येक एसवीएन प्रतिबद्धता के बाद coverage reports स्वत: उत्पन्न करता हूं। दोबारा, याद रखें कि निष्पादित कवरेज का इलाज "मृत" के एक निश्चित उपाय के रूप में करने के लिए मूर्ख नहीं है, लेकिन यह निश्चित रूप से उन विधियों की पहचान करने में सहायता कर सकता है जिन पर आप आगे की जांच कर सकते हैं।

अन्त में, जब से तुम मृत कोड हटाने की कोशिश कर रहे हैं, मुझे लगता है कि आप रोचक रूप में अच्छी तरह यह तो सवाल यह मिल जाएगा:

+0

http://clang-analyzer.llvm.org/ – slf

+4

मुझे यकीन है कि क्या अपनी बात है नहीं कर रहा हूँ ...स्थिर विश्लेषक बहुत सारी समस्याएं पा सकते हैं, लेकिन यदि आप ** 'id' ** के रूप में टाइप किए गए चर के लिए एक संदेश भेजते हैं, या रनटाइम पर कॉल करने के लिए चयनकर्ता बनाते हैं, तो स्थिर विश्लेषक गारंटी नहीं दे सकता कि कोड वास्तव में है अप्रयुक्त। यदि अभी भी आवश्यक कोड को हटा दिया गया है, तो वह जगह है जहां आपको रनटाइम त्रुटियां मिलेंगी। क्या मैं कुछ भूल रहा हूँ? –

+1

इसके अलावा, रनटाइम पर तारों के आधार पर बनाए गए चयनकर्ता काफी आम हैं। – dreamlax

1

हाल ही में, मैं से एक बड़ी परियोजना बदल कोको को कार्बन। इसके अंत में, वहां कुछ अनाथ फाइलें थीं जिनका अब उपयोग नहीं किया गया था।मैं एक पटकथा लिखी उन्हें खोजने के लिए कि अनिवार्य रूप से ऐसा किया: तब

स्रोत सुनिश्चित करें कि सभी तोड़फोड़ करने के लिए (यानी स्वच्छ) में चेक किया गया है यह वर्तमान में त्रुटि के बिना बनाता है सुनिश्चित करें (यानी, xcodebuild 0 स्थिति देता है) , प्रत्येक स्रोत के लिए निर्देशिका में फ़ाइल, खाली (यानी, सामग्री को हटाएं, लंबाई को छोटा करें) स्रोत और हेडर फ़ाइल, बिल्ड करने का प्रयास करें, अगर यह विफल हो जाए, तो फ़ाइलों को वापस लाएं, अन्यथा, उन्हें खाली छोड़ दें।

इसे चलाने के बाद, सभी रिक्त फ़ाइलों को वापस लाएं और हटाएं, संकलित करें और फिर सभी त्रुटि # आयातों को हटा दें।

मुझे यह भी जोड़ना चाहिए, आपको .xib या .sdef फ़ाइलों से संदर्भित फ़ाइलों से बचने की आवश्यकता है, और अन्य गतिशील लिंकिंग मामले हो सकते हैं, लेकिन यह आपको अभी भी हटाया जा सकता है पर एक अच्छा नेतृत्व दे सकता है।

एक ही तकनीक का उपयोग यह देखने के लिए किया जा सकता है कि #imports को हटाया जा सकता है - फ़ाइल को छोटा करने के बजाय, फ़ाइल में प्रत्येक #import को बदले में हटाएं और देखें कि बिल्ड विफल हो गया है या नहीं।

34

Appcode में कोड निरीक्षण सुविधा है जो अप्रयुक्त आयात और कोड पाता है।

+13

तो, आपका मतलब है कि हमें केवल इस सुविधा के लिए एपकोड इंस्टॉल करना चाहिए? – mayqiyue

5

मैं हाल ही में एक पटकथा लिखी अप्रयुक्त खोजने के लिए (या डुप्लिकेट) #import बयान: https://gist.github.com/Orangenhain/7691314

स्क्रिप्ट एक ObjC मीटर फ़ाइल लेता है और बदले में प्रत्येक #import लाइन बाहर टिप्पणी और अगर परियोजना अभी भी संकलित देखकर शुरू होता है। आपको BUILD_DIR & BUILD_CMD बदलना होगा।

आप एक find आदेश का उपयोग कर रहे हैं, तो स्क्रिप्ट से अधिक फ़ाइलों पर चलाया जाने के लिए, एक BUILD_CMD है कि वास्तव में उन सभी फ़ाइलों का उपयोग करता उपयोग सुनिश्चित करें (या आप अप्रयुक्त आयात बयान के बहुत सारे के साथ एक फ़ाइल देखेंगे)।

मैंने एपकोड की एक समान सुविधा के बिना यह लिखा है, हालांकि जब मैंने ऐपकोड का परीक्षण किया था, तो यह इस स्क्रिप्ट के रूप में पूरी तरह से नहीं था (लेकिन पूरी तरह से [पूरी परियोजना के लिए] रास्ता)।

+0

यह केवल डुप्लिकेट के लिए काम कर रहा है, अप्रयुक्त आयात हटाए नहीं जा रहे हैं। – Rahul

6

हम कुछ देसी रूबी कोड का उपयोग किया गया है, अब एक रत्न कहा जाता fui में निकाले: https://github.com/dblock/fui

+1

एक्सकोड 6.4 और 10.10.5 –

+12

के साथ काम नहीं करता है फूई अप्रयुक्त वर्गों को आयात नहीं करता है। नाम बहुत भ्रामक है .. – Fengson

2

रूप paddydub कहा, AppCode बहुत अच्छी तरह से यह करते हैं। मैंने कोशिश की है, और यह मुझे सिर्फ 10 मिनट का समय लगा:

जाओ Code > Optimize Imports... के लिए, या ^ + ⌥ + O

यहां पर एक विडियो ऐसा करने के तरीके का वर्णन किया गया है: Detection of unused import and methods in AppCode

2

आप Xcode विश्लेषक कि और अन्य को खोजने के लिए उपयोग कर सकते हैं समस्या का।

http://help.apple.com/xcode/mac/8.0/#/devb7babe820

इसके अलावा, आप परियोजना और लक्ष्य का निर्माण करने के लिए जाने के लिए और निर्माण सेटिंग के तहत परिवर्तन चेतावनी वरीयताओं जोड़ सकते हैं। इस गाइड देखें:

http://oleb.net/blog/2013/04/compiler-warnings-for-objective-c-developers/

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^