I think approach will be a more robust than going through the engine API. You might for instance risk some issues relating to sense versions if you try to move apps between different servers. If you go through the repository, then the app version migration should be taken care of automatically.
If you want the copies on the same server, then you also have this endpoint to work with:
I must admit I'm not very enthusiastic about your answer, since I already knew about the repository api, and authenticating through them looks to me to be much more of a pain than the simple:
_location.AsNtlmUserViaProxy(uri.Scheme.Equals(Uri.UriSchemeHttps), new NetworkCredential(user, pwd, domain), false);
Moreover I won't need this to copy apps between different servers, so using the engine doesn't look that risky to me. Isn't really there any way to make the CopyApp method work? It even explicitly asks for a guid list, which I provided, so I really don't know how that possibly manages to fail.
In the meanwhile I'll look into authenticating via the repository API, though reluctantly.
I must admit that I have never used the CopyApp method you refer to ,myself, but my guess is that it is being used by the repository as part of the copy operations. At least the description of the CopyApp method seems to indicate that:
"The engine copies the app into an app entity that was previously created by the repository. See the QRS API (REST API) help for more information."
Apart from that, I think there are a number of solutions relating to this topic available on Qlik Branch. This, for instance, was the first hit I got when I searched for "clone app":