2016-01-19 6 views
11

मैं स्विफ्ट में एक रूपरेखा का निर्माण किया है। ढांचा कोकोपोड्स का उपयोग करता है, फली का एक उद्देश्य उद्देश्य सीस्विफ्ट वसा ढांचे डब्ल्यू/ऑब्जेक्टिव-सी Cocoapod

फ्रेमवर्क को वसा ढांचे बनाने के लिए एक कस्टम स्क्रिप्ट का उपयोग करता है, इसलिए यह 32/64 बिट सिस्टम का समर्थन करता है। (इस परियोजना पर एक अलग लक्ष्य में चलता है और यह है कि अगर इसके साथ कुछ करने के लिए है मैं सोच रहा हूँ?)

UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal 

if [ "true" == ${ALREADYINVOKED:-false} ] 
then 
echo "RECURSION: Detected, stopping" 
else 
export ALREADYINVOKED="true" 

// Step 1. Build Device and Simulator versions 
xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build 
xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build 

//Step 2. Copy the framework structure (from iphoneos build) to the universal folder 
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/" 

// Step 3. Copy Swift modules (from iphonesimulator build) to the copied framework directory 
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule/." "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule" 

// Step 4. Create universal binary file using lipo and place the combined executable in the copied framework directory 
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}" 

// Step 5. Convenience step to copy the framework to the project's directory 
cp -R "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework" "${PROJECT_DIR}" 

// Step 6. Convenience step to open the project's directory in Finder 
open "${PROJECT_DIR}" 

fi 

जब मैं इस वसा ढांचा बना सकते हैं और यह एक परियोजना में डाल मैं उपयोग करना चाहते हैं यह संकलक पर हमेशा बी/सी विफल रहता है प्रोजेक्ट सी कोको पॉड मॉड्यूल को नहीं देख सकता है।

clang: error: linker command failed with exit code 1 (use -v to see invocation) 
ld: framework not found Pusher for architecture x86_64 

जब मैं बिल्ड प्लेटफॉर्म बदलता हूं तो यह किसी भी आर्किटेक्चर के लिए नहीं मिलता है।

किसी भी समाधान है, जहां मैं एक रूपरेखा है कि मैं एक अलग Xcode प्रोजेक्ट (सभी iOS या ओएस एक्स के लिए) में उपयोग कर सकते हैं भयानक होगा उत्पादन कर सकते हैं।

उत्तर

0

जाहिर है आप सिम्युलेटर के लिए 64 बिट वास्तुकला याद कर रहे हैं।

जब आप एक्सकोड से एक लक्ष्य बनाते हैं, इस पर निर्भर करता है कि आपने किस प्रकार के सिम्युलेटर का चयन किया है - उत्पादित लाइब्रेरी में सिम्युलेटर के चयनित 32 बिट या 64 बिट संस्करण के लिए क्रमशः i386 या x86_64 होगा।

मुझे लगता है कि CLI निर्माण केवल i386 संस्करण का निर्माण कर रहा है।

आप लिपि में आर्किटेक्चर सेट करने का प्रयास कर सकते हैं:

xcodebuild -target "${PROJECT_NAME}" ARCHS="i386 x86_64" -configuration ${CONFIGURATION} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build

एक विकल्प आप 64 बिट सिम्युलेटर (iPhone 5 एस +) का उपयोग कर हाथ से बनाने की कोशिश कर सकते हैं, तो याद आ रही वास्तुकला निकालने और उसके बाद इसे लिपो कमांड का उपयोग करके अंतिम लाइब्रेरी में डालें।

+0

मुझे विश्वास है कि ONLY_ACTIVE_ARCH = कोई तर्क नहीं है। इसके अलावा यह तब भी काम करता है जब कोई उद्देश्य-सी कोको पॉड नहीं होता है। –

3

आप -target साथ xcodebuild जब CocoaPods का उपयोग नहीं चला सकते हैं। जब आप -target उपयोग करते हैं, Xcode केवल सक्रिय परियोजना पर विचार करने और Pod निर्भरता, अगर आप सिर्फ Xcode में परियोजना फाइल खोली और निर्माण करने की कोशिश की करने के लिए इसी में खींचने के लिए असफल हो जायेगी।

आप xcodebuild -workspace "${PROJECT_NAME}.xcworkspace" -scheme "${PROJECT_NAME}" ... चल जाना चाहिए, यह सोचते हैं कि CocoaPods कार्यक्षेत्र उत्पन्न और Xcode एक योजना लक्ष्य नाम का उपयोग कर उत्पन्न। आपको यह सुनिश्चित करने की भी आवश्यकता होगी कि यदि आपकी योजना किसी अन्य डिवाइस पर चल रही है तो इसे साझा के रूप में चिह्नित किया गया है।

एक बार आपका ढांचा बनने के बाद आपको इसे शामिल करना होगा और फ्रेमवर्क यह उन ऐप्स में पर निर्भर करेगा जो इसका उपयोग करेंगे। आपके ढांचे के लिए, इसका मतलब सामान्य> एम्बेडेड बैनरीज और सामान्य> लिंक्ड फ्रेमवर्क और पुस्तकालयों में शामिल है। ढांचे के लिए आप (जैसे अलामोफायर) पर निर्भर करते हैं, आप उपयोगकर्ताओं को अपने पॉडफाइल में शामिल करने के लिए निर्देश दे सकते हैं, आप इसे पैकेज कर सकते हैं और इसे अपने ढांचे के साथ भेज सकते हैं, या आप दोनों कर सकते हैं और उपयोगकर्ता को उनके लिए क्या काम करने देता है।

+0

क्या ऐसा कुछ और होगा जो मुझे करने या बदलने की ज़रूरत है? मुझे मॉड्यूल नहीं ढूंढने के बारे में एक कंपाइलर त्रुटि नहीं मिलती है, लेकिन जब मैं कुछ भी चलाने की कोशिश करता हूं तो मुझे मिलता है: ~/लाइब्रेरी/डेवलपर/कोरसिम्युलेटर/डिवाइस/74636985-3538-4693-बी 131-983106003055/डेटा/कंटेनर/बंडल/आवेदन/FBC92D11-240D-45BB-9F21-C4372DE509B4/TestMyKit.app/TestMyKit कारण: छवि नहीं मिली (lldb) –

+0

क्या यह पूरी त्रुटि है?इस बारे में कोई जानकारी नहीं है कि यह किस छवि को लोड नहीं कर सका? क्या उस फ्रेम के लिए लिंक और बाइनरी दोनों पुस्तकालयों में सूचीबद्ध .framework है? –

+0

यह पूरी त्रुटि है: dyld: लाइब्रेरी लोड नहीं हुई: @ rpath/alamofire.framework/Alamofire से संदर्भित: ~/लाइब्रेरी/डेवलपर/कोरसिम्युलेटर/डिवाइस/74636985-3538-4693-B131-983106003055/डेटा/कंटेनर/बंडल/आवेदन/एफएफसी 6E8DA-4877-4142-A97B-73A3B7712319/TestMyKit.app/Frameworks/DICAPIKit.framework/DICAPIKit कारण: छवि नहीं मिली (एलएलडीबी) - हाँ ढांचा दोनों जुड़े और एम्बेडेड हैं। –

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