├── .gitignore ├── Backend ├── Package.swift ├── Sources │ ├── DataService.swift │ ├── Device.swift │ ├── Handlers.swift │ ├── Notifier.swift │ ├── arguments.swift │ └── main.swift ├── Tests │ ├── LinuxMain.swift │ └── Perfect-APNS-DemoTests │ │ └── Perfect_APNS_DemoTests.swift └── webroot │ ├── css │ └── style.css │ ├── index.html │ └── js │ └── notifier.js ├── LICENSE ├── LICENSE.zh_CN ├── Perfect News ├── Perfect News.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── Perfect News │ ├── AboutVC.swift │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-60.png │ │ │ ├── Icon-60@2x.png │ │ │ ├── Icon-60@3x-1.png │ │ │ ├── Icon-60@3x.png │ │ │ ├── Icon-72.png │ │ │ ├── Icon-72@2x.png │ │ │ ├── Icon-76.png │ │ │ ├── Icon-76@2x.png │ │ │ ├── Icon-Small-50.png │ │ │ ├── Icon-Small-50@2x.png │ │ │ ├── Icon-Small.png │ │ │ ├── Icon-Small@2x.png │ │ │ ├── Icon-Small@3x-1.png │ │ │ ├── Icon-Small@3x.png │ │ │ ├── Icon-Spotlight-40.png │ │ │ ├── Icon-Spotlight-40@2x-1.png │ │ │ ├── Icon-Spotlight-40@2x.png │ │ │ ├── Icon-Spotlight-40@3x.png │ │ │ ├── Icon-iPadPro@2x.png │ │ │ ├── Icon.png │ │ │ └── Icon@2x.png │ │ ├── Contents.json │ │ ├── Logo.imageset │ │ │ ├── Contents.json │ │ │ ├── Logo.png │ │ │ ├── Logo@2x.png │ │ │ └── Logo@3x.png │ │ ├── about.imageset │ │ │ ├── Contents.json │ │ │ └── about.pdf │ │ └── news.imageset │ │ │ ├── Contents.json │ │ │ └── news.pdf │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Config.swift │ ├── CustomNotifications.swift │ ├── DataService.swift │ ├── Info.plist │ ├── NewsCell.swift │ ├── NewsItem.swift │ ├── NewsVC.swift │ └── Perfect News.entitlements ├── Perfect NewsTests │ ├── Info.plist │ └── Perfect_NewsTests.swift └── Perfect NewsUITests │ ├── Info.plist │ └── Perfect_NewsUITests.swift ├── README.md └── supporting ├── certificates.png ├── download-key.png ├── new-key.png ├── notification-sender.png ├── pusher-success.png └── xcode.png /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/.gitignore -------------------------------------------------------------------------------- /Backend/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Backend/Package.swift -------------------------------------------------------------------------------- /Backend/Sources/DataService.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Backend/Sources/DataService.swift -------------------------------------------------------------------------------- /Backend/Sources/Device.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Backend/Sources/Device.swift -------------------------------------------------------------------------------- /Backend/Sources/Handlers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Backend/Sources/Handlers.swift -------------------------------------------------------------------------------- /Backend/Sources/Notifier.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Backend/Sources/Notifier.swift -------------------------------------------------------------------------------- /Backend/Sources/arguments.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Backend/Sources/arguments.swift -------------------------------------------------------------------------------- /Backend/Sources/main.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Backend/Sources/main.swift -------------------------------------------------------------------------------- /Backend/Tests/LinuxMain.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Backend/Tests/LinuxMain.swift -------------------------------------------------------------------------------- /Backend/Tests/Perfect-APNS-DemoTests/Perfect_APNS_DemoTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Backend/Tests/Perfect-APNS-DemoTests/Perfect_APNS_DemoTests.swift -------------------------------------------------------------------------------- /Backend/webroot/css/style.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Backend/webroot/css/style.css -------------------------------------------------------------------------------- /Backend/webroot/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Backend/webroot/index.html -------------------------------------------------------------------------------- /Backend/webroot/js/notifier.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Backend/webroot/js/notifier.js -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/LICENSE -------------------------------------------------------------------------------- /LICENSE.zh_CN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/LICENSE.zh_CN -------------------------------------------------------------------------------- /Perfect News/Perfect News.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News.xcodeproj/project.pbxproj -------------------------------------------------------------------------------- /Perfect News/Perfect News.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News.xcodeproj/project.xcworkspace/contents.xcworkspacedata -------------------------------------------------------------------------------- /Perfect News/Perfect News/AboutVC.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/AboutVC.swift -------------------------------------------------------------------------------- /Perfect News/Perfect News/AppDelegate.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/AppDelegate.swift -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Contents.json -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-60.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-60@3x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-60@3x-1.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-72.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x-1.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/AppIcon.appiconset/Icon@2x.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/Contents.json -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/Logo.imageset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/Logo.imageset/Contents.json -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/Logo.imageset/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/Logo.imageset/Logo.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/Logo.imageset/Logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/Logo.imageset/Logo@2x.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/Logo.imageset/Logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/Logo.imageset/Logo@3x.png -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/about.imageset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/about.imageset/Contents.json -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/about.imageset/about.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/about.imageset/about.pdf -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/news.imageset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/news.imageset/Contents.json -------------------------------------------------------------------------------- /Perfect News/Perfect News/Assets.xcassets/news.imageset/news.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Assets.xcassets/news.imageset/news.pdf -------------------------------------------------------------------------------- /Perfect News/Perfect News/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Base.lproj/LaunchScreen.storyboard -------------------------------------------------------------------------------- /Perfect News/Perfect News/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Base.lproj/Main.storyboard -------------------------------------------------------------------------------- /Perfect News/Perfect News/Config.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Config.swift -------------------------------------------------------------------------------- /Perfect News/Perfect News/CustomNotifications.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/CustomNotifications.swift -------------------------------------------------------------------------------- /Perfect News/Perfect News/DataService.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/DataService.swift -------------------------------------------------------------------------------- /Perfect News/Perfect News/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Info.plist -------------------------------------------------------------------------------- /Perfect News/Perfect News/NewsCell.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/NewsCell.swift -------------------------------------------------------------------------------- /Perfect News/Perfect News/NewsItem.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/NewsItem.swift -------------------------------------------------------------------------------- /Perfect News/Perfect News/NewsVC.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/NewsVC.swift -------------------------------------------------------------------------------- /Perfect News/Perfect News/Perfect News.entitlements: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect News/Perfect News.entitlements -------------------------------------------------------------------------------- /Perfect News/Perfect NewsTests/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect NewsTests/Info.plist -------------------------------------------------------------------------------- /Perfect News/Perfect NewsTests/Perfect_NewsTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect NewsTests/Perfect_NewsTests.swift -------------------------------------------------------------------------------- /Perfect News/Perfect NewsUITests/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect NewsUITests/Info.plist -------------------------------------------------------------------------------- /Perfect News/Perfect NewsUITests/Perfect_NewsUITests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/Perfect News/Perfect NewsUITests/Perfect_NewsUITests.swift -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/README.md -------------------------------------------------------------------------------- /supporting/certificates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/supporting/certificates.png -------------------------------------------------------------------------------- /supporting/download-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/supporting/download-key.png -------------------------------------------------------------------------------- /supporting/new-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/supporting/new-key.png -------------------------------------------------------------------------------- /supporting/notification-sender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/supporting/notification-sender.png -------------------------------------------------------------------------------- /supporting/pusher-success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/supporting/pusher-success.png -------------------------------------------------------------------------------- /supporting/xcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerfectExamples/Perfect-APNS-Demo/HEAD/supporting/xcode.png --------------------------------------------------------------------------------