Xcode 8 का निर्माण iOS 9.2 और उससे नीचे पर क्रैश है


85

जब मैं Xcode 8 GM Seed के साथ अपना ऐप बनाता हूं और इसे डिवाइस या सिम्युलेटर के नीचे एक iOS 9.2 पर चलाता हूं, तो मुझे ऐप लॉन्च के दौरान या ऐप लॉन्च होने के कुछ सेकंड के बाद अजीब EXC_BAD_ACCESS क्रैश हो जाता है। दुर्घटना हमेशा एक अलग स्थान पर होती है (एक सबव्यू [UIImage imageNamed:], ऐप प्रतिनिधि की मुख्य विधि आदि को जोड़कर )। जब मैं इसे iOS 9.3+ या 10 पर चलाता हूं, तो मुझे वे क्रैश नहीं मिलते हैं और जब मैं Xcode 7 के साथ निर्माण करता हूं और iOS 9.2 और उसके बाद के संस्करण पर नहीं मिलता है । क्या किसी और को भी कुछ ऐसा ही अनुभव होता है? यह Xcode 8 के साथ एक ज्ञात मुद्दा है?


सबसे पहले, सिम्युलेटर की सामग्री को रीसेट करें। और फिर प्रयत्न करें।
मेहुल

3
क्या आप अपनी समस्या को हल करने में सक्षम थे? हम भी कर रहे हैं।
एनीमोनलाइन

क्या आप bugreport.apple.com पर एक नया बग दर्ज कर सकते हैं, और नमूना परियोजना और क्रैश लॉग संलग्न कर सकते हैं ताकि हम जांच कर सकें?
क्विन टेलर

@QuinnTaylor - मैंने Bugreport.apple.com # 28371396 पर संलग्न परियोजना (सिम्युलेटर में मेरे लिए 100% पुन: प्रस्तुत) के साथ एक बग रिपोर्ट दर्ज की है। इस में देखने के लिए धन्यवाद!
इव्टिम जॉर्जिव सिप

3
@EvtimGeorgiev धन्यवाद! यह P3 .png छवियों से संबंधित एक iOS बग का डुप्लिकेट है, और इसे Xcode 8.1 बीटा में शामिल iOS 10.1 बीटा SDK में तय किया जाना चाहिए, जो आज जारी किया गया था। क्या आप उसके साथ निर्माण की कोशिश कर सकते हैं?
क्विन टेलर

जवाबों:


55

स्वीकृत उत्तर https://forums.developer.apple.com/thread/60919 देखें

आप पूर्वावलोकन के साथ 8 बिट के रूप में 16-बिट संपत्ति बचा सकते हैं

"ERROR ITMS-90682: अमान्य बंडल -" पेलोड / XXXXX / Assets.car पर संपत्ति सूची को हल करने के लिए कैसे 16 बिट या P3 संपत्ति शामिल नहीं कर सकते हैं यदि ऐप iOS 8 या इससे पहले का समर्थन करता है। "

