├── .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 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 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 | [![CI Status](http://img.shields.io/travis/ksk.matsuo@gmail.com/SwiftWatchConnectivity.svg?style=flat)](https://travis-ci.org/ksk.matsuo@gmail.com/SwiftWatchConnectivity) 4 | [![Version](https://img.shields.io/cocoapods/v/SwiftWatchConnectivity.svg?style=flat)](http://cocoapods.org/pods/SwiftWatchConnectivity) 5 | [![License](https://img.shields.io/cocoapods/l/SwiftWatchConnectivity.svg?style=flat)](http://cocoapods.org/pods/SwiftWatchConnectivity) 6 | [![Platform](https://img.shields.io/cocoapods/p/SwiftWatchConnectivity.svg?style=flat)](http://cocoapods.org/pods/SwiftWatchConnectivity) 7 | ![iOS](https://img.shields.io/badge/iOS-9.3-blue.svg?style=flat) 8 | ![watchOS](https://img.shields.io/badge/watchOS-4.0-blue.svg?style=flat) 9 | ![Swift](https://img.shields.io/badge/Swift-4.0-blue.svg?style=flat) 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 --------------------------------------------------------------------------------