Sự cố bản dựng Xcode 8 trên iOS 9.2 trở xuống


85

Khi tôi tạo ứng dụng của mình bằng Xcode 8 GM Seed và chạy trên thiết bị iOS 9.2 bên dưới HOẶC trình mô phỏng, tôi gặp lỗi EXC_BAD_ACCESS kỳ lạ trong khi khởi động ứng dụng hoặc vài giây sau khi ứng dụng khởi chạy. Sự cố luôn xảy ra ở một vị trí khác (thêm chế độ xem phụ, [UIImage imageNamed:]phương thức chính của đại biểu ứng dụng, v.v.). Tôi không gặp sự cố đó khi chạy trên iOS 9.3+ hoặc 10 và không gặp phải khi xây dựng bằng Xcode 7 và chạy trên iOS 9.2 trở xuống. Có ai khác trải nghiệm điều gì đó tương tự không? Đây có phải là sự cố đã biết với Xcode 8 không?


Đầu tiên, đặt lại nội dung của trình mô phỏng. và thử lại.
Mehul

3
Bạn có thể giải quyết vấn đề của mình không? Chúng tôi cũng đang gặp phải.
animaonline 12/09/16

Bạn có thể gửi một lỗi mới tại bugreport.apple.com, đồng thời đính kèm dự án mẫu và nhật ký sự cố để chúng tôi có thể điều tra không?
Quinn Taylor,

@QuinnTaylor - Tôi đã gửi báo cáo lỗi với dự án đính kèm (được sao chép 100% cho tôi trong trình mô phỏng) tại bugreport.apple.com # 28371396. Cảm ơn bạn đã xem xét điều này!
Evtim Georgiev

3
@EvtimGeorgiev Cảm ơn! Đây là một bản sao của một lỗi iOS liên quan đến hình ảnh P3 .png và cần được sửa trong SDK iOS 10.1 beta có trong Xcode 8.1 beta, được phát hành hôm nay. Bạn có thể thử xây dựng với cái đó không?
Quinn Taylor

Câu trả lời:


55

Xem câu trả lời được chấp nhận https://forums.developer.apple.com/thread/60919

Bạn có thể lưu nội dung 16 bit dưới dạng 8 bit với Preview.app

Cách giải quyết "LỖI ITMS-90682: Gói không hợp lệ - Danh mục nội dung tại 'Payload / XXXXX / Assets.car' không được chứa nội dung 16 bit hoặc P3 nếu ứng dụng hỗ trợ iOS 8 trở xuống."

Với Xcode 8 GM, lỗi này sẽ xảy ra nếu bạn bao gồm nội dung 16 bit hoặc P3 trong một lần gửi ứng dụng nhắm mục tiêu đến các bản phát hành iOS trước đó sau đó là iOS 9.3. Nếu ứng dụng của bạn yêu cầu chức năng màu rộng, bạn phải thay đổi Mục tiêu triển khai thành iOS 9.3 trở lên. Nếu ứng dụng của bạn không yêu cầu chức năng màu rộng và bạn muốn triển khai nó cho các phiên bản iOS cũ hơn thì bạn nên thay thế tất cả nội dung 16 bit hoặc P3 bằng nội dung sRGB 8 bit. Bạn có thể tìm nội dung 16-bit hoặc P3 bằng cách chạy “assetutil” trên danh mục nội dung có tên trong thông báo lỗi từ iTunes Connect. Các bước sau đây phác thảo quy trình:

  1. Tạo tệp .ipa có thể kiểm tra. Trong Trình tổ chức Xcode (Xcode-> Window-> Organizer), chọn một kho lưu trữ để kiểm tra, nhấp vào “Xuất ...” và chọn "Xuất cho Doanh nghiệp hoặc Triển khai Ad-Hoc". Thao tác này sẽ tạo một bản sao cục bộ của. tệp ipa cho ứng dụng của bạn.

  2. Tìm tệp .ipa đó và thay đổi phần mở rộng của nó thành .zip.

  3. Mở rộng tệp .zip. Điều này sẽ tạo ra một thư mục Payload chứa gói .app của bạn.

  4. Mở một thiết bị đầu cuối và thay đổi thư mục làm việc thành cấp cao nhất của đường dẫn cd gói .app của bạn / to / Payload / your.app

  5. Sử dụng công cụ tìm để định vị tệp Assets.car trong gói .app của bạn như được hiển thị bên dưới: tìm. -name 'Assets.car'

  6. Sử dụng công cụ assetutil để tìm bất kỳ nội dung 16-bit hoặc P3 nào, trong mỗi Assets.car mà ứng dụng của bạn có như hình dưới đây. :sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json

  7. Kiểm tra /tmp/Assets.json kết quả và tìm bất kỳ nội dung nào có chứa “DisplayGamut”: “P3” và “Tên” liên quan của nó. Đây sẽ là tên của tập hình ảnh của bạn chứa một hoặc nhiều nội dung 16-bit hoặc P3.

  8. Thay thế những nội dung đó bằng nội dung 8-bit / sRGB, sau đó xây dựng lại ứng dụng của bạn.

