İOS 9.2 ve altı sürümlerde Xcode 8 derleme çökmesi


85

Uygulamamı Xcode 8 GM Seed ile oluşturduğumda ve onu cihaz veya simülatörün altındaki bir iOS 9.2 üzerinde çalıştırdığımda, uygulama başlatılırken veya uygulama başlatıldıktan birkaç saniye sonra garip EXC_BAD_ACCESS çökmeleri alıyorum. Kilitlenme her zaman farklı bir noktada gerçekleşir (alt görünüm [UIImage imageNamed:], uygulama temsilcisinin ana yöntemi vb. Ekleme ). Ben iOS 9.3+ veya 10 çalıştırın ve ne zaman onları alamadım da bu sonuçları çöküyor alamadım inşa Xcode 7 ile ve aşağıda iOS 9.2 ve üzerinde çalışan. Başka biri benzer bir deneyim yaşadı mı? Bu, Xcode 8 ile ilgili bilinen bir sorun mu?


İlk olarak, simülatörün içeriğini sıfırlayın. ve yeniden dene.
Mehul

3
Sorununuzu çözebildiniz mi? Biz de yapıyoruz.
animaonline

Bugreport.apple.com adresinde yeni bir hata dosyası oluşturabilir ve araştırma yapabilmemiz için örnek proje ve kilitlenme günlüklerini ekleyebilir misiniz?
Quinn Taylor

@QuinnTaylor - Bugreport.apple.com # 28371396 adresinde ekli projeyle (simülatörde benim için% 100 yeniden oluşturuldu) bir hata raporu dosyaladım. Buna baktığınız için teşekkür ederiz!
Evtim Georgiev

3
@EvtimGeorgiev Teşekkürler! P3 .png görüntüleriyle ilgili bir iOS hatasının kopyasıdır ve bugün piyasaya sürülen Xcode 8.1 beta'da bulunan iOS 10.1 beta SDK'da düzeltilmelidir. Bununla inşa etmeyi deneyebilir misin?
Quinn Taylor

Yanıtlar:


55

Kabul edilen yanıta bakın https://forums.developer.apple.com/thread/60919

Preview.app ile 16 bit varlıkları 8 bit olarak kaydedebilirsiniz

"ERROR ITMS-90682: Invalid Bundle -" Payload / XXXXX / Assets.car "adresindeki varlık kataloğu, uygulama iOS 8 veya önceki bir sürümünü destekliyorsa 16 bit veya P3 varlıkları içeremez."

Xcode 8 GM ile, iOS 9.3'ten önceki iOS sürümlerini hedefleyen bir uygulama gönderimine 16 bit veya P3 varlıkları eklerseniz bu hata oluşur. Uygulamanız geniş renk işlevselliği gerektiriyorsa, Dağıtım Hedefinizi iOS 9.3 veya sonraki bir sürüme değiştirmeniz gerekir. Uygulamanız geniş renk işlevselliği gerektirmiyorsa ve daha eski iOS sürümlerine dağıtmak istiyorsanız, tüm 16 bit veya P3 varlıklarını 8 bit sRGB varlıklarla değiştirmelisiniz. İTunes Connect'ten gelen hata mesajında ​​adı geçen varlık kataloğunda “assetutil” i çalıştırarak 16 bit veya P3 varlıkları bulabilirsiniz. Aşağıdaki adımlar süreci özetlemektedir:

  1. İncelenebilir bir .ipa dosyası oluşturun. Xcode Düzenleyicide (Xcode-> Pencere-> Düzenleyici), incelemek için bir arşiv seçin, "Dışa Aktar ..." öğesini tıklayın ve "Kurumsal veya Ad-Hoc Dağıtım için Dışa Aktar" seçeneğini seçin. Bu,. uygulamanız için ipa dosyası.

  2. Bu .ipa dosyasını bulun ve uzantısını .zip olarak değiştirin.

  3. .Zip dosyasını genişletin. Bu, .app paketinizi içeren bir Yük klasörü oluşturacaktır.

  4. Bir terminal açın ve çalışma dizinini .app bundle cd yol / to / Payload / your.app'inizin en üst seviyesine değiştirin

  5. App paketinizdeki Assets.car dosyalarını aşağıda gösterildiği gibi bulmak için bulma aracını kullanın: bul. -name 'Assets.car'

  6. Aşağıda gösterildiği gibi, uygulamanızın sahip olduğu her Assets.car'da 16 bitlik veya P3 varlıklarını bulmak için assetutil aracını kullanın. :sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json

  7. Elde edilen /tmp/Assets.json dosyasını inceleyin ve "DisplayGamut": "P3" ve bununla ilişkili "Ad" içeren içerikleri arayın. Bu, bir veya daha fazla 16 bit veya P3 varlık içeren görüntü kümenizin adı olacaktır.

  8. Bu varlıkları 8 bit / sRGB varlıklarla değiştirin, ardından uygulamanızı yeniden oluşturun.

