2009-12-08 14 views
9

अब ऐप्पल निजी एपीआई उपयोग के लिए स्वचालित रूप से जांचने के लिए किसी प्रकार का स्थैतिक विश्लेषण चला रहा है, तीन लोगों पुस्तकालय की वजह से कई लोगों को पकड़ा गया है। मैं एक और थर्ड-पार्टी लाइब्रेरी का उपयोग करता हूं (जिसे मैं कोड से संकलित करता हूं) और मैं ऐप्पल को सबमिट करने से पहले इसे निजी एपीआई उपयोग के लिए स्वचालित रूप से ऑडिट करना चाहता हूं, इसलिए मैं उन हिस्सों को खत्म/पुनः लिख सकता हूं।तृतीय पक्ष पुस्तकालयों में निजी एपीआई के उपयोग से कैसे बचें और इससे बचें

यदि मैं अपने आवेदन निष्पादन योग्य पर nm चलाता हूं, तो मुझे प्रतीकों की एक सूची मिलती है, और मैं वहां प्रतीकों को देख रहा हूं जिसका उपयोग मैं नहीं करता हूं। उदाहरण के लिए मैं _AudioServicesPlaySystemSound देखता हूं, और यदि मैं XCode में "AudioServicesPlaySystemSound" की खोज करता हूं तो मुझे कोई परिणाम नहीं मिलता है। क्या निजी एपीआई में कॉल को स्वचालित रूप से भेदभाव करने का कोई तरीका है, उदाहरण के लिए मुझे लगता है कि ऐप्पल को शुरुआती अंडरस्कोर के साथ नाम देने की आदत है।

हालांकि: अगर मैं जानबूझकर एक निजी एपीआई के लिए कॉल शामिल करता हूं तो यह nm के आउटपुट में दिखाई नहीं देता है, लेकिन यह दिखाता है कि यदि मैं द्विआधारी पर strings चलाता हूं। इस पर आधारित, एक विचार था कि मैं सभी निजी एपीआई कॉलों की विशाल सूची को एक विशाल तालिका में संकलित करना था, और स्वचालित रूप से स्ट्रिंग आउटपुट में उनके लिए खोज करना था। मैंने अभी तक ऐसा नहीं किया है।

क्या किसी को भी इस सामग्री को स्वचालित रूप से पकड़ने के बारे में कोई सुझाव है, इसलिए मैं केवल समीक्षा प्रक्रिया के माध्यम से जा रहा हूं?

+0

वे तीन20 पर ऑब्जेक्ट करते हैं? यह वास्तव में डेवलपर द्वारा लिखा गया है जिसने आईफोन के लिए फेसबुक ऐप बनाया है। यदि आपका ऐप तीन20 के कारण खारिज कर दिया गया है, तो फेसबुक ऐप भी होना चाहिए ... हे। बस sayin ;-) –

+0

हाँ ... http://groups.google.com/group/three20/browse_thread/thread/c442af6e39a918b0/6d5046771539d139 –

+0

मुझे लगता है कि अगली बार जब फेसबुक अपडेट अपडेट करेगा तो वे अस्वीकार कर दिए जाएंगे वे नवीनतम संस्करण का उपयोग नहीं करते हैं जो ऐप्पल नीतियों का अनुपालन करता है। – bpapa

उत्तर

4

आप लिंक किए गए निष्पादन के बजाय वस्तु फ़ाइलों पर एनएम चलाने की कोशिश कर सकते हैं:

nm -g -j *.o | sort | uniq 

वस्तुओं build/<app>.build/*/<app>.build/Objects-normal सब-निर्देशिका में होना चाहिए।

आप AudioServicesPlaySystemSound का संदर्भ देख रहे हैं क्योंकि आपके द्वारा कॉल किए गए कार्यों में से एक AudioServicesPlaySystemSound पर कॉल करता है।

उद्देश्य सी कॉल आम तौर पर nm डंप में दिखाई नहीं देंगे, तो आप उस के लिए otool का उपयोग करना होगा:

otool -ov <object file> 
3

इस पर डेवलपर टूल, App Scanner का प्रयोग करें। यह निजी एपीआई विधियों के लिए आपकी .app फ़ाइल स्कैन करता है। भविष्य की रिलीज निजी एपीआई इंस्टेंस चर के लिए भी जांच करेगी।

+1

वह लिंक टूटा हुआ है। इसे आज़माएं: https://github.com/ChimpStudios/App-Scanner – chown

+0

क्या ऐप स्कैनर वास्तव में काम कर रहा है? कितना सटीक है कि – Kiarash

+0

परियोजना मर चुका है और कोई रिलीज नहीं है। –

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