I have different client applications running on different OS (iOS, Android, Windows Desktop, Windows Phone, Mac, Windows Store -All Native Apps-) I have to decrypt (AES-128) some files (thousands of them) on the clients so i need to store Encryption Keys in the client side. Currently i am keeping it as hardcoded string which is bad. So what is the best way to store Encryption keys in the client safe and secure?
For each of the operating systems you've listed, you should leverage the operating system's built-in secure storage for the keys rather than attempt to "roll your own" solution.
In general, it is not seen as a best practice to use your own encryption as you will continue to have to support, and debug your implementation which may have unforseen vulnerabilities. Instead, it's a best practice to leverage the native tools at your disposal for secure storage.
For iOS, this would be the keychain. For Android, this is known as the keystore. For Windows Phone 8.1+, this is known as the "Credential Locker."
These systems generally work by encrypting the private data in a small database on the device, and then restricting access to it to authorized applications only. This makes it much more difficult to get the private key off of the device without rooting/jailbreaking the device, etc.
You should also be generating unique keys for each device that receives these files. Having a hardcoded string in the app (rather than in a config file) is dangerous because once that key is compromised, all users are compromised. Check for correct use of SecureRandom or similar cryptographic libraries to ensure you're generating unique, near-impossible-to-crack keys.