For material properties, such as metalnessand roughness, SceneKit supports single channel (grayscale) images. To preserve memory, these images are saved as shades of gray; they are not converted to RGB textures that have the same data in each channel.
When you use such an image for the “color” property of the material (for example diffuse), SceneKit will request the red, green, and blue components of the sample, and green and blue will always be 0, and the image will be red.
One bad decision is to recycle your texture in an image editing application to save it as RBG instead of shades of gray.
You can also try shader modifiers to convert from grayscale to RGB:
_surface.diffuse.rgb = _surface.diffuse.rrr;
Edit
iOS 11 textureComponents :
material.diffuse.textureComponents = .red