Xcode 8 GM के साथ, यह त्रुटि तब होगी जब आप iOS प्रस्तुत करने वाले लक्ष्य को 16-बिट या P3 परिसंपत्तियों को शामिल करते हैं जो पहले iOS रिलीज़ को लक्षित करता है। यदि आपके ऐप को विस्तृत रंग कार्यक्षमता की आवश्यकता है, तो आपको अपना परिनियोजन लक्ष्य iOS 9.3 या उसके बाद बदलना होगा। यदि आपके ऐप को व्यापक रंग कार्यक्षमता की आवश्यकता नहीं है और आप इसे पुराने iOS संस्करणों में तैनात करना चाहते हैं तो आपको सभी 16-बिट या P3 परिसंपत्तियों को 8-बिट sRGB परिसंपत्तियों के साथ बदलना चाहिए। आप आईट्यून्स कनेक्ट से त्रुटि संदेश में नामित एसेट कैटलॉग पर "एसेटुटिल" चलाकर 16-बिट या पी 3 संपत्ति पा सकते हैं। निम्नलिखित चरण प्रक्रिया को रेखांकित करते हैं:

  1. एक इंस्पेक्टेबल .ipa फ़ाइल बनाएँ। Xcode ऑर्गनाइज़र (Xcode-> Window-> Organizer) में, निरीक्षण करने के लिए एक आर्काइव चुनें, "Export ..." पर क्लिक करें, और "Export for Enterprise या Ad-Hoc Deployment" चुनें। यह एक स्थानीय कॉपी बनाएगा। आपके ऐप के लिए ipa फ़ाइल।

  2. उस .ipa फ़ाइल की स्थिति जानें और उसका एक्सटेंशन .zip में बदलें।

  3. .Zip फ़ाइल का विस्तार करें। यह आपके .app बंडल वाले पेलोड फ़ोल्डर का उत्पादन करेगा।

  4. एक टर्मिनल खोलें और वर्किंग डायरेक्टरी को अपने .app बंडल cd पाथ / / के टॉप लेवल पर / पेलोड / अपने वॅप में बदलें।

  5. नीचे दिखाए गए अनुसार अपने .app बंडल में Assets.car फ़ाइलों का पता लगाने के लिए खोज उपकरण का उपयोग करें: खोजें। -नाम 'एसेट्स.कार'

  6. किसी भी 16-बिट या पी 3 परिसंपत्तियों को खोजने के लिए एसेटुटिल टूल का उपयोग करें, प्रत्येक एसेट्स में। आपके आवेदन को नीचे दिखाया गया है। :sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json

  7. परिणामी /tmp/Assets.json की जांच करें और "DisplayGamut": "P3" और इसके संबद्ध "नाम" वाली किसी भी सामग्री की तलाश करें। यह आपके चित्र का नाम होगा जिसमें एक या अधिक 16-बिट या P3 संपत्तियां होंगी।

  8. उन परिसंपत्तियों को 8-बिट / sRGB परिसंपत्तियों के साथ बदलें, फिर अपने ऐप का पुनर्निर्माण करें।

अद्यतन: यदि आपका परिनियोजन लक्ष्य 8.3 या 8.4 पर सेट है और आपके पास एक परिसंपत्ति कैटलॉग है, तो आपको यह त्रुटि संदेश प्राप्त होगा, भले ही आपके पास वास्तव में 16-बिट या पी 3 संपत्ति न हो। इस स्थिति में आपको या तो अपना परिनियोजन लक्ष्य 8.2 तक कम करना होगा, या इसे 9.x तक ले जाना होगा।


2
यह EXC_BAD_ACCESS से कैसे संबंधित है?
एनिमोनलाइन

1
कृपया उत्तर की नकल न करें। इसके बजाय, डुप्लिकेट के रूप में फ्लैग प्रश्न।
जाल

श्रीमान धन्यवाद! आपने इस उत्तर के साथ मेरे लिए एक टन समय बचाया! )
थोरैक्स

3
मेरी परियोजना में (तैनाती लक्ष्य 8.0 है) कोई पी 3 संपत्ति नहीं है फिर भी मैं ऐप पर दुर्घटनाग्रस्त हो रहा हूं या किसी भी स्थान पर बेतरतीब ढंग से एक्सकोड 8 के साथ हो रहा हूं। सभी संपत्ति 8-बिट / एसआरजीबी की हैं। क्या किसी ने अभी भी इसी मुद्दे का सामना किया
अंकित

@Ankit हम एक ही मुद्दे का सामना कर रहे हैं। क्या आपने अभी तक समाधान पाया है?
रोमन ट्रूबा

32

मुझे उम्मीद है कि यह बैश स्क्रिप्ट आपकी मदद कर सकती है। इनपुट तर्क निर्देशिका की तुलना में आपकी परियोजना के सभी xcassets हैं। यह स्क्रिप्ट सभी pngs में sRGB प्रोफाइल सेट करेगी। इसने मेरी मदद की :)

