Added watchOS sample

pull/19703/head^2
Tony Lu 6 years ago
parent 3b380ccb58
commit 90dac25693
  1. 1
      gRPC-Core.podspec
  2. 1
      gRPC-ProtoRPC.podspec
  3. 1
      gRPC-RxLibrary.podspec
  4. 1
      gRPC.podspec
  5. 1
      src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
  6. 1
      src/objective-c/!ProtoCompiler.podspec
  7. 1
      src/objective-c/BoringSSL-GRPC.podspec
  8. 1
      src/objective-c/examples/RemoteTestClient/RemoteTest.podspec
  9. 62
      src/objective-c/examples/tvOS-sample/tvOS-sample.xcodeproj/project.pbxproj
  10. 4
      src/objective-c/examples/tvOS-sample/tvOS-sample/ViewController.m
  11. 41
      src/objective-c/examples/watchOS-sample/Podfile
  12. 81
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit App/Assets.xcassets/AppIcon.appiconset/Contents.json
  13. 6
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit App/Assets.xcassets/Contents.json
  14. 27
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit App/Base.lproj/Interface.storyboard
  15. 33
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit App/Info.plist
  16. 18
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json
  17. 48
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/Assets.xcassets/Complication.complicationset/Contents.json
  18. 18
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json
  19. 18
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Bezel.imageset/Contents.json
  20. 18
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Circular.imageset/Contents.json
  21. 18
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Corner.imageset/Contents.json
  22. 18
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Large Rectangular.imageset/Contents.json
  23. 18
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json
  24. 18
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json
  25. 6
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/Assets.xcassets/Contents.json
  26. 13
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/ExtensionDelegate.h
  27. 61
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/ExtensionDelegate.m
  28. 36
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/Info.plist
  29. 14
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/InterfaceController.h
  30. 68
      src/objective-c/examples/watchOS-sample/watchOS-sample WatchKit Extension/InterfaceController.m
  31. 750
      src/objective-c/examples/watchOS-sample/watchOS-sample.xcodeproj/project.pbxproj
  32. 17
      src/objective-c/examples/watchOS-sample/watchOS-sample/AppDelegate.h
  33. 51
      src/objective-c/examples/watchOS-sample/watchOS-sample/AppDelegate.m
  34. 98
      src/objective-c/examples/watchOS-sample/watchOS-sample/Assets.xcassets/AppIcon.appiconset/Contents.json
  35. 6
      src/objective-c/examples/watchOS-sample/watchOS-sample/Assets.xcassets/Contents.json
  36. 25
      src/objective-c/examples/watchOS-sample/watchOS-sample/Base.lproj/LaunchScreen.storyboard
  37. 24
      src/objective-c/examples/watchOS-sample/watchOS-sample/Base.lproj/Main.storyboard
  38. 45
      src/objective-c/examples/watchOS-sample/watchOS-sample/Info.plist
  39. 15
      src/objective-c/examples/watchOS-sample/watchOS-sample/ViewController.h
  40. 25
      src/objective-c/examples/watchOS-sample/watchOS-sample/ViewController.m
  41. 16
      src/objective-c/examples/watchOS-sample/watchOS-sample/main.m

@ -41,6 +41,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.9'
s.tvos.deployment_target = '10.0'
s.watchos.deployment_target = '4.0'
s.requires_arc = false

@ -36,6 +36,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.9'
s.tvos.deployment_target = '10.0'
s.watchos.deployment_target = '4.0'
name = 'ProtoRPC'
s.module_name = name

@ -36,6 +36,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.9'
s.tvos.deployment_target = '10.0'
s.watchos.deployment_target = '4.0'
name = 'RxLibrary'
s.module_name = name

@ -35,6 +35,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.9'
s.tvos.deployment_target = '10.0'
s.watchos.deployment_target = '4.0'
name = 'GRPCClient'
s.module_name = name

@ -106,6 +106,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.9'
s.tvos.deployment_target = '10.0'
s.watchos.deployment_target = '4.0'
# Restrict the gRPC runtime version to the one supported by this plugin.
s.dependency 'gRPC-ProtoRPC', v

@ -113,6 +113,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.9'
s.tvos.deployment_target = '10.0'
s.watchos.deployment_target = '4.0'
# This is only for local development of protoc: If the Podfile brings this pod from a local
# directory using `:path`, CocoaPods won't download the zip file and so the compiler won't be

@ -82,6 +82,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '7.0'
s.osx.deployment_target = '10.7'
s.tvos.deployment_target = '10.0'
s.watchos.deployment_target = '4.0'
name = 'openssl_grpc'

@ -10,6 +10,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '7.1'
s.osx.deployment_target = '10.9'
s.tvos.deployment_target = '10.0'
s.watchos.deployment_target = '4.0'
# Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients.
s.dependency "!ProtoCompiler-gRPCPlugin"

