├── Supporting Files
├── InfoPlist.strings
└── Info.plist
├── CastHelloVideo-ios.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── project.pbxproj
├── Podfile
├── CastHelloVideo-ios.xcworkspace
├── xcshareddata
│ └── IDEWorkspaceChecks.plist
└── contents.xcworkspacedata
├── CastHelloVideo-objc
├── CastHelloVideo-objc.entitlements
└── Classes
│ ├── ViewController.h
│ ├── AppDelegate.h
│ ├── main.m
│ ├── AppDelegate.m
│ └── ViewController.m
├── CastHelloVideo-swift
├── CastHelloVideo-swift.entitlements
└── Classes
│ ├── AppDelegate.swift
│ └── ViewController.swift
├── .gitignore
├── Resources
├── Images.xcassets
│ ├── LaunchImage.launchimage
│ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── LaunchScreen.storyboard
└── Main.storyboard
├── CONTRIBUTING.md
├── README.md
└── LICENSE
/Supporting Files/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /* Localized versions of Info.plist keys */
2 |
3 |
--------------------------------------------------------------------------------
/CastHelloVideo-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Podfile:
--------------------------------------------------------------------------------
1 | use_frameworks!
2 |
3 | platform :ios, '12.0'
4 |
5 | def target_pods
6 | pod 'google-cast-sdk', '< 5.0', '>=4.7.0'
7 | end
8 |
9 | target 'CastHelloVideo-objc' do
10 | target_pods
11 | end
12 | target 'CastHelloVideo-swift' do
13 | target_pods
14 | end
15 |
--------------------------------------------------------------------------------
/CastHelloVideo-ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/CastHelloVideo-objc/CastHelloVideo-objc.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.developer.networking.wifi-info
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/CastHelloVideo-swift/CastHelloVideo-swift.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.developer.networking.wifi-info
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/CastHelloVideo-ios.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/CastHelloVideo-ios.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # OSX
2 | .DS_Store
3 |
4 | ## Build generated
5 | build/
6 | DerivedData/
7 |
8 | ## Various settings
9 | *.pbxuser
10 | !default.pbxuser
11 | *.mode1v3
12 | !default.mode1v3
13 | *.mode2v3
14 | !default.mode2v3
15 | *.perspectivev3
16 | !default.perspectivev3
17 | xcuserdata/
18 |
19 | ## Other
20 | *.moved-aside
21 | *.xccheckout
22 | *.xcscmblueprint
23 |
24 | ## Obj-C/Swift specific
25 | *.hmap
26 | *.ipa
27 | *.dSYM.zip
28 |
29 | # CocoaPods
30 | Pods
31 | Podfile.lock
32 |
--------------------------------------------------------------------------------
/CastHelloVideo-objc/Classes/ViewController.h:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC. All Rights Reserved.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #import
16 |
17 | @interface ViewController : UIViewController
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/CastHelloVideo-objc/Classes/AppDelegate.h:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC. All Rights Reserved.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #import
16 |
17 | @interface AppDelegate : UIResponder
18 |
19 | @property(nonatomic, strong) UIWindow *window;
20 | @property(nonatomic, assign) BOOL castControlBarsEnabled;
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/CastHelloVideo-objc/Classes/main.m:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC. All Rights Reserved.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #import
16 |
17 | #import "AppDelegate.h"
18 |
19 | int main(int argc, char* argv[]) {
20 | @autoreleasepool {
21 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Resources/Images.xcassets/LaunchImage.launchimage/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "orientation" : "portrait",
5 | "idiom" : "iphone",
6 | "extent" : "full-screen",
7 | "minimum-system-version" : "7.0",
8 | "scale" : "2x"
9 | },
10 | {
11 | "orientation" : "portrait",
12 | "idiom" : "iphone",
13 | "subtype" : "retina4",
14 | "extent" : "full-screen",
15 | "minimum-system-version" : "7.0",
16 | "scale" : "2x"
17 | },
18 | {
19 | "orientation" : "portrait",
20 | "idiom" : "ipad",
21 | "extent" : "full-screen",
22 | "minimum-system-version" : "7.0",
23 | "scale" : "1x"
24 | },
25 | {
26 | "orientation" : "landscape",
27 | "idiom" : "ipad",
28 | "extent" : "full-screen",
29 | "minimum-system-version" : "7.0",
30 | "scale" : "1x"
31 | },
32 | {
33 | "orientation" : "portrait",
34 | "idiom" : "ipad",
35 | "extent" : "full-screen",
36 | "minimum-system-version" : "7.0",
37 | "scale" : "2x"
38 | },
39 | {
40 | "orientation" : "landscape",
41 | "idiom" : "ipad",
42 | "extent" : "full-screen",
43 | "minimum-system-version" : "7.0",
44 | "scale" : "2x"
45 | }
46 | ],
47 | "info" : {
48 | "version" : 1,
49 | "author" : "xcode"
50 | }
51 | }
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # How to become a contributor and submit your own code
2 |
3 | ## Contributor License Agreements
4 |
5 | We'd love to accept your sample apps and patches! Before we can take them, we
6 | have to jump a couple of legal hurdles.
7 |
8 | Please fill out either the individual or corporate Contributor License Agreement
9 | (CLA).
10 |
11 | * If you are an individual writing original source code and you're sure you
12 | own the intellectual property, then you'll need to sign an [individual CLA]
13 | (https://cla.developers.google.com/about/google-individual).
14 | * If you work for a company that wants to allow you to contribute your work,
15 | then you'll need to sign a [corporate CLA]
16 | (https://cla.developers.google.com/about/google-corporate).
17 |
18 | Follow either of the two links above to access the appropriate CLA and
19 | instructions for how to sign and return it. Once we receive it, we'll be able to
20 | accept your pull requests.
21 |
22 | ## Contributing a Patch
23 |
24 | 1. Sign a Contributor License Agreement, if you have not yet done so (see
25 | details above).
26 | 1. Create your change to the repo in question.
27 | * Fork the desired repo, develop and test your code changes.
28 | * Ensure that your code is clear and comprehensible.
29 | * Ensure that your code has an appropriate set of unit tests which all pass.
30 | 1. Submit a pull request.
31 | 1. The repo owner will review your request. If it is approved, the change will
32 | be merged. If it needs additional work, the repo owner will respond with
33 | useful comments.
34 |
--------------------------------------------------------------------------------
/Resources/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "20x20",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "20x20",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "29x29",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "29x29",
61 | "scale" : "2x"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "size" : "40x40",
66 | "scale" : "1x"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "size" : "40x40",
71 | "scale" : "2x"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "size" : "76x76",
76 | "scale" : "1x"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "size" : "76x76",
81 | "scale" : "2x"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "size" : "83.5x83.5",
86 | "scale" : "2x"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "size" : "1024x1024",
91 | "scale" : "1x"
92 | }
93 | ],
94 | "info" : {
95 | "version" : 1,
96 | "author" : "xcode"
97 | }
98 | }
--------------------------------------------------------------------------------
/Supporting Files/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | ${PRODUCT_NAME}
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 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1.0
25 | LSRequiresIPhoneOS
26 |
27 | NSBluetoothAlwaysUsageDescription
28 | ${PRODUCT_NAME} uses Bluetooth to discover nearby devices.
29 | NSBonjourServices
30 |
31 | _googlecast._tcp
32 | _C0868879._googlecast._tcp
33 |
34 | NSLocalNetworkUsageDescription
35 | ${PRODUCT_NAME} uses the local network to discover Cast-enabled devices on your WiFi network.
36 | NSMicrophoneUsageDescription
37 | ${PRODUCT_NAME} uses the microphone to discover nearby devices.
38 | UILaunchStoryboardName
39 | LaunchScreen
40 | UIMainStoryboardFile
41 | Main
42 | UIMainStoryboardFile~ipad
43 | Main
44 | UIRequiredDeviceCapabilities
45 |
46 | armv7
47 |
48 | UISupportedInterfaceOrientations
49 |
50 | UIInterfaceOrientationPortrait
51 | UIInterfaceOrientationLandscapeLeft
52 | UIInterfaceOrientationLandscapeRight
53 |
54 | UISupportedInterfaceOrientations~ipad
55 |
56 | UIInterfaceOrientationPortrait
57 | UIInterfaceOrientationPortraitUpsideDown
58 | UIInterfaceOrientationLandscapeLeft
59 | UIInterfaceOrientationLandscapeRight
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # CastHelloVideo-ios
2 |
3 | This Google Cast demo app shows how an iOS sender app can cast a Video. For simplicity this app is not fully compliant with the UX Checklist.
4 |
5 | **The project contains targets for both Objective-C and Swift.**
6 |
7 | [List of reference apps and tutorials](https://developers.google.com/cast/docs/downloads)
8 |
9 | ## Dependencies
10 | * CocoaPods - dependencies are managed via CocoaPods. See http://guides.cocoapods.org/using/getting-started.html for setup instructions.
11 | * Alternatively, you may download the iOS Sender API library directly at: [https://developers.google.com/cast/docs/developers#ios](https://developers.google.com/cast/docs/developers#ios "iOS Sender API library")
12 |
13 | ## Setup Instructions
14 | 1. Get a Google Cast device and get it set up for development: https://developers.google.com/cast/docs/developers#setup_for_development.
15 | 1. [Optional] Register an application on the Developers Console [http://cast.google.com/publish](http://cast.google.com/publish "Google Cast Developer Console").
16 | You will get an App ID when you finish registering your application. This project uses a published Application ID that
17 | can be used to run the app without using your own ID but if you need to do any console debugging, you would need to
18 | have your own ID.
19 | * **If you use DRM, you will need to use your own App ID.**
20 | 1. Setup the project dependencies in Xcode using Cocoapods, installing the tool if necessary: See this [guide](http://guides.cocoapods.org/using/getting-started.html).
21 | 1. In the root folder, run `pod repo update` and then `pod install`.
22 | 1. Open the .xcworkspace file rather the the xcproject to ensure you have the pod dependencies.
23 | 1. The `AppDelegate.swift`/`AppDelegate.m` includes a published receiver App ID so the project can be built and run without a need
24 | to register an ID.
25 | * **Update this value with your own App ID to use your own receiver to debug and use DRM.**
26 | 1. The `Info.plist` lists the published receiver App ID for `NSBonjourServices` which is used to discover Cast devices.
27 | * **Update this value with your own App ID if you are using a custom receiver.**
28 | 1. For additional setup steps, see the [Xcode setup guide](https://developers.google.com/cast/docs/ios_sender_setup#xcode_setup).
29 |
30 | ## Documentation
31 | * [Google Cast iOS Sender Overview](https://developers.google.com/cast/docs/ios_sender/)
32 | * [Developer Guides](https://developers.google.com/cast/docs/developers)
33 |
34 | ## References
35 | * [iOS Sender Reference](https://developers.google.com/cast/v3/reference/ios/)
36 | * [Design Checklist](http://developers.google.com/cast/docs/design_checklist)
37 |
38 | ## How to report bugs
39 | * [Google Cast SDK Support](https://developers.google.com/cast/support)
40 | * [Sample App Issues](https://issuetracker.google.com/issues/new?component=190205&template=1901999)
41 |
42 | ## Contributions
43 | Please read and follow the steps in the [CONTRIBUTING.md](CONTRIBUTING.md).
44 |
45 | ## License
46 | See [LICENSE](LICENSE).
47 |
48 | ## Terms
49 | Your use of this sample is subject to, and by using or downloading the sample files you agree to comply with, the [Google APIs Terms of Service](https://developers.google.com/terms/) and the [Google Cast SDK Additional Developer Terms of Service](https://developers.google.com/cast/docs/terms/).
50 |
--------------------------------------------------------------------------------
/CastHelloVideo-swift/Classes/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC. All Rights Reserved.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | import GoogleCast
16 | import UIKit
17 |
18 | @UIApplicationMain
19 | class AppDelegate: UIResponder, UIApplicationDelegate, GCKLoggerDelegate {
20 | // You can add your own app id here that you get by registering with the Google Cast SDK
21 | // Developer Console https://cast.google.com/publish or use kGCKDefaultMediaReceiverApplicationID
22 | let kReceiverAppID = "C0868879"
23 | let kDebugLoggingEnabled = true
24 |
25 | var window: UIWindow?
26 |
27 | func applicationDidFinishLaunching(_: UIApplication) {
28 | // Set your receiver application ID.
29 | let criteria = GCKDiscoveryCriteria(applicationID: kReceiverAppID)
30 | let options = GCKCastOptions(discoveryCriteria: criteria)
31 | options.physicalVolumeButtonsWillControlDeviceVolume = true
32 |
33 | // Following code enables Cast Connect
34 | let launchOptions = GCKLaunchOptions()
35 | launchOptions.androidReceiverCompatible = true
36 | options.launchOptions = launchOptions
37 |
38 | GCKCastContext.setSharedInstanceWith(options)
39 | GCKCastContext.sharedInstance().setLaunch(GCKCredentialsData(credentials: "{\"userId\": \"123\"}"))
40 | // Configure widget styling.
41 | // Theme using UIAppearance.
42 | UINavigationBar.appearance().barTintColor = .lightGray
43 | let colorAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black]
44 | UINavigationBar().titleTextAttributes = colorAttributes
45 | GCKUICastButton.appearance().tintColor = .gray
46 |
47 | // Theme using GCKUIStyle.
48 | let castStyle = GCKUIStyle.sharedInstance()
49 | // Set the property of the desired cast widgets.
50 | castStyle.castViews.deviceControl.buttonTextColor = .darkGray
51 | // Refresh all currently visible views with the assigned styles.
52 | castStyle.apply()
53 |
54 | // Enable default expanded controller.
55 | GCKCastContext.sharedInstance().useDefaultExpandedMediaControls = true
56 |
57 | // Enable logger.
58 | GCKLogger.sharedInstance().delegate = self
59 |
60 | // Set logger filter.
61 | let filter = GCKLoggerFilter()
62 | filter.minimumLevel = .error
63 | GCKLogger.sharedInstance().filter = filter
64 |
65 | // Wrap main view in the GCKUICastContainerViewController and display the mini controller.
66 | let appStoryboard = UIStoryboard(name: "Main", bundle: nil)
67 | let navigationController = appStoryboard.instantiateViewController(withIdentifier: "MainNavigation")
68 | let castContainerVC = GCKCastContext.sharedInstance().createCastContainerController(for: navigationController)
69 | castContainerVC.miniMediaControlsItemEnabled = true
70 |
71 | window = UIWindow(frame: UIScreen.main.bounds)
72 | window?.rootViewController = castContainerVC
73 | window?.makeKeyAndVisible()
74 | }
75 |
76 | // MARK: - GCKLoggerDelegate
77 |
78 | func logMessage(_ message: String,
79 | at _: GCKLoggerLevel,
80 | fromFunction function: String,
81 | location: String) {
82 | if kDebugLoggingEnabled {
83 | print("\(location): \(function) - \(message)")
84 | }
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/CastHelloVideo-objc/Classes/AppDelegate.m:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC. All Rights Reserved.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #import "AppDelegate.h"
16 | #import
17 |
18 | // You can add your own app id here that you get by registering with the Google
19 | // Cast SDK Developer Console https://cast.google.com/publish
20 | static NSString *const kReceiverAppID = @"C0868879";
21 | static Boolean const kDebugLoggingEnabled = YES;
22 |
23 | @interface AppDelegate () {
24 | }
25 |
26 | @end
27 |
28 | @implementation AppDelegate
29 |
30 | - (BOOL)application:(UIApplication *)application
31 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
32 | // Set your receiver application ID.
33 | GCKDiscoveryCriteria *criteria =
34 | [[GCKDiscoveryCriteria alloc] initWithApplicationID:kReceiverAppID];
35 | GCKCastOptions *options = [[GCKCastOptions alloc] initWithDiscoveryCriteria:criteria];
36 | options.physicalVolumeButtonsWillControlDeviceVolume = YES;
37 |
38 | // Following code enables Cast Connect
39 | GCKLaunchOptions *gckLaunchOptions = [[GCKLaunchOptions alloc] init];
40 | gckLaunchOptions.androidReceiverCompatible = YES;
41 | options.launchOptions = gckLaunchOptions;
42 |
43 | [GCKCastContext setSharedInstanceWithOptions:options];
44 |
45 | // Configure widget styling.
46 | // Theme using UIAppearance.
47 | [UINavigationBar appearance].barTintColor = [UIColor lightGrayColor];
48 | NSDictionary *colorAttributes = @{NSForegroundColorAttributeName : [UIColor blackColor]};
49 | [UINavigationBar appearance].titleTextAttributes = colorAttributes;
50 | [GCKUICastButton appearance].tintColor = [UIColor grayColor];
51 |
52 | // Theme using GCKUIStyle.
53 | GCKUIStyle *castStyle = [GCKUIStyle sharedInstance];
54 | // Set the property of the desired cast widgets.
55 | castStyle.castViews.deviceControl.buttonTextColor = [UIColor darkGrayColor];
56 | // Refresh all currently visible views with the assigned styles.
57 | [castStyle applyStyle];
58 |
59 | // Enable default expanded controller.
60 | [GCKCastContext sharedInstance].useDefaultExpandedMediaControls = YES;
61 |
62 | // Enable logger.
63 | [GCKLogger sharedInstance].delegate = self;
64 |
65 | // Set logger filter.
66 | GCKLoggerFilter *filter = [[GCKLoggerFilter alloc] init];
67 | filter.minimumLevel = GCKLoggerLevelError;
68 | [GCKLogger sharedInstance].filter = filter;
69 |
70 | // Wrap main view in the GCKUICastContainerViewController and display the mini
71 | // controller.
72 | UIStoryboard *appStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
73 | UINavigationController *navigationController =
74 | [appStoryboard instantiateViewControllerWithIdentifier:@"MainNavigation"];
75 | GCKUICastContainerViewController *castContainerVC = [[GCKCastContext sharedInstance]
76 | createCastContainerControllerForViewController:navigationController];
77 | castContainerVC.miniMediaControlsItemEnabled = YES;
78 |
79 | self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
80 | self.window.rootViewController = castContainerVC;
81 | [self.window makeKeyAndVisible];
82 |
83 | return YES;
84 | }
85 |
86 | #pragma mark - GCKLoggerDelegate
87 |
88 | - (void)logMessage:(NSString *)message
89 | atLevel:(GCKLoggerLevel)level
90 | fromFunction:(NSString *)function
91 | location:(NSString *)location {
92 | if (kDebugLoggingEnabled) {
93 | NSLog(@"%@: %@ - %@", location, function, message);
94 | }
95 | }
96 |
97 | @end
98 |
--------------------------------------------------------------------------------
/Resources/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
28 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/CastHelloVideo-swift/Classes/ViewController.swift:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC. All Rights Reserved.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | import GoogleCast
16 | import UIKit
17 |
18 | @objc(ViewController)
19 | class ViewController: UIViewController, GCKSessionManagerListener, GCKRemoteMediaClientListener, GCKRequestDelegate {
20 | @IBOutlet var castVideoButton: UIButton!
21 | @IBOutlet var castInstructionLabel: UILabel!
22 | @IBOutlet var credsToggleButton: UIButton!
23 | @IBOutlet var credsLabel: UILabel!
24 |
25 | private var castButton: GCKUICastButton!
26 | private var mediaInformation: GCKMediaInformation?
27 | private var sessionManager: GCKSessionManager!
28 | private let NULL_CREDENTIALS = "N/A"
29 |
30 | override func viewDidLoad() {
31 | super.viewDidLoad()
32 |
33 | // Initially hide the cast button until a session is started.
34 | showLoadVideoButton(showButton: false)
35 |
36 | sessionManager = GCKCastContext.sharedInstance().sessionManager
37 | sessionManager.add(self)
38 |
39 | // Add cast button.
40 | castButton = GCKUICastButton(frame: CGRect(x: 0, y: 0, width: 24, height: 24))
41 |
42 | // Used to overwrite the theme in AppDelegate.
43 | castButton.tintColor = .darkGray
44 |
45 | // Initial default value
46 | self.credsLabel.text = NULL_CREDENTIALS
47 | setLaunchCreds()
48 |
49 | navigationItem.rightBarButtonItem = UIBarButtonItem(customView: castButton)
50 |
51 | NotificationCenter.default.addObserver(self,
52 | selector: #selector(castDeviceDidChange(notification:)),
53 | name: NSNotification.Name.gckCastStateDidChange,
54 | object: GCKCastContext.sharedInstance())
55 | }
56 |
57 | @objc func castDeviceDidChange(notification _: Notification) {
58 | if GCKCastContext.sharedInstance().castState != GCKCastState.noDevicesAvailable {
59 | // Display the instructions for how to use Google Cast on the first app use.
60 | GCKCastContext.sharedInstance().presentCastInstructionsViewControllerOnce(with: castButton)
61 | }
62 | }
63 |
64 | // MARK: Cast Actions
65 |
66 | func playVideoRemotely() {
67 | GCKCastContext.sharedInstance().presentDefaultExpandedMediaControls()
68 |
69 | // Define media metadata.
70 | let metadata = GCKMediaMetadata()
71 | metadata.setString("Big Buck Bunny (2008)", forKey: kGCKMetadataKeyTitle)
72 | metadata.setString("Big Buck Bunny tells the story of a giant rabbit with a heart bigger than " +
73 | "himself. When one sunny day three rodents rudely harass him, something " +
74 | "snaps... and the rabbit ain't no bunny anymore! In the typical cartoon " +
75 | "tradition he prepares the nasty rodents a comical revenge.",
76 | forKey: kGCKMetadataKeySubtitle)
77 | metadata.addImage(GCKImage(url: URL(string: "https://storage.googleapis.com/cpe-sample-media/transfer/big_buck_bunny/images/gtv-image.jpg")!,
78 | width: 480,
79 | height: 360))
80 |
81 | let mediaInfoBuilder = GCKMediaInformationBuilder(contentURL: URL(string:
82 | "https://storage.googleapis.com/cpe-sample-media/transfer/big_buck_bunny/big_buck_bunny_ts_master.m3u8")!)
83 | mediaInfoBuilder.streamType = GCKMediaStreamType.none
84 | mediaInfoBuilder.contentType = "video/mp4"
85 | mediaInfoBuilder.metadata = metadata
86 | mediaInformation = mediaInfoBuilder.build()
87 |
88 | let mediaLoadRequestDataBuilder = GCKMediaLoadRequestDataBuilder()
89 | mediaLoadRequestDataBuilder.mediaInformation = mediaInformation
90 | mediaLoadRequestDataBuilder.credentials = credsLabel.text
91 |
92 | // Send a load request to the remote media client.
93 | if let request = sessionManager.currentSession?.remoteMediaClient?.loadMedia(with: mediaLoadRequestDataBuilder.build()) {
94 | request.delegate = self
95 | }
96 | }
97 |
98 | // Toggle label text and set those credentials for next session
99 | @IBAction func setCredentials(_ sender: Any) {
100 | let credentials = credsLabel.text
101 | if (credentials == NULL_CREDENTIALS) {
102 | credsLabel.text = "{\"userId\":\"id123\"}"
103 | } else {
104 | credsLabel.text = NULL_CREDENTIALS
105 | }
106 | setLaunchCreds()
107 | }
108 |
109 | @IBAction func loadVideo(sender _: AnyObject) {
110 | print("Load Video")
111 |
112 | if sessionManager.currentSession == nil {
113 | print("Cast device not connected")
114 | return
115 | }
116 |
117 | playVideoRemotely()
118 | }
119 |
120 | func showLoadVideoButton(showButton: Bool) {
121 | castVideoButton.isHidden = !showButton
122 | // Instructions should always be the opposite visibility of the video button.
123 | castInstructionLabel.isHidden = !castVideoButton.isHidden
124 | }
125 |
126 | // MARK: GCKSessionManagerListener
127 |
128 | func sessionManager(_: GCKSessionManager,
129 | didStart session: GCKSession) {
130 | print("sessionManager didStartSession: \(session)")
131 |
132 | // Add GCKRemoteMediaClientListener.
133 | session.remoteMediaClient?.add(self)
134 |
135 | showLoadVideoButton(showButton: true)
136 | }
137 |
138 | func sessionManager(_: GCKSessionManager,
139 | didResumeSession session: GCKSession) {
140 | print("sessionManager didResumeSession: \(session)")
141 |
142 | // Add GCKRemoteMediaClientListener.
143 | session.remoteMediaClient?.add(self)
144 |
145 | showLoadVideoButton(showButton: true)
146 | }
147 |
148 | func sessionManager(_: GCKSessionManager,
149 | didEnd session: GCKSession,
150 | withError error: Error?) {
151 | print("sessionManager didEndSession: \(session)")
152 |
153 | // Remove GCKRemoteMediaClientListener.
154 | session.remoteMediaClient?.remove(self)
155 |
156 | if let error = error {
157 | showError(error)
158 | }
159 |
160 | showLoadVideoButton(showButton: false)
161 | }
162 |
163 | func sessionManager(_: GCKSessionManager,
164 | didFailToStart session: GCKSession,
165 | withError error: Error) {
166 | print("sessionManager didFailToStartSessionWithError: \(session) error: \(error)")
167 |
168 | // Remove GCKRemoteMediaClientListener.
169 | session.remoteMediaClient?.remove(self)
170 |
171 | showLoadVideoButton(showButton: false)
172 | }
173 |
174 | // MARK: GCKRemoteMediaClientListener
175 |
176 | func remoteMediaClient(_: GCKRemoteMediaClient,
177 | didUpdate mediaStatus: GCKMediaStatus?) {
178 | if let mediaStatus = mediaStatus {
179 | mediaInformation = mediaStatus.mediaInformation
180 | }
181 | }
182 |
183 | // MARK: - GCKRequestDelegate
184 |
185 | func requestDidComplete(_ request: GCKRequest) {
186 | print("request \(Int(request.requestID)) completed")
187 | }
188 |
189 | func request(_ request: GCKRequest,
190 | didFailWithError error: GCKError) {
191 | print("request \(Int(request.requestID)) didFailWithError \(error)")
192 | }
193 |
194 | func request(_ request: GCKRequest,
195 | didAbortWith abortReason: GCKRequestAbortReason) {
196 | print("request \(Int(request.requestID)) didAbortWith reason \(abortReason)")
197 | }
198 |
199 | // MARK: Misc
200 |
201 | func showError(_ error: Error) {
202 | let alertController = UIAlertController(title: "Error",
203 | message: error.localizedDescription,
204 | preferredStyle: UIAlertController.Style.alert)
205 | let action = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil)
206 | alertController.addAction(action)
207 |
208 | present(alertController, animated: true, completion: nil)
209 | }
210 |
211 | func setLaunchCreds() {
212 | let creds = credsLabel.text
213 | GCKCastContext.sharedInstance().setLaunch(GCKCredentialsData(credentials: (creds == NULL_CREDENTIALS) ? nil : creds))
214 | }
215 | }
216 |
--------------------------------------------------------------------------------
/Resources/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
54 |
63 |
71 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
--------------------------------------------------------------------------------
/CastHelloVideo-objc/Classes/ViewController.m:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC. All Rights Reserved.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #import "ViewController.h"
16 | #import
17 |
18 | static NSString *const NULL_CREDENTIALS = @"N/A";
19 |
20 | @interface ViewController () {
23 | }
24 |
25 | @property(nonatomic, weak) IBOutlet UIButton *castVideoButton;
26 | @property(nonatomic, weak) IBOutlet UILabel *castInstructionLabel;
27 | @property(nonatomic, weak) IBOutlet UIButton *credsToggleButton;
28 | @property(nonatomic, weak) IBOutlet UILabel *credsLabel;
29 |
30 | @property(nonatomic, strong) GCKUICastButton *castButton;
31 | @property(nonatomic, strong) GCKMediaInformation *mediaInformation;
32 | @property(nonatomic, strong) GCKSessionManager *sessionManager;
33 |
34 | @end
35 |
36 | @implementation ViewController
37 |
38 | - (void)viewDidLoad {
39 | [super viewDidLoad];
40 |
41 | // Initially hide the cast button until a session is started.
42 | [self showLoadVideoButton:NO];
43 |
44 | self.sessionManager = [GCKCastContext sharedInstance].sessionManager;
45 | [self.sessionManager addListener:self];
46 |
47 | // Add cast button.
48 | self.castButton = [[GCKUICastButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)];
49 |
50 | // Used to overwrite the theme in AppDelegate.
51 | self.castButton.tintColor = [UIColor darkGrayColor];
52 |
53 | self.navigationItem.rightBarButtonItem =
54 | [[UIBarButtonItem alloc] initWithCustomView:self.castButton];
55 |
56 | [[NSNotificationCenter defaultCenter] addObserver:self
57 | selector:@selector(castDeviceDidChange:)
58 | name:kGCKCastStateDidChangeNotification
59 | object:[GCKCastContext sharedInstance]];
60 | _credsLabel.text = NULL_CREDENTIALS;
61 | [self setLaunchCreds];
62 | }
63 |
64 | - (IBAction)setCredentials:(id)sender {
65 | NSString *creds = _credsLabel.text;
66 | if(creds == NULL_CREDENTIALS)
67 | {
68 | _credsLabel.text = @"{\"userId\":\"id123\"}";
69 | } else {
70 | _credsLabel.text = NULL_CREDENTIALS;
71 | }
72 | [self setLaunchCreds];
73 | }
74 |
75 | - (void) setLaunchCreds {
76 | NSString *creds = _credsLabel.text;
77 | GCKCredentialsData *credsData = [[GCKCredentialsData alloc] initWithCredentials:creds];
78 | [[GCKCastContext sharedInstance] setLaunchCredentialsData:credsData];
79 | }
80 |
81 | - (void)castDeviceDidChange:(NSNotification *)notification {
82 | if ([GCKCastContext sharedInstance].castState != GCKCastStateNoDevicesAvailable) {
83 | // Display the instructions for how to use Google Cast on the first app use.
84 | [[GCKCastContext sharedInstance]
85 | presentCastInstructionsViewControllerOnceWithCastButton:self.castButton];
86 | }
87 | }
88 |
89 | #pragma mark - Cast Actions
90 |
91 | - (void)playVideoRemotely {
92 | [[GCKCastContext sharedInstance] presentDefaultExpandedMediaControls];
93 |
94 | // Define media metadata.
95 | GCKMediaMetadata *metadata = [[GCKMediaMetadata alloc] init];
96 | [metadata setString:@"Big Buck Bunny (2008)" forKey:kGCKMetadataKeyTitle];
97 | [metadata setString:@"Big Buck Bunny tells the story of a giant rabbit with a "
98 | "heart bigger than himself. When one sunny day three rodents rudely harass him, "
99 | "something snaps... and the rabbit ain't no bunny anymore! In the "
100 | "typical cartoon tradition he prepares the nasty rodents a comical revenge."
101 | forKey:kGCKMetadataKeySubtitle];
102 | [metadata addImage:[[GCKImage alloc]
103 | initWithURL:
104 | [[NSURL alloc]
105 | initWithString:@"https://commondatastorage.googleapis.com/"
106 | "cpe-sample-media/transfer/big_buck_bunny/images/gtv-image.jpg"]
107 | width:480
108 | height:360]];
109 |
110 | // Define information about the media item.
111 | GCKMediaInformationBuilder *mediaInfoBuilder = [[GCKMediaInformationBuilder alloc]
112 | initWithContentURL:[NSURL URLWithString:@"https://commondatastorage.googleapis.com/"
113 | "cpe-sample-media/transfer/big_buck_bunny/prog/big_buck_bunny_prog.mp4"]];
114 | mediaInfoBuilder.streamType = GCKMediaStreamTypeNone;
115 | mediaInfoBuilder.contentType = @"video/mp4";
116 | mediaInfoBuilder.metadata = metadata;
117 | self.mediaInformation = [mediaInfoBuilder build];
118 |
119 | GCKMediaLoadRequestDataBuilder *mediaLoadRequestDataBuilder = [[GCKMediaLoadRequestDataBuilder alloc] init];
120 | mediaLoadRequestDataBuilder.mediaInformation = self.mediaInformation;
121 |
122 | // Send a load request to the remote media client.
123 | GCKRequest *request = [self.sessionManager.currentSession.remoteMediaClient
124 | loadMediaWithLoadRequestData:[mediaLoadRequestDataBuilder build]];
125 | if (request != nil) {
126 | request.delegate = self;
127 | }
128 | }
129 |
130 | - (IBAction)loadVideoWithSender:(id)sender {
131 | NSLog(@"Load Video");
132 |
133 | if (!self.sessionManager.currentSession) {
134 | NSLog(@"Cast device not connected");
135 | return;
136 | }
137 |
138 | [self playVideoRemotely];
139 | }
140 |
141 | - (void)showLoadVideoButton:(BOOL)yn {
142 | self.castVideoButton.hidden = !yn;
143 | // Instructions should always be the opposite visibility of the video button.
144 | self.castInstructionLabel.hidden = !self.castVideoButton.hidden;
145 | }
146 |
147 | #pragma mark - GCKSessionManagerListener
148 |
149 | - (void)sessionManager:(GCKSessionManager *)sessionManager didStartSession:(GCKSession *)session {
150 | NSLog(@"sessionManager didStartSession %@", session);
151 |
152 | // Add GCKRemoteMediaClientListener.
153 | if (session.remoteMediaClient) {
154 | [session.remoteMediaClient addListener:self];
155 | }
156 |
157 | [self showLoadVideoButton:YES];
158 | }
159 |
160 | - (void)sessionManager:(GCKSessionManager *)sessionManager didResumeSession:(GCKSession *)session {
161 | NSLog(@"sessionManager didResumeSession %@", session);
162 |
163 | // Add GCKRemoteMediaClientListener.
164 | if (session.remoteMediaClient) {
165 | [session.remoteMediaClient addListener:self];
166 | }
167 |
168 | [self showLoadVideoButton:YES];
169 | }
170 |
171 | - (void)sessionManager:(GCKSessionManager *)sessionManager
172 | didEndSession:(GCKSession *)session
173 | withError:(NSError *)error {
174 | NSLog(@"sessionManager didEndSession %@", session);
175 |
176 | // Remove GCKRemoteMediaClientListener.
177 | if (session.remoteMediaClient) {
178 | [session.remoteMediaClient removeListener:self];
179 | }
180 |
181 | [self showLoadVideoButton:NO];
182 |
183 | if (error) {
184 | [self showError:error];
185 | }
186 | }
187 |
188 | - (void)sessionManager:(GCKSessionManager *)sessionManager
189 | didFailToStartSessionWithError:(NSError *)error {
190 | NSLog(@"sessionManager didFailToStartSessionWithError %@", error);
191 |
192 | [self showLoadVideoButton:NO];
193 | }
194 |
195 | - (void)sessionManager:(GCKSessionManager *)sessionManager
196 | didFailToResumeSession:(GCKSession *)session
197 | withError:(NSError *)error {
198 | NSLog(@"sessionManager didFailToResumeSession: %@ error: %@", session, error);
199 |
200 | // Remove GCKRemoteMediaClientListener.
201 | if (session.remoteMediaClient) {
202 | [session.remoteMediaClient removeListener:self];
203 | }
204 |
205 | [self showLoadVideoButton:NO];
206 | }
207 |
208 | #pragma mark - GCKRemoteMediaClientListener
209 |
210 | - (void)remoteMediaClient:(GCKRemoteMediaClient *)player
211 | didUpdateMediaStatus:(GCKMediaStatus *)mediaStatus {
212 | self.mediaInformation = mediaStatus.mediaInformation;
213 | }
214 |
215 | #pragma mark - GCKRequestDelegate
216 |
217 | - (void)requestDidComplete:(GCKRequest *)request {
218 | NSLog(@"request %ld completed", request.requestID);
219 | }
220 |
221 | - (void)request:(GCKRequest *)request didFailWithError:(GCKError *)error {
222 | NSLog(@"request %ld didFailWithError %@", request.requestID, error);
223 | }
224 |
225 | - (void)request:(GCKRequest *)request didAbortWithReason:(GCKRequestAbortReason)abortReason {
226 | NSLog(@"request %ld didAbortWithReason %ld", request.requestID, (long)abortReason);
227 | }
228 |
229 | #pragma mark - misc
230 |
231 | - (void)showError:(NSError *)error {
232 | UIAlertController *alert =
233 | [UIAlertController alertControllerWithTitle:@"Error"
234 | message:error.description
235 | preferredStyle:UIAlertControllerStyleAlert];
236 | UIAlertAction *action = [UIAlertAction actionWithTitle:@"OK"
237 | style:UIAlertActionStyleDefault
238 | handler:nil];
239 | [alert addAction:action];
240 | [self presentViewController:alert animated:YES completion:nil];
241 | }
242 |
243 | @end
244 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction, and
10 | distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by the copyright
13 | owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all other entities
16 | that control, are controlled by, or are under common control with that entity.
17 | For the purposes of this definition, "control" means (i) the power, direct or
18 | indirect, to cause the direction or management of such entity, whether by
19 | contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
20 | outstanding shares, or (iii) beneficial ownership of such entity.
21 |
22 | "You" (or "Your") shall mean an individual or Legal Entity exercising
23 | permissions granted by this License.
24 |
25 | "Source" form shall mean the preferred form for making modifications, including
26 | but not limited to software source code, documentation source, and configuration
27 | files.
28 |
29 | "Object" form shall mean any form resulting from mechanical transformation or
30 | translation of a Source form, including but not limited to compiled object code,
31 | generated documentation, and conversions to other media types.
32 |
33 | "Work" shall mean the work of authorship, whether in Source or Object form, made
34 | available under the License, as indicated by a copyright notice that is included
35 | in or attached to the work (an example is provided in the Appendix below).
36 |
37 | "Derivative Works" shall mean any work, whether in Source or Object form, that
38 | is based on (or derived from) the Work and for which the editorial revisions,
39 | annotations, elaborations, or other modifications represent, as a whole, an
40 | original work of authorship. For the purposes of this License, Derivative Works
41 | shall not include works that remain separable from, or merely link (or bind by
42 | name) to the interfaces of, the Work and Derivative Works thereof.
43 |
44 | "Contribution" shall mean any work of authorship, including the original version
45 | of the Work and any modifications or additions to that Work or Derivative Works
46 | thereof, that is intentionally submitted to Licensor for inclusion in the Work
47 | by the copyright owner or by an individual or Legal Entity authorized to submit
48 | on behalf of the copyright owner. For the purposes of this definition,
49 | "submitted" means any form of electronic, verbal, or written communication sent
50 | to the Licensor or its representatives, including but not limited to
51 | communication on electronic mailing lists, source code control systems, and
52 | issue tracking systems that are managed by, or on behalf of, the Licensor for
53 | the purpose of discussing and improving the Work, but excluding communication
54 | that is conspicuously marked or otherwise designated in writing by the copyright
55 | owner as "Not a Contribution."
56 |
57 | "Contributor" shall mean Licensor and any individual or Legal Entity on behalf
58 | of whom a Contribution has been received by Licensor and subsequently
59 | incorporated within the Work.
60 |
61 | 2. Grant of Copyright License.
62 |
63 | Subject to the terms and conditions of this License, each Contributor hereby
64 | grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
65 | irrevocable copyright license to reproduce, prepare Derivative Works of,
66 | publicly display, publicly perform, sublicense, and distribute the Work and such
67 | Derivative Works in Source or Object form.
68 |
69 | 3. Grant of Patent License.
70 |
71 | Subject to the terms and conditions of this License, each Contributor hereby
72 | grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
73 | irrevocable (except as stated in this section) patent license to make, have
74 | made, use, offer to sell, sell, import, and otherwise transfer the Work, where
75 | such license applies only to those patent claims licensable by such Contributor
76 | that are necessarily infringed by their Contribution(s) alone or by combination
77 | of their Contribution(s) with the Work to which such Contribution(s) was
78 | submitted. If You institute patent litigation against any entity (including a
79 | cross-claim or counterclaim in a lawsuit) alleging that the Work or a
80 | Contribution incorporated within the Work constitutes direct or contributory
81 | patent infringement, then any patent licenses granted to You under this License
82 | for that Work shall terminate as of the date such litigation is filed.
83 |
84 | 4. Redistribution.
85 |
86 | You may reproduce and distribute copies of the Work or Derivative Works thereof
87 | in any medium, with or without modifications, and in Source or Object form,
88 | provided that You meet the following conditions:
89 |
90 | You must give any other recipients of the Work or Derivative Works a copy of
91 | this License; and
92 | You must cause any modified files to carry prominent notices stating that You
93 | changed the files; and
94 | You must retain, in the Source form of any Derivative Works that You distribute,
95 | all copyright, patent, trademark, and attribution notices from the Source form
96 | of the Work, excluding those notices that do not pertain to any part of the
97 | Derivative Works; and
98 | If the Work includes a "NOTICE" text file as part of its distribution, then any
99 | Derivative Works that You distribute must include a readable copy of the
100 | attribution notices contained within such NOTICE file, excluding those notices
101 | that do not pertain to any part of the Derivative Works, in at least one of the
102 | following places: within a NOTICE text file distributed as part of the
103 | Derivative Works; within the Source form or documentation, if provided along
104 | with the Derivative Works; or, within a display generated by the Derivative
105 | Works, if and wherever such third-party notices normally appear. The contents of
106 | the NOTICE file are for informational purposes only and do not modify the
107 | License. You may add Your own attribution notices within Derivative Works that
108 | You distribute, alongside or as an addendum to the NOTICE text from the Work,
109 | provided that such additional attribution notices cannot be construed as
110 | modifying the License.
111 | You may add Your own copyright statement to Your modifications and may provide
112 | additional or different license terms and conditions for use, reproduction, or
113 | distribution of Your modifications, or for any such Derivative Works as a whole,
114 | provided Your use, reproduction, and distribution of the Work otherwise complies
115 | with the conditions stated in this License.
116 |
117 | 5. Submission of Contributions.
118 |
119 | Unless You explicitly state otherwise, any Contribution intentionally submitted
120 | for inclusion in the Work by You to the Licensor shall be under the terms and
121 | conditions of this License, without any additional terms or conditions.
122 | Notwithstanding the above, nothing herein shall supersede or modify the terms of
123 | any separate license agreement you may have executed with Licensor regarding
124 | such Contributions.
125 |
126 | 6. Trademarks.
127 |
128 | This License does not grant permission to use the trade names, trademarks,
129 | service marks, or product names of the Licensor, except as required for
130 | reasonable and customary use in describing the origin of the Work and
131 | reproducing the content of the NOTICE file.
132 |
133 | 7. Disclaimer of Warranty.
134 |
135 | Unless required by applicable law or agreed to in writing, Licensor provides the
136 | Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
137 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
138 | including, without limitation, any warranties or conditions of TITLE,
139 | NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
140 | solely responsible for determining the appropriateness of using or
141 | redistributing the Work and assume any risks associated with Your exercise of
142 | permissions under this License.
143 |
144 | 8. Limitation of Liability.
145 |
146 | In no event and under no legal theory, whether in tort (including negligence),
147 | contract, or otherwise, unless required by applicable law (such as deliberate
148 | and grossly negligent acts) or agreed to in writing, shall any Contributor be
149 | liable to You for damages, including any direct, indirect, special, incidental,
150 | or consequential damages of any character arising as a result of this License or
151 | out of the use or inability to use the Work (including but not limited to
152 | damages for loss of goodwill, work stoppage, computer failure or malfunction, or
153 | any and all other commercial damages or losses), even if such Contributor has
154 | been advised of the possibility of such damages.
155 |
156 | 9. Accepting Warranty or Additional Liability.
157 |
158 | While redistributing the Work or Derivative Works thereof, You may choose to
159 | offer, and charge a fee for, acceptance of support, warranty, indemnity, or
160 | other liability obligations and/or rights consistent with this License. However,
161 | in accepting such obligations, You may act only on Your own behalf and on Your
162 | sole responsibility, not on behalf of any other Contributor, and only if You
163 | agree to indemnify, defend, and hold each Contributor harmless for any liability
164 | incurred by, or claims asserted against, such Contributor by reason of your
165 | accepting any such warranty or additional liability.
166 |
167 | END OF TERMS AND CONDITIONS
168 |
169 | APPENDIX: How to apply the Apache License to your work
170 |
171 | To apply the Apache License to your work, attach the following boilerplate
172 | notice, with the fields enclosed by brackets "[]" replaced with your own
173 | identifying information. (Don't include the brackets!) The text should be
174 | enclosed in the appropriate comment syntax for the file format. We also
175 | recommend that a file or class name and description of purpose be included on
176 | the same "printed page" as the copyright notice for easier identification within
177 | third-party archives.
178 |
179 | Copyright [yyyy] [name of copyright owner]
180 |
181 | Licensed under the Apache License, Version 2.0 (the "License");
182 | you may not use this file except in compliance with the License.
183 | You may obtain a copy of the License at
184 |
185 | http://www.apache.org/licenses/LICENSE-2.0
186 |
187 | Unless required by applicable law or agreed to in writing, software
188 | distributed under the License is distributed on an "AS IS" BASIS,
189 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
190 | See the License for the specific language governing permissions and
191 | limitations under the License.
--------------------------------------------------------------------------------
/CastHelloVideo-ios.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 331A1D123495687A9BDB50F4 /* Pods_CastHelloVideo_objc.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 401AE826BC816237290D956A /* Pods_CastHelloVideo_objc.framework */; };
11 | 399DC0BD95302C25D77FBE32 /* Pods_CastHelloVideo_swift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB8B3194CD2E2DFF5C328CB3 /* Pods_CastHelloVideo_swift.framework */; };
12 | 98D7681E2559FD6C00357555 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D5E7C77E219607060029EC49 /* Main.storyboard */; };
13 | CC34F3D41885E326007E3FFC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC34F3D31885E326007E3FFC /* Foundation.framework */; };
14 | CC34F3D61885E326007E3FFC /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC34F3D51885E326007E3FFC /* CoreGraphics.framework */; };
15 | CC34F3D81885E326007E3FFC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC34F3D71885E326007E3FFC /* UIKit.framework */; };
16 | CCE5BD5019709A1100016BAB /* MediaAccessibility.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CCE5BD4F19709A1100016BAB /* MediaAccessibility.framework */; };
17 | CCE5BD5219709A1700016BAB /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CCE5BD5119709A1700016BAB /* CoreText.framework */; };
18 | D5E7C77A219606EA0029EC49 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5E7C776219606EA0029EC49 /* ViewController.swift */; };
19 | D5E7C77B219606EA0029EC49 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5E7C777219606EA0029EC49 /* AppDelegate.swift */; };
20 | D5E7C787219607060029EC49 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D5E7C77E219607060029EC49 /* Main.storyboard */; };
21 | D5E7C789219607060029EC49 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D5E7C77F219607060029EC49 /* LaunchScreen.storyboard */; };
22 | D5E7C78A219607060029EC49 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D5E7C77F219607060029EC49 /* LaunchScreen.storyboard */; };
23 | D5E7C797219607060029EC49 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D5E7C786219607060029EC49 /* Images.xcassets */; };
24 | D5E7C798219607060029EC49 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D5E7C786219607060029EC49 /* Images.xcassets */; };
25 | D5E7C7A121960C8A0029EC49 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D5E7C79D21960C8A0029EC49 /* ViewController.m */; };
26 | D5E7C7A221960C8A0029EC49 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D5E7C79E21960C8A0029EC49 /* main.m */; };
27 | D5E7C7A321960C8A0029EC49 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D5E7C79F21960C8A0029EC49 /* AppDelegate.m */; };
28 | EAD0BBE91B59A3B1003F158E /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF87401819CCA53700B7FBA3 /* SystemConfiguration.framework */; };
29 | EAD0BBEB1B59A3B1003F158E /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CCE5BD5119709A1700016BAB /* CoreText.framework */; };
30 | EAD0BBEC1B59A3B1003F158E /* MediaAccessibility.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CCE5BD4F19709A1100016BAB /* MediaAccessibility.framework */; };
31 | EAD0BBED1B59A3B1003F158E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC34F3D51885E326007E3FFC /* CoreGraphics.framework */; };
32 | EAD0BBEE1B59A3B1003F158E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC34F3D71885E326007E3FFC /* UIKit.framework */; };
33 | EAD0BBEF1B59A3B1003F158E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC34F3D31885E326007E3FFC /* Foundation.framework */; };
34 | EF87401919CCA53700B7FBA3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF87401819CCA53700B7FBA3 /* SystemConfiguration.framework */; };
35 | /* End PBXBuildFile section */
36 |
37 | /* Begin PBXFileReference section */
38 | 401AE826BC816237290D956A /* Pods_CastHelloVideo_objc.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CastHelloVideo_objc.framework; sourceTree = BUILT_PRODUCTS_DIR; };
39 | 8CDDB13A59137C3FE06C6A90 /* Pods-CastHelloVideo-objc.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CastHelloVideo-objc.release.xcconfig"; path = "Pods/Target Support Files/Pods-CastHelloVideo-objc/Pods-CastHelloVideo-objc.release.xcconfig"; sourceTree = ""; };
40 | 9132B46F858601CDEF33916F /* Pods-CastHelloVideo-objc.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CastHelloVideo-objc.debug.xcconfig"; path = "Pods/Target Support Files/Pods-CastHelloVideo-objc/Pods-CastHelloVideo-objc.debug.xcconfig"; sourceTree = ""; };
41 | 93776775CF54B09707687FE3 /* Pods-CastHelloVideo-swift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CastHelloVideo-swift.release.xcconfig"; path = "Pods/Target Support Files/Pods-CastHelloVideo-swift/Pods-CastHelloVideo-swift.release.xcconfig"; sourceTree = ""; };
42 | CC07763F1890823E00577499 /* GoogleCast.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleCast.framework; path = ../GoogleCast.framework; sourceTree = ""; };
43 | CC34F3D01885E326007E3FFC /* CastHelloVideo-objc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "CastHelloVideo-objc.app"; sourceTree = BUILT_PRODUCTS_DIR; };
44 | CC34F3D31885E326007E3FFC /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
45 | CC34F3D51885E326007E3FFC /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
46 | CC34F3D71885E326007E3FFC /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
47 | CC34F3F51885E326007E3FFC /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
48 | CCE5BD4F19709A1100016BAB /* MediaAccessibility.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaAccessibility.framework; path = System/Library/Frameworks/MediaAccessibility.framework; sourceTree = SDKROOT; };
49 | CCE5BD5119709A1700016BAB /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
50 | CE8955776624C25B56DA0377 /* Pods-CastHelloVideo-swift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CastHelloVideo-swift.debug.xcconfig"; path = "Pods/Target Support Files/Pods-CastHelloVideo-swift/Pods-CastHelloVideo-swift.debug.xcconfig"; sourceTree = ""; };
51 | D5E7C764219606C20029EC49 /* InfoPlist.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = InfoPlist.strings; sourceTree = ""; };
52 | D5E7C76E219606DD0029EC49 /* CastHelloVideo-objc.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = "CastHelloVideo-objc.entitlements"; sourceTree = ""; };
53 | D5E7C776219606EA0029EC49 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
54 | D5E7C777219606EA0029EC49 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
55 | D5E7C779219606EA0029EC49 /* CastHelloVideo-swift.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = "CastHelloVideo-swift.entitlements"; sourceTree = ""; };
56 | D5E7C77E219607060029EC49 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; };
57 | D5E7C77F219607060029EC49 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; };
58 | D5E7C786219607060029EC49 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
59 | D5E7C7992196082C0029EC49 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
60 | D5E7C79C21960C8A0029EC49 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
61 | D5E7C79D21960C8A0029EC49 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; };
62 | D5E7C79E21960C8A0029EC49 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
63 | D5E7C79F21960C8A0029EC49 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
64 | D5E7C7A021960C8A0029EC49 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; };
65 | EAD0BBF41B59A3B1003F158E /* CastHelloVideo-swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "CastHelloVideo-swift.app"; sourceTree = BUILT_PRODUCTS_DIR; };
66 | EF87401819CCA53700B7FBA3 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
67 | FB8B3194CD2E2DFF5C328CB3 /* Pods_CastHelloVideo_swift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CastHelloVideo_swift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
68 | /* End PBXFileReference section */
69 |
70 | /* Begin PBXFrameworksBuildPhase section */
71 | CC34F3CD1885E326007E3FFC /* Frameworks */ = {
72 | isa = PBXFrameworksBuildPhase;
73 | buildActionMask = 2147483647;
74 | files = (
75 | EF87401919CCA53700B7FBA3 /* SystemConfiguration.framework in Frameworks */,
76 | CCE5BD5219709A1700016BAB /* CoreText.framework in Frameworks */,
77 | CCE5BD5019709A1100016BAB /* MediaAccessibility.framework in Frameworks */,
78 | CC34F3D61885E326007E3FFC /* CoreGraphics.framework in Frameworks */,
79 | CC34F3D81885E326007E3FFC /* UIKit.framework in Frameworks */,
80 | CC34F3D41885E326007E3FFC /* Foundation.framework in Frameworks */,
81 | 331A1D123495687A9BDB50F4 /* Pods_CastHelloVideo_objc.framework in Frameworks */,
82 | );
83 | runOnlyForDeploymentPostprocessing = 0;
84 | };
85 | EAD0BBE81B59A3B1003F158E /* Frameworks */ = {
86 | isa = PBXFrameworksBuildPhase;
87 | buildActionMask = 2147483647;
88 | files = (
89 | EAD0BBE91B59A3B1003F158E /* SystemConfiguration.framework in Frameworks */,
90 | EAD0BBEB1B59A3B1003F158E /* CoreText.framework in Frameworks */,
91 | EAD0BBEC1B59A3B1003F158E /* MediaAccessibility.framework in Frameworks */,
92 | EAD0BBED1B59A3B1003F158E /* CoreGraphics.framework in Frameworks */,
93 | EAD0BBEE1B59A3B1003F158E /* UIKit.framework in Frameworks */,
94 | EAD0BBEF1B59A3B1003F158E /* Foundation.framework in Frameworks */,
95 | 399DC0BD95302C25D77FBE32 /* Pods_CastHelloVideo_swift.framework in Frameworks */,
96 | );
97 | runOnlyForDeploymentPostprocessing = 0;
98 | };
99 | /* End PBXFrameworksBuildPhase section */
100 |
101 | /* Begin PBXGroup section */
102 | CC34F3C71885E326007E3FFC = {
103 | isa = PBXGroup;
104 | children = (
105 | D5E7C774219606EA0029EC49 /* CastHelloVideo-swift */,
106 | D5E7C765219606DD0029EC49 /* CastHelloVideo-objc */,
107 | D5E7C77D219607060029EC49 /* Resources */,
108 | D5E7C763219606C20029EC49 /* Supporting Files */,
109 | CC34F3D21885E326007E3FFC /* Frameworks */,
110 | CC34F3D11885E326007E3FFC /* Products */,
111 | F6F888D9D04FDC14C78033B9 /* Pods */,
112 | );
113 | sourceTree = "";
114 | };
115 | CC34F3D11885E326007E3FFC /* Products */ = {
116 | isa = PBXGroup;
117 | children = (
118 | CC34F3D01885E326007E3FFC /* CastHelloVideo-objc.app */,
119 | EAD0BBF41B59A3B1003F158E /* CastHelloVideo-swift.app */,
120 | );
121 | name = Products;
122 | sourceTree = "";
123 | };
124 | CC34F3D21885E326007E3FFC /* Frameworks */ = {
125 | isa = PBXGroup;
126 | children = (
127 | EF87401819CCA53700B7FBA3 /* SystemConfiguration.framework */,
128 | CCE5BD5119709A1700016BAB /* CoreText.framework */,
129 | CCE5BD4F19709A1100016BAB /* MediaAccessibility.framework */,
130 | CC07763F1890823E00577499 /* GoogleCast.framework */,
131 | CC34F3D31885E326007E3FFC /* Foundation.framework */,
132 | CC34F3D51885E326007E3FFC /* CoreGraphics.framework */,
133 | CC34F3D71885E326007E3FFC /* UIKit.framework */,
134 | CC34F3F51885E326007E3FFC /* XCTest.framework */,
135 | FB8B3194CD2E2DFF5C328CB3 /* Pods_CastHelloVideo_swift.framework */,
136 | 401AE826BC816237290D956A /* Pods_CastHelloVideo_objc.framework */,
137 | );
138 | name = Frameworks;
139 | sourceTree = "";
140 | };
141 | D5E7C763219606C20029EC49 /* Supporting Files */ = {
142 | isa = PBXGroup;
143 | children = (
144 | D5E7C7992196082C0029EC49 /* Info.plist */,
145 | D5E7C764219606C20029EC49 /* InfoPlist.strings */,
146 | );
147 | path = "Supporting Files";
148 | sourceTree = "";
149 | };
150 | D5E7C765219606DD0029EC49 /* CastHelloVideo-objc */ = {
151 | isa = PBXGroup;
152 | children = (
153 | D5E7C79B21960C8A0029EC49 /* Classes */,
154 | D5E7C76E219606DD0029EC49 /* CastHelloVideo-objc.entitlements */,
155 | );
156 | path = "CastHelloVideo-objc";
157 | sourceTree = "";
158 | };
159 | D5E7C774219606EA0029EC49 /* CastHelloVideo-swift */ = {
160 | isa = PBXGroup;
161 | children = (
162 | D5E7C775219606EA0029EC49 /* Classes */,
163 | D5E7C779219606EA0029EC49 /* CastHelloVideo-swift.entitlements */,
164 | );
165 | path = "CastHelloVideo-swift";
166 | sourceTree = "";
167 | };
168 | D5E7C775219606EA0029EC49 /* Classes */ = {
169 | isa = PBXGroup;
170 | children = (
171 | D5E7C777219606EA0029EC49 /* AppDelegate.swift */,
172 | D5E7C776219606EA0029EC49 /* ViewController.swift */,
173 | );
174 | path = Classes;
175 | sourceTree = "";
176 | };
177 | D5E7C77D219607060029EC49 /* Resources */ = {
178 | isa = PBXGroup;
179 | children = (
180 | D5E7C77E219607060029EC49 /* Main.storyboard */,
181 | D5E7C77F219607060029EC49 /* LaunchScreen.storyboard */,
182 | D5E7C786219607060029EC49 /* Images.xcassets */,
183 | );
184 | path = Resources;
185 | sourceTree = "";
186 | };
187 | D5E7C79B21960C8A0029EC49 /* Classes */ = {
188 | isa = PBXGroup;
189 | children = (
190 | D5E7C79E21960C8A0029EC49 /* main.m */,
191 | D5E7C79C21960C8A0029EC49 /* AppDelegate.h */,
192 | D5E7C79F21960C8A0029EC49 /* AppDelegate.m */,
193 | D5E7C7A021960C8A0029EC49 /* ViewController.h */,
194 | D5E7C79D21960C8A0029EC49 /* ViewController.m */,
195 | );
196 | path = Classes;
197 | sourceTree = "";
198 | };
199 | F6F888D9D04FDC14C78033B9 /* Pods */ = {
200 | isa = PBXGroup;
201 | children = (
202 | 9132B46F858601CDEF33916F /* Pods-CastHelloVideo-objc.debug.xcconfig */,
203 | 8CDDB13A59137C3FE06C6A90 /* Pods-CastHelloVideo-objc.release.xcconfig */,
204 | CE8955776624C25B56DA0377 /* Pods-CastHelloVideo-swift.debug.xcconfig */,
205 | 93776775CF54B09707687FE3 /* Pods-CastHelloVideo-swift.release.xcconfig */,
206 | );
207 | name = Pods;
208 | sourceTree = "";
209 | };
210 | /* End PBXGroup section */
211 |
212 | /* Begin PBXNativeTarget section */
213 | CC34F3CF1885E326007E3FFC /* CastHelloVideo-objc */ = {
214 | isa = PBXNativeTarget;
215 | buildConfigurationList = CC34F4051885E327007E3FFC /* Build configuration list for PBXNativeTarget "CastHelloVideo-objc" */;
216 | buildPhases = (
217 | 113664896F707A860498C273 /* [CP] Check Pods Manifest.lock */,
218 | CC34F3CC1885E326007E3FFC /* Sources */,
219 | CC34F3CD1885E326007E3FFC /* Frameworks */,
220 | CC34F3CE1885E326007E3FFC /* Resources */,
221 | 49674DA85E6FD26AC84DD8D9 /* [CP] Copy Pods Resources */,
222 | 34DC2D5935329A88DF3E99F0 /* [CP] Embed Pods Frameworks */,
223 | );
224 | buildRules = (
225 | );
226 | dependencies = (
227 | );
228 | name = "CastHelloVideo-objc";
229 | productName = "CastHelloVideo-objc";
230 | productReference = CC34F3D01885E326007E3FFC /* CastHelloVideo-objc.app */;
231 | productType = "com.apple.product-type.application";
232 | };
233 | EAD0BBE61B59A3B1003F158E /* CastHelloVideo-swift */ = {
234 | isa = PBXNativeTarget;
235 | buildConfigurationList = EAD0BBF11B59A3B1003F158E /* Build configuration list for PBXNativeTarget "CastHelloVideo-swift" */;
236 | buildPhases = (
237 | 03CC6B4D0E39E8EC99527A35 /* [CP] Check Pods Manifest.lock */,
238 | EAD0BBE71B59A3B1003F158E /* Sources */,
239 | EAD0BBE81B59A3B1003F158E /* Frameworks */,
240 | EAD0BBF01B59A3B1003F158E /* Resources */,
241 | 0A57FAECC193DD6DD524FDF5 /* [CP] Copy Pods Resources */,
242 | 8C7A260A6BF518D170246A36 /* [CP] Embed Pods Frameworks */,
243 | );
244 | buildRules = (
245 | );
246 | dependencies = (
247 | );
248 | name = "CastHelloVideo-swift";
249 | productName = "CastHelloVideo-swift";
250 | productReference = EAD0BBF41B59A3B1003F158E /* CastHelloVideo-swift.app */;
251 | productType = "com.apple.product-type.application";
252 | };
253 | /* End PBXNativeTarget section */
254 |
255 | /* Begin PBXProject section */
256 | CC34F3C81885E326007E3FFC /* Project object */ = {
257 | isa = PBXProject;
258 | attributes = {
259 | CLASSPREFIX = "";
260 | LastSwiftUpdateCheck = 0700;
261 | LastUpgradeCheck = 1300;
262 | ORGANIZATIONNAME = Google;
263 | TargetAttributes = {
264 | CC34F3CF1885E326007E3FFC = {
265 | ProvisioningStyle = Manual;
266 | SystemCapabilities = {
267 | com.apple.AccessWiFi = {
268 | enabled = 1;
269 | };
270 | };
271 | };
272 | EAD0BBE61B59A3B1003F158E = {
273 | LastSwiftMigration = 1200;
274 | ProvisioningStyle = Manual;
275 | SystemCapabilities = {
276 | com.apple.AccessWiFi = {
277 | enabled = 1;
278 | };
279 | };
280 | };
281 | };
282 | };
283 | buildConfigurationList = CC34F3CB1885E326007E3FFC /* Build configuration list for PBXProject "CastHelloVideo-ios" */;
284 | compatibilityVersion = "Xcode 3.2";
285 | developmentRegion = en;
286 | hasScannedForEncodings = 0;
287 | knownRegions = (
288 | en,
289 | Base,
290 | );
291 | mainGroup = CC34F3C71885E326007E3FFC;
292 | productRefGroup = CC34F3D11885E326007E3FFC /* Products */;
293 | projectDirPath = "";
294 | projectRoot = "";
295 | targets = (
296 | CC34F3CF1885E326007E3FFC /* CastHelloVideo-objc */,
297 | EAD0BBE61B59A3B1003F158E /* CastHelloVideo-swift */,
298 | );
299 | };
300 | /* End PBXProject section */
301 |
302 | /* Begin PBXResourcesBuildPhase section */
303 | CC34F3CE1885E326007E3FFC /* Resources */ = {
304 | isa = PBXResourcesBuildPhase;
305 | buildActionMask = 2147483647;
306 | files = (
307 | D5E7C797219607060029EC49 /* Images.xcassets in Resources */,
308 | D5E7C789219607060029EC49 /* LaunchScreen.storyboard in Resources */,
309 | D5E7C787219607060029EC49 /* Main.storyboard in Resources */,
310 | );
311 | runOnlyForDeploymentPostprocessing = 0;
312 | };
313 | EAD0BBF01B59A3B1003F158E /* Resources */ = {
314 | isa = PBXResourcesBuildPhase;
315 | buildActionMask = 2147483647;
316 | files = (
317 | 98D7681E2559FD6C00357555 /* Main.storyboard in Resources */,
318 | D5E7C798219607060029EC49 /* Images.xcassets in Resources */,
319 | D5E7C78A219607060029EC49 /* LaunchScreen.storyboard in Resources */,
320 | );
321 | runOnlyForDeploymentPostprocessing = 0;
322 | };
323 | /* End PBXResourcesBuildPhase section */
324 |
325 | /* Begin PBXShellScriptBuildPhase section */
326 | 03CC6B4D0E39E8EC99527A35 /* [CP] Check Pods Manifest.lock */ = {
327 | isa = PBXShellScriptBuildPhase;
328 | buildActionMask = 2147483647;
329 | files = (
330 | );
331 | inputPaths = (
332 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
333 | "${PODS_ROOT}/Manifest.lock",
334 | );
335 | name = "[CP] Check Pods Manifest.lock";
336 | outputPaths = (
337 | "$(DERIVED_FILE_DIR)/Pods-CastHelloVideo-swift-checkManifestLockResult.txt",
338 | );
339 | runOnlyForDeploymentPostprocessing = 0;
340 | shellPath = /bin/sh;
341 | 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";
342 | showEnvVarsInLog = 0;
343 | };
344 | 0A57FAECC193DD6DD524FDF5 /* [CP] Copy Pods Resources */ = {
345 | isa = PBXShellScriptBuildPhase;
346 | buildActionMask = 2147483647;
347 | files = (
348 | );
349 | inputPaths = (
350 | "${PODS_ROOT}/Target Support Files/Pods-CastHelloVideo-swift/Pods-CastHelloVideo-swift-resources.sh",
351 | "${PODS_ROOT}/google-cast-sdk/GoogleCastSDK-ios-4.7.0_static/GoogleCast.framework/GoogleCastCoreResources.bundle",
352 | "${PODS_ROOT}/google-cast-sdk/GoogleCastSDK-ios-4.7.0_static/GoogleCast.framework/GoogleCastUIResources.bundle",
353 | );
354 | name = "[CP] Copy Pods Resources";
355 | outputPaths = (
356 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleCastCoreResources.bundle",
357 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleCastUIResources.bundle",
358 | );
359 | runOnlyForDeploymentPostprocessing = 0;
360 | shellPath = /bin/sh;
361 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-CastHelloVideo-swift/Pods-CastHelloVideo-swift-resources.sh\"\n";
362 | showEnvVarsInLog = 0;
363 | };
364 | 113664896F707A860498C273 /* [CP] Check Pods Manifest.lock */ = {
365 | isa = PBXShellScriptBuildPhase;
366 | buildActionMask = 2147483647;
367 | files = (
368 | );
369 | inputPaths = (
370 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
371 | "${PODS_ROOT}/Manifest.lock",
372 | );
373 | name = "[CP] Check Pods Manifest.lock";
374 | outputPaths = (
375 | "$(DERIVED_FILE_DIR)/Pods-CastHelloVideo-objc-checkManifestLockResult.txt",
376 | );
377 | runOnlyForDeploymentPostprocessing = 0;
378 | shellPath = /bin/sh;
379 | 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";
380 | showEnvVarsInLog = 0;
381 | };
382 | 34DC2D5935329A88DF3E99F0 /* [CP] Embed Pods Frameworks */ = {
383 | isa = PBXShellScriptBuildPhase;
384 | buildActionMask = 2147483647;
385 | files = (
386 | );
387 | inputPaths = (
388 | "${PODS_ROOT}/Target Support Files/Pods-CastHelloVideo-objc/Pods-CastHelloVideo-objc-frameworks.sh",
389 | "${BUILT_PRODUCTS_DIR}/Protobuf/Protobuf.framework",
390 | );
391 | name = "[CP] Embed Pods Frameworks";
392 | outputPaths = (
393 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Protobuf.framework",
394 | );
395 | runOnlyForDeploymentPostprocessing = 0;
396 | shellPath = /bin/sh;
397 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-CastHelloVideo-objc/Pods-CastHelloVideo-objc-frameworks.sh\"\n";
398 | showEnvVarsInLog = 0;
399 | };
400 | 49674DA85E6FD26AC84DD8D9 /* [CP] Copy Pods Resources */ = {
401 | isa = PBXShellScriptBuildPhase;
402 | buildActionMask = 2147483647;
403 | files = (
404 | );
405 | inputPaths = (
406 | "${PODS_ROOT}/Target Support Files/Pods-CastHelloVideo-objc/Pods-CastHelloVideo-objc-resources.sh",
407 | "${PODS_ROOT}/google-cast-sdk/GoogleCastSDK-ios-4.7.0_static/GoogleCast.framework/GoogleCastCoreResources.bundle",
408 | "${PODS_ROOT}/google-cast-sdk/GoogleCastSDK-ios-4.7.0_static/GoogleCast.framework/GoogleCastUIResources.bundle",
409 | );
410 | name = "[CP] Copy Pods Resources";
411 | outputPaths = (
412 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleCastCoreResources.bundle",
413 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleCastUIResources.bundle",
414 | );
415 | runOnlyForDeploymentPostprocessing = 0;
416 | shellPath = /bin/sh;
417 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-CastHelloVideo-objc/Pods-CastHelloVideo-objc-resources.sh\"\n";
418 | showEnvVarsInLog = 0;
419 | };
420 | 8C7A260A6BF518D170246A36 /* [CP] Embed Pods Frameworks */ = {
421 | isa = PBXShellScriptBuildPhase;
422 | buildActionMask = 2147483647;
423 | files = (
424 | );
425 | inputPaths = (
426 | "${PODS_ROOT}/Target Support Files/Pods-CastHelloVideo-swift/Pods-CastHelloVideo-swift-frameworks.sh",
427 | "${BUILT_PRODUCTS_DIR}/Protobuf/Protobuf.framework",
428 | );
429 | name = "[CP] Embed Pods Frameworks";
430 | outputPaths = (
431 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Protobuf.framework",
432 | );
433 | runOnlyForDeploymentPostprocessing = 0;
434 | shellPath = /bin/sh;
435 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-CastHelloVideo-swift/Pods-CastHelloVideo-swift-frameworks.sh\"\n";
436 | showEnvVarsInLog = 0;
437 | };
438 | /* End PBXShellScriptBuildPhase section */
439 |
440 | /* Begin PBXSourcesBuildPhase section */
441 | CC34F3CC1885E326007E3FFC /* Sources */ = {
442 | isa = PBXSourcesBuildPhase;
443 | buildActionMask = 2147483647;
444 | files = (
445 | D5E7C7A221960C8A0029EC49 /* main.m in Sources */,
446 | D5E7C7A121960C8A0029EC49 /* ViewController.m in Sources */,
447 | D5E7C7A321960C8A0029EC49 /* AppDelegate.m in Sources */,
448 | );
449 | runOnlyForDeploymentPostprocessing = 0;
450 | };
451 | EAD0BBE71B59A3B1003F158E /* Sources */ = {
452 | isa = PBXSourcesBuildPhase;
453 | buildActionMask = 2147483647;
454 | files = (
455 | D5E7C77B219606EA0029EC49 /* AppDelegate.swift in Sources */,
456 | D5E7C77A219606EA0029EC49 /* ViewController.swift in Sources */,
457 | );
458 | runOnlyForDeploymentPostprocessing = 0;
459 | };
460 | /* End PBXSourcesBuildPhase section */
461 |
462 | /* Begin XCBuildConfiguration section */
463 | CC34F4031885E327007E3FFC /* Debug */ = {
464 | isa = XCBuildConfiguration;
465 | buildSettings = {
466 | ALWAYS_SEARCH_USER_PATHS = NO;
467 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
468 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
469 | CLANG_CXX_LIBRARY = "libc++";
470 | CLANG_ENABLE_MODULES = YES;
471 | CLANG_ENABLE_OBJC_ARC = YES;
472 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
473 | CLANG_WARN_BOOL_CONVERSION = YES;
474 | CLANG_WARN_COMMA = YES;
475 | CLANG_WARN_CONSTANT_CONVERSION = YES;
476 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
477 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
478 | CLANG_WARN_EMPTY_BODY = YES;
479 | CLANG_WARN_ENUM_CONVERSION = YES;
480 | CLANG_WARN_INFINITE_RECURSION = YES;
481 | CLANG_WARN_INT_CONVERSION = YES;
482 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
483 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
484 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
485 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
486 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
487 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
488 | CLANG_WARN_STRICT_PROTOTYPES = YES;
489 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
490 | CLANG_WARN_UNREACHABLE_CODE = YES;
491 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
492 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
493 | COPY_PHASE_STRIP = NO;
494 | ENABLE_STRICT_OBJC_MSGSEND = YES;
495 | ENABLE_TESTABILITY = YES;
496 | GCC_C_LANGUAGE_STANDARD = gnu99;
497 | GCC_DYNAMIC_NO_PIC = NO;
498 | GCC_NO_COMMON_BLOCKS = YES;
499 | GCC_OPTIMIZATION_LEVEL = 0;
500 | GCC_PREPROCESSOR_DEFINITIONS = (
501 | "DEBUG=1",
502 | "$(inherited)",
503 | );
504 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
505 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
506 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
507 | GCC_WARN_UNDECLARED_SELECTOR = YES;
508 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
509 | GCC_WARN_UNUSED_FUNCTION = YES;
510 | GCC_WARN_UNUSED_VARIABLE = YES;
511 | IPHONEOS_DEPLOYMENT_TARGET = 12.0;
512 | ONLY_ACTIVE_ARCH = YES;
513 | SDKROOT = iphoneos;
514 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
515 | TARGETED_DEVICE_FAMILY = "1,2";
516 | };
517 | name = Debug;
518 | };
519 | CC34F4041885E327007E3FFC /* Release */ = {
520 | isa = XCBuildConfiguration;
521 | buildSettings = {
522 | ALWAYS_SEARCH_USER_PATHS = NO;
523 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
524 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
525 | CLANG_CXX_LIBRARY = "libc++";
526 | CLANG_ENABLE_MODULES = YES;
527 | CLANG_ENABLE_OBJC_ARC = YES;
528 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
529 | CLANG_WARN_BOOL_CONVERSION = YES;
530 | CLANG_WARN_COMMA = YES;
531 | CLANG_WARN_CONSTANT_CONVERSION = YES;
532 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
533 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
534 | CLANG_WARN_EMPTY_BODY = YES;
535 | CLANG_WARN_ENUM_CONVERSION = YES;
536 | CLANG_WARN_INFINITE_RECURSION = YES;
537 | CLANG_WARN_INT_CONVERSION = YES;
538 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
539 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
540 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
541 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
542 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
543 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
544 | CLANG_WARN_STRICT_PROTOTYPES = YES;
545 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
546 | CLANG_WARN_UNREACHABLE_CODE = YES;
547 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
548 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
549 | COPY_PHASE_STRIP = YES;
550 | ENABLE_NS_ASSERTIONS = NO;
551 | ENABLE_STRICT_OBJC_MSGSEND = YES;
552 | GCC_C_LANGUAGE_STANDARD = gnu99;
553 | GCC_NO_COMMON_BLOCKS = YES;
554 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
555 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
556 | GCC_WARN_UNDECLARED_SELECTOR = YES;
557 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
558 | GCC_WARN_UNUSED_FUNCTION = YES;
559 | GCC_WARN_UNUSED_VARIABLE = YES;
560 | IPHONEOS_DEPLOYMENT_TARGET = 12.0;
561 | SDKROOT = iphoneos;
562 | SWIFT_COMPILATION_MODE = wholemodule;
563 | TARGETED_DEVICE_FAMILY = "1,2";
564 | VALIDATE_PRODUCT = YES;
565 | };
566 | name = Release;
567 | };
568 | CC34F4061885E327007E3FFC /* Debug */ = {
569 | isa = XCBuildConfiguration;
570 | baseConfigurationReference = 9132B46F858601CDEF33916F /* Pods-CastHelloVideo-objc.debug.xcconfig */;
571 | buildSettings = {
572 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
573 | CODE_SIGN_ENTITLEMENTS = "CastHelloVideo-objc/CastHelloVideo-objc.entitlements";
574 | CODE_SIGN_STYLE = Manual;
575 | ENABLE_BITCODE = YES;
576 | FRAMEWORK_SEARCH_PATHS = (
577 | "$(inherited)",
578 | .,
579 | ..,
580 | "$(PROJECT_DIR)",
581 | );
582 | GCC_NO_COMMON_BLOCKS = YES;
583 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
584 | GCC_PREFIX_HEADER = "";
585 | HEADER_SEARCH_PATHS = "$(inherited)";
586 | INFOPLIST_FILE = "$(SRCROOT)/Supporting Files/Info.plist";
587 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) '@executable_path/Frameworks'";
588 | OTHER_LDFLAGS = "$(inherited)";
589 | PRODUCT_BUNDLE_IDENTIFIER = com.google.GoogleCast.CastHelloVideos.dev;
590 | PRODUCT_NAME = "$(TARGET_NAME)";
591 | PROVISIONING_PROFILE_SPECIFIER = "Google Cast Cast Hello Videos Dev";
592 | WRAPPER_EXTENSION = app;
593 | };
594 | name = Debug;
595 | };
596 | CC34F4071885E327007E3FFC /* Release */ = {
597 | isa = XCBuildConfiguration;
598 | baseConfigurationReference = 8CDDB13A59137C3FE06C6A90 /* Pods-CastHelloVideo-objc.release.xcconfig */;
599 | buildSettings = {
600 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
601 | CODE_SIGN_ENTITLEMENTS = "CastHelloVideo-objc/CastHelloVideo-objc.entitlements";
602 | CODE_SIGN_STYLE = Manual;
603 | ENABLE_BITCODE = YES;
604 | FRAMEWORK_SEARCH_PATHS = (
605 | "$(inherited)",
606 | .,
607 | ..,
608 | "$(PROJECT_DIR)",
609 | );
610 | GCC_NO_COMMON_BLOCKS = YES;
611 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
612 | GCC_PREFIX_HEADER = "";
613 | HEADER_SEARCH_PATHS = "$(inherited)";
614 | INFOPLIST_FILE = "$(SRCROOT)/Supporting Files/Info.plist";
615 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) '@executable_path/Frameworks'";
616 | OTHER_LDFLAGS = "$(inherited)";
617 | PRODUCT_BUNDLE_IDENTIFIER = com.google.GoogleCast.CastHelloVideos.dev;
618 | PRODUCT_NAME = "$(TARGET_NAME)";
619 | PROVISIONING_PROFILE_SPECIFIER = "Google Cast Cast Hello Videos Dev";
620 | WRAPPER_EXTENSION = app;
621 | };
622 | name = Release;
623 | };
624 | EAD0BBF21B59A3B1003F158E /* Debug */ = {
625 | isa = XCBuildConfiguration;
626 | baseConfigurationReference = CE8955776624C25B56DA0377 /* Pods-CastHelloVideo-swift.debug.xcconfig */;
627 | buildSettings = {
628 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
629 | CODE_SIGN_ENTITLEMENTS = "CastHelloVideo-swift/CastHelloVideo-swift.entitlements";
630 | CODE_SIGN_IDENTITY = "iPhone Developer";
631 | CODE_SIGN_STYLE = Manual;
632 | ENABLE_BITCODE = YES;
633 | FRAMEWORK_SEARCH_PATHS = (
634 | "$(inherited)",
635 | .,
636 | ..,
637 | "$(PROJECT_DIR)",
638 | );
639 | GCC_NO_COMMON_BLOCKS = YES;
640 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
641 | GCC_PREFIX_HEADER = "";
642 | HEADER_SEARCH_PATHS = "$(inherited)";
643 | INFOPLIST_FILE = "$(SRCROOT)/Supporting Files/Info.plist";
644 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
645 | OTHER_LDFLAGS = "$(inherited)";
646 | PRODUCT_BUNDLE_IDENTIFIER = com.google.GoogleCast.CastHelloVideos.dev;
647 | PRODUCT_NAME = "$(TARGET_NAME)";
648 | PROVISIONING_PROFILE_SPECIFIER = "Google Cast Cast Hello Videos Dev";
649 | SWIFT_OBJC_BRIDGING_HEADER = "";
650 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
651 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
652 | SWIFT_VERSION = 5.0;
653 | WRAPPER_EXTENSION = app;
654 | };
655 | name = Debug;
656 | };
657 | EAD0BBF31B59A3B1003F158E /* Release */ = {
658 | isa = XCBuildConfiguration;
659 | baseConfigurationReference = 93776775CF54B09707687FE3 /* Pods-CastHelloVideo-swift.release.xcconfig */;
660 | buildSettings = {
661 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
662 | CODE_SIGN_ENTITLEMENTS = "CastHelloVideo-swift/CastHelloVideo-swift.entitlements";
663 | CODE_SIGN_IDENTITY = "iPhone Developer";
664 | CODE_SIGN_STYLE = Manual;
665 | ENABLE_BITCODE = YES;
666 | FRAMEWORK_SEARCH_PATHS = (
667 | "$(inherited)",
668 | .,
669 | ..,
670 | "$(PROJECT_DIR)",
671 | );
672 | GCC_NO_COMMON_BLOCKS = YES;
673 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
674 | GCC_PREFIX_HEADER = "";
675 | HEADER_SEARCH_PATHS = "$(inherited)";
676 | INFOPLIST_FILE = "$(SRCROOT)/Supporting Files/Info.plist";
677 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
678 | OTHER_LDFLAGS = "$(inherited)";
679 | PRODUCT_BUNDLE_IDENTIFIER = com.google.GoogleCast.CastHelloVideos.dev;
680 | PRODUCT_NAME = "$(TARGET_NAME)";
681 | PROVISIONING_PROFILE_SPECIFIER = "Google Cast Cast Hello Videos Dev";
682 | SWIFT_OBJC_BRIDGING_HEADER = "";
683 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
684 | SWIFT_VERSION = 5.0;
685 | WRAPPER_EXTENSION = app;
686 | };
687 | name = Release;
688 | };
689 | /* End XCBuildConfiguration section */
690 |
691 | /* Begin XCConfigurationList section */
692 | CC34F3CB1885E326007E3FFC /* Build configuration list for PBXProject "CastHelloVideo-ios" */ = {
693 | isa = XCConfigurationList;
694 | buildConfigurations = (
695 | CC34F4031885E327007E3FFC /* Debug */,
696 | CC34F4041885E327007E3FFC /* Release */,
697 | );
698 | defaultConfigurationIsVisible = 0;
699 | defaultConfigurationName = Release;
700 | };
701 | CC34F4051885E327007E3FFC /* Build configuration list for PBXNativeTarget "CastHelloVideo-objc" */ = {
702 | isa = XCConfigurationList;
703 | buildConfigurations = (
704 | CC34F4061885E327007E3FFC /* Debug */,
705 | CC34F4071885E327007E3FFC /* Release */,
706 | );
707 | defaultConfigurationIsVisible = 0;
708 | defaultConfigurationName = Release;
709 | };
710 | EAD0BBF11B59A3B1003F158E /* Build configuration list for PBXNativeTarget "CastHelloVideo-swift" */ = {
711 | isa = XCConfigurationList;
712 | buildConfigurations = (
713 | EAD0BBF21B59A3B1003F158E /* Debug */,
714 | EAD0BBF31B59A3B1003F158E /* Release */,
715 | );
716 | defaultConfigurationIsVisible = 0;
717 | defaultConfigurationName = Release;
718 | };
719 | /* End XCConfigurationList section */
720 | };
721 | rootObject = CC34F3C81885E326007E3FFC /* Project object */;
722 | }
723 |
--------------------------------------------------------------------------------