मैंने इनाम खोला: "विश्वसनीय और / या आधिकारिक स्रोतों से उत्तर ड्राइंग की तलाश में।" लेकिन तब से ऐसा प्राप्त नहीं हुआ है।
जबकि @jackslash द्वारा प्रदान किया गया उत्तर सही है, यह केवल कहानी का एक हिस्सा बताता है इसलिए मैं अपना खुद का एक तरह से लिखना चाहता हूं जिस समय मैं यह सवाल पूछ रहा था, मैं इसे देखना चाहता हूं।
इस उत्तर की वास्तविकता यह है: जुलाई 2015. यह सबसे अधिक संभावना है कि चीजें बदल जाएंगी।
सबसे पहले यह दावा करते हैं कि फ्रेमवर्क के सही कोड पर हस्ताक्षर के लिए आवश्यक क्रियाओं को उन चरणों में विभाजित किया जाना चाहिए, जिन्हें फ्रेमवर्क के डेवलपर को लेना है और उस फ्रेमवर्क के उपभोक्ता को जो कदम उठाने हैं।
TLDR;
OSX फ्रेमवर्क के लिए: डेवलपर इसे कोड किए बिना OSX फ्रेमवर्क को वितरित करने के लिए स्वतंत्र है क्योंकि उपभोक्ता इसे फिर से कोड-असाइन करेगा।
आईओएस फ्रेमवर्क के लिए: डेवलपर आईओएस फ्रेमवर्क को कोड किए बिना वितरित करने के लिए स्वतंत्र है क्योंकि उपभोक्ता इसे फिर से कोड-असाइन करेंगे, लेकिन डेवलपर को अपने डिवाइस को आईओएस डिवाइस के लिए बनाने पर एक्सकोड द्वारा मजबूर किया जाता है।
रडार के कारण: "सिम्युलेटर स्लाइस वाले iOS फ्रेमवर्क को ऐप स्टोर में प्रस्तुत नहीं किया जा सकता है" आईओएस फ्रेमवर्क के उपभोक्ता को "कॉपी_फ्रेमवर्क" या "स्ट्रिप_फ्रेमवर्क" जैसी विशेष स्क्रिप्ट चलाने के लिए मजबूर किया जाता है, जो lipo -remove
आईओएस फ्रेमवर्क और फिर से सिम्युलेटर स्लाइस को बंद करने के लिए उपयोग करता है। -कोडाइन स्ट्रिप्ड फ्रेमवर्क क्योंकि इस बिंदु पर इसकी कोडिंग पहचान जो कुछ भी थी (या नहीं थी) lipo -remove
हेरफेर के साइड इफेक्ट के रूप में हटा दी जाती है ।
लंबे समय तक जवाब इस प्रकार है।
यह उत्तर "विश्वसनीय और / या आधिकारिक स्रोतों से ड्राइंग" एक नहीं है, बल्कि कई अनुभवजन्य टिप्पणियों पर आधारित है।
अनुभवजन्य अवलोकन # 1: उपभोक्ता परवाह नहीं करता है क्योंकि वे डेवलपर से प्राप्त होने वाले ढांचे को फिर से-कोड करेंगे
जीथब पर प्रसिद्ध ओपन सोर्स परियोजनाओं के बाइनरी फ्रेमवर्क वितरण को कोड नहीं किया गया है । कमांड codesign -d -vvvv
देता है: "बाइनरी आईओएस और ओएसएक्स फ्रेमवर्क के सभी पर" कोड ऑब्जेक्ट पर हस्ताक्षर नहीं किया गया है जो मैंने खोजा था। कुछ उदाहरण: ReactiveCocoa और मेंटल , रियल , प्रोमिसकिट ।
इस अवलोकन से यह स्पष्ट है कि इन चौखटों के लेखक उनकी ओर से उपभोक्ता द्वारा कोड किए जाने का इरादा रखते हैं, अर्थात उपभोक्ता को या तो कोड का उपयोग करना चाहिए "कोड पर हस्ताक्षर" झंडे में "एम्बेड फ्रेमवर्क" झंडे में दिए गए निर्माण चरण का उपयोग करें या कुछ कस्टम शेल का उपयोग करें स्क्रिप्ट जो मैन्युअल रूप से एक ही काम करती है: उपभोक्ता की ओर से कोडसिग्नस फ्रेमवर्क।
मुझे इसके विपरीत का कोई एकल उदाहरण नहीं मिला: खुला स्रोत ढांचा, जिसे कोडिंग पहचान के साथ वितरित किया जाएगा इसलिए शेष उत्तर में मैं इसे व्यापक रूप से अपनाए गए दृष्टिकोण को सही मान रहा हूं: फ्रेमवर्क की कोई आवश्यकता नहीं है। इसमें कोडिंग पहचान के साथ अन्य डेवलपर्स के लिए अपने ढांचे को वितरित करें क्योंकि उपभोक्ता वैसे भी इसे फिर से कोडिंग करेगा ।
अनुभवजन्य अवलोकन # 2 जो केवल iOS पर लागू होता है और जो पूरी तरह से डेवलपर की चिंता है
हालांकि उपभोक्ता को इस बात की परवाह नहीं है कि उन्हें डेवलपर से जो फ्रेमवर्क प्राप्त हुआ है वह कोडेड है या नहीं, डेवलपर को अभी भी अपनी iOS प्रक्रिया को इसके निर्माण की प्रक्रिया के हिस्से के रूप में कोड करने की आवश्यकता है , जब वे इसे iOS डिवाइस के लिए बनाते हैं क्योंकि अन्यथा Xcode का निर्माण नहीं होता है CodeSign error: code signing is required for product type 'Framework' in SDK 'iOS 8.1'
:। जस्टिन स्पाहर-समर्स को उद्धृत करने के लिए :
OS X फ्रेमवर्क को बिल्ड में कोड किए जाने की आवश्यकता नहीं है ... दुर्भाग्य से, Xcode की आवश्यकता है कि आईओएस फ्रेमवर्क को बिल्ड टाइम पर कोड किया जाए।
यह मेरे प्रश्न # 2 पर बहुत अच्छी तरह से उत्तर देता है: "iPhone डेवलपर" पहचान एक्सकोड को काजोल करने के लिए पर्याप्त है ताकि यह डिवाइस के लिए आईओएस फ्रेमवर्क का निर्माण करे। कार्थेज # 339 पर यह टिप्पणी एक ही बात कहती है।
अनुभवजन्य अवलोकन # 3: लाइपो उपकरण
लाइपो उपकरण के विशिष्ट व्यवहार: जब ढांचा द्विआधारी के लिए आवेदन किया है, यह हमेशा रिकर्सिवली किसी भी codesign पहचान यह से निकाल देता है : lipo -create/-remove codesigned framework ... -> not codesigned framework
।
यह एक उत्तर हो सकता है कि क्यों अवलोकन # 1 में सभी उदाहरणों को संहिताबद्ध नहीं किया गया है: लिपो लागू होने के बाद उनकी कोडिंग पहचान को उड़ा दिया जाता है, लेकिन अवलोकन के अनुसार # 1 उपभोक्ता का ध्यान नहीं है कि यह ठीक है।
यह अवलोकन विशेष रूप से AppStore के बारे में अगले अवलोकन # 4 के लिए प्रासंगिक है।
अनुभवजन्य अवलोकन # 4: सिम्युलेटर स्लाइस वाले iOS फ्रेमवर्क को ऐप स्टोर में प्रस्तुत नहीं किया जा सकता है
यह व्यापक रूप से चर्चा में है: दायरे # 1163 और कार्थेज # 188 और राडार खोला गया है: rdar: // 19209161 ।
यह पूरी तरह से उपभोक्ता की चिंता है: आईओएस यूनिवर्सल फ्रेमवर्क के लिए जिसे उपभोक्ता अपने आवेदन में शामिल करते हैं, जब एप्लिकेशन बनाया जा रहा होता है, तो उन्हें विशेष स्क्रिप्ट (कस्टम रन स्क्रिप्ट फेज) को चलाना चाहिए जो उस फ्रेमवर्क के बाइनरी से सिम्युलेटर स्लाइस को हटा देता है ताकि ऐप ऐपस्टोर सत्यापन को पास कर सके।
बाइनरी फ्रेमवर्क के लिए अच्छा उदाहरण मुझे रियलम में मिला: स्ट्रिप -फ्रैमवर्कसेश ।
यह lipo
आर्किटेक्चर के सभी स्लाइस को हटाने के लिए उपयोग करता है ${VALID_ARCHS}
और फिर इसे उपभोक्ता की पहचान के साथ फिर से कोड करता है - यह वह जगह है जहां # 3 kicks in: Framework का पुन: कोडाइन किया जाना है क्योंकि उस पर लाइपो जोड़-तोड़ है।
कार्थेज में CopyFrameworks.swift स्क्रिप्ट है जो उपभोक्ता द्वारा शामिल सभी रूपरेखाओं के लिए एक ही काम करता है: यह उपभोक्ता की ओर से सिम्युलेटर स्लाइस और री-कोडसाइन फ्रेम से स्ट्रिप्स करता है।
इसके अलावा एक अच्छा लेख है: Xcode में डायनामिक लाइब्रेरी से अनचाहे आर्किटेक्चर को अलग करना ।
अब डेवलपर और उपभोक्ता दोनों के दृष्टिकोण से iOS और OSX दोनों के उत्पादन के लिए आवश्यक चरणों का अवलोकन। पहले आसान एक:
OSX
डेवलपर:
- OSX फ्रेमवर्क बनाता है
- इसे उपभोक्ता को देता है
डेवलपर से किसी भी कोडिंग गतिविधियों की आवश्यकता नहीं है।
उपभोक्ता:
- डेवलपर से OSX फ्रेमवर्क प्राप्त करता है
- "फ्रेमवर्क ऑन कॉपी" कोड के हिस्से के रूप में फ्रेमवर्क / डायरेक्टरी में फ्रेमवर्क को कॉपी करता है और अपने आप, कंज्यूमर की ओर से इसे अपने आप कोड करता है।
आईओएस
डेवलपर:
- डिवाइस के लिए iOS फ्रेमवर्क बनाता है। कोडकोडिंग की आवश्यकता है Xcode, "iPhone डेवलपर" की पहचान पर्याप्त है।
- सिम्युलेटर के लिए आईओएस फ्रेमवर्क बनाता है।
- पिछले दो से सार्वभौमिक iOS ढांचे का निर्माण करने वाले लाइपो का उपयोग करता है। इस बिंदु पर 1 चरण की कोडिंग पहचान खो गई है: सार्वभौमिक फ्रेमवर्क बाइनरी "पर हस्ताक्षर नहीं किया गया है" लेकिन यह ठीक है क्योंकि "उपभोक्ता परवाह नहीं करता है"।
- इसे उपभोक्ता को देता है
उपभोक्ता:
- डेवलपर से iOS फ्रेमवर्क प्राप्त करता है
- फ्रेमवर्क / डायरेक्टरी में कॉपियों की रूपरेखा
- निर्माण प्रक्रिया के एक भाग के रूप में विशेष स्क्रिप्ट का उपयोग करता है: यह स्क्रिप्ट आईओएस फ्रेमवर्क से स्ट्रिप्स सिम्युलेटर स्लाइस करता है और फिर उनके, कंज्यूमर, ओर से इसे फिर से कोड करता है।