Latest 2.0.1
License MIT
Platforms ios 9.0

GitHub license
Support Carthage and CocoaPods
Language: Swift

NativePopup is clone of Apple iOS AppStore review feedback popup.

NativePopup clones native popup’s design and behavior(animation and user interaction).
And you can use custom image and emoji in addition to bad/good icons.

Compared with Apple original popups.

NativePopup Original
NativePopup Done Original Done
NativePopup Good Original Good



Good Bad
good bad

Custom Image/Emoji

Custom Image Emoji
custome image bad


Very simple to use NativePopup🐶

// Good Preset.Feedback.good,
                 title: "Helpful",
                 message: "Thanks for your feedback.")
// Bad Preset.Feedback.bad,
                 title: "Not Helpful",
                 message: "Thanks for your feedback.")
// Custom Image UIImage(named: "love")!,
                 title: "参考になった",
                 message: "フィードバックをありがとうnございました。")
// Emoji Character("🐶"),
                 title: "イッヌ",
                 message: "絵文字対応したワン")
// Title only Preset.Feedback.good,
                 title: "Empty Message 🗑",
                 message: nil)
// Custom duration (default duration is 1.5 seconds) Character("🔟"),
                    title: "10 seconds",
                    message: "Long duration🙇",
                    duration: 10)
// Like Apple Music Preset.Feedback.done,
                 title: "Added to Library",
                 message: nil,
                 initialEffectType: .fadeIn)

image accepts ImageConvertible protocol.

public enum Image {
    case image(UIImage)
    case emoji(Character)

    func validate() {
        switch self {
        case .image(let image):
            assert(image.size.width == image.size.height, "Aspect ratio should be 1:1.")
        case .emoji:
            // MEMO: should check?

public protocol ImageConvertible {
    var npImage: Image { get }

UIImage and Character conforms to ImageConvertible by default.

extension UIImage: ImageConvertible {
    public var npImage: Image { return .image(self) }

extension Character: ImageConvertible {
    public var npImage: Image { return .emoji(self) }

You can define custom preset image as below.

extension NativePopup {
    public struct Preset {
        private init() {}
        public enum Feedback: String, ImageConvertible {

            public var npImage: Image {
                return .image(UIImage.init(nativePopupNamed: "feedback_(rawValue)"))

Image size should be 112 x 112.


You can install by Carthage or add NativePopup sources manually.


Add this to Cartfile

github "mono0926/NativePopup"
$ carthage update

Latest podspec

    "name": "NativePopup",
    "version": "2.0.1",
    "summary": "Clone of Apple iOS App's feedback popup, and easily customizable.",
    "homepage": "",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    "authors": "Masayuki Ono",
    "source": {
        "git": "",
        "tag": "2.0.1"
    "platforms": {
        "ios": "9.0"
    "swift_versions": "5.0",
    "source_files": "NativePopup/**/*.swift",
    "swift_version": "5.0"

Pin It on Pinterest

Share This