├── ReadMeRecource ├── 添加依赖库文件.png ├── 添加jpushSDK到工程中 .gif ├── 生成ObjCBridge文件.gif └── 在ObjctBridgingHeader添加sdk头文件.gif ├── JPushSwiftDemo ├── Recource │ ├── icon │ │ ├── ios7.png │ │ ├── ipad1x.png │ │ ├── ipad2x.png │ │ ├── iphone1x.png │ │ ├── iphone2x.png │ │ ├── ipadmini1x.png │ │ └── ipadmini2x.png │ └── tabBarImage │ │ ├── index.png │ │ ├── report.png │ │ ├── setTags.png │ │ └── localNotification.png ├── Assets.xcassets │ └── AppIcon.appiconset │ │ ├── ipad1x.png │ │ ├── ipad2x.png │ │ ├── iphone1x.png │ │ ├── iphone2x.png │ │ ├── iphone7.png │ │ ├── ipadmini1x.png │ │ ├── ipadmini2x.png │ │ └── Contents.json ├── JPushSwiftDemo-Bridging-Header.h ├── JPushSwiftDemo.entitlements ├── JPushUtils.swift ├── SendBadgeViewController.swift ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Info.plist ├── SetTagsViewController.swift ├── RootViewController.swift ├── AppDelegate.swift └── setLocalNotificationViewController.swift ├── DemoNotificationService ├── DemoNotificationService-Bridging-Header.h ├── Info.plist └── NotificationService.swift ├── JPushSwiftDemo.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata ├── xcshareddata │ └── xcschemes │ │ ├── JPushSwiftDemo.xcscheme │ │ └── DemoNotificationService.xcscheme └── project.pbxproj ├── JPushSwiftDemo.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── Podfile.lock ├── Podfile ├── JPushSwiftDemoTests ├── Info.plist └── JPushSwiftDemoTests.swift ├── JPushSwiftDemoUITests ├── Info.plist └── JPushSwiftDemoUITests.swift ├── LICENSE ├── .gitignore └── README.md /ReadMeRecource/添加依赖库文件.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/ReadMeRecource/添加依赖库文件.png -------------------------------------------------------------------------------- /ReadMeRecource/添加jpushSDK到工程中 .gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/ReadMeRecource/添加jpushSDK到工程中 .gif -------------------------------------------------------------------------------- /ReadMeRecource/生成ObjCBridge文件.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/ReadMeRecource/生成ObjCBridge文件.gif -------------------------------------------------------------------------------- /JPushSwiftDemo/Recource/icon/ios7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Recource/icon/ios7.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Recource/icon/ipad1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Recource/icon/ipad1x.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Recource/icon/ipad2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Recource/icon/ipad2x.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Recource/icon/iphone1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Recource/icon/iphone1x.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Recource/icon/iphone2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Recource/icon/iphone2x.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Recource/icon/ipadmini1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Recource/icon/ipadmini1x.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Recource/icon/ipadmini2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Recource/icon/ipadmini2x.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Recource/tabBarImage/index.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Recource/tabBarImage/index.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Recource/tabBarImage/report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Recource/tabBarImage/report.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Recource/tabBarImage/setTags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Recource/tabBarImage/setTags.png -------------------------------------------------------------------------------- /ReadMeRecource/在ObjctBridgingHeader添加sdk头文件.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/ReadMeRecource/在ObjctBridgingHeader添加sdk头文件.gif -------------------------------------------------------------------------------- /JPushSwiftDemo/Recource/tabBarImage/localNotification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Recource/tabBarImage/localNotification.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/ipad1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/ipad1x.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/ipad2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/ipad2x.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/iphone1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/iphone1x.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/iphone2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/iphone2x.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/iphone7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/iphone7.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/ipadmini1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/ipadmini1x.png -------------------------------------------------------------------------------- /JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/ipadmini2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jpush/jpush-swift-demo/HEAD/JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/ipadmini2x.png -------------------------------------------------------------------------------- /JPushSwiftDemo/JPushSwiftDemo-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import "JPUSHService.h" 6 | -------------------------------------------------------------------------------- /DemoNotificationService/DemoNotificationService-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import "JPushNotificationExtensionService.h" 6 | -------------------------------------------------------------------------------- /JPushSwiftDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /JPushSwiftDemo/JPushSwiftDemo.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | 8 | 9 | -------------------------------------------------------------------------------- /JPushSwiftDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /JPushSwiftDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /DemoNotificationService/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSExtension 6 | 7 | NSExtensionPointIdentifier 8 | com.apple.usernotifications.service 9 | NSExtensionPrincipalClass 10 | $(PRODUCT_MODULE_NAME).NotificationService 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - JCore (4.2.8) 3 | - JPush (5.0.1): 4 | - JCore (>= 2.0.0) 5 | - JPushExtension (2.0.6) 6 | 7 | DEPENDENCIES: 8 | - JCore 9 | - JPush 10 | - JPushExtension 11 | 12 | SPEC REPOS: 13 | trunk: 14 | - JCore 15 | - JPush 16 | - JPushExtension 17 | 18 | SPEC CHECKSUMS: 19 | JCore: 914a446853521f3e353c74cea17e214bee9c9ffc 20 | JPush: bf8d6011eb80c776aa40a0c4f5c25fd10335af9c 21 | JPushExtension: 5720afbe5ce5f0ca33fbfeffdf329b58660c2265 22 | 23 | PODFILE CHECKSUM: 2501a3e451ed1697ef5a0734d7bef5ebfc909120 24 | 25 | COCOAPODS: 1.16.2 26 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | 3 | platform :ios, '11.0' 4 | 5 | target 'JPushSwiftDemo' do 6 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 7 | use_frameworks! 8 | pod 'JPush' 9 | pod 'JCore' 10 | # Pods for JPushSwiftDemo 11 | target 'JPushSwiftDemoTests' do 12 | inherit! :search_paths 13 | # Pods for testing 14 | end 15 | 16 | target 'JPushSwiftDemoUITests' do 17 | inherit! :search_paths 18 | # Pods for testing 19 | end 20 | 21 | target 'DemoNotificationService' do 22 | inherit! :search_paths 23 | pod 'JPushExtension' 24 | end 25 | 26 | end 27 | -------------------------------------------------------------------------------- /JPushSwiftDemoTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /JPushSwiftDemoUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 极光推送/IM JPush/JMesage 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /JPushSwiftDemoTests/JPushSwiftDemoTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JPushSwiftDemoTests.swift 3 | // JPushSwiftDemoTests 4 | // 5 | // Created by oshumini on 16/3/11. 6 | // Copyright © 2016年 HXHG. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import JPushSwiftDemo 11 | 12 | class JPushSwiftDemoTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | // Use XCTAssert and related functions to verify your tests produce the correct results. 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measure { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /JPushSwiftDemo/JPushUtils.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JPushUtils.swift 3 | // JPushSwiftDemo 4 | // 5 | // Created by Shuni Huang on 2023/9/12. 6 | // Copyright © 2023 HXHG. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class JPushUtils: NSObject { 12 | 13 | class func showAlertController(withTitle title: String, message: String) { 14 | DispatchQueue.main.async { 15 | if #available(iOS 8, *) { 16 | 17 | let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert) 18 | let closeAction = UIAlertAction(title: "好的", style: .default) { _ in 19 | // Handler for close action 20 | } 21 | alertController.addAction(closeAction) 22 | let vc = UIApplication.shared.keyWindow?.rootViewController 23 | vc?.present(alertController, animated: true, completion: nil) 24 | 25 | } else { 26 | let alertView = UIAlertView(title: title, message: message, delegate: self, cancelButtonTitle: "确定") 27 | alertView.show() 28 | } 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /JPushSwiftDemoUITests/JPushSwiftDemoUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JPushSwiftDemoUITests.swift 3 | // JPushSwiftDemoUITests 4 | // 5 | // Created by oshumini on 16/3/11. 6 | // Copyright © 2016年 HXHG. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class JPushSwiftDemoUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | 18 | // In UI tests it is usually best to stop immediately when a failure occurs. 19 | continueAfterFailure = false 20 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 21 | XCUIApplication().launch() 22 | 23 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 24 | } 25 | 26 | override func tearDown() { 27 | // Put teardown code here. This method is called after the invocation of each test method in the class. 28 | super.tearDown() 29 | } 30 | 31 | func testExample() { 32 | // Use recording to get started writing UI tests. 33 | // Use XCTAssert and related functions to verify your tests produce the correct results. 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata 19 | 20 | ## Other 21 | *.xccheckout 22 | *.moved-aside 23 | *.xcuserstate 24 | *.xcscmblueprint 25 | 26 | ## Obj-C/Swift specific 27 | *.hmap 28 | *.ipa 29 | 30 | # Swift Package Manager 31 | # 32 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 33 | # Packages/ 34 | .build/ 35 | 36 | # CocoaPods 37 | # 38 | # We recommend against adding the Pods directory to your .gitignore. However 39 | # you should judge for yourself, the pros and cons are mentioned at: 40 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 41 | # 42 | Pods/ 43 | 44 | # Carthage 45 | # 46 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 47 | # Carthage/Checkouts 48 | 49 | Carthage/Build 50 | 51 | # fastlane 52 | # 53 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 54 | # screenshots whenever they are needed. 55 | # For more information about the recommended setup visit: 56 | # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md 57 | 58 | fastlane/report.xml 59 | fastlane/screenshots 60 | -------------------------------------------------------------------------------- /JPushSwiftDemo/SendBadgeViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SendBadgeViewController.swift 3 | // jpush-swift-demo 4 | // 5 | // Created by oshumini on 16/1/21. 6 | // Copyright © 2016年 HuminiOS. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SendBadgeViewController: UIViewController,UIGestureRecognizerDelegate { 12 | @IBOutlet weak var sendBadgeText: UITextField! 13 | @IBOutlet weak var sendBadgeButton: UIButton! 14 | 15 | override func viewDidLoad() { 16 | super.viewDidLoad() 17 | // Do any additional setup after loading the view, typically from a nib. 18 | let gesture = UITapGestureRecognizer(target: self, action:#selector(SendBadgeViewController.handleTap(_:))) 19 | gesture.delegate = self 20 | self.view.addGestureRecognizer(gesture) 21 | } 22 | 23 | override func viewDidAppear(_ animated: Bool) { 24 | super.viewDidAppear(animated) 25 | JPUSHService.pageEnter(to: NSStringFromClass(type(of: self))) 26 | } 27 | 28 | override func viewDidDisappear(_ animated: Bool) { 29 | super.viewDidDisappear(animated) 30 | JPUSHService.pageEnter(to: NSStringFromClass(type(of: self))) 31 | } 32 | 33 | override func didReceiveMemoryWarning() { 34 | super.didReceiveMemoryWarning() 35 | } 36 | 37 | @objc func handleTap(_ recognizer: UITapGestureRecognizer) { 38 | UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) 39 | } 40 | 41 | @IBAction func onClickToSend(_ sender: AnyObject) { 42 | 43 | let badgeText:NSString? = sendBadgeText.text as NSString? 44 | let value:Int = Int(badgeText!.intValue) 45 | JPUSHService.setBadge(value) 46 | print("send badge:%d to jpush server",value) 47 | } 48 | 49 | 50 | } 51 | 52 | -------------------------------------------------------------------------------- /JPushSwiftDemo/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /JPushSwiftDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSLocationWhenInUseUsageDescription 6 | This app requires location services to work 7 | NSLocationAlwaysUsageDescription 8 | This app requires location services to work 9 | NSLocationAlwaysAndWhenInUseUsageDescription 10 | This app requires location services to work 11 | CFBundleDevelopmentRegion 12 | en 13 | CFBundleExecutable 14 | $(EXECUTABLE_NAME) 15 | CFBundleIdentifier 16 | $(PRODUCT_BUNDLE_IDENTIFIER) 17 | CFBundleInfoDictionaryVersion 18 | 6.0 19 | CFBundleName 20 | $(PRODUCT_NAME) 21 | CFBundlePackageType 22 | APPL 23 | CFBundleShortVersionString 24 | 1.0 25 | CFBundleSignature 26 | ???? 27 | CFBundleVersion 28 | 1 29 | LSRequiresIPhoneOS 30 | 31 | NSAppTransportSecurity 32 | 33 | NSAllowsArbitraryLoads 34 | 35 | 36 | UILaunchStoryboardName 37 | LaunchScreen 38 | UIMainStoryboardFile 39 | Main 40 | UIRequiredDeviceCapabilities 41 | 42 | armv7 43 | 44 | UISupportedInterfaceOrientations 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationLandscapeLeft 48 | UIInterfaceOrientationLandscapeRight 49 | 50 | UISupportedInterfaceOrientations~ipad 51 | 52 | UIInterfaceOrientationPortrait 53 | UIInterfaceOrientationPortraitUpsideDown 54 | UIInterfaceOrientationLandscapeLeft 55 | UIInterfaceOrientationLandscapeRight 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /DemoNotificationService/NotificationService.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NotificationService.swift 3 | // DemoNotificationService 4 | // 5 | // Created by Shuni Huang on 2025/10/13. 6 | // Copyright © 2025 HXHG. All rights reserved. 7 | // 8 | 9 | import UserNotifications 10 | 11 | class NotificationService: UNNotificationServiceExtension { 12 | 13 | var contentHandler: ((UNNotificationContent) -> Void)? 14 | var bestAttemptContent: UNMutableNotificationContent? 15 | 16 | override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { 17 | self.contentHandler = contentHandler 18 | bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) 19 | 20 | if let bestAttemptContent = bestAttemptContent { 21 | // Modify the notification content here... 22 | bestAttemptContent.title = "\(bestAttemptContent.title) [modified]" 23 | 24 | // contentHandler(bestAttemptContent) 25 | 26 | apnsDeliverWith(request: request) 27 | } 28 | } 29 | 30 | private func apnsDeliverWith(request: UNNotificationRequest) { 31 | // Please invoke this func on release version 32 | // JPushNotificationExtensionService.setLogOff() 33 | 34 | // Service extension SDK 35 | // Upload to calculate delivery rate 36 | JPushNotificationExtensionService.jpushSetAppkey("4fcc3e237eec4c4fb804ad49") 37 | JPushNotificationExtensionService.jpushReceive(request) { [weak self] in 38 | print("apns upload success") 39 | if let bestAttemptContent = self?.bestAttemptContent { 40 | self?.contentHandler?(bestAttemptContent) 41 | } 42 | } 43 | } 44 | 45 | override func serviceExtensionTimeWillExpire() { 46 | // Called just before the extension will be terminated by the system. 47 | // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. 48 | if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { 49 | contentHandler(bestAttemptContent) 50 | } 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JPush Swift Demo 2 | 3 | Offically supported Swift Demo for JPush iOS SDK. 4 | 5 | ## JPush SDK 集成步骤 6 | 7 | ### 1. 集成SDK到项目 8 | 9 | #### 1.1 手动集成 10 | ##### 添加工程文件到 11 | 12 | ![image](https://github.com/jpush/jpush-swift-demo/blob/master/ReadMeRecource/添加jpushSDK到工程中%20.gif) 13 | 14 | #### 在Link Binary with Libraries 添加下图的依赖库 15 | 16 | ![image](https://github.com/jpush/jpush-swift-demo/blob/master/ReadMeRecource/添加依赖库文件.png) 17 | 18 | 19 | #### 1.2 cocoapods 集成 20 | 21 | ##### 在PodFile文件中添加 22 | 23 | ``` 24 | pod 'JPush' 25 | pod 'JCore' 26 | ``` 27 | 28 | 运行pod install 29 | 30 | 31 | #### 2. 在工程中新建一个 Objective-C Bridging Header 文件 32 | 33 | ![image](https://github.com/jpush/jpush-swift-demo/blob/master/ReadMeRecource/生成ObjCBridge文件.gif) 34 | 35 | #### 3. 在刚生成的Objective-C Bridging Header文件中导入 jpush 头文件 36 | 37 | ![image](https://github.com/jpush/jpush-swift-demo/blob/master/ReadMeRecource/在ObjctBridgingHeader添加sdk头文件.gif) 38 | 39 | #### 4. 在Appdelegate.swift 文件的 didFinishLaunching 方法中添加如下代码 40 | 41 | 42 | ``` 43 | func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 44 | 45 | if((UIDevice.currentDevice().systemVersion as NSString).floatValue >= 8.0) { 46 | // 可以自定义 categories 47 | JPUSHService.registerForRemoteNotificationTypes(UIUserNotificationType.Badge.rawValue | UIUserNotificationType.Badge.rawValue | UIUserNotificationType.Alert.rawValue , categories: nil) 48 | } else { 49 | JPUSHService.registerForRemoteNotificationTypes(UIUserNotificationType.Badge.rawValue | UIUserNotificationType.Badge.rawValue | UIUserNotificationType.Alert.rawValue , categories: nil) 50 | } 51 | JPUSHService.setupWithOption(launchOptions, appKey: appKey, channel: channel, apsForProduction: isProduction) 52 | 53 | return true 54 | } 55 | ``` 56 | 57 | #### 5. 在Appdelegate.swift 文件的 didRegisterForRemoteNotificationsWithDeviceToken 方法中添加如下代码 58 | 59 | 60 | ``` 61 | func application(application: UIApplication, 62 | didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 63 | print("get the deviceToken \(deviceToken)") 64 | NSNotificationCenter.defaultCenter().postNotificationName("DidRegisterRemoteNotification", object: deviceToken) 65 | JPUSHService.registerDeviceToken(deviceToken) 66 | 67 | } 68 | ``` 69 | 70 | 到此 已经完成集成 JPush sdk 的基本功能,若需要更多功能请参考Demo工程 71 | -------------------------------------------------------------------------------- /JPushSwiftDemo/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "3x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "3x" 27 | }, 28 | { 29 | "size" : "57x57", 30 | "idiom" : "iphone", 31 | "filename" : "iphone1x.png", 32 | "scale" : "1x" 33 | }, 34 | { 35 | "size" : "57x57", 36 | "idiom" : "iphone", 37 | "filename" : "iphone2x.png", 38 | "scale" : "2x" 39 | }, 40 | { 41 | "size" : "60x60", 42 | "idiom" : "iphone", 43 | "filename" : "iphone7.png", 44 | "scale" : "2x" 45 | }, 46 | { 47 | "idiom" : "iphone", 48 | "size" : "60x60", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "idiom" : "ipad", 53 | "size" : "29x29", 54 | "scale" : "1x" 55 | }, 56 | { 57 | "idiom" : "ipad", 58 | "size" : "29x29", 59 | "scale" : "2x" 60 | }, 61 | { 62 | "idiom" : "ipad", 63 | "size" : "40x40", 64 | "scale" : "1x" 65 | }, 66 | { 67 | "idiom" : "ipad", 68 | "size" : "40x40", 69 | "scale" : "2x" 70 | }, 71 | { 72 | "idiom" : "ipad", 73 | "size" : "50x50", 74 | "scale" : "1x" 75 | }, 76 | { 77 | "idiom" : "ipad", 78 | "size" : "50x50", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "72x72", 83 | "idiom" : "ipad", 84 | "filename" : "ipad1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "72x72", 89 | "idiom" : "ipad", 90 | "filename" : "ipad2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "ipadmini1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "ipadmini2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "idiom" : "ipad", 107 | "size" : "83.5x83.5", 108 | "scale" : "2x" 109 | } 110 | ], 111 | "info" : { 112 | "version" : 1, 113 | "author" : "xcode" 114 | }, 115 | "properties" : { 116 | "pre-rendered" : true 117 | } 118 | } -------------------------------------------------------------------------------- /JPushSwiftDemo.xcodeproj/xcshareddata/xcschemes/JPushSwiftDemo.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 10 | 16 | 22 | 23 | 24 | 25 | 26 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 62 | 68 | 69 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /JPushSwiftDemo.xcodeproj/xcshareddata/xcschemes/DemoNotificationService.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 6 | 10 | 11 | 17 | 23 | 24 | 25 | 31 | 37 | 38 | 39 | 40 | 41 | 47 | 48 | 60 | 62 | 68 | 69 | 70 | 71 | 79 | 81 | 87 | 88 | 89 | 90 | 92 | 93 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /JPushSwiftDemo/SetTagsViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SecondViewController.swift 3 | // jpush-swift-demo 4 | // 5 | // Created by oshumini on 16/1/21. 6 | // Copyright © 2016年 HuminiOS. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SetTagsViewController: UIViewController,UIGestureRecognizerDelegate { 12 | @IBOutlet weak var tagsTextField: UITextField! 13 | @IBOutlet weak var aliasTextField: UITextField! 14 | @IBOutlet weak var holderTextView: UITextView! 15 | 16 | var seq = 0; 17 | 18 | override func viewDidLoad() { 19 | super.viewDidLoad() 20 | holderTextView.layer.borderColor = UIColor.lightGray.cgColor 21 | } 22 | 23 | override func viewDidAppear(_ animated: Bool) { 24 | super.viewDidAppear(animated) 25 | JPUSHService.pageEnter(to: NSStringFromClass(type(of: self))) 26 | } 27 | 28 | override func viewDidDisappear(_ animated: Bool) { 29 | super.viewDidDisappear(animated) 30 | JPUSHService.pageEnter(to: NSStringFromClass(type(of: self))) 31 | } 32 | 33 | 34 | override func didReceiveMemoryWarning() { 35 | super.didReceiveMemoryWarning() 36 | } 37 | 38 | override func touchesEnded(_ touches: Set, with event: UIEvent?) { 39 | tagsTextField.resignFirstResponder() 40 | aliasTextField.resignFirstResponder() 41 | } 42 | 43 | 44 | @IBAction func addTags(_ sender: Any) { 45 | JPUSHService.addTags(self.getTags(), completion: { iResCode, iTags, seq in 46 | let tagsArray = Array(iTags ?? []) 47 | let tagsString = "\(tagsArray)" 48 | self.inputResponseCode(iResCode, content: tagsString, andSeq: seq) 49 | }, seq: self.getSeq()) 50 | } 51 | 52 | @IBAction func setTags(_ sender: Any) { 53 | JPUSHService.setTags(self.getTags(), completion: { iResCode, iTags, seq in 54 | let tagsArray = Array(iTags ?? []) 55 | let tagsString = "\(tagsArray)" 56 | self.inputResponseCode(iResCode, content: tagsString, andSeq: seq) 57 | }, seq: self.getSeq()) 58 | } 59 | 60 | 61 | @IBAction func getAllTags(_ sender: Any) { 62 | JPUSHService.getAllTags({ iResCode, iTags, seq in 63 | let tagsArray = Array(iTags ?? []) 64 | let tagsString = "\(tagsArray)" 65 | self.inputResponseCode(iResCode, content: tagsString, andSeq: seq) 66 | }, seq: self.getSeq()) 67 | } 68 | 69 | @IBAction func deleteTags(_ sender: Any) { 70 | JPUSHService.deleteTags(self.getTags(), completion: { iResCode, iTags, seq in 71 | let tagsArray = Array(iTags ?? []) 72 | let tagsString = "\(tagsArray)" 73 | self.inputResponseCode(iResCode, content: tagsString, andSeq: seq) 74 | }, seq: self.getSeq()) 75 | } 76 | 77 | 78 | @IBAction func cleanTags(_ sender: Any) { 79 | JPUSHService.cleanTags({ iResCode, iTags, seq in 80 | let tagsArray = Array(iTags ?? []) 81 | let tagsString = "\(tagsArray)" 82 | self.inputResponseCode(iResCode, content: tagsString, andSeq: seq) 83 | }, seq: self.getSeq()) 84 | } 85 | 86 | @IBAction func vaildTag(_ sender: Any) { 87 | if self.getTags().count == 0 { 88 | return 89 | } 90 | JPUSHService.validTag(self.getTags().first!, completion: { iResCode, iTags, seq, isBind in 91 | let tagsArray = Array(iTags ?? []) 92 | let tagsString = "\(tagsArray)" 93 | let content = "\(tagsString) isBind:\(isBind)" 94 | self.inputResponseCode(iResCode, content: content, andSeq: seq) 95 | }, seq: self.getSeq()) 96 | } 97 | 98 | @IBAction func setAlias(_ sender: Any) { 99 | if self.getAlias()?.count ?? 0 <= 0 { 100 | return 101 | } 102 | JPUSHService.setAlias(self.getAlias()!, completion: { iResCode, iAlias, seq in 103 | self.inputResponseCode(iResCode, content: iAlias ?? "", andSeq: seq) 104 | }, seq: self.getSeq()) 105 | 106 | } 107 | 108 | 109 | @IBAction func deleteAlias(_ sender: Any) { 110 | JPUSHService.deleteAlias({ iResCode, iAlias, seq in 111 | self.inputResponseCode(iResCode, content: iAlias ?? "", andSeq: seq) 112 | }, seq: self.getSeq()) 113 | } 114 | 115 | 116 | @IBAction func getAlias(_ sender: Any) { 117 | JPUSHService.getAlias({ iResCode, iAlias, seq in 118 | self.inputResponseCode(iResCode, content: iAlias ?? "", andSeq: seq) 119 | }, seq: self.getSeq()) 120 | } 121 | 122 | 123 | @IBAction func resetTextField(_ sender: Any) { 124 | tagsTextField.text = nil 125 | aliasTextField.text = nil 126 | } 127 | 128 | @IBAction func resetTextView(_ sender: Any) { 129 | holderTextView.text = nil 130 | } 131 | 132 | 133 | func getTags() -> Set { 134 | let tagsList = self.tagsTextField.text?.components(separatedBy: ",") ?? [] 135 | 136 | if self.tagsTextField.text?.count ?? 0 > 0 && tagsList.isEmpty { 137 | JPushUtils.showAlertController(withTitle: "提示", message: "没有输入tags,请使用逗号作为tags分隔符") 138 | } 139 | 140 | var tags = Set() 141 | tags.formUnion(tagsList) 142 | 143 | // 过滤掉无效的tag 144 | let newTags = JPUSHService.filterValidTags(tags) 145 | return newTags as! Set 146 | } 147 | 148 | func getAlias() -> String? { 149 | return self.aliasTextField.text 150 | } 151 | 152 | func inputResponseCode(_ code: Int, content: String, andSeq seq: Int) { 153 | self.holderTextView.text.append("\n\n code:\(code) content:\(content) seq:\(seq)") 154 | } 155 | 156 | func getSeq() -> Int { 157 | seq += 1 158 | return seq 159 | } 160 | 161 | } 162 | 163 | -------------------------------------------------------------------------------- /JPushSwiftDemo/RootViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FirstViewController.swift 3 | // jpush-swift-demo 4 | // 5 | // Created by oshumini on 16/1/21. 6 | // Copyright © 2016年 HuminiOS. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class RootViewController: UIViewController { 12 | @IBOutlet weak var netWorkStateLabel: UILabel! 13 | @IBOutlet weak var deviceTokenValue: UILabel! 14 | @IBOutlet weak var registrationValueLabel: UILabel! 15 | @IBOutlet weak var appKeyLabel: UILabel! 16 | 17 | @IBOutlet weak var messageCountLabel: UILabel! 18 | @IBOutlet weak var notificationCountLabel: UILabel! 19 | @IBOutlet weak var messageContentView: UITextView! 20 | @IBOutlet weak var cleanMessageButton: UIButton! 21 | 22 | var messageContents:NSMutableArray! 23 | var messageCount = 0 24 | var notificationCount = 0 25 | 26 | override func viewDidLoad() { 27 | super.viewDidLoad() 28 | 29 | messageContents = NSMutableArray() 30 | let defaultCenter:NotificationCenter = NotificationCenter.default 31 | defaultCenter.addObserver(self, selector: #selector(RootViewController.networkDidSetup(_:)), name:NSNotification.Name.jpfNetworkDidSetup, object: nil) 32 | defaultCenter.addObserver(self, selector: #selector(RootViewController.networkDidClose(_:)), name:NSNotification.Name.jpfNetworkDidClose, object: nil) 33 | defaultCenter.addObserver(self, selector: #selector(RootViewController.networkDidRegister(_:)), name:NSNotification.Name.jpfNetworkDidRegister, object: nil) 34 | defaultCenter.addObserver(self, selector: #selector(RootViewController.networkDidLogin(_:)), name:NSNotification.Name.jpfNetworkDidLogin, object: nil) 35 | defaultCenter.addObserver(self, selector: #selector(RootViewController.networkDidReceiveMessage(_:)), name:NSNotification.Name.jpfNetworkDidReceiveMessage, object: nil) 36 | defaultCenter.addObserver(self, selector: #selector(RootViewController.serviceError(_:)), name:NSNotification.Name.jpfServiceError, object: nil) 37 | registrationValueLabel.text = JPUSHService.registrationID() 38 | appKeyLabel.text = appKey 39 | 40 | defaultCenter.addObserver(self, selector: #selector(RootViewController.didRegisterRemoteNotification(_:)), name:NSNotification.Name(rawValue: "DidRegisterRemoteNotification"), object: nil) 41 | } 42 | 43 | override func viewDidAppear(_ animated: Bool) { 44 | super.viewDidAppear(animated) 45 | JPUSHService.pageEnter(to: NSStringFromClass(type(of: self))) 46 | } 47 | 48 | override func viewDidDisappear(_ animated: Bool) { 49 | super.viewDidDisappear(animated) 50 | JPUSHService.pageEnter(to: NSStringFromClass(type(of: self))) 51 | } 52 | 53 | override func didReceiveMemoryWarning() { 54 | super.didReceiveMemoryWarning() 55 | // Dispose of any resources that can be recreated. 56 | } 57 | 58 | @IBAction func cleanMessage(_ sender: AnyObject) { 59 | messageCount = 0 60 | notificationCount = 0 61 | self.reloadMessageCountLabel() 62 | messageContents.removeAllObjects() 63 | self.notificationCountLabel.text = "0" 64 | } 65 | 66 | func unObserveAllNotifications() { 67 | let defaultCenter = NotificationCenter.default 68 | defaultCenter.removeObserver(self) 69 | } 70 | 71 | @objc func networkDidSetup(_ notification:Notification) { 72 | netWorkStateLabel.text = "已连接" 73 | print("已连接") 74 | } 75 | 76 | @objc func networkDidClose(_ notification:Notification) { 77 | netWorkStateLabel.text = "未连接" 78 | print("连接已断开") 79 | } 80 | @objc func networkDidRegister(_ notification:Notification) { 81 | netWorkStateLabel.text = "已注册" 82 | if let info = (notification as NSNotification).userInfo as? Dictionary { 83 | // Check if value present before using it 84 | if let s = info["RegistrationID"] { 85 | registrationValueLabel.text = s 86 | } else { 87 | print("no value for key\n") 88 | } 89 | } else { 90 | print("wrong userInfo type") 91 | } 92 | print("已注册") 93 | } 94 | 95 | @objc func networkDidLogin(_ notification:Notification) { 96 | netWorkStateLabel.text = "已登录" 97 | print("已登录") 98 | if JPUSHService.registrationID().count > 0 { 99 | registrationValueLabel.text = JPUSHService.registrationID() 100 | print("get RegistrationID") 101 | } 102 | } 103 | 104 | @objc func networkDidReceiveMessage(_ notification:Notification) { 105 | let userInfo = notification.userInfo// as? Dictionary 106 | 107 | guard let _ = userInfo else { 108 | print("\(notification)") 109 | return 110 | } 111 | 112 | let currentContent = "收到自定义消息: \(userInfo!)" 113 | print("\(currentContent)") 114 | messageContents.insert(currentContent, at: 0) 115 | 116 | let allContent = "收到自定义消息: \(userInfo!)" 117 | messageContentView.text = allContent 118 | messageCount += 1 119 | self.reloadMessageCountLabel() 120 | } 121 | 122 | @objc func serviceError(_ notification:Notification) { 123 | let userInfo = (notification as NSNotification).userInfo as? Dictionary 124 | let error = userInfo!["error"] 125 | print(error) 126 | } 127 | 128 | @objc func didRegisterRemoteNotification(_ notification:Notification) { 129 | let deviceTokenStr = notification.object 130 | deviceTokenValue.text = "\(deviceTokenStr)" 131 | } 132 | 133 | func reloadMessageCountLabel() { 134 | messageCountLabel.text = "\(messageCount)" 135 | } 136 | 137 | func reloadNotificationCountLabel() { 138 | notificationCountLabel.text = "\(notificationCount)" 139 | } 140 | 141 | func addNotificationCount() { 142 | notificationCount += 1 143 | self.reloadNotificationCountLabel() 144 | } 145 | 146 | func addMessageCount() { 147 | messageCount += 1 148 | self.reloadMessageCountLabel() 149 | } 150 | func reloadMessageContentView() { 151 | messageContentView.text = "" 152 | } 153 | } 154 | 155 | -------------------------------------------------------------------------------- /JPushSwiftDemo/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // JPushSwiftDemo 4 | // 5 | // Created by oshumini on 16/3/11. 6 | // Copyright © 2016年 HXHG. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import UserNotifications 11 | import CoreLocation 12 | 13 | let appKey = "4fcc3e237eec4c4fb804ad49" 14 | let channel = "Publish channel" 15 | let isProduction = false 16 | 17 | @UIApplicationMain 18 | class AppDelegate: UIResponder, UIApplicationDelegate { 19 | 20 | var window: UIWindow? 21 | 22 | var locationManager: CLLocationManager? 23 | 24 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 25 | 26 | getLocationAuthority() 27 | 28 | let entity = JPUSHRegisterEntity() 29 | if #available(iOS 12, *) { 30 | entity.types = NSInteger(UNAuthorizationOptions.alert.rawValue) | 31 | NSInteger(UNAuthorizationOptions.sound.rawValue) | 32 | NSInteger(UNAuthorizationOptions.badge.rawValue) | 33 | NSInteger(UNAuthorizationOptions.provisional.rawValue) 34 | } else { 35 | entity.types = NSInteger(UNAuthorizationOptions.alert.rawValue) | 36 | NSInteger(UNAuthorizationOptions.sound.rawValue) | 37 | NSInteger(UNAuthorizationOptions.badge.rawValue) 38 | } 39 | 40 | JPUSHService.register(forRemoteNotificationConfig: entity, delegate: self) 41 | //如果使用地理围栏功能,需要注册地理围栏代理 42 | JPUSHService.registerLbsGeofenceDelegate(self, withLaunchOptions: launchOptions) 43 | //如果使用应用内消息功能,需要配置pageEnterTo:和pageLeave:接口,且可以通过设置该代理获取应用内消息的展示和点击事件 44 | JPUSHService.setInAppMessageDelegate(self) 45 | //如不需要使用IDFA,advertisingIdentifier 可为nil 46 | JPUSHService.setup(withOption: launchOptions, appKey: appKey, channel: channel, apsForProduction: isProduction, advertisingIdentifier: nil) 47 | 48 | //2.1.9版本新增获取registration id block接口。 49 | JPUSHService .registrationIDCompletionHandler { resCode, registrationID in 50 | if resCode == 0 { 51 | print("registrationID获取成功:\(String(describing: registrationID))") 52 | } else { 53 | print("registrationID获取失败,code:\(String(describing: registrationID))") 54 | } 55 | } 56 | 57 | return true 58 | } 59 | 60 | func application(_ application: UIApplication, 61 | didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 62 | print("get the deviceToken \(deviceToken)") 63 | NotificationCenter.default.post(name: Notification.Name(rawValue: "DidRegisterRemoteNotification"), object: deviceToken) 64 | // 注册devicetoken 65 | JPUSHService.registerDeviceToken(deviceToken) 66 | } 67 | 68 | func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { 69 | print("did fail to register for remote notification with error ", error) 70 | 71 | } 72 | 73 | // iOS10以上静默推送会走该回调 74 | func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { 75 | // 注意调用 76 | JPUSHService.handleRemoteNotification(userInfo) 77 | print("iOS7及以上系统,收到通知:\(userInfo)") 78 | completionHandler(.newData) 79 | } 80 | 81 | } 82 | 83 | extension AppDelegate:JPUSHRegisterDelegate, JPUSHGeofenceDelegate, JPUSHInAppMessageDelegate { 84 | 85 | //MARK - JPUSHRegisterDelegate 86 | @available(iOS 10.0, *) 87 | func jpushNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: (() -> Void)) { 88 | 89 | let userInfo = response.notification.request.content.userInfo 90 | let request = response.notification.request // 收到推送的请求 91 | // let content = request.content // 收到推送的消息内容 92 | 93 | // let badge = content.badge // 推送消息的角标 94 | // let body = content.body // 推送消息体 95 | // let sound = content.sound // 推送消息的声音 96 | // let subtitle = content.subtitle // 推送消息的副标题 97 | // let title = content.title // 推送消息的标题 98 | 99 | if (response.notification.request.trigger?.isKind(of: UNPushNotificationTrigger.self) == true) { 100 | // 注意调用 101 | JPUSHService.handleRemoteNotification(userInfo) 102 | print("iOS10 收到远程通知:\(userInfo)") 103 | 104 | } else { 105 | print("iOS10 收到本地通知:\(userInfo)") 106 | } 107 | 108 | completionHandler() 109 | 110 | } 111 | 112 | @available(iOS 10.0, *) 113 | func jpushNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, 114 | withCompletionHandler completionHandler: ((Int) -> Void)) { 115 | let userInfo = notification.request.content.userInfo 116 | let request = notification.request // 收到推送的请求 117 | // let content = request.content // 收到推送的消息内容 118 | 119 | // let badge = content.badge // 推送消息的角标 120 | // let body = content.body // 推送消息体 121 | // let sound = content.sound // 推送消息的声音 122 | // let subtitle = content.subtitle // 推送消息的副标题 123 | // let title = content.title // 推送消息的标题 124 | 125 | if (notification.request.trigger?.isKind(of: UNPushNotificationTrigger.self) == true) { 126 | // 注意调用 127 | JPUSHService.handleRemoteNotification(userInfo) 128 | print("iOS10 收到远程通知:\(userInfo)") 129 | addNotificationCount() 130 | } else { 131 | print("iOS10 收到本地通知:\(userInfo)") 132 | } 133 | 134 | completionHandler(Int(UNNotificationPresentationOptions.badge.rawValue | UNNotificationPresentationOptions.sound.rawValue | UNNotificationPresentationOptions.alert.rawValue)) 135 | } 136 | 137 | func jpushNotificationCenter(_ center: UNUserNotificationCenter, openSettingsFor notification: UNNotification) { 138 | 139 | } 140 | 141 | func jpushNotificationAuthorization(_ status: JPAuthorizationStatus, withInfo info: [AnyHashable : Any]?) { 142 | print("receive notification authorization status:\(status), info:\(String(describing: info))") 143 | } 144 | 145 | //MARK - JPUSHGeofenceDelegate 146 | func jpushGeofenceRegion(_ geofence: [AnyHashable : Any]?, error: Error?) { 147 | print("geofence: \(String(describing: geofence)), error: \(String(describing: error))") 148 | } 149 | 150 | func jpushCallbackGeofenceReceived(_ geofenceList: [[AnyHashable : Any]]?) { 151 | print("geofenceList: \(String(describing: geofenceList))") 152 | } 153 | 154 | //进入地理围栏区域 155 | func jpushGeofenceIdentifer(_ geofenceId: String, didEnterRegion userInfo: [AnyHashable : Any]?, error: Error?) { 156 | print("didEnterRegion") 157 | } 158 | 159 | //离开地理围栏区域 160 | func jpushGeofenceIdentifer(_ geofenceId: String, didExitRegion userInfo: [AnyHashable : Any]?, error: Error?) { 161 | print("didExitRegion") 162 | } 163 | 164 | //MARK - JPushInAppMessageDelegate 165 | func jPush(inAppMessageDidShow inAppMessage: JPushInAppMessage) { 166 | let messageId = inAppMessage.mesageId; 167 | let title = inAppMessage.title; 168 | let content = inAppMessage.content; 169 | // ... 更多参数获取请查看JPushInAppMessage 170 | print("jPushInAppMessageDidShow - messageId:\(messageId), title:\(title), content:\(content)") 171 | } 172 | 173 | func jPush(inAppMessageDidClick inAppMessage: JPushInAppMessage) { 174 | let messageId = inAppMessage.mesageId; 175 | let title = inAppMessage.title; 176 | let content = inAppMessage.content; 177 | // ... 更多参数获取请查看JPushInAppMessage 178 | print("jPushInAppMessageDidClick - messageId:\(messageId), title:\(title), content:\(content)") 179 | } 180 | } 181 | 182 | 183 | extension AppDelegate: CLLocationManagerDelegate { 184 | // MARK - location 185 | func getLocationAuthority() { 186 | locationManager = CLLocationManager() 187 | if #available(iOS 8.0, *) { 188 | locationManager?.requestAlwaysAuthorization() 189 | } else { 190 | if CLLocationManager.authorizationStatus() == .notDetermined { 191 | print("kCLAuthorizationStatusNotDetermined") 192 | } 193 | } 194 | locationManager?.delegate = self 195 | } 196 | 197 | // MARK - CLLocationManagerDelegate 198 | func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { 199 | if status != .notDetermined { 200 | print("获取地理位置权限成功") 201 | } 202 | } 203 | } 204 | 205 | extension AppDelegate { 206 | // MARK - other 207 | func addNotificationCount() { 208 | let tabbarVC = UIApplication.shared.keyWindow?.rootViewController as! UITabBarController 209 | let rootViewVC = tabbarVC.viewControllers!.first as! RootViewController 210 | rootViewVC.addNotificationCount() 211 | } 212 | } 213 | 214 | -------------------------------------------------------------------------------- /JPushSwiftDemo/setLocalNotificationViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // setLocalNotificationViewController.swift 3 | // jpush-swift-demo 4 | // 5 | // Created by oshumini on 16/1/21. 6 | // Copyright © 2016年 HuminiOS. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import CoreLocation 11 | import UserNotifications 12 | 13 | class setLocalNotificationViewController: UIViewController,UITextFieldDelegate,UIGestureRecognizerDelegate { 14 | 15 | @IBOutlet var backgroundView: UIView! 16 | 17 | @IBOutlet weak var titleTF: UITextField! 18 | @IBOutlet weak var subtitleTF: UITextField! 19 | @IBOutlet weak var bodyTF: UITextField! 20 | @IBOutlet weak var badgeTF: UITextField! 21 | @IBOutlet weak var actionTF: UITextField! 22 | @IBOutlet weak var soundTF: UITextField! 23 | @IBOutlet weak var cateforyIdentifierTF: UITextField! 24 | @IBOutlet weak var threadIDTF: UITextField! 25 | @IBOutlet weak var summaryArgumentTF: UITextField! 26 | @IBOutlet weak var summaryArgCountTF: UITextField! 27 | @IBOutlet weak var requestIdentifierTF: UITextField! 28 | 29 | @IBOutlet weak var repeatSW: UISwitch! 30 | 31 | @IBOutlet weak var deliveredSW: UISwitch! 32 | 33 | 34 | override func viewDidLoad() { 35 | super.viewDidLoad() 36 | // Do any additional setup after loading the view, typically from a nib. 37 | } 38 | 39 | override func viewDidAppear(_ animated: Bool) { 40 | super.viewDidAppear(animated) 41 | JPUSHService.pageEnter(to: NSStringFromClass(type(of: self))) 42 | } 43 | 44 | override func viewDidDisappear(_ animated: Bool) { 45 | super.viewDidDisappear(animated) 46 | JPUSHService.pageEnter(to: NSStringFromClass(type(of: self))) 47 | } 48 | 49 | override func didReceiveMemoryWarning() { 50 | super.didReceiveMemoryWarning() 51 | } 52 | 53 | override func touchesEnded(_ touches: Set, with event: UIEvent?) { 54 | self.view.endEditing(true) 55 | } 56 | 57 | @IBAction func addNotificationWithDateTrigger(_ sender: Any) { 58 | 59 | let trigger = JPushNotificationTrigger() 60 | if #available(iOS 10, *){ 61 | // 周二早上8点 62 | var components = DateComponents() 63 | components.weekday = 2 64 | components.hour = 8 65 | trigger.dateComponents = components 66 | } else { 67 | // date 68 | let fireDate = Date(timeIntervalSinceNow: 20) 69 | trigger.fireDate = fireDate 70 | } 71 | trigger.repeat = repeatSW.isOn 72 | let request = JPushNotificationRequest() 73 | request.content = generateNotificationContent() 74 | request.trigger = trigger 75 | request.completionHandler = { result in 76 | if ((result as AnyObject).isKind(of: UNNotificationRequest.self)) { 77 | JPushUtils.showAlertController(withTitle: "添加 date 通知失败", message: "") 78 | return 79 | } 80 | print("添加日期通知成功 --- \(result)") 81 | var message = "" 82 | if #available(iOS 10, *) { 83 | message = "iOS10以上,\(trigger.dateComponents)触发" 84 | } else { 85 | let dateFormatter = DateFormatter() 86 | dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 87 | let dateStr = dateFormatter.string(from: trigger.fireDate ) 88 | message = "iOS10以下,\(dateStr)触发" 89 | } 90 | JPushUtils.showAlertController(withTitle: "添加 date 通知成功", message: message) 91 | 92 | } 93 | request.requestIdentifier = requestIdentifierTF.text ?? "" 94 | JPUSHService.addNotification(request) 95 | } 96 | 97 | 98 | @IBAction func addNotificationWithRegionTrigger(_ sender: Any) { 99 | 100 | let trigger = JPushNotificationTrigger() 101 | if #available(iOS 10, *) { 102 | let cen = CLLocationCoordinate2D(latitude: 22.5531706, longitude: 113.9025006) 103 | let region = CLCircularRegion(center: cen, radius: 2000.0, identifier: "JIGUANG") 104 | trigger.region = region 105 | trigger.repeat = repeatSW.isOn 106 | } else { 107 | print("region 触发通知只在 iOS8 以上有效哦……") 108 | JPushUtils.showAlertController(withTitle: "", message: "region 触发通知只在 iOS8 以上有效") 109 | return 110 | } 111 | let request = JPushNotificationRequest() 112 | request.content = generateNotificationContent() 113 | request.trigger = trigger 114 | request.completionHandler = { result in 115 | if (result as AnyObject).isKind(of: UNNotificationRequest.self) { 116 | print("添加地理位置通知成功 --- \(result)") 117 | let message = "\(trigger.region)" 118 | JPushUtils.showAlertController(withTitle: "添加 region 通知成功", message: message) 119 | } else { 120 | JPushUtils.showAlertController(withTitle: "添加 region 通知失败", message: "") 121 | } 122 | } 123 | request.requestIdentifier = requestIdentifierTF.text ?? "" 124 | JPUSHService.addNotification(request) 125 | 126 | } 127 | 128 | @IBAction func addNotificationWithTimeintervalTrigger(_ sender: Any) { 129 | let trigger = JPushNotificationTrigger() 130 | if #available(iOS 10, *) { 131 | // 20秒后触发 132 | trigger.timeInterval = 20 133 | if trigger.timeInterval < 60 { 134 | // 由于系统限制,重复触发时间必须大于等于60秒,否则会崩溃 135 | trigger.repeat = false 136 | } else { 137 | trigger.repeat = repeatSW.isOn 138 | } 139 | } else { 140 | print("timeInterval 触发通知只在 iOS10 以上有效哦……") 141 | JPushUtils.showAlertController(withTitle: "", message: "timeInterval 触发通知只在 iOS10 以上有效") 142 | return 143 | } 144 | let request = JPushNotificationRequest() 145 | request.content = generateNotificationContent() 146 | request.trigger = trigger 147 | request.completionHandler = { result in 148 | if ((result as AnyObject).isKind(of: UNNotificationRequest.self)) { 149 | print("添加 timeInterval 通知成功 --- \(result)") 150 | let message = "iOS10以上,\(Int(trigger.timeInterval))秒后触发" 151 | JPushUtils.showAlertController(withTitle: "添加 timeInterval 通知成功", message: message) 152 | } else { 153 | JPushUtils.showAlertController(withTitle: "添加 timeInterval 通知失败", message: "") 154 | } 155 | } 156 | request.requestIdentifier = requestIdentifierTF.text ?? "" 157 | JPUSHService.addNotification(request) 158 | } 159 | 160 | 161 | @IBAction func findNotifationWithIdentifier(_ sender: Any) { 162 | let identifier = JPushNotificationIdentifier() 163 | // 注意:identifiers 这里可以设置多个 identifier 来查找多个指定推送。 164 | identifier.identifiers = [requestIdentifierTF.text ?? ""] 165 | // delivered iOS10以上有效,YES 表示在通知中心显示的里面查找,NO 则是在待推送的里面查找;iOS10以下无效 166 | identifier.delivered = deliveredSW.isOn 167 | identifier.findCompletionHandler = { results in 168 | // results iOS10以下返回UILocalNotification对象数组 169 | // iOS10以上 根据delivered传入值返回UNNotification或UNNotificationRequest对象数组 170 | print("查找指定通知 - 返回结果为:\(String(describing: results))") 171 | let title = "查找指定通知 \(String(describing: results?.count)) 条" 172 | let message = "\(String(describing: results))" 173 | JPushUtils.showAlertController(withTitle: title, message: message) 174 | } 175 | JPUSHService.findNotification(identifier) 176 | 177 | } 178 | 179 | @IBAction func findAllNotification(_ sender: Any) { 180 | let identifier = JPushNotificationIdentifier() 181 | //iOS10以上 identifiers 为nil或者空数组,会根据delivered值查找对应推送。delivered为 YES 表示查找通知中心显示的所有通知,NO则是查找所有待推送通知 182 | //iOS10以下 identifiers 为nil或者空数组,会找到所有未被触发的通知。 183 | identifier.identifiers = nil 184 | identifier.delivered = self.deliveredSW.isOn 185 | identifier.findCompletionHandler = {results in 186 | print("查找指定通知 - 返回结果为:\(String(describing: results))") 187 | let title = "查找指定通知 \(String(describing: results?.count)) 条" 188 | let message = "\(String(describing: results))" 189 | JPushUtils.showAlertController(withTitle: title, message: message) 190 | } 191 | JPUSHService.findNotification(identifier) 192 | } 193 | 194 | @IBAction func removeNotificationWithIdentifier(_ sender: Any) { 195 | let identifier = JPushNotificationIdentifier() 196 | if self.requestIdentifierTF.text?.count ?? 0 > 0 { 197 | //note:identifiers这里可以设置多个identifier来删除多个指定推送。 198 | identifier.identifiers = [self.requestIdentifierTF.text!] 199 | //在iOS10以下,可以通过通知对象来删除具体的某一个通知 200 | identifier.delivered = self.deliveredSW.isOn 201 | JPUSHService.removeNotification(identifier) 202 | print("删除指定通知") 203 | JPushUtils.showAlertController(withTitle: "", message: "删除指定通知") 204 | } 205 | } 206 | 207 | @IBAction func removeAllNotification(_ sender: Any) { 208 | //iOS10以下 移除所有推送; 209 | //iOS10以上 移除所有在通知中心显示推送和待推送请求, 当然也可以通过 delivered 属性来选择移除所有通知中心的通知,或者是未触发的所有通知 210 | JPUSHService.removeNotification(nil) 211 | print("删除所有通知") 212 | JPushUtils.showAlertController(withTitle: "", message: "删除所有通知") 213 | } 214 | 215 | func generateNotificationContent() -> JPushNotificationContent { 216 | let content = JPushNotificationContent() 217 | content.title = titleTF.text ?? "" 218 | content.subtitle = subtitleTF.text ?? "" 219 | content.body = bodyTF.text ?? "" 220 | content.badge = NSNumber(value: Int(badgeTF.text ?? "") ?? 0) 221 | if #available(iOS 10, *) { 222 | }else { 223 | content.action = actionTF.text ?? "" 224 | } 225 | content.categoryIdentifier = cateforyIdentifierTF.text ?? "" 226 | content.threadIdentifier = threadIDTF.text ?? "" 227 | 228 | if #available(iOS 10.0, *) { 229 | let soundSetting = JPushNotificationSound() 230 | soundSetting.soundName = soundTF.text 231 | if #available(iOS 12.0, *) { 232 | soundSetting.criticalSoundName = "sound.caf" 233 | soundSetting.criticalSoundVolume = 0.9 234 | } 235 | content.soundSetting = soundSetting 236 | } else { 237 | content.sound = soundTF.text 238 | } 239 | 240 | if #available(iOS 12.0, *) { 241 | content.summaryArgument = summaryArgumentTF.text ?? "" 242 | content.summaryArgumentCount = UInt(Int(summaryArgCountTF.text ?? "") ?? 0) 243 | } 244 | 245 | if #available(iOS 16.0, *) { 246 | content.filterCriteria = "fromwork" 247 | } 248 | 249 | if #available(iOS 10.0, *) { 250 | if requestIdentifierTF.text?.count ?? 0 <= 0 { 251 | JPushUtils.showAlertController(withTitle: "", message: "通知identifier不能为空") 252 | } 253 | } 254 | 255 | return content 256 | } 257 | 258 | } 259 | -------------------------------------------------------------------------------- /JPushSwiftDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 77; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0A0B472BEDD3CD4542E24255 /* Pods_JPushSwiftDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF81C47306F54EA7FA3448A9 /* Pods_JPushSwiftDemo.framework */; }; 11 | 62343EAB1DFFC3C000DF77D0 /* libresolv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 62343EAA1DFFC3C000DF77D0 /* libresolv.tbd */; }; 12 | 6296C8AB1C92954500FA965C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6296C8AA1C92954500FA965C /* AppDelegate.swift */; }; 13 | 6296C8B21C92954500FA965C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6296C8B11C92954500FA965C /* Assets.xcassets */; }; 14 | 6296C8B51C92954500FA965C /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6296C8B31C92954500FA965C /* LaunchScreen.storyboard */; }; 15 | 6296C8C01C92954500FA965C /* JPushSwiftDemoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6296C8BF1C92954500FA965C /* JPushSwiftDemoTests.swift */; }; 16 | 6296C8CB1C92954500FA965C /* JPushSwiftDemoUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6296C8CA1C92954500FA965C /* JPushSwiftDemoUITests.swift */; }; 17 | 6296C8EB1C929B6200FA965C /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6296C8EA1C929B6200FA965C /* Security.framework */; }; 18 | 6296C8ED1C929B6800FA965C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6296C8EC1C929B6800FA965C /* Foundation.framework */; }; 19 | 6296C8EF1C929B6D00FA965C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6296C8EE1C929B6D00FA965C /* CoreGraphics.framework */; }; 20 | 6296C8F11C929B7A00FA965C /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6296C8F01C929B7A00FA965C /* SystemConfiguration.framework */; }; 21 | 6296C8F31C929B9B00FA965C /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6296C8F21C929B9B00FA965C /* CoreTelephony.framework */; }; 22 | 6296C8F51C929BA200FA965C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6296C8F41C929BA200FA965C /* CoreFoundation.framework */; }; 23 | 6296C8F71C929BAA00FA965C /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6296C8F61C929BAA00FA965C /* CFNetwork.framework */; }; 24 | 6296C8F91C929BBA00FA965C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6296C8F81C929BBA00FA965C /* UIKit.framework */; }; 25 | 6296C8FB1C929BC300FA965C /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 6296C8FA1C929BC300FA965C /* libz.tbd */; }; 26 | 6296C9001C929CD300FA965C /* RootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6296C8FC1C929CD300FA965C /* RootViewController.swift */; }; 27 | 6296C9011C929CD300FA965C /* SendBadgeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6296C8FD1C929CD300FA965C /* SendBadgeViewController.swift */; }; 28 | 6296C9021C929CD300FA965C /* setLocalNotificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6296C8FE1C929CD300FA965C /* setLocalNotificationViewController.swift */; }; 29 | 6296C9031C929CD300FA965C /* SetTagsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6296C8FF1C929CD300FA965C /* SetTagsViewController.swift */; }; 30 | 6296C9061C929DAF00FA965C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6296C9041C929DAF00FA965C /* Main.storyboard */; }; 31 | 6296C9161C929EC600FA965C /* ios7.png in Resources */ = {isa = PBXBuildFile; fileRef = 6296C90A1C929EC600FA965C /* ios7.png */; }; 32 | 6296C9171C929EC600FA965C /* ipad1x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6296C90B1C929EC600FA965C /* ipad1x.png */; }; 33 | 6296C9181C929EC600FA965C /* ipad2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6296C90C1C929EC600FA965C /* ipad2x.png */; }; 34 | 6296C9191C929EC600FA965C /* ipadmini1x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6296C90D1C929EC600FA965C /* ipadmini1x.png */; }; 35 | 6296C91A1C929EC600FA965C /* ipadmini2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6296C90E1C929EC600FA965C /* ipadmini2x.png */; }; 36 | 6296C91B1C929EC600FA965C /* iphone1x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6296C90F1C929EC600FA965C /* iphone1x.png */; }; 37 | 6296C91C1C929EC600FA965C /* iphone2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6296C9101C929EC600FA965C /* iphone2x.png */; }; 38 | 6296C91D1C929EC600FA965C /* index.png in Resources */ = {isa = PBXBuildFile; fileRef = 6296C9121C929EC600FA965C /* index.png */; }; 39 | 6296C91E1C929EC600FA965C /* localNotification.png in Resources */ = {isa = PBXBuildFile; fileRef = 6296C9131C929EC600FA965C /* localNotification.png */; }; 40 | 6296C91F1C929EC600FA965C /* report.png in Resources */ = {isa = PBXBuildFile; fileRef = 6296C9141C929EC600FA965C /* report.png */; }; 41 | 6296C9201C929EC600FA965C /* setTags.png in Resources */ = {isa = PBXBuildFile; fileRef = 6296C9151C929EC600FA965C /* setTags.png */; }; 42 | 62A803262AB0645700A832AA /* JPushUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62A803252AB0645700A832AA /* JPushUtils.swift */; }; 43 | 62FEB1EB2E9CE54B00CD399D /* DemoNotificationService.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 62FEB1E42E9CE54B00CD399D /* DemoNotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 44 | 63345C254F957F33E197D94B /* Pods_JPushSwiftDemoUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9279200B40C5DF645CE762B5 /* Pods_JPushSwiftDemoUITests.framework */; }; 45 | 6CFBBAD01A4D76F0B75B8806 /* Pods_JPushSwiftDemoTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5F236643CF92514E473D6ED /* Pods_JPushSwiftDemoTests.framework */; }; 46 | C8BDE1352BB9CAAB70298375 /* Pods_DemoNotificationService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D59E73A29973426C5CCFFA05 /* Pods_DemoNotificationService.framework */; }; 47 | /* End PBXBuildFile section */ 48 | 49 | /* Begin PBXContainerItemProxy section */ 50 | 6296C8BC1C92954500FA965C /* PBXContainerItemProxy */ = { 51 | isa = PBXContainerItemProxy; 52 | containerPortal = 6296C89F1C92954500FA965C /* Project object */; 53 | proxyType = 1; 54 | remoteGlobalIDString = 6296C8A61C92954500FA965C; 55 | remoteInfo = JPushSwiftDemo; 56 | }; 57 | 6296C8C71C92954500FA965C /* PBXContainerItemProxy */ = { 58 | isa = PBXContainerItemProxy; 59 | containerPortal = 6296C89F1C92954500FA965C /* Project object */; 60 | proxyType = 1; 61 | remoteGlobalIDString = 6296C8A61C92954500FA965C; 62 | remoteInfo = JPushSwiftDemo; 63 | }; 64 | 62FEB1E92E9CE54B00CD399D /* PBXContainerItemProxy */ = { 65 | isa = PBXContainerItemProxy; 66 | containerPortal = 6296C89F1C92954500FA965C /* Project object */; 67 | proxyType = 1; 68 | remoteGlobalIDString = 62FEB1E32E9CE54B00CD399D; 69 | remoteInfo = DemoNotificationService; 70 | }; 71 | /* End PBXContainerItemProxy section */ 72 | 73 | /* Begin PBXCopyFilesBuildPhase section */ 74 | 62FEB1EC2E9CE54B00CD399D /* Embed Foundation Extensions */ = { 75 | isa = PBXCopyFilesBuildPhase; 76 | buildActionMask = 2147483647; 77 | dstPath = ""; 78 | dstSubfolderSpec = 13; 79 | files = ( 80 | 62FEB1EB2E9CE54B00CD399D /* DemoNotificationService.appex in Embed Foundation Extensions */, 81 | ); 82 | name = "Embed Foundation Extensions"; 83 | runOnlyForDeploymentPostprocessing = 0; 84 | }; 85 | /* End PBXCopyFilesBuildPhase section */ 86 | 87 | /* Begin PBXFileReference section */ 88 | 0B4C877631491CD3377020EF /* Pods-DemoNotificationService.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DemoNotificationService.release.xcconfig"; path = "Pods/Target Support Files/Pods-DemoNotificationService/Pods-DemoNotificationService.release.xcconfig"; sourceTree = ""; }; 89 | 62343EAA1DFFC3C000DF77D0 /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; }; 90 | 6296C8A71C92954500FA965C /* JPushSwiftDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JPushSwiftDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 91 | 6296C8AA1C92954500FA965C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 92 | 6296C8B11C92954500FA965C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 93 | 6296C8B41C92954500FA965C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 94 | 6296C8B61C92954500FA965C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 95 | 6296C8BB1C92954500FA965C /* JPushSwiftDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JPushSwiftDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 96 | 6296C8BF1C92954500FA965C /* JPushSwiftDemoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JPushSwiftDemoTests.swift; sourceTree = ""; }; 97 | 6296C8C11C92954500FA965C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 98 | 6296C8C61C92954500FA965C /* JPushSwiftDemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JPushSwiftDemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 99 | 6296C8CA1C92954500FA965C /* JPushSwiftDemoUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JPushSwiftDemoUITests.swift; sourceTree = ""; }; 100 | 6296C8CC1C92954500FA965C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 101 | 6296C8E71C929AE200FA965C /* JPushSwiftDemo-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "JPushSwiftDemo-Bridging-Header.h"; sourceTree = ""; }; 102 | 6296C8EA1C929B6200FA965C /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 103 | 6296C8EC1C929B6800FA965C /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 104 | 6296C8EE1C929B6D00FA965C /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 105 | 6296C8F01C929B7A00FA965C /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; 106 | 6296C8F21C929B9B00FA965C /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; 107 | 6296C8F41C929BA200FA965C /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; 108 | 6296C8F61C929BAA00FA965C /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; 109 | 6296C8F81C929BBA00FA965C /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 110 | 6296C8FA1C929BC300FA965C /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 111 | 6296C8FC1C929CD300FA965C /* RootViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RootViewController.swift; sourceTree = ""; }; 112 | 6296C8FD1C929CD300FA965C /* SendBadgeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendBadgeViewController.swift; sourceTree = ""; }; 113 | 6296C8FE1C929CD300FA965C /* setLocalNotificationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = setLocalNotificationViewController.swift; sourceTree = ""; }; 114 | 6296C8FF1C929CD300FA965C /* SetTagsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetTagsViewController.swift; sourceTree = ""; }; 115 | 6296C9051C929DAF00FA965C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 116 | 6296C90A1C929EC600FA965C /* ios7.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ios7.png; sourceTree = ""; }; 117 | 6296C90B1C929EC600FA965C /* ipad1x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ipad1x.png; sourceTree = ""; }; 118 | 6296C90C1C929EC600FA965C /* ipad2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ipad2x.png; sourceTree = ""; }; 119 | 6296C90D1C929EC600FA965C /* ipadmini1x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ipadmini1x.png; sourceTree = ""; }; 120 | 6296C90E1C929EC600FA965C /* ipadmini2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ipadmini2x.png; sourceTree = ""; }; 121 | 6296C90F1C929EC600FA965C /* iphone1x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = iphone1x.png; sourceTree = ""; }; 122 | 6296C9101C929EC600FA965C /* iphone2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = iphone2x.png; sourceTree = ""; }; 123 | 6296C9121C929EC600FA965C /* index.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = index.png; sourceTree = ""; }; 124 | 6296C9131C929EC600FA965C /* localNotification.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = localNotification.png; sourceTree = ""; }; 125 | 6296C9141C929EC600FA965C /* report.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = report.png; sourceTree = ""; }; 126 | 6296C9151C929EC600FA965C /* setTags.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = setTags.png; sourceTree = ""; }; 127 | 62A0AE5D1D9A11E4004B1B18 /* JPushSwiftDemo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = JPushSwiftDemo.entitlements; sourceTree = ""; }; 128 | 62A803252AB0645700A832AA /* JPushUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JPushUtils.swift; sourceTree = ""; }; 129 | 62FEB1E42E9CE54B00CD399D /* DemoNotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = DemoNotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 130 | 885FEA2F2959C837D2FCA1AE /* Pods-JPushSwiftDemoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JPushSwiftDemoTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-JPushSwiftDemoTests/Pods-JPushSwiftDemoTests.debug.xcconfig"; sourceTree = ""; }; 131 | 9279200B40C5DF645CE762B5 /* Pods_JPushSwiftDemoUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_JPushSwiftDemoUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 132 | 9FFFF5C81FB931713880C4BA /* Pods-JPushSwiftDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JPushSwiftDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-JPushSwiftDemo/Pods-JPushSwiftDemo.release.xcconfig"; sourceTree = ""; }; 133 | A5F236643CF92514E473D6ED /* Pods_JPushSwiftDemoTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_JPushSwiftDemoTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 134 | C3E9A85AFEC4FADC9206BB3E /* Pods-DemoNotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DemoNotificationService.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DemoNotificationService/Pods-DemoNotificationService.debug.xcconfig"; sourceTree = ""; }; 135 | CB866AA3D11C66D0ED08E741 /* Pods-JPushSwiftDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JPushSwiftDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-JPushSwiftDemo/Pods-JPushSwiftDemo.debug.xcconfig"; sourceTree = ""; }; 136 | D13501D86B38BAAA600829C4 /* Pods-JPushSwiftDemoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JPushSwiftDemoTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-JPushSwiftDemoTests/Pods-JPushSwiftDemoTests.release.xcconfig"; sourceTree = ""; }; 137 | D59E73A29973426C5CCFFA05 /* Pods_DemoNotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DemoNotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 138 | DD5ED35176DC07D41F9FCC18 /* Pods-JPushSwiftDemoUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JPushSwiftDemoUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-JPushSwiftDemoUITests/Pods-JPushSwiftDemoUITests.debug.xcconfig"; sourceTree = ""; }; 139 | EC093C7167FE916EA8C020CD /* Pods-JPushSwiftDemoUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JPushSwiftDemoUITests.release.xcconfig"; path = "Pods/Target Support Files/Pods-JPushSwiftDemoUITests/Pods-JPushSwiftDemoUITests.release.xcconfig"; sourceTree = ""; }; 140 | FF81C47306F54EA7FA3448A9 /* Pods_JPushSwiftDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_JPushSwiftDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 141 | /* End PBXFileReference section */ 142 | 143 | /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ 144 | 62FEB1EF2E9CE54B00CD399D /* Exceptions for "DemoNotificationService" folder in "DemoNotificationService" target */ = { 145 | isa = PBXFileSystemSynchronizedBuildFileExceptionSet; 146 | membershipExceptions = ( 147 | Info.plist, 148 | ); 149 | target = 62FEB1E32E9CE54B00CD399D /* DemoNotificationService */; 150 | }; 151 | /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ 152 | 153 | /* Begin PBXFileSystemSynchronizedRootGroup section */ 154 | 62FEB1E52E9CE54B00CD399D /* DemoNotificationService */ = { 155 | isa = PBXFileSystemSynchronizedRootGroup; 156 | exceptions = ( 157 | 62FEB1EF2E9CE54B00CD399D /* Exceptions for "DemoNotificationService" folder in "DemoNotificationService" target */, 158 | ); 159 | path = DemoNotificationService; 160 | sourceTree = ""; 161 | }; 162 | /* End PBXFileSystemSynchronizedRootGroup section */ 163 | 164 | /* Begin PBXFrameworksBuildPhase section */ 165 | 6296C8A41C92954500FA965C /* Frameworks */ = { 166 | isa = PBXFrameworksBuildPhase; 167 | buildActionMask = 2147483647; 168 | files = ( 169 | 62343EAB1DFFC3C000DF77D0 /* libresolv.tbd in Frameworks */, 170 | 6296C8FB1C929BC300FA965C /* libz.tbd in Frameworks */, 171 | 6296C8F91C929BBA00FA965C /* UIKit.framework in Frameworks */, 172 | 6296C8F71C929BAA00FA965C /* CFNetwork.framework in Frameworks */, 173 | 6296C8F51C929BA200FA965C /* CoreFoundation.framework in Frameworks */, 174 | 6296C8F31C929B9B00FA965C /* CoreTelephony.framework in Frameworks */, 175 | 6296C8F11C929B7A00FA965C /* SystemConfiguration.framework in Frameworks */, 176 | 6296C8EF1C929B6D00FA965C /* CoreGraphics.framework in Frameworks */, 177 | 6296C8ED1C929B6800FA965C /* Foundation.framework in Frameworks */, 178 | 6296C8EB1C929B6200FA965C /* Security.framework in Frameworks */, 179 | 0A0B472BEDD3CD4542E24255 /* Pods_JPushSwiftDemo.framework in Frameworks */, 180 | ); 181 | runOnlyForDeploymentPostprocessing = 0; 182 | }; 183 | 6296C8B81C92954500FA965C /* Frameworks */ = { 184 | isa = PBXFrameworksBuildPhase; 185 | buildActionMask = 2147483647; 186 | files = ( 187 | 6CFBBAD01A4D76F0B75B8806 /* Pods_JPushSwiftDemoTests.framework in Frameworks */, 188 | ); 189 | runOnlyForDeploymentPostprocessing = 0; 190 | }; 191 | 6296C8C31C92954500FA965C /* Frameworks */ = { 192 | isa = PBXFrameworksBuildPhase; 193 | buildActionMask = 2147483647; 194 | files = ( 195 | 63345C254F957F33E197D94B /* Pods_JPushSwiftDemoUITests.framework in Frameworks */, 196 | ); 197 | runOnlyForDeploymentPostprocessing = 0; 198 | }; 199 | 62FEB1E12E9CE54B00CD399D /* Frameworks */ = { 200 | isa = PBXFrameworksBuildPhase; 201 | buildActionMask = 2147483647; 202 | files = ( 203 | C8BDE1352BB9CAAB70298375 /* Pods_DemoNotificationService.framework in Frameworks */, 204 | ); 205 | runOnlyForDeploymentPostprocessing = 0; 206 | }; 207 | /* End PBXFrameworksBuildPhase section */ 208 | 209 | /* Begin PBXGroup section */ 210 | 62343EA91DFFC3BF00DF77D0 /* Frameworks */ = { 211 | isa = PBXGroup; 212 | children = ( 213 | 62343EAA1DFFC3C000DF77D0 /* libresolv.tbd */, 214 | D59E73A29973426C5CCFFA05 /* Pods_DemoNotificationService.framework */, 215 | FF81C47306F54EA7FA3448A9 /* Pods_JPushSwiftDemo.framework */, 216 | A5F236643CF92514E473D6ED /* Pods_JPushSwiftDemoTests.framework */, 217 | 9279200B40C5DF645CE762B5 /* Pods_JPushSwiftDemoUITests.framework */, 218 | ); 219 | name = Frameworks; 220 | sourceTree = ""; 221 | }; 222 | 6296C89E1C92954500FA965C = { 223 | isa = PBXGroup; 224 | children = ( 225 | 6296C8A91C92954500FA965C /* JPushSwiftDemo */, 226 | 6296C8BE1C92954500FA965C /* JPushSwiftDemoTests */, 227 | 6296C8C91C92954500FA965C /* JPushSwiftDemoUITests */, 228 | 62FEB1E52E9CE54B00CD399D /* DemoNotificationService */, 229 | 6296C8A81C92954500FA965C /* Products */, 230 | 62343EA91DFFC3BF00DF77D0 /* Frameworks */, 231 | A73D510EE800F481054D5767 /* Pods */, 232 | ); 233 | sourceTree = ""; 234 | }; 235 | 6296C8A81C92954500FA965C /* Products */ = { 236 | isa = PBXGroup; 237 | children = ( 238 | 6296C8A71C92954500FA965C /* JPushSwiftDemo.app */, 239 | 6296C8BB1C92954500FA965C /* JPushSwiftDemoTests.xctest */, 240 | 6296C8C61C92954500FA965C /* JPushSwiftDemoUITests.xctest */, 241 | 62FEB1E42E9CE54B00CD399D /* DemoNotificationService.appex */, 242 | ); 243 | name = Products; 244 | sourceTree = ""; 245 | }; 246 | 6296C8A91C92954500FA965C /* JPushSwiftDemo */ = { 247 | isa = PBXGroup; 248 | children = ( 249 | 6296C8D81C9296E800FA965C /* Framework */, 250 | 6296C8AA1C92954500FA965C /* AppDelegate.swift */, 251 | 62A0AE5D1D9A11E4004B1B18 /* JPushSwiftDemo.entitlements */, 252 | 6296C8FC1C929CD300FA965C /* RootViewController.swift */, 253 | 6296C8FD1C929CD300FA965C /* SendBadgeViewController.swift */, 254 | 6296C8FE1C929CD300FA965C /* setLocalNotificationViewController.swift */, 255 | 6296C8FF1C929CD300FA965C /* SetTagsViewController.swift */, 256 | 62A803252AB0645700A832AA /* JPushUtils.swift */, 257 | 6296C8B11C92954500FA965C /* Assets.xcassets */, 258 | 6296C9081C929EC600FA965C /* Recource */, 259 | 6296C8B31C92954500FA965C /* LaunchScreen.storyboard */, 260 | 6296C9041C929DAF00FA965C /* Main.storyboard */, 261 | 6296C8B61C92954500FA965C /* Info.plist */, 262 | 6296C8E71C929AE200FA965C /* JPushSwiftDemo-Bridging-Header.h */, 263 | ); 264 | path = JPushSwiftDemo; 265 | sourceTree = ""; 266 | }; 267 | 6296C8BE1C92954500FA965C /* JPushSwiftDemoTests */ = { 268 | isa = PBXGroup; 269 | children = ( 270 | 6296C8BF1C92954500FA965C /* JPushSwiftDemoTests.swift */, 271 | 6296C8C11C92954500FA965C /* Info.plist */, 272 | ); 273 | path = JPushSwiftDemoTests; 274 | sourceTree = ""; 275 | }; 276 | 6296C8C91C92954500FA965C /* JPushSwiftDemoUITests */ = { 277 | isa = PBXGroup; 278 | children = ( 279 | 6296C8CA1C92954500FA965C /* JPushSwiftDemoUITests.swift */, 280 | 6296C8CC1C92954500FA965C /* Info.plist */, 281 | ); 282 | path = JPushSwiftDemoUITests; 283 | sourceTree = ""; 284 | }; 285 | 6296C8D81C9296E800FA965C /* Framework */ = { 286 | isa = PBXGroup; 287 | children = ( 288 | 6296C8FA1C929BC300FA965C /* libz.tbd */, 289 | 6296C8F81C929BBA00FA965C /* UIKit.framework */, 290 | 6296C8F61C929BAA00FA965C /* CFNetwork.framework */, 291 | 6296C8F41C929BA200FA965C /* CoreFoundation.framework */, 292 | 6296C8F21C929B9B00FA965C /* CoreTelephony.framework */, 293 | 6296C8F01C929B7A00FA965C /* SystemConfiguration.framework */, 294 | 6296C8EE1C929B6D00FA965C /* CoreGraphics.framework */, 295 | 6296C8EC1C929B6800FA965C /* Foundation.framework */, 296 | 6296C8EA1C929B6200FA965C /* Security.framework */, 297 | ); 298 | name = Framework; 299 | sourceTree = ""; 300 | }; 301 | 6296C9081C929EC600FA965C /* Recource */ = { 302 | isa = PBXGroup; 303 | children = ( 304 | 6296C9091C929EC600FA965C /* icon */, 305 | 6296C9111C929EC600FA965C /* tabBarImage */, 306 | ); 307 | path = Recource; 308 | sourceTree = ""; 309 | }; 310 | 6296C9091C929EC600FA965C /* icon */ = { 311 | isa = PBXGroup; 312 | children = ( 313 | 6296C90A1C929EC600FA965C /* ios7.png */, 314 | 6296C90B1C929EC600FA965C /* ipad1x.png */, 315 | 6296C90C1C929EC600FA965C /* ipad2x.png */, 316 | 6296C90D1C929EC600FA965C /* ipadmini1x.png */, 317 | 6296C90E1C929EC600FA965C /* ipadmini2x.png */, 318 | 6296C90F1C929EC600FA965C /* iphone1x.png */, 319 | 6296C9101C929EC600FA965C /* iphone2x.png */, 320 | ); 321 | path = icon; 322 | sourceTree = ""; 323 | }; 324 | 6296C9111C929EC600FA965C /* tabBarImage */ = { 325 | isa = PBXGroup; 326 | children = ( 327 | 6296C9121C929EC600FA965C /* index.png */, 328 | 6296C9131C929EC600FA965C /* localNotification.png */, 329 | 6296C9141C929EC600FA965C /* report.png */, 330 | 6296C9151C929EC600FA965C /* setTags.png */, 331 | ); 332 | path = tabBarImage; 333 | sourceTree = ""; 334 | }; 335 | A73D510EE800F481054D5767 /* Pods */ = { 336 | isa = PBXGroup; 337 | children = ( 338 | CB866AA3D11C66D0ED08E741 /* Pods-JPushSwiftDemo.debug.xcconfig */, 339 | 9FFFF5C81FB931713880C4BA /* Pods-JPushSwiftDemo.release.xcconfig */, 340 | C3E9A85AFEC4FADC9206BB3E /* Pods-DemoNotificationService.debug.xcconfig */, 341 | 0B4C877631491CD3377020EF /* Pods-DemoNotificationService.release.xcconfig */, 342 | 885FEA2F2959C837D2FCA1AE /* Pods-JPushSwiftDemoTests.debug.xcconfig */, 343 | D13501D86B38BAAA600829C4 /* Pods-JPushSwiftDemoTests.release.xcconfig */, 344 | DD5ED35176DC07D41F9FCC18 /* Pods-JPushSwiftDemoUITests.debug.xcconfig */, 345 | EC093C7167FE916EA8C020CD /* Pods-JPushSwiftDemoUITests.release.xcconfig */, 346 | ); 347 | name = Pods; 348 | sourceTree = ""; 349 | }; 350 | /* End PBXGroup section */ 351 | 352 | /* Begin PBXNativeTarget section */ 353 | 6296C8A61C92954500FA965C /* JPushSwiftDemo */ = { 354 | isa = PBXNativeTarget; 355 | buildConfigurationList = 6296C8CF1C92954500FA965C /* Build configuration list for PBXNativeTarget "JPushSwiftDemo" */; 356 | buildPhases = ( 357 | AD06F6F019719333F1E219EB /* [CP] Check Pods Manifest.lock */, 358 | 6296C8A31C92954500FA965C /* Sources */, 359 | 6296C8A41C92954500FA965C /* Frameworks */, 360 | 6296C8A51C92954500FA965C /* Resources */, 361 | 62FEB1EC2E9CE54B00CD399D /* Embed Foundation Extensions */, 362 | ); 363 | buildRules = ( 364 | ); 365 | dependencies = ( 366 | 62FEB1EA2E9CE54B00CD399D /* PBXTargetDependency */, 367 | ); 368 | name = JPushSwiftDemo; 369 | productName = JPushSwiftDemo; 370 | productReference = 6296C8A71C92954500FA965C /* JPushSwiftDemo.app */; 371 | productType = "com.apple.product-type.application"; 372 | }; 373 | 6296C8BA1C92954500FA965C /* JPushSwiftDemoTests */ = { 374 | isa = PBXNativeTarget; 375 | buildConfigurationList = 6296C8D21C92954500FA965C /* Build configuration list for PBXNativeTarget "JPushSwiftDemoTests" */; 376 | buildPhases = ( 377 | C79D0A673ED18A6DCC741461 /* [CP] Check Pods Manifest.lock */, 378 | 6296C8B71C92954500FA965C /* Sources */, 379 | 6296C8B81C92954500FA965C /* Frameworks */, 380 | 6296C8B91C92954500FA965C /* Resources */, 381 | ); 382 | buildRules = ( 383 | ); 384 | dependencies = ( 385 | 6296C8BD1C92954500FA965C /* PBXTargetDependency */, 386 | ); 387 | name = JPushSwiftDemoTests; 388 | productName = JPushSwiftDemoTests; 389 | productReference = 6296C8BB1C92954500FA965C /* JPushSwiftDemoTests.xctest */; 390 | productType = "com.apple.product-type.bundle.unit-test"; 391 | }; 392 | 6296C8C51C92954500FA965C /* JPushSwiftDemoUITests */ = { 393 | isa = PBXNativeTarget; 394 | buildConfigurationList = 6296C8D51C92954500FA965C /* Build configuration list for PBXNativeTarget "JPushSwiftDemoUITests" */; 395 | buildPhases = ( 396 | 747AC26D18643AB6F8555587 /* [CP] Check Pods Manifest.lock */, 397 | 6296C8C21C92954500FA965C /* Sources */, 398 | 6296C8C31C92954500FA965C /* Frameworks */, 399 | 6296C8C41C92954500FA965C /* Resources */, 400 | ); 401 | buildRules = ( 402 | ); 403 | dependencies = ( 404 | 6296C8C81C92954500FA965C /* PBXTargetDependency */, 405 | ); 406 | name = JPushSwiftDemoUITests; 407 | productName = JPushSwiftDemoUITests; 408 | productReference = 6296C8C61C92954500FA965C /* JPushSwiftDemoUITests.xctest */; 409 | productType = "com.apple.product-type.bundle.ui-testing"; 410 | }; 411 | 62FEB1E32E9CE54B00CD399D /* DemoNotificationService */ = { 412 | isa = PBXNativeTarget; 413 | buildConfigurationList = 62FEB1F02E9CE54B00CD399D /* Build configuration list for PBXNativeTarget "DemoNotificationService" */; 414 | buildPhases = ( 415 | C9DEBBD967E9B804E16C4EFB /* [CP] Check Pods Manifest.lock */, 416 | 62FEB1E02E9CE54B00CD399D /* Sources */, 417 | 62FEB1E12E9CE54B00CD399D /* Frameworks */, 418 | 62FEB1E22E9CE54B00CD399D /* Resources */, 419 | ); 420 | buildRules = ( 421 | ); 422 | dependencies = ( 423 | ); 424 | fileSystemSynchronizedGroups = ( 425 | 62FEB1E52E9CE54B00CD399D /* DemoNotificationService */, 426 | ); 427 | name = DemoNotificationService; 428 | productName = DemoNotificationService; 429 | productReference = 62FEB1E42E9CE54B00CD399D /* DemoNotificationService.appex */; 430 | productType = "com.apple.product-type.app-extension"; 431 | }; 432 | /* End PBXNativeTarget section */ 433 | 434 | /* Begin PBXProject section */ 435 | 6296C89F1C92954500FA965C /* Project object */ = { 436 | isa = PBXProject; 437 | attributes = { 438 | LastSwiftUpdateCheck = 2600; 439 | LastUpgradeCheck = 0720; 440 | ORGANIZATIONNAME = HXHG; 441 | TargetAttributes = { 442 | 6296C8A61C92954500FA965C = { 443 | CreatedOnToolsVersion = 7.2.1; 444 | DevelopmentTeam = UT282795WK; 445 | LastSwiftMigration = ""; 446 | ProvisioningStyle = Manual; 447 | SystemCapabilities = { 448 | com.apple.Push = { 449 | enabled = 1; 450 | }; 451 | }; 452 | }; 453 | 6296C8BA1C92954500FA965C = { 454 | CreatedOnToolsVersion = 7.2.1; 455 | LastSwiftMigration = 0800; 456 | TestTargetID = 6296C8A61C92954500FA965C; 457 | }; 458 | 6296C8C51C92954500FA965C = { 459 | CreatedOnToolsVersion = 7.2.1; 460 | LastSwiftMigration = 0800; 461 | TestTargetID = 6296C8A61C92954500FA965C; 462 | }; 463 | 62FEB1E32E9CE54B00CD399D = { 464 | CreatedOnToolsVersion = 26.0.1; 465 | LastSwiftMigration = 2600; 466 | }; 467 | }; 468 | }; 469 | buildConfigurationList = 6296C8A21C92954500FA965C /* Build configuration list for PBXProject "JPushSwiftDemo" */; 470 | developmentRegion = English; 471 | hasScannedForEncodings = 0; 472 | knownRegions = ( 473 | English, 474 | en, 475 | Base, 476 | ); 477 | mainGroup = 6296C89E1C92954500FA965C; 478 | preferredProjectObjectVersion = 77; 479 | productRefGroup = 6296C8A81C92954500FA965C /* Products */; 480 | projectDirPath = ""; 481 | projectRoot = ""; 482 | targets = ( 483 | 6296C8A61C92954500FA965C /* JPushSwiftDemo */, 484 | 6296C8BA1C92954500FA965C /* JPushSwiftDemoTests */, 485 | 6296C8C51C92954500FA965C /* JPushSwiftDemoUITests */, 486 | 62FEB1E32E9CE54B00CD399D /* DemoNotificationService */, 487 | ); 488 | }; 489 | /* End PBXProject section */ 490 | 491 | /* Begin PBXResourcesBuildPhase section */ 492 | 6296C8A51C92954500FA965C /* Resources */ = { 493 | isa = PBXResourcesBuildPhase; 494 | buildActionMask = 2147483647; 495 | files = ( 496 | 6296C91C1C929EC600FA965C /* iphone2x.png in Resources */, 497 | 6296C9061C929DAF00FA965C /* Main.storyboard in Resources */, 498 | 6296C91E1C929EC600FA965C /* localNotification.png in Resources */, 499 | 6296C91D1C929EC600FA965C /* index.png in Resources */, 500 | 6296C9161C929EC600FA965C /* ios7.png in Resources */, 501 | 6296C9171C929EC600FA965C /* ipad1x.png in Resources */, 502 | 6296C91B1C929EC600FA965C /* iphone1x.png in Resources */, 503 | 6296C91F1C929EC600FA965C /* report.png in Resources */, 504 | 6296C9181C929EC600FA965C /* ipad2x.png in Resources */, 505 | 6296C9201C929EC600FA965C /* setTags.png in Resources */, 506 | 6296C8B51C92954500FA965C /* LaunchScreen.storyboard in Resources */, 507 | 6296C9191C929EC600FA965C /* ipadmini1x.png in Resources */, 508 | 6296C91A1C929EC600FA965C /* ipadmini2x.png in Resources */, 509 | 6296C8B21C92954500FA965C /* Assets.xcassets in Resources */, 510 | ); 511 | runOnlyForDeploymentPostprocessing = 0; 512 | }; 513 | 6296C8B91C92954500FA965C /* Resources */ = { 514 | isa = PBXResourcesBuildPhase; 515 | buildActionMask = 2147483647; 516 | files = ( 517 | ); 518 | runOnlyForDeploymentPostprocessing = 0; 519 | }; 520 | 6296C8C41C92954500FA965C /* Resources */ = { 521 | isa = PBXResourcesBuildPhase; 522 | buildActionMask = 2147483647; 523 | files = ( 524 | ); 525 | runOnlyForDeploymentPostprocessing = 0; 526 | }; 527 | 62FEB1E22E9CE54B00CD399D /* Resources */ = { 528 | isa = PBXResourcesBuildPhase; 529 | buildActionMask = 2147483647; 530 | files = ( 531 | ); 532 | runOnlyForDeploymentPostprocessing = 0; 533 | }; 534 | /* End PBXResourcesBuildPhase section */ 535 | 536 | /* Begin PBXShellScriptBuildPhase section */ 537 | 747AC26D18643AB6F8555587 /* [CP] Check Pods Manifest.lock */ = { 538 | isa = PBXShellScriptBuildPhase; 539 | buildActionMask = 2147483647; 540 | files = ( 541 | ); 542 | inputFileListPaths = ( 543 | ); 544 | inputPaths = ( 545 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 546 | "${PODS_ROOT}/Manifest.lock", 547 | ); 548 | name = "[CP] Check Pods Manifest.lock"; 549 | outputFileListPaths = ( 550 | ); 551 | outputPaths = ( 552 | "$(DERIVED_FILE_DIR)/Pods-JPushSwiftDemoUITests-checkManifestLockResult.txt", 553 | ); 554 | runOnlyForDeploymentPostprocessing = 0; 555 | shellPath = /bin/sh; 556 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 557 | showEnvVarsInLog = 0; 558 | }; 559 | AD06F6F019719333F1E219EB /* [CP] Check Pods Manifest.lock */ = { 560 | isa = PBXShellScriptBuildPhase; 561 | buildActionMask = 2147483647; 562 | files = ( 563 | ); 564 | inputPaths = ( 565 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 566 | "${PODS_ROOT}/Manifest.lock", 567 | ); 568 | name = "[CP] Check Pods Manifest.lock"; 569 | outputPaths = ( 570 | "$(DERIVED_FILE_DIR)/Pods-JPushSwiftDemo-checkManifestLockResult.txt", 571 | ); 572 | runOnlyForDeploymentPostprocessing = 0; 573 | shellPath = /bin/sh; 574 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 575 | showEnvVarsInLog = 0; 576 | }; 577 | C79D0A673ED18A6DCC741461 /* [CP] Check Pods Manifest.lock */ = { 578 | isa = PBXShellScriptBuildPhase; 579 | buildActionMask = 2147483647; 580 | files = ( 581 | ); 582 | inputFileListPaths = ( 583 | ); 584 | inputPaths = ( 585 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 586 | "${PODS_ROOT}/Manifest.lock", 587 | ); 588 | name = "[CP] Check Pods Manifest.lock"; 589 | outputFileListPaths = ( 590 | ); 591 | outputPaths = ( 592 | "$(DERIVED_FILE_DIR)/Pods-JPushSwiftDemoTests-checkManifestLockResult.txt", 593 | ); 594 | runOnlyForDeploymentPostprocessing = 0; 595 | shellPath = /bin/sh; 596 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 597 | showEnvVarsInLog = 0; 598 | }; 599 | C9DEBBD967E9B804E16C4EFB /* [CP] Check Pods Manifest.lock */ = { 600 | isa = PBXShellScriptBuildPhase; 601 | buildActionMask = 2147483647; 602 | files = ( 603 | ); 604 | inputFileListPaths = ( 605 | ); 606 | inputPaths = ( 607 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 608 | "${PODS_ROOT}/Manifest.lock", 609 | ); 610 | name = "[CP] Check Pods Manifest.lock"; 611 | outputFileListPaths = ( 612 | ); 613 | outputPaths = ( 614 | "$(DERIVED_FILE_DIR)/Pods-DemoNotificationService-checkManifestLockResult.txt", 615 | ); 616 | runOnlyForDeploymentPostprocessing = 0; 617 | shellPath = /bin/sh; 618 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 619 | showEnvVarsInLog = 0; 620 | }; 621 | /* End PBXShellScriptBuildPhase section */ 622 | 623 | /* Begin PBXSourcesBuildPhase section */ 624 | 6296C8A31C92954500FA965C /* Sources */ = { 625 | isa = PBXSourcesBuildPhase; 626 | buildActionMask = 2147483647; 627 | files = ( 628 | 6296C9021C929CD300FA965C /* setLocalNotificationViewController.swift in Sources */, 629 | 6296C9011C929CD300FA965C /* SendBadgeViewController.swift in Sources */, 630 | 6296C8AB1C92954500FA965C /* AppDelegate.swift in Sources */, 631 | 6296C9031C929CD300FA965C /* SetTagsViewController.swift in Sources */, 632 | 62A803262AB0645700A832AA /* JPushUtils.swift in Sources */, 633 | 6296C9001C929CD300FA965C /* RootViewController.swift in Sources */, 634 | ); 635 | runOnlyForDeploymentPostprocessing = 0; 636 | }; 637 | 6296C8B71C92954500FA965C /* Sources */ = { 638 | isa = PBXSourcesBuildPhase; 639 | buildActionMask = 2147483647; 640 | files = ( 641 | 6296C8C01C92954500FA965C /* JPushSwiftDemoTests.swift in Sources */, 642 | ); 643 | runOnlyForDeploymentPostprocessing = 0; 644 | }; 645 | 6296C8C21C92954500FA965C /* Sources */ = { 646 | isa = PBXSourcesBuildPhase; 647 | buildActionMask = 2147483647; 648 | files = ( 649 | 6296C8CB1C92954500FA965C /* JPushSwiftDemoUITests.swift in Sources */, 650 | ); 651 | runOnlyForDeploymentPostprocessing = 0; 652 | }; 653 | 62FEB1E02E9CE54B00CD399D /* Sources */ = { 654 | isa = PBXSourcesBuildPhase; 655 | buildActionMask = 2147483647; 656 | files = ( 657 | ); 658 | runOnlyForDeploymentPostprocessing = 0; 659 | }; 660 | /* End PBXSourcesBuildPhase section */ 661 | 662 | /* Begin PBXTargetDependency section */ 663 | 6296C8BD1C92954500FA965C /* PBXTargetDependency */ = { 664 | isa = PBXTargetDependency; 665 | target = 6296C8A61C92954500FA965C /* JPushSwiftDemo */; 666 | targetProxy = 6296C8BC1C92954500FA965C /* PBXContainerItemProxy */; 667 | }; 668 | 6296C8C81C92954500FA965C /* PBXTargetDependency */ = { 669 | isa = PBXTargetDependency; 670 | target = 6296C8A61C92954500FA965C /* JPushSwiftDemo */; 671 | targetProxy = 6296C8C71C92954500FA965C /* PBXContainerItemProxy */; 672 | }; 673 | 62FEB1EA2E9CE54B00CD399D /* PBXTargetDependency */ = { 674 | isa = PBXTargetDependency; 675 | target = 62FEB1E32E9CE54B00CD399D /* DemoNotificationService */; 676 | targetProxy = 62FEB1E92E9CE54B00CD399D /* PBXContainerItemProxy */; 677 | }; 678 | /* End PBXTargetDependency section */ 679 | 680 | /* Begin PBXVariantGroup section */ 681 | 6296C8B31C92954500FA965C /* LaunchScreen.storyboard */ = { 682 | isa = PBXVariantGroup; 683 | children = ( 684 | 6296C8B41C92954500FA965C /* Base */, 685 | ); 686 | name = LaunchScreen.storyboard; 687 | sourceTree = ""; 688 | }; 689 | 6296C9041C929DAF00FA965C /* Main.storyboard */ = { 690 | isa = PBXVariantGroup; 691 | children = ( 692 | 6296C9051C929DAF00FA965C /* Base */, 693 | ); 694 | name = Main.storyboard; 695 | sourceTree = ""; 696 | }; 697 | /* End PBXVariantGroup section */ 698 | 699 | /* Begin XCBuildConfiguration section */ 700 | 6296C8CD1C92954500FA965C /* Debug */ = { 701 | isa = XCBuildConfiguration; 702 | buildSettings = { 703 | ALWAYS_SEARCH_USER_PATHS = NO; 704 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 705 | CLANG_CXX_LIBRARY = "libc++"; 706 | CLANG_ENABLE_MODULES = YES; 707 | CLANG_ENABLE_OBJC_ARC = YES; 708 | CLANG_WARN_BOOL_CONVERSION = YES; 709 | CLANG_WARN_CONSTANT_CONVERSION = YES; 710 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 711 | CLANG_WARN_EMPTY_BODY = YES; 712 | CLANG_WARN_ENUM_CONVERSION = YES; 713 | CLANG_WARN_INT_CONVERSION = YES; 714 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 715 | CLANG_WARN_UNREACHABLE_CODE = YES; 716 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 717 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 718 | COPY_PHASE_STRIP = NO; 719 | DEBUG_INFORMATION_FORMAT = dwarf; 720 | ENABLE_STRICT_OBJC_MSGSEND = YES; 721 | ENABLE_TESTABILITY = YES; 722 | GCC_C_LANGUAGE_STANDARD = gnu99; 723 | GCC_DYNAMIC_NO_PIC = NO; 724 | GCC_NO_COMMON_BLOCKS = YES; 725 | GCC_OPTIMIZATION_LEVEL = 0; 726 | GCC_PREPROCESSOR_DEFINITIONS = ( 727 | "DEBUG=1", 728 | "$(inherited)", 729 | ); 730 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 731 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 732 | GCC_WARN_UNDECLARED_SELECTOR = YES; 733 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 734 | GCC_WARN_UNUSED_FUNCTION = YES; 735 | GCC_WARN_UNUSED_VARIABLE = YES; 736 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 737 | MTL_ENABLE_DEBUG_INFO = YES; 738 | ONLY_ACTIVE_ARCH = YES; 739 | SDKROOT = iphoneos; 740 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 741 | TARGETED_DEVICE_FAMILY = "1,2"; 742 | }; 743 | name = Debug; 744 | }; 745 | 6296C8CE1C92954500FA965C /* Release */ = { 746 | isa = XCBuildConfiguration; 747 | buildSettings = { 748 | ALWAYS_SEARCH_USER_PATHS = NO; 749 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 750 | CLANG_CXX_LIBRARY = "libc++"; 751 | CLANG_ENABLE_MODULES = YES; 752 | CLANG_ENABLE_OBJC_ARC = YES; 753 | CLANG_WARN_BOOL_CONVERSION = YES; 754 | CLANG_WARN_CONSTANT_CONVERSION = YES; 755 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 756 | CLANG_WARN_EMPTY_BODY = YES; 757 | CLANG_WARN_ENUM_CONVERSION = YES; 758 | CLANG_WARN_INT_CONVERSION = YES; 759 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 760 | CLANG_WARN_UNREACHABLE_CODE = YES; 761 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 762 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 763 | COPY_PHASE_STRIP = NO; 764 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 765 | ENABLE_NS_ASSERTIONS = NO; 766 | ENABLE_STRICT_OBJC_MSGSEND = YES; 767 | GCC_C_LANGUAGE_STANDARD = gnu99; 768 | GCC_NO_COMMON_BLOCKS = YES; 769 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 770 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 771 | GCC_WARN_UNDECLARED_SELECTOR = YES; 772 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 773 | GCC_WARN_UNUSED_FUNCTION = YES; 774 | GCC_WARN_UNUSED_VARIABLE = YES; 775 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 776 | MTL_ENABLE_DEBUG_INFO = NO; 777 | SDKROOT = iphoneos; 778 | TARGETED_DEVICE_FAMILY = "1,2"; 779 | VALIDATE_PRODUCT = YES; 780 | }; 781 | name = Release; 782 | }; 783 | 6296C8D01C92954500FA965C /* Debug */ = { 784 | isa = XCBuildConfiguration; 785 | baseConfigurationReference = CB866AA3D11C66D0ED08E741 /* Pods-JPushSwiftDemo.debug.xcconfig */; 786 | buildSettings = { 787 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 788 | CLANG_ENABLE_MODULES = YES; 789 | CODE_SIGN_ENTITLEMENTS = JPushSwiftDemo/JPushSwiftDemo.entitlements; 790 | CODE_SIGN_STYLE = Manual; 791 | DEVELOPMENT_TEAM = ""; 792 | "DEVELOPMENT_TEAM[sdk=iphoneos*]" = UT282795WK; 793 | GCC_OPTIMIZATION_LEVEL = 1; 794 | INFOPLIST_FILE = JPushSwiftDemo/Info.plist; 795 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 796 | LD_RUNPATH_SEARCH_PATHS = ( 797 | "$(inherited)", 798 | "@executable_path/Frameworks", 799 | ); 800 | LIBRARY_SEARCH_PATHS = ( 801 | "$(inherited)", 802 | "$(PROJECT_DIR)/JPushSwiftDemo", 803 | ); 804 | PRODUCT_BUNDLE_IDENTIFIER = cn.jiguang.hxhg; 805 | PRODUCT_NAME = "$(TARGET_NAME)"; 806 | PROVISIONING_PROFILE_SPECIFIER = ""; 807 | "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = cn.jiguang.hxhg; 808 | SWIFT_OBJC_BRIDGING_HEADER = "JPushSwiftDemo/JPushSwiftDemo-Bridging-Header.h"; 809 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 810 | SWIFT_VERSION = 4.2; 811 | }; 812 | name = Debug; 813 | }; 814 | 6296C8D11C92954500FA965C /* Release */ = { 815 | isa = XCBuildConfiguration; 816 | baseConfigurationReference = 9FFFF5C81FB931713880C4BA /* Pods-JPushSwiftDemo.release.xcconfig */; 817 | buildSettings = { 818 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 819 | CLANG_ENABLE_MODULES = YES; 820 | CODE_SIGN_ENTITLEMENTS = JPushSwiftDemo/JPushSwiftDemo.entitlements; 821 | CODE_SIGN_STYLE = Manual; 822 | DEVELOPMENT_TEAM = ""; 823 | "DEVELOPMENT_TEAM[sdk=iphoneos*]" = UT282795WK; 824 | INFOPLIST_FILE = JPushSwiftDemo/Info.plist; 825 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 826 | LD_RUNPATH_SEARCH_PATHS = ( 827 | "$(inherited)", 828 | "@executable_path/Frameworks", 829 | ); 830 | LIBRARY_SEARCH_PATHS = ( 831 | "$(inherited)", 832 | "$(PROJECT_DIR)/JPushSwiftDemo", 833 | ); 834 | PRODUCT_BUNDLE_IDENTIFIER = cn.jiguang.hxhg; 835 | PRODUCT_NAME = "$(TARGET_NAME)"; 836 | PROVISIONING_PROFILE_SPECIFIER = ""; 837 | "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = cn.jiguang.hxhg; 838 | SWIFT_OBJC_BRIDGING_HEADER = "JPushSwiftDemo/JPushSwiftDemo-Bridging-Header.h"; 839 | SWIFT_VERSION = 4.2; 840 | }; 841 | name = Release; 842 | }; 843 | 6296C8D31C92954500FA965C /* Debug */ = { 844 | isa = XCBuildConfiguration; 845 | baseConfigurationReference = 885FEA2F2959C837D2FCA1AE /* Pods-JPushSwiftDemoTests.debug.xcconfig */; 846 | buildSettings = { 847 | BUNDLE_LOADER = "$(TEST_HOST)"; 848 | INFOPLIST_FILE = JPushSwiftDemoTests/Info.plist; 849 | LD_RUNPATH_SEARCH_PATHS = ( 850 | "$(inherited)", 851 | "@executable_path/Frameworks", 852 | "@loader_path/Frameworks", 853 | ); 854 | PRODUCT_BUNDLE_IDENTIFIER = HXHG.JPushSwiftDemoTests; 855 | PRODUCT_NAME = "$(TARGET_NAME)"; 856 | SWIFT_VERSION = 3.0; 857 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/JPushSwiftDemo.app/JPushSwiftDemo"; 858 | }; 859 | name = Debug; 860 | }; 861 | 6296C8D41C92954500FA965C /* Release */ = { 862 | isa = XCBuildConfiguration; 863 | baseConfigurationReference = D13501D86B38BAAA600829C4 /* Pods-JPushSwiftDemoTests.release.xcconfig */; 864 | buildSettings = { 865 | BUNDLE_LOADER = "$(TEST_HOST)"; 866 | INFOPLIST_FILE = JPushSwiftDemoTests/Info.plist; 867 | LD_RUNPATH_SEARCH_PATHS = ( 868 | "$(inherited)", 869 | "@executable_path/Frameworks", 870 | "@loader_path/Frameworks", 871 | ); 872 | PRODUCT_BUNDLE_IDENTIFIER = HXHG.JPushSwiftDemoTests; 873 | PRODUCT_NAME = "$(TARGET_NAME)"; 874 | SWIFT_VERSION = 3.0; 875 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/JPushSwiftDemo.app/JPushSwiftDemo"; 876 | }; 877 | name = Release; 878 | }; 879 | 6296C8D61C92954500FA965C /* Debug */ = { 880 | isa = XCBuildConfiguration; 881 | baseConfigurationReference = DD5ED35176DC07D41F9FCC18 /* Pods-JPushSwiftDemoUITests.debug.xcconfig */; 882 | buildSettings = { 883 | INFOPLIST_FILE = JPushSwiftDemoUITests/Info.plist; 884 | LD_RUNPATH_SEARCH_PATHS = ( 885 | "$(inherited)", 886 | "@executable_path/Frameworks", 887 | "@loader_path/Frameworks", 888 | ); 889 | PRODUCT_BUNDLE_IDENTIFIER = HXHG.JPushSwiftDemoUITests; 890 | PRODUCT_NAME = "$(TARGET_NAME)"; 891 | SWIFT_VERSION = 3.0; 892 | TEST_TARGET_NAME = JPushSwiftDemo; 893 | USES_XCTRUNNER = YES; 894 | }; 895 | name = Debug; 896 | }; 897 | 6296C8D71C92954500FA965C /* Release */ = { 898 | isa = XCBuildConfiguration; 899 | baseConfigurationReference = EC093C7167FE916EA8C020CD /* Pods-JPushSwiftDemoUITests.release.xcconfig */; 900 | buildSettings = { 901 | INFOPLIST_FILE = JPushSwiftDemoUITests/Info.plist; 902 | LD_RUNPATH_SEARCH_PATHS = ( 903 | "$(inherited)", 904 | "@executable_path/Frameworks", 905 | "@loader_path/Frameworks", 906 | ); 907 | PRODUCT_BUNDLE_IDENTIFIER = HXHG.JPushSwiftDemoUITests; 908 | PRODUCT_NAME = "$(TARGET_NAME)"; 909 | SWIFT_VERSION = 3.0; 910 | TEST_TARGET_NAME = JPushSwiftDemo; 911 | USES_XCTRUNNER = YES; 912 | }; 913 | name = Release; 914 | }; 915 | 62FEB1ED2E9CE54B00CD399D /* Debug */ = { 916 | isa = XCBuildConfiguration; 917 | baseConfigurationReference = C3E9A85AFEC4FADC9206BB3E /* Pods-DemoNotificationService.debug.xcconfig */; 918 | buildSettings = { 919 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 920 | CLANG_ANALYZER_NONNULL = YES; 921 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 922 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 923 | CLANG_ENABLE_MODULES = YES; 924 | CLANG_ENABLE_OBJC_WEAK = YES; 925 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 926 | CLANG_WARN_COMMA = YES; 927 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 928 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 929 | CLANG_WARN_INFINITE_RECURSION = YES; 930 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 931 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 932 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 933 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 934 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 935 | CLANG_WARN_STRICT_PROTOTYPES = YES; 936 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 937 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 938 | CODE_SIGN_STYLE = Manual; 939 | CURRENT_PROJECT_VERSION = 1; 940 | DEVELOPMENT_TEAM = ""; 941 | "DEVELOPMENT_TEAM[sdk=iphoneos*]" = UT282795WK; 942 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 943 | GCC_C_LANGUAGE_STANDARD = gnu17; 944 | GENERATE_INFOPLIST_FILE = YES; 945 | INFOPLIST_FILE = DemoNotificationService/Info.plist; 946 | INFOPLIST_KEY_CFBundleDisplayName = DemoNotificationService; 947 | INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 HXHG. All rights reserved."; 948 | IPHONEOS_DEPLOYMENT_TARGET = 26.0; 949 | LD_RUNPATH_SEARCH_PATHS = ( 950 | "$(inherited)", 951 | "@executable_path/Frameworks", 952 | "@executable_path/../../Frameworks", 953 | ); 954 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 955 | MARKETING_VERSION = 1.0; 956 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 957 | MTL_FAST_MATH = YES; 958 | PRODUCT_BUNDLE_IDENTIFIER = cn.jiguang.hxhg.extension; 959 | PRODUCT_NAME = "$(TARGET_NAME)"; 960 | PROVISIONING_PROFILE_SPECIFIER = ""; 961 | "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = cn.jiguang.hxhg.extension; 962 | SKIP_INSTALL = YES; 963 | STRING_CATALOG_GENERATE_SYMBOLS = YES; 964 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; 965 | SWIFT_APPROACHABLE_CONCURRENCY = YES; 966 | SWIFT_EMIT_LOC_STRINGS = YES; 967 | SWIFT_OBJC_BRIDGING_HEADER = "DemoNotificationService/DemoNotificationService-Bridging-Header.h"; 968 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 969 | SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 970 | SWIFT_VERSION = 5.0; 971 | TARGETED_DEVICE_FAMILY = "1,2"; 972 | }; 973 | name = Debug; 974 | }; 975 | 62FEB1EE2E9CE54B00CD399D /* Release */ = { 976 | isa = XCBuildConfiguration; 977 | baseConfigurationReference = 0B4C877631491CD3377020EF /* Pods-DemoNotificationService.release.xcconfig */; 978 | buildSettings = { 979 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 980 | CLANG_ANALYZER_NONNULL = YES; 981 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 982 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 983 | CLANG_ENABLE_MODULES = YES; 984 | CLANG_ENABLE_OBJC_WEAK = YES; 985 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 986 | CLANG_WARN_COMMA = YES; 987 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 988 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 989 | CLANG_WARN_INFINITE_RECURSION = YES; 990 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 991 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 992 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 993 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 994 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 995 | CLANG_WARN_STRICT_PROTOTYPES = YES; 996 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 997 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 998 | CODE_SIGN_STYLE = Manual; 999 | CURRENT_PROJECT_VERSION = 1; 1000 | DEVELOPMENT_TEAM = ""; 1001 | "DEVELOPMENT_TEAM[sdk=iphoneos*]" = UT282795WK; 1002 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 1003 | GCC_C_LANGUAGE_STANDARD = gnu17; 1004 | GENERATE_INFOPLIST_FILE = YES; 1005 | INFOPLIST_FILE = DemoNotificationService/Info.plist; 1006 | INFOPLIST_KEY_CFBundleDisplayName = DemoNotificationService; 1007 | INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 HXHG. All rights reserved."; 1008 | IPHONEOS_DEPLOYMENT_TARGET = 26.0; 1009 | LD_RUNPATH_SEARCH_PATHS = ( 1010 | "$(inherited)", 1011 | "@executable_path/Frameworks", 1012 | "@executable_path/../../Frameworks", 1013 | ); 1014 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 1015 | MARKETING_VERSION = 1.0; 1016 | MTL_FAST_MATH = YES; 1017 | PRODUCT_BUNDLE_IDENTIFIER = cn.jiguang.hxhg.extension; 1018 | PRODUCT_NAME = "$(TARGET_NAME)"; 1019 | PROVISIONING_PROFILE_SPECIFIER = ""; 1020 | "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = cn.jiguang.hxhg.extension; 1021 | SKIP_INSTALL = YES; 1022 | STRING_CATALOG_GENERATE_SYMBOLS = YES; 1023 | SWIFT_APPROACHABLE_CONCURRENCY = YES; 1024 | SWIFT_COMPILATION_MODE = wholemodule; 1025 | SWIFT_EMIT_LOC_STRINGS = YES; 1026 | SWIFT_OBJC_BRIDGING_HEADER = "DemoNotificationService/DemoNotificationService-Bridging-Header.h"; 1027 | SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 1028 | SWIFT_VERSION = 5.0; 1029 | TARGETED_DEVICE_FAMILY = "1,2"; 1030 | }; 1031 | name = Release; 1032 | }; 1033 | /* End XCBuildConfiguration section */ 1034 | 1035 | /* Begin XCConfigurationList section */ 1036 | 6296C8A21C92954500FA965C /* Build configuration list for PBXProject "JPushSwiftDemo" */ = { 1037 | isa = XCConfigurationList; 1038 | buildConfigurations = ( 1039 | 6296C8CD1C92954500FA965C /* Debug */, 1040 | 6296C8CE1C92954500FA965C /* Release */, 1041 | ); 1042 | defaultConfigurationIsVisible = 0; 1043 | defaultConfigurationName = Release; 1044 | }; 1045 | 6296C8CF1C92954500FA965C /* Build configuration list for PBXNativeTarget "JPushSwiftDemo" */ = { 1046 | isa = XCConfigurationList; 1047 | buildConfigurations = ( 1048 | 6296C8D01C92954500FA965C /* Debug */, 1049 | 6296C8D11C92954500FA965C /* Release */, 1050 | ); 1051 | defaultConfigurationIsVisible = 0; 1052 | defaultConfigurationName = Release; 1053 | }; 1054 | 6296C8D21C92954500FA965C /* Build configuration list for PBXNativeTarget "JPushSwiftDemoTests" */ = { 1055 | isa = XCConfigurationList; 1056 | buildConfigurations = ( 1057 | 6296C8D31C92954500FA965C /* Debug */, 1058 | 6296C8D41C92954500FA965C /* Release */, 1059 | ); 1060 | defaultConfigurationIsVisible = 0; 1061 | defaultConfigurationName = Release; 1062 | }; 1063 | 6296C8D51C92954500FA965C /* Build configuration list for PBXNativeTarget "JPushSwiftDemoUITests" */ = { 1064 | isa = XCConfigurationList; 1065 | buildConfigurations = ( 1066 | 6296C8D61C92954500FA965C /* Debug */, 1067 | 6296C8D71C92954500FA965C /* Release */, 1068 | ); 1069 | defaultConfigurationIsVisible = 0; 1070 | defaultConfigurationName = Release; 1071 | }; 1072 | 62FEB1F02E9CE54B00CD399D /* Build configuration list for PBXNativeTarget "DemoNotificationService" */ = { 1073 | isa = XCConfigurationList; 1074 | buildConfigurations = ( 1075 | 62FEB1ED2E9CE54B00CD399D /* Debug */, 1076 | 62FEB1EE2E9CE54B00CD399D /* Release */, 1077 | ); 1078 | defaultConfigurationIsVisible = 0; 1079 | defaultConfigurationName = Release; 1080 | }; 1081 | /* End XCConfigurationList section */ 1082 | }; 1083 | rootObject = 6296C89F1C92954500FA965C /* Project object */; 1084 | } 1085 | -------------------------------------------------------------------------------- /JPushSwiftDemo/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 29 | 35 | 42 | 49 | 55 | 61 | 67 | 74 | 81 | 88 | 95 | 102 | 109 | 116 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 183 | 190 | 198 | 206 | 214 | 222 | 230 | 238 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 269 | 277 | 285 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 400 | 401 | 402 | 403 | 404 | 405 | 411 | 412 | 413 | 414 | 415 | 416 | 422 | 428 | 438 | 448 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 481 | 482 | 483 | 484 | 485 | 486 | 492 | 502 | 512 | 522 | 528 | 534 | 540 | 550 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 607 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 750 | 751 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | 783 | 784 | 785 | 786 | 787 | 788 | 789 | 790 | 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 799 | --------------------------------------------------------------------------------