मैं बिटकॉइन सक्षम के साथ एक स्थिर पुस्तकालय को कैसे तैयार करूं?


88

Xcode 7 बिटकोड का परिचय देता है , जो LLVM इंटरमीडिएट बाइनरी का कुछ प्रकार है, जिसका अर्थ है कि Apple के सर्वर मेरी भागीदारी के बिना विभिन्न आर्किटेक्चर के लिए मेरे ऐप को फिर से जोड़ सकते हैं।

लुकबैक में, मैं हमारे पुस्तकालय के साथ एक स्थिर संग्रह ढांचा वितरित करता हूं। ऐसा लगता है कि जब आप किसी भी चीज़ के साथ निर्माण करते हैं, लेकिन "बिल्ड एंड आर्काइव", तो बिटकॉइन वास्तव में मेरी लाइब्रेरी में उत्सर्जित नहीं होता है, और जो कोई भी अपने ऐप में मेरी लाइब्रेरी के साथ लिंक करता है और बिटकॉइन सक्षम के साथ बिल्ड एंड आर्काइव करने की कोशिश करता है दो चेतावनी:

  • ld: 'Lookback(Lookback.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. (यदि Xcode 6 के साथ लिब का निर्माण किया गया है)
  • ld: warning: full bitcode bundle could not be generated because 'Lookback(Lookback.o)' was built only with bitcode marker. The library must be generated from Xcode archive build with bitcode enabled (Xcode setting ENABLE_BITCODE) (यदि सामान्य Xcodebuild के साथ Xcode 7 के साथ लिब का निर्माण किया गया है)

मेरे पास एक बिल्ड स्क्रिप्ट है जो एक डिवाइस + सिम्युलेटर यूनिवर्सल बाइनरी बनाता है, इसलिए मैं बिल्ड एंड आर्काइव का उपयोग नहीं कर सकता, बल्कि मैं xcodebuildअपनी स्क्रिप्ट से कमांडलाइन से चलाता हूं। मैं xcodebuildएक उचित बिटकॉइन-सक्षम पुस्तकालय कैसे बना सकता हूं ?


HI @nevyn Im अपने एसडीके को एक ऐप में संकलित करने की कोशिश कर रहा है जो बिटकोड का उपयोग करता है। क्या उधर रास्ता है?
Stoff81

@ Stoff81 क्षमा करें, मैं इस पर काम कर रहा हूं। मुझे पहले बिटकॉइन के साथ काम करने की अपनी सभी निर्भरताएं प्राप्त करने की आवश्यकता है, और यह काफी काम का है।
नेविन

जवाबों:


137

बिटकोड एक संकलन-समय सुविधा है (लिंक-टाइम सुविधा नहीं) जिसका अर्थ है कि प्रत्येक .o फ़ाइल में बिटकोड के साथ निर्मित होने पर __bitcode नामक एक अतिरिक्त अनुभाग होना चाहिए। आप इस बात की पुष्टि कर सकते हैं कि क्या आपका बाइनरी बिटकॉइन-संगत चल रहा है otool -l (my .o or .a file) | grep __LLVM

जब आप सामान्य रूप से निर्माण करते हैं, तो Xcode बिल्ड फ्लैग -fembed-bitcode-markerको किसी भी क्लैंग इनवोकेशन में जोड़ता है । ऐसा लगता है कि 'बिटकॉइन इनेबल होने पर बिटकॉइन इनेबल हो जाएगा', और वास्तव में बिटकॉइन सक्षम नहीं होता है।

जब आप "बिल्ड एंड आर्काइव" करते हैं, तो इस ध्वज को बदल दिया जाता है -fembed-bitcode, जो वास्तव में बिटकॉइन-सक्षम बाइनरी का निर्माण करता है।

xcodebuildउपयोग करने के दो तरीके प्रतीत होते हैं -fembed-bitcode:

  • 'संग्रह' एक्शन का उपयोग करें, के रूप में xcodebuild -target LookbackSDK archiveके बजाय xcodebuild -target LookbackSDK build। यह आपके Xcode ऑर्गनाइज़र में बायनेरिज़ को build/फ़ोल्डर के बजाय डालने का साइड-इफ़ेक्ट है , हालाँकि आप इसके द्वारा काम कर सकते हैं -exportArchive -archivePath ./build(धन्यवाद @JensAyton )
  • अन्य C फ्लैग को जोड़कर ध्वज का उपयोग बल OTHER_CFLAGS="-fembed-bitcode"। आपका xcodebuildआह्वान कुछ इस तरह दिखेगा xcodebuild OTHER_CFLAGS="-fembed-bitcode" -target LookbackSDK build

