├── 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 | 
13 |
14 | #### 在Link Binary with Libraries 添加下图的依赖库
15 |
16 | 
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 | 
34 |
35 | #### 3. 在刚生成的Objective-C Bridging Header文件中导入 jpush 头文件
36 |
37 | 
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 |
--------------------------------------------------------------------------------