Xcode 8 build crash บน 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 หรือไม่


ขั้นแรกให้รีเซ็ตเนื้อหาของโปรแกรมจำลอง แล้วลองอีกครั้ง
Mehul

3
คุณสามารถแก้ไขปัญหาของคุณได้หรือไม่? เรากำลังมีมันเช่นกัน
animaonline

คุณสามารถยื่นข้อบกพร่องใหม่ที่ bugreport.apple.com และแนบโครงการตัวอย่างและบันทึกข้อขัดข้องเพื่อให้เราตรวจสอบได้หรือไม่
Quinn Taylor

@QuinnTaylor - ฉันได้ยื่นรายงานข้อบกพร่องพร้อมโครงการที่แนบมา (ทำซ้ำ 100% สำหรับฉันในโปรแกรมจำลอง) ที่ bugreport.apple.com # 28371396 ขอบคุณที่ตรวจสอบสิ่งนี้!
Evtim Georgiev

3
@EvtimGeorgiev ขอบคุณ! มันซ้ำกับข้อบกพร่องของ iOS ที่เกี่ยวข้องกับอิมเมจ P3 .png และควรได้รับการแก้ไขใน iOS 10.1 beta SDK ที่รวมอยู่ใน Xcode 8.1 beta ซึ่งเปิดตัวในวันนี้ ลองสร้างด้วยไหม
Quinn Taylor

คำตอบ:


55

ดูคำตอบที่ยอมรับhttps://forums.developer.apple.com/thread/60919

คุณสามารถบันทึกเนื้อหา 16 บิตเป็น 8 บิตด้วย Preview.app

วิธีแก้ไข "ERROR ITMS-90682: Invalid Bundle - แคตตาล็อกเนื้อหาที่" Payload / XXXXX / Assets.car "ไม่สามารถมีเนื้อหา 16 บิตหรือ P3 ได้หากแอปรองรับ iOS 8 หรือก่อนหน้า"

ด้วย Xcode 8 GM ข้อผิดพลาดนี้จะเกิดขึ้นหากคุณรวมเนื้อหา 16 บิตหรือ P3 ในการส่งแอปที่กำหนดเป้าหมาย iOS ออกก่อนหน้านั้นจากนั้น iOS 9.3 หากแอปของคุณต้องการฟังก์ชันสีที่กว้างคุณต้องเปลี่ยน Deployment Target เป็น iOS 9.3 หรือใหม่กว่า หากแอปของคุณไม่ต้องการฟังก์ชันสีที่กว้างและคุณต้องการปรับใช้กับ iOS เวอร์ชันเก่าคุณควรแทนที่เนื้อหา 16 บิตหรือ P3 ทั้งหมดด้วยเนื้อหา 8 บิต sRGB คุณสามารถค้นหาเนื้อหา 16 บิตหรือ P3 ได้โดยเรียกใช้“ assetutil” ในแค็ตตาล็อกเนื้อหาที่มีชื่ออยู่ในข้อความแสดงข้อผิดพลาดจาก iTunes Connect ขั้นตอนต่อไปนี้สรุปกระบวนการ:

  1. สร้างไฟล์. ipa ที่ตรวจสอบได้ ใน Xcode Organizer (Xcode-> Window-> Organizer) เลือกที่เก็บถาวรเพื่อตรวจสอบคลิก“ ส่งออก ... ” และเลือก "ส่งออกสำหรับองค์กรหรือการปรับใช้งาน Ad-Hoc" ซึ่งจะสร้างสำเนาภายในของไฟล์. ipa สำหรับแอปของคุณ

  2. ค้นหาไฟล์. ipa และเปลี่ยนนามสกุลเป็น. zip

  3. ขยายไฟล์. zip สิ่งนี้จะสร้างโฟลเดอร์ Payload ที่มีบันเดิล. app ของคุณ

  4. เปิดเทอร์มินัลและเปลี่ยนไดเร็กทอรีการทำงานไปที่ระดับบนสุดของ. app บันเดิลพา ธ cd / to / Payload / your.app

  5. ใช้เครื่องมือค้นหาเพื่อค้นหาไฟล์ Assets.car ในบันเดิล. app ของคุณดังที่แสดงด้านล่าง: ค้นหา - ชื่อ 'Assets.car'

  6. ใช้เครื่องมือ assetutil เพื่อค้นหาเนื้อหา 16 บิตหรือ P3 ในแต่ละ Assets.car แอปพลิเคชันของคุณมีดังที่แสดงด้านล่าง :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 บิตหรือ P3 ก็ตาม ในกรณีนี้คุณจะต้องลด Deployment Target เป็น 8.2 หรือเลื่อนขึ้นเป็น 9.x


