I came into this problem when I wanted to make my own obj loader in opengl ES or GLKIT or NinvehGL, ....
Though I succeeded in loading and rendering a small object with limitted vertices, I had difficulty with big Obj files.
So I Came to this problem, and found out about model IO, and then scenekit 😝
Anyhow, after a minute of trial and error, I converted the obj file to scn file, and loaded with SCNscene,
The code above
let scene = SCNScene(MDLAsset: asset)
as you mentioned didn't work for me with Obj file.
And then I tried with SCN file directly using the scenkit, and it worked
Then surprisingly scenekit worked with obj file directly. (and it automatically loaded texture / mtl)
My guess is maybe ModelIO is more for exporting (and importing) For file conversion. I hope at one point they support VRML files as well.
So the code that helped me : (Be sure you Obj file is in the bundle in build phase of the target settings)
let scene = SCNScene(named: "youfile.obj")!
let sceneView = self.view as! SCNView
sceneView.scene = scene
PS. I have no idea how swift works, but it is a very easy language, and I could get the project I wanted in a few minutes!