一尘不染

添加到测试目标时的IBDesignable错误

swift

我有一个用var UIButton实现的简单子类:IBDesignableIBInspectable

@IBDesignable class Button: UIButton {
    @IBInspectable var borderColor: UIColor = UIColor.whiteColor() {
        didSet { layer.borderColor = borderColor.CGColor }
    }
}

我没有在框架中使用它,它正在Interface Builder中按预期工作,但是,一旦将此子类添加到Tests目标中,它就会停止实时渲染,并且出现以下错误:

Main.storyboard: error: IB Designables: Failed to update auto layout status: dlopen(TestTests.xctest, 1): Library not loaded: @rpath/XCTest.framework/XCTest
Referenced from: TestTests.xctest
Reason: image not found

Main.storyboard: error: IB Designables: Failed to render instance of Button: dlopen(TestTests.xctest, 1): Library not loaded: @rpath/XCTest.framework/XCTest
Referenced from: TestTests.xctest
Reason: image not found

如果删除IBDesignableIBInspectablevar,错误就会消失-不幸的是,Interface Builder中的实时渲染也会消失。

如何针对IBDesignable没有这些错误的课程进行测试?


阅读 289

收藏
2020-07-07

共1个答案

一尘不染

起初,我认为这是Xcode中的一种错误。以下是
我发现的解决方法:

第1步

将您的类和属性标记为public

@IBDesignable public class Button: UIButton {
    @IBInspectable public var borderColor: UIColor = UIColor.whiteColor() {
        didSet { layer.borderColor = borderColor.CGColor }
    }

    @IBInspectable public var borderWidth:CGFloat = 0.0 {
        didSet { layer.borderWidth = borderWidth }
    }
}

步骤 2

从“测试”模块导入应用程序模块。

例如,假设您的应用程序被命名为MyGreatApp, in your
MyGreatAppTests/MyGreatAppTests.swift:

import UIKit
import XCTest
import MyGreatApp

class MyGreatAppTests: XCTestCase {

    func testExample() {
        let btn = Button()
        btn.borderColor = UIColor.redColor()
        XCTAssertEqual(UIColor(CGColor:btn.layer.borderColor), UIColor.redColor(), "borderColor")
    }
}

您无需将“ Button.swift”添加到“测试”目标。

步骤3(适用于Swift)

在情节提要中,为任何自定义
类显式选择模块MyGreatApp,而不是让Xcode使用当前模块。

2020-07-07