Here is another item to add to the check-list (see Always double check that managed packages are deployed for some others) when objects or fields are not being displayed.
Our problem was that while the application worked fine through the development process and when tested in the production org via a “System Administrator” user, for any other profile user, the fields of two of the objects did not display at all in their Visualforce pages.
In this case the cause was that the “Deployment Status” of the objects had been accidentally left as “In Development”. This status is represented as <deploymentStatus>InDevelopment</deploymentStatus> in the .object file and appears in the development web UI like this:
Knowing what to look for in the help, it is easy to find the explanation:
Choose “In Development” as the Deployment Status when first creating your custom object to hide it from users while you are designing and testing it. Making the status “In Development” hides the custom object tab, search results, related lists, and report data types from all users except those with the “Customize Application” permission.
Fair enough functionality if you are modifying a live environment but in any approach where the software is developed separately from the live environment it is not useful and in this case was harmful. So always sticking to “Deployed” seems the way to go. And of course testing earlier under the actual profile(s) that will be used…