मैं जो करता हूं वह जटिल है, लेकिन यह मेरे लिए अच्छा काम करता है।
स्थिर पुस्तकालय प्रोजेक्ट की सेटिंग्स में, "पैकेजिंग" अनुभाग में, मैंने "रैपर एक्सटेंशन" को "फ्रेमवर्क" पर सेट किया है। मैं तो बदलने के लिए:
"Public Headers Folder Path" to "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)/Headers"
और
"Private Headers Folder Path" to $(PRODUCT_NAME).$(WRAPPER_EXTENSION)/PrivateHeaders
निर्माण उत्पादों में अंतिम परिणाम "MyLibraryName.framework" हिम्मत नाम का एक फ़ोल्डर जिनमें से वैसे ही जैसे ... अच्छी तरह से .. एक फ्रेमवर्क देखो है ।
#include <MyLibraryName/blah.h>
नकारात्मक पक्ष यह है कि ("zoul" से जवाब में पता चला के रूप में) "संग्रह" आदेश ठीक से काम नहीं करता है: एक बात मैं इस बारे में पसंद मैं उपयोग कर सकते हैं फ्रेमवर्क शैली मेरी कोड में शामिल है । कारण यह काम नहीं करता है क्योंकि पुरालेख कमांड अंतिम निर्माण उत्पादों और लक्ष्य निर्माण उत्पादों को अलग निर्देशिकाओं में अलग करता है। एक सामान्य "निर्माण" ऐसा नहीं करता है। जब आप सिस्टम को संग्रहित करते हैं तो अंतिम निर्माण उत्पादों निर्देशिका में स्थैतिक पुस्तकालय शीर्षलेख ढूंढने की कोशिश करता है और उन्हें नहीं मिल सकता क्योंकि सिस्टम उन्हें स्थिर पुस्तकालय के लिए लक्ष्य निर्माण निर्देशिका में डालता है।
यदि आप इसके बारे में सोचते हैं, तो एक्सकोड सोचता है कि आपकी स्थिर लाइब्रेरी के लक्ष्य में एक "उत्पाद" है। वह उत्पाद "libMyLibraryName.a" है। लेकिन वास्तव में लक्ष्य के दो उत्पाद हैं ... एक पुस्तकालय है, और दूसरा पुस्तकालय के लिए शीर्षकों का सेट है। आर्काइव कमांड के साथ समस्या यह है कि लाइब्रेरी को बिल्ड उत्पाद के रूप में कॉपी किया गया है, लेकिन हेडर नहीं हैं। जब आप संग्रह चलाने की कोशिश करते हैं तो आप "शीर्षलेख नहीं मिला" के साथ समाप्त होते हैं।
इसे ठीक करने के लिए, मैं जो करता हूं वह रन स्क्रिप्ट बिल्ड चरण का उपयोग करता है।स्क्रिप्ट इस (रूबी में लिखा) की तरह दिखता है:
if ENV["TARGET_BUILD_DIR"] != ENV["BUILT_PRODUCTS_DIR"] then
$product_name = ENV['PRODUCT_NAME']
$wrapper_extension = ENV['WRAPPER_EXTENSION']
$target_build_dir = ENV['TARGET_BUILD_DIR']
$built_products_dir = ENV['BUILT_PRODUCTS_DIR']
$source_file = File.join($target_build_dir, $product_name + "." + $wrapper_extension)
$dest_file = File.join($built_products_dir, $product_name + "." + $wrapper_extension)
system "ln -s #{$source_file} #{$dest_file}" if File.exist?($source_file)
end
तो अगर लक्ष्य का निर्माण निर्देशिका और निर्मित उत्पादों निर्देशिका से मेल नहीं खाते ... नकली "की रूपरेखा" के लिए एक प्रतीकात्मक लिंक बनाने के मेरे द्वारा बनाए गए निर्मित उत्पादों में डीआईआर।
जैसा कि मैंने कहा, यह एक जटिल योजना है लेकिन यह काम करता है और मुझे फ्रेमवर्क-शैली का उपयोग करने देता है जिसमें मुझे पसंद है। पूरी गड़बड़ी बहुत सरल हो जाएगी यदि एक्सकोड आईओएस डेवलपर्स को फ्रेमवर्क बनाने देगा (जिसका अर्थ यह भी होगा कि आईओएस डेवलपर्स को डायनामिक लाइब्रेरीज़ बनाने देगा, ऐप्पल कुछ करने में अनिच्छुक है) या यदि ऐप्पल फ्रेमवर्क का एक संस्करण बनायेगा ... एक पैकेज जिसमें एक स्थिर लाइब्रेरी और हेडर जो इसके साथ जाते हैं (एक static_framework?) ताकि आपके पास एक बिल्ड उत्पाद हो जिसमें हेडर और स्थिर लाइब्रेरी दोनों हों।
मैं अब दिनों के लिए एक सुरुचिपूर्ण समाधान खोजने की कोशिश कर रहा हूं। आपका सबसे अच्छा अब तक मिला है। – Bastek
@zoul क्या आप विस्तार कर सकते हैं? मैंने जो ट्यूटोरियल देखा है, वे सब प्रक्रिया को समझाने से कम हो जाते हैं। मैंने जो किया है वह 1 है) एक स्थिर कोको स्पर्श lib बनाएँ, 2) क्लाइंट प्रोजेक्ट में 'निर्भरता' समूह में xcodeproj फ़ाइल को खींचें और छोड़ें, 3) इसे लक्षित निर्भरता और लिंक बाइनरी में जोड़ें, और 4) कोशिश करें हेडर खोज पथ सेट करें ... और इस अंतिम चरण के काम को करने का कोई तरीका नहीं है :( – entonio
@entonio, [यहां एक अच्छा ट्यूटोरियल है] (http://blog.carbonfive.com/2011/04/04/using- ओपन-सोर्स-स्टेटिक-लाइब्रेरीज़-इन-एक्सकोड -4/# add_the_static_librarys_headers) जिन्हें आपने अभी तक नहीं पढ़ा है। इसमें हेडर पथ सेट करने को भी शामिल किया गया है, उम्मीद है कि यह प्रकाशित होने के दो साल बाद भी अद्यतित है। – zoul