Ошибка IBDesignable Build

Я создал 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
            }
        }
    }
}

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

error

Ответ 1

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

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

  1. Переименовать класс
  2. Очистить проект.
  3. Выберите раскадровку, перейдите в меню "Редактор" и выполните "Обновить все представления" или выберите "Автоматически обновить представление"; ждать завершения сборки.

Ответ 2

Сначала попробуйте: IBDesignable Build Failed

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

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

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

Прежде всего, попробуйте, а затем перейдите к другим вариантам!

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

Если ваш CustomClass добавлен в проект в качестве файлов ссылок, это произойдет. Например, вы можете увидеть папку Blue color в Project Explorer, которые являются справочными папками. Если вы копируете классы в наш проект, убедитесь, что выбрано "Копировать элементы, если необходимо".

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

Ответ 7

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