Cập nhật: Nếu Mục tiêu triển khai của bạn được đặt thành 8,3 hoặc 8,4 và bạn có danh mục nội dung thì bạn sẽ nhận được thông báo lỗi tương tự này, ngay cả khi bạn thực sự không có nội dung 16-bit hoặc P3. Trong trường hợp này, bạn sẽ cần phải giảm Mục tiêu triển khai của mình xuống 8,2 hoặc chuyển lên 9.x.


2
Điều này có liên quan như thế nào đến EXC_BAD_ACCESS?
animaonline 12/09/2016

1
Vui lòng không trùng lặp câu trả lời. Thay vào đó, hãy gắn cờ các câu hỏi là trùng lặp.
JAL

Cảm ơn bạn! Bạn đã tiết kiệm rất nhiều thời gian cho tôi với câu trả lời này! )
Thorax

3
Trong dự án của tôi (mục tiêu triển khai là 8.0) không có nội dung P3 nào mà tôi vẫn gặp sự cố trên ứng dụng hoặc ngẫu nhiên ở bất kỳ nơi nào với xcode 8. Tất cả nội dung đều là 8-bit / sRGB. Có ai vẫn còn phải đối mặt với vấn đề này cùng
Ankit

@Ankit, chúng tôi đang gặp phải vấn đề tương tự. Bạn đã tìm ra giải pháp chưa?
Roman Truba

32

Tôi hy vọng kịch bản bash này có thể giúp bạn. Đối số đầu vào là thư mục chứa tất cả các xcassets của dự án của bạn. Tập lệnh này sẽ đặt hồ sơ sRGB thành tất cả các pngs. Nó đã giúp đỡ tôi:)

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

Nội dung của chúng tôi không chứa bất kỳ hình ảnh bị lỗi nào, nhưng chúng tôi vẫn nhận được những lỗi này.
animaonline

@animaonline, Sẽ hữu ích nếu ứng dụng thực sự chứa nội dung 16-bit hoặc P3.
Aleksandr Terentev 19/09/16

2
Tôi nghĩ vấn đề chính là chưa ai khẳng định thực tế lỗi này là do tài sản.
animaonline

làm việc lúc đầu, nhưng sau đó không, nó chỉ không sụp đổ tại cùng một vị trí
CiNN

1
Tập lệnh không phù hợp với tôi, nhưng sử dụng ImageOptim thì có
deej 30/09/16

16

Tôi đã có thể tái tạo sự cố và nó có vẻ liên quan đến hình ảnh trong Danh mục nội dung. Đã sửa lỗi với Apple (với dự án mẫu đính kèm)

Báo cáo lỗi của Apple: 28371396


Tôi không thể tải xuống dự án mẫu. Bạn có thể chia sẻ dự án tái tạo sự cố không
Tamil,

Cảm ơn. Các vấn đề liên quan đến Danh mục nội dung, chỉ cần thay đổi không gian màu từ Adobe RGB (1998) thành sRGB.
Timur Bernikovich

13

đã chỉnh sửa tập lệnh để chuyển đổi tệp png sang định dạng chính xác trong toàn bộ dự án và có khoảng trắng:

#!/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
Kịch bản này chính xác hơn một chút. Спасибо, Никита.
seelts

1
Công việc này như một cái duyên vậy. Kịch bản đơn giản nhưng hiệu quả. Đối với những người không biết cách chạy tập lệnh này .. Các bước: 1) Đặt tập lệnh này vào tệp txt và đổi tên nó thành AssetsScript.sh 2) Thư mục bao quanh Goto Images.xcassets và giữ tệp tập lệnh 3) Trong dòng lệnh đi vào thư mục chứa tệp script của bạn 4) Thay đổi quyền của tệp script thành tệp thực thi (chmod 755 AssetsScript.sh) 5) thực thi tệp script với directoryName làm tham số trong chính dòng lệnh (./AssetsScript.sh Images.xcassets). Boom này chuyển đổi tất cả nội dung của bạn sang định dạng bắt buộc và hoàn thành. Ứng dụng bây giờ sẽ hoạt động tốt.
Srivathsa,

Trong một dòng, 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)mà sẽ chỉ chuyển đổi hình ảnh 16-bit đến 8-bit
DawnSong

3

cùng một vấn đề.

Tôi không chắc đây có phải là lỗi hay không nhưng đây là giải pháp của tôi: đảm bảo nội dung hình ảnh của bạn không có không gian màu Adobe RGB (1998)

trong xcode


1
Ý anh là gì? Bạn có thể giải thích?
animaonline 12/09/16

1
Hiển thị một hình ảnh với không gian màu Adobe RGB (1998) đang hoạt động đối với tôi khi gỡ lỗi trên thiết bị có Xcode 8 và Swift 3, nhưng không được phát hành trên iOS 9. Việc thay đổi không gian màu đã làm cho nó hoạt động.
Andrew

1

Đang thêm cho bất kỳ ai khác có vấn đề tương tự ...