#!/bin/bash
DIRECTORY=$1
echo "------------------------------"
echo "Passed Resources with xcassets folder argument is <$DIRECTORY>"
echo "------------------------------"
echo "Processing asset:"
XSAASSETSD="$(find "$DIRECTORY" -name '*.xcassets')"
for xcasset in $XSAASSETSD
do
    echo "---$xcasset"
    IMAGESETS="$(find "$xcasset" -name '*.imageset')"
    for imageset in $IMAGESETS
    do
        echo "------$imageset"
        FILES="$(find "$imageset" -name '*.png')"
        for file in $FILES 
        do
            echo "---------$file"
            sips -m "/System/Library/Colorsync/Profiles/sRGB Profile.icc" $file --out $file
        done
    done
done
echo "------------------------------"
echo "script successfully finished"
echo "------------------------------"

हमारी संपत्ति में कोई दोषपूर्ण चित्र नहीं हैं, फिर भी हम अभी भी इन त्रुटियों को प्राप्त कर रहे हैं।
एनिमोनलाइन

@animaonline, यह मदद करता है अगर ऐप में वास्तव में 16-बिट या पी 3 संपत्ति हैं।
Aleksandr Terentev

2
मुझे लगता है कि मुख्य समस्या यह है कि किसी ने भी वास्तव में पुष्टि नहीं की है कि यह त्रुटि संपत्ति के कारण है।
एनिमोनलाइन

पहली बार में काम किया, लेकिन फिर नहीं, यह बस एक ही जगह पर दुर्घटनाग्रस्त नहीं होता है
CiNN

1
स्क्रिप्ट मेरे काम नहीं आई, लेकिन ImageOptim का उपयोग करते हुए
deej

16

मैं समस्या को पुन: उत्पन्न करने में सक्षम था और यह एसेट कैटलॉग में छवियों से संबंधित प्रतीत होता है। Apple के साथ एक बग दायर की (संलग्न नमूना परियोजना के साथ)

ऐप्पल बग रिपोर्टर: 28371396


मैं नमूना परियोजना डाउनलोड करने में सक्षम नहीं हूं। क्या आप दुर्घटना को पुन: पेश करने के लिए परियोजना साझा कर सकते हैं
तमिल

धन्यवाद। एसेट कैटलॉग से संबंधित मुद्दे, बस एडोब आरजीबी (1998) से एसआरजीबी में रंग स्थान बदलें।
तैमूर बर्निकोविच

13

संपूर्ण प्रोजेक्ट में प्रारूप को सही स्थानों पर और सफेद रिक्त स्थान में परिवर्तित करने के लिए संपादित स्क्रिप्ट:

#!/bin/bash
DIRECTORY=$1
echo "------------------------------"
echo "Passed Resources with xcassets folder argument is <$DIRECTORY>"
echo "------------------------------"
echo "Processing asset:"

find "$DIRECTORY" -name '*png' -print0 | while read -d $'\0' file; 
do 
    echo "---------$file"
    sips -m "/System/Library/Colorsync/Profiles/sRGB Profile.icc" "$file" --out "$file"
done

echo "------------------------------"
echo "script successfully finished"
echo "------------------------------"

1
यह लिपि थोड़ी अधिक सटीक है। Спасибо, Никита।
सील

1
यह एक आकर्षण की तरह काम करता है। सरल लेकिन प्रभावी स्क्रिप्ट। जो लोग इस लिपि को चलाना नहीं जानते हैं उनके लिए .. चरण: 1) इस स्क्रिप्ट को txt फ़ाइल में रखें और इसका नाम बदलकर AssetsScript.sh 2 करें) Goto Images.xcassets फ़ोल्डर को घेरना और स्क्रिप्ट फ़ाइल को रखना 3) कमांड लाइन में जाना उस फ़ोल्डर में जहां आपकी स्क्रिप्ट फ़ाइल 4 में मौजूद है) स्क्रिप्ट फ़ाइलों को एक्ज़ीक्यूटेबल में बदलें (chmod 755 AssetsScript.sh) 5) डायरेक्टरीनाम के साथ स्क्रिप्ट फ़ाइल को कमांड लाइन में ही पैरामीटर के रूप में निष्पादित करें (।/AssetsScript.sh Images .xcassets)। बूम यह आपकी सभी परिसंपत्तियों को आवश्यक प्रारूप में परिवर्तित करता है और किया जाता है। आवेदन अब ठीक काम करेगा।
श्रीवत्स