Güncelleme: Dağıtım Hedefiniz 8.3 veya 8.4 olarak ayarlanmışsa ve bir varlık kataloğunuz varsa, gerçekte 16 bit veya P3 varlıklarınız olmasa bile aynı hata mesajını alırsınız. Bu durumda, Dağıtım Hedefinizi 8.2'ye düşürmeniz veya 9.x'e taşımanız gerekecektir.


2
Bunun EXC_BAD_ACCESS ile ilişkisi nedir?
animaonline

1
Lütfen cevapları çoğaltmayın. Bunun yerine, soruları yinelenen olarak işaretleyin.
JAL

Teşekkür ederim dostum! Bu cevapla benim için tonlarca zaman kazandın! )
Toraks

3
Projemde (dağıtım hedefi 8.0) P3 varlığı yok hala uygulamada veya rastgele herhangi bir yerde xcode 8 ile çöküyorum. Tüm varlıklar 8-bit / sRGB'dir. Hala aynı sorunla karşılaşan var mı
Ankit

@Ankit aynı sorunla karşı karşıyayız. Henüz çözüm buldunuz mu?
Roman Truba

32

Umarım bu bash betiği size yardımcı olabilir. Girdi argümanı, projenizin tüm xcassetlerini içeren dizindir. Bu komut dosyası, sRGB profilini tüm png'lere ayarlayacaktır. Bana yardımcı oldu:)

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

Varlıklarımız herhangi bir hatalı resim içermiyor, ancak yine de bu hataları alıyoruz.
animaonline

@animaonline, Uygulamanın gerçekten 16 bit veya P3 varlıkları içeriyorsa yardımcı olur.
Aleksandr Terentev

2
Bence asıl sorun, hiç kimsenin bu hatanın varlıklardan kaynaklandığını doğrulamamış olmasıdır.
animaonline

ilk önce çalıştı, ama sonra değil, aynı yerde
çökmüyor

1
Komut dosyası benim için işe yaramadı, ancak
ImageOptim

16

Sorunu yeniden oluşturabildim ve Varlık Kataloğundaki resimlerle ilgili görünüyor. Apple ile bir hata kaydetti (ekli örnek proje ile)

Apple Hata Muhabiri: 28371396


Örnek projeyi indiremiyorum.
Tamil

Teşekkürler. Varlık Kataloğu ile ilgili sorunlar, sadece renk uzayını Adobe RGB'den (1998) sRGB'ye değiştirin.
Timur Bernikovich

13

png dosyalarını tüm projede ve beyaz boşluklarla doğru biçime dönüştürmek için düzenlenmiş komut dosyası:

#!/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
Bu komut dosyası biraz daha doğrudur. Спасибо, Никита.
2016

1
Bu bir cazibe gibi çalışıyor. Basit ama etkili bir betik. Bu betiği nasıl çalıştıracağını bilmeyenler için .. Adımlar: 1) Bu betiği txt dosyasına koyun ve AssetsScript.sh olarak yeniden adlandırın 2) Goto Images.xcassets klasörünü çevreleyin ve komut dosyasını saklayın 3) Komut satırında gidin komut dosyanızın bulunduğu klasöre 4) Komut dosyası izinlerini çalıştırılabilir olarak değiştirin (chmod 755 AssetsScript.sh) 5) komut satırının kendisinde parametre olarak directoryName ile komut dosyası çalıştırın (./AssetsScript.sh Images.xcassets). Boom bu, tüm varlıklarınızı gerekli biçime dönüştürür ve yapılır. Uygulama artık iyi çalışacak.
Srivathsa

Tek satırda, 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 bit görüntüyü 8 bit'e dönüştürecek
DawnSong

3

aynı sorun.

Bunun bir hata olup olmadığından emin değilim ama işte benim çözümüm: Adobe RGB (1998) renk alanı olmadan görüntü varlıklarınızın olduğundan emin olun

xcode'da


1
Ne demek istiyorsun? Detaylandırır mısın
animaonline

1
Adobe RGB (1998) renk uzayına sahip bir görüntüyü göstermek benim için Xcode 8 ve Swift 3 içeren bir cihazda hata ayıklamada çalışıyordu, ancak iOS 9'da yayınlanmıyordu. Renk alanını değiştirmek işe yaradı.
Andrew

1

Benzer bir sorunu olan herkes için ekleniyor ...

