Ошибка сборки IBDesignable

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

Но когда я назначаю класс Designable для view, я получаю Designable Build Failed

это мой код

import Foundation

import UIKit

@IBDesignable
class DesignableView: UIView {
}

@IBDesignable
class DesignableButton: UIButton {
}

@IBDesignable
class DesignableLabel: UILabel {
}

@IBDesignable
class DesignableTableView: UITableView {

}

extension UIView {

    @IBInspectable
    var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
        }
    }

    @IBInspectable
    var borderWidth: CGFloat {
        get {
            return layer.borderWidth
        }
        set {
            layer.borderWidth = newValue
        }
    }

    @IBInspectable
    var borderColor: UIColor? {
        get {
            if let color = layer.borderColor {
                return UIColor(cgColor: color)
            }
            return nil
        }
        set {
            if let color = newValue {
                layer.borderColor = color.cgColor
            } else {
                layer.borderColor = nil
            }
        }
    }

    @IBInspectable
    var shadowRadius: CGFloat {
        get {
            return layer.shadowRadius
        }
        set {
            layer.shadowRadius = newValue
        }
    }

    @IBInspectable
    var shadowOpacity: Float {
        get {
            return layer.shadowOpacity
        }
        set {
            layer.shadowOpacity = newValue
        }
    }

    @IBInspectable
    var shadowOffset: CGSize {
        get {
            return layer.shadowOffset
        }
        set {
            layer.shadowOffset = newValue
        }
    }

    @IBInspectable
    var shadowColor: UIColor? {
        get {
            if let color = layer.shadowColor {
                return UIColor(cgColor: color)
            }
            return nil
        }
        set {
            if let color = newValue {
                layer.shadowColor = color.cgColor
            } else {
                layer.shadowColor = nil
            }
        }
    }
}

Это то, что я получил

ошибка


person VishalPethani    schedule 22.12.2017    source источник
comment
вы пытались скомпилировать и запустить?   -  person Ravi Panchal    schedule 22.12.2017
comment
Да, я пытаюсь скомпилировать и запустить... но не получаю фактического результата   -  person VishalPethani    schedule 22.12.2017
comment
Проверьте, не назначая класс Designable, и создайте, перезапустите свой xcode   -  person karthikeyan    schedule 22.12.2017
comment
Возможный дубликат Когда я устанавливаю изображение в IBImageView, получаю сборка не удалась   -  person VDPurohit    schedule 22.12.2017
comment
@RaviPanchal, спасибо, у меня сработало. Face-palm себе потом. :)   -  person AmitaiB    schedule 02.07.2019


Ответы (8)


Первая попытка: сборка IBDesignable не удалась

Для меня, когда я наводил курсор на InterfaceBuilder Designables: Build Failed, он выдавал сообщение об ошибке, говорящее что-то вроде

Не удается найти исходные файлы для объявления или...

Итак, я получил это как подсказку, например, что Xcode не может индексировать мой пользовательский файл класса UIView, поэтому я просто вышел из Xcode и перезапустил его, а затем он проиндексировал мой пользовательский файл класса Swift, и InterfaceBuilder смог найти его правильно .

Сначала попробуйте, а потом переходите к другим вариантам!

person Randika Vishman    schedule 27.06.2018
comment
Парение это! - person Sebastian Dressler; 20.09.2018
comment
Все еще происходит (такая же проблема, та же диагностика, то же исправление) с Xcode 10.0. - person sansuiso; 08.10.2018
comment
Боже мой, когда же это прекратится? - person Dima Gimburg; 24.12.2018
comment
@DimaGimburg, думаю, не раньше. По моему опыту, такие ошибки так долго сохраняются в Xcode. Кстати, с Рождеством! :D - person Randika Vishman; 24.12.2018
comment
Я пробовал выше, и проблема все еще сохраняется. - person Lehlohonolo_Isaac; 12.08.2019

Это не удалось, потому что переменные IBInspectable используются в чужом классе IBDesignable

Следующие шаги решили проблему:

  1. Переименовать класс
  2. Очистите проект.
  3. Выберите раскадровку, перейдите в меню «Редактор» и выполните «Обновить все представления» или выберите «Автоматическое обновление представления»; дождитесь завершения сборки.
person VishalPethani    schedule 22.12.2017
comment
Что ты имеешь в виду? - Я имею в виду, что, если компонент многоразового использования, как тележка, у которой есть тень, и она повсюду. Должен ли он создаваться с ошибкой, потому что IBDesignables не предназначены для повторного использования? - person Marlhex; 07.07.2021

Я тоже наткнулся на эту проблему, и у меня есть два предложения, которые могут быть полезны:

  1. В «Навигаторе отчетов» (cmd-9) проверьте журнал сборки «Interface Builder», это отдельная сборка от вашей обычной сборки проекта, там могут быть полезные сообщения об ошибках, а не просто «Ошибка сборки».
  2. Сборка Interface Builder делается для Симулятора, т.е. архитектуры x86_64. Некоторые части iOS (например, Metal в моем случае) отсутствуют в симуляторе, что приводит к сбоям сборки. Я определил некоторые классы и функции внутри #if targetEnvironment(simulator) блоков, чтобы хотя бы пройти сборку.
person Jan Misker    schedule 14.07.2018

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

Ни в журнале сборки, ни в папке DiagnosticReport не было полезных сообщений.

Исправление для меня состояло в том, чтобы удалить папку DerivedData («перезагрузка» Xcode) и перестроить проект. Волшебным образом раскадровка снова показывает мои пользовательские ручки! :-)

person WholeCheese    schedule 17.03.2018
comment
В моем случае сработала простая очистка проекта и перезапуск XCode. - person nipponese; 15.06.2018

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

person Duncan Groenewald    schedule 18.06.2018

Если ваш CustomClass добавляется в проект в качестве справочных файлов, это происходит. То есть, например, вы можете увидеть папку синего цвета в проводнике проекта, которая является справочной папкой. Если вы копируете классы в наш проект, убедитесь, что выбран параметр «Копировать элементы, если необходимо».

В моем случае это была проблема.

person ak_ninan    schedule 22.08.2018

Даже с первыми 2-мя шагами исправлена ​​моя. 1. Установите для класса значение DesignableView. 2. Установите для модуля значение 3. Очистите сборку. 4. Перезапустите Xcode.

person Anup G Prasad    schedule 01.10.2018

Убедитесь, что вы указали свою команду разработчиков в настройках проекта -> вкладка «Подписание и возможности». Вы не можете использовать @IBDesignable без команды разработчиков. Однако достаточно использовать свою личную команду — требуется только AppleID.

person Eduard    schedule 25.05.2021