├── .gitignore ├── .ruby-version ├── .swift-version ├── .travis.yml ├── Art └── IconArt.sketch ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── Podfile ├── Podfile.lock ├── README.md ├── VideoBackgroundSample ├── AppDelegate.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ └── spotify_logo.imageset │ │ ├── Contents.json │ │ ├── spotify_logo.png │ │ ├── spotify_logo@2x.png │ │ └── spotify_logo@3x.png ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Info.plist ├── ViewController.swift └── spotifyVideo.mp4 ├── VideoBackgroundSampleTests ├── Info.plist └── VideoBackgroundSampleTests.swift ├── VideoBackgroundViewController.podspec ├── VideoBackgroundViewController.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata ├── xcshareddata │ └── xcschemes │ │ └── VideoBackgroundViewController.xcscheme └── xcuserdata │ └── chris.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── VideoBackgroundViewController.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── VideoBackgroundViewController ├── Info.plist ├── VideoBackgroundViewController.h ├── VideoBackgroundViewController.swift └── VideoScalingMode.swift ├── VideoBackgroundViewControllerTests ├── Info.plist └── VideoBackgroundControllerSpec.swift └── Web ├── videoBackgroundViewController.gif └── videoBackgroundViewControllerBanner.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata 19 | 20 | ## Other 21 | *.xccheckout 22 | *.moved-aside 23 | *.xcuserstate 24 | *.xcscmblueprint 25 | 26 | ## Obj-C/Swift specific 27 | *.hmap 28 | *.ipa 29 | 30 | ## Playgrounds 31 | timeline.xctimeline 32 | playground.xcworkspace 33 | 34 | # Swift Package Manager 35 | # 36 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 37 | # Packages/ 38 | .build/ 39 | 40 | # CocoaPods 41 | # 42 | # We recommend against adding the Pods directory to your .gitignore. However 43 | # you should judge for yourself, the pros and cons are mentioned at: 44 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 45 | # 46 | Pods/ 47 | 48 | # Carthage 49 | # 50 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 51 | # Carthage/Checkouts 52 | 53 | Carthage/Build 54 | 55 | # fastlane 56 | # 57 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 58 | # screenshots whenever they are needed. 59 | # For more information about the recommended setup visit: 60 | # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md 61 | 62 | fastlane/report.xml 63 | fastlane/screenshots 64 | -------------------------------------------------------------------------------- /.ruby-version: -------------------------------------------------------------------------------- 1 | 2.5.1 2 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 4 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode7.2 3 | env: 4 | global: 5 | - LC_CTYPE=en_US.UTF-8 6 | - LANG=en_US.UTF-8 7 | before_install: 8 | - bundle update 9 | - bundle install 10 | - bundle exec pod update 11 | - bundle exec pod install 12 | script: 13 | - set -o pipefail 14 | - xcodebuild -version 15 | - xcodebuild -showsdks 16 | after_success: 17 | - bash <(curl -s https://codecov.io/bash) 18 | -------------------------------------------------------------------------------- /Art/IconArt.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PiXeL16/VideoBackgroundViewController/1876ae08fc6bb45e3359005a4da07f0381219acb/Art/IconArt.sketch -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # The Cocoa library package manager. 4 | # The Cocoa library package manager. 5 | # gem 'cocoapods --pre' 6 | gem 'cocoapods' 7 | # A CocoaPods plugin to remove and de-intergrate CocoaPods from your project . 8 | gem 'cocoapods-deintegrate' 9 | # Add Fastlane for deployment and general awesomeness 10 | gem 'fastlane' 11 | 12 | 13 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | CFPropertyList (2.3.5) 5 | activesupport (4.2.10) 6 | i18n (~> 0.7) 7 | minitest (~> 5.1) 8 | thread_safe (~> 0.3, >= 0.3.4) 9 | tzinfo (~> 1.1) 10 | addressable (2.5.2) 11 | public_suffix (>= 2.0.2, < 4.0) 12 | babosa (1.0.2) 13 | claide (1.0.2) 14 | cocoapods (1.3.1) 15 | activesupport (>= 4.0.2, < 5) 16 | claide (>= 1.0.2, < 2.0) 17 | cocoapods-core (= 1.3.1) 18 | cocoapods-deintegrate (>= 1.0.1, < 2.0) 19 | cocoapods-downloader (>= 1.1.3, < 2.0) 20 | cocoapods-plugins (>= 1.0.0, < 2.0) 21 | cocoapods-search (>= 1.0.0, < 2.0) 22 | cocoapods-stats (>= 1.0.0, < 2.0) 23 | cocoapods-trunk (>= 1.2.0, < 2.0) 24 | cocoapods-try (>= 1.1.0, < 2.0) 25 | colored2 (~> 3.1) 26 | escape (~> 0.0.4) 27 | fourflusher (~> 2.0.1) 28 | gh_inspector (~> 1.0) 29 | molinillo (~> 0.5.7) 30 | nap (~> 1.0) 31 | ruby-macho (~> 1.1) 32 | xcodeproj (>= 1.5.1, < 2.0) 33 | cocoapods-core (1.3.1) 34 | activesupport (>= 4.0.2, < 6) 35 | fuzzy_match (~> 2.0.4) 36 | nap (~> 1.0) 37 | cocoapods-deintegrate (1.0.1) 38 | cocoapods-downloader (1.1.3) 39 | cocoapods-plugins (1.0.0) 40 | nap 41 | cocoapods-search (1.0.0) 42 | cocoapods-stats (1.0.0) 43 | cocoapods-trunk (1.3.0) 44 | nap (>= 0.8, < 2.0) 45 | netrc (~> 0.11) 46 | cocoapods-try (1.1.0) 47 | colored (1.2) 48 | colored2 (3.1.2) 49 | commander-fastlane (4.4.5) 50 | highline (~> 1.7.2) 51 | concurrent-ruby (1.0.5) 52 | declarative (0.0.10) 53 | declarative-option (0.1.0) 54 | domain_name (0.5.20170404) 55 | unf (>= 0.0.5, < 1.0.0) 56 | dotenv (2.2.1) 57 | escape (0.0.4) 58 | excon (0.59.0) 59 | faraday (0.13.1) 60 | multipart-post (>= 1.2, < 3) 61 | faraday-cookie_jar (0.0.6) 62 | faraday (>= 0.7.4) 63 | http-cookie (~> 1.0.0) 64 | faraday_middleware (0.12.2) 65 | faraday (>= 0.7.4, < 1.0) 66 | fastimage (2.1.0) 67 | fastlane (2.64.1) 68 | CFPropertyList (>= 2.3, < 3.0.0) 69 | addressable (>= 2.3, < 3.0.0) 70 | babosa (>= 1.0.2, < 2.0.0) 71 | bundler (>= 1.12.0, < 2.0.0) 72 | colored 73 | commander-fastlane (>= 4.4.5, < 5.0.0) 74 | dotenv (>= 2.1.1, < 3.0.0) 75 | excon (>= 0.45.0, < 1.0.0) 76 | faraday (~> 0.9) 77 | faraday-cookie_jar (~> 0.0.6) 78 | faraday_middleware (~> 0.9) 79 | fastimage (>= 2.1.0, < 3.0.0) 80 | gh_inspector (>= 1.0.1, < 2.0.0) 81 | google-api-client (>= 0.13.1, < 0.14.0) 82 | highline (>= 1.7.2, < 2.0.0) 83 | json (< 3.0.0) 84 | mini_magick (~> 4.5.1) 85 | multi_json 86 | multi_xml (~> 0.5) 87 | multipart-post (~> 2.0.0) 88 | plist (>= 3.1.0, < 4.0.0) 89 | public_suffix (~> 2.0.0) 90 | rubyzip (>= 1.1.0, < 2.0.0) 91 | security (= 0.1.3) 92 | slack-notifier (>= 1.3, < 2.0.0) 93 | terminal-notifier (>= 1.6.2, < 2.0.0) 94 | terminal-table (>= 1.4.5, < 2.0.0) 95 | tty-screen (~> 0.5.0) 96 | word_wrap (~> 1.0.0) 97 | xcodeproj (>= 1.5.2, < 2.0.0) 98 | xcpretty (>= 0.2.4, < 1.0.0) 99 | xcpretty-travis-formatter (>= 0.0.3) 100 | fourflusher (2.0.1) 101 | fuzzy_match (2.0.4) 102 | gh_inspector (1.0.3) 103 | google-api-client (0.13.6) 104 | addressable (~> 2.5, >= 2.5.1) 105 | googleauth (~> 0.5) 106 | httpclient (>= 2.8.1, < 3.0) 107 | mime-types (~> 3.0) 108 | representable (~> 3.0) 109 | retriable (>= 2.0, < 4.0) 110 | googleauth (0.6.2) 111 | faraday (~> 0.12) 112 | jwt (>= 1.4, < 3.0) 113 | logging (~> 2.0) 114 | memoist (~> 0.12) 115 | multi_json (~> 1.11) 116 | os (~> 0.9) 117 | signet (~> 0.7) 118 | highline (1.7.8) 119 | http-cookie (1.0.3) 120 | domain_name (~> 0.5) 121 | httpclient (2.8.3) 122 | i18n (0.9.1) 123 | concurrent-ruby (~> 1.0) 124 | json (2.1.0) 125 | jwt (2.1.0) 126 | little-plugger (1.1.4) 127 | logging (2.2.2) 128 | little-plugger (~> 1.1) 129 | multi_json (~> 1.10) 130 | memoist (0.16.0) 131 | mime-types (3.1) 132 | mime-types-data (~> 3.2015) 133 | mime-types-data (3.2016.0521) 134 | mini_magick (4.5.1) 135 | minitest (5.10.3) 136 | molinillo (0.5.7) 137 | multi_json (1.12.2) 138 | multi_xml (0.6.0) 139 | multipart-post (2.0.0) 140 | nanaimo (0.2.3) 141 | nap (1.1.0) 142 | netrc (0.11.0) 143 | os (0.9.6) 144 | plist (3.3.0) 145 | public_suffix (2.0.5) 146 | representable (3.0.4) 147 | declarative (< 0.1.0) 148 | declarative-option (< 0.2.0) 149 | uber (< 0.2.0) 150 | retriable (3.1.1) 151 | rouge (2.0.7) 152 | ruby-macho (1.1.0) 153 | rubyzip (1.2.1) 154 | security (0.1.3) 155 | signet (0.8.1) 156 | addressable (~> 2.3) 157 | faraday (~> 0.9) 158 | jwt (>= 1.5, < 3.0) 159 | multi_json (~> 1.10) 160 | slack-notifier (1.5.1) 161 | terminal-notifier (1.8.0) 162 | terminal-table (1.8.0) 163 | unicode-display_width (~> 1.1, >= 1.1.1) 164 | thread_safe (0.3.6) 165 | tty-screen (0.5.1) 166 | tzinfo (1.2.4) 167 | thread_safe (~> 0.1) 168 | uber (0.1.0) 169 | unf (0.1.4) 170 | unf_ext 171 | unf_ext (0.0.7.4) 172 | unicode-display_width (1.3.0) 173 | word_wrap (1.0.0) 174 | xcodeproj (1.5.3) 175 | CFPropertyList (~> 2.3.3) 176 | claide (>= 1.0.2, < 2.0) 177 | colored2 (~> 3.1) 178 | nanaimo (~> 0.2.3) 179 | xcpretty (0.2.8) 180 | rouge (~> 2.0.7) 181 | xcpretty-travis-formatter (1.0.0) 182 | xcpretty (~> 0.2, >= 0.0.7) 183 | 184 | PLATFORMS 185 | ruby 186 | 187 | DEPENDENCIES 188 | cocoapods 189 | cocoapods-deintegrate 190 | fastlane 191 | 192 | BUNDLED WITH 193 | 1.14.6 194 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Chris Jimenez 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '9.0' 2 | use_frameworks! 3 | 4 | def test_pods 5 | pod 'Quick' 6 | pod 'Nimble' 7 | end 8 | 9 | target 'VideoBackgroundViewController' do 10 | 11 | end 12 | 13 | target 'VideoBackgroundViewControllerTests' do 14 | test_pods 15 | end 16 | 17 | target 'VideoBackgroundSample' do 18 | 19 | end 20 | 21 | target 'VideoBackgroundSampleTests' do 22 | 23 | end 24 | 25 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Nimble (7.3.1) 3 | - Quick (1.3.2) 4 | 5 | DEPENDENCIES: 6 | - Nimble 7 | - Quick 8 | 9 | SPEC CHECKSUMS: 10 | Nimble: 04f732da099ea4d153122aec8c2a88fd0c7219ae 11 | Quick: 2623cb30d7a7f41ca62f684f679586558f483d46 12 | 13 | PODFILE CHECKSUM: 574abb6050df415865226100a56a4ee998a79993 14 | 15 | COCOAPODS: 1.3.1 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Banner](/Web/videoBackgroundViewControllerBanner.png) 2 | 3 | [![Build Status](https://travis-ci.org/PiXeL16/VideoBackgroundViewController.svg?branch=master)](https://travis-ci.org/PiXeL16/VideoBackgroundViewController/) [![codecov.io](https://img.shields.io/cocoapods/v/VideoBackgroundViewController.svg)](https://img.shields.io/cocoapods/v/VideoBackgroundViewController.svg) [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/PiXeL16/VideoBackgroundViewController/master/LICENSE)![swift4](https://img.shields.io/badge/Swift-4-green.svg) 4 | 5 | # VideoBackgroundViewController 6 | A View Controller that shows a video in the background, like Spotify! 7 | 8 | ![VideoBackgroundViewControllerGif](/Web/videoBackgroundViewController.gif) 9 | 10 | :star: Features 11 | --- 12 | * Customizable video URL. 13 | * Play video with sound or not. 14 | * Customizable sound level. 15 | * Customizable video alpha channel. 16 | * Loop the video or not 17 | * Customizable video scaling mode. Resize, ResizeAspect, ResizeAspectFill(Default) 18 | * Works in portrait and landscape orientation 19 | 20 | :octocat: Installation 21 | --- 22 | Get `VideoBackgroundViewController` on CocoaPods, just add `pod 'VideoBackgroundViewController'` to your `Podfile` and then run `pod install`. 23 | 24 | 25 | :metal: Usage 26 | --- 27 | Usage is pretty easy, just inherid your ViewController from `VideoBackgroundViewController` and set your initial video URL like: 28 | ``` 29 | import VideoBackgroundViewController 30 | 31 | override func viewDidLoad() { 32 | super.viewDidLoad() 33 | 34 | let url = NSURL.fileURLWithPath(NSBundle.mainBundle().pathForResource("spotifyVideo", ofType: "mp4")!) 35 | 36 | self.videoURL = url 37 | } 38 | ``` 39 | 40 | You can also customize the default values like: 41 | 42 | ``` 43 | import VideoBackgroundViewController 44 | 45 | override func viewDidLoad() { 46 | super.viewDidLoad() 47 | 48 | let url = NSURL.fileURLWithPath(NSBundle.mainBundle().pathForResource("spotifyVideo", ofType: "mp4")!) 49 | 50 | self.videoURL = url 51 | self.videoFrame = view.frame 52 | self.videoShouldLoop = true 53 | self.alpha = 0.5 54 | self.playSound = true 55 | self.videoScalingMode = .ResizeAspectFill 56 | } 57 | ``` 58 | 59 | TODO 60 | ----- 61 | * Protocolize the f*ck out of this 62 | * Better code coverage 63 | 64 | :alien: Author 65 | ------ 66 | Chris Jimenez - http://chrisjimenez.net, [@chrisjimeneznat](http://twitter.com/chrisjimeneznat) 67 | 68 | Some ideas where taken from https://github.com/allenwong/30DaysofSwift 69 | 70 | :beer: Donate 71 | ------ 72 | If you want to buy me a beer, you can donate to my coin addresses below: 73 | #### BTC 74 | 1BeGBew4CBdLgUSmvoyiU1LrM99GpkXgkj 75 | #### ETH 76 | 0xa59a3793E3Cb5f3B1AdE6887783D225EDf67192d 77 | #### LTC 78 | Ld6FB3Tqjf6B8iz9Gn9sMr7BnowAjSUXaV 79 | 80 | ## License 81 | `VideoBackgroundViewController` is released under the MIT license. See [LICENSE](https://github.com/pixel16/VideoBackground/blob/master/LICENSE) for details. 82 | -------------------------------------------------------------------------------- /VideoBackgroundSample/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // VideoBackgroundSample 4 | // 5 | // Created by Chris Jimenez on 2/22/16. 6 | // Copyright © 2016 Chris Jimenez. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /VideoBackgroundSample/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "ipad", 35 | "size" : "29x29", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "ipad", 40 | "size" : "29x29", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "40x40", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "40x40", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "76x76", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "76x76", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "83.5x83.5", 66 | "scale" : "2x" 67 | } 68 | ], 69 | "info" : { 70 | "version" : 1, 71 | "author" : "xcode" 72 | } 73 | } -------------------------------------------------------------------------------- /VideoBackgroundSample/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /VideoBackgroundSample/Assets.xcassets/spotify_logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "spotify_logo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "spotify_logo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "spotify_logo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VideoBackgroundSample/Assets.xcassets/spotify_logo.imageset/spotify_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PiXeL16/VideoBackgroundViewController/1876ae08fc6bb45e3359005a4da07f0381219acb/VideoBackgroundSample/Assets.xcassets/spotify_logo.imageset/spotify_logo.png -------------------------------------------------------------------------------- /VideoBackgroundSample/Assets.xcassets/spotify_logo.imageset/spotify_logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PiXeL16/VideoBackgroundViewController/1876ae08fc6bb45e3359005a4da07f0381219acb/VideoBackgroundSample/Assets.xcassets/spotify_logo.imageset/spotify_logo@2x.png -------------------------------------------------------------------------------- /VideoBackgroundSample/Assets.xcassets/spotify_logo.imageset/spotify_logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PiXeL16/VideoBackgroundViewController/1876ae08fc6bb45e3359005a4da07f0381219acb/VideoBackgroundSample/Assets.xcassets/spotify_logo.imageset/spotify_logo@3x.png -------------------------------------------------------------------------------- /VideoBackgroundSample/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /VideoBackgroundSample/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 32 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /VideoBackgroundSample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 0.0.6 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /VideoBackgroundSample/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // VideoBackgroundSample 4 | // 5 | // Created by Chris Jimenez on 2/22/16. 6 | // Copyright © 2016 Chris Jimenez. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import VideoBackgroundViewController 11 | 12 | class ViewController: VideoBackgroundViewController { 13 | 14 | override func viewDidLoad() { 15 | super.viewDidLoad() 16 | setVideo() 17 | // Do any additional setup after loading the view, typically from a nib. 18 | } 19 | 20 | override func didReceiveMemoryWarning() { 21 | super.didReceiveMemoryWarning() 22 | // Dispose of any resources that can be recreated. 23 | } 24 | 25 | func setVideo() 26 | { 27 | 28 | let url = URL(fileURLWithPath: Bundle.main.path(forResource: "spotifyVideo", ofType: "mp4")!) 29 | 30 | self.videoURL = url 31 | // view.userInteractionEnabled = false 32 | 33 | } 34 | 35 | 36 | override var preferredStatusBarStyle: UIStatusBarStyle { 37 | return .lightContent 38 | } 39 | 40 | 41 | } 42 | 43 | -------------------------------------------------------------------------------- /VideoBackgroundSample/spotifyVideo.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PiXeL16/VideoBackgroundViewController/1876ae08fc6bb45e3359005a4da07f0381219acb/VideoBackgroundSample/spotifyVideo.mp4 -------------------------------------------------------------------------------- /VideoBackgroundSampleTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /VideoBackgroundSampleTests/VideoBackgroundSampleTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // VideoBackgroundSampleTests.swift 3 | // VideoBackgroundSampleTests 4 | // 5 | // Created by Chris Jimenez on 2/22/16. 6 | // Copyright © 2016 Chris Jimenez. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import VideoBackgroundSample 11 | 12 | class VideoBackgroundSampleTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | // Use XCTAssert and related functions to verify your tests produce the correct results. 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measure { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /VideoBackgroundViewController.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | 3 | s.name = "VideoBackgroundViewController" 4 | s.version = "0.0.6" 5 | s.summary = "A View Controller that shows a video in the background, like Spotify" 6 | s.description = <<-DESC 7 | A View Controller that shows a video in the background, like Spotify, written in Swift 8 | DESC 9 | 10 | s.homepage = "https://github.com/PiXeL16/VideoBackgroundViewController" 11 | s.license = { :type => "MIT", :file => "LICENSE" } 12 | 13 | s.author = { "Chris Jimenez" => "cjimenez16@gmail.com" } 14 | s.social_media_url = "http://twitter.com/chrisjimeneznat" 15 | 16 | s.platform = :ios, "9.0" 17 | 18 | s.source = { :git => "https://github.com/PiXeL16/VideoBackgroundViewController.git", :tag => s.version } 19 | s.source_files = "VideoBackgroundViewController/", "VideoBackgroundViewController/**/*.{h,m,swift}" 20 | 21 | s.requires_arc = true 22 | 23 | end 24 | -------------------------------------------------------------------------------- /VideoBackgroundViewController.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 5CC1C46734D9B619A7BDADE9 /* Pods_VideoBackgroundViewController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAF977946FE717F7E0BA46E6 /* Pods_VideoBackgroundViewController.framework */; }; 11 | 83286D7E1C7C12670083CB19 /* VideoBackgroundViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 83286D7D1C7C12670083CB19 /* VideoBackgroundViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 12 | 83286D851C7C12670083CB19 /* VideoBackgroundViewController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83286D7A1C7C12670083CB19 /* VideoBackgroundViewController.framework */; }; 13 | 83286D9B1C7C12AB0083CB19 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83286D9A1C7C12AB0083CB19 /* AppDelegate.swift */; }; 14 | 83286D9D1C7C12AB0083CB19 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83286D9C1C7C12AB0083CB19 /* ViewController.swift */; }; 15 | 83286DA01C7C12AB0083CB19 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 83286D9E1C7C12AB0083CB19 /* Main.storyboard */; }; 16 | 83286DA21C7C12AB0083CB19 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 83286DA11C7C12AB0083CB19 /* Assets.xcassets */; }; 17 | 83286DA51C7C12AB0083CB19 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 83286DA31C7C12AB0083CB19 /* LaunchScreen.storyboard */; }; 18 | 83286DB01C7C12AB0083CB19 /* VideoBackgroundSampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83286DAF1C7C12AB0083CB19 /* VideoBackgroundSampleTests.swift */; }; 19 | 83286DB91C7C18610083CB19 /* VideoBackgroundViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83286DB81C7C18610083CB19 /* VideoBackgroundViewController.swift */; }; 20 | 83286DBB1C7C1C660083CB19 /* VideoScalingMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83286DBA1C7C1C660083CB19 /* VideoScalingMode.swift */; }; 21 | 837B5EF61C7C20E7007C81EE /* VideoBackgroundControllerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 837B5EF51C7C20E7007C81EE /* VideoBackgroundControllerSpec.swift */; }; 22 | 837B5EF81C7C2D4B007C81EE /* spotifyVideo.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 837B5EF71C7C2BD6007C81EE /* spotifyVideo.mp4 */; }; 23 | 837B5EFD1C7D8AA7007C81EE /* VideoBackgroundViewController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83286D7A1C7C12670083CB19 /* VideoBackgroundViewController.framework */; }; 24 | 9B39717B80E92AC1B74CBE3E /* Pods_VideoBackgroundViewControllerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 905545B0DB0E0B8F4E532CBB /* Pods_VideoBackgroundViewControllerTests.framework */; }; 25 | B806160DF0F717F1227F09C5 /* Pods_VideoBackgroundSample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C877AE5912077C30AAA649C /* Pods_VideoBackgroundSample.framework */; }; 26 | B86C93A5B096ED00DCD432E2 /* Pods_VideoBackgroundSampleTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D83B75C36FE40E75626CCC4 /* Pods_VideoBackgroundSampleTests.framework */; }; 27 | CF3138981ED6C59B00702BC8 /* VideoBackgroundViewController.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 83286D7A1C7C12670083CB19 /* VideoBackgroundViewController.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 28 | /* End PBXBuildFile section */ 29 | 30 | /* Begin PBXContainerItemProxy section */ 31 | 83286D861C7C12670083CB19 /* PBXContainerItemProxy */ = { 32 | isa = PBXContainerItemProxy; 33 | containerPortal = 83286D711C7C12670083CB19 /* Project object */; 34 | proxyType = 1; 35 | remoteGlobalIDString = 83286D791C7C12670083CB19; 36 | remoteInfo = VideoBackgroundViewController; 37 | }; 38 | 83286DAC1C7C12AB0083CB19 /* PBXContainerItemProxy */ = { 39 | isa = PBXContainerItemProxy; 40 | containerPortal = 83286D711C7C12670083CB19 /* Project object */; 41 | proxyType = 1; 42 | remoteGlobalIDString = 83286D971C7C12AB0083CB19; 43 | remoteInfo = VideoBackgroundSample; 44 | }; 45 | CF3138991ED6C59B00702BC8 /* PBXContainerItemProxy */ = { 46 | isa = PBXContainerItemProxy; 47 | containerPortal = 83286D711C7C12670083CB19 /* Project object */; 48 | proxyType = 1; 49 | remoteGlobalIDString = 83286D791C7C12670083CB19; 50 | remoteInfo = VideoBackgroundViewController; 51 | }; 52 | /* End PBXContainerItemProxy section */ 53 | 54 | /* Begin PBXCopyFilesBuildPhase section */ 55 | CF31389B1ED6C59B00702BC8 /* Embed Frameworks */ = { 56 | isa = PBXCopyFilesBuildPhase; 57 | buildActionMask = 2147483647; 58 | dstPath = ""; 59 | dstSubfolderSpec = 10; 60 | files = ( 61 | CF3138981ED6C59B00702BC8 /* VideoBackgroundViewController.framework in Embed Frameworks */, 62 | ); 63 | name = "Embed Frameworks"; 64 | runOnlyForDeploymentPostprocessing = 0; 65 | }; 66 | /* End PBXCopyFilesBuildPhase section */ 67 | 68 | /* Begin PBXFileReference section */ 69 | 0CCAD3D7AAF842733FABE151 /* Pods-VideoBackgroundSample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoBackgroundSample.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VideoBackgroundSample/Pods-VideoBackgroundSample.debug.xcconfig"; sourceTree = ""; }; 70 | 2C877AE5912077C30AAA649C /* Pods_VideoBackgroundSample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VideoBackgroundSample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 71 | 2D83B75C36FE40E75626CCC4 /* Pods_VideoBackgroundSampleTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VideoBackgroundSampleTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 72 | 2E5029A4A2A75EA9094869B7 /* Pods-VideoBackgroundViewControllerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoBackgroundViewControllerTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VideoBackgroundViewControllerTests/Pods-VideoBackgroundViewControllerTests.debug.xcconfig"; sourceTree = ""; }; 73 | 73E8AC5742EFADD3CC2F69CF /* Pods-VideoBackgroundViewControllerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoBackgroundViewControllerTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-VideoBackgroundViewControllerTests/Pods-VideoBackgroundViewControllerTests.release.xcconfig"; sourceTree = ""; }; 74 | 83286D7A1C7C12670083CB19 /* VideoBackgroundViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = VideoBackgroundViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 75 | 83286D7D1C7C12670083CB19 /* VideoBackgroundViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoBackgroundViewController.h; sourceTree = ""; }; 76 | 83286D7F1C7C12670083CB19 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 77 | 83286D841C7C12670083CB19 /* VideoBackgroundViewControllerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VideoBackgroundViewControllerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 78 | 83286D8B1C7C12670083CB19 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 79 | 83286D981C7C12AB0083CB19 /* VideoBackgroundSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VideoBackgroundSample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 80 | 83286D9A1C7C12AB0083CB19 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 81 | 83286D9C1C7C12AB0083CB19 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 82 | 83286D9F1C7C12AB0083CB19 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 83 | 83286DA11C7C12AB0083CB19 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 84 | 83286DA41C7C12AB0083CB19 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 85 | 83286DA61C7C12AB0083CB19 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 86 | 83286DAB1C7C12AB0083CB19 /* VideoBackgroundSampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VideoBackgroundSampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 87 | 83286DAF1C7C12AB0083CB19 /* VideoBackgroundSampleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoBackgroundSampleTests.swift; sourceTree = ""; }; 88 | 83286DB11C7C12AB0083CB19 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 89 | 83286DB81C7C18610083CB19 /* VideoBackgroundViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoBackgroundViewController.swift; sourceTree = ""; }; 90 | 83286DBA1C7C1C660083CB19 /* VideoScalingMode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoScalingMode.swift; sourceTree = ""; }; 91 | 837B5EF51C7C20E7007C81EE /* VideoBackgroundControllerSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoBackgroundControllerSpec.swift; sourceTree = ""; }; 92 | 837B5EF71C7C2BD6007C81EE /* spotifyVideo.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = spotifyVideo.mp4; sourceTree = ""; }; 93 | 905545B0DB0E0B8F4E532CBB /* Pods_VideoBackgroundViewControllerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VideoBackgroundViewControllerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 94 | B3AD2E50D1EA27114A2E06B7 /* Pods-VideoBackgroundSampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoBackgroundSampleTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VideoBackgroundSampleTests/Pods-VideoBackgroundSampleTests.debug.xcconfig"; sourceTree = ""; }; 95 | C42A5016E55AAC206157B3EE /* Pods-VideoBackgroundViewController.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoBackgroundViewController.release.xcconfig"; path = "Pods/Target Support Files/Pods-VideoBackgroundViewController/Pods-VideoBackgroundViewController.release.xcconfig"; sourceTree = ""; }; 96 | EAF977946FE717F7E0BA46E6 /* Pods_VideoBackgroundViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VideoBackgroundViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 97 | EFA51B51CCDD01F791D09E08 /* Pods-VideoBackgroundSampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoBackgroundSampleTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-VideoBackgroundSampleTests/Pods-VideoBackgroundSampleTests.release.xcconfig"; sourceTree = ""; }; 98 | FBC78DE0150385128DA4D76E /* Pods-VideoBackgroundSample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoBackgroundSample.release.xcconfig"; path = "Pods/Target Support Files/Pods-VideoBackgroundSample/Pods-VideoBackgroundSample.release.xcconfig"; sourceTree = ""; }; 99 | FCEF73A73E4EF7FDDE4CB730 /* Pods-VideoBackgroundViewController.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoBackgroundViewController.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VideoBackgroundViewController/Pods-VideoBackgroundViewController.debug.xcconfig"; sourceTree = ""; }; 100 | /* End PBXFileReference section */ 101 | 102 | /* Begin PBXFrameworksBuildPhase section */ 103 | 83286D761C7C12670083CB19 /* Frameworks */ = { 104 | isa = PBXFrameworksBuildPhase; 105 | buildActionMask = 2147483647; 106 | files = ( 107 | 5CC1C46734D9B619A7BDADE9 /* Pods_VideoBackgroundViewController.framework in Frameworks */, 108 | ); 109 | runOnlyForDeploymentPostprocessing = 0; 110 | }; 111 | 83286D811C7C12670083CB19 /* Frameworks */ = { 112 | isa = PBXFrameworksBuildPhase; 113 | buildActionMask = 2147483647; 114 | files = ( 115 | 83286D851C7C12670083CB19 /* VideoBackgroundViewController.framework in Frameworks */, 116 | 9B39717B80E92AC1B74CBE3E /* Pods_VideoBackgroundViewControllerTests.framework in Frameworks */, 117 | ); 118 | runOnlyForDeploymentPostprocessing = 0; 119 | }; 120 | 83286D951C7C12AB0083CB19 /* Frameworks */ = { 121 | isa = PBXFrameworksBuildPhase; 122 | buildActionMask = 2147483647; 123 | files = ( 124 | 837B5EFD1C7D8AA7007C81EE /* VideoBackgroundViewController.framework in Frameworks */, 125 | B806160DF0F717F1227F09C5 /* Pods_VideoBackgroundSample.framework in Frameworks */, 126 | ); 127 | runOnlyForDeploymentPostprocessing = 0; 128 | }; 129 | 83286DA81C7C12AB0083CB19 /* Frameworks */ = { 130 | isa = PBXFrameworksBuildPhase; 131 | buildActionMask = 2147483647; 132 | files = ( 133 | B86C93A5B096ED00DCD432E2 /* Pods_VideoBackgroundSampleTests.framework in Frameworks */, 134 | ); 135 | runOnlyForDeploymentPostprocessing = 0; 136 | }; 137 | /* End PBXFrameworksBuildPhase section */ 138 | 139 | /* Begin PBXGroup section */ 140 | 1947342467DF054D0A8E92FE /* Pods */ = { 141 | isa = PBXGroup; 142 | children = ( 143 | 0CCAD3D7AAF842733FABE151 /* Pods-VideoBackgroundSample.debug.xcconfig */, 144 | FBC78DE0150385128DA4D76E /* Pods-VideoBackgroundSample.release.xcconfig */, 145 | B3AD2E50D1EA27114A2E06B7 /* Pods-VideoBackgroundSampleTests.debug.xcconfig */, 146 | EFA51B51CCDD01F791D09E08 /* Pods-VideoBackgroundSampleTests.release.xcconfig */, 147 | FCEF73A73E4EF7FDDE4CB730 /* Pods-VideoBackgroundViewController.debug.xcconfig */, 148 | C42A5016E55AAC206157B3EE /* Pods-VideoBackgroundViewController.release.xcconfig */, 149 | 2E5029A4A2A75EA9094869B7 /* Pods-VideoBackgroundViewControllerTests.debug.xcconfig */, 150 | 73E8AC5742EFADD3CC2F69CF /* Pods-VideoBackgroundViewControllerTests.release.xcconfig */, 151 | ); 152 | name = Pods; 153 | sourceTree = ""; 154 | }; 155 | 5B8BC47943F1078487CE808C /* Frameworks */ = { 156 | isa = PBXGroup; 157 | children = ( 158 | 2C877AE5912077C30AAA649C /* Pods_VideoBackgroundSample.framework */, 159 | 2D83B75C36FE40E75626CCC4 /* Pods_VideoBackgroundSampleTests.framework */, 160 | EAF977946FE717F7E0BA46E6 /* Pods_VideoBackgroundViewController.framework */, 161 | 905545B0DB0E0B8F4E532CBB /* Pods_VideoBackgroundViewControllerTests.framework */, 162 | ); 163 | name = Frameworks; 164 | sourceTree = ""; 165 | }; 166 | 83286D701C7C12670083CB19 = { 167 | isa = PBXGroup; 168 | children = ( 169 | 83286D7C1C7C12670083CB19 /* VideoBackgroundViewController */, 170 | 83286D881C7C12670083CB19 /* VideoBackgroundViewControllerTests */, 171 | 83286D991C7C12AB0083CB19 /* VideoBackgroundSample */, 172 | 83286DAE1C7C12AB0083CB19 /* VideoBackgroundSampleTests */, 173 | 83286D7B1C7C12670083CB19 /* Products */, 174 | 1947342467DF054D0A8E92FE /* Pods */, 175 | 5B8BC47943F1078487CE808C /* Frameworks */, 176 | ); 177 | sourceTree = ""; 178 | }; 179 | 83286D7B1C7C12670083CB19 /* Products */ = { 180 | isa = PBXGroup; 181 | children = ( 182 | 83286D7A1C7C12670083CB19 /* VideoBackgroundViewController.framework */, 183 | 83286D841C7C12670083CB19 /* VideoBackgroundViewControllerTests.xctest */, 184 | 83286D981C7C12AB0083CB19 /* VideoBackgroundSample.app */, 185 | 83286DAB1C7C12AB0083CB19 /* VideoBackgroundSampleTests.xctest */, 186 | ); 187 | name = Products; 188 | sourceTree = ""; 189 | }; 190 | 83286D7C1C7C12670083CB19 /* VideoBackgroundViewController */ = { 191 | isa = PBXGroup; 192 | children = ( 193 | 837B5EFA1C7C2FDA007C81EE /* Extensions */, 194 | 83286D7D1C7C12670083CB19 /* VideoBackgroundViewController.h */, 195 | 83286D7F1C7C12670083CB19 /* Info.plist */, 196 | 83286DB81C7C18610083CB19 /* VideoBackgroundViewController.swift */, 197 | 83286DBA1C7C1C660083CB19 /* VideoScalingMode.swift */, 198 | ); 199 | path = VideoBackgroundViewController; 200 | sourceTree = ""; 201 | }; 202 | 83286D881C7C12670083CB19 /* VideoBackgroundViewControllerTests */ = { 203 | isa = PBXGroup; 204 | children = ( 205 | 83286D8B1C7C12670083CB19 /* Info.plist */, 206 | 837B5EF51C7C20E7007C81EE /* VideoBackgroundControllerSpec.swift */, 207 | ); 208 | path = VideoBackgroundViewControllerTests; 209 | sourceTree = ""; 210 | }; 211 | 83286D991C7C12AB0083CB19 /* VideoBackgroundSample */ = { 212 | isa = PBXGroup; 213 | children = ( 214 | 837B5EF71C7C2BD6007C81EE /* spotifyVideo.mp4 */, 215 | 83286D9A1C7C12AB0083CB19 /* AppDelegate.swift */, 216 | 83286D9C1C7C12AB0083CB19 /* ViewController.swift */, 217 | 83286D9E1C7C12AB0083CB19 /* Main.storyboard */, 218 | 83286DA11C7C12AB0083CB19 /* Assets.xcassets */, 219 | 83286DA31C7C12AB0083CB19 /* LaunchScreen.storyboard */, 220 | 83286DA61C7C12AB0083CB19 /* Info.plist */, 221 | ); 222 | path = VideoBackgroundSample; 223 | sourceTree = ""; 224 | }; 225 | 83286DAE1C7C12AB0083CB19 /* VideoBackgroundSampleTests */ = { 226 | isa = PBXGroup; 227 | children = ( 228 | 83286DAF1C7C12AB0083CB19 /* VideoBackgroundSampleTests.swift */, 229 | 83286DB11C7C12AB0083CB19 /* Info.plist */, 230 | ); 231 | path = VideoBackgroundSampleTests; 232 | sourceTree = ""; 233 | }; 234 | 837B5EFA1C7C2FDA007C81EE /* Extensions */ = { 235 | isa = PBXGroup; 236 | children = ( 237 | ); 238 | name = Extensions; 239 | sourceTree = ""; 240 | }; 241 | /* End PBXGroup section */ 242 | 243 | /* Begin PBXHeadersBuildPhase section */ 244 | 83286D771C7C12670083CB19 /* Headers */ = { 245 | isa = PBXHeadersBuildPhase; 246 | buildActionMask = 2147483647; 247 | files = ( 248 | 83286D7E1C7C12670083CB19 /* VideoBackgroundViewController.h in Headers */, 249 | ); 250 | runOnlyForDeploymentPostprocessing = 0; 251 | }; 252 | /* End PBXHeadersBuildPhase section */ 253 | 254 | /* Begin PBXNativeTarget section */ 255 | 83286D791C7C12670083CB19 /* VideoBackgroundViewController */ = { 256 | isa = PBXNativeTarget; 257 | buildConfigurationList = 83286D8E1C7C12670083CB19 /* Build configuration list for PBXNativeTarget "VideoBackgroundViewController" */; 258 | buildPhases = ( 259 | 82CD4FDFE1ADC12B1A5B0334 /* [CP] Check Pods Manifest.lock */, 260 | 83286D751C7C12670083CB19 /* Sources */, 261 | 83286D761C7C12670083CB19 /* Frameworks */, 262 | 83286D771C7C12670083CB19 /* Headers */, 263 | 83286D781C7C12670083CB19 /* Resources */, 264 | 3B70F6DA295FB539C7370926 /* [CP] Copy Pods Resources */, 265 | ); 266 | buildRules = ( 267 | ); 268 | dependencies = ( 269 | ); 270 | name = VideoBackgroundViewController; 271 | productName = VideoBackgroundViewController; 272 | productReference = 83286D7A1C7C12670083CB19 /* VideoBackgroundViewController.framework */; 273 | productType = "com.apple.product-type.framework"; 274 | }; 275 | 83286D831C7C12670083CB19 /* VideoBackgroundViewControllerTests */ = { 276 | isa = PBXNativeTarget; 277 | buildConfigurationList = 83286D911C7C12670083CB19 /* Build configuration list for PBXNativeTarget "VideoBackgroundViewControllerTests" */; 278 | buildPhases = ( 279 | 52D38F2433F9914772365AA6 /* [CP] Check Pods Manifest.lock */, 280 | 83286D801C7C12670083CB19 /* Sources */, 281 | 83286D811C7C12670083CB19 /* Frameworks */, 282 | 83286D821C7C12670083CB19 /* Resources */, 283 | ABF4572A5573DBDD9E7C4F9F /* [CP] Embed Pods Frameworks */, 284 | B7753C1689C64E3A65AE5229 /* [CP] Copy Pods Resources */, 285 | ); 286 | buildRules = ( 287 | ); 288 | dependencies = ( 289 | 83286D871C7C12670083CB19 /* PBXTargetDependency */, 290 | ); 291 | name = VideoBackgroundViewControllerTests; 292 | productName = VideoBackgroundViewControllerTests; 293 | productReference = 83286D841C7C12670083CB19 /* VideoBackgroundViewControllerTests.xctest */; 294 | productType = "com.apple.product-type.bundle.unit-test"; 295 | }; 296 | 83286D971C7C12AB0083CB19 /* VideoBackgroundSample */ = { 297 | isa = PBXNativeTarget; 298 | buildConfigurationList = 83286DB21C7C12AB0083CB19 /* Build configuration list for PBXNativeTarget "VideoBackgroundSample" */; 299 | buildPhases = ( 300 | 2B8D1040C27E112EAB127A01 /* [CP] Check Pods Manifest.lock */, 301 | 83286D941C7C12AB0083CB19 /* Sources */, 302 | 83286D951C7C12AB0083CB19 /* Frameworks */, 303 | 83286D961C7C12AB0083CB19 /* Resources */, 304 | 7640D29C7BA6C6A21E2519FE /* [CP] Embed Pods Frameworks */, 305 | 9CFCFFE18042F2D3E4765098 /* [CP] Copy Pods Resources */, 306 | CF31389B1ED6C59B00702BC8 /* Embed Frameworks */, 307 | ); 308 | buildRules = ( 309 | ); 310 | dependencies = ( 311 | CF31389A1ED6C59B00702BC8 /* PBXTargetDependency */, 312 | ); 313 | name = VideoBackgroundSample; 314 | productName = VideoBackgroundSample; 315 | productReference = 83286D981C7C12AB0083CB19 /* VideoBackgroundSample.app */; 316 | productType = "com.apple.product-type.application"; 317 | }; 318 | 83286DAA1C7C12AB0083CB19 /* VideoBackgroundSampleTests */ = { 319 | isa = PBXNativeTarget; 320 | buildConfigurationList = 83286DB51C7C12AB0083CB19 /* Build configuration list for PBXNativeTarget "VideoBackgroundSampleTests" */; 321 | buildPhases = ( 322 | 9B73118D4C3EE01CE0EE9D95 /* [CP] Check Pods Manifest.lock */, 323 | 83286DA71C7C12AB0083CB19 /* Sources */, 324 | 83286DA81C7C12AB0083CB19 /* Frameworks */, 325 | 83286DA91C7C12AB0083CB19 /* Resources */, 326 | 6090D9738F5E2103D6ED1EDA /* [CP] Embed Pods Frameworks */, 327 | 6220F535B4AE7843F58BCD1C /* [CP] Copy Pods Resources */, 328 | ); 329 | buildRules = ( 330 | ); 331 | dependencies = ( 332 | 83286DAD1C7C12AB0083CB19 /* PBXTargetDependency */, 333 | ); 334 | name = VideoBackgroundSampleTests; 335 | productName = VideoBackgroundSampleTests; 336 | productReference = 83286DAB1C7C12AB0083CB19 /* VideoBackgroundSampleTests.xctest */; 337 | productType = "com.apple.product-type.bundle.unit-test"; 338 | }; 339 | /* End PBXNativeTarget section */ 340 | 341 | /* Begin PBXProject section */ 342 | 83286D711C7C12670083CB19 /* Project object */ = { 343 | isa = PBXProject; 344 | attributes = { 345 | LastSwiftUpdateCheck = 0720; 346 | LastUpgradeCheck = 1000; 347 | ORGANIZATIONNAME = "Chris Jimenez"; 348 | TargetAttributes = { 349 | 83286D791C7C12670083CB19 = { 350 | CreatedOnToolsVersion = 7.2.1; 351 | LastSwiftMigration = 1000; 352 | }; 353 | 83286D831C7C12670083CB19 = { 354 | CreatedOnToolsVersion = 7.2.1; 355 | LastSwiftMigration = 1000; 356 | }; 357 | 83286D971C7C12AB0083CB19 = { 358 | CreatedOnToolsVersion = 7.2.1; 359 | LastSwiftMigration = 0830; 360 | }; 361 | 83286DAA1C7C12AB0083CB19 = { 362 | CreatedOnToolsVersion = 7.2.1; 363 | LastSwiftMigration = 0830; 364 | TestTargetID = 83286D971C7C12AB0083CB19; 365 | }; 366 | }; 367 | }; 368 | buildConfigurationList = 83286D741C7C12670083CB19 /* Build configuration list for PBXProject "VideoBackgroundViewController" */; 369 | compatibilityVersion = "Xcode 3.2"; 370 | developmentRegion = English; 371 | hasScannedForEncodings = 0; 372 | knownRegions = ( 373 | en, 374 | Base, 375 | ); 376 | mainGroup = 83286D701C7C12670083CB19; 377 | productRefGroup = 83286D7B1C7C12670083CB19 /* Products */; 378 | projectDirPath = ""; 379 | projectRoot = ""; 380 | targets = ( 381 | 83286D791C7C12670083CB19 /* VideoBackgroundViewController */, 382 | 83286D831C7C12670083CB19 /* VideoBackgroundViewControllerTests */, 383 | 83286D971C7C12AB0083CB19 /* VideoBackgroundSample */, 384 | 83286DAA1C7C12AB0083CB19 /* VideoBackgroundSampleTests */, 385 | ); 386 | }; 387 | /* End PBXProject section */ 388 | 389 | /* Begin PBXResourcesBuildPhase section */ 390 | 83286D781C7C12670083CB19 /* Resources */ = { 391 | isa = PBXResourcesBuildPhase; 392 | buildActionMask = 2147483647; 393 | files = ( 394 | ); 395 | runOnlyForDeploymentPostprocessing = 0; 396 | }; 397 | 83286D821C7C12670083CB19 /* Resources */ = { 398 | isa = PBXResourcesBuildPhase; 399 | buildActionMask = 2147483647; 400 | files = ( 401 | ); 402 | runOnlyForDeploymentPostprocessing = 0; 403 | }; 404 | 83286D961C7C12AB0083CB19 /* Resources */ = { 405 | isa = PBXResourcesBuildPhase; 406 | buildActionMask = 2147483647; 407 | files = ( 408 | 837B5EF81C7C2D4B007C81EE /* spotifyVideo.mp4 in Resources */, 409 | 83286DA51C7C12AB0083CB19 /* LaunchScreen.storyboard in Resources */, 410 | 83286DA21C7C12AB0083CB19 /* Assets.xcassets in Resources */, 411 | 83286DA01C7C12AB0083CB19 /* Main.storyboard in Resources */, 412 | ); 413 | runOnlyForDeploymentPostprocessing = 0; 414 | }; 415 | 83286DA91C7C12AB0083CB19 /* Resources */ = { 416 | isa = PBXResourcesBuildPhase; 417 | buildActionMask = 2147483647; 418 | files = ( 419 | ); 420 | runOnlyForDeploymentPostprocessing = 0; 421 | }; 422 | /* End PBXResourcesBuildPhase section */ 423 | 424 | /* Begin PBXShellScriptBuildPhase section */ 425 | 2B8D1040C27E112EAB127A01 /* [CP] Check Pods Manifest.lock */ = { 426 | isa = PBXShellScriptBuildPhase; 427 | buildActionMask = 2147483647; 428 | files = ( 429 | ); 430 | inputPaths = ( 431 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 432 | "${PODS_ROOT}/Manifest.lock", 433 | ); 434 | name = "[CP] Check Pods Manifest.lock"; 435 | outputPaths = ( 436 | "$(DERIVED_FILE_DIR)/Pods-VideoBackgroundSample-checkManifestLockResult.txt", 437 | ); 438 | runOnlyForDeploymentPostprocessing = 0; 439 | shellPath = /bin/sh; 440 | 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"; 441 | showEnvVarsInLog = 0; 442 | }; 443 | 3B70F6DA295FB539C7370926 /* [CP] Copy Pods Resources */ = { 444 | isa = PBXShellScriptBuildPhase; 445 | buildActionMask = 2147483647; 446 | files = ( 447 | ); 448 | inputPaths = ( 449 | ); 450 | name = "[CP] Copy Pods Resources"; 451 | outputPaths = ( 452 | ); 453 | runOnlyForDeploymentPostprocessing = 0; 454 | shellPath = /bin/sh; 455 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VideoBackgroundViewController/Pods-VideoBackgroundViewController-resources.sh\"\n"; 456 | showEnvVarsInLog = 0; 457 | }; 458 | 52D38F2433F9914772365AA6 /* [CP] Check Pods Manifest.lock */ = { 459 | isa = PBXShellScriptBuildPhase; 460 | buildActionMask = 2147483647; 461 | files = ( 462 | ); 463 | inputPaths = ( 464 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 465 | "${PODS_ROOT}/Manifest.lock", 466 | ); 467 | name = "[CP] Check Pods Manifest.lock"; 468 | outputPaths = ( 469 | "$(DERIVED_FILE_DIR)/Pods-VideoBackgroundViewControllerTests-checkManifestLockResult.txt", 470 | ); 471 | runOnlyForDeploymentPostprocessing = 0; 472 | shellPath = /bin/sh; 473 | 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"; 474 | showEnvVarsInLog = 0; 475 | }; 476 | 6090D9738F5E2103D6ED1EDA /* [CP] Embed Pods Frameworks */ = { 477 | isa = PBXShellScriptBuildPhase; 478 | buildActionMask = 2147483647; 479 | files = ( 480 | ); 481 | inputPaths = ( 482 | ); 483 | name = "[CP] Embed Pods Frameworks"; 484 | outputPaths = ( 485 | ); 486 | runOnlyForDeploymentPostprocessing = 0; 487 | shellPath = /bin/sh; 488 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VideoBackgroundSampleTests/Pods-VideoBackgroundSampleTests-frameworks.sh\"\n"; 489 | showEnvVarsInLog = 0; 490 | }; 491 | 6220F535B4AE7843F58BCD1C /* [CP] Copy Pods Resources */ = { 492 | isa = PBXShellScriptBuildPhase; 493 | buildActionMask = 2147483647; 494 | files = ( 495 | ); 496 | inputPaths = ( 497 | ); 498 | name = "[CP] Copy Pods Resources"; 499 | outputPaths = ( 500 | ); 501 | runOnlyForDeploymentPostprocessing = 0; 502 | shellPath = /bin/sh; 503 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VideoBackgroundSampleTests/Pods-VideoBackgroundSampleTests-resources.sh\"\n"; 504 | showEnvVarsInLog = 0; 505 | }; 506 | 7640D29C7BA6C6A21E2519FE /* [CP] Embed Pods Frameworks */ = { 507 | isa = PBXShellScriptBuildPhase; 508 | buildActionMask = 2147483647; 509 | files = ( 510 | ); 511 | inputPaths = ( 512 | ); 513 | name = "[CP] Embed Pods Frameworks"; 514 | outputPaths = ( 515 | ); 516 | runOnlyForDeploymentPostprocessing = 0; 517 | shellPath = /bin/sh; 518 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VideoBackgroundSample/Pods-VideoBackgroundSample-frameworks.sh\"\n"; 519 | showEnvVarsInLog = 0; 520 | }; 521 | 82CD4FDFE1ADC12B1A5B0334 /* [CP] Check Pods Manifest.lock */ = { 522 | isa = PBXShellScriptBuildPhase; 523 | buildActionMask = 2147483647; 524 | files = ( 525 | ); 526 | inputPaths = ( 527 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 528 | "${PODS_ROOT}/Manifest.lock", 529 | ); 530 | name = "[CP] Check Pods Manifest.lock"; 531 | outputPaths = ( 532 | "$(DERIVED_FILE_DIR)/Pods-VideoBackgroundViewController-checkManifestLockResult.txt", 533 | ); 534 | runOnlyForDeploymentPostprocessing = 0; 535 | shellPath = /bin/sh; 536 | 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"; 537 | showEnvVarsInLog = 0; 538 | }; 539 | 9B73118D4C3EE01CE0EE9D95 /* [CP] Check Pods Manifest.lock */ = { 540 | isa = PBXShellScriptBuildPhase; 541 | buildActionMask = 2147483647; 542 | files = ( 543 | ); 544 | inputPaths = ( 545 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 546 | "${PODS_ROOT}/Manifest.lock", 547 | ); 548 | name = "[CP] Check Pods Manifest.lock"; 549 | outputPaths = ( 550 | "$(DERIVED_FILE_DIR)/Pods-VideoBackgroundSampleTests-checkManifestLockResult.txt", 551 | ); 552 | runOnlyForDeploymentPostprocessing = 0; 553 | shellPath = /bin/sh; 554 | 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"; 555 | showEnvVarsInLog = 0; 556 | }; 557 | 9CFCFFE18042F2D3E4765098 /* [CP] Copy Pods Resources */ = { 558 | isa = PBXShellScriptBuildPhase; 559 | buildActionMask = 2147483647; 560 | files = ( 561 | ); 562 | inputPaths = ( 563 | ); 564 | name = "[CP] Copy Pods Resources"; 565 | outputPaths = ( 566 | ); 567 | runOnlyForDeploymentPostprocessing = 0; 568 | shellPath = /bin/sh; 569 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VideoBackgroundSample/Pods-VideoBackgroundSample-resources.sh\"\n"; 570 | showEnvVarsInLog = 0; 571 | }; 572 | ABF4572A5573DBDD9E7C4F9F /* [CP] Embed Pods Frameworks */ = { 573 | isa = PBXShellScriptBuildPhase; 574 | buildActionMask = 2147483647; 575 | files = ( 576 | ); 577 | inputPaths = ( 578 | "${SRCROOT}/Pods/Target Support Files/Pods-VideoBackgroundViewControllerTests/Pods-VideoBackgroundViewControllerTests-frameworks.sh", 579 | "${BUILT_PRODUCTS_DIR}/Nimble/Nimble.framework", 580 | "${BUILT_PRODUCTS_DIR}/Quick/Quick.framework", 581 | ); 582 | name = "[CP] Embed Pods Frameworks"; 583 | outputPaths = ( 584 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Nimble.framework", 585 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Quick.framework", 586 | ); 587 | runOnlyForDeploymentPostprocessing = 0; 588 | shellPath = /bin/sh; 589 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VideoBackgroundViewControllerTests/Pods-VideoBackgroundViewControllerTests-frameworks.sh\"\n"; 590 | showEnvVarsInLog = 0; 591 | }; 592 | B7753C1689C64E3A65AE5229 /* [CP] Copy Pods Resources */ = { 593 | isa = PBXShellScriptBuildPhase; 594 | buildActionMask = 2147483647; 595 | files = ( 596 | ); 597 | inputPaths = ( 598 | ); 599 | name = "[CP] Copy Pods Resources"; 600 | outputPaths = ( 601 | ); 602 | runOnlyForDeploymentPostprocessing = 0; 603 | shellPath = /bin/sh; 604 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VideoBackgroundViewControllerTests/Pods-VideoBackgroundViewControllerTests-resources.sh\"\n"; 605 | showEnvVarsInLog = 0; 606 | }; 607 | /* End PBXShellScriptBuildPhase section */ 608 | 609 | /* Begin PBXSourcesBuildPhase section */ 610 | 83286D751C7C12670083CB19 /* Sources */ = { 611 | isa = PBXSourcesBuildPhase; 612 | buildActionMask = 2147483647; 613 | files = ( 614 | 83286DB91C7C18610083CB19 /* VideoBackgroundViewController.swift in Sources */, 615 | 83286DBB1C7C1C660083CB19 /* VideoScalingMode.swift in Sources */, 616 | ); 617 | runOnlyForDeploymentPostprocessing = 0; 618 | }; 619 | 83286D801C7C12670083CB19 /* Sources */ = { 620 | isa = PBXSourcesBuildPhase; 621 | buildActionMask = 2147483647; 622 | files = ( 623 | 837B5EF61C7C20E7007C81EE /* VideoBackgroundControllerSpec.swift in Sources */, 624 | ); 625 | runOnlyForDeploymentPostprocessing = 0; 626 | }; 627 | 83286D941C7C12AB0083CB19 /* Sources */ = { 628 | isa = PBXSourcesBuildPhase; 629 | buildActionMask = 2147483647; 630 | files = ( 631 | 83286D9D1C7C12AB0083CB19 /* ViewController.swift in Sources */, 632 | 83286D9B1C7C12AB0083CB19 /* AppDelegate.swift in Sources */, 633 | ); 634 | runOnlyForDeploymentPostprocessing = 0; 635 | }; 636 | 83286DA71C7C12AB0083CB19 /* Sources */ = { 637 | isa = PBXSourcesBuildPhase; 638 | buildActionMask = 2147483647; 639 | files = ( 640 | 83286DB01C7C12AB0083CB19 /* VideoBackgroundSampleTests.swift in Sources */, 641 | ); 642 | runOnlyForDeploymentPostprocessing = 0; 643 | }; 644 | /* End PBXSourcesBuildPhase section */ 645 | 646 | /* Begin PBXTargetDependency section */ 647 | 83286D871C7C12670083CB19 /* PBXTargetDependency */ = { 648 | isa = PBXTargetDependency; 649 | target = 83286D791C7C12670083CB19 /* VideoBackgroundViewController */; 650 | targetProxy = 83286D861C7C12670083CB19 /* PBXContainerItemProxy */; 651 | }; 652 | 83286DAD1C7C12AB0083CB19 /* PBXTargetDependency */ = { 653 | isa = PBXTargetDependency; 654 | target = 83286D971C7C12AB0083CB19 /* VideoBackgroundSample */; 655 | targetProxy = 83286DAC1C7C12AB0083CB19 /* PBXContainerItemProxy */; 656 | }; 657 | CF31389A1ED6C59B00702BC8 /* PBXTargetDependency */ = { 658 | isa = PBXTargetDependency; 659 | target = 83286D791C7C12670083CB19 /* VideoBackgroundViewController */; 660 | targetProxy = CF3138991ED6C59B00702BC8 /* PBXContainerItemProxy */; 661 | }; 662 | /* End PBXTargetDependency section */ 663 | 664 | /* Begin PBXVariantGroup section */ 665 | 83286D9E1C7C12AB0083CB19 /* Main.storyboard */ = { 666 | isa = PBXVariantGroup; 667 | children = ( 668 | 83286D9F1C7C12AB0083CB19 /* Base */, 669 | ); 670 | name = Main.storyboard; 671 | sourceTree = ""; 672 | }; 673 | 83286DA31C7C12AB0083CB19 /* LaunchScreen.storyboard */ = { 674 | isa = PBXVariantGroup; 675 | children = ( 676 | 83286DA41C7C12AB0083CB19 /* Base */, 677 | ); 678 | name = LaunchScreen.storyboard; 679 | sourceTree = ""; 680 | }; 681 | /* End PBXVariantGroup section */ 682 | 683 | /* Begin XCBuildConfiguration section */ 684 | 83286D8C1C7C12670083CB19 /* Debug */ = { 685 | isa = XCBuildConfiguration; 686 | buildSettings = { 687 | ALWAYS_SEARCH_USER_PATHS = NO; 688 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 689 | CLANG_CXX_LIBRARY = "libc++"; 690 | CLANG_ENABLE_MODULES = YES; 691 | CLANG_ENABLE_OBJC_ARC = YES; 692 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 693 | CLANG_WARN_BOOL_CONVERSION = YES; 694 | CLANG_WARN_COMMA = YES; 695 | CLANG_WARN_CONSTANT_CONVERSION = YES; 696 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 697 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 698 | CLANG_WARN_EMPTY_BODY = YES; 699 | CLANG_WARN_ENUM_CONVERSION = YES; 700 | CLANG_WARN_INFINITE_RECURSION = YES; 701 | CLANG_WARN_INT_CONVERSION = YES; 702 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 703 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 704 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 705 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 706 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 707 | CLANG_WARN_STRICT_PROTOTYPES = YES; 708 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 709 | CLANG_WARN_UNREACHABLE_CODE = YES; 710 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 711 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 712 | COPY_PHASE_STRIP = NO; 713 | CURRENT_PROJECT_VERSION = 1; 714 | DEBUG_INFORMATION_FORMAT = dwarf; 715 | ENABLE_STRICT_OBJC_MSGSEND = YES; 716 | ENABLE_TESTABILITY = YES; 717 | GCC_C_LANGUAGE_STANDARD = gnu99; 718 | GCC_DYNAMIC_NO_PIC = NO; 719 | GCC_NO_COMMON_BLOCKS = YES; 720 | GCC_OPTIMIZATION_LEVEL = 0; 721 | GCC_PREPROCESSOR_DEFINITIONS = ( 722 | "DEBUG=1", 723 | "$(inherited)", 724 | ); 725 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 726 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 727 | GCC_WARN_UNDECLARED_SELECTOR = YES; 728 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 729 | GCC_WARN_UNUSED_FUNCTION = YES; 730 | GCC_WARN_UNUSED_VARIABLE = YES; 731 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 732 | MTL_ENABLE_DEBUG_INFO = YES; 733 | ONLY_ACTIVE_ARCH = YES; 734 | SDKROOT = iphoneos; 735 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 736 | SWIFT_VERSION = 4.0; 737 | TARGETED_DEVICE_FAMILY = "1,2"; 738 | VERSIONING_SYSTEM = "apple-generic"; 739 | VERSION_INFO_PREFIX = ""; 740 | }; 741 | name = Debug; 742 | }; 743 | 83286D8D1C7C12670083CB19 /* Release */ = { 744 | isa = XCBuildConfiguration; 745 | buildSettings = { 746 | ALWAYS_SEARCH_USER_PATHS = NO; 747 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 748 | CLANG_CXX_LIBRARY = "libc++"; 749 | CLANG_ENABLE_MODULES = YES; 750 | CLANG_ENABLE_OBJC_ARC = YES; 751 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 752 | CLANG_WARN_BOOL_CONVERSION = YES; 753 | CLANG_WARN_COMMA = YES; 754 | CLANG_WARN_CONSTANT_CONVERSION = YES; 755 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 756 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 757 | CLANG_WARN_EMPTY_BODY = YES; 758 | CLANG_WARN_ENUM_CONVERSION = YES; 759 | CLANG_WARN_INFINITE_RECURSION = YES; 760 | CLANG_WARN_INT_CONVERSION = YES; 761 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 762 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 763 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 764 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 765 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 766 | CLANG_WARN_STRICT_PROTOTYPES = YES; 767 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 768 | CLANG_WARN_UNREACHABLE_CODE = YES; 769 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 770 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 771 | COPY_PHASE_STRIP = NO; 772 | CURRENT_PROJECT_VERSION = 1; 773 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 774 | ENABLE_NS_ASSERTIONS = NO; 775 | ENABLE_STRICT_OBJC_MSGSEND = YES; 776 | GCC_C_LANGUAGE_STANDARD = gnu99; 777 | GCC_NO_COMMON_BLOCKS = YES; 778 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 779 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 780 | GCC_WARN_UNDECLARED_SELECTOR = YES; 781 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 782 | GCC_WARN_UNUSED_FUNCTION = YES; 783 | GCC_WARN_UNUSED_VARIABLE = YES; 784 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 785 | MTL_ENABLE_DEBUG_INFO = NO; 786 | SDKROOT = iphoneos; 787 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 788 | SWIFT_VERSION = 4.0; 789 | TARGETED_DEVICE_FAMILY = "1,2"; 790 | VALIDATE_PRODUCT = YES; 791 | VERSIONING_SYSTEM = "apple-generic"; 792 | VERSION_INFO_PREFIX = ""; 793 | }; 794 | name = Release; 795 | }; 796 | 83286D8F1C7C12670083CB19 /* Debug */ = { 797 | isa = XCBuildConfiguration; 798 | baseConfigurationReference = FCEF73A73E4EF7FDDE4CB730 /* Pods-VideoBackgroundViewController.debug.xcconfig */; 799 | buildSettings = { 800 | CLANG_ENABLE_MODULES = YES; 801 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 802 | DEFINES_MODULE = YES; 803 | DYLIB_COMPATIBILITY_VERSION = 1; 804 | DYLIB_CURRENT_VERSION = 1; 805 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 806 | INFOPLIST_FILE = VideoBackgroundViewController/Info.plist; 807 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 808 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 809 | PRODUCT_BUNDLE_IDENTIFIER = com.greenpixels.VideoBackgroundViewController; 810 | PRODUCT_NAME = "$(TARGET_NAME)"; 811 | SKIP_INSTALL = YES; 812 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 813 | SWIFT_VERSION = 4.0; 814 | }; 815 | name = Debug; 816 | }; 817 | 83286D901C7C12670083CB19 /* Release */ = { 818 | isa = XCBuildConfiguration; 819 | baseConfigurationReference = C42A5016E55AAC206157B3EE /* Pods-VideoBackgroundViewController.release.xcconfig */; 820 | buildSettings = { 821 | CLANG_ENABLE_MODULES = YES; 822 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 823 | DEFINES_MODULE = YES; 824 | DYLIB_COMPATIBILITY_VERSION = 1; 825 | DYLIB_CURRENT_VERSION = 1; 826 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 827 | INFOPLIST_FILE = VideoBackgroundViewController/Info.plist; 828 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 829 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 830 | PRODUCT_BUNDLE_IDENTIFIER = com.greenpixels.VideoBackgroundViewController; 831 | PRODUCT_NAME = "$(TARGET_NAME)"; 832 | SKIP_INSTALL = YES; 833 | SWIFT_VERSION = 4.0; 834 | }; 835 | name = Release; 836 | }; 837 | 83286D921C7C12670083CB19 /* Debug */ = { 838 | isa = XCBuildConfiguration; 839 | baseConfigurationReference = 2E5029A4A2A75EA9094869B7 /* Pods-VideoBackgroundViewControllerTests.debug.xcconfig */; 840 | buildSettings = { 841 | CLANG_ENABLE_MODULES = YES; 842 | INFOPLIST_FILE = VideoBackgroundViewControllerTests/Info.plist; 843 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 844 | PRODUCT_BUNDLE_IDENTIFIER = com.greenpixels.VideoBackgroundViewControllerTests; 845 | PRODUCT_NAME = "$(TARGET_NAME)"; 846 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 847 | SWIFT_VERSION = 4.0; 848 | }; 849 | name = Debug; 850 | }; 851 | 83286D931C7C12670083CB19 /* Release */ = { 852 | isa = XCBuildConfiguration; 853 | baseConfigurationReference = 73E8AC5742EFADD3CC2F69CF /* Pods-VideoBackgroundViewControllerTests.release.xcconfig */; 854 | buildSettings = { 855 | CLANG_ENABLE_MODULES = YES; 856 | INFOPLIST_FILE = VideoBackgroundViewControllerTests/Info.plist; 857 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 858 | PRODUCT_BUNDLE_IDENTIFIER = com.greenpixels.VideoBackgroundViewControllerTests; 859 | PRODUCT_NAME = "$(TARGET_NAME)"; 860 | SWIFT_VERSION = 4.0; 861 | }; 862 | name = Release; 863 | }; 864 | 83286DB31C7C12AB0083CB19 /* Debug */ = { 865 | isa = XCBuildConfiguration; 866 | baseConfigurationReference = 0CCAD3D7AAF842733FABE151 /* Pods-VideoBackgroundSample.debug.xcconfig */; 867 | buildSettings = { 868 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 869 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 870 | DEVELOPMENT_TEAM = ""; 871 | ENABLE_BITCODE = YES; 872 | INFOPLIST_FILE = VideoBackgroundSample/Info.plist; 873 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 874 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 875 | PRODUCT_BUNDLE_IDENTIFIER = com.greenpixels.VideoBackgroundSample; 876 | PRODUCT_NAME = "$(TARGET_NAME)"; 877 | SWIFT_VERSION = 4.0; 878 | }; 879 | name = Debug; 880 | }; 881 | 83286DB41C7C12AB0083CB19 /* Release */ = { 882 | isa = XCBuildConfiguration; 883 | baseConfigurationReference = FBC78DE0150385128DA4D76E /* Pods-VideoBackgroundSample.release.xcconfig */; 884 | buildSettings = { 885 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 886 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 887 | DEVELOPMENT_TEAM = ""; 888 | ENABLE_BITCODE = YES; 889 | INFOPLIST_FILE = VideoBackgroundSample/Info.plist; 890 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 891 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 892 | PRODUCT_BUNDLE_IDENTIFIER = com.greenpixels.VideoBackgroundSample; 893 | PRODUCT_NAME = "$(TARGET_NAME)"; 894 | SWIFT_VERSION = 4.0; 895 | }; 896 | name = Release; 897 | }; 898 | 83286DB61C7C12AB0083CB19 /* Debug */ = { 899 | isa = XCBuildConfiguration; 900 | baseConfigurationReference = B3AD2E50D1EA27114A2E06B7 /* Pods-VideoBackgroundSampleTests.debug.xcconfig */; 901 | buildSettings = { 902 | BUNDLE_LOADER = "$(TEST_HOST)"; 903 | INFOPLIST_FILE = VideoBackgroundSampleTests/Info.plist; 904 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 905 | PRODUCT_BUNDLE_IDENTIFIER = com.greenpixels.VideoBackgroundSampleTests; 906 | PRODUCT_NAME = "$(TARGET_NAME)"; 907 | SWIFT_VERSION = 4.0; 908 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VideoBackgroundSample.app/VideoBackgroundSample"; 909 | }; 910 | name = Debug; 911 | }; 912 | 83286DB71C7C12AB0083CB19 /* Release */ = { 913 | isa = XCBuildConfiguration; 914 | baseConfigurationReference = EFA51B51CCDD01F791D09E08 /* Pods-VideoBackgroundSampleTests.release.xcconfig */; 915 | buildSettings = { 916 | BUNDLE_LOADER = "$(TEST_HOST)"; 917 | INFOPLIST_FILE = VideoBackgroundSampleTests/Info.plist; 918 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 919 | PRODUCT_BUNDLE_IDENTIFIER = com.greenpixels.VideoBackgroundSampleTests; 920 | PRODUCT_NAME = "$(TARGET_NAME)"; 921 | SWIFT_VERSION = 4.0; 922 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VideoBackgroundSample.app/VideoBackgroundSample"; 923 | }; 924 | name = Release; 925 | }; 926 | /* End XCBuildConfiguration section */ 927 | 928 | /* Begin XCConfigurationList section */ 929 | 83286D741C7C12670083CB19 /* Build configuration list for PBXProject "VideoBackgroundViewController" */ = { 930 | isa = XCConfigurationList; 931 | buildConfigurations = ( 932 | 83286D8C1C7C12670083CB19 /* Debug */, 933 | 83286D8D1C7C12670083CB19 /* Release */, 934 | ); 935 | defaultConfigurationIsVisible = 0; 936 | defaultConfigurationName = Release; 937 | }; 938 | 83286D8E1C7C12670083CB19 /* Build configuration list for PBXNativeTarget "VideoBackgroundViewController" */ = { 939 | isa = XCConfigurationList; 940 | buildConfigurations = ( 941 | 83286D8F1C7C12670083CB19 /* Debug */, 942 | 83286D901C7C12670083CB19 /* Release */, 943 | ); 944 | defaultConfigurationIsVisible = 0; 945 | defaultConfigurationName = Release; 946 | }; 947 | 83286D911C7C12670083CB19 /* Build configuration list for PBXNativeTarget "VideoBackgroundViewControllerTests" */ = { 948 | isa = XCConfigurationList; 949 | buildConfigurations = ( 950 | 83286D921C7C12670083CB19 /* Debug */, 951 | 83286D931C7C12670083CB19 /* Release */, 952 | ); 953 | defaultConfigurationIsVisible = 0; 954 | defaultConfigurationName = Release; 955 | }; 956 | 83286DB21C7C12AB0083CB19 /* Build configuration list for PBXNativeTarget "VideoBackgroundSample" */ = { 957 | isa = XCConfigurationList; 958 | buildConfigurations = ( 959 | 83286DB31C7C12AB0083CB19 /* Debug */, 960 | 83286DB41C7C12AB0083CB19 /* Release */, 961 | ); 962 | defaultConfigurationIsVisible = 0; 963 | defaultConfigurationName = Release; 964 | }; 965 | 83286DB51C7C12AB0083CB19 /* Build configuration list for PBXNativeTarget "VideoBackgroundSampleTests" */ = { 966 | isa = XCConfigurationList; 967 | buildConfigurations = ( 968 | 83286DB61C7C12AB0083CB19 /* Debug */, 969 | 83286DB71C7C12AB0083CB19 /* Release */, 970 | ); 971 | defaultConfigurationIsVisible = 0; 972 | defaultConfigurationName = Release; 973 | }; 974 | /* End XCConfigurationList section */ 975 | }; 976 | rootObject = 83286D711C7C12670083CB19 /* Project object */; 977 | } 978 | -------------------------------------------------------------------------------- /VideoBackgroundViewController.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /VideoBackgroundViewController.xcodeproj/xcshareddata/xcschemes/VideoBackgroundViewController.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 34 | 40 | 41 | 42 | 43 | 44 | 50 | 51 | 52 | 53 | 54 | 55 | 65 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 84 | 90 | 91 | 92 | 93 | 95 | 96 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /VideoBackgroundViewController.xcodeproj/xcuserdata/chris.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | VideoBackgroundSample.xcscheme 8 | 9 | orderHint 10 | 7 11 | 12 | VideoBackgroundViewController.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 0 16 | 17 | 18 | SuppressBuildableAutocreation 19 | 20 | 83286D791C7C12670083CB19 21 | 22 | primary 23 | 24 | 25 | 83286D831C7C12670083CB19 26 | 27 | primary 28 | 29 | 30 | 83286D971C7C12AB0083CB19 31 | 32 | primary 33 | 34 | 35 | 83286DAA1C7C12AB0083CB19 36 | 37 | primary 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /VideoBackgroundViewController.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /VideoBackgroundViewController.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /VideoBackgroundViewController/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.0.6 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /VideoBackgroundViewController/VideoBackgroundViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // VideoBackgroundViewController.h 3 | // VideoBackgroundViewController 4 | // 5 | // Created by Chris Jimenez on 2/22/16. 6 | // Copyright © 2016 Chris Jimenez. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for VideoBackgroundViewController. 12 | FOUNDATION_EXPORT double VideoBackgroundViewControllerVersionNumber; 13 | 14 | //! Project version string for VideoBackgroundViewController. 15 | FOUNDATION_EXPORT const unsigned char VideoBackgroundViewControllerVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /VideoBackgroundViewController/VideoBackgroundViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // VideoBackgroundViewController.swift 3 | // VideoBackgroundViewController 4 | // 5 | // Created by Chris Jimenez on 2/22/16. 6 | // Copyright © 2016 Chris Jimenez. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | import MediaPlayer 12 | import AVKit 13 | 14 | /// Class that shows a video in the backgroun of the view controller 15 | open class VideoBackgroundViewController: UIViewController { 16 | 17 | /// The video player to use for the video in the background 18 | public let videoPlayer: AVPlayerViewController = AVPlayerViewController() 19 | // The sound level of hte video 20 | open var soundLevel: Float = 1.0 21 | // If the video should have sound or not 22 | open var playSound: Bool = true { 23 | 24 | didSet{ 25 | if playSound { 26 | soundLevel = 1.0 27 | } 28 | else { 29 | soundLevel = 0.0 30 | } 31 | } 32 | } 33 | 34 | //The URL of the video to play 35 | open var videoURL: URL! { 36 | 37 | didSet{ 38 | 39 | videoPlayer.player = AVPlayer(url: videoURL) 40 | videoPlayer.player?.volume = self.soundLevel 41 | videoPlayer.player?.play() 42 | 43 | } 44 | } 45 | 46 | /// Alpha to apply to the video 47 | open var alpha: CGFloat = CGFloat(1.0) { 48 | didSet { 49 | videoPlayer.view.alpha = alpha 50 | } 51 | } 52 | 53 | 54 | /// If the video will loop or not 55 | open var videoShouldLoop: Bool = true { 56 | 57 | didSet { 58 | if videoShouldLoop { 59 | NotificationCenter.default.addObserver(self, 60 | selector: #selector(VideoBackgroundViewController.videoPlayerItemDidReachEnd), 61 | name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, 62 | object: videoPlayer.player?.currentItem) 63 | } 64 | } 65 | } 66 | 67 | /** 68 | Gets trigger when the video goes to the end, 69 | */ 70 | @objc func videoPlayerItemDidReachEnd() { 71 | videoPlayer.player?.seek(to: kCMTimeZero) 72 | videoPlayer.player?.play() 73 | } 74 | 75 | /// The aspect scaling mode of the video, defaults to ResizeAspectFill 76 | open var videoScalingMode: VideoScalingMode = .resizeAspectFill { 77 | didSet { 78 | switch videoScalingMode { 79 | case .resize: 80 | videoPlayer.videoGravity = convertToAVLayerVideoGravity(AVLayerVideoGravity.resize.rawValue).rawValue 81 | case .resizeAspect: 82 | videoPlayer.videoGravity = convertToAVLayerVideoGravity(AVLayerVideoGravity.resizeAspect.rawValue).rawValue 83 | case .resizeAspectFill: 84 | videoPlayer.videoGravity = convertToAVLayerVideoGravity(AVLayerVideoGravity.resizeAspectFill.rawValue).rawValue 85 | } 86 | } 87 | } 88 | 89 | 90 | /// The frame size of the video 91 | open var videoFrame: CGRect = CGRect() 92 | 93 | //The background color of the video 94 | open var backgroundColor: UIColor = UIColor.black { 95 | didSet { 96 | view.backgroundColor = backgroundColor 97 | } 98 | } 99 | 100 | override open func viewDidLoad() { 101 | super.viewDidLoad() 102 | 103 | videoFrame = view.frame 104 | self.videoShouldLoop = true 105 | self.alpha = 0.8 106 | self.playSound = false 107 | self.videoScalingMode = .resizeAspectFill 108 | 109 | 110 | } 111 | 112 | 113 | /** 114 | Delegate when the view will appear 115 | 116 | - parameter animated: It it appears animated or not 117 | */ 118 | override open func viewDidAppear(_ animated: Bool) { 119 | super.viewDidAppear(animated) 120 | //Sets the frame 121 | videoPlayer.view.frame = videoFrame 122 | //Hides the playback controls 123 | videoPlayer.showsPlaybackControls = false 124 | //Adds the video as a subview 125 | view.addSubview(videoPlayer.view) 126 | //Sends it to the back 127 | view.sendSubview(toBack: videoPlayer.view) 128 | } 129 | 130 | 131 | //Removes the observer 132 | deinit{ 133 | NotificationCenter.default.removeObserver(self) 134 | } 135 | 136 | 137 | 138 | } 139 | 140 | // Helper function inserted by Swift 4.2 migrator. 141 | fileprivate func convertToAVLayerVideoGravity(_ input: String) -> AVLayerVideoGravity { 142 | return AVLayerVideoGravity(rawValue: input) 143 | } 144 | -------------------------------------------------------------------------------- /VideoBackgroundViewController/VideoScalingMode.swift: -------------------------------------------------------------------------------- 1 | // 2 | // VideoFillMode.swift 3 | // VideoBackgroundViewController 4 | // 5 | // Created by Chris Jimenez on 2/22/16. 6 | // Copyright © 2016 Chris Jimenez. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | /** 13 | Enum for the scaling mode of the video view controller 14 | 15 | - Resize: Resize to fit 16 | - ResizeAspect: Resize an mantain aspect 17 | - ResizeAspectFill: Resize and fill 18 | */ 19 | public enum VideoScalingMode { 20 | case resize 21 | case resizeAspect 22 | case resizeAspectFill 23 | } 24 | -------------------------------------------------------------------------------- /VideoBackgroundViewControllerTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /VideoBackgroundViewControllerTests/VideoBackgroundControllerSpec.swift: -------------------------------------------------------------------------------- 1 | // 2 | // VideoBackgroundControllerSpec.swift 3 | // VideoBackgroundViewController 4 | // 5 | // Created by Chris Jimenez on 2/22/16. 6 | // Copyright © 2016 Chris Jimenez. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import VideoBackgroundViewController 11 | import Quick 12 | import Nimble 13 | 14 | 15 | //Specs for the delayer class 16 | class VideoBackgroundControllerSpec: QuickSpec { 17 | 18 | override func spec() { 19 | 20 | let videoBackgroundViewController = VideoBackgroundViewController() 21 | 22 | it("is correct with initial values"){ 23 | 24 | videoBackgroundViewController.videoShouldLoop = true 25 | videoBackgroundViewController.alpha = 0.8 26 | videoBackgroundViewController.playSound = false 27 | videoBackgroundViewController.videoScalingMode = .resizeAspectFill 28 | videoBackgroundViewController.videoURL = URL(fileURLWithPath: "") 29 | videoBackgroundViewController.backgroundColor = UIColor.black 30 | 31 | expect(videoBackgroundViewController.videoPlayer).notTo(beNil()) 32 | expect(videoBackgroundViewController.soundLevel).to(equal(0.0)) 33 | expect(videoBackgroundViewController.playSound).to(beFalse()) 34 | expect(videoBackgroundViewController.videoShouldLoop).to(beTrue()) 35 | expect(videoBackgroundViewController.backgroundColor).to(equal(UIColor.black)) 36 | } 37 | 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /Web/videoBackgroundViewController.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PiXeL16/VideoBackgroundViewController/1876ae08fc6bb45e3359005a4da07f0381219acb/Web/videoBackgroundViewController.gif -------------------------------------------------------------------------------- /Web/videoBackgroundViewControllerBanner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PiXeL16/VideoBackgroundViewController/1876ae08fc6bb45e3359005a4da07f0381219acb/Web/videoBackgroundViewControllerBanner.png --------------------------------------------------------------------------------