I want to prompt users to rate my app, does Apple have any restriction for how often an app could show this prompt?
Any restrictions for how often can I ask users to rate my app?
Are you using Apple's rating scheme SDK, or DIY?
Apple's App Store page on 'Ratings, Reviews, and Responses' (their scheme) says this about that:
"You can prompt for ratings up to three times in a 365-day period."
Otherwise, the HIGs/Ratings and Reviews say this:
"Don’t be a pest. Repeated rating prompts can be irritating, and may even negatively influence the user’s opinion of your app. Allow at least a week or two between rating requests and only prompt again after the user has demonstrated additional engagement with your app."
If you use the latest SDK, "SKStoreReviewController requestReview" then it do that 3 times a year limit for you. If you use the older method, you will have to limit it yourself. Just be clever about it. Consider how your app is being used. If some seems to be using advanced features or otherwise getting good value, ask that person for a review. Don't ask just anyone.
As I know, Apple no longer allow DIY Prompt, they will block you if you do that, doesn't it?
All developers have to use the official SDK to request rating: SKStoreReviewController
I am not aware of any restrictions on DIY requests for app reviews. SKStoreReviewController has been around for many years and nowhere does it say 'must use'.
I have a Mac app and SKStoreReviewController is 10.14 only. Therefore, if the class doesn't exist, I must do it myself. But considering I do it both ways, I can assure you that you don't want to do it yourself if you can avoid it. SKStoreReviewController is two lines of code, with the existence check. The roll-my-own version is maybe 150 lines of code spread across about 5 files.
The best way and most pratical way to ask an user to review your app is after they do the "main purpose" of your app with the SKStoreReviewController in one line of code no need to account for all of your users and 3 times in a 365 day period! The smart people at Apple already did that for you. All you got to do is call one measly line of code. You can still have a "rate this app" button in settings or something that takes your users to the App Store to review your app. Just don't call the requestReview function on a button action because it only shows it 3 times a year per user, thus making the button useless. Why is this soo hard to understand? It's 2019 do you really think that Apple would make us create a very, very complex function to only show this review controller only 3 times a year per user? Stop stressing, call the function at the apporiate time in your app, it will not show every time in production. However, It will always show everytime you call it in developement mode, for testing purposes. Haha, if you created your own function to find out all the users you have and only show the review controller to your users only three times a year, you are are a genius, I couldn't do that, but I also did the same thing you did with one line of code SKStoreReviewController.requestReview().