Ứng dụng đã gặp sự cố trên iOS 9.0 - iOS 9.2 trên những gì có vẻ ngẫu nhiên / xung quanh chuyển đổi Bảng phân cảnh / xung quanh thiết lập UIImage (tên ...) .. Đã tìm thấy chủ đề này: ( https://forums.developer.apple.com/thread/61643 )

Nếu ứng dụng của bạn đang nhắm mục tiêu iOS 8.4, nó sẽ gặp sự cố trên iOS 9.0 - 9.2 trong Xcode 8 .. điều gì đó liên quan đến xcassets. Đặt mục tiêu triển khai thành 8.2 hoặc thấp hơn (tôi đã sử dụng 8.0) đã khắc phục sự cố cho tôi. Không đua đâu. Lỗi tồi tệ nhất bao giờ hết.


Chào. Cứu giúp! Tôi đang gặp sự cố như thế này, ngoại trừ CHỈ trong AppStore. Khi tôi tạo ứng dụng của mình trực tiếp trên iPhone với iOS 9.2.1, nó không bị lỗi, cũng như trên trình mô phỏng, nhưng khi tôi tải xuống phiên bản / bản dựng chính xác từ AppStore thì nó bị lỗi. Đây cũng là trường hợp của bạn phải không?
Sti

@Sti không, nó đã bị lỗi trong bản gỡ lỗi. Bạn đang sử dụng dữ liệu cốt lõi hay bất kỳ thứ gì khác có thể gặp sự cố khi ghi quá nhiều bản dựng cũ? Chỉ là một suy nghĩ.
karnett

Ý kiến ​​tốt và vâng, tôi đang sử dụng dữ liệu cốt lõi trong một số phần của ứng dụng. Nhưng sau rất nhiều thử nghiệm, tôi khá chắc chắn rằng nó không liên quan gì đến điều đó. Dữ liệu cốt lõi không liên quan gì đến hình ảnh của tôi và gần như tất cả các dấu vết ngăn xếp từ hệ thống báo cáo sự cố của tôi đều nói rằng UIImage (imageNamed :) là kẻ xấu. Ồ, và nó cũng xảy ra trên các bản cài đặt sạch. Hơn 7.000 sự cố trong hai ngày qua, chỉ ảnh hưởng đến iOS 9.0.2 đến 9.2.1 .. Không phải iOS 9.3 trở lên .. Thật kỳ lạ. Và không xảy ra khi tôi xây dựng nó bây giờ. Chỉ có AppStore. Không thể gỡ lỗi. Tôi vừa gửi TSI-ticket cho Apple.
Sti

Ồ. Đó là một trò đùa. Chỉ có một suy nghĩ khác .. Phiên bản cửa hàng ứng dụng đang sử dụng phiên bản Swift nào? Tôi nghĩ rằng tôi đã trải nghiệm điều này trong Swift 2.2 hoặc 2.3. Không phải Swift 3. Tôi tưởng tượng bạn đang xây dựng với Swift 3 và không thể tái tạo nó?
karnett

Không, nhưng rất thú vị khi bạn đang nói điều đó! Chúng tôi đã có ứng dụng này trên App Store trong một thời gian dài. Phiên bản trước trên App Store được viết bằng Swift 2.3 và không gặp lỗi này. Phiên bản mới này trên App Store mà tôi đã tải lên vài ngày trước (phiên bản bị lỗi) có rất ít thay đổi nhưng rất lớn, bao gồm cả việc được chuyển đổi sang Swift 3. Một thay đổi có thể nhắc đến khác là việc bổ sung một tiện ích dành riêng cho iOS 10.
Sti

0

Đặt Mục tiêu triển khai iOS bên trong Thông tin về dự án của bạn và tất cả các mục tiêu thành cùng một giá trị.

Trong trường hợp của tôi, Dự án của tôi được đặt thành iOS 9.1 và Mục tiêu được đặt thành iOS 8.0 và gặp sự cố trên Trình mô phỏng với iOS 8.4

Bây giờ nó đang hoạt động hoàn hảo.

Tái bút: Làm sạch dự án trước khi chạy lại.


0

Mặc dù câu hỏi đã được trả lời, nhưng giải pháp được chấp nhận không phù hợp với tôi, vì tôi không có bất kỳ nội dung 16b / ch nào.

Tôi thấy rằng vấn đề đã xuất hiện đối với các nội dung được nén bằng lzfsethuật toán (bạn có thể tìm thông tin về thông tin trích xuất nén từ Assets.car bằng cách sử dụng assetutil). Rất tiếc, Xcode IDE không cho phép nhà phát triển thay đổi thuật toán nén, tuy nhiên, bạn có thể làm điều đó bằng cách biên dịch nội dung theo cách thủ công và giảm mục tiêu triển khai trongactool lệnh.

tl; dr;

  1. Lưu trữ
  2. Giải nén ipa
  3. Biên dịch nội dung - Bạn có thể tìm thấy lệnh biên dịch nội dung cho dự án của mình được tạo bởi xcode bằng cách kiểm tra nhật ký lưu trữ trong trình điều hướng báo cáo Xcode

Lệnh ví dụ:

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. Zip nó.
  2. Từ chức
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.