@ -7,18 +7,17 @@
objects = {
/* Begin PBXBuildFile section */
565ABB2FA1065F0EC355A9AA /* libPods-tvOS-sample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 968ABA42FAF2C82FA0BF740C /* libPods-tvOS-sample.a */; };
ABB17D3A22D8FB8B00C26D6E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB17D3922D8FB8B00C26D6E /* AppDelegate.m */; };
ABB17D3D22D8FB8B00C26D6E /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB17D3C22D8FB8B00C26D6E /* ViewController.m */; };
ABB17D4022D8FB8B00C26D6E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = ABB17D3E22D8FB8B00C26D6E /* Main.storyboard */; };
ABB17D4222D8FB8D00C26D6E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ABB17D4122D8FB8D00C26D6E /* Assets.xcassets */; };
ABB17D4522D8FB8D00C26D6E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB17D4422D8FB8D00C26D6E /* main.m */; };
F9B775DB1DDCBD39DF92BFA8 /* libPods-tvOS-sample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40071025CBF9E79B9522398F /* libPods-tvOS-sample.a */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
288D31799283F13AE615B2E7 /* Pods-tvOS-sample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-tvOS-sample.debug.xcconfig"; path = "Target Support Files/Pods-tvOS-sample/Pods-tvOS-sample.debug.xcconfig"; sourceTree = "<group>"; };
68CC4CF97E776A55036CCBD2 /* Pods-tvOS-sample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-tvOS-sample.release.xcconfig"; path = "Target Support Files/Pods-tvOS-sample/Pods-tvOS-sample.release.xcconfig"; sourceTree = "<group>"; };
968ABA42FAF2C82FA0BF740C /* libPods-tvOS-sample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-tvOS-sample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
40071025CBF9E79B9522398F /* libPods-tvOS-sample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-tvOS-sample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
93F3CF0DB110860F8E180685 /* Pods-tvOS-sample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-tvOS-sample.release.xcconfig"; path = "Target Support Files/Pods-tvOS-sample/Pods-tvOS-sample.release.xcconfig"; sourceTree = "<group>"; };
ABB17D3522D8FB8B00C26D6E /* tvOS-sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tvOS-sample.app"; sourceTree = BUILT_PRODUCTS_DIR; };
ABB17D3822D8FB8B00C26D6E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
ABB17D3922D8FB8B00C26D6E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
@ -28,6 +27,7 @@
ABB17D4122D8FB8D00C26D6E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
ABB17D4322D8FB8D00C26D6E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
ABB17D4422D8FB8D00C26D6E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
D2D1C60CE9BD00C1371BC913 /* Pods-tvOS-sample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-tvOS-sample.debug.xcconfig"; path = "Target Support Files/Pods-tvOS-sample/Pods-tvOS-sample.debug.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -35,18 +35,18 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
565ABB2FA1065F0EC355A9AA /* libPods-tvOS-sample.a in Frameworks */,
F9B775DB1DDCBD39DF92BFA8 /* libPods-tvOS-sample.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
1D5885E1FE0BFAC7841076C2 /* Pods */ = {
28FD2EFD84992131D85ADAE6 /* Pods */ = {
isa = PBXGroup;
children = (
288D31799283F13AE615B2E7 /* Pods-tvOS-sample.debug.xcconfig */,
68CC4CF97E776A55036CCBD2 /* Pods-tvOS-sample.release.xcconfig */,
D2D1C60CE9BD00C1371BC913 /* Pods-tvOS-sample.debug.xcconfig */,
93F3CF0DB110860F8E180685 /* Pods-tvOS-sample.release.xcconfig */,
);
name = Pods;
path = Pods;
@ -57,8 +57,8 @@
children = (
ABB17D3722D8FB8B00C26D6E /* tvOS-sample */,
ABB17D3622D8FB8B00C26D6E /* Products */,
1D5885E1FE0BFAC7841076C2 /* Pods */,
EC43163F87C0DE6118957F38 /* Frameworks */,
28FD2EFD84992131D85ADAE6 /* Pods */,
D280E557B55AAB044C083DB5 /* Frameworks */,
);
sourceTree = "<group>";
};
@ -85,10 +85,10 @@
path = "tvOS-sample";
sourceTree = "<group>";
};
EC43163F87C0DE6118957F38 /* Frameworks */ = {
D280E557B55AAB044C083DB5 /* Frameworks */ = {
isa = PBXGroup;
children = (
968ABA42FAF2C82FA0BF740C /* libPods-tvOS-sample.a */,
40071025CBF9E79B9522398F /* libPods-tvOS-sample.a */,
);
name = Frameworks;
sourceTree = "<group>";
@ -100,11 +100,11 @@
isa = PBXNativeTarget;
buildConfigurationList = ABB17D4822D8FB8D00C26D6E /* Build configuration list for PBXNativeTarget "tvOS-sample" */;
buildPhases = (
3963C36BEF44FBF8792B6A8A /* [CP] Check Pods Manifest.lock */,
BCFBD1317F97D9F34D9AFD4A /* [CP] Check Pods Manifest.lock */,
ABB17D3122D8FB8B00C26D6E /* Sources */,
ABB17D3222D8FB8B00C26D6E /* Frameworks */,
ABB17D3322D8FB8B00C26D6E /* Resources */,
3A325E5E27D64D1CC36130E2 /* [CP] Copy Pods Resources */,
340B0470EBFB87C5242C058E /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@ -160,43 +160,43 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
3963C36BEF44FBF8792B6A8A /* [CP] Check Pods Manifest.lock */ = {
340B0470EBFB87C5242C058E /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-tvOS-sample/Pods-tvOS-sample-resources-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-tvOS-sample-checkManifestLockResult.txt",
"${PODS_ROOT}/Target Support Files/Pods-tvOS-sample/Pods-tvOS-sample-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
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";
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-tvOS-sample/Pods-tvOS-sample-resources.sh\"\n";
showEnvVarsInLog = 0;
};
3A325E5E27D64D1CC36130E2 /* [CP] Copy Pods Resources */ = {
BCFBD1317F97D9F34D9AFD4A /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-tvOS-sample/Pods-tvOS-sample-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-tvOS-sample/Pods-tvOS-sample-resources-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-tvOS-sample-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-tvOS-sample/Pods-tvOS-sample-resources.sh\"\n";
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";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
@ -338,7 +338,7 @@
};
ABB17D4922D8FB8D00C26D6E /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 288D31799283F13AE615B2E7 /* Pods-tvOS-sample.debug.xcconfig */;
baseConfigurationReference = D2D1C60CE9BD00C1371BC913 /* Pods-tvOS-sample.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
@ -357,7 +357,7 @@
};
ABB17D4A22D8FB8D00C26D6E /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 68CC4CF97E776A55036CCBD2 /* Pods-tvOS-sample.release.xcconfig */;
baseConfigurationReference = 93F3CF0DB110860F8E180685 /* Pods-tvOS-sample.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;

@ -11,10 +11,6 @@
#import <RemoteTest/Messages.pbobjc.h>
#import <RemoteTest/Test.pbrpc.h>
static NSString *const kPackage = @"grpc.testing";
static NSString *const kService = @"TestService";
@interface ViewController ()<GRPCProtoResponseHandler>
@end

@ -0,0 +1,41 @@
install! 'cocoapods', :deterministic_uuids => false
ROOT_DIR = '../../../..'
def grpc_deps
pod 'gRPC-ProtoRPC', :path => ROOT_DIR
pod 'gRPC', :path => ROOT_DIR
pod 'gRPC-Core', :path => ROOT_DIR
pod 'gRPC-RxLibrary', :path => ROOT_DIR
pod 'RemoteTest', :path => "../RemoteTestClient"
pod '!ProtoCompiler-gRPCPlugin', :path => "#{ROOT_DIR}/src/objective-c"
pod 'BoringSSL-GRPC', :path => "#{ROOT_DIR}/third_party/boringssl"
pod '!ProtoCompiler', :path => "#{ROOT_DIR}/src/objective-c"
end
target 'watchOS-sample' do
platform :ios, '8.0'
grpc_deps
end
target 'watchOS-sample WatchKit Extension' do
platform :watchos, '4.0'
grpc_deps
end
pre_install do |installer|
grpc_core_spec = installer.pod_targets.find{|t| t.name.start_with?('gRPC-Core')}.root_spec
src_root = "$(PODS_TARGET_SRCROOT)"
grpc_core_spec.pod_target_xcconfig = {
'GRPC_SRC_ROOT' => src_root,
'HEADER_SEARCH_PATHS' => '"$(inherited)" "$(GRPC_SRC_ROOT)/include"',
'USER_HEADER_SEARCH_PATHS' => '"$(GRPC_SRC_ROOT)"',
# If we don't set these two settings, `include/grpc/support/time.h` and
# `src/core/lib/gpr/string.h` shadow the system `<time.h>` and `<string.h>`, breaking the
# build.
'USE_HEADERMAP' => 'NO',
'ALWAYS_SEARCH_USER_PATHS' => 'NO',
}
end

@ -0,0 +1,81 @@
{
"images" : [
{
"size" : "24x24",
"idiom" : "watch",
"scale" : "2x",
"role" : "notificationCenter",
"subtype" : "38mm"
},
{
"size" : "27.5x27.5",
"idiom" : "watch",
"scale" : "2x",
"role" : "notificationCenter",
"subtype" : "42mm"
},
{
"size" : "29x29",
"idiom" : "watch",
"role" : "companionSettings",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "watch",
"role" : "companionSettings",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "watch",
"scale" : "2x",
"role" : "appLauncher",
"subtype" : "38mm"
},
{
"size" : "44x44",
"idiom" : "watch",
"scale" : "2x",
"role" : "appLauncher",
"subtype" : "40mm"
},
{
"size" : "50x50",
"idiom" : "watch",
"scale" : "2x",
"role" : "appLauncher",
"subtype" : "44mm"
},
{
"size" : "86x86",
"idiom" : "watch",
"scale" : "2x",
"role" : "quickLook",
"subtype" : "38mm"
},
{
"size" : "98x98",
"idiom" : "watch",
"scale" : "2x",
"role" : "quickLook",
"subtype" : "42mm"
},
{
"size" : "108x108",
"idiom" : "watch",
"scale" : "2x",
"role" : "quickLook",
"subtype" : "44mm"
},
{
"idiom" : "watch-marketing",
"size" : "1024x1024",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder.WatchKit.Storyboard" version="3.0" toolsVersion="14460.31" targetRuntime="watchKit" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="AgC-eL-Hgc">
<device id="watch38" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="watchOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBWatchKitPlugin" version="14460.16"/>
</dependencies>
<scenes>
<!--Interface Controller-->
<scene sceneID="aou-V4-d1y">
<objects>
<controller id="AgC-eL-Hgc" customClass="InterfaceController">
<items>
<button width="1" alignment="left" title="Make Call" id="NdL-j4-gf8">
<connections>
<action selector="makeCall" destination="AgC-eL-Hgc" id="kpd-aE-V0n"/>
</connections>
</button>
</items>
</controller>
</objects>
</scene>
</scenes>
</document>

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>watchOS-sample WatchKit App</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
</array>
<key>WKCompanionAppBundleIdentifier</key>
<string>com.google.watchOS-grpc-sample</string>
<key>WKWatchKitApp</key>
<true/>
</dict>
</plist>

@ -0,0 +1,18 @@
{
"images" : [
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : "<=145"
},
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">145"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

@ -0,0 +1,48 @@
{
"assets" : [
{
"idiom" : "watch",
"filename" : "Circular.imageset",
"role" : "circular"
},
{
"idiom" : "watch",
"filename" : "Extra Large.imageset",
"role" : "extra-large"
},
{
"idiom" : "watch",
"filename" : "Graphic Bezel.imageset",
"role" : "graphic-bezel"
},
{
"idiom" : "watch",
"filename" : "Graphic Circular.imageset",
"role" : "graphic-circular"
},
{
"idiom" : "watch",
"filename" : "Graphic Corner.imageset",
"role" : "graphic-corner"
},
{
"idiom" : "watch",
"filename" : "Graphic Large Rectangular.imageset",
"role" : "graphic-large-rectangular"
},
{
"idiom" : "watch",
"filename" : "Modular.imageset",
"role" : "modular"
},
{
"idiom" : "watch",
"filename" : "Utilitarian.imageset",
"role" : "utilitarian"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

@ -0,0 +1,18 @@
{
"images" : [
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : "<=145"
},
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">145"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

@ -0,0 +1,18 @@
{
"images" : [
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : "<=145"
},
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">145"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

@ -0,0 +1,18 @@
{
"images" : [
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : "<=145"
},
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">145"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

@ -0,0 +1,18 @@
{
"images" : [
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : "<=145"
},
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">145"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

@ -0,0 +1,18 @@
{
"images" : [
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : "<=145"
},
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">145"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

@ -0,0 +1,18 @@
{
"images" : [
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : "<=145"
},
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">145"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

@ -0,0 +1,18 @@
{
"images" : [
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : "<=145"
},
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">145"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

@ -0,0 +1,13 @@
//
// ExtensionDelegate.h
// watchOS-sample WatchKit Extension
//
// Created by Tony Lu on 7/12/19.
// Copyright © 2019 Tony Lu. All rights reserved.
//
#import <WatchKit/WatchKit.h>
@interface ExtensionDelegate : NSObject <WKExtensionDelegate>
@end

@ -0,0 +1,61 @@
//
// ExtensionDelegate.m
// watchOS-sample WatchKit Extension
//
// Created by Tony Lu on 7/12/19.
// Copyright © 2019 Tony Lu. All rights reserved.
//
#import "ExtensionDelegate.h"
@implementation ExtensionDelegate
- (void)applicationDidFinishLaunching {
// Perform any final initialization of your application.
}
- (void)applicationDidBecomeActive {
// 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.
}
- (void)applicationWillResignActive {
// 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.
// Use this method to pause ongoing tasks, disable timers, etc.
}
- (void)handleBackgroundTasks:(NSSet<WKRefreshBackgroundTask *> *)backgroundTasks {
// 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.
for (WKRefreshBackgroundTask * task in backgroundTasks) {
// Check the Class of each task to decide how to process it
if ([task isKindOfClass:[WKApplicationRefreshBackgroundTask class]]) {
// Be sure to complete the background task once youre done.
WKApplicationRefreshBackgroundTask *backgroundTask = (WKApplicationRefreshBackgroundTask*)task;
[backgroundTask setTaskCompletedWithSnapshot:NO];
} else if ([task isKindOfClass:[WKSnapshotRefreshBackgroundTask class]]) {
// Snapshot tasks have a unique completion call, make sure to set your expiration date
WKSnapshotRefreshBackgroundTask *snapshotTask = (WKSnapshotRefreshBackgroundTask*)task;
[snapshotTask setTaskCompletedWithDefaultStateRestored:YES estimatedSnapshotExpiration:[NSDate distantFuture] userInfo:nil];
} else if ([task isKindOfClass:[WKWatchConnectivityRefreshBackgroundTask class]]) {
// Be sure to complete the background task once youre done.
WKWatchConnectivityRefreshBackgroundTask *backgroundTask = (WKWatchConnectivityRefreshBackgroundTask*)task;
[backgroundTask setTaskCompletedWithSnapshot:NO];
} else if ([task isKindOfClass:[WKURLSessionRefreshBackgroundTask class]]) {
// Be sure to complete the background task once youre done.
WKURLSessionRefreshBackgroundTask *backgroundTask = (WKURLSessionRefreshBackgroundTask*)task;
[backgroundTask setTaskCompletedWithSnapshot:NO];
} else if ([task isKindOfClass:[WKRelevantShortcutRefreshBackgroundTask class]]) {
// Be sure to complete the relevant-shortcut task once youre done.
WKRelevantShortcutRefreshBackgroundTask *relevantShortcutTask = (WKRelevantShortcutRefreshBackgroundTask*)task;
[relevantShortcutTask setTaskCompletedWithSnapshot:NO];
} else if ([task isKindOfClass:[WKIntentDidRunRefreshBackgroundTask class]]) {
// Be sure to complete the intent-did-run task once youre done.
WKIntentDidRunRefreshBackgroundTask *intentDidRunTask = (WKIntentDidRunRefreshBackgroundTask*)task;
[intentDidRunTask setTaskCompletedWithSnapshot:NO];
} else {
// make sure to complete unhandled task types
[task setTaskCompletedWithSnapshot:NO];
}
}
}
@end

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>watchOS-sample WatchKit Extension</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>XPC!</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>WKAppBundleIdentifier</key>
<string>com.google.watchOS-grpc-sample.watchkitapp</string>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.watchkit</string>
</dict>
<key>WKExtensionDelegateClassName</key>
<string>ExtensionDelegate</string>
</dict>
</plist>

@ -0,0 +1,14 @@
//
// InterfaceController.h
// watchOS-sample WatchKit Extension
//
// Created by Tony Lu on 7/12/19.
// Copyright © 2019 Tony Lu. All rights reserved.
//
#import <WatchKit/WatchKit.h>
#import <Foundation/Foundation.h>
@interface InterfaceController : WKInterfaceController
@end

@ -0,0 +1,68 @@
//
// InterfaceController.m
// watchOS-sample WatchKit Extension
//
// Created by Tony Lu on 7/12/19.
// Copyright © 2019 Tony Lu. All rights reserved.
//
#import "InterfaceController.h"
#import <RemoteTest/Messages.pbobjc.h>
#import <RemoteTest/Test.pbrpc.h>
@interface InterfaceController ()<GRPCProtoResponseHandler>
@end
@implementation InterfaceController {
GRPCCallOptions *_options;
RMTTestService *_service;
}
- (void)awakeWithContext:(id)context {
[super awakeWithContext:context];
// Configure interface objects here.
GRPCMutableCallOptions *options = [[GRPCMutableCallOptions alloc] init];
_options = options;
_service = [[RMTTestService alloc] initWithHost:@"grpc-test.sandbox.googleapis.com"
callOptions:_options];
}
- (void)willActivate {
// This method is called when watch view controller is about to be visible to user
[super willActivate];
}
- (void)didDeactivate {
// This method is called when watch view controller is no longer visible
[super didDeactivate];
}
- (IBAction)makeCall {
RMTSimpleRequest *request = [RMTSimpleRequest message];
request.responseSize = 100;
GRPCUnaryProtoCall *call = [_service unaryCallWithMessage:request
responseHandler:self
callOptions:nil];
[call start];
}
- (void)didReceiveProtoMessage:(GPBMessage *)message {
NSLog(@"%@", [message data]);
}
- (dispatch_queue_t)dispatchQueue {
return dispatch_get_main_queue();
}
@end

@ -0,0 +1,750 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 51;
objects = {
/* Begin PBXBuildFile section */
8C710D86B987697CC3B243A8 /* libPods-watchOS-sample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 56BDF7E8B01683A4EFDEC9CF /* libPods-watchOS-sample.a */; };
8F4EFFA8E14960D3C5BD0046 /* libPods-watchOS-sample WatchKit Extension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 76AFD66D880975F945E377C9 /* libPods-watchOS-sample WatchKit Extension.a */; };
ABB17D5922D93BAB00C26D6E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB17D5822D93BAB00C26D6E /* AppDelegate.m */; };
ABB17D5C22D93BAB00C26D6E /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB17D5B22D93BAB00C26D6E /* ViewController.m */; };
ABB17D5F22D93BAB00C26D6E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = ABB17D5D22D93BAB00C26D6E /* Main.storyboard */; };
ABB17D6122D93BAC00C26D6E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ABB17D6022D93BAC00C26D6E /* Assets.xcassets */; };
ABB17D6422D93BAC00C26D6E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = ABB17D6222D93BAC00C26D6E /* LaunchScreen.storyboard */; };
ABB17D6722D93BAC00C26D6E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB17D6622D93BAC00C26D6E /* main.m */; };
ABB17D6B22D93BAC00C26D6E /* watchOS-sample WatchKit App.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = ABB17D6A22D93BAC00C26D6E /* watchOS-sample WatchKit App.app */; };
ABB17D7122D93BAC00C26D6E /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = ABB17D6F22D93BAC00C26D6E /* Interface.storyboard */; };
ABB17D7322D93BAC00C26D6E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ABB17D7222D93BAC00C26D6E /* Assets.xcassets */; };
ABB17D7A22D93BAC00C26D6E /* watchOS-sample WatchKit Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = ABB17D7922D93BAC00C26D6E /* watchOS-sample WatchKit Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
ABB17D8022D93BAC00C26D6E /* InterfaceController.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB17D7F22D93BAC00C26D6E /* InterfaceController.m */; };
ABB17D8322D93BAC00C26D6E /* ExtensionDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB17D8222D93BAC00C26D6E /* ExtensionDelegate.m */; };
ABB17D8522D93BAD00C26D6E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ABB17D8422D93BAD00C26D6E /* Assets.xcassets */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
ABB17D6C22D93BAC00C26D6E /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = ABB17D4C22D93BAB00C26D6E /* Project object */;
proxyType = 1;
remoteGlobalIDString = ABB17D6922D93BAC00C26D6E;
remoteInfo = "watchOS-sample WatchKit App";
};
ABB17D7B22D93BAC00C26D6E /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = ABB17D4C22D93BAB00C26D6E /* Project object */;
proxyType = 1;
remoteGlobalIDString = ABB17D7822D93BAC00C26D6E;
remoteInfo = "watchOS-sample WatchKit Extension";
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
ABB17D8C22D93BAD00C26D6E /* Embed App Extensions */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 13;
files = (
ABB17D7A22D93BAC00C26D6E /* watchOS-sample WatchKit Extension.appex in Embed App Extensions */,
);
name = "Embed App Extensions";
runOnlyForDeploymentPostprocessing = 0;
};
ABB17D9022D93BAD00C26D6E /* Embed Watch Content */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "$(CONTENTS_FOLDER_PATH)/Watch";
dstSubfolderSpec = 16;
files = (
ABB17D6B22D93BAC00C26D6E /* watchOS-sample WatchKit App.app in Embed Watch Content */,
);
name = "Embed Watch Content";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
0D53169393FEB36944484D25 /* Pods-watchOS-sample WatchKit Extension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-watchOS-sample WatchKit Extension.release.xcconfig"; path = "Target Support Files/Pods-watchOS-sample WatchKit Extension/Pods-watchOS-sample WatchKit Extension.release.xcconfig"; sourceTree = "<group>"; };
56BDF7E8B01683A4EFDEC9CF /* libPods-watchOS-sample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-watchOS-sample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
76AFD66D880975F945E377C9 /* libPods-watchOS-sample WatchKit Extension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-watchOS-sample WatchKit Extension.a"; sourceTree = BUILT_PRODUCTS_DIR; };
7DB8462D385A70A534800DAF /* Pods-watchOS-sample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-watchOS-sample.release.xcconfig"; path = "Target Support Files/Pods-watchOS-sample/Pods-watchOS-sample.release.xcconfig"; sourceTree = "<group>"; };
8C5540E3A034586596BEFE2B /* Pods-watchOS-sample WatchKit Extension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-watchOS-sample WatchKit Extension.debug.xcconfig"; path = "Target Support Files/Pods-watchOS-sample WatchKit Extension/Pods-watchOS-sample WatchKit Extension.debug.xcconfig"; sourceTree = "<group>"; };
ABB17D5422D93BAB00C26D6E /* watchOS-sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "watchOS-sample.app"; sourceTree = BUILT_PRODUCTS_DIR; };
ABB17D5722D93BAB00C26D6E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
ABB17D5822D93BAB00C26D6E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
ABB17D5A22D93BAB00C26D6E /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
ABB17D5B22D93BAB00C26D6E /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
ABB17D5E22D93BAB00C26D6E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
ABB17D6022D93BAC00C26D6E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
ABB17D6322D93BAC00C26D6E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
ABB17D6522D93BAC00C26D6E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
ABB17D6622D93BAC00C26D6E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
ABB17D6A22D93BAC00C26D6E /* watchOS-sample WatchKit App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "watchOS-sample WatchKit App.app"; sourceTree = BUILT_PRODUCTS_DIR; };
ABB17D7022D93BAC00C26D6E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = "<group>"; };
ABB17D7222D93BAC00C26D6E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
ABB17D7422D93BAC00C26D6E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
ABB17D7922D93BAC00C26D6E /* watchOS-sample WatchKit Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "watchOS-sample WatchKit Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
ABB17D7E22D93BAC00C26D6E /* InterfaceController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InterfaceController.h; sourceTree = "<group>"; };
ABB17D7F22D93BAC00C26D6E /* InterfaceController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = InterfaceController.m; sourceTree = "<group>"; };
ABB17D8122D93BAC00C26D6E /* ExtensionDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ExtensionDelegate.h; sourceTree = "<group>"; };
ABB17D8222D93BAC00C26D6E /* ExtensionDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ExtensionDelegate.m; sourceTree = "<group>"; };
ABB17D8422D93BAD00C26D6E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
ABB17D8622D93BAD00C26D6E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
CC865626944D2C3DD838F762 /* Pods-watchOS-sample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-watchOS-sample.debug.xcconfig"; path = "Target Support Files/Pods-watchOS-sample/Pods-watchOS-sample.debug.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
ABB17D5122D93BAB00C26D6E /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
8C710D86B987697CC3B243A8 /* libPods-watchOS-sample.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
ABB17D7622D93BAC00C26D6E /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
8F4EFFA8E14960D3C5BD0046 /* libPods-watchOS-sample WatchKit Extension.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
F374C9EC9D24282B20A64719 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
2C4A0708747AAA7298F757DA /* Pods */ = {
isa = PBXGroup;
children = (
CC865626944D2C3DD838F762 /* Pods-watchOS-sample.debug.xcconfig */,
7DB8462D385A70A534800DAF /* Pods-watchOS-sample.release.xcconfig */,
8C5540E3A034586596BEFE2B /* Pods-watchOS-sample WatchKit Extension.debug.xcconfig */,
0D53169393FEB36944484D25 /* Pods-watchOS-sample WatchKit Extension.release.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
589283F4A582EEF2434E0220 /* Frameworks */ = {
isa = PBXGroup;
children = (
56BDF7E8B01683A4EFDEC9CF /* libPods-watchOS-sample.a */,
76AFD66D880975F945E377C9 /* libPods-watchOS-sample WatchKit Extension.a */,
);
name = Frameworks;
sourceTree = "<group>";
};
ABB17D4B22D93BAB00C26D6E = {
isa = PBXGroup;
children = (
ABB17D5622D93BAB00C26D6E /* watchOS-sample */,
ABB17D6E22D93BAC00C26D6E /* watchOS-sample WatchKit App */,
ABB17D7D22D93BAC00C26D6E /* watchOS-sample WatchKit Extension */,
ABB17D5522D93BAB00C26D6E /* Products */,
2C4A0708747AAA7298F757DA /* Pods */,
589283F4A582EEF2434E0220 /* Frameworks */,
);
sourceTree = "<group>";
};
ABB17D5522D93BAB00C26D6E /* Products */ = {
isa = PBXGroup;
children = (
ABB17D5422D93BAB00C26D6E /* watchOS-sample.app */,
ABB17D6A22D93BAC00C26D6E /* watchOS-sample WatchKit App.app */,
ABB17D7922D93BAC00C26D6E /* watchOS-sample WatchKit Extension.appex */,
);
name = Products;
sourceTree = "<group>";
};
ABB17D5622D93BAB00C26D6E /* watchOS-sample */ = {
isa = PBXGroup;
children = (
ABB17D5722D93BAB00C26D6E /* AppDelegate.h */,
ABB17D5822D93BAB00C26D6E /* AppDelegate.m */,
ABB17D5A22D93BAB00C26D6E /* ViewController.h */,
ABB17D5B22D93BAB00C26D6E /* ViewController.m */,
ABB17D5D22D93BAB00C26D6E /* Main.storyboard */,
ABB17D6022D93BAC00C26D6E /* Assets.xcassets */,
ABB17D6222D93BAC00C26D6E /* LaunchScreen.storyboard */,
ABB17D6522D93BAC00C26D6E /* Info.plist */,
ABB17D6622D93BAC00C26D6E /* main.m */,
);
path = "watchOS-sample";
sourceTree = "<group>";
};
ABB17D6E22D93BAC00C26D6E /* watchOS-sample WatchKit App */ = {
isa = PBXGroup;
children = (
ABB17D6F22D93BAC00C26D6E /* Interface.storyboard */,
ABB17D7222D93BAC00C26D6E /* Assets.xcassets */,
ABB17D7422D93BAC00C26D6E /* Info.plist */,
);
path = "watchOS-sample WatchKit App";
sourceTree = "<group>";
};
ABB17D7D22D93BAC00C26D6E /* watchOS-sample WatchKit Extension */ = {
isa = PBXGroup;
children = (
ABB17D7E22D93BAC00C26D6E /* InterfaceController.h */,
ABB17D7F22D93BAC00C26D6E /* InterfaceController.m */,
ABB17D8122D93BAC00C26D6E /* ExtensionDelegate.h */,
ABB17D8222D93BAC00C26D6E /* ExtensionDelegate.m */,
ABB17D8422D93BAD00C26D6E /* Assets.xcassets */,
ABB17D8622D93BAD00C26D6E /* Info.plist */,
);
path = "watchOS-sample WatchKit Extension";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
ABB17D5322D93BAB00C26D6E /* watchOS-sample */ = {
isa = PBXNativeTarget;
buildConfigurationList = ABB17D9122D93BAD00C26D6E /* Build configuration list for PBXNativeTarget "watchOS-sample" */;
buildPhases = (
94316399D2F0BC04388E77B0 /* [CP] Check Pods Manifest.lock */,
ABB17D5022D93BAB00C26D6E /* Sources */,
ABB17D5122D93BAB00C26D6E /* Frameworks */,
ABB17D5222D93BAB00C26D6E /* Resources */,
ABB17D9022D93BAD00C26D6E /* Embed Watch Content */,
1E38C9CB686CAEF71A5A25B7 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
ABB17D6D22D93BAC00C26D6E /* PBXTargetDependency */,
);
name = "watchOS-sample";
productName = "watchOS-sample";
productReference = ABB17D5422D93BAB00C26D6E /* watchOS-sample.app */;
productType = "com.apple.product-type.application";
};
ABB17D6922D93BAC00C26D6E /* watchOS-sample WatchKit App */ = {
isa = PBXNativeTarget;
buildConfigurationList = ABB17D8D22D93BAD00C26D6E /* Build configuration list for PBXNativeTarget "watchOS-sample WatchKit App" */;
buildPhases = (
ABB17D6822D93BAC00C26D6E /* Resources */,
ABB17D8C22D93BAD00C26D6E /* Embed App Extensions */,
F374C9EC9D24282B20A64719 /* Frameworks */,
);
buildRules = (
);
dependencies = (
ABB17D7C22D93BAC00C26D6E /* PBXTargetDependency */,
);
name = "watchOS-sample WatchKit App";
productName = "watchOS-sample WatchKit App";
productReference = ABB17D6A22D93BAC00C26D6E /* watchOS-sample WatchKit App.app */;
productType = "com.apple.product-type.application.watchapp2";
};
ABB17D7822D93BAC00C26D6E /* watchOS-sample WatchKit Extension */ = {
isa = PBXNativeTarget;
buildConfigurationList = ABB17D8922D93BAD00C26D6E /* Build configuration list for PBXNativeTarget "watchOS-sample WatchKit Extension" */;
buildPhases = (
097AA61E20DEB1DB1E771FC9 /* [CP] Check Pods Manifest.lock */,
ABB17D7522D93BAC00C26D6E /* Sources */,
ABB17D7622D93BAC00C26D6E /* Frameworks */,
ABB17D7722D93BAC00C26D6E /* Resources */,
8F82497BD93485F0621F0F30 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
);
name = "watchOS-sample WatchKit Extension";
productName = "watchOS-sample WatchKit Extension";
productReference = ABB17D7922D93BAC00C26D6E /* watchOS-sample WatchKit Extension.appex */;
productType = "com.apple.product-type.watchkit2-extension";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
ABB17D4C22D93BAB00C26D6E /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1010;
ORGANIZATIONNAME = "Tony Lu";
TargetAttributes = {
ABB17D5322D93BAB00C26D6E = {
CreatedOnToolsVersion = 10.1;
};
ABB17D6922D93BAC00C26D6E = {
CreatedOnToolsVersion = 10.1;
};
ABB17D7822D93BAC00C26D6E = {
CreatedOnToolsVersion = 10.1;
};
};
};
buildConfigurationList = ABB17D4F22D93BAB00C26D6E /* Build configuration list for PBXProject "watchOS-sample" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = ABB17D4B22D93BAB00C26D6E;
productRefGroup = ABB17D5522D93BAB00C26D6E /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
ABB17D5322D93BAB00C26D6E /* watchOS-sample */,
ABB17D6922D93BAC00C26D6E /* watchOS-sample WatchKit App */,
ABB17D7822D93BAC00C26D6E /* watchOS-sample WatchKit Extension */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
ABB17D5222D93BAB00C26D6E /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
ABB17D6422D93BAC00C26D6E /* LaunchScreen.storyboard in Resources */,
ABB17D6122D93BAC00C26D6E /* Assets.xcassets in Resources */,
ABB17D5F22D93BAB00C26D6E /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
ABB17D6822D93BAC00C26D6E /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
ABB17D7322D93BAC00C26D6E /* Assets.xcassets in Resources */,
ABB17D7122D93BAC00C26D6E /* Interface.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
ABB17D7722D93BAC00C26D6E /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
ABB17D8522D93BAD00C26D6E /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
097AA61E20DEB1DB1E771FC9 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-watchOS-sample WatchKit Extension-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
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";
showEnvVarsInLog = 0;
};
1E38C9CB686CAEF71A5A25B7 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-watchOS-sample/Pods-watchOS-sample-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-watchOS-sample/Pods-watchOS-sample-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-watchOS-sample/Pods-watchOS-sample-resources.sh\"\n";
showEnvVarsInLog = 0;
};
8F82497BD93485F0621F0F30 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-watchOS-sample WatchKit Extension/Pods-watchOS-sample WatchKit Extension-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-watchOS-sample WatchKit Extension/Pods-watchOS-sample WatchKit Extension-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-watchOS-sample WatchKit Extension/Pods-watchOS-sample WatchKit Extension-resources.sh\"\n";
showEnvVarsInLog = 0;
};
94316399D2F0BC04388E77B0 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-watchOS-sample-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
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";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
ABB17D5022D93BAB00C26D6E /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
ABB17D5C22D93BAB00C26D6E /* ViewController.m in Sources */,
ABB17D6722D93BAC00C26D6E /* main.m in Sources */,
ABB17D5922D93BAB00C26D6E /* AppDelegate.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
ABB17D7522D93BAC00C26D6E /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
ABB17D8322D93BAC00C26D6E /* ExtensionDelegate.m in Sources */,
ABB17D8022D93BAC00C26D6E /* InterfaceController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
ABB17D6D22D93BAC00C26D6E /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = ABB17D6922D93BAC00C26D6E /* watchOS-sample WatchKit App */;
targetProxy = ABB17D6C22D93BAC00C26D6E /* PBXContainerItemProxy */;
};
ABB17D7C22D93BAC00C26D6E /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = ABB17D7822D93BAC00C26D6E /* watchOS-sample WatchKit Extension */;
targetProxy = ABB17D7B22D93BAC00C26D6E /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
ABB17D5D22D93BAB00C26D6E /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
ABB17D5E22D93BAB00C26D6E /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
ABB17D6222D93BAC00C26D6E /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
ABB17D6322D93BAC00C26D6E /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
ABB17D6F22D93BAC00C26D6E /* Interface.storyboard */ = {
isa = PBXVariantGroup;
children = (
ABB17D7022D93BAC00C26D6E /* Base */,
);
name = Interface.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
ABB17D8722D93BAD00C26D6E /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
name = Debug;
};
ABB17D8822D93BAD00C26D6E /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
ABB17D8A22D93BAD00C26D6E /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 8C5540E3A034586596BEFE2B /* Pods-watchOS-sample WatchKit Extension.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 6T98ZJNPG5;
INFOPLIST_FILE = "watchOS-sample WatchKit Extension/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = "com.google.watchOS-grpc-sample.watchkitapp.watchkitextension";
PRODUCT_NAME = "${TARGET_NAME}";
SDKROOT = watchos;
SKIP_INSTALL = YES;
TARGETED_DEVICE_FAMILY = 4;
WATCHOS_DEPLOYMENT_TARGET = 5.1;
};
name = Debug;
};
ABB17D8B22D93BAD00C26D6E /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 0D53169393FEB36944484D25 /* Pods-watchOS-sample WatchKit Extension.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 6T98ZJNPG5;
INFOPLIST_FILE = "watchOS-sample WatchKit Extension/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = "com.google.watchOS-grpc-sample.watchkitapp.watchkitextension";
PRODUCT_NAME = "${TARGET_NAME}";
SDKROOT = watchos;
SKIP_INSTALL = YES;
TARGETED_DEVICE_FAMILY = 4;
WATCHOS_DEPLOYMENT_TARGET = 5.1;
};
name = Release;
};
ABB17D8E22D93BAD00C26D6E /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 6T98ZJNPG5;
IBSC_MODULE = watchOS_sample_WatchKit_Extension;
INFOPLIST_FILE = "watchOS-sample WatchKit App/Info.plist";
PRODUCT_BUNDLE_IDENTIFIER = "com.google.watchOS-grpc-sample.watchkitapp";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
SKIP_INSTALL = YES;
TARGETED_DEVICE_FAMILY = 4;
WATCHOS_DEPLOYMENT_TARGET = 5.1;
};
name = Debug;
};
ABB17D8F22D93BAD00C26D6E /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 6T98ZJNPG5;
IBSC_MODULE = watchOS_sample_WatchKit_Extension;
INFOPLIST_FILE = "watchOS-sample WatchKit App/Info.plist";
PRODUCT_BUNDLE_IDENTIFIER = "com.google.watchOS-grpc-sample.watchkitapp";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
SKIP_INSTALL = YES;
TARGETED_DEVICE_FAMILY = 4;
WATCHOS_DEPLOYMENT_TARGET = 5.1;
};
name = Release;
};
ABB17D9222D93BAD00C26D6E /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = CC865626944D2C3DD838F762 /* Pods-watchOS-sample.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 6T98ZJNPG5;
INFOPLIST_FILE = "watchOS-sample/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = "com.google.watchOS-grpc-sample";
PRODUCT_NAME = "$(TARGET_NAME)";
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
ABB17D9322D93BAD00C26D6E /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7DB8462D385A70A534800DAF /* Pods-watchOS-sample.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 6T98ZJNPG5;
INFOPLIST_FILE = "watchOS-sample/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = "com.google.watchOS-grpc-sample";
PRODUCT_NAME = "$(TARGET_NAME)";
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
ABB17D4F22D93BAB00C26D6E /* Build configuration list for PBXProject "watchOS-sample" */ = {
isa = XCConfigurationList;
buildConfigurations = (
ABB17D8722D93BAD00C26D6E /* Debug */,
ABB17D8822D93BAD00C26D6E /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
ABB17D8922D93BAD00C26D6E /* Build configuration list for PBXNativeTarget "watchOS-sample WatchKit Extension" */ = {
isa = XCConfigurationList;
buildConfigurations = (
ABB17D8A22D93BAD00C26D6E /* Debug */,
ABB17D8B22D93BAD00C26D6E /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
ABB17D8D22D93BAD00C26D6E /* Build configuration list for PBXNativeTarget "watchOS-sample WatchKit App" */ = {
isa = XCConfigurationList;
buildConfigurations = (
ABB17D8E22D93BAD00C26D6E /* Debug */,
ABB17D8F22D93BAD00C26D6E /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
ABB17D9122D93BAD00C26D6E /* Build configuration list for PBXNativeTarget "watchOS-sample" */ = {
isa = XCConfigurationList;
buildConfigurations = (
ABB17D9222D93BAD00C26D6E /* Debug */,
ABB17D9322D93BAD00C26D6E /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = ABB17D4C22D93BAB00C26D6E /* Project object */;
}

@ -0,0 +1,17 @@
//
// AppDelegate.h
// watchOS-sample
//
// Created by Tony Lu on 7/12/19.
// Copyright © 2019 Tony Lu. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end

@ -0,0 +1,51 @@
//
// AppDelegate.m
// watchOS-sample
//
// Created by Tony Lu on 7/12/19.
// Copyright © 2019 Tony Lu. All rights reserved.
//
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
// 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.
// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
// 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.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
// 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.
}
- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
@end

@ -0,0 +1,98 @@
{
"images" : [
{
"idiom" : "iphone",
"size" : "20x20",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "20x20",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "3x"
},
{
"idiom" : "ipad",
"size" : "20x20",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "20x20",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "40x40",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "76x76",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "76x76",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "83.5x83.5",
"scale" : "2x"
},
{
"idiom" : "ios-marketing",
"size" : "1024x1024",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
</document>

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<viewLayoutGuide key="safeArea" id="Uee-0j-aNJ"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>

@ -0,0 +1,15 @@
//
// ViewController.h
// watchOS-sample
//
// Created by Tony Lu on 7/12/19.
// Copyright © 2019 Tony Lu. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end

@ -0,0 +1,25 @@
//
// ViewController.m
// watchOS-sample
//
// Created by Tony Lu on 7/12/19.
// Copyright © 2019 Tony Lu. All rights reserved.
//
#import "ViewController.h"
#import <RemoteTest/Messages.pbobjc.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
@end

@ -0,0 +1,16 @@
//
// main.m
// watchOS-sample
//
// Created by Tony Lu on 7/12/19.
// Copyright © 2019 Tony Lu. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
Loading…
Cancel
Save