We pushed patch 1.1.1 of our managed app to a customer production org which worked fine in their sandbox for the last weeks. After the installation our customers faces compile-time type errors as Apex classes could not be found during runtime.
Variable does not exist:...
or
Invalid type: ....
Indeed a handful of public
classes were missing on which the code relied on. In the Sandbox with the exact same version those classes existed!
The the patch DE org those classes were marked with this strange deprecation warning which we have never seen before:
This Apex class is deprecated
Strange as we thought you can only annotate global
classes to be @deprecated
.
So it appears that the deletion of Apex classes in a later release changes the behaviour of classes already uploaded as a patch release month before. Customer orgs which had this patch installed before the deletion of the classes were lucky and those who installed it later are...doomed.
We currently see no way to cure this problem. Anyone out there that experience similar strange behaviour in his apps.
As a side note: Salesforce.com activated the "Delete Packaged Components" and "Push Upgrade" feature for this ISV app recently. We also had the feeling that Salesforce.com with Winter '15 changed the behavior of class deletion. See this Why can I not reuse the name of Apex classes deleted in previous releases?