Kiedy tworzę aplikację za pomocą Xcode 8 GM Seed i uruchamiam ją na urządzeniu z iOS 9.2 poniżej LUB na symulatorze, pojawiają się dziwne awarie EXC_BAD_ACCESS podczas uruchamiania aplikacji lub kilka sekund po uruchomieniu aplikacji. Awaria zawsze ma miejsce w innym miejscu (dodanie widoku podrzędnego, [UIImage imageNamed:]
główna metoda delegata aplikacji itp.). Nie dostaję tych awarii, gdy uruchamiam go na iOS 9.3+ lub 10 i nie dostaję ich, gdy kompiluję z Xcode 7 i uruchamiam na iOS 9.2 i starszym . Czy ktoś jeszcze doświadczył czegoś podobnego? Czy to znany problem z Xcode 8?
85
Odpowiedzi:
Zobacz zaakceptowaną odpowiedź https://forums.developer.apple.com/thread/60919
Możesz zapisać 16-bitowe zasoby jako 8-bitowe za pomocą Preview.app
źródło
Mam nadzieję, że ten skrypt bash może ci pomóc. Argumentem wejściowym jest katalog, który zawiera wszystkie xcassets twojego projektu. Ten skrypt ustawi profil sRGB na wszystkie pliki png. Pomogło mi :)
#!/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 "------------------------------"
źródło
Udało mi się odtworzyć problem i wydaje się, że jest on związany z obrazami w katalogu zasobów. Zgłoszono błąd w Apple (z załączonym przykładowym projektem)
Apple Bug Reporter: 28371396
źródło
edytowany skrypt do konwersji plików png do poprawnego formatu w całym projekcie i ze spacjami:
#!/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 "------------------------------"
źródło
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)
która po prostu skonwertuje obraz 16-bitowy na 8-bitowyten sam problem.
Nie jestem pewien, czy to błąd, ale oto moje rozwiązanie: upewnij się, że zasoby obrazu nie zawierają przestrzeni kolorów Adobe RGB (1998)
w xcode
źródło
Dodawanie dla kogokolwiek z podobnym problemem ...
Aplikacja ulegała awarii na iOS 9.0 - iOS 9.2 na czymś, co wydawało się przypadkowe / wokół przejść Storyboard / wokół ustawiania UIImage (nazwa ...) .. Znaleziono ten wątek: ( https://forums.developer.apple.com/thread/61643 )
Jeśli Twoja aplikacja jest przeznaczona dla systemu iOS 8.4, ulegnie awarii w systemie iOS 9.0 - 9.2 w Xcode 8 .. coś związanego z xcassets. Ustawienie celu wdrożenia na 8.2 lub mniej (użyłem 8.0) naprawiło to za mnie. Bez żartów. Najgorszy błąd w historii.
źródło
Ustaw cel wdrożenia systemu iOS w informacjach o projekcie i wszystkie cele na tę samą wartość.
W moim przypadku mój projekt był ustawiony na iOS 9.1, a cel został ustawiony na iOS 8.0 i zawieszał się na symulatorze z iOS 8.4
Teraz działa doskonale.
PS .: Wyczyść projekt przed ponownym uruchomieniem.
źródło
Chociaż odpowiedź na pytanie została już udzielona, zaakceptowane rozwiązanie nie działa dla mnie, ponieważ nie miałem żadnych zasobów 16b / ch.
Znalazłem ten problem w przypadku zasobów, które zostały skompresowane przy użyciu
lzfse
algorytmu (można znaleźć informacje o kompresji wydobywającej informacje z Assets.car za pomocąassetutil
). Niestety Xcode IDE nie pozwala programistom na zmianę algorytmu kompresji, jednak można to zrobić, kompilując zasoby ręcznie i obniżając cel wdrożenia wactool
poleceniu.tl; dr;
ipa
Przykładowe polecenie:
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
źródło