बाद वाला वही है जिसे मैंने चुना है ताकि मुझे अपनी बिल्ड सिस्टम को बदलना न पड़े, लेकिन यह हर फाइल के लिए चेतावनी उत्पन्न करेगा, क्योंकि अब दोनों -fembed-bitcode-markerऔर -fembed-bitcodeक्लैंग में भेजे जाते हैं। बिटकॉइन-सक्षम लाइब्रेरी पैदा करते हुए, लकेली उत्तरार्द्ध जीतती है!

साधन


9
FWIW, आप के रूप में अच्छी तरह -fembed-bitcode-markerसे जोड़कर नजरअंदाज किए जाने के बारे में चेतावनी से छुटकारा पा सकते हैं -Qunused-arguments
mstorsjo

कौन सा ExportFormat एक फ्रेमवर्क के xcodebuild के लिए उपयोग करते हैं? केवल "ipa", "pkg" और "app" को परिभाषित किया जाना प्रतीत होता है ( developer.apple.com/library/mac/documentation/Darwin/Reference/… )।
फाबियान कोलबेल

@nevyn अभी भी मेरा मुख्य ऐप नहीं बना सका है जिसके पास कस्टम फ्रेमवर्क फ़ाइल है जिसमें बदले में ऊपर उल्लिखित ध्वज के साथ एक बिल्ड स्क्रिप्ट है।
रवरिनंदन

ओटूल-एल (मेरी .o या .a फ़ाइल)। क्या आपका मतलब ओटोल-एल (मेरी .o या .a फ़ाइल) है grep __bitcode?
माइक एम

1
@ माइक वास्तव में नहीं है otool -l myfile.o | grep __LLVM, क्योंकि वास्तविक बिटकोड के बजाय केवल बिटकोड मार्कर होने पर भी __bitcode सेगमेंट होगा।
नीवं

40

Xcode 8 के साथ, मैं OTHER_CFLAGS="-fembed-bitcode"काम नहीं कर सका । was built without full bitcode. All frameworks and dylibs for bitcode must be generated from Xcode Archive or Install buildजब मैंने अपने स्टैटिक फ्रेमवर्क वाले ऐप का आर्काइव बनाने की कोशिश की, तो मैं कुछ की तर्ज पर दौड़ता रहा ।

मैं वास्तव में यह क्या देख रहा था:

BITCODE_GENERATION_MODE=bitcode

मैं वास्तव में एक कुल लक्ष्य के अंदर एक रन स्क्रिप्ट का उपयोग कर रहा हूं, पूर्ण xcodebuild लाइन इस तरह दिखती है (सिर्फ संदर्भ के लिए):

xcodebuild BITCODE_GENERATION_MODE=bitcode OTHER_CFLAGS="-fembed-bitcode" -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build


2
+1, BITCODE_GENERATION_MODE=bitcodeविधि पसंद की जा रही है, जैसा कि इस उत्तर में भी सुझाया गया है।
विलियम डेनिस

इसने मेरा मुद्दा भी तय कर दिया जबकि डिफ़ॉल्ट उत्तर अब नहीं है।
कामचटका

जीवन रक्षक! धन्यवाद!
विडालबेनजोई

17

एक बार जब आप स्थिर lib के लिए बिटकोड समर्थन जोड़ते हैं, तो यह Xcode 6 के साथ संगत नहीं होगा। ऐप संग्रह नहीं करेगा।

मैं बिटकॉइन के लिए सेटिंग का स्पष्ट रूप से उल्लेख करना चाहूंगा क्योंकि @ nevyn के उत्तर ने मुझे थोड़ा भ्रमित किया।

बिल्ड सेटिंग्स पर जाएं, "कस्टम कंपाइलर फ्लैग" खोजें। जोड़ें -fembed-bitcode। यह बिटकॉइन के साथ आपके काम का निर्माण करेगा।


6

बिल्ड सेटिंग्स पर प्रोजेक्ट का चयन करें -> अन्य C झंडे, सेट डीबग को -fembed-bitcode- मार्कर और रिलीज -fembed-bitcode

बिल्ड सेटिंग्स पर, BITCODE_GENERATION_MODE नाम के साथ उपयोगकर्ता-परिभाषित बिल्ड सेटिंग जोड़ने के लिए शीर्ष पर + साइन पर क्लिक करें, और डीबग को मार्कर में सेट करें, बिटकोड को रिलीज़ करें

स्कीमा को रिलीज़ के रूप में संपादित करें और फिर वांछित लाइब्रेरी पर क्लिक करें। एक फ़ाइल और निर्माण पथ प्राप्त करें। लाइब्रेरी फ़ॉर्म रिलीज़ फ़ोल्डर प्राप्त करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.