Xcode 9 Сбой при настройке текстуры в SKScene в Spritekit

Сейчас я создаю игру в Spritekit с Xcode. После обновления до Xcode 9 я обнаружил, что каждый раз, когда я устанавливаю текстуру через файл.sks, Xcode срабатывает мгновенно. Я перезапустил свой компьютер, обновил приложение, перезагрузил текстуры и ничего не изменил. У меня есть 199-дюймовый Macbook Prof 13 "с сенсорной панелью. Вот диагностика:

Process:               Xcode [577]
Path:                  /Applications/Xcode.app/Contents/MacOS/Xcode
Identifier:            com.apple.dt.Xcode
Version:               9.0.1 (13249)
Build Info:            IDEFrameworks-13249000000000000~2
App Item ID:           497799835
App External ID:       823984564
Code Type:             X86-64 (Native)
Parent Process:        ??? [1]
Responsible:           Xcode [577]
User ID:               501

Date/Time:             2017-10-22 17:30:06.029 -0400
OS Version:            Mac OS X 10.12.6 (16G29)
Report Version:        12
Anonymous UUID:        0537A8C3-9FB2-836A-088B-E5D2B7FEB3EB


Time Awake Since Boot: 100 seconds

System Integrity Protection: enabled

Crashed Thread:        0  Dispatch queue: SKCRenderer_resource_queue

Exception Type:        EXC_BAD_ACCESS (SIGBUS)
Exception Codes:       KERN_PROTECTION_FAILURE at 0x000000012ceef7b8
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Bus error: 10
Termination Reason:    Namespace SIGNAL, Code 0xa
Terminating Process:   exc handler [0]

VM Regions Near 0x12ceef7b8:
    MALLOC_LARGE           000000012ceaf000-000000012ceef000 [  256K] rw-/rwx SM=PRV  
--> mapped file            000000012ceef000-000000012cf22000 [  204K] r--/rw- SM=COW  
    MALLOC_LARGE           000000012cf31000-000000012cf71000 [  256K] rw-/rwx SM=PRV  

Application Specific Information:
Sending userDidChangeValue: to <SKInspectorTextureProperty: 0x7fadb2219440> from <NSComboBox: 0x7fadb221ad80>
ProductBuildVersion: 9A1004
Performing @selector(userDidChangeValue:) from sender NSComboBox 0x7fadb221ad80

Ответ 1

Я решил проблему с сбоем.

Проблема заключается в ваших изображениях @2x и @3x. С присутствующими в папке Assets.xcassets - SKS node приведет к сбою XCODE.

  • Добавить ТОЛЬКО 1x-изображение в папку Assets.xcassets.
  • поместите цвет node на вашу сцену SKS.
  • выберите текстуру
  • изменить размер текстуры.
  • добавьте ваши файлы @2x и @3x позже.

Это решение работает на 100% каждый раз.

Ответ 2

OHM, я нашел причину Это произойдет, если ваше изображение не будет равно соотношению с текущим размером skspritenode на раскадровке Удачи!

Ответ 3

Я нашел, что очистка сборки работала один раз и до того, что я поместил изображения в фотошоп и экспортировал их как PNG, а затем поместил их в папку с ресурсами и, похоже, работал некоторое время. Но поскольку Mojave и последнее обновление Xcode, похоже, больше не работают. Я уже представил 3 отчета о сбоях Apple, и мне понадобилось около часа, чтобы получить 2 спрайта с правильными текстурами на экране. Не хочу звучать грубо, но Apple должна перестать быть букетом апельсинов на этом, и получить исправлено как можно скорее!

Ответ 4

Я нашел обходное решение, которое может работать или не работать, оно не является надежным, но все же лучше, чем вообще не работает. Я создал пустой файл SKS и установил все мои текстуры в этом файле. Затем я скопировал и вставил node в предпочтительный файл SKS.

Ответ 5

Существует большое обходное решение на форумах Apple.

Как исправить файл .sks:

  • Откройте файл .sks вне проекта (закройте проект и откройте файл непосредственно из Finder)

  • Вы должны видеть красные кресты вместо спрайтов, удалять информацию о названии текстуры для всех из них.

  • Теперь вы сможете снова открыть файл из проекта.

  • Наконец, повторно введите имя текстуры для всех ваших спрайтов.

Ответ 6

У меня была эта проблема только с одной из моих текстур спрайтов, вызывающих сбой редактора спрайтов Xcode (даже после удаления изображений @2x и @3x). Он имел изображение DPI размером 300 пикселей/дюйм. Я изменил его на 72 пикселя/дюйм, что соответствует другим текстурам спрайтов. Больше нет крушения.

Я надеюсь, что это помогает кому-то. Эта ошибка в редакторе спрайтов Xcode существует для довольно многих версий Xcode и является настоящим убийцей производительности. Продолжайте отправлять отчеты об ошибках в яблоко.

Ответ 7

Разделите метаданные с изображения, прежде чем устанавливать его как текстуру.

Например, используя ImageMagick:

convert oldImage.png -strip newImage.png

Ответ 8

Основываясь на том, что говорят другие, и что, как мне кажется, исправить эту проблему, я полагаю, что проблема заключается в том, что разрешение изображений слишком велико для обработки визуального редактора. У меня были изображения, которые были намного больше, чем моя сцена (хотя в 72 PPI), и каждый раз я получал один и тот же крах, но когда я изменял их размер, чтобы их было меньше, проблем больше не было, и все, казалось, быстрее загружалось (до, для загрузки текстур потребуется несколько секунд). Я также использовал приложение ImageOptim для удаления данных EXIF.

Я передал сообщения Apple Dev Support, и я обновлю свой ответ, если они ответят на что-нибудь полезное.

Ответ 9

У меня была .xcassets и та же проблема, и то, что сработало для меня, заключалось в том, чтобы обойти все .xcassets. Я просто добавил папку в свой проект и импортировал изображения в папку. После этого назначение текстуры в редакторе сцены больше не разбилось Xcode

Ответ 10

Я думаю, что это связано с вашим компьютером: MacBook Pro (13-дюймовый, 2017), который также является моей рабочей станцией.

Я тестировал один и тот же проект (просто созданный игровым шаблоном с идентичным текстурным изображением) на следующих компьютерах с установленными Mojave 10.14 и Xcode 10.1:

Mac mini server (позднее 2012 г.) iMac, 27 (средний 2011) MacBook Pro, 13 (средний 2014) MacBook Air, 13 (средний 2014) MacBook Pro, 15 (средний уровень 2014). Все вышеперечисленные компьютеры работают хорошо.

Еще одна странная вещь случается, когда я проектирую свой MacBook Pro (13 дюймов, 2017) через AirPlay, он больше не падает.