2
สิ่งนี้เกี่ยวข้องกับ EXC_BAD_ACCESS อย่างไร
animaonline

1
โปรดอย่าให้คำตอบซ้ำกัน ให้ตั้งค่าสถานะคำถามว่าซ้ำกันแทน
JAL

ขอบคุณคน! คุณประหยัดเวลาสำหรับฉันด้วยคำตอบนี้! )
ทรวงอก

3
ในโปรเจ็กต์ของฉัน (เป้าหมายการปรับใช้คือ 8.0) ไม่มีเนื้อหา P3 ที่ยังคงเกิดข้อขัดข้องในแอปหรือสุ่มที่ใด ๆ ด้วย xcode 8 เนื้อหาทั้งหมดเป็น 8 บิต / sRGB มีใครยังประสบปัญหาเดียวกันนี้
บ้างไหม

@Ankit เรากำลังประสบปัญหาเดียวกัน คุณพบวิธีแก้ปัญหาแล้วหรือยัง?
Roman Truba

32

ฉันหวังว่าสคริปต์ทุบตีนี้อาจช่วยคุณได้ อาร์กิวเมนต์อินพุตเป็นไดเร็กทอรีที่มี xcassets ทั้งหมดของโปรเจ็กต์ของคุณ สคริปต์นี้จะตั้งค่าโปรไฟล์ sRGB เป็น png ทั้งหมด มันช่วยฉัน :)

#!/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

@animaonline ช่วยได้หากแอปมีเนื้อหา 16 บิตหรือ P3 จริงๆ
Aleksandr Terentev

2
ฉันคิดว่าปัญหาหลักคือไม่มีใครยืนยันได้จริงว่าข้อผิดพลาดนี้เกิดจากสินทรัพย์
animaonline

ทำงานในตอนแรก แต่ไม่ใช่มันก็ไม่ผิดพลาดในที่เดียวกัน
CiNN

1
สคริปต์ไม่ได้ผลสำหรับฉัน แต่การใช้ ImageOptim ทำได้
deej

16

ฉันสามารถสร้างปัญหาซ้ำได้และดูเหมือนว่าจะเกี่ยวข้องกับรูปภาพในแคตตาล็อกเนื้อหา ยื่นข้อบกพร่องกับ Apple (พร้อมแนบโครงการตัวอย่าง)

Apple Bug Reporter: 28371396


ฉันไม่สามารถดาวน์โหลดโครงการตัวอย่างได้ คุณช่วยแชร์โครงการสร้างความผิดพลาดได้ไหม
ทมิฬ

ขอบคุณ. ปัญหาที่เกี่ยวข้องกับแคตตาล็อกสินทรัพย์เพียงแค่เปลี่ยนพื้นที่สีจาก Adobe RGB (1998) เป็น sRGB
Timur Bernikovich

13

แก้ไขสคริปต์เพื่อแปลงไฟล์ png เป็นรูปแบบที่ถูกต้องในโครงการทั้งหมดและมีช่องว่างสีขาว:

#!/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
คริปนี้ถูกต้องกว่าเล็กน้อย Спасибо, Никита.
seelts

