1) According my experiments alternate icons should be in Files (like any other images).
2) Compile in release mode. In Debug mode API function returns success, but app icon is not updated on the screen.
This is true at least for simulators, I did not test on iPhones.
3) To prevent alert, take a look lc_setAlternateIconName subroutine in
https://stackoverflow.com/questions/48485920/alternate-icon-disable-alert-on-icon-change-update
From one side, private API is not a good idea, even Apple does not reject. But from another side, this sub works up to now.