I think it would be helpful to post the code you have so that we may dissect the problem together, but I do have some questions first.
Does the inversion happen with both formats at the same time? IE when computing the facet normal for STL and per vertex normal for OBJ of a single mesh, are both inverted upon that single computation of both, or is one usually inverted while the other is not?
Also, is there a reason why you’ve decided to not use the SDK for these computations?
You can get the per vertex normal from the STMesh Class - meshPerVertexNormals. You can also use the boolean value hasPerVertexNormals to detect if the STMesh does have values before trying to display them.
You can view the use case of these methods by looking at the Scanner Sample app MeshRenderer.mm file provided in the SDK.
glBufferData(GL_ARRAY_BUFFER, numVertices * sizeof (GLKVector3), [mesh meshPerVertexNormals:meshIndex], GL_STATIC_DRAW);
Overall, I think that the inverted normals are generally “Expected” behavior. You can test this out with the scanner app on an iOS device. Make a scan of an object and email yourself the model.obj file. If you open the file inside MeshLab, you’ll notice that the Object is displayed correctly, but is upside down.
Hope this helps!