Подкласс IBDesignable UIView всегда не отображается в построителе интерфейсов

Я вижу ряд вопросов по этому поводу, но мало ответов (один ответ решил предыдущую аналогичную проблему, но не этот) .

ПРОБЛЕМА

У меня есть класс IBDesignable. Он происходит от UIControl, но то же самое происходит, если я получаю от UIView.

В основном это выглядит так:

@IBDesignable
open class RVS_Checkbox: UIControl { ... }

Он отлично работает (ссылка ведет на этот проект, который является вставным классом UIControl).

Но он не будет отображаться в Interface Builder. Я получаю эту ошибку:

Ошибка, которую я получаю

Вот ошибка, дословно:

The built product "/Volumes/Development/Developer/Xcode/DerivedData/RVS_Checkbox-ficjiiqrddckmjenmsrbrxvihaky/Build/Intermediates.noindex/IBDesignables/Products/Debug-appletvsimulator/RVS_Checkbox" does not exist in the file system. Make sure your built products contains either an application or a framework product.

Во-первых, это ошибка tvOS, и это класс только для iOS. У меня была похожая проблема раньше, и этот ответ решил ее для меня. Я завернул код в #if...#else...#endif, вот так:

#if os(iOS)
    @IBDesignable
    open class RVS_Checkbox: UIControl { ... }
#else
    @IBDesignable
    class RVS_Checkbox: UIView { }
#endif

Я даже дал ему пустой заполнитель на случай, если его нужно будет придержать.

Нет игральных костей. Что бы я ни делал, ошибка IB все равно возникает, и элемент не отображается.

Как я уже сказал, он по-прежнему работает нормально, а также отображает надлежащие проверяемые свойства:

Инспектируемые

но он не будет отображаться.

Вот ошибка рядом с каталогом, на который он жалуется:

Окно ошибок и поиска

Я уверен, что делаю что-то не так, но понятия не имею, что. Я пытался удалить DerivedData, очистить проект, попробовал все 4 цели и т. д.

Нет игральных костей.

Любые идеи?


person Chris Marshall    schedule 21.03.2021    source источник
comment
Начинает казаться, что это может быть проблема с Xcode 12, и она не будет решена, пока я, наконец, не получу Mac M1X/M2 в конце этого года. Большинство разговоров, которые я видел об этой проблеме, указывают на это (и я еще не видел никаких реальных решений). Это не так серьезно.   -  person Chris Marshall    schedule 22.03.2021
comment
Ну... перекати-поле сильны в этом. Я отправил запрос DTS (я никогда не использую их, так почему бы и нет?).   -  person Chris Marshall    schedule 22.03.2021
comment
Все больше похоже, что это проблема с Xcode, и Apple не торопится ее решать. Похоже, это связано со сложностью файла IB. Я не могу заставить это произойти с простыми проектами, но как только они начинают усложняться, я получаю сообщение об ошибке. Возможно, мне не стоит пытаться продолжить расследование.   -  person Chris Marshall    schedule 24.03.2021


Ответы (1)


ХОРОШО. Я понял. Это ошибка в Xcode. Я представил отчет.

Если я открою проект на внутреннем диске, управление отобразится без проблем.

Если я открою проект на внешнем диске, он не отобразится.

Очень странно, но я смог воспроизвести это в 100% случаев, используя очень простой проект.

Я подозреваю, что большинство разработчиков просто покупают Mac с большими внутренними дисками и занимаются разработкой на них. Мне нужно было получить один с ограниченным внутренним диском, поэтому я использую один из этих крикунов SanDisk в качестве внешнего для моей разработки.

Интересно, с какими еще проблемами я могу столкнуться? Я считаю Xcode довольно глючным.

ОБНОВЛЕНИЕ: я прилагаю два снимка экрана, использованных в отчете об ошибке.

Это демонстрирует установку. Я использую один и тот же проект в двух разных местах моей системы. Тот, что слева, находится на внутреннем диске MacBook Pro, а тот, что справа, — это ТОТ ЖЕ ТО ЖЕ ПРОЕКТ, но на внешнем диске.

По этой ссылке загружается проект в виде ZIP-файла.

Настройка каталога

Неудача

person Chris Marshall    schedule 26.03.2021
comment
Спасибо за продолжение, к сожалению, это не исправление в моем случае. Я столкнулся с точно такой же проблемой, за исключением того, что мой всегда был на локальном/внутреннем диске. Мой класс завернут в проверку #if os(iOS), но все еще получает ошибку tvOS в IB. - person ids; 16.04.2021
comment
Я думаю, что все это ферма насекомых. К сожалению, я не думаю, что Apple особенно заинтересована в решении этой проблемы. Они идут ва-банк на SwiftUI (который еще не готов для некоторых более амбициозных проектов). - person Chris Marshall; 16.04.2021
comment
Это все еще не работает для SPM, в вашем примерном проекте у вас есть 2 цели - прямая и spm, но 'spm' не отображает дизайны, когда вы удаляете 'прямой' исходный код. - person protuberian; 20.04.2021
comment
Не удивлен. Я слышал, что SPM плохо работает с дизайнами. - person Chris Marshall; 20.04.2021