2016-02-06 7 views
9

ऐप स्टोर ERROR ITMS-90087, ERROR ITMS-90209, & ERROR ITMS-90125 के रूप में मेरे ऐप को अपलोड करने का प्रयास करते समय मुझे निम्न त्रुटियां थीं इस प्रश्न Submit to App Store issues: Unsupported Architecture x86 में उल्लिखित और स्क्रिप्ट नीचे दिखाया गया है कोशिश करते हैं और इस समस्या को ठीक करने के लिए इस्तेमाल:रन स्क्रिप्ट घातक त्रुटि में जोड़ने के बाद एक्सकोड प्रोजेक्ट बनाने में त्रुटियां: लिपो: इनपुट फ़ाइल

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}" 

# This script loops through the frameworks embedded in the application and 
# removes unused architectures. 
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK 
do 
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable) 
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME" 
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH" 

EXTRACTED_ARCHS=() 

for ARCH in $ARCHS 
do 
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME" 
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH" 
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH") 
done 

echo "Merging extracted architectures: ${ARCHS}" 
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}" 
rm "${EXTRACTED_ARCHS[@]}" 

echo "Replacing original executable with thinned version" 
rm "$FRAMEWORK_EXECUTABLE_PATH" 
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH" 

done 

अब मैं Xcode में मेरी कोड संकलन करने की कोशिश कर त्रुटियों का एक बहुत हो रही है।

Executable is /Users/[Username]/Library/Developer/Xcode/DerivedData/[AppName]-egnqksafjoylrcaxerbjrknmxdgl/Build/Products/Debug-iphoneos/[AppName].app/Frameworks/Bolts.framework/Bolts 
Extracting arm64 from Bolts 

fatal error: lipo: input file (/Users/[Username]/Library/Developer/Xcode/DerivedData/[AppName]-egnqksafjoylrcaxerbjrknmxdgl/Build/Products/Debug-iphoneos/[AppName].app/Frameworks/Bolts.framework/Bolts) must be a fat file when the -extract option is specified 

Merging extracted architectures: arm64 
fatal error: lipo: can't open input file: /Users/[Username]/Library/Developer/Xcode/DerivedData/[AppName]-egnqksafjoylrcaxerbjrknmxdgl/Build/Products/Debug-iphoneos/[AppName].app/Frameworks/Bolts.framework/Bolts-arm64 (No such file or directory) 

rm: /Users/[Username]/Library/Developer/Xcode/DerivedData/[AppName]-egnqksafjoylrcaxerbjrknmxdgl/Build/Products/Debug-iphoneos/[AppName].app/Frameworks/Bolts.framework/Bolts-arm64: No such file or directory 

Replacing original executable with thinned version 
mv: rename /Users/[Username]/Library/Developer/Xcode/DerivedData/[AppName]-egnqksafjoylrcaxerbjrknmxdgl/Build/Products/Debug-iphoneos/[AppName].app/Frameworks/Bolts.framework/Bolts-merged to /Users/[Username]/Library/Developer/Xcode/DerivedData/[AppName]-egnqksafjoylrcaxerbjrknmxdgl/Build/Products/Debug-iphoneos/[AppName].app/Frameworks/Bolts.framework/Bolts: No such file or directory 

कोई विचार कैसे ठीक करें?

उत्तर

9

वैसे ऐसा लगता है कि बोल्ट ढांचा एक वसा बाइनरी नहीं है (यानी कई आर्किटेक्चर बाइनरी नहीं है) इसलिए निष्कर्षण और विलय विफल हो जाता है। मुझे लगता है कि सबसे आसान समाधान स्क्रिप्ट को केवल विशिष्ट ढांचे के लिए चलाने के लिए होगा जो x86_64 arch के लिए बाइनरी के साथ आता है। आप 'फ़ाइल' कमांड का उपयोग कर वसा बाइनरी की पहचान कर सकते हैं।

+6

इसे पढ़ने के बाद, मुझे एहसास हुआ कि केवल एक ढांचा ऐप स्टोर में अपलोड समस्या का कारण बन रहा था, तो यह केवल उस ढांचे को ही होना चाहिए जिसे मुझे स्क्रिप्ट चलाने की आवश्यकता है। इसलिए मैंने स्क्रिप्ट में लाइन को "$ APP_PATH" -name '* .framework' -type d ढूंढ लिया। जबकि-फ्रेम फ्रेमवर्क केवल त्रुटि के कारण एक ढांचे का संदर्भ देने के लिए "i APP_PATH" -name '[frameworkname] .framework' -type d | जबकि read -r FRAMEWORK – SamoanProgrammer

+0

केवल मेरी विशिष्ट समस्या के लिए स्क्रिप्ट चलाने के साथ भी मेरी समस्या को ठीक करें जिसके लिए आपको x86_64 त्रुटि मिलती है। – AtWork

+0

मेरे लिए, ऊपर दी गई स्क्रिप्ट पहली कोशिश पर काम करेगी। इसके बाद, मुझे त्रुटियों मिलती है कि यह आर्किटेक्चर के लिए स्लाइस को हटाने की कोशिश कर रहा है जो वहां नहीं हैं। यदि मैं एक्सकोड (Shift + Command + K) में क्लीन कमांड का उपयोग करता हूं तो मैं इसे फिर से काम कर सकता हूं। जब मैं बिल्ड या रन पर क्लिक करता हूं, तो यह फिर से काम करता है। किसी भी विचार को इस मुद्दे के आसपास कैसे जाना है? –

1

बस "इंस्टॉल करते समय केवल स्क्रिप्ट चलाएं" विकल्प की जांच करने के बारे में क्या?

+0

यह मेरे लिए काम करता था, लेकिन ऐप स्टोर में ऐप को तैनात करते समय मुझे किसी भी मुद्दे के लिए डर है। – iNasir

4

मैंने स्क्रिप्ट को संपादित करने और पहचानने के लिए संपादित किया है कि ढांचा एफएटी है या नहीं। यदि यह है, तो यह इसे छोड़ देता है।

#!/usr/bin/env bash 

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}" 

# This script loops through the frameworks embedded in the application and 
# removes unused architectures. 
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK 
do 
    FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable) 
    FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME" 

    if [ ! -f "${FRAMEWORK_EXECUTABLE_PATH}" ]; then 
     continue 
    fi 

    if xcrun lipo -info "${FRAMEWORK_EXECUTABLE_PATH}" | grep --silent "Non-fat"; then 
     echo "Framework non-fat, skipping: $FRAMEWORK_EXECUTABLE_NAME" 
     continue 
    fi 

    echo "Thinning framework $FRAMEWORK_EXECUTABLE_NAME" 

    EXTRACTED_ARCHS=() 

    for ARCH in $ARCHS 
    do 
     echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME" 
     xcrun lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH" 
     EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH") 
    done 

    echo "Merging extracted architectures: ${ARCHS}" 
    xcrun lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}" 
    rm "${EXTRACTED_ARCHS[@]}" 

    echo "Replacing original executable with thinned version" 
    rm "$FRAMEWORK_EXECUTABLE_PATH" 
    mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH" 
done 
संबंधित मुद्दे