Uygulama iOS 9.0 üzerinde çökmesini - Storyboard geçişleri etrafında rasgele / görünüyordu üzerinde iOS 9.2 / etrafında UIImage ayarı (adını ...) .. Konuyu Bulunan: ( https://forums.developer.apple.com/thread/61643 )

Uygulamanız iOS 8.4'ü hedefliyorsa, Xcode 8'de iOS 9.0 - 9.2'de çökecektir .. xcassets ile ilgili bir şey. Dağıtım hedefini 8.2 veya altına ayarlamak (8.0 kullandım) benim için düzeltildi. Şaka yapmıyorum. Şimdiye kadarki en kötü böcek.


Selam. Yardım! YALNIZCA AppStore dışında böyle bir şey yaşıyorum. Uygulamamı doğrudan iOS 9.2.1 ile bir iPhone üzerinde oluşturduğumda, çökmüyor veya simülatörde değil, ancak aynı sürümü / yapıyı AppStore'dan indirdiğimde çöküyor. Bu senin için de geçerli miydi?
Sti

@Sti hayır, hata ayıklama yapısında çöküyordu. Eski bir yapının üzerine yazarken sorun yaratabilecek temel verileri veya başka herhangi bir şeyi kullanıyor musunuz? Sadece bir düşünce.
karnett

İyi fikir ve evet, uygulamanın bazı bölümlerinde temel verileri kullanıyorum. Ancak birçok testten sonra bunun bununla hiçbir ilgisi olmadığından oldukça eminim. Çekirdek verilerin resimlerimle hiçbir ilgisi yok ve çökme raporlama sistemimdeki yığın izlerimin neredeyse tamamı UIImage'ın (imageNamed :) kötü adam olduğunu söylüyor. Oh, ve temiz kurulumlarda da oluyor. Son iki günde 7000'den fazla kilitleniyor, yalnızca iOS 9.0.2 ile 9.2.1'i etkiliyor. İOS 9.3 veya sonraki sürümleri değil .. Çok tuhaf. Ve şimdi inşa ettiğimde olmuyor. Yalnızca AppStore. Hata ayıklamak imkansız. Az önce Apple'a bir TSI bileti gönderdim.
Sti

Ooh. Bu bir yapışkan. Aklıma başka bir şey geldi .. Uygulama mağazası sürümü Swift'in hangi sürümünü kullanıyor? Sanırım bunu Swift 2.2 veya 2.3'te yaşadım. Swift 3 değil. Şimdi Swift 3 ile inşa ettiğinizi ve onu yeniden üretemediğinizi düşünüyorum.
karnett

Hayır, ama bunu söylemen çok ilginç! Bu uygulamayı App Store'da uzun süredir kullanıyoruz. App Store'daki önceki sürüm Swift 2.3 ile yazılmıştı ve bu hatayı yaşamadı. Birkaç gün önce yüklediğim App Store'daki bu yeni sürümde (çökmekte olan sürüm) Swift 3'e dönüştürülmek de dahil olmak üzere çok az ama çok büyük değişiklik var. Bir diğer kayda değer değişiklik, yalnızca iOS 10 için bir widget eklenmesi.
Sti

0

Set iOS Dağıtım Hedef içeride Bilgi aynı değere projenizin ve tüm hedefleri.

Benim durumumda Projem iOS 9.1'e ayarlandı ve Hedef iOS 8.0'a ayarlandı ve iOS 8.4 ile Simulator'de çöküyordu

Şimdi mükemmel çalışıyor.

Not: Tekrar çalıştırmadan önce projeyi temizleyin.


0

Soru zaten cevaplanmış olmasına rağmen, 16b / ch varlığım olmadığı için kabul edilen çözüm benim için işe yaramıyor.

lzfseAlgoritma kullanılarak sıkıştırılan varlıklar için bu sorunun ortaya çıktığını buldum (Assets.car'dan bilgi ayıklama bilgilerini kullanarak sıkıştırma hakkında bilgi bulabilirsiniz assetutil). Maalesef Xcode IDE, geliştiricilerin sıkıştırma algoritmasını değiştirmesine izin vermez, ancak bunu, varlıkları manuel olarak derleyerek ve actoolkomutta dağıtım hedefini düşürerek yapabilirsiniz .

tl; dr;

  1. Arşiv
  2. Fermuarı aç ipa
  3. Varlıkları derleyin - Xcode rapor gezgininde arşiv günlüklerini kontrol ederek xcode tarafından oluşturulan projeniz için varlık derleyici komutunu bulabilirsiniz.

Örnek komut:

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. Sıkıştır onu.
  2. İstifa etmek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.