1
การทำงานนี้เหมือนมีเสน่ห์ สคริปต์ที่เรียบง่าย แต่มีประสิทธิภาพ สำหรับคนที่ไม่รู้วิธีเรียกใช้สคริปต์นี้ .. ขั้นตอน: 1) ใส่สคริปต์นี้ในไฟล์ txt และเปลี่ยนชื่อเป็น AssetsScript.sh 2) Goto Images.xcassets ล้อมโฟลเดอร์และเก็บไฟล์สคริปต์ไว้ 3) ในบรรทัดคำสั่ง go ไปยังโฟลเดอร์ที่ไฟล์สคริปต์ของคุณมีอยู่ 4) เปลี่ยนสิทธิ์ของไฟล์สคริปต์เป็นไฟล์ที่เรียกใช้งานได้ (chmod 755 AssetsScript.sh) 5) เรียกใช้ไฟล์สคริปต์ด้วย directoryName เป็นพารามิเตอร์ในบรรทัดคำสั่งเอง (./AssetsScript.sh Images.xcassets) บูมสิ่งนี้จะแปลงสินทรัพย์ทั้งหมดของคุณเป็นรูปแบบที่ต้องการและเสร็จสิ้น ตอนนี้แอปพลิเคชันจะทำงานได้ดี
Srivathsa

ในบรรทัดเดียว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 บิต
DawnSong

3

ปัญหาเดียวกัน.

ฉันไม่แน่ใจว่านี่เป็นข้อบกพร่องหรือไม่ แต่นี่คือวิธีแก้ปัญหาของฉัน: ตรวจสอบให้แน่ใจว่าเนื้อหาภาพของคุณไม่มี Adobe RGB (1998) colorspace

ใน xcode


1
คุณหมายถึงอะไร? คุณช่วยอธิบายได้ไหม?
animaonline

1
การแสดงภาพด้วย Adobe RGB (1998) colorspace ใช้งานได้สำหรับฉันในการดีบักบนอุปกรณ์ที่มี Xcode 8 และ Swift 3 แต่ไม่ได้วางจำหน่ายบน iOS 9 การเปลี่ยน colorpace ทำให้มันใช้งานได้
แอนดรู

1

กำลังเพิ่มสำหรับคนอื่นที่มีปัญหาคล้ายกัน ...

