The self.mapView.visibleArea.envelope should have spatial reference. Could you please let me know at what point in code you are trying to use map's envelope? Means, as soon as map loads? As soon as feature layer loads?
Also, for testing purpose try using self.mapView.envelope (deprecated property) to see if that works?
Regards,
Nimesh