Быстрая бета-версия 6 - Ошибка сообщения об ошибке компоновщика

Я получаю сообщение об ошибке от компоновщика при создании программы Swift с Xcode 6 beta 6, ориентированной на iOS 8. Этот код скомпилирован и работает правильно с бета-версией 5.

Undefined symbol for architecture x86_64:
__TFSs26_forceBridgeFromObjectiveCU__FTPSs9AnyObject_MQ__Q_", referenced from:
 __TFC8RayTrace14RayTracingPlot15drawFocalPointfS0_FT_T_ in RayTracingPlot.o
ld: symbol(s) not found for architecture x86_64

Вот код, о котором идет речь:

private func drawFocalPoint() {
    var attributes = Dictionary<String, AnyObject>()

    let FString: String = "F"
    let distance: CGFloat = focalDistance

    let centerX = CGRectGetMidX(bounds)
    let centerY = CGRectGetMidY(bounds)

    let circleRadius: CGFloat = 4.0
    let focalPointFrame = CGRectMake(0, 0, circleRadius * 2.0, circleRadius * 2.0)
    var path = UIBezierPath(ovalInRect: focalPointFrame)
    let color = UIColor.blackColor()

    let currentContext = UIGraphicsGetCurrentContext()
    CGContextSaveGState(currentContext)
    let shadowColor = UIColor(white:0, alpha:0.75).CGColor
    CGContextSetShadowWithColor(currentContext, CGSizeMake(0, 4), CGFloat(8), shadowColor)

    // Image F
    var imageFPath = UIBezierPath(CGPath: path.CGPath)
    let imageFTransform = CGAffineTransformMakeTranslation((centerX - distance - circleRadius),
        (centerY - circleRadius))
    imageFPath.applyTransform(imageFTransform)
    color.set()
    imageFPath.fill()
    FString.drawAtPoint(CGPointMake(centerX - distance - circleRadius, centerY + 5), withAttributes:attributes)

    CGContextSetShadowWithColor(currentContext, CGSizeMake(0.0, 0.0), CGFloat(0.0), nil) // Clear shadow
    CGContextRestoreGState(currentContext)
}

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

Ответ 1

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

Я решил эту и другие аналогично неразборчивые ошибки, удалив содержимое папки Derived. Вы можете найти, где находится эта папка, выбрав "Настройки" > "Местоположения".

Путь по умолчанию: /Пользователи/[ваше имя пользователя]/Library/Разработчик/Xcode/DerivedData​​p >

Вы также можете удерживать Option, пока меню продукта открыто в Xcode, которое изменит Clean на Clean Build Folder... и выполнит ту же задачу без необходимости поиска в папке.

Ответ 2

Другая причина этой ошибки (см. Xcode 6.1.1 и Xcode 6.2 Beta 3), имеет перечисление только с одним случаем в одном классе и объявляет переменную этого типа во втором классе.

Этот код вызовет ошибку компоновщика:

class ClassA {
    enum ExampleEnum {
        case Option1
    }
}

class ClassB {
    var example: ClassA.ExampleEnum = .Option1
}

Это исправит.

class ClassA {
    enum ExampleEnum {
        case Option1
        case Option2 // Added a second case
    }
}

class ClassB {
    var example: ClassA.ExampleEnum = .Option1
}

Радар для получения дополнительной информации и пример проекта: http://openradar.appspot.com/19369147

Перечисление только с одним случаем практически бесполезно на практике, поэтому компилятор, вероятно, оптимизирует его или что-то еще. Я ударил это при создании нового проекта, используя перечисление для достижений, которое будет определено позже, и имело всего 1 местозаполнитель.

Также обратите внимание: используйте Watchdog http://watchdogforxcode.com/, чтобы не беспокоиться о проблемах с производными данными.

Ответ 3

Для других людей, которые могут наткнуться на эту ошибку. Я имел это при реализации CocoaPods и не устанавливал мою цель Other Linker Flags на $(inherited)