I hope you can assist me in making this method more efficient.

Basically, getApp(value) simply gets the app by origin. Unfortunately, the Evme index doesn't have that parameter (it gets it's data from the Marketplace API which has manifestURL as a unique id) so in order to getApp by manifestURL, you can do getApp(manifestURL, "manifestURL") which iterates through the gridApps until it finds the right app.

About the icon, I'm not very knowledgable about this. Perhaps @amirnissim can answer.
If it's not necessary, it would be more efficient not to create a new Icon of course.