├── .gitignore
├── .swift-version
├── Example
├── Podfile
├── Podfile.lock
├── SwiftWatchConnectivity-WatchKit-App
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── Base.lproj
│ │ └── Interface.storyboard
│ └── Info.plist
├── SwiftWatchConnectivity-WatchKit-Extension
│ ├── Assets.xcassets
│ │ └── Complication.complicationset
│ │ │ ├── Circular.imageset
│ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ ├── Extra Large.imageset
│ │ │ └── Contents.json
│ │ │ ├── Modular.imageset
│ │ │ └── Contents.json
│ │ │ └── Utilitarian.imageset
│ │ │ └── Contents.json
│ ├── ExtensionDelegate.swift
│ ├── Info.plist
│ ├── InterfaceController.swift
│ ├── NotificationController.swift
│ └── PushNotificationPayload.apns
├── SwiftWatchConnectivity.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── SwiftWatchConnectivity-Example.xcscheme
├── SwiftWatchConnectivity.xcworkspace
│ └── contents.xcworkspacedata
├── SwiftWatchConnectivity
│ ├── AppDelegate.swift
│ ├── Base.lproj
│ │ ├── LaunchScreen.xib
│ │ └── Main.storyboard
│ ├── Images.xcassets
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── Info.plist
│ ├── ViewController.swift
│ └── dog.jpg
└── Tests
│ ├── Info.plist
│ └── Tests.swift
├── LICENSE
├── README.md
├── SwiftWatchConnectivity.podspec
├── SwiftWatchConnectivity
├── Assets
│ └── .gitkeep
└── Classes
│ ├── .gitkeep
│ └── SwiftWatchConnectivity.swift
└── _Pods.xcodeproj
/.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 | *.moved-aside
22 | *.xccheckout
23 | *.xcscmblueprint
24 |
25 | ## Obj-C/Swift specific
26 | *.hmap
27 | *.ipa
28 | *.dSYM.zip
29 | *.dSYM
30 |
31 | ## Playgrounds
32 | timeline.xctimeline
33 | playground.xcworkspace
34 |
35 | # Swift Package Manager
36 | #
37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
38 | # Packages/
39 | # Package.pins
40 | .build/
41 |
42 | # CocoaPods
43 | #
44 | # We recommend against adding the Pods directory to your .gitignore. However
45 | # you should judge for yourself, the pros and cons are mentioned at:
46 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
47 | #
48 | Pods/
49 |
50 | # Carthage
51 | #
52 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
53 | # Carthage/Checkouts
54 |
55 | Carthage/Build
56 |
57 | # fastlane
58 | #
59 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
60 | # screenshots whenever they are needed.
61 | # For more information about the recommended setup visit:
62 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
63 |
64 | fastlane/report.xml
65 | fastlane/Preview.html
66 | fastlane/screenshots
67 | fastlane/test_output
68 |
--------------------------------------------------------------------------------
/.swift-version:
--------------------------------------------------------------------------------
1 | 4.0
2 |
--------------------------------------------------------------------------------
/Example/Podfile:
--------------------------------------------------------------------------------
1 | use_frameworks!
2 |
3 | target 'SwiftWatchConnectivity_Example' do
4 | pod 'SwiftWatchConnectivity', :path => '../'
5 |
6 | target 'SwiftWatchConnectivity_Tests' do
7 | inherit! :search_paths
8 | end
9 | end
10 |
11 | target 'SwiftWatchConnectivity-WatchKit-App' do
12 | use_frameworks!
13 | pod 'SwiftWatchConnectivity', :path => '../'
14 | end
15 |
16 | target 'SwiftWatchConnectivity-WatchKit-Extension' do
17 | use_frameworks!
18 | pod 'SwiftWatchConnectivity', :path => '../'
19 | end
20 |
--------------------------------------------------------------------------------
/Example/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - SwiftWatchConnectivity (0.1.0)
3 |
4 | DEPENDENCIES:
5 | - SwiftWatchConnectivity (from `../`)
6 |
7 | EXTERNAL SOURCES:
8 | SwiftWatchConnectivity:
9 | :path: ../
10 |
11 | SPEC CHECKSUMS:
12 | SwiftWatchConnectivity: a4748f32aab506713198057ccba1661b091f5203
13 |
14 | PODFILE CHECKSUM: e6828776e62fc6b70187a74c9d3cb589648b6437
15 |
16 | COCOAPODS: 1.3.1
17 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity-WatchKit-App/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "24x24",
5 | "idiom" : "watch",
6 | "scale" : "2x",
7 | "role" : "notificationCenter",
8 | "subtype" : "38mm"
9 | },
10 | {
11 | "size" : "27.5x27.5",
12 | "idiom" : "watch",
13 | "scale" : "2x",
14 | "role" : "notificationCenter",
15 | "subtype" : "42mm"
16 | },
17 | {
18 | "size" : "29x29",
19 | "idiom" : "watch",
20 | "role" : "companionSettings",
21 | "scale" : "2x"
22 | },
23 | {
24 | "size" : "29x29",
25 | "idiom" : "watch",
26 | "role" : "companionSettings",
27 | "scale" : "3x"
28 | },
29 | {
30 | "size" : "40x40",
31 | "idiom" : "watch",
32 | "scale" : "2x",
33 | "role" : "appLauncher",
34 | "subtype" : "38mm"
35 | },
36 | {
37 | "size" : "86x86",
38 | "idiom" : "watch",
39 | "scale" : "2x",
40 | "role" : "quickLook",
41 | "subtype" : "38mm"
42 | },
43 | {
44 | "size" : "98x98",
45 | "idiom" : "watch",
46 | "scale" : "2x",
47 | "role" : "quickLook",
48 | "subtype" : "42mm"
49 | },
50 | {
51 | "idiom" : "watch-marketing",
52 | "size" : "1024x1024",
53 | "scale" : "1x"
54 | }
55 | ],
56 | "info" : {
57 | "version" : 1,
58 | "author" : "xcode"
59 | }
60 | }
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity-WatchKit-App/Base.lproj/Interface.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity-WatchKit-App/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | SwiftWatchConnectivity_Example
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | UISupportedInterfaceOrientations
24 |
25 | UIInterfaceOrientationPortrait
26 | UIInterfaceOrientationPortraitUpsideDown
27 |
28 | WKCompanionAppBundleIdentifier
29 | org.cocoapods.demo.SwiftWatchConnectivity-Example
30 | WKWatchKitApp
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity-WatchKit-Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "watch",
5 | "screenWidth" : "{130,145}",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "watch",
10 | "screenWidth" : "{146,165}",
11 | "scale" : "2x"
12 | }
13 | ],
14 | "info" : {
15 | "version" : 1,
16 | "author" : "xcode"
17 | }
18 | }
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity-WatchKit-Extension/Assets.xcassets/Complication.complicationset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets" : [
3 | {
4 | "idiom" : "watch",
5 | "filename" : "Circular.imageset",
6 | "role" : "circular"
7 | },
8 | {
9 | "idiom" : "watch",
10 | "filename" : "Extra Large.imageset",
11 | "role" : "extra-large"
12 | },
13 | {
14 | "idiom" : "watch",
15 | "filename" : "Modular.imageset",
16 | "role" : "modular"
17 | },
18 | {
19 | "idiom" : "watch",
20 | "filename" : "Utilitarian.imageset",
21 | "role" : "utilitarian"
22 | }
23 | ],
24 | "info" : {
25 | "version" : 1,
26 | "author" : "xcode"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity-WatchKit-Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "watch",
5 | "screenWidth" : "{130,145}",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "watch",
10 | "screenWidth" : "{146,165}",
11 | "scale" : "2x"
12 | }
13 | ],
14 | "info" : {
15 | "version" : 1,
16 | "author" : "xcode"
17 | }
18 | }
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity-WatchKit-Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "watch",
5 | "screenWidth" : "{130,145}",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "watch",
10 | "screenWidth" : "{146,165}",
11 | "scale" : "2x"
12 | }
13 | ],
14 | "info" : {
15 | "version" : 1,
16 | "author" : "xcode"
17 | }
18 | }
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity-WatchKit-Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "watch",
5 | "screenWidth" : "{130,145}",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "watch",
10 | "screenWidth" : "{146,165}",
11 | "scale" : "2x"
12 | }
13 | ],
14 | "info" : {
15 | "version" : 1,
16 | "author" : "xcode"
17 | }
18 | }
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity-WatchKit-Extension/ExtensionDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ExtensionDelegate.swift
3 | // SwiftWatchConnectivity-WatchKit-App Extension
4 | //
5 | // Created by Matsuo Keisuke on 10/18/17.
6 | // Copyright © 2017 CocoaPods. All rights reserved.
7 | //
8 |
9 | import WatchKit
10 | import SwiftWatchConnectivity
11 |
12 | class ExtensionDelegate: NSObject, WKExtensionDelegate {
13 |
14 | func applicationDidFinishLaunching() {
15 | // Perform any final initialization of your application.
16 | }
17 |
18 | func applicationDidBecomeActive() {
19 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
20 | }
21 |
22 | func applicationWillResignActive() {
23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
24 | // Use this method to pause ongoing tasks, disable timers, etc.
25 | }
26 |
27 | func handle(_ backgroundTasks: Set) {
28 | // Sent when the system needs to launch the application in the background to process tasks. Tasks arrive in a set, so loop through and process each one.
29 | SwiftWatchConnectivity.shared.handle(backgroundTasks)
30 | for task in backgroundTasks {
31 | // Use a switch statement to check the task type
32 | switch task {
33 | case let backgroundTask as WKApplicationRefreshBackgroundTask:
34 | // Be sure to complete the background task once you’re done.
35 | backgroundTask.setTaskCompletedWithSnapshot(false)
36 | case let snapshotTask as WKSnapshotRefreshBackgroundTask:
37 | // Snapshot tasks have a unique completion call, make sure to set your expiration date
38 | snapshotTask.setTaskCompleted(restoredDefaultState: true, estimatedSnapshotExpiration: Date.distantFuture, userInfo: nil)
39 | case let connectivityTask as WKWatchConnectivityRefreshBackgroundTask:
40 | // Be sure to complete the connectivity task once you’re done.
41 | connectivityTask.setTaskCompletedWithSnapshot(false)
42 | case let urlSessionTask as WKURLSessionRefreshBackgroundTask:
43 | // Be sure to complete the URL session task once you’re done.
44 | urlSessionTask.setTaskCompletedWithSnapshot(false)
45 | default:
46 | // make sure to complete unhandled task types
47 | task.setTaskCompletedWithSnapshot(false)
48 | }
49 | }
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity-WatchKit-Extension/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | SwiftWatchConnectivity-WatchKit-Extension
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | XPC!
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | CLKComplicationSupportedFamilies
24 |
25 | CLKComplicationFamilyModularSmall
26 | CLKComplicationFamilyModularLarge
27 | CLKComplicationFamilyUtilitarianSmall
28 | CLKComplicationFamilyUtilitarianSmallFlat
29 | CLKComplicationFamilyUtilitarianLarge
30 | CLKComplicationFamilyCircularSmall
31 | CLKComplicationFamilyExtraLarge
32 |
33 | NSExtension
34 |
35 | NSExtensionAttributes
36 |
37 | WKAppBundleIdentifier
38 | org.cocoapods.demo.SwiftWatchConnectivity-Example.watchkitapp
39 |
40 | NSExtensionPointIdentifier
41 | com.apple.watchkit
42 |
43 | WKExtensionDelegateClassName
44 | $(PRODUCT_MODULE_NAME).ExtensionDelegate
45 |
46 |
47 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity-WatchKit-Extension/InterfaceController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // InterfaceController.swift
3 | // SwiftWatchConnectivity-WatchKit-App Extension
4 | //
5 | // Created by Matsuo Keisuke on 10/18/17.
6 | // Copyright © 2017 CocoaPods. All rights reserved.
7 | //
8 |
9 | import WatchKit
10 | import Foundation
11 | import SwiftWatchConnectivity
12 |
13 | class InterfaceController: WKInterfaceController {
14 |
15 | @IBOutlet weak var messageLabel: WKInterfaceLabel!
16 | @IBOutlet weak var image: WKInterfaceImage!
17 | @IBAction func tapButton(button: WKInterfaceButton) {
18 | SwiftWatchConnectivity.shared.sendMesssage(message: ["msg": "Message from watch: \(NSDate())"])
19 | }
20 |
21 | override func awake(withContext context: Any?) {
22 | super.awake(withContext: context)
23 |
24 | // Configure interface objects here.
25 | SwiftWatchConnectivity.shared.delegate = self
26 | }
27 |
28 | override func willActivate() {
29 | // This method is called when watch view controller is about to be visible to user
30 | super.willActivate()
31 | }
32 |
33 | override func didDeactivate() {
34 | // This method is called when watch view controller is no longer visible
35 | super.didDeactivate()
36 | }
37 |
38 | }
39 |
40 | extension InterfaceController: SwiftWatchConnectivityDelegate {
41 | func connectivity(_ swiftWatchConnectivity: SwiftWatchConnectivity, updatedWithTask task: SwiftWatchConnectivity.Task) {
42 | switch task {
43 | case .updateApplicationContext(let context):
44 | messageLabel.setText(context.description)
45 | case .transferUserInfo(let userInfo):
46 | messageLabel.setText(userInfo.description)
47 | case .transferFile(let fileURL, let metadata):
48 | if let data = FileManager.default.contents(atPath: fileURL.path) {
49 | image.setImageData(data)
50 | }
51 | if let metadata = metadata {
52 | messageLabel.setText(metadata.description)
53 | }
54 | case .sendMessage(let message):
55 | messageLabel.setText((message["msg"] as? Date)?.description)
56 | case .sendMessageData(let messageData):
57 | let message = String(data: messageData, encoding: .utf8)
58 | messageLabel.setText(message)
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity-WatchKit-Extension/NotificationController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NotificationController.swift
3 | // SwiftWatchConnectivity-WatchKit-App Extension
4 | //
5 | // Created by Matsuo Keisuke on 10/18/17.
6 | // Copyright © 2017 CocoaPods. All rights reserved.
7 | //
8 |
9 | import WatchKit
10 | import Foundation
11 | import UserNotifications
12 |
13 |
14 | class NotificationController: WKUserNotificationInterfaceController {
15 |
16 | override init() {
17 | // Initialize variables here.
18 | super.init()
19 |
20 | // Configure interface objects here.
21 | }
22 |
23 | override func willActivate() {
24 | // This method is called when watch view controller is about to be visible to user
25 | super.willActivate()
26 | }
27 |
28 | override func didDeactivate() {
29 | // This method is called when watch view controller is no longer visible
30 | super.didDeactivate()
31 | }
32 |
33 | /*
34 | override func didReceive(_ notification: UNNotification, withCompletion completionHandler: @escaping (WKUserNotificationInterfaceType) -> Swift.Void) {
35 | // This method is called when a notification needs to be presented.
36 | // Implement it if you use a dynamic notification interface.
37 | // Populate your dynamic notification interface as quickly as possible.
38 | //
39 | // After populating your dynamic notification interface call the completion block.
40 | completionHandler(.custom)
41 | }
42 | */
43 | }
44 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity-WatchKit-Extension/PushNotificationPayload.apns:
--------------------------------------------------------------------------------
1 | {
2 | "aps": {
3 | "alert": {
4 | "body": "Test message",
5 | "title": "Optional title"
6 | },
7 | "category": "myCategory",
8 | "thread-id":"5280"
9 | },
10 |
11 | "WatchKit Simulator Actions": [
12 | {
13 | "title": "First Button",
14 | "identifier": "firstButtonAction"
15 | }
16 | ],
17 |
18 | "customKey": "Use this file to define a testing payload for your notifications. The aps dictionary specifies the category, alert text and title. The WatchKit Simulator Actions array can provide info for one or more action buttons in addition to the standard Dismiss button. Any other top level keys are custom payload. If you have multiple such JSON files in your project, you'll be able to select them when choosing to debug the notification interface of your Watch App."
19 | }
20 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 14AB92C84D9972974B5169AC /* Pods_SwiftWatchConnectivity_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A7F8EBDACD9F9BB63C7AB74 /* Pods_SwiftWatchConnectivity_Tests.framework */; };
11 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; };
12 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; };
13 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; };
14 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; };
15 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; };
16 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; };
17 | 97C6654348F49C54D5DF0967 /* Pods_SwiftWatchConnectivity_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 446A2B3ECA992F91E9228391 /* Pods_SwiftWatchConnectivity_Example.framework */; };
18 | A76688F3120271A1232DA136 /* Pods_SwiftWatchConnectivity_WatchKit_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B7E87167023248EDDE4341F /* Pods_SwiftWatchConnectivity_WatchKit_App.framework */; };
19 | F1709009E514A9DFF2E7402C /* Pods_SwiftWatchConnectivity_WatchKit_Extension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5BC12B17C01202C77C71E214 /* Pods_SwiftWatchConnectivity_WatchKit_Extension.framework */; };
20 | F7687ABA1F97845700142192 /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7687AB81F97845700142192 /* Interface.storyboard */; };
21 | F7687ABC1F97845700142192 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F7687ABB1F97845700142192 /* Assets.xcassets */; };
22 | F7687AC31F97845700142192 /* SwiftWatchConnectivity-WatchKit-Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = F7687AC21F97845700142192 /* SwiftWatchConnectivity-WatchKit-Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
23 | F7687AC81F97845700142192 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7687AC71F97845700142192 /* InterfaceController.swift */; };
24 | F7687ACA1F97845700142192 /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7687AC91F97845700142192 /* ExtensionDelegate.swift */; };
25 | F7687ACC1F97845700142192 /* NotificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7687ACB1F97845700142192 /* NotificationController.swift */; };
26 | F7687ACE1F97845700142192 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F7687ACD1F97845700142192 /* Assets.xcassets */; };
27 | F7687AD31F97845700142192 /* SwiftWatchConnectivity-WatchKit-App.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = F7687AB61F97845700142192 /* SwiftWatchConnectivity-WatchKit-App.app */; };
28 | F7687ADD1F97884E00142192 /* dog.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F7687ADC1F97884E00142192 /* dog.jpg */; };
29 | /* End PBXBuildFile section */
30 |
31 | /* Begin PBXContainerItemProxy section */
32 | 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = {
33 | isa = PBXContainerItemProxy;
34 | containerPortal = 607FACC81AFB9204008FA782 /* Project object */;
35 | proxyType = 1;
36 | remoteGlobalIDString = 607FACCF1AFB9204008FA782;
37 | remoteInfo = SwiftWatchConnectivity;
38 | };
39 | F7687AC41F97845700142192 /* PBXContainerItemProxy */ = {
40 | isa = PBXContainerItemProxy;
41 | containerPortal = 607FACC81AFB9204008FA782 /* Project object */;
42 | proxyType = 1;
43 | remoteGlobalIDString = F7687AC11F97845700142192;
44 | remoteInfo = "SwiftWatchConnectivity-WatchKit-App Extension";
45 | };
46 | F7687AD11F97845700142192 /* PBXContainerItemProxy */ = {
47 | isa = PBXContainerItemProxy;
48 | containerPortal = 607FACC81AFB9204008FA782 /* Project object */;
49 | proxyType = 1;
50 | remoteGlobalIDString = F7687AB51F97845700142192;
51 | remoteInfo = "SwiftWatchConnectivity-WatchKit-App";
52 | };
53 | /* End PBXContainerItemProxy section */
54 |
55 | /* Begin PBXCopyFilesBuildPhase section */
56 | F7687AD71F97845700142192 /* Embed App Extensions */ = {
57 | isa = PBXCopyFilesBuildPhase;
58 | buildActionMask = 2147483647;
59 | dstPath = "";
60 | dstSubfolderSpec = 13;
61 | files = (
62 | F7687AC31F97845700142192 /* SwiftWatchConnectivity-WatchKit-Extension.appex in Embed App Extensions */,
63 | );
64 | name = "Embed App Extensions";
65 | runOnlyForDeploymentPostprocessing = 0;
66 | };
67 | F7687ADB1F97845700142192 /* Embed Watch Content */ = {
68 | isa = PBXCopyFilesBuildPhase;
69 | buildActionMask = 2147483647;
70 | dstPath = "$(CONTENTS_FOLDER_PATH)/Watch";
71 | dstSubfolderSpec = 16;
72 | files = (
73 | F7687AD31F97845700142192 /* SwiftWatchConnectivity-WatchKit-App.app in Embed Watch Content */,
74 | );
75 | name = "Embed Watch Content";
76 | runOnlyForDeploymentPostprocessing = 0;
77 | };
78 | /* End PBXCopyFilesBuildPhase section */
79 |
80 | /* Begin PBXFileReference section */
81 | 099047D9B689F8BD399EC865 /* Pods-SwiftWatchConnectivity_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWatchConnectivity_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftWatchConnectivity_Tests/Pods-SwiftWatchConnectivity_Tests.debug.xcconfig"; sourceTree = ""; };
82 | 1A7F8EBDACD9F9BB63C7AB74 /* Pods_SwiftWatchConnectivity_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftWatchConnectivity_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
83 | 1B7E87167023248EDDE4341F /* Pods_SwiftWatchConnectivity_WatchKit_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftWatchConnectivity_WatchKit_App.framework; sourceTree = BUILT_PRODUCTS_DIR; };
84 | 446A2B3ECA992F91E9228391 /* Pods_SwiftWatchConnectivity_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftWatchConnectivity_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
85 | 5BC12B17C01202C77C71E214 /* Pods_SwiftWatchConnectivity_WatchKit_Extension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftWatchConnectivity_WatchKit_Extension.framework; sourceTree = BUILT_PRODUCTS_DIR; };
86 | 5C4D4B4AF09DCC317825D1A7 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; };
87 | 607FACD01AFB9204008FA782 /* SwiftWatchConnectivity_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftWatchConnectivity_Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
88 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
89 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
90 | 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
91 | 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
92 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
93 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; };
94 | 607FACE51AFB9204008FA782 /* SwiftWatchConnectivity_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftWatchConnectivity_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
95 | 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
96 | 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; };
97 | 6CA79B081EE02FD1F139921A /* Pods-SwiftWatchConnectivity-WatchKit-Extension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWatchConnectivity-WatchKit-Extension.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftWatchConnectivity-WatchKit-Extension/Pods-SwiftWatchConnectivity-WatchKit-Extension.debug.xcconfig"; sourceTree = ""; };
98 | 830927067CEE603BA6DE7B97 /* Pods-SwiftWatchConnectivity_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWatchConnectivity_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftWatchConnectivity_Example/Pods-SwiftWatchConnectivity_Example.debug.xcconfig"; sourceTree = ""; };
99 | A53F7B031CC418A8E08D1093 /* Pods-SwiftWatchConnectivity-WatchKit-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWatchConnectivity-WatchKit-App.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftWatchConnectivity-WatchKit-App/Pods-SwiftWatchConnectivity-WatchKit-App.release.xcconfig"; sourceTree = ""; };
100 | AC697FFD06574E978B2E79EE /* Pods-SwiftWatchConnectivity-WatchKit-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWatchConnectivity-WatchKit-App.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftWatchConnectivity-WatchKit-App/Pods-SwiftWatchConnectivity-WatchKit-App.debug.xcconfig"; sourceTree = ""; };
101 | F0DBF2E39FA779729576505F /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; };
102 | F45E0E682536E638B28AC4F9 /* SwiftWatchConnectivity.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = SwiftWatchConnectivity.podspec; path = ../SwiftWatchConnectivity.podspec; sourceTree = ""; };
103 | F55198E4A3944CFE6D2DDD1A /* Pods-SwiftWatchConnectivity-WatchKit-Extension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWatchConnectivity-WatchKit-Extension.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftWatchConnectivity-WatchKit-Extension/Pods-SwiftWatchConnectivity-WatchKit-Extension.release.xcconfig"; sourceTree = ""; };
104 | F7687AB61F97845700142192 /* SwiftWatchConnectivity-WatchKit-App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SwiftWatchConnectivity-WatchKit-App.app"; sourceTree = BUILT_PRODUCTS_DIR; };
105 | F7687AB91F97845700142192 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; };
106 | F7687ABB1F97845700142192 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
107 | F7687ABD1F97845700142192 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
108 | F7687AC21F97845700142192 /* SwiftWatchConnectivity-WatchKit-Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "SwiftWatchConnectivity-WatchKit-Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
109 | F7687AC71F97845700142192 /* InterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceController.swift; sourceTree = ""; };
110 | F7687AC91F97845700142192 /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = ""; };
111 | F7687ACB1F97845700142192 /* NotificationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationController.swift; sourceTree = ""; };
112 | F7687ACD1F97845700142192 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
113 | F7687ACF1F97845700142192 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
114 | F7687AD01F97845700142192 /* PushNotificationPayload.apns */ = {isa = PBXFileReference; lastKnownFileType = text; path = PushNotificationPayload.apns; sourceTree = ""; };
115 | F7687ADC1F97884E00142192 /* dog.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = dog.jpg; sourceTree = ""; };
116 | F9171B973CFB8B00B7EA65DD /* Pods-SwiftWatchConnectivity_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWatchConnectivity_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftWatchConnectivity_Tests/Pods-SwiftWatchConnectivity_Tests.release.xcconfig"; sourceTree = ""; };
117 | FFF8698F73600D669C75EB0B /* Pods-SwiftWatchConnectivity_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWatchConnectivity_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftWatchConnectivity_Example/Pods-SwiftWatchConnectivity_Example.release.xcconfig"; sourceTree = ""; };
118 | /* End PBXFileReference section */
119 |
120 | /* Begin PBXFrameworksBuildPhase section */
121 | 607FACCD1AFB9204008FA782 /* Frameworks */ = {
122 | isa = PBXFrameworksBuildPhase;
123 | buildActionMask = 2147483647;
124 | files = (
125 | 97C6654348F49C54D5DF0967 /* Pods_SwiftWatchConnectivity_Example.framework in Frameworks */,
126 | );
127 | runOnlyForDeploymentPostprocessing = 0;
128 | };
129 | 607FACE21AFB9204008FA782 /* Frameworks */ = {
130 | isa = PBXFrameworksBuildPhase;
131 | buildActionMask = 2147483647;
132 | files = (
133 | 14AB92C84D9972974B5169AC /* Pods_SwiftWatchConnectivity_Tests.framework in Frameworks */,
134 | );
135 | runOnlyForDeploymentPostprocessing = 0;
136 | };
137 | 767A0E1F656D4D8F884BD52C /* Frameworks */ = {
138 | isa = PBXFrameworksBuildPhase;
139 | buildActionMask = 2147483647;
140 | files = (
141 | A76688F3120271A1232DA136 /* Pods_SwiftWatchConnectivity_WatchKit_App.framework in Frameworks */,
142 | );
143 | runOnlyForDeploymentPostprocessing = 0;
144 | };
145 | F7687ABF1F97845700142192 /* Frameworks */ = {
146 | isa = PBXFrameworksBuildPhase;
147 | buildActionMask = 2147483647;
148 | files = (
149 | F1709009E514A9DFF2E7402C /* Pods_SwiftWatchConnectivity_WatchKit_Extension.framework in Frameworks */,
150 | );
151 | runOnlyForDeploymentPostprocessing = 0;
152 | };
153 | /* End PBXFrameworksBuildPhase section */
154 |
155 | /* Begin PBXGroup section */
156 | 607FACC71AFB9204008FA782 = {
157 | isa = PBXGroup;
158 | children = (
159 | 607FACF51AFB993E008FA782 /* Podspec Metadata */,
160 | 607FACD21AFB9204008FA782 /* Example for SwiftWatchConnectivity */,
161 | 607FACE81AFB9204008FA782 /* Tests */,
162 | F7687AB71F97845700142192 /* SwiftWatchConnectivity-WatchKit-App */,
163 | F7687AC61F97845700142192 /* SwiftWatchConnectivity-WatchKit-Extension */,
164 | 607FACD11AFB9204008FA782 /* Products */,
165 | 953A7F519E8EF74CBC72B6FE /* Pods */,
166 | B059EBBD980C9CD119EDFA3E /* Frameworks */,
167 | );
168 | sourceTree = "";
169 | };
170 | 607FACD11AFB9204008FA782 /* Products */ = {
171 | isa = PBXGroup;
172 | children = (
173 | 607FACD01AFB9204008FA782 /* SwiftWatchConnectivity_Example.app */,
174 | 607FACE51AFB9204008FA782 /* SwiftWatchConnectivity_Tests.xctest */,
175 | F7687AB61F97845700142192 /* SwiftWatchConnectivity-WatchKit-App.app */,
176 | F7687AC21F97845700142192 /* SwiftWatchConnectivity-WatchKit-Extension.appex */,
177 | );
178 | name = Products;
179 | sourceTree = "";
180 | };
181 | 607FACD21AFB9204008FA782 /* Example for SwiftWatchConnectivity */ = {
182 | isa = PBXGroup;
183 | children = (
184 | F7687ADC1F97884E00142192 /* dog.jpg */,
185 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */,
186 | 607FACD71AFB9204008FA782 /* ViewController.swift */,
187 | 607FACD91AFB9204008FA782 /* Main.storyboard */,
188 | 607FACDC1AFB9204008FA782 /* Images.xcassets */,
189 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */,
190 | 607FACD31AFB9204008FA782 /* Supporting Files */,
191 | );
192 | name = "Example for SwiftWatchConnectivity";
193 | path = SwiftWatchConnectivity;
194 | sourceTree = "";
195 | };
196 | 607FACD31AFB9204008FA782 /* Supporting Files */ = {
197 | isa = PBXGroup;
198 | children = (
199 | 607FACD41AFB9204008FA782 /* Info.plist */,
200 | );
201 | name = "Supporting Files";
202 | sourceTree = "";
203 | };
204 | 607FACE81AFB9204008FA782 /* Tests */ = {
205 | isa = PBXGroup;
206 | children = (
207 | 607FACEB1AFB9204008FA782 /* Tests.swift */,
208 | 607FACE91AFB9204008FA782 /* Supporting Files */,
209 | );
210 | path = Tests;
211 | sourceTree = "";
212 | };
213 | 607FACE91AFB9204008FA782 /* Supporting Files */ = {
214 | isa = PBXGroup;
215 | children = (
216 | 607FACEA1AFB9204008FA782 /* Info.plist */,
217 | );
218 | name = "Supporting Files";
219 | sourceTree = "";
220 | };
221 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = {
222 | isa = PBXGroup;
223 | children = (
224 | F45E0E682536E638B28AC4F9 /* SwiftWatchConnectivity.podspec */,
225 | F0DBF2E39FA779729576505F /* README.md */,
226 | 5C4D4B4AF09DCC317825D1A7 /* LICENSE */,
227 | );
228 | name = "Podspec Metadata";
229 | sourceTree = "";
230 | };
231 | 953A7F519E8EF74CBC72B6FE /* Pods */ = {
232 | isa = PBXGroup;
233 | children = (
234 | 830927067CEE603BA6DE7B97 /* Pods-SwiftWatchConnectivity_Example.debug.xcconfig */,
235 | FFF8698F73600D669C75EB0B /* Pods-SwiftWatchConnectivity_Example.release.xcconfig */,
236 | 099047D9B689F8BD399EC865 /* Pods-SwiftWatchConnectivity_Tests.debug.xcconfig */,
237 | F9171B973CFB8B00B7EA65DD /* Pods-SwiftWatchConnectivity_Tests.release.xcconfig */,
238 | AC697FFD06574E978B2E79EE /* Pods-SwiftWatchConnectivity-WatchKit-App.debug.xcconfig */,
239 | A53F7B031CC418A8E08D1093 /* Pods-SwiftWatchConnectivity-WatchKit-App.release.xcconfig */,
240 | 6CA79B081EE02FD1F139921A /* Pods-SwiftWatchConnectivity-WatchKit-Extension.debug.xcconfig */,
241 | F55198E4A3944CFE6D2DDD1A /* Pods-SwiftWatchConnectivity-WatchKit-Extension.release.xcconfig */,
242 | );
243 | name = Pods;
244 | sourceTree = "";
245 | };
246 | B059EBBD980C9CD119EDFA3E /* Frameworks */ = {
247 | isa = PBXGroup;
248 | children = (
249 | 446A2B3ECA992F91E9228391 /* Pods_SwiftWatchConnectivity_Example.framework */,
250 | 1A7F8EBDACD9F9BB63C7AB74 /* Pods_SwiftWatchConnectivity_Tests.framework */,
251 | 1B7E87167023248EDDE4341F /* Pods_SwiftWatchConnectivity_WatchKit_App.framework */,
252 | 5BC12B17C01202C77C71E214 /* Pods_SwiftWatchConnectivity_WatchKit_Extension.framework */,
253 | );
254 | name = Frameworks;
255 | sourceTree = "";
256 | };
257 | F7687AB71F97845700142192 /* SwiftWatchConnectivity-WatchKit-App */ = {
258 | isa = PBXGroup;
259 | children = (
260 | F7687AB81F97845700142192 /* Interface.storyboard */,
261 | F7687ABB1F97845700142192 /* Assets.xcassets */,
262 | F7687ABD1F97845700142192 /* Info.plist */,
263 | );
264 | path = "SwiftWatchConnectivity-WatchKit-App";
265 | sourceTree = "";
266 | };
267 | F7687AC61F97845700142192 /* SwiftWatchConnectivity-WatchKit-Extension */ = {
268 | isa = PBXGroup;
269 | children = (
270 | F7687AC71F97845700142192 /* InterfaceController.swift */,
271 | F7687AC91F97845700142192 /* ExtensionDelegate.swift */,
272 | F7687ACB1F97845700142192 /* NotificationController.swift */,
273 | F7687ACD1F97845700142192 /* Assets.xcassets */,
274 | F7687ACF1F97845700142192 /* Info.plist */,
275 | F7687AD01F97845700142192 /* PushNotificationPayload.apns */,
276 | );
277 | path = "SwiftWatchConnectivity-WatchKit-Extension";
278 | sourceTree = "";
279 | };
280 | /* End PBXGroup section */
281 |
282 | /* Begin PBXNativeTarget section */
283 | 607FACCF1AFB9204008FA782 /* SwiftWatchConnectivity_Example */ = {
284 | isa = PBXNativeTarget;
285 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SwiftWatchConnectivity_Example" */;
286 | buildPhases = (
287 | 7F144761EF8E94FD2A94F1BD /* [CP] Check Pods Manifest.lock */,
288 | 607FACCC1AFB9204008FA782 /* Sources */,
289 | 607FACCD1AFB9204008FA782 /* Frameworks */,
290 | 607FACCE1AFB9204008FA782 /* Resources */,
291 | DD6BEE5717392305D9864C50 /* [CP] Embed Pods Frameworks */,
292 | 25F98820151B5F6A4D991336 /* [CP] Copy Pods Resources */,
293 | F7687ADB1F97845700142192 /* Embed Watch Content */,
294 | );
295 | buildRules = (
296 | );
297 | dependencies = (
298 | F7687AD21F97845700142192 /* PBXTargetDependency */,
299 | );
300 | name = SwiftWatchConnectivity_Example;
301 | productName = SwiftWatchConnectivity;
302 | productReference = 607FACD01AFB9204008FA782 /* SwiftWatchConnectivity_Example.app */;
303 | productType = "com.apple.product-type.application";
304 | };
305 | 607FACE41AFB9204008FA782 /* SwiftWatchConnectivity_Tests */ = {
306 | isa = PBXNativeTarget;
307 | buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SwiftWatchConnectivity_Tests" */;
308 | buildPhases = (
309 | DE0F3F499F785A7A83D6AC9A /* [CP] Check Pods Manifest.lock */,
310 | 607FACE11AFB9204008FA782 /* Sources */,
311 | 607FACE21AFB9204008FA782 /* Frameworks */,
312 | 607FACE31AFB9204008FA782 /* Resources */,
313 | 2192AE46C431B0A44F4015A6 /* [CP] Embed Pods Frameworks */,
314 | 7AF6BF81049E5152AD1E8DC4 /* [CP] Copy Pods Resources */,
315 | );
316 | buildRules = (
317 | );
318 | dependencies = (
319 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */,
320 | );
321 | name = SwiftWatchConnectivity_Tests;
322 | productName = Tests;
323 | productReference = 607FACE51AFB9204008FA782 /* SwiftWatchConnectivity_Tests.xctest */;
324 | productType = "com.apple.product-type.bundle.unit-test";
325 | };
326 | F7687AB51F97845700142192 /* SwiftWatchConnectivity-WatchKit-App */ = {
327 | isa = PBXNativeTarget;
328 | buildConfigurationList = F7687AD81F97845700142192 /* Build configuration list for PBXNativeTarget "SwiftWatchConnectivity-WatchKit-App" */;
329 | buildPhases = (
330 | FBDC351AD6E5CD938F3A135E /* [CP] Check Pods Manifest.lock */,
331 | F7687AB41F97845700142192 /* Resources */,
332 | F7687AD71F97845700142192 /* Embed App Extensions */,
333 | 767A0E1F656D4D8F884BD52C /* Frameworks */,
334 | 9D5701E651B806C8E95BF5EE /* [CP] Copy Pods Resources */,
335 | );
336 | buildRules = (
337 | );
338 | dependencies = (
339 | F7687AC51F97845700142192 /* PBXTargetDependency */,
340 | );
341 | name = "SwiftWatchConnectivity-WatchKit-App";
342 | productName = "SwiftWatchConnectivity-WatchKit-App";
343 | productReference = F7687AB61F97845700142192 /* SwiftWatchConnectivity-WatchKit-App.app */;
344 | productType = "com.apple.product-type.application.watchapp2";
345 | };
346 | F7687AC11F97845700142192 /* SwiftWatchConnectivity-WatchKit-Extension */ = {
347 | isa = PBXNativeTarget;
348 | buildConfigurationList = F7687AD41F97845700142192 /* Build configuration list for PBXNativeTarget "SwiftWatchConnectivity-WatchKit-Extension" */;
349 | buildPhases = (
350 | A8D2F7DC0DD90B058D3FA3C4 /* [CP] Check Pods Manifest.lock */,
351 | F7687ABE1F97845700142192 /* Sources */,
352 | F7687ABF1F97845700142192 /* Frameworks */,
353 | F7687AC01F97845700142192 /* Resources */,
354 | EC0D30A2BBAF3739583A9714 /* [CP] Embed Pods Frameworks */,
355 | F016B72A3ED3471919C9C982 /* [CP] Copy Pods Resources */,
356 | );
357 | buildRules = (
358 | );
359 | dependencies = (
360 | );
361 | name = "SwiftWatchConnectivity-WatchKit-Extension";
362 | productName = "SwiftWatchConnectivity-WatchKit-App Extension";
363 | productReference = F7687AC21F97845700142192 /* SwiftWatchConnectivity-WatchKit-Extension.appex */;
364 | productType = "com.apple.product-type.watchkit2-extension";
365 | };
366 | /* End PBXNativeTarget section */
367 |
368 | /* Begin PBXProject section */
369 | 607FACC81AFB9204008FA782 /* Project object */ = {
370 | isa = PBXProject;
371 | attributes = {
372 | LastSwiftUpdateCheck = 0900;
373 | LastUpgradeCheck = 0830;
374 | ORGANIZATIONNAME = CocoaPods;
375 | TargetAttributes = {
376 | 607FACCF1AFB9204008FA782 = {
377 | CreatedOnToolsVersion = 6.3.1;
378 | DevelopmentTeam = 6EV77ZMUD9;
379 | LastSwiftMigration = 0900;
380 | };
381 | 607FACE41AFB9204008FA782 = {
382 | CreatedOnToolsVersion = 6.3.1;
383 | DevelopmentTeam = 6EV77ZMUD9;
384 | LastSwiftMigration = 0900;
385 | TestTargetID = 607FACCF1AFB9204008FA782;
386 | };
387 | F7687AB51F97845700142192 = {
388 | CreatedOnToolsVersion = 9.0;
389 | DevelopmentTeam = 6EV77ZMUD9;
390 | ProvisioningStyle = Automatic;
391 | };
392 | F7687AC11F97845700142192 = {
393 | CreatedOnToolsVersion = 9.0;
394 | DevelopmentTeam = 6EV77ZMUD9;
395 | ProvisioningStyle = Automatic;
396 | };
397 | };
398 | };
399 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "SwiftWatchConnectivity" */;
400 | compatibilityVersion = "Xcode 3.2";
401 | developmentRegion = English;
402 | hasScannedForEncodings = 0;
403 | knownRegions = (
404 | en,
405 | Base,
406 | );
407 | mainGroup = 607FACC71AFB9204008FA782;
408 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */;
409 | projectDirPath = "";
410 | projectRoot = "";
411 | targets = (
412 | 607FACCF1AFB9204008FA782 /* SwiftWatchConnectivity_Example */,
413 | 607FACE41AFB9204008FA782 /* SwiftWatchConnectivity_Tests */,
414 | F7687AB51F97845700142192 /* SwiftWatchConnectivity-WatchKit-App */,
415 | F7687AC11F97845700142192 /* SwiftWatchConnectivity-WatchKit-Extension */,
416 | );
417 | };
418 | /* End PBXProject section */
419 |
420 | /* Begin PBXResourcesBuildPhase section */
421 | 607FACCE1AFB9204008FA782 /* Resources */ = {
422 | isa = PBXResourcesBuildPhase;
423 | buildActionMask = 2147483647;
424 | files = (
425 | F7687ADD1F97884E00142192 /* dog.jpg in Resources */,
426 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */,
427 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */,
428 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */,
429 | );
430 | runOnlyForDeploymentPostprocessing = 0;
431 | };
432 | 607FACE31AFB9204008FA782 /* Resources */ = {
433 | isa = PBXResourcesBuildPhase;
434 | buildActionMask = 2147483647;
435 | files = (
436 | );
437 | runOnlyForDeploymentPostprocessing = 0;
438 | };
439 | F7687AB41F97845700142192 /* Resources */ = {
440 | isa = PBXResourcesBuildPhase;
441 | buildActionMask = 2147483647;
442 | files = (
443 | F7687ABC1F97845700142192 /* Assets.xcassets in Resources */,
444 | F7687ABA1F97845700142192 /* Interface.storyboard in Resources */,
445 | );
446 | runOnlyForDeploymentPostprocessing = 0;
447 | };
448 | F7687AC01F97845700142192 /* Resources */ = {
449 | isa = PBXResourcesBuildPhase;
450 | buildActionMask = 2147483647;
451 | files = (
452 | F7687ACE1F97845700142192 /* Assets.xcassets in Resources */,
453 | );
454 | runOnlyForDeploymentPostprocessing = 0;
455 | };
456 | /* End PBXResourcesBuildPhase section */
457 |
458 | /* Begin PBXShellScriptBuildPhase section */
459 | 2192AE46C431B0A44F4015A6 /* [CP] Embed Pods Frameworks */ = {
460 | isa = PBXShellScriptBuildPhase;
461 | buildActionMask = 2147483647;
462 | files = (
463 | );
464 | inputPaths = (
465 | );
466 | name = "[CP] Embed Pods Frameworks";
467 | outputPaths = (
468 | );
469 | runOnlyForDeploymentPostprocessing = 0;
470 | shellPath = /bin/sh;
471 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftWatchConnectivity_Tests/Pods-SwiftWatchConnectivity_Tests-frameworks.sh\"\n";
472 | showEnvVarsInLog = 0;
473 | };
474 | 25F98820151B5F6A4D991336 /* [CP] Copy Pods Resources */ = {
475 | isa = PBXShellScriptBuildPhase;
476 | buildActionMask = 2147483647;
477 | files = (
478 | );
479 | inputPaths = (
480 | );
481 | name = "[CP] Copy Pods Resources";
482 | outputPaths = (
483 | );
484 | runOnlyForDeploymentPostprocessing = 0;
485 | shellPath = /bin/sh;
486 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftWatchConnectivity_Example/Pods-SwiftWatchConnectivity_Example-resources.sh\"\n";
487 | showEnvVarsInLog = 0;
488 | };
489 | 7AF6BF81049E5152AD1E8DC4 /* [CP] Copy Pods Resources */ = {
490 | isa = PBXShellScriptBuildPhase;
491 | buildActionMask = 2147483647;
492 | files = (
493 | );
494 | inputPaths = (
495 | );
496 | name = "[CP] Copy Pods Resources";
497 | outputPaths = (
498 | );
499 | runOnlyForDeploymentPostprocessing = 0;
500 | shellPath = /bin/sh;
501 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftWatchConnectivity_Tests/Pods-SwiftWatchConnectivity_Tests-resources.sh\"\n";
502 | showEnvVarsInLog = 0;
503 | };
504 | 7F144761EF8E94FD2A94F1BD /* [CP] Check Pods Manifest.lock */ = {
505 | isa = PBXShellScriptBuildPhase;
506 | buildActionMask = 2147483647;
507 | files = (
508 | );
509 | inputPaths = (
510 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
511 | "${PODS_ROOT}/Manifest.lock",
512 | );
513 | name = "[CP] Check Pods Manifest.lock";
514 | outputPaths = (
515 | "$(DERIVED_FILE_DIR)/Pods-SwiftWatchConnectivity_Example-checkManifestLockResult.txt",
516 | );
517 | runOnlyForDeploymentPostprocessing = 0;
518 | shellPath = /bin/sh;
519 | 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";
520 | showEnvVarsInLog = 0;
521 | };
522 | 9D5701E651B806C8E95BF5EE /* [CP] Copy Pods Resources */ = {
523 | isa = PBXShellScriptBuildPhase;
524 | buildActionMask = 2147483647;
525 | files = (
526 | );
527 | inputPaths = (
528 | );
529 | name = "[CP] Copy Pods Resources";
530 | outputPaths = (
531 | );
532 | runOnlyForDeploymentPostprocessing = 0;
533 | shellPath = /bin/sh;
534 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftWatchConnectivity-WatchKit-App/Pods-SwiftWatchConnectivity-WatchKit-App-resources.sh\"\n";
535 | showEnvVarsInLog = 0;
536 | };
537 | A8D2F7DC0DD90B058D3FA3C4 /* [CP] Check Pods Manifest.lock */ = {
538 | isa = PBXShellScriptBuildPhase;
539 | buildActionMask = 2147483647;
540 | files = (
541 | );
542 | inputPaths = (
543 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
544 | "${PODS_ROOT}/Manifest.lock",
545 | );
546 | name = "[CP] Check Pods Manifest.lock";
547 | outputPaths = (
548 | "$(DERIVED_FILE_DIR)/Pods-SwiftWatchConnectivity-WatchKit-Extension-checkManifestLockResult.txt",
549 | );
550 | runOnlyForDeploymentPostprocessing = 0;
551 | shellPath = /bin/sh;
552 | 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";
553 | showEnvVarsInLog = 0;
554 | };
555 | DD6BEE5717392305D9864C50 /* [CP] Embed Pods Frameworks */ = {
556 | isa = PBXShellScriptBuildPhase;
557 | buildActionMask = 2147483647;
558 | files = (
559 | );
560 | inputPaths = (
561 | "${SRCROOT}/Pods/Target Support Files/Pods-SwiftWatchConnectivity_Example/Pods-SwiftWatchConnectivity_Example-frameworks.sh",
562 | "${BUILT_PRODUCTS_DIR}/SwiftWatchConnectivity-iOS/SwiftWatchConnectivity.framework",
563 | );
564 | name = "[CP] Embed Pods Frameworks";
565 | outputPaths = (
566 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftWatchConnectivity.framework",
567 | );
568 | runOnlyForDeploymentPostprocessing = 0;
569 | shellPath = /bin/sh;
570 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftWatchConnectivity_Example/Pods-SwiftWatchConnectivity_Example-frameworks.sh\"\n";
571 | showEnvVarsInLog = 0;
572 | };
573 | DE0F3F499F785A7A83D6AC9A /* [CP] Check Pods Manifest.lock */ = {
574 | isa = PBXShellScriptBuildPhase;
575 | buildActionMask = 2147483647;
576 | files = (
577 | );
578 | inputPaths = (
579 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
580 | "${PODS_ROOT}/Manifest.lock",
581 | );
582 | name = "[CP] Check Pods Manifest.lock";
583 | outputPaths = (
584 | "$(DERIVED_FILE_DIR)/Pods-SwiftWatchConnectivity_Tests-checkManifestLockResult.txt",
585 | );
586 | runOnlyForDeploymentPostprocessing = 0;
587 | shellPath = /bin/sh;
588 | 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";
589 | showEnvVarsInLog = 0;
590 | };
591 | EC0D30A2BBAF3739583A9714 /* [CP] Embed Pods Frameworks */ = {
592 | isa = PBXShellScriptBuildPhase;
593 | buildActionMask = 2147483647;
594 | files = (
595 | );
596 | inputPaths = (
597 | "${SRCROOT}/Pods/Target Support Files/Pods-SwiftWatchConnectivity-WatchKit-Extension/Pods-SwiftWatchConnectivity-WatchKit-Extension-frameworks.sh",
598 | "${BUILT_PRODUCTS_DIR}/SwiftWatchConnectivity-watchOS/SwiftWatchConnectivity.framework",
599 | );
600 | name = "[CP] Embed Pods Frameworks";
601 | outputPaths = (
602 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftWatchConnectivity.framework",
603 | );
604 | runOnlyForDeploymentPostprocessing = 0;
605 | shellPath = /bin/sh;
606 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftWatchConnectivity-WatchKit-Extension/Pods-SwiftWatchConnectivity-WatchKit-Extension-frameworks.sh\"\n";
607 | showEnvVarsInLog = 0;
608 | };
609 | F016B72A3ED3471919C9C982 /* [CP] Copy Pods Resources */ = {
610 | isa = PBXShellScriptBuildPhase;
611 | buildActionMask = 2147483647;
612 | files = (
613 | );
614 | inputPaths = (
615 | );
616 | name = "[CP] Copy Pods Resources";
617 | outputPaths = (
618 | );
619 | runOnlyForDeploymentPostprocessing = 0;
620 | shellPath = /bin/sh;
621 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftWatchConnectivity-WatchKit-Extension/Pods-SwiftWatchConnectivity-WatchKit-Extension-resources.sh\"\n";
622 | showEnvVarsInLog = 0;
623 | };
624 | FBDC351AD6E5CD938F3A135E /* [CP] Check Pods Manifest.lock */ = {
625 | isa = PBXShellScriptBuildPhase;
626 | buildActionMask = 2147483647;
627 | files = (
628 | );
629 | inputPaths = (
630 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
631 | "${PODS_ROOT}/Manifest.lock",
632 | );
633 | name = "[CP] Check Pods Manifest.lock";
634 | outputPaths = (
635 | "$(DERIVED_FILE_DIR)/Pods-SwiftWatchConnectivity-WatchKit-App-checkManifestLockResult.txt",
636 | );
637 | runOnlyForDeploymentPostprocessing = 0;
638 | shellPath = /bin/sh;
639 | 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";
640 | showEnvVarsInLog = 0;
641 | };
642 | /* End PBXShellScriptBuildPhase section */
643 |
644 | /* Begin PBXSourcesBuildPhase section */
645 | 607FACCC1AFB9204008FA782 /* Sources */ = {
646 | isa = PBXSourcesBuildPhase;
647 | buildActionMask = 2147483647;
648 | files = (
649 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */,
650 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */,
651 | );
652 | runOnlyForDeploymentPostprocessing = 0;
653 | };
654 | 607FACE11AFB9204008FA782 /* Sources */ = {
655 | isa = PBXSourcesBuildPhase;
656 | buildActionMask = 2147483647;
657 | files = (
658 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */,
659 | );
660 | runOnlyForDeploymentPostprocessing = 0;
661 | };
662 | F7687ABE1F97845700142192 /* Sources */ = {
663 | isa = PBXSourcesBuildPhase;
664 | buildActionMask = 2147483647;
665 | files = (
666 | F7687ACC1F97845700142192 /* NotificationController.swift in Sources */,
667 | F7687ACA1F97845700142192 /* ExtensionDelegate.swift in Sources */,
668 | F7687AC81F97845700142192 /* InterfaceController.swift in Sources */,
669 | );
670 | runOnlyForDeploymentPostprocessing = 0;
671 | };
672 | /* End PBXSourcesBuildPhase section */
673 |
674 | /* Begin PBXTargetDependency section */
675 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = {
676 | isa = PBXTargetDependency;
677 | target = 607FACCF1AFB9204008FA782 /* SwiftWatchConnectivity_Example */;
678 | targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */;
679 | };
680 | F7687AC51F97845700142192 /* PBXTargetDependency */ = {
681 | isa = PBXTargetDependency;
682 | target = F7687AC11F97845700142192 /* SwiftWatchConnectivity-WatchKit-Extension */;
683 | targetProxy = F7687AC41F97845700142192 /* PBXContainerItemProxy */;
684 | };
685 | F7687AD21F97845700142192 /* PBXTargetDependency */ = {
686 | isa = PBXTargetDependency;
687 | target = F7687AB51F97845700142192 /* SwiftWatchConnectivity-WatchKit-App */;
688 | targetProxy = F7687AD11F97845700142192 /* PBXContainerItemProxy */;
689 | };
690 | /* End PBXTargetDependency section */
691 |
692 | /* Begin PBXVariantGroup section */
693 | 607FACD91AFB9204008FA782 /* Main.storyboard */ = {
694 | isa = PBXVariantGroup;
695 | children = (
696 | 607FACDA1AFB9204008FA782 /* Base */,
697 | );
698 | name = Main.storyboard;
699 | sourceTree = "";
700 | };
701 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = {
702 | isa = PBXVariantGroup;
703 | children = (
704 | 607FACDF1AFB9204008FA782 /* Base */,
705 | );
706 | name = LaunchScreen.xib;
707 | sourceTree = "";
708 | };
709 | F7687AB81F97845700142192 /* Interface.storyboard */ = {
710 | isa = PBXVariantGroup;
711 | children = (
712 | F7687AB91F97845700142192 /* Base */,
713 | );
714 | name = Interface.storyboard;
715 | sourceTree = "";
716 | };
717 | /* End PBXVariantGroup section */
718 |
719 | /* Begin XCBuildConfiguration section */
720 | 607FACED1AFB9204008FA782 /* Debug */ = {
721 | isa = XCBuildConfiguration;
722 | buildSettings = {
723 | ALWAYS_SEARCH_USER_PATHS = NO;
724 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
725 | CLANG_CXX_LIBRARY = "libc++";
726 | CLANG_ENABLE_MODULES = YES;
727 | CLANG_ENABLE_OBJC_ARC = YES;
728 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
729 | CLANG_WARN_BOOL_CONVERSION = YES;
730 | CLANG_WARN_COMMA = YES;
731 | CLANG_WARN_CONSTANT_CONVERSION = YES;
732 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
733 | CLANG_WARN_EMPTY_BODY = YES;
734 | CLANG_WARN_ENUM_CONVERSION = YES;
735 | CLANG_WARN_INFINITE_RECURSION = YES;
736 | CLANG_WARN_INT_CONVERSION = YES;
737 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
738 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
739 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
740 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
741 | CLANG_WARN_STRICT_PROTOTYPES = YES;
742 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
743 | CLANG_WARN_UNREACHABLE_CODE = YES;
744 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
745 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
746 | COPY_PHASE_STRIP = NO;
747 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
748 | ENABLE_STRICT_OBJC_MSGSEND = YES;
749 | ENABLE_TESTABILITY = YES;
750 | GCC_C_LANGUAGE_STANDARD = gnu99;
751 | GCC_DYNAMIC_NO_PIC = NO;
752 | GCC_NO_COMMON_BLOCKS = YES;
753 | GCC_OPTIMIZATION_LEVEL = 0;
754 | GCC_PREPROCESSOR_DEFINITIONS = (
755 | "DEBUG=1",
756 | "$(inherited)",
757 | );
758 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
759 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
760 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
761 | GCC_WARN_UNDECLARED_SELECTOR = YES;
762 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
763 | GCC_WARN_UNUSED_FUNCTION = YES;
764 | GCC_WARN_UNUSED_VARIABLE = YES;
765 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
766 | MTL_ENABLE_DEBUG_INFO = YES;
767 | ONLY_ACTIVE_ARCH = YES;
768 | SDKROOT = iphoneos;
769 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
770 | };
771 | name = Debug;
772 | };
773 | 607FACEE1AFB9204008FA782 /* Release */ = {
774 | isa = XCBuildConfiguration;
775 | buildSettings = {
776 | ALWAYS_SEARCH_USER_PATHS = NO;
777 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
778 | CLANG_CXX_LIBRARY = "libc++";
779 | CLANG_ENABLE_MODULES = YES;
780 | CLANG_ENABLE_OBJC_ARC = YES;
781 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
782 | CLANG_WARN_BOOL_CONVERSION = YES;
783 | CLANG_WARN_COMMA = YES;
784 | CLANG_WARN_CONSTANT_CONVERSION = YES;
785 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
786 | CLANG_WARN_EMPTY_BODY = YES;
787 | CLANG_WARN_ENUM_CONVERSION = YES;
788 | CLANG_WARN_INFINITE_RECURSION = YES;
789 | CLANG_WARN_INT_CONVERSION = YES;
790 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
791 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
792 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
793 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
794 | CLANG_WARN_STRICT_PROTOTYPES = YES;
795 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
796 | CLANG_WARN_UNREACHABLE_CODE = YES;
797 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
798 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
799 | COPY_PHASE_STRIP = NO;
800 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
801 | ENABLE_NS_ASSERTIONS = NO;
802 | ENABLE_STRICT_OBJC_MSGSEND = YES;
803 | GCC_C_LANGUAGE_STANDARD = gnu99;
804 | GCC_NO_COMMON_BLOCKS = YES;
805 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
806 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
807 | GCC_WARN_UNDECLARED_SELECTOR = YES;
808 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
809 | GCC_WARN_UNUSED_FUNCTION = YES;
810 | GCC_WARN_UNUSED_VARIABLE = YES;
811 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
812 | MTL_ENABLE_DEBUG_INFO = NO;
813 | SDKROOT = iphoneos;
814 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
815 | VALIDATE_PRODUCT = YES;
816 | };
817 | name = Release;
818 | };
819 | 607FACF01AFB9204008FA782 /* Debug */ = {
820 | isa = XCBuildConfiguration;
821 | baseConfigurationReference = 830927067CEE603BA6DE7B97 /* Pods-SwiftWatchConnectivity_Example.debug.xcconfig */;
822 | buildSettings = {
823 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
824 | DEVELOPMENT_TEAM = 6EV77ZMUD9;
825 | INFOPLIST_FILE = SwiftWatchConnectivity/Info.plist;
826 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
827 | MODULE_NAME = ExampleApp;
828 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)";
829 | PRODUCT_NAME = "$(TARGET_NAME)";
830 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
831 | SWIFT_VERSION = 4.0;
832 | };
833 | name = Debug;
834 | };
835 | 607FACF11AFB9204008FA782 /* Release */ = {
836 | isa = XCBuildConfiguration;
837 | baseConfigurationReference = FFF8698F73600D669C75EB0B /* Pods-SwiftWatchConnectivity_Example.release.xcconfig */;
838 | buildSettings = {
839 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
840 | DEVELOPMENT_TEAM = 6EV77ZMUD9;
841 | INFOPLIST_FILE = SwiftWatchConnectivity/Info.plist;
842 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
843 | MODULE_NAME = ExampleApp;
844 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)";
845 | PRODUCT_NAME = "$(TARGET_NAME)";
846 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
847 | SWIFT_VERSION = 4.0;
848 | };
849 | name = Release;
850 | };
851 | 607FACF31AFB9204008FA782 /* Debug */ = {
852 | isa = XCBuildConfiguration;
853 | baseConfigurationReference = 099047D9B689F8BD399EC865 /* Pods-SwiftWatchConnectivity_Tests.debug.xcconfig */;
854 | buildSettings = {
855 | DEVELOPMENT_TEAM = 6EV77ZMUD9;
856 | FRAMEWORK_SEARCH_PATHS = (
857 | "$(SDKROOT)/Developer/Library/Frameworks",
858 | "$(inherited)",
859 | );
860 | GCC_PREPROCESSOR_DEFINITIONS = (
861 | "DEBUG=1",
862 | "$(inherited)",
863 | );
864 | INFOPLIST_FILE = Tests/Info.plist;
865 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
866 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)";
867 | PRODUCT_NAME = "$(TARGET_NAME)";
868 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
869 | SWIFT_VERSION = 4.0;
870 | };
871 | name = Debug;
872 | };
873 | 607FACF41AFB9204008FA782 /* Release */ = {
874 | isa = XCBuildConfiguration;
875 | baseConfigurationReference = F9171B973CFB8B00B7EA65DD /* Pods-SwiftWatchConnectivity_Tests.release.xcconfig */;
876 | buildSettings = {
877 | DEVELOPMENT_TEAM = 6EV77ZMUD9;
878 | FRAMEWORK_SEARCH_PATHS = (
879 | "$(SDKROOT)/Developer/Library/Frameworks",
880 | "$(inherited)",
881 | );
882 | INFOPLIST_FILE = Tests/Info.plist;
883 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
884 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)";
885 | PRODUCT_NAME = "$(TARGET_NAME)";
886 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
887 | SWIFT_VERSION = 4.0;
888 | };
889 | name = Release;
890 | };
891 | F7687AD51F97845700142192 /* Debug */ = {
892 | isa = XCBuildConfiguration;
893 | baseConfigurationReference = 6CA79B081EE02FD1F139921A /* Pods-SwiftWatchConnectivity-WatchKit-Extension.debug.xcconfig */;
894 | buildSettings = {
895 | ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;
896 | CLANG_ANALYZER_NONNULL = YES;
897 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
898 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
899 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
900 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
901 | CODE_SIGN_STYLE = Automatic;
902 | DEBUG_INFORMATION_FORMAT = dwarf;
903 | DEVELOPMENT_TEAM = 6EV77ZMUD9;
904 | GCC_C_LANGUAGE_STANDARD = gnu11;
905 | INFOPLIST_FILE = "SwiftWatchConnectivity-WatchKit-Extension/Info.plist";
906 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
907 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.SwiftWatchConnectivity-Example.watchkitapp.watchkitextension";
908 | PRODUCT_NAME = "${TARGET_NAME}";
909 | SDKROOT = watchos;
910 | SKIP_INSTALL = YES;
911 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
912 | SWIFT_VERSION = 4.0;
913 | TARGETED_DEVICE_FAMILY = 4;
914 | WATCHOS_DEPLOYMENT_TARGET = 4.0;
915 | };
916 | name = Debug;
917 | };
918 | F7687AD61F97845700142192 /* Release */ = {
919 | isa = XCBuildConfiguration;
920 | baseConfigurationReference = F55198E4A3944CFE6D2DDD1A /* Pods-SwiftWatchConnectivity-WatchKit-Extension.release.xcconfig */;
921 | buildSettings = {
922 | ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;
923 | CLANG_ANALYZER_NONNULL = YES;
924 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
925 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
926 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
927 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
928 | CODE_SIGN_STYLE = Automatic;
929 | DEVELOPMENT_TEAM = 6EV77ZMUD9;
930 | GCC_C_LANGUAGE_STANDARD = gnu11;
931 | INFOPLIST_FILE = "SwiftWatchConnectivity-WatchKit-Extension/Info.plist";
932 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
933 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.SwiftWatchConnectivity-Example.watchkitapp.watchkitextension";
934 | PRODUCT_NAME = "${TARGET_NAME}";
935 | SDKROOT = watchos;
936 | SKIP_INSTALL = YES;
937 | SWIFT_VERSION = 4.0;
938 | TARGETED_DEVICE_FAMILY = 4;
939 | WATCHOS_DEPLOYMENT_TARGET = 4.0;
940 | };
941 | name = Release;
942 | };
943 | F7687AD91F97845700142192 /* Debug */ = {
944 | isa = XCBuildConfiguration;
945 | baseConfigurationReference = AC697FFD06574E978B2E79EE /* Pods-SwiftWatchConnectivity-WatchKit-App.debug.xcconfig */;
946 | buildSettings = {
947 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
948 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
949 | CLANG_ANALYZER_NONNULL = YES;
950 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
951 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
952 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
953 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
954 | CODE_SIGN_STYLE = Automatic;
955 | DEBUG_INFORMATION_FORMAT = dwarf;
956 | DEVELOPMENT_TEAM = 6EV77ZMUD9;
957 | GCC_C_LANGUAGE_STANDARD = gnu11;
958 | IBSC_MODULE = SwiftWatchConnectivity_WatchKit_App_Extension;
959 | INFOPLIST_FILE = "SwiftWatchConnectivity-WatchKit-App/Info.plist";
960 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.SwiftWatchConnectivity-Example.watchkitapp";
961 | PRODUCT_NAME = "$(TARGET_NAME)";
962 | SDKROOT = watchos;
963 | SKIP_INSTALL = YES;
964 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
965 | SWIFT_VERSION = 4.0;
966 | TARGETED_DEVICE_FAMILY = 4;
967 | WATCHOS_DEPLOYMENT_TARGET = 4.0;
968 | };
969 | name = Debug;
970 | };
971 | F7687ADA1F97845700142192 /* Release */ = {
972 | isa = XCBuildConfiguration;
973 | baseConfigurationReference = A53F7B031CC418A8E08D1093 /* Pods-SwiftWatchConnectivity-WatchKit-App.release.xcconfig */;
974 | buildSettings = {
975 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
976 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
977 | CLANG_ANALYZER_NONNULL = YES;
978 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
979 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
980 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
981 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
982 | CODE_SIGN_STYLE = Automatic;
983 | DEVELOPMENT_TEAM = 6EV77ZMUD9;
984 | GCC_C_LANGUAGE_STANDARD = gnu11;
985 | IBSC_MODULE = SwiftWatchConnectivity_WatchKit_App_Extension;
986 | INFOPLIST_FILE = "SwiftWatchConnectivity-WatchKit-App/Info.plist";
987 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.SwiftWatchConnectivity-Example.watchkitapp";
988 | PRODUCT_NAME = "$(TARGET_NAME)";
989 | SDKROOT = watchos;
990 | SKIP_INSTALL = YES;
991 | SWIFT_VERSION = 4.0;
992 | TARGETED_DEVICE_FAMILY = 4;
993 | WATCHOS_DEPLOYMENT_TARGET = 4.0;
994 | };
995 | name = Release;
996 | };
997 | /* End XCBuildConfiguration section */
998 |
999 | /* Begin XCConfigurationList section */
1000 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "SwiftWatchConnectivity" */ = {
1001 | isa = XCConfigurationList;
1002 | buildConfigurations = (
1003 | 607FACED1AFB9204008FA782 /* Debug */,
1004 | 607FACEE1AFB9204008FA782 /* Release */,
1005 | );
1006 | defaultConfigurationIsVisible = 0;
1007 | defaultConfigurationName = Release;
1008 | };
1009 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SwiftWatchConnectivity_Example" */ = {
1010 | isa = XCConfigurationList;
1011 | buildConfigurations = (
1012 | 607FACF01AFB9204008FA782 /* Debug */,
1013 | 607FACF11AFB9204008FA782 /* Release */,
1014 | );
1015 | defaultConfigurationIsVisible = 0;
1016 | defaultConfigurationName = Release;
1017 | };
1018 | 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SwiftWatchConnectivity_Tests" */ = {
1019 | isa = XCConfigurationList;
1020 | buildConfigurations = (
1021 | 607FACF31AFB9204008FA782 /* Debug */,
1022 | 607FACF41AFB9204008FA782 /* Release */,
1023 | );
1024 | defaultConfigurationIsVisible = 0;
1025 | defaultConfigurationName = Release;
1026 | };
1027 | F7687AD41F97845700142192 /* Build configuration list for PBXNativeTarget "SwiftWatchConnectivity-WatchKit-Extension" */ = {
1028 | isa = XCConfigurationList;
1029 | buildConfigurations = (
1030 | F7687AD51F97845700142192 /* Debug */,
1031 | F7687AD61F97845700142192 /* Release */,
1032 | );
1033 | defaultConfigurationIsVisible = 0;
1034 | defaultConfigurationName = Release;
1035 | };
1036 | F7687AD81F97845700142192 /* Build configuration list for PBXNativeTarget "SwiftWatchConnectivity-WatchKit-App" */ = {
1037 | isa = XCConfigurationList;
1038 | buildConfigurations = (
1039 | F7687AD91F97845700142192 /* Debug */,
1040 | F7687ADA1F97845700142192 /* Release */,
1041 | );
1042 | defaultConfigurationIsVisible = 0;
1043 | defaultConfigurationName = Release;
1044 | };
1045 | /* End XCConfigurationList section */
1046 | };
1047 | rootObject = 607FACC81AFB9204008FA782 /* Project object */;
1048 | }
1049 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity.xcodeproj/xcshareddata/xcschemes/SwiftWatchConnectivity-Example.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
45 |
46 |
48 |
54 |
55 |
56 |
57 |
58 |
64 |
65 |
66 |
67 |
68 |
69 |
80 |
82 |
88 |
89 |
90 |
91 |
92 |
93 |
99 |
101 |
107 |
108 |
109 |
110 |
112 |
113 |
116 |
117 |
118 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // SwiftWatchConnectivity
4 | //
5 | // Created by ksk.matsuo@gmail.com on 10/18/2017.
6 | // Copyright (c) 2017 ksk.matsuo@gmail.com. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 |
17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
18 | // Override point for customization after application launch.
19 | return true
20 | }
21 |
22 | func applicationWillResignActive(_ application: UIApplication) {
23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
25 | }
26 |
27 | func applicationDidEnterBackground(_ application: UIApplication) {
28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
30 | }
31 |
32 | func applicationWillEnterForeground(_ application: UIApplication) {
33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
34 | }
35 |
36 | func applicationDidBecomeActive(_ application: UIApplication) {
37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
38 | }
39 |
40 | func applicationWillTerminate(_ application: UIApplication) {
41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
42 | }
43 |
44 |
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity/Base.lproj/LaunchScreen.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
20 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity/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 |
28 |
35 |
42 |
48 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | }
33 | ],
34 | "info" : {
35 | "version" : 1,
36 | "author" : "xcode"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity/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 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // SwiftWatchConnectivity
4 | //
5 | // Created by ksk.matsuo@gmail.com on 10/18/2017.
6 | // Copyright (c) 2017 ksk.matsuo@gmail.com. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import SwiftWatchConnectivity
11 |
12 | class ViewController: UIViewController {
13 |
14 | @IBAction func didTapSendMessageButton(button: UIButton) {
15 | SwiftWatchConnectivity.shared.sendMesssage(message: ["msg": NSDate()])
16 | }
17 | @IBAction func didTapSendUserInfoButton(button: UIButton) {
18 | SwiftWatchConnectivity.shared.transferUserInfo(userInfo: [
19 | "string": "hello",
20 | "bool": false,
21 | "array": [1,2,3]
22 | ])
23 | }
24 | @IBAction func didTapSendDataButton(button: UIButton) {
25 | guard let data = "messageData".data(using: .utf8) else { return }
26 | SwiftWatchConnectivity.shared.sendMesssageData(data: data)
27 | }
28 | @IBAction func didTapSendFileButton(button: UIButton) {
29 | guard let fileURL = Bundle.main.url(forResource: "dog", withExtension: "jpg") else { return }
30 | SwiftWatchConnectivity.shared.transferFile(fileURL: fileURL, metadata: ["Level": "8"])
31 | }
32 |
33 | @IBOutlet weak var label: UILabel!
34 |
35 | override func viewDidLoad() {
36 | super.viewDidLoad()
37 | // Do any additional setup after loading the view, typically from a nib.
38 | SwiftWatchConnectivity.shared.delegate = self
39 | }
40 | }
41 |
42 | extension ViewController: SwiftWatchConnectivityDelegate {
43 | func connectivity(_ swiftWatchConnectivity: SwiftWatchConnectivity, updatedWithTask task: SwiftWatchConnectivity.Task) {
44 | switch task {
45 | case .sendMessage(let message):
46 | label.text = message["msg"] as? String
47 | case .transferUserInfo(let userInfo):
48 | label.text = userInfo.description
49 | case .updateApplicationContext(let context):
50 | label.text = context.description
51 | case .transferFile(_, _):
52 | break
53 | case .sendMessageData(_):
54 | break
55 | }
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/Example/SwiftWatchConnectivity/dog.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matzo/SwiftWatchConnectivity/0d9bc0e2124911abef1642cc0740fc89e7ae7433/Example/SwiftWatchConnectivity/dog.jpg
--------------------------------------------------------------------------------
/Example/Tests/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 |
--------------------------------------------------------------------------------
/Example/Tests/Tests.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import XCTest
3 | import SwiftWatchConnectivity
4 |
5 | class Tests: XCTestCase {
6 |
7 | override func setUp() {
8 | super.setUp()
9 | // Put setup code here. This method is called before the invocation of each test method in the class.
10 | }
11 |
12 | override func tearDown() {
13 | // Put teardown code here. This method is called after the invocation of each test method in the class.
14 | super.tearDown()
15 | }
16 |
17 | func testExample() {
18 | // This is an example of a functional test case.
19 | XCTAssert(true, "Pass")
20 | }
21 |
22 | func testPerformanceExample() {
23 | // This is an example of a performance test case.
24 | self.measure() {
25 | // Put the code you want to measure the time of here.
26 | }
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2017 ksk.matsuo@gmail.com
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SwiftWatchConnectivity
2 |
3 | [](https://travis-ci.org/ksk.matsuo@gmail.com/SwiftWatchConnectivity)
4 | [](http://cocoapods.org/pods/SwiftWatchConnectivity)
5 | [](http://cocoapods.org/pods/SwiftWatchConnectivity)
6 | [](http://cocoapods.org/pods/SwiftWatchConnectivity)
7 | 
8 | 
9 | 
10 |
11 | SwiftWatchConnectivity is a WatchConnectivity simple wrapper.
12 |
13 | ## Features
14 |
15 | - Queueing requested and received task until all available
16 | - Support all transer between iOS and watchOS
17 |
18 | ## Example
19 |
20 | To run the example project, clone the repo, and run `pod install` from the Example directory first.
21 |
22 | ### Prepare
23 | - for iOS code
24 | ``` swift
25 | // ViewController.swift
26 | override func viewDidLoad() {
27 | super.viewDidLoad()
28 | SwiftWatchConnectivity.shared.delegate = self
29 | }
30 |
31 | func connectivity(_ swiftWatchConnectivity: SwiftWatchConnectivity, updatedWithTask task: SwiftWatchConnectivity.Task) {
32 | switch task {
33 | case .sendMessage(let message):
34 | // message is dictionaly that was sent by opponent OS
35 | default:
36 | break
37 | }
38 | }
39 | ```
40 |
41 | - for watchOS code
42 | ``` swift
43 | // InterfaceController.swift
44 | override func awake(withContext context: Any?) {
45 | super.awake(withContext: context)
46 |
47 | // Configure interface objects here.
48 | SwiftWatchConnectivity.shared.delegate = self
49 | }
50 |
51 | func connectivity(_ swiftWatchConnectivity: SwiftWatchConnectivity, updatedWithTask task: SwiftWatchConnectivity.Task) {
52 | switch task {
53 | case .sendMessage(let message):
54 | // message is dictionaly that was sent by opponent OS
55 | default:
56 | break
57 | }
58 | }
59 |
60 | // ExtensionDelegate.swift
61 | func handle(_ backgroundTasks: Set) {
62 | SwiftWatchConnectivity.shared.handle(backgroundTasks)
63 | :
64 | }
65 | ```
66 | ### Send data
67 | ``` swift
68 | // send dictionary immediately
69 | SwiftWatchConnectivity.shared.sendMesssage(message: ["msg": NSDate()])
70 | // send dictionary in foreground or background
71 | SwiftWatchConnectivity.shared.transferUserInfo(userInfo: [
72 | "string": "hello",
73 | "bool": false,
74 | "array": [1,2,3]
75 | ])
76 | // send file with metadata
77 | let fileURL = Bundle.main.url(forResource: "dog", withExtension: "jpg")!
78 | SwiftWatchConnectivity.shared.transferFile(fileURL: fileURL, metadata: ["Level": 8])
79 | ```
80 |
81 | ## Requirements
82 | - iOS 9.3
83 | - watchOS 4.0
84 | - Swift 4.0
85 |
86 | ## Installation
87 |
88 | SwiftWatchConnectivity is available through [CocoaPods](http://cocoapods.org). To install
89 | it, simply add the following line to your Podfile:
90 |
91 | ```ruby
92 | pod 'SwiftWatchConnectivity'
93 | ```
94 |
95 | ## Author
96 |
97 | ksk.matsuo@gmail.com,
98 |
99 | ## License
100 |
101 | SwiftWatchConnectivity is available under the MIT license. See the LICENSE file for more info.
102 |
--------------------------------------------------------------------------------
/SwiftWatchConnectivity.podspec:
--------------------------------------------------------------------------------
1 | #
2 | # Be sure to run `pod lib lint SwiftWatchConnectivity.podspec' to ensure this is a
3 | # valid spec before submitting.
4 | #
5 | # Any lines starting with a # are optional, but their use is encouraged
6 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
7 | #
8 |
9 | Pod::Spec.new do |s|
10 | s.name = 'SwiftWatchConnectivity'
11 | s.version = '0.1.0'
12 | s.summary = 'Simple WatchConnectivity wrapper.'
13 |
14 | s.description = <<-DESC
15 | SwiftWatchConnectivity is a WatchConnectivity simple wrapper.
16 | - Queueing requested and received task until all available
17 | - Support all transer between iOS and watchOS
18 | DESC
19 |
20 | s.homepage = 'https://github.com/Matzo/SwiftWatchConnectivity'
21 | s.license = { :type => 'MIT', :file => 'LICENSE' }
22 | s.author = { 'ksk.matsuo@gmail.com' => 'ksk.matsuo@gmail.com' }
23 | s.source = { :git => 'https://github.com/Matzo/SwiftWatchConnectivity.git', :tag => s.version.to_s }
24 |
25 | s.ios.deployment_target = '9.3'
26 | s.watchos.deployment_target = '4.0'
27 |
28 | s.source_files = 'SwiftWatchConnectivity/Classes/**/*'
29 | end
30 |
--------------------------------------------------------------------------------
/SwiftWatchConnectivity/Assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matzo/SwiftWatchConnectivity/0d9bc0e2124911abef1642cc0740fc89e7ae7433/SwiftWatchConnectivity/Assets/.gitkeep
--------------------------------------------------------------------------------
/SwiftWatchConnectivity/Classes/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matzo/SwiftWatchConnectivity/0d9bc0e2124911abef1642cc0740fc89e7ae7433/SwiftWatchConnectivity/Classes/.gitkeep
--------------------------------------------------------------------------------
/SwiftWatchConnectivity/Classes/SwiftWatchConnectivity.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftWatchConnectivity.swift
3 | //
4 | // Created by Matsuo Keisuke on 10/9/17.
5 | // Copyright © 2017 Keisuke Matsuo. All rights reserved.
6 | //
7 |
8 | import Foundation
9 | import WatchKit
10 | import WatchConnectivity
11 |
12 | public protocol SwiftWatchConnectivityDelegate: NSObjectProtocol {
13 | func connectivity(_ swiftWatchConnectivity: SwiftWatchConnectivity, updatedWithTask task: SwiftWatchConnectivity.Task)
14 | }
15 |
16 | public class SwiftWatchConnectivity: NSObject {
17 |
18 | public enum Task {
19 | case updateApplicationContext([String: Any])
20 | case transferUserInfo([String: Any])
21 | case transferFile(URL, [String: Any]?)
22 | case sendMessage([String: Any])
23 | case sendMessageData(Data)
24 | }
25 |
26 | /// MARK: Type Properties
27 | public static let shared = SwiftWatchConnectivity()
28 |
29 | /// MARK: Public Properties
30 | public weak var delegate: SwiftWatchConnectivityDelegate? {
31 | didSet {
32 | invoke()
33 | invokeReceivedTasks()
34 | }
35 | }
36 |
37 | /// MARK: Private Properties
38 | fileprivate var tasks: [Task] = []
39 | fileprivate var receivedTasks: [Task] = []
40 | fileprivate var activationState: WCSessionActivationState = .notActivated
41 | #if os(watchOS)
42 | fileprivate var backgroundTasks: [WKRefreshBackgroundTask] = []
43 | #endif
44 |
45 | /**
46 | check all conditions
47 | */
48 | fileprivate var isAvailableMessage: Bool {
49 | guard WCSession.default.isReachable else { return false }
50 | guard activationState == .activated else { return false }
51 | return true
52 | }
53 |
54 | fileprivate var isAvailableApplicationContext: Bool {
55 | guard WCSession.default.isReachable else { return false }
56 | guard activationState == .activated else { return false }
57 | return true
58 | }
59 |
60 | fileprivate var isAvailableTransferUserInfo: Bool {
61 | guard WCSession.default.isReachable else { return false }
62 | guard activationState == .activated else { return false }
63 | return true
64 | }
65 |
66 | /// MARK: Initializations
67 | public override init() {
68 | super.init()
69 | if WCSession.isSupported() {
70 | WCSession.default.delegate = self
71 | WCSession.default.activate()
72 | }
73 | }
74 |
75 | /// MARK: Type Methods
76 | /// MARK: Public Methods
77 | public func updateApplicationContext(context: [String: Any]) {
78 | tasks.append(.updateApplicationContext(context))
79 | invoke()
80 | }
81 | public func transferUserInfo(userInfo: [String: Any]) {
82 | tasks.append(.transferUserInfo(userInfo))
83 | invoke()
84 | }
85 |
86 | public func transferFile(fileURL: URL, metadata: [String: Any]) {
87 | tasks.append(.transferFile(fileURL, metadata))
88 | invoke()
89 | }
90 |
91 | public func sendMesssage(message: [String: Any]) {
92 | tasks.append(.sendMessage(message))
93 | invoke()
94 | }
95 |
96 | public func sendMesssageData(data: Data) {
97 | tasks.append(.sendMessageData(data))
98 | invoke()
99 | }
100 |
101 | /// MARK: Private Methods
102 | private func invoke() {
103 | guard activationState == .activated else { return }
104 | guard delegate != nil else { return }
105 |
106 | var remainTasks: [Task] = []
107 | for task in tasks {
108 | switch task {
109 | case .updateApplicationContext(let context):
110 | guard isAvailableApplicationContext else {
111 | remainTasks.append(task)
112 | continue
113 | }
114 | invokeUpdateApplicationContext(context)
115 | case .transferUserInfo(let userInfo):
116 | guard isAvailableTransferUserInfo else {
117 | remainTasks.append(task)
118 | continue
119 | }
120 | invokeTransferUserInfo(userInfo)
121 | case .transferFile(let fileURL, let medatada):
122 | guard isAvailableTransferUserInfo else {
123 | remainTasks.append(task)
124 | continue
125 | }
126 | invokeTransferFile(fileURL, medatada: medatada)
127 | case .sendMessage(let message):
128 | guard isAvailableMessage else {
129 | remainTasks.append(task)
130 | continue
131 | }
132 | invokeSendMessage(message)
133 | case .sendMessageData(let data):
134 | guard isAvailableMessage else {
135 | remainTasks.append(task)
136 | continue
137 | }
138 | invokeSendMessageData(data)
139 | }
140 | }
141 | tasks.removeAll()
142 | remainTasks.forEach({ tasks.append($0) })
143 | }
144 |
145 | private func invokeUpdateApplicationContext(_ context: [String: Any]) {
146 | do {
147 | try WCSession.default.updateApplicationContext(context)
148 | } catch {
149 | print("updateApplicationContext error: \(error)")
150 | }
151 | }
152 |
153 | private func invokeTransferUserInfo(_ userInfo: [String: Any]) {
154 | WCSession.default.transferUserInfo(userInfo)
155 | }
156 |
157 | private func invokeTransferFile(_ fileURL: URL, medatada: [String: Any]?) {
158 | WCSession.default.transferFile(fileURL, metadata: medatada)
159 | }
160 |
161 | private func invokeSendMessage(_ message: [String: Any]) {
162 | WCSession.default.sendMessage(message, replyHandler: { (reply) in
163 | print("reply: \(reply)")
164 | }) { (error) in
165 | print("error: \(error)")
166 | }
167 | }
168 |
169 | private func invokeSendMessageData(_ data: Data) {
170 | WCSession.default.sendMessageData(data, replyHandler: { (reply) in
171 | print("reply: \(reply)")
172 | }) { (error) in
173 | print("error: \(error)")
174 | }
175 | }
176 |
177 | /**
178 | pass received data to delegate after set delegate
179 | */
180 | private func invokeReceivedTasks() {
181 | if let delegate = delegate {
182 | DispatchQueue.main.async {
183 | for task in self.receivedTasks {
184 | delegate.connectivity(self, updatedWithTask: task)
185 | }
186 | self.receivedTasks.removeAll()
187 | }
188 | }
189 | }
190 | }
191 |
192 | #if os(watchOS)
193 | extension SwiftWatchConnectivity {
194 | public func handle(_ backgroundTasks: Set) {
195 | for task in backgroundTasks {
196 | // Use a switch statement to check the task type
197 | switch task {
198 | case let connectivityTask as WKWatchConnectivityRefreshBackgroundTask:
199 | self.backgroundTasks.append(connectivityTask)
200 | default:
201 | break
202 | }
203 | }
204 | completeAllTasksIfReady()
205 | }
206 |
207 | public func completeAllTasksIfReady() {
208 | let session = WCSession.default
209 | // the session's properties only have valid values if the session is activated, so check that first
210 | if session.activationState == .activated && !session.hasContentPending {
211 | backgroundTasks.forEach { $0.setTaskCompletedWithSnapshot(false) }
212 | backgroundTasks.removeAll()
213 | }
214 | }
215 | }
216 | #endif
217 |
218 | extension SwiftWatchConnectivity: WCSessionDelegate {
219 | public func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
220 | if let error = error {
221 | print(error)
222 | return
223 | }
224 | print("activationState: \(activationState.rawValue)")
225 | self.activationState = activationState
226 | }
227 | #if os(iOS)
228 | public func sessionDidDeactivate(_ session: WCSession) {
229 | activationState = .notActivated
230 | print("deactivated")
231 | }
232 | public func sessionDidBecomeInactive(_ session: WCSession) {
233 | activationState = .inactive
234 | print("inactivated")
235 | }
236 | #endif
237 | public func sessionReachabilityDidChange(_ session: WCSession) {
238 | // isReachable = session.isReachable
239 | }
240 |
241 | public func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {
242 | print("applicationContext: \(applicationContext)")
243 | receivedTasks.append(.updateApplicationContext(applicationContext))
244 | invokeReceivedTasks()
245 | }
246 | public func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {
247 | print("userInfo: \(userInfo)")
248 | receivedTasks.append(.transferUserInfo(userInfo))
249 | invokeReceivedTasks()
250 | }
251 | public func session(_ session: WCSession, didReceive file: WCSessionFile) {
252 | print("receiveFile: \(file)")
253 | receivedTasks.append(.transferFile(file.fileURL, file.metadata))
254 | invokeReceivedTasks()
255 | }
256 | public func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {
257 | print("message: \(message)")
258 | #if os(watchOS)
259 | let device = "watch"
260 | #else
261 | let device = "iPhone"
262 | #endif
263 | receivedTasks.append(.sendMessage(message))
264 | replyHandler(["messageReply": "reply from \(device)"])
265 | invokeReceivedTasks()
266 | }
267 | public func session(_ session: WCSession, didReceiveMessageData messageData: Data, replyHandler: @escaping (Data) -> Void) {
268 | print("messageData: \(messageData)")
269 | replyHandler(Data())
270 | receivedTasks.append(.sendMessageData(messageData))
271 | invokeReceivedTasks()
272 | }
273 | }
274 |
275 |
--------------------------------------------------------------------------------
/_Pods.xcodeproj:
--------------------------------------------------------------------------------
1 | Example/Pods/Pods.xcodeproj
--------------------------------------------------------------------------------