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.