Cómo agregar un borde a una imagen circular con máscara

Este es mi intento:

func round() {
    let width = bounds.width < bounds.height ? bounds.width : bounds.height
    let mask = CAShapeLayer()
    mask.path = UIBezierPath(ovalInRect: CGRectMake(bounds.midX - width / 2, bounds.midY - width / 2, width, width)).CGPath

    self.layer.mask = mask

    // add border
    let frameLayer = CAShapeLayer()
    frameLayer.path = mask.path
    frameLayer.lineWidth = 4.0
    frameLayer.strokeColor = UIColor.whiteColor().CGColor
    frameLayer.fillColor = nil

    self.layer.addSublayer(frameLayer)
}

Funciona en el simulador de iphone 6 (el guión gráfico tiene un tamaño de 4.7), pero en los 5s y 6+ se ve raro:

¿Es este un problema de diseño automático? Sin el borde, el diseño automático funciona correctamente. Esta es la primera vez que trabajo con máscaras, por lo que no estoy seguro de si lo que he hecho es correcto.

round la función se llama enviewDidLayoutSubviews.

¿Alguna idea?

Respuestas a la pregunta(2)

Su respuesta a la pregunta