एक पंक्ति में while IFS= read -d '' -r file; do if [ $(file "$file" | grep -c '16-bit') -eq 1 ]; then sips -m '/System/Library/Colorsync/Profiles/sRGB Profile.icc' "$file"; fi done < <(find . -print0), जो सिर्फ 16-बिट छवि को 8-बिट में बदल देगा
डॉनटॉन्ग

3

वही मुद्दा।

मुझे यकीन नहीं है कि यह एक बग है, लेकिन यहां मेरा समाधान है: एडोब आरजीबी (1998) कलरस्पेस के बिना अपनी छवि संपत्ति सुनिश्चित करें

एक्सकोड में


1
आपका क्या अर्थ है? क्या आप विस्तृत कर सकते हैं?
एनिमोनलाइन

1
एडोब आरजीबी (1998) कलरस्पेस के साथ एक छवि दिखाते हुए मेरे लिए एक्सकोड 8 और स्विफ्ट 3 के साथ डिवाइस पर डिबग पर काम कर रहा था, लेकिन आईओएस 9 पर रिलीज नहीं हुआ था। कलरस्पेस को बदलने से यह काम कर गया।
एंड्रयू

1

इसी तरह की समस्या के साथ किसी और के लिए जोड़ना ...

ऐप iOS 9 पर क्रैश हो रहा था - स्टोरीबोर्ड ट्रांज़िशन के आस-पास / एक UIImage (नाम ...) को सेट करने के आसपास जो कुछ भी यादृच्छिक / लग रहा था, उस पर iOS 9.2 .. यह थ्रेड मिला: ( https://forums.developer.apple.com/thread/61643 )

यदि आपका ऐप iOS 8.4 को लक्षित कर रहा है, तो यह Xcode 8 में iOS 9.0 - 9.2 पर क्रैश हो जाएगा। xcassets के साथ कुछ करना है। तैनाती का लक्ष्य 8.2 या उससे नीचे (मैंने 8.0 का उपयोग किया) सेट करना मेरे लिए इसे निर्धारित किया। मजाक नहीं। सबसे खराब बग कभी।


नमस्ते। मदद! मैं कुछ इस तरह का अनुभव कर रहा हूं, केवल AppStore में। जब मैं आईओएस 9.2.1 के साथ सीधे आईफोन पर अपना ऐप बनाता हूं, तो यह क्रैश नहीं होता है, न ही सिम्युलेटर पर, लेकिन जब मैं सटीक एक ही संस्करण डाउनलोड करता हूं / ऐपस्टोर से बनाता है तो यह दुर्घटना करता है। क्या आपके साथ भी ऐसा था?
Sti

@Sti नहीं, यह डीबग बिल्ड में क्रैश हो रहा था। क्या आप कोर डेटा या किसी और चीज का उपयोग कर रहे हैं जो एक पुराने बिल्ड को ओवर-राइट करते समय एक समस्या हो सकती है? सिर्फ एक विचार।
कार्नेट

अच्छा विचार, और हाँ, मैं ऐप के कुछ हिस्सों में मुख्य डेटा का उपयोग कर रहा हूं। लेकिन बहुत परीक्षण के बाद मुझे पूरा यकीन है कि इसका उससे कोई लेना-देना नहीं है। कोर डेटा का मेरी छवियों से कोई लेना-देना नहीं है, और मेरे क्रैश रिपोर्टिंग सिस्टम से लगभग मेरे सभी स्टैक-निशान कहते हैं कि UIImage (imageNamed :) बुरा आदमी है। ओह, और यह साफ इंस्टॉल पर भी होता है। पिछले दो दिनों में 7000 से अधिक क्रैश, केवल 9.2.1 के माध्यम से iOS 9.0.2 को प्रभावित कर रहे हैं। iOS 9.3 या उसके बाद का नहीं। इतना अजीब। और तब नहीं होता जब मैं इसका निर्माण करता हूं। केवल AppStore। डिबग करना असंभव है। मैंने अभी-अभी Apple को TSI-टिकट भेजा।
Sti

ऊह। वह गुंडे है। बस एक और विचार था .. स्विफ्ट के किस संस्करण का उपयोग करके ऐप स्टोर है? मुझे लगता है कि मैंने स्विफ्ट 2.2 या 2.3 में इसका अनुभव किया। स्विफ्ट 3 नहीं। मुझे लगता है कि आप अब स्विफ्ट 3 के साथ निर्माण कर रहे हैं और इसे पुन: पेश नहीं कर सकते हैं?
1923 में 19 सितंबर को karnett

नहीं, लेकिन यह बहुत दिलचस्प है कि आप ऐसा कह रहे हैं! हमारे पास ऐप स्टोर पर यह ऐप लंबे समय से है। ऐप स्टोर पर पिछला संस्करण स्विफ्ट 2.3 में लिखा गया था और इस बग का अनुभव नहीं किया था। ऐप स्टोर पर यह नया संस्करण जो मैंने कुछ दिन पहले अपलोड किया था (जो दुर्घटनाग्रस्त हो गया है) में स्विफ्ट 3 में परिवर्तित होने सहित बहुत कम लेकिन बहुत बड़े बदलाव हुए हैं। एक और उल्लेखनीय बदलाव आईओएस 10. के लिए विशेष रूप से एक विजेट का जोड़ है
एसटीआई

0

अपनी परियोजना की जानकारी और समान लक्ष्य के अंदर iOS परिनियोजन लक्ष्य सेट करें ।

मेरे मामले में मेरा प्रोजेक्ट iOS 9.1 पर सेट किया गया था और लक्ष्य iOS 8.0 पर सेट किया गया था और iOS 8.4 के साथ सिम्युलेटर पर क्रैश हो रहा था

अब यह पूरी तरह से काम कर रहा है।

पुनश्च: फिर से चलने से पहले परियोजना को साफ करें।


0

यद्यपि प्रश्न का उत्तर पहले ही दिया जा चुका है, लेकिन मेरे लिए कोई समाधान नहीं है, क्योंकि मेरे पास कोई 16b / ch संपत्ति नहीं है।

मैंने पाया कि वह समस्या उन संपत्तियों के लिए प्रकट हुई, जो lzfseएल्गोरिथ्म का उपयोग करके संपीड़ित की गई थीं (आप का उपयोग करके संपीड़ित निकालने की जानकारी पा सकते हैं assetutil। दुर्भाग्य से एक्सकोड आईडीई डेवलपर्स को संपीड़न एल्गोरिदम को बदलने की अनुमति नहीं देता है, हालांकि आप ऐसा कर सकते हैं कि संपत्ति को मैन्युअल रूप से संकलित करें और actoolकमांड में तैनाती लक्ष्य को कम करें ।

tl; डॉ;

  1. पुरालेख
  2. खोलना ipa
  3. संपत्तियां संकलित करें - आप Xcode रिपोर्ट नाविक में संग्रह लॉग की जाँच करके xcode द्वारा उत्पन्न अपनी परियोजना के लिए संपत्ति संकलक आदेश पा सकते हैं

उदाहरण आदेश:

xcrun actool --output-format human-readable-text --notices --warnings --minimum-deployment-target 8.0 --output-partial-info-plist info_partial.plist --app-icon AppIcon --launch-image LaunchImage --enable-on-demand-resources YES --sticker-pack-identifier-prefix {bundle_id}.sticker-pack --target-device iphone --target-device ipad --platform iphoneos --product-type com.apple.product-type.application --compile #{path_to_directory_containing_Assets_car} Assets/Assets.xcassets

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