แอพขัดข้องบน iOS 9.0 - iOS 9.2 ในสิ่งที่ดูเหมือนสุ่ม / รอบการเปลี่ยน Storyboard / รอบการตั้งค่า UIImage (ชื่อ ... ) .. พบหัวข้อนี้: ( https://forums.developer.apple.com/thread/61643 )

หากแอปของคุณกำหนดเป้าหมายเป็น iOS 8.4 แอปจะขัดข้องบน iOS 9.0 - 9.2 ใน Xcode 8 .. บางอย่างเกี่ยวกับ xcassets การตั้งค่าเป้าหมายการปรับใช้เป็น 8.2 หรือต่ำกว่า (ฉันใช้ 8.0) แก้ไขให้ฉัน ไม่ได้ล้อเล่น. ข้อผิดพลาดที่เลวร้ายที่สุดที่เคยมีมา


สวัสดี. ช่วยด้วย! ฉันประสบปัญหาเช่นนี้ยกเว้นเฉพาะใน AppStore เมื่อฉันสร้างแอพของฉันโดยตรงบน iPhone ที่มี iOS 9.2.1 มันจะไม่ขัดข้องหรือในโปรแกรมจำลอง แต่เมื่อฉันดาวน์โหลดเวอร์ชัน / บิลด์เดียวกันจากAppStoreมันจะเกิดปัญหา กรณีนี้กับคุณด้วยหรือไม่?
Sti

@Sti ไม่มันขัดข้องในการสร้างดีบัก คุณใช้ข้อมูลหลักหรือสิ่งอื่นใดที่อาจมีปัญหาเมื่อเขียนโครงสร้างเก่ามากเกินไปหรือไม่? เพียงแค่ความคิด
karnett

คิดดีแล้วฉันกำลังใช้ข้อมูลหลักในบางส่วนของแอป แต่หลังจากการทดสอบหลายครั้งฉันค่อนข้างแน่ใจว่ามันไม่เกี่ยวข้องกับสิ่งนั้น ข้อมูลหลักไม่มีส่วนเกี่ยวข้องกับรูปภาพของฉันและสแต็กเทรซเกือบทั้งหมดของฉันจากระบบรายงานข้อขัดข้องของฉันบอกว่า UIImage (imageNamed :) เป็นคนเลว โอ้และมันก็เกิดขึ้นกับการติดตั้งใหม่ทั้งหมดเช่นกัน เกิดปัญหามากกว่า 7000 ครั้งในสองวันที่ผ่านมามีผลเฉพาะ iOS 9.0.2 ถึง 9.2.1 .. ไม่ใช่ iOS 9.3 ขึ้นไป .. แปลกมาก และไม่เกิดขึ้นเมื่อฉันสร้างมันตอนนี้ AppStore เท่านั้น ไม่สามารถแก้ไขข้อบกพร่องได้ ฉันส่งตั๋ว TSI ไปให้ Apple แล้ว
Sti

โอ. นั่นคือความเหนอะหนะ เพิ่งมีความคิดว่า .. Swift เวอร์ชั่นไหนใช้แอพสโตร์เวอร์ชั่นไหน? ฉันคิดว่าฉันพบสิ่งนี้ใน Swift 2.2 หรือ 2.3 ไม่ใช่ Swift 3 ฉันคิดว่าตอนนี้คุณกำลังสร้าง Swift 3 และไม่สามารถสร้างซ้ำได้?
karnett

ไม่ แต่น่าสนใจมากที่คุณกำลังพูดแบบนั้น! เรามีแอพนี้บน App Store มานานแล้ว เวอร์ชันก่อนหน้าบน App Store เขียนด้วย Swift 2.3 และไม่พบข้อบกพร่องนี้ เวอร์ชันใหม่บน App Store ที่ฉันอัปโหลดเมื่อไม่กี่วันที่ผ่านมา (เวอร์ชันที่ขัดข้อง) มีการเปลี่ยนแปลงน้อยมาก แต่มีขนาดใหญ่มากรวมถึงการแปลงเป็น Swift 3 การเปลี่ยนแปลงที่กล่าวถึงอีกประการหนึ่งคือการเพิ่มวิดเจ็ตเฉพาะสำหรับ iOS 10
Sti

0

ตั้งค่าเป้าหมายการปรับใช้ iOSภายในข้อมูลของโครงการของคุณและเป้าหมายทั้งหมดเป็นค่าเดียวกัน

ในกรณีของฉันโครงการของฉันถูกตั้งค่าเป็นiOS 9.1และเป้าหมายถูกตั้งค่าเป็นiOS 8.0และหยุดทำงานบน Simulator กับiOS 8.4

ตอนนี้มันทำงานได้อย่างสมบูรณ์

PS: ทำความสะอาดโครงการก่อนดำเนินการอีกครั้ง


0

แม้ว่าคำถามจะได้รับคำตอบแล้ว แต่โซลูชันที่ได้รับการตอบรับก็ไม่ได้ผลสำหรับฉันเนื่องจากฉันไม่มีเนื้อหา 16b / ch

ฉันพบว่าปัญหานี้ปรากฏขึ้นสำหรับเนื้อหาที่บีบอัดโดยใช้lzfseอัลกอริทึม (คุณสามารถค้นหาข้อมูลเกี่ยวกับการบีบอัดข้อมูลการดึงข้อมูลจาก Assets.car โดยใช้assetutil) น่าเสียดายที่ Xcode IDE ไม่อนุญาตให้นักพัฒนาเปลี่ยนอัลกอริธึมการบีบอัดอย่างไรก็ตามคุณสามารถทำได้โดยการรวบรวมเนื้อหาด้วยตนเองและลดเป้าหมายการปรับใช้ในactoolคำสั่ง

tl; dr;

  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. ลาออก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.