├── .gitignore ├── .swift-version ├── .travis.yml ├── Example ├── PlayerView.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── PlayerView-Example.xcscheme ├── PlayerView.xcworkspace │ └── contents.xcworkspacedata ├── PlayerView │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── PauseButton.imageset │ │ │ ├── Contents.json │ │ │ ├── PauseButton.png │ │ │ ├── PauseButton@2x.png │ │ │ └── PauseButton@3x.png │ │ ├── PlayButton.imageset │ │ │ ├── Contents.json │ │ │ ├── PlayButton.png │ │ │ ├── PlayButton@2x.png │ │ │ └── PlayButton@3x.png │ │ ├── ScanBackwardButton.imageset │ │ │ ├── Contents.json │ │ │ ├── ScanBackwardButton.png │ │ │ ├── ScanBackwardButton@2x.png │ │ │ └── ScanBackwardButton@3x.png │ │ └── ScanForwardButton.imageset │ │ │ ├── Contents.json │ │ │ ├── ScanForwardButton.png │ │ │ ├── ScanForwardButton@2x.png │ │ │ └── ScanForwardButton@3x.png │ ├── Info.plist │ └── ViewController.swift ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ └── PlayerView.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── PlayerView.xcscheme │ └── Target Support Files │ │ ├── PlayerView │ │ ├── Info.plist │ │ ├── PlayerView-dummy.m │ │ ├── PlayerView-prefix.pch │ │ ├── PlayerView-umbrella.h │ │ ├── PlayerView.modulemap │ │ └── PlayerView.xcconfig │ │ ├── Pods-PlayerView_Example │ │ ├── Info.plist │ │ ├── Pods-PlayerView_Example-acknowledgements.markdown │ │ ├── Pods-PlayerView_Example-acknowledgements.plist │ │ ├── Pods-PlayerView_Example-dummy.m │ │ ├── Pods-PlayerView_Example-frameworks.sh │ │ ├── Pods-PlayerView_Example-resources.sh │ │ ├── Pods-PlayerView_Example-umbrella.h │ │ ├── Pods-PlayerView_Example.debug.xcconfig │ │ ├── Pods-PlayerView_Example.modulemap │ │ └── Pods-PlayerView_Example.release.xcconfig │ │ └── Pods-PlayerView_Tests │ │ ├── Info.plist │ │ ├── Pods-PlayerView_Tests-acknowledgements.markdown │ │ ├── Pods-PlayerView_Tests-acknowledgements.plist │ │ ├── Pods-PlayerView_Tests-dummy.m │ │ ├── Pods-PlayerView_Tests-frameworks.sh │ │ ├── Pods-PlayerView_Tests-resources.sh │ │ ├── Pods-PlayerView_Tests-umbrella.h │ │ ├── Pods-PlayerView_Tests.debug.xcconfig │ │ ├── Pods-PlayerView_Tests.modulemap │ │ └── Pods-PlayerView_Tests.release.xcconfig └── Tests │ ├── Info.plist │ └── Tests.swift ├── LICENSE ├── PlayerView.podspec ├── README.md ├── Sources └── Classes │ └── PlayerView.swift └── _Pods.xcodeproj /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata 19 | 20 | ## Other 21 | *.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 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 4.0 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * http://www.objc.io/issue-6/travis-ci.html 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | language: objective-c 6 | # cache: cocoapods 7 | # podfile: Example/Podfile 8 | # before_install: 9 | # - gem install cocoapods # Since Travis is not always on latest version 10 | # - pod install --project-directory=Example 11 | script: 12 | - set -o pipefail && xcodebuild test -workspace Example/PlayerView.xcworkspace -scheme PlayerView-Example -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO | xcpretty 13 | - pod lib lint 14 | -------------------------------------------------------------------------------- /Example/PlayerView.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 5E2A1EFCE04E29467A4804DA /* Pods_PlayerView_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 54DF5A0892F26A1BF6237466 /* Pods_PlayerView_Example.framework */; }; 11 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 12 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; }; 13 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; 14 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 15 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 16 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; 17 | FC792F025269EA1C559CA608 /* Pods_PlayerView_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7600070FC6672F1AD35B0629 /* Pods_PlayerView_Tests.framework */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXContainerItemProxy section */ 21 | 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = { 22 | isa = PBXContainerItemProxy; 23 | containerPortal = 607FACC81AFB9204008FA782 /* Project object */; 24 | proxyType = 1; 25 | remoteGlobalIDString = 607FACCF1AFB9204008FA782; 26 | remoteInfo = PlayerView; 27 | }; 28 | /* End PBXContainerItemProxy section */ 29 | 30 | /* Begin PBXFileReference section */ 31 | 078C27D2574F85F15AD8C196 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 32 | 33BE42E2FF222DAE346AC414 /* Pods-PlayerView_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PlayerView_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests.release.xcconfig"; sourceTree = ""; }; 33 | 34B6A3C45CEF90D330A2FEA2 /* Pods-PlayerView_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PlayerView_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example.release.xcconfig"; sourceTree = ""; }; 34 | 54DF5A0892F26A1BF6237466 /* Pods_PlayerView_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PlayerView_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | 607FACD01AFB9204008FA782 /* PlayerView_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PlayerView_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 36 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 37 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 38 | 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 39 | 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 40 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 41 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 42 | 607FACE51AFB9204008FA782 /* PlayerView_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PlayerView_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 43 | 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 44 | 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; 45 | 7600070FC6672F1AD35B0629 /* Pods_PlayerView_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PlayerView_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | A1E7C8D319845A68B217F23B /* PlayerView.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = PlayerView.podspec; path = ../PlayerView.podspec; sourceTree = ""; }; 47 | AF66F5D25BB8C1A2F161D63F /* Pods-PlayerView_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PlayerView_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests.debug.xcconfig"; sourceTree = ""; }; 48 | B7B67CE12161A5C6D9A83321 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 49 | C5A6E5D50CB1299729B5EC9E /* Pods-PlayerView_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PlayerView_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example.debug.xcconfig"; sourceTree = ""; }; 50 | /* End PBXFileReference section */ 51 | 52 | /* Begin PBXFrameworksBuildPhase section */ 53 | 607FACCD1AFB9204008FA782 /* Frameworks */ = { 54 | isa = PBXFrameworksBuildPhase; 55 | buildActionMask = 2147483647; 56 | files = ( 57 | 5E2A1EFCE04E29467A4804DA /* Pods_PlayerView_Example.framework in Frameworks */, 58 | ); 59 | runOnlyForDeploymentPostprocessing = 0; 60 | }; 61 | 607FACE21AFB9204008FA782 /* Frameworks */ = { 62 | isa = PBXFrameworksBuildPhase; 63 | buildActionMask = 2147483647; 64 | files = ( 65 | FC792F025269EA1C559CA608 /* Pods_PlayerView_Tests.framework in Frameworks */, 66 | ); 67 | runOnlyForDeploymentPostprocessing = 0; 68 | }; 69 | /* End PBXFrameworksBuildPhase section */ 70 | 71 | /* Begin PBXGroup section */ 72 | 607FACC71AFB9204008FA782 = { 73 | isa = PBXGroup; 74 | children = ( 75 | 607FACF51AFB993E008FA782 /* Podspec Metadata */, 76 | 607FACD21AFB9204008FA782 /* Example for PlayerView */, 77 | 607FACE81AFB9204008FA782 /* Tests */, 78 | 607FACD11AFB9204008FA782 /* Products */, 79 | C066D9CFC92FB7E0514F010E /* Pods */, 80 | C73610816DCB1235A9D8EF1F /* Frameworks */, 81 | ); 82 | sourceTree = ""; 83 | }; 84 | 607FACD11AFB9204008FA782 /* Products */ = { 85 | isa = PBXGroup; 86 | children = ( 87 | 607FACD01AFB9204008FA782 /* PlayerView_Example.app */, 88 | 607FACE51AFB9204008FA782 /* PlayerView_Tests.xctest */, 89 | ); 90 | name = Products; 91 | sourceTree = ""; 92 | }; 93 | 607FACD21AFB9204008FA782 /* Example for PlayerView */ = { 94 | isa = PBXGroup; 95 | children = ( 96 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */, 97 | 607FACD71AFB9204008FA782 /* ViewController.swift */, 98 | 607FACD91AFB9204008FA782 /* Main.storyboard */, 99 | 607FACDC1AFB9204008FA782 /* Images.xcassets */, 100 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, 101 | 607FACD31AFB9204008FA782 /* Supporting Files */, 102 | ); 103 | name = "Example for PlayerView"; 104 | path = PlayerView; 105 | sourceTree = ""; 106 | }; 107 | 607FACD31AFB9204008FA782 /* Supporting Files */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | 607FACD41AFB9204008FA782 /* Info.plist */, 111 | ); 112 | name = "Supporting Files"; 113 | sourceTree = ""; 114 | }; 115 | 607FACE81AFB9204008FA782 /* Tests */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | 607FACEB1AFB9204008FA782 /* Tests.swift */, 119 | 607FACE91AFB9204008FA782 /* Supporting Files */, 120 | ); 121 | path = Tests; 122 | sourceTree = ""; 123 | }; 124 | 607FACE91AFB9204008FA782 /* Supporting Files */ = { 125 | isa = PBXGroup; 126 | children = ( 127 | 607FACEA1AFB9204008FA782 /* Info.plist */, 128 | ); 129 | name = "Supporting Files"; 130 | sourceTree = ""; 131 | }; 132 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { 133 | isa = PBXGroup; 134 | children = ( 135 | A1E7C8D319845A68B217F23B /* PlayerView.podspec */, 136 | B7B67CE12161A5C6D9A83321 /* README.md */, 137 | 078C27D2574F85F15AD8C196 /* LICENSE */, 138 | ); 139 | name = "Podspec Metadata"; 140 | sourceTree = ""; 141 | }; 142 | C066D9CFC92FB7E0514F010E /* Pods */ = { 143 | isa = PBXGroup; 144 | children = ( 145 | C5A6E5D50CB1299729B5EC9E /* Pods-PlayerView_Example.debug.xcconfig */, 146 | 34B6A3C45CEF90D330A2FEA2 /* Pods-PlayerView_Example.release.xcconfig */, 147 | AF66F5D25BB8C1A2F161D63F /* Pods-PlayerView_Tests.debug.xcconfig */, 148 | 33BE42E2FF222DAE346AC414 /* Pods-PlayerView_Tests.release.xcconfig */, 149 | ); 150 | name = Pods; 151 | sourceTree = ""; 152 | }; 153 | C73610816DCB1235A9D8EF1F /* Frameworks */ = { 154 | isa = PBXGroup; 155 | children = ( 156 | 54DF5A0892F26A1BF6237466 /* Pods_PlayerView_Example.framework */, 157 | 7600070FC6672F1AD35B0629 /* Pods_PlayerView_Tests.framework */, 158 | ); 159 | name = Frameworks; 160 | sourceTree = ""; 161 | }; 162 | /* End PBXGroup section */ 163 | 164 | /* Begin PBXNativeTarget section */ 165 | 607FACCF1AFB9204008FA782 /* PlayerView_Example */ = { 166 | isa = PBXNativeTarget; 167 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "PlayerView_Example" */; 168 | buildPhases = ( 169 | F80247313337F8C518B0006B /* Check Pods Manifest.lock */, 170 | 607FACCC1AFB9204008FA782 /* Sources */, 171 | 607FACCD1AFB9204008FA782 /* Frameworks */, 172 | 607FACCE1AFB9204008FA782 /* Resources */, 173 | 65BC637071F44A55258CAEA8 /* Embed Pods Frameworks */, 174 | 41D5EF7D0A708BB99C13B2D2 /* Copy Pods Resources */, 175 | ); 176 | buildRules = ( 177 | ); 178 | dependencies = ( 179 | ); 180 | name = PlayerView_Example; 181 | productName = PlayerView; 182 | productReference = 607FACD01AFB9204008FA782 /* PlayerView_Example.app */; 183 | productType = "com.apple.product-type.application"; 184 | }; 185 | 607FACE41AFB9204008FA782 /* PlayerView_Tests */ = { 186 | isa = PBXNativeTarget; 187 | buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "PlayerView_Tests" */; 188 | buildPhases = ( 189 | C2A2B87043E511C01675102F /* Check Pods Manifest.lock */, 190 | 607FACE11AFB9204008FA782 /* Sources */, 191 | 607FACE21AFB9204008FA782 /* Frameworks */, 192 | 607FACE31AFB9204008FA782 /* Resources */, 193 | 4C305D513B7937FFAE7252FC /* Embed Pods Frameworks */, 194 | 3B0202BD9A8DDB1800F17B31 /* Copy Pods Resources */, 195 | ); 196 | buildRules = ( 197 | ); 198 | dependencies = ( 199 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */, 200 | ); 201 | name = PlayerView_Tests; 202 | productName = Tests; 203 | productReference = 607FACE51AFB9204008FA782 /* PlayerView_Tests.xctest */; 204 | productType = "com.apple.product-type.bundle.unit-test"; 205 | }; 206 | /* End PBXNativeTarget section */ 207 | 208 | /* Begin PBXProject section */ 209 | 607FACC81AFB9204008FA782 /* Project object */ = { 210 | isa = PBXProject; 211 | attributes = { 212 | LastSwiftUpdateCheck = 0720; 213 | LastUpgradeCheck = 0720; 214 | ORGANIZATIONNAME = CocoaPods; 215 | TargetAttributes = { 216 | 607FACCF1AFB9204008FA782 = { 217 | CreatedOnToolsVersion = 6.3.1; 218 | }; 219 | 607FACE41AFB9204008FA782 = { 220 | CreatedOnToolsVersion = 6.3.1; 221 | TestTargetID = 607FACCF1AFB9204008FA782; 222 | }; 223 | }; 224 | }; 225 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "PlayerView" */; 226 | compatibilityVersion = "Xcode 3.2"; 227 | developmentRegion = English; 228 | hasScannedForEncodings = 0; 229 | knownRegions = ( 230 | en, 231 | Base, 232 | ); 233 | mainGroup = 607FACC71AFB9204008FA782; 234 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 235 | projectDirPath = ""; 236 | projectRoot = ""; 237 | targets = ( 238 | 607FACCF1AFB9204008FA782 /* PlayerView_Example */, 239 | 607FACE41AFB9204008FA782 /* PlayerView_Tests */, 240 | ); 241 | }; 242 | /* End PBXProject section */ 243 | 244 | /* Begin PBXResourcesBuildPhase section */ 245 | 607FACCE1AFB9204008FA782 /* Resources */ = { 246 | isa = PBXResourcesBuildPhase; 247 | buildActionMask = 2147483647; 248 | files = ( 249 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 250 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, 251 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, 252 | ); 253 | runOnlyForDeploymentPostprocessing = 0; 254 | }; 255 | 607FACE31AFB9204008FA782 /* Resources */ = { 256 | isa = PBXResourcesBuildPhase; 257 | buildActionMask = 2147483647; 258 | files = ( 259 | ); 260 | runOnlyForDeploymentPostprocessing = 0; 261 | }; 262 | /* End PBXResourcesBuildPhase section */ 263 | 264 | /* Begin PBXShellScriptBuildPhase section */ 265 | 3B0202BD9A8DDB1800F17B31 /* Copy Pods Resources */ = { 266 | isa = PBXShellScriptBuildPhase; 267 | buildActionMask = 2147483647; 268 | files = ( 269 | ); 270 | inputPaths = ( 271 | ); 272 | name = "Copy Pods Resources"; 273 | outputPaths = ( 274 | ); 275 | runOnlyForDeploymentPostprocessing = 0; 276 | shellPath = /bin/sh; 277 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests-resources.sh\"\n"; 278 | showEnvVarsInLog = 0; 279 | }; 280 | 41D5EF7D0A708BB99C13B2D2 /* Copy Pods Resources */ = { 281 | isa = PBXShellScriptBuildPhase; 282 | buildActionMask = 2147483647; 283 | files = ( 284 | ); 285 | inputPaths = ( 286 | ); 287 | name = "Copy Pods Resources"; 288 | outputPaths = ( 289 | ); 290 | runOnlyForDeploymentPostprocessing = 0; 291 | shellPath = /bin/sh; 292 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example-resources.sh\"\n"; 293 | showEnvVarsInLog = 0; 294 | }; 295 | 4C305D513B7937FFAE7252FC /* Embed Pods Frameworks */ = { 296 | isa = PBXShellScriptBuildPhase; 297 | buildActionMask = 2147483647; 298 | files = ( 299 | ); 300 | inputPaths = ( 301 | ); 302 | name = "Embed Pods Frameworks"; 303 | outputPaths = ( 304 | ); 305 | runOnlyForDeploymentPostprocessing = 0; 306 | shellPath = /bin/sh; 307 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests-frameworks.sh\"\n"; 308 | showEnvVarsInLog = 0; 309 | }; 310 | 65BC637071F44A55258CAEA8 /* Embed Pods Frameworks */ = { 311 | isa = PBXShellScriptBuildPhase; 312 | buildActionMask = 2147483647; 313 | files = ( 314 | ); 315 | inputPaths = ( 316 | ); 317 | name = "Embed Pods Frameworks"; 318 | outputPaths = ( 319 | ); 320 | runOnlyForDeploymentPostprocessing = 0; 321 | shellPath = /bin/sh; 322 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example-frameworks.sh\"\n"; 323 | showEnvVarsInLog = 0; 324 | }; 325 | C2A2B87043E511C01675102F /* Check Pods Manifest.lock */ = { 326 | isa = PBXShellScriptBuildPhase; 327 | buildActionMask = 2147483647; 328 | files = ( 329 | ); 330 | inputPaths = ( 331 | ); 332 | name = "Check Pods Manifest.lock"; 333 | outputPaths = ( 334 | ); 335 | runOnlyForDeploymentPostprocessing = 0; 336 | shellPath = /bin/sh; 337 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 338 | showEnvVarsInLog = 0; 339 | }; 340 | F80247313337F8C518B0006B /* Check Pods Manifest.lock */ = { 341 | isa = PBXShellScriptBuildPhase; 342 | buildActionMask = 2147483647; 343 | files = ( 344 | ); 345 | inputPaths = ( 346 | ); 347 | name = "Check Pods Manifest.lock"; 348 | outputPaths = ( 349 | ); 350 | runOnlyForDeploymentPostprocessing = 0; 351 | shellPath = /bin/sh; 352 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 353 | showEnvVarsInLog = 0; 354 | }; 355 | /* End PBXShellScriptBuildPhase section */ 356 | 357 | /* Begin PBXSourcesBuildPhase section */ 358 | 607FACCC1AFB9204008FA782 /* Sources */ = { 359 | isa = PBXSourcesBuildPhase; 360 | buildActionMask = 2147483647; 361 | files = ( 362 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */, 363 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, 364 | ); 365 | runOnlyForDeploymentPostprocessing = 0; 366 | }; 367 | 607FACE11AFB9204008FA782 /* Sources */ = { 368 | isa = PBXSourcesBuildPhase; 369 | buildActionMask = 2147483647; 370 | files = ( 371 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, 372 | ); 373 | runOnlyForDeploymentPostprocessing = 0; 374 | }; 375 | /* End PBXSourcesBuildPhase section */ 376 | 377 | /* Begin PBXTargetDependency section */ 378 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = { 379 | isa = PBXTargetDependency; 380 | target = 607FACCF1AFB9204008FA782 /* PlayerView_Example */; 381 | targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */; 382 | }; 383 | /* End PBXTargetDependency section */ 384 | 385 | /* Begin PBXVariantGroup section */ 386 | 607FACD91AFB9204008FA782 /* Main.storyboard */ = { 387 | isa = PBXVariantGroup; 388 | children = ( 389 | 607FACDA1AFB9204008FA782 /* Base */, 390 | ); 391 | name = Main.storyboard; 392 | sourceTree = ""; 393 | }; 394 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { 395 | isa = PBXVariantGroup; 396 | children = ( 397 | 607FACDF1AFB9204008FA782 /* Base */, 398 | ); 399 | name = LaunchScreen.xib; 400 | sourceTree = ""; 401 | }; 402 | /* End PBXVariantGroup section */ 403 | 404 | /* Begin XCBuildConfiguration section */ 405 | 607FACED1AFB9204008FA782 /* Debug */ = { 406 | isa = XCBuildConfiguration; 407 | buildSettings = { 408 | ALWAYS_SEARCH_USER_PATHS = NO; 409 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 410 | CLANG_CXX_LIBRARY = "libc++"; 411 | CLANG_ENABLE_MODULES = YES; 412 | CLANG_ENABLE_OBJC_ARC = YES; 413 | CLANG_WARN_BOOL_CONVERSION = YES; 414 | CLANG_WARN_CONSTANT_CONVERSION = YES; 415 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 416 | CLANG_WARN_EMPTY_BODY = YES; 417 | CLANG_WARN_ENUM_CONVERSION = YES; 418 | CLANG_WARN_INT_CONVERSION = YES; 419 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 420 | CLANG_WARN_UNREACHABLE_CODE = YES; 421 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 422 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 423 | COPY_PHASE_STRIP = NO; 424 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 425 | ENABLE_STRICT_OBJC_MSGSEND = YES; 426 | ENABLE_TESTABILITY = YES; 427 | GCC_C_LANGUAGE_STANDARD = gnu99; 428 | GCC_DYNAMIC_NO_PIC = NO; 429 | GCC_NO_COMMON_BLOCKS = YES; 430 | GCC_OPTIMIZATION_LEVEL = 0; 431 | GCC_PREPROCESSOR_DEFINITIONS = ( 432 | "DEBUG=1", 433 | "$(inherited)", 434 | ); 435 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 436 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 437 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 438 | GCC_WARN_UNDECLARED_SELECTOR = YES; 439 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 440 | GCC_WARN_UNUSED_FUNCTION = YES; 441 | GCC_WARN_UNUSED_VARIABLE = YES; 442 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 443 | MTL_ENABLE_DEBUG_INFO = YES; 444 | ONLY_ACTIVE_ARCH = YES; 445 | SDKROOT = iphoneos; 446 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 447 | }; 448 | name = Debug; 449 | }; 450 | 607FACEE1AFB9204008FA782 /* Release */ = { 451 | isa = XCBuildConfiguration; 452 | buildSettings = { 453 | ALWAYS_SEARCH_USER_PATHS = NO; 454 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 455 | CLANG_CXX_LIBRARY = "libc++"; 456 | CLANG_ENABLE_MODULES = YES; 457 | CLANG_ENABLE_OBJC_ARC = YES; 458 | CLANG_WARN_BOOL_CONVERSION = YES; 459 | CLANG_WARN_CONSTANT_CONVERSION = YES; 460 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 461 | CLANG_WARN_EMPTY_BODY = YES; 462 | CLANG_WARN_ENUM_CONVERSION = YES; 463 | CLANG_WARN_INT_CONVERSION = YES; 464 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 465 | CLANG_WARN_UNREACHABLE_CODE = YES; 466 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 467 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 468 | COPY_PHASE_STRIP = NO; 469 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 470 | ENABLE_NS_ASSERTIONS = NO; 471 | ENABLE_STRICT_OBJC_MSGSEND = YES; 472 | GCC_C_LANGUAGE_STANDARD = gnu99; 473 | GCC_NO_COMMON_BLOCKS = YES; 474 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 475 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 476 | GCC_WARN_UNDECLARED_SELECTOR = YES; 477 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 478 | GCC_WARN_UNUSED_FUNCTION = YES; 479 | GCC_WARN_UNUSED_VARIABLE = YES; 480 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 481 | MTL_ENABLE_DEBUG_INFO = NO; 482 | SDKROOT = iphoneos; 483 | VALIDATE_PRODUCT = YES; 484 | }; 485 | name = Release; 486 | }; 487 | 607FACF01AFB9204008FA782 /* Debug */ = { 488 | isa = XCBuildConfiguration; 489 | baseConfigurationReference = C5A6E5D50CB1299729B5EC9E /* Pods-PlayerView_Example.debug.xcconfig */; 490 | buildSettings = { 491 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 492 | INFOPLIST_FILE = PlayerView/Info.plist; 493 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 494 | MODULE_NAME = ExampleApp; 495 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 496 | PRODUCT_NAME = "$(TARGET_NAME)"; 497 | TARGETED_DEVICE_FAMILY = "1,2"; 498 | }; 499 | name = Debug; 500 | }; 501 | 607FACF11AFB9204008FA782 /* Release */ = { 502 | isa = XCBuildConfiguration; 503 | baseConfigurationReference = 34B6A3C45CEF90D330A2FEA2 /* Pods-PlayerView_Example.release.xcconfig */; 504 | buildSettings = { 505 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 506 | INFOPLIST_FILE = PlayerView/Info.plist; 507 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 508 | MODULE_NAME = ExampleApp; 509 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 510 | PRODUCT_NAME = "$(TARGET_NAME)"; 511 | TARGETED_DEVICE_FAMILY = "1,2"; 512 | }; 513 | name = Release; 514 | }; 515 | 607FACF31AFB9204008FA782 /* Debug */ = { 516 | isa = XCBuildConfiguration; 517 | baseConfigurationReference = AF66F5D25BB8C1A2F161D63F /* Pods-PlayerView_Tests.debug.xcconfig */; 518 | buildSettings = { 519 | BUNDLE_LOADER = "$(TEST_HOST)"; 520 | FRAMEWORK_SEARCH_PATHS = ( 521 | "$(SDKROOT)/Developer/Library/Frameworks", 522 | "$(inherited)", 523 | ); 524 | GCC_PREPROCESSOR_DEFINITIONS = ( 525 | "DEBUG=1", 526 | "$(inherited)", 527 | ); 528 | INFOPLIST_FILE = Tests/Info.plist; 529 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 530 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 531 | PRODUCT_NAME = "$(TARGET_NAME)"; 532 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PlayerView_Example.app/PlayerView_Example"; 533 | }; 534 | name = Debug; 535 | }; 536 | 607FACF41AFB9204008FA782 /* Release */ = { 537 | isa = XCBuildConfiguration; 538 | baseConfigurationReference = 33BE42E2FF222DAE346AC414 /* Pods-PlayerView_Tests.release.xcconfig */; 539 | buildSettings = { 540 | BUNDLE_LOADER = "$(TEST_HOST)"; 541 | FRAMEWORK_SEARCH_PATHS = ( 542 | "$(SDKROOT)/Developer/Library/Frameworks", 543 | "$(inherited)", 544 | ); 545 | INFOPLIST_FILE = Tests/Info.plist; 546 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 547 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 548 | PRODUCT_NAME = "$(TARGET_NAME)"; 549 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PlayerView_Example.app/PlayerView_Example"; 550 | }; 551 | name = Release; 552 | }; 553 | /* End XCBuildConfiguration section */ 554 | 555 | /* Begin XCConfigurationList section */ 556 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "PlayerView" */ = { 557 | isa = XCConfigurationList; 558 | buildConfigurations = ( 559 | 607FACED1AFB9204008FA782 /* Debug */, 560 | 607FACEE1AFB9204008FA782 /* Release */, 561 | ); 562 | defaultConfigurationIsVisible = 0; 563 | defaultConfigurationName = Release; 564 | }; 565 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "PlayerView_Example" */ = { 566 | isa = XCConfigurationList; 567 | buildConfigurations = ( 568 | 607FACF01AFB9204008FA782 /* Debug */, 569 | 607FACF11AFB9204008FA782 /* Release */, 570 | ); 571 | defaultConfigurationIsVisible = 0; 572 | defaultConfigurationName = Release; 573 | }; 574 | 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "PlayerView_Tests" */ = { 575 | isa = XCConfigurationList; 576 | buildConfigurations = ( 577 | 607FACF31AFB9204008FA782 /* Debug */, 578 | 607FACF41AFB9204008FA782 /* Release */, 579 | ); 580 | defaultConfigurationIsVisible = 0; 581 | defaultConfigurationName = Release; 582 | }; 583 | /* End XCConfigurationList section */ 584 | }; 585 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 586 | } 587 | -------------------------------------------------------------------------------- /Example/PlayerView.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/PlayerView.xcodeproj/xcshareddata/xcschemes/PlayerView-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 99 | 105 | 106 | 107 | 108 | 110 | 111 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /Example/PlayerView.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/PlayerView/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // PlayerView 4 | // 5 | // Created by David Alejandro on 02/19/2016. 6 | // Copyright (c) 2016 David Alejandro. 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: [NSObject: AnyObject]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(application: UIApplication) { 33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /Example/PlayerView/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 21 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Example/PlayerView/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 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 45 | 56 | 67 | 73 | 74 | 75 | 76 | 77 | 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 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/PauseButton.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "PauseButton.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "PauseButton@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "PauseButton@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/PauseButton.imageset/PauseButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidlondono/PlayerView/82df3fea11da6192074361bcd0b33eee73afa9cd/Example/PlayerView/Images.xcassets/PauseButton.imageset/PauseButton.png -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/PauseButton.imageset/PauseButton@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidlondono/PlayerView/82df3fea11da6192074361bcd0b33eee73afa9cd/Example/PlayerView/Images.xcassets/PauseButton.imageset/PauseButton@2x.png -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/PauseButton.imageset/PauseButton@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidlondono/PlayerView/82df3fea11da6192074361bcd0b33eee73afa9cd/Example/PlayerView/Images.xcassets/PauseButton.imageset/PauseButton@3x.png -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/PlayButton.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "PlayButton.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "PlayButton@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "PlayButton@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/PlayButton.imageset/PlayButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidlondono/PlayerView/82df3fea11da6192074361bcd0b33eee73afa9cd/Example/PlayerView/Images.xcassets/PlayButton.imageset/PlayButton.png -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/PlayButton.imageset/PlayButton@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidlondono/PlayerView/82df3fea11da6192074361bcd0b33eee73afa9cd/Example/PlayerView/Images.xcassets/PlayButton.imageset/PlayButton@2x.png -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/PlayButton.imageset/PlayButton@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidlondono/PlayerView/82df3fea11da6192074361bcd0b33eee73afa9cd/Example/PlayerView/Images.xcassets/PlayButton.imageset/PlayButton@3x.png -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/ScanBackwardButton.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ScanBackwardButton.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ScanBackwardButton@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ScanBackwardButton@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/ScanBackwardButton.imageset/ScanBackwardButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidlondono/PlayerView/82df3fea11da6192074361bcd0b33eee73afa9cd/Example/PlayerView/Images.xcassets/ScanBackwardButton.imageset/ScanBackwardButton.png -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/ScanBackwardButton.imageset/ScanBackwardButton@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidlondono/PlayerView/82df3fea11da6192074361bcd0b33eee73afa9cd/Example/PlayerView/Images.xcassets/ScanBackwardButton.imageset/ScanBackwardButton@2x.png -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/ScanBackwardButton.imageset/ScanBackwardButton@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidlondono/PlayerView/82df3fea11da6192074361bcd0b33eee73afa9cd/Example/PlayerView/Images.xcassets/ScanBackwardButton.imageset/ScanBackwardButton@3x.png -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/ScanForwardButton.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ScanForwardButton.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ScanForwardButton@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ScanForwardButton@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/ScanForwardButton.imageset/ScanForwardButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidlondono/PlayerView/82df3fea11da6192074361bcd0b33eee73afa9cd/Example/PlayerView/Images.xcassets/ScanForwardButton.imageset/ScanForwardButton.png -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/ScanForwardButton.imageset/ScanForwardButton@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidlondono/PlayerView/82df3fea11da6192074361bcd0b33eee73afa9cd/Example/PlayerView/Images.xcassets/ScanForwardButton.imageset/ScanForwardButton@2x.png -------------------------------------------------------------------------------- /Example/PlayerView/Images.xcassets/ScanForwardButton.imageset/ScanForwardButton@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidlondono/PlayerView/82df3fea11da6192074361bcd0b33eee73afa9cd/Example/PlayerView/Images.xcassets/ScanForwardButton.imageset/ScanForwardButton@3x.png -------------------------------------------------------------------------------- /Example/PlayerView/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | 38 | 39 | 40 | NSAppTransportSecurity 41 | 42 | 43 | NSAllowsArbitraryLoads 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /Example/PlayerView/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // PlayerVideo 4 | // 5 | // Created by David Alejandro on 2/17/16. 6 | // Copyright © 2016 David Alejandro. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import PlayerView 11 | import AVFoundation 12 | 13 | 14 | private extension Selector { 15 | static let changeFill = #selector(ViewController.changeFill(_:)) 16 | } 17 | 18 | 19 | class ViewController: UIViewController { 20 | 21 | @IBOutlet var slider: UISlider! 22 | 23 | @IBOutlet var progressBar: UIProgressView! 24 | 25 | @IBOutlet var playerVideo: PlayerView! 26 | 27 | @IBOutlet var rateLabel: UILabel! 28 | 29 | @IBOutlet var playButton: UIButton! 30 | 31 | 32 | var duration: Float! 33 | var isEditingSlider = false 34 | let tap = UITapGestureRecognizer() 35 | 36 | override func viewDidLoad() { 37 | super.viewDidLoad() 38 | 39 | 40 | 41 | playerVideo.delegate = self 42 | let url1 = NSURL(string: "http://techslides.com/demos/sample-videos/small.mp4")! 43 | let url = NSURL(string: "http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4")! 44 | 45 | //playerVideo.url = url 46 | 47 | playerVideo.urls = [url1,url1] 48 | playerVideo.loopVideosQueue = true 49 | playerVideo.play() 50 | //playerVideo.addVideosOnQueue(urls: [url]) 51 | tap.numberOfTapsRequired = 2 52 | tap.addTarget(self, action: .changeFill) 53 | view.addGestureRecognizer(tap) 54 | 55 | 56 | // Do any additional setup after loading the view, typically from a nib. 57 | } 58 | 59 | @IBAction func sliderChange(sender: UISlider) { 60 | //print(sender.value) 61 | 62 | playerVideo.currentTime = Double(sender.value) 63 | } 64 | 65 | @IBAction func sliderBegin(sender: AnyObject) { 66 | print("beginEdit") 67 | isEditingSlider = true 68 | } 69 | 70 | @IBAction func sliderEnd(sender: AnyObject) { 71 | print("endEdit") 72 | isEditingSlider = false 73 | } 74 | 75 | 76 | 77 | @IBAction func backwardTouch(sender: AnyObject) { 78 | playerVideo.rate = playerVideo.rate - 0.5 79 | } 80 | 81 | @IBAction func playTouch(sender: AnyObject) { 82 | if playerVideo.rate == 0 { 83 | playerVideo.play() 84 | } else { 85 | playerVideo.pause() 86 | } 87 | } 88 | 89 | @IBAction func fowardTouch(sender: AnyObject) { 90 | playerVideo.rate = playerVideo.rate + 0.5 91 | } 92 | 93 | func changeFill(sender: AnyObject) { 94 | switch playerVideo.fillMode { 95 | case .Some(.ResizeAspect): 96 | playerVideo.fillMode = .ResizeAspectFill 97 | case .Some(.ResizeAspectFill): 98 | playerVideo.fillMode = .Resize 99 | case .Some(.Resize): 100 | playerVideo.fillMode = .ResizeAspect 101 | default: 102 | break 103 | } 104 | } 105 | override func loadView() { 106 | super.loadView() 107 | } 108 | 109 | override func didReceiveMemoryWarning() { 110 | super.didReceiveMemoryWarning() 111 | // Dispose of any resources that can be recreated. 112 | } 113 | 114 | 115 | } 116 | 117 | 118 | extension ViewController: PlayerViewDelegate { 119 | 120 | func playerVideo(player: PlayerView, statusPlayer: PVStatus, error: NSError?) { 121 | print(statusPlayer) 122 | } 123 | 124 | func playerVideo(player: PlayerView, statusItemPlayer: PVItemStatus, error: NSError?) { 125 | 126 | } 127 | func playerVideo(player: PlayerView, loadedTimeRanges: [PVTimeRange]) { 128 | 129 | let durationTotal = loadedTimeRanges.reduce(0) { (actual, range) -> Double in 130 | return actual + range.end.seconds 131 | } 132 | let dur2 = Float(durationTotal) 133 | let progress = dur2 / duration 134 | progressBar?.progress = progress 135 | 136 | if loadedTimeRanges.count > 1 { 137 | print(loadedTimeRanges.count) 138 | } 139 | //print("progress",progress) 140 | } 141 | func playerVideo(player: PlayerView, duration: Double) { 142 | //print(duration.seconds) 143 | self.duration = Float(duration) 144 | slider?.maximumValue = Float(duration) 145 | } 146 | 147 | func playerVideo(player: PlayerView, currentTime: Double) { 148 | if !isEditingSlider { 149 | slider.value = Float(currentTime) 150 | } 151 | //print("curentTime",currentTime) 152 | } 153 | 154 | func playerVideo(player: PlayerView, rate: Float) { 155 | rateLabel.text = "x\(rate)" 156 | 157 | 158 | let buttonImageName = rate == 0.0 ? "PlayButton" : "PauseButton" 159 | 160 | let buttonImage = UIImage(named: buttonImageName) 161 | 162 | playButton.setImage(buttonImage, forState: .Normal) 163 | 164 | //slider.value = Float(currentTime) 165 | //print(currentTime.seconds) 166 | } 167 | 168 | func playerVideo(playerFinished player: PlayerView) { 169 | player.next() 170 | player.play() 171 | print("video has finished") 172 | } 173 | } -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | source 'https://github.com/CocoaPods/Specs.git' 2 | use_frameworks! 3 | 4 | target 'PlayerView_Example', :exclusive => true do 5 | pod 'PlayerView', :path => '../' 6 | end 7 | 8 | target 'PlayerView_Tests', :exclusive => true do 9 | pod 'PlayerView', :path => '../' 10 | 11 | 12 | end 13 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - PlayerView (0.1.0) 3 | 4 | DEPENDENCIES: 5 | - PlayerView (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | PlayerView: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | PlayerView: 4252c1cb2fae5e3d81667dde971dc3a56d83d540 13 | 14 | COCOAPODS: 0.39.0 15 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/PlayerView.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "PlayerView", 3 | "version": "0.1.0", 4 | "summary": "A UIView for videos using AVPlayer with delegate", 5 | "description": "This Library allows to set a video on a custom UIView by setting the callbacks on a delegate for easy use. this View implements the AVPlayer from AVFoundation", 6 | "homepage": "https://github.com/davidlondono/PlayerView", 7 | "license": "MIT", 8 | "authors": { 9 | "David Alejandro": "davidlondono9@gmail.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/davidlondono/PlayerView.git", 13 | "tag": "0.1.0" 14 | }, 15 | "social_media_url": "https://twitter.com/davidlondono", 16 | "platforms": { 17 | "ios": "8.0" 18 | }, 19 | "requires_arc": true, 20 | "source_files": "Sources/**/*", 21 | "resource_bundles": { 22 | "PlayerView": [ 23 | "Pod/Assets/*.png" 24 | ] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - PlayerView (0.1.0) 3 | 4 | DEPENDENCIES: 5 | - PlayerView (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | PlayerView: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | PlayerView: 4252c1cb2fae5e3d81667dde971dc3a56d83d540 13 | 14 | COCOAPODS: 0.39.0 15 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 47; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1F3BAE442B3297D38764A3370D59C18B /* PlayerView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D7DC1B4B108659A82DD171CA58E2518 /* PlayerView-dummy.m */; }; 11 | 21681E7F7C922FCCE33A1CC1D54DD058 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E4E89230EF59BC255123B67864ACF77 /* Foundation.framework */; }; 12 | 52C4BCAE189FB20AB0A9D06D48B78A17 /* Pods-PlayerView_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B35E203BB3D50D238DE9DC59F930309C /* Pods-PlayerView_Tests-dummy.m */; }; 13 | 56516AB6B0CC08A0B73DA6A5C81A10F3 /* PlayerView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D443D852BB51443734557A7322A21C2 /* PlayerView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14 | 7A5C604640759B74E354CCE02B59BC5E /* Pods-PlayerView_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D6113081C24E719E868DF8EE3EC05601 /* Pods-PlayerView_Example-dummy.m */; }; 15 | 92BDC89000777BCC719A42099854F428 /* PlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4DF35F397BDEA9A217D5B58F7C9B3A1 /* PlayerView.swift */; }; 16 | ADC191DA73EA4BE5E04A0D18B6688A5E /* Pods-PlayerView_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 92967B2FE6122913B9E4B7BD8B22100E /* Pods-PlayerView_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 17 | BE83EB0BE18934BE8C5E6D5ABC70732D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E4E89230EF59BC255123B67864ACF77 /* Foundation.framework */; }; 18 | D2B9AE680A59635A497E80119C8F3DA2 /* Pods-PlayerView_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B595E12AF343F27C7A47CF8DF8FEE1A2 /* Pods-PlayerView_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 19 | F09B2E928BB3BAECFE0FA18F5E807943 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E4E89230EF59BC255123B67864ACF77 /* Foundation.framework */; }; 20 | F74AB8E4600992838CEDD734D5204C04 /* PlayerView.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0C5904D24CB3CA4ABADF30E3FCA1BF64 /* PlayerView.bundle */; }; 21 | /* End PBXBuildFile section */ 22 | 23 | /* Begin PBXContainerItemProxy section */ 24 | 16E8614FDDB5B7CB4B195948350B4282 /* PBXContainerItemProxy */ = { 25 | isa = PBXContainerItemProxy; 26 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 27 | proxyType = 1; 28 | remoteGlobalIDString = 2283F2F713CE2EC02E80A59393D2947C; 29 | remoteInfo = PlayerView; 30 | }; 31 | 34B69BCAA4FEE6023463E845E382618C /* PBXContainerItemProxy */ = { 32 | isa = PBXContainerItemProxy; 33 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 34 | proxyType = 1; 35 | remoteGlobalIDString = 2283F2F713CE2EC02E80A59393D2947C; 36 | remoteInfo = PlayerView; 37 | }; 38 | D1BCA18468158B3C4F3ADAD29AF84891 /* PBXContainerItemProxy */ = { 39 | isa = PBXContainerItemProxy; 40 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 41 | proxyType = 1; 42 | remoteGlobalIDString = A05E7B8CE5EF8E125E1CAA5F0F39CDE7; 43 | remoteInfo = "PlayerView-PlayerView"; 44 | }; 45 | /* End PBXContainerItemProxy section */ 46 | 47 | /* Begin PBXFileReference section */ 48 | 04D689CF02FE45EB710C77E46F3C95A7 /* Pods-PlayerView_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-PlayerView_Tests-acknowledgements.plist"; sourceTree = ""; }; 49 | 0C5904D24CB3CA4ABADF30E3FCA1BF64 /* PlayerView.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PlayerView.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 50 | 17CEBE75A79912694D8A2F06D07C9B14 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 51 | 1F7A7115060323942E1E8AC19CD24E21 /* Pods-PlayerView_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PlayerView_Example.release.xcconfig"; sourceTree = ""; }; 52 | 2CBB57DB44A471914FEC5D8E8D693499 /* Pods-PlayerView_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PlayerView_Tests.debug.xcconfig"; sourceTree = ""; }; 53 | 300D5F01688D78FCF45EB6A4452A6FAD /* Pods-PlayerView_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-PlayerView_Tests-frameworks.sh"; sourceTree = ""; }; 54 | 353A6047E6A24361AC5AEABBD4B681AE /* PlayerView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PlayerView-prefix.pch"; sourceTree = ""; }; 55 | 374F48B685293E22DDB2394B8F9FBEA6 /* Pods_PlayerView_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PlayerView_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | 3B1E648FA0278BD3685C6224EA001B62 /* Pods_PlayerView_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PlayerView_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 57 | 3D5395F17923B68FE2114BBD0FB4CD31 /* Pods-PlayerView_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PlayerView_Example.debug.xcconfig"; sourceTree = ""; }; 58 | 3E4E89230EF59BC255123B67864ACF77 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 59 | 46A9A71590E7C03D96B602131E868E2F /* Pods-PlayerView_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-PlayerView_Example.modulemap"; sourceTree = ""; }; 60 | 4ABF6456088C7301AEC8E0079BF30DA3 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 61 | 52AA42E4833A88010C6FC240848EE339 /* Pods-PlayerView_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-PlayerView_Example-resources.sh"; sourceTree = ""; }; 62 | 68732CBD4565897FD8F126DE23437861 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 63 | 70CD1F638A2CC3A856EF7D38320AE4CC /* PlayerView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PlayerView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 64 | 7D7DC1B4B108659A82DD171CA58E2518 /* PlayerView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PlayerView-dummy.m"; sourceTree = ""; }; 65 | 8E6999E14E82BD8D826C24D59FC6E3E0 /* Pods-PlayerView_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-PlayerView_Example-frameworks.sh"; sourceTree = ""; }; 66 | 92967B2FE6122913B9E4B7BD8B22100E /* Pods-PlayerView_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-PlayerView_Example-umbrella.h"; sourceTree = ""; }; 67 | 9D443D852BB51443734557A7322A21C2 /* PlayerView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PlayerView-umbrella.h"; sourceTree = ""; }; 68 | A25C83818798417E2CB356279EA7D826 /* Pods-PlayerView_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-PlayerView_Example-acknowledgements.plist"; sourceTree = ""; }; 69 | A8B23CA9D7A6A33A0718BB5411A10E3E /* PlayerView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PlayerView.xcconfig; sourceTree = ""; }; 70 | B168E825FACFF4B051A2C03A8159F371 /* Pods-PlayerView_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-PlayerView_Example-acknowledgements.markdown"; sourceTree = ""; }; 71 | B35E203BB3D50D238DE9DC59F930309C /* Pods-PlayerView_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-PlayerView_Tests-dummy.m"; sourceTree = ""; }; 72 | B595E12AF343F27C7A47CF8DF8FEE1A2 /* Pods-PlayerView_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-PlayerView_Tests-umbrella.h"; sourceTree = ""; }; 73 | B6F8C975E2E3BE43DDB83B6BBEE1D8D1 /* PlayerView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = PlayerView.modulemap; sourceTree = ""; }; 74 | BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 75 | C4DF35F397BDEA9A217D5B58F7C9B3A1 /* PlayerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PlayerView.swift; sourceTree = ""; }; 76 | CF420F14214B7AEABE69B4F3B2D74DAE /* Pods-PlayerView_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-PlayerView_Tests.modulemap"; sourceTree = ""; }; 77 | D053C5141633AB79DAF770905BBF5CC6 /* Pods-PlayerView_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PlayerView_Tests.release.xcconfig"; sourceTree = ""; }; 78 | D1BFE91201EE81785549B8A325130EAD /* Pods-PlayerView_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-PlayerView_Tests-resources.sh"; sourceTree = ""; }; 79 | D6113081C24E719E868DF8EE3EC05601 /* Pods-PlayerView_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-PlayerView_Example-dummy.m"; sourceTree = ""; }; 80 | E331380A1771ACCFDF23838E71EAB9D9 /* Pods-PlayerView_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-PlayerView_Tests-acknowledgements.markdown"; sourceTree = ""; }; 81 | /* End PBXFileReference section */ 82 | 83 | /* Begin PBXFrameworksBuildPhase section */ 84 | 0794EC31C729D398E72E0FAD97E2B386 /* Frameworks */ = { 85 | isa = PBXFrameworksBuildPhase; 86 | buildActionMask = 2147483647; 87 | files = ( 88 | 21681E7F7C922FCCE33A1CC1D54DD058 /* Foundation.framework in Frameworks */, 89 | ); 90 | runOnlyForDeploymentPostprocessing = 0; 91 | }; 92 | 426AF4213A90D3D54227C5715C5A1AB4 /* Frameworks */ = { 93 | isa = PBXFrameworksBuildPhase; 94 | buildActionMask = 2147483647; 95 | files = ( 96 | ); 97 | runOnlyForDeploymentPostprocessing = 0; 98 | }; 99 | 6C79F39E0BCE6AC841C01015B66A2F72 /* Frameworks */ = { 100 | isa = PBXFrameworksBuildPhase; 101 | buildActionMask = 2147483647; 102 | files = ( 103 | BE83EB0BE18934BE8C5E6D5ABC70732D /* Foundation.framework in Frameworks */, 104 | ); 105 | runOnlyForDeploymentPostprocessing = 0; 106 | }; 107 | DA77EBCF0834C19F1952DCE5A4C9B6CA /* Frameworks */ = { 108 | isa = PBXFrameworksBuildPhase; 109 | buildActionMask = 2147483647; 110 | files = ( 111 | F09B2E928BB3BAECFE0FA18F5E807943 /* Foundation.framework in Frameworks */, 112 | ); 113 | runOnlyForDeploymentPostprocessing = 0; 114 | }; 115 | /* End PBXFrameworksBuildPhase section */ 116 | 117 | /* Begin PBXGroup section */ 118 | 0C7A62B128DB6D0BA8E0013B9F8E5609 /* Sources */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | EAEFE49D57F96C09801EC2C430997600 /* Classes */, 122 | ); 123 | path = Sources; 124 | sourceTree = ""; 125 | }; 126 | 47CE2786DDB0F59F5C785FCA0F5C7006 /* Development Pods */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | 72C15D86E1F27DE5BCBB83BD68446159 /* PlayerView */, 130 | ); 131 | name = "Development Pods"; 132 | sourceTree = ""; 133 | }; 134 | 72C15D86E1F27DE5BCBB83BD68446159 /* PlayerView */ = { 135 | isa = PBXGroup; 136 | children = ( 137 | 0C7A62B128DB6D0BA8E0013B9F8E5609 /* Sources */, 138 | 960817E120EFD1CAB6EE8B61A2482875 /* Support Files */, 139 | ); 140 | name = PlayerView; 141 | path = ../..; 142 | sourceTree = ""; 143 | }; 144 | 7DB346D0F39D3F0E887471402A8071AB = { 145 | isa = PBXGroup; 146 | children = ( 147 | BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, 148 | 47CE2786DDB0F59F5C785FCA0F5C7006 /* Development Pods */, 149 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, 150 | A63CC9ABA0431B2639095A51A35106FD /* Products */, 151 | B5B315126733E9E5B8704E5BEEEF1473 /* Targets Support Files */, 152 | ); 153 | sourceTree = ""; 154 | }; 155 | 960817E120EFD1CAB6EE8B61A2482875 /* Support Files */ = { 156 | isa = PBXGroup; 157 | children = ( 158 | 4ABF6456088C7301AEC8E0079BF30DA3 /* Info.plist */, 159 | B6F8C975E2E3BE43DDB83B6BBEE1D8D1 /* PlayerView.modulemap */, 160 | A8B23CA9D7A6A33A0718BB5411A10E3E /* PlayerView.xcconfig */, 161 | 7D7DC1B4B108659A82DD171CA58E2518 /* PlayerView-dummy.m */, 162 | 353A6047E6A24361AC5AEABBD4B681AE /* PlayerView-prefix.pch */, 163 | 9D443D852BB51443734557A7322A21C2 /* PlayerView-umbrella.h */, 164 | ); 165 | name = "Support Files"; 166 | path = "Example/Pods/Target Support Files/PlayerView"; 167 | sourceTree = ""; 168 | }; 169 | A5020C51F6DB75A8A2EEA5E3C7026F5A /* Pods-PlayerView_Example */ = { 170 | isa = PBXGroup; 171 | children = ( 172 | 17CEBE75A79912694D8A2F06D07C9B14 /* Info.plist */, 173 | 46A9A71590E7C03D96B602131E868E2F /* Pods-PlayerView_Example.modulemap */, 174 | B168E825FACFF4B051A2C03A8159F371 /* Pods-PlayerView_Example-acknowledgements.markdown */, 175 | A25C83818798417E2CB356279EA7D826 /* Pods-PlayerView_Example-acknowledgements.plist */, 176 | D6113081C24E719E868DF8EE3EC05601 /* Pods-PlayerView_Example-dummy.m */, 177 | 8E6999E14E82BD8D826C24D59FC6E3E0 /* Pods-PlayerView_Example-frameworks.sh */, 178 | 52AA42E4833A88010C6FC240848EE339 /* Pods-PlayerView_Example-resources.sh */, 179 | 92967B2FE6122913B9E4B7BD8B22100E /* Pods-PlayerView_Example-umbrella.h */, 180 | 3D5395F17923B68FE2114BBD0FB4CD31 /* Pods-PlayerView_Example.debug.xcconfig */, 181 | 1F7A7115060323942E1E8AC19CD24E21 /* Pods-PlayerView_Example.release.xcconfig */, 182 | ); 183 | name = "Pods-PlayerView_Example"; 184 | path = "Target Support Files/Pods-PlayerView_Example"; 185 | sourceTree = ""; 186 | }; 187 | A63CC9ABA0431B2639095A51A35106FD /* Products */ = { 188 | isa = PBXGroup; 189 | children = ( 190 | 0C5904D24CB3CA4ABADF30E3FCA1BF64 /* PlayerView.bundle */, 191 | 70CD1F638A2CC3A856EF7D38320AE4CC /* PlayerView.framework */, 192 | 3B1E648FA0278BD3685C6224EA001B62 /* Pods_PlayerView_Example.framework */, 193 | 374F48B685293E22DDB2394B8F9FBEA6 /* Pods_PlayerView_Tests.framework */, 194 | ); 195 | name = Products; 196 | sourceTree = ""; 197 | }; 198 | B5B315126733E9E5B8704E5BEEEF1473 /* Targets Support Files */ = { 199 | isa = PBXGroup; 200 | children = ( 201 | A5020C51F6DB75A8A2EEA5E3C7026F5A /* Pods-PlayerView_Example */, 202 | CA77575583C5E599946361A69B51B360 /* Pods-PlayerView_Tests */, 203 | ); 204 | name = "Targets Support Files"; 205 | sourceTree = ""; 206 | }; 207 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { 208 | isa = PBXGroup; 209 | children = ( 210 | BF6342C8B29F4CEEA088EFF7AB4DE362 /* iOS */, 211 | ); 212 | name = Frameworks; 213 | sourceTree = ""; 214 | }; 215 | BF6342C8B29F4CEEA088EFF7AB4DE362 /* iOS */ = { 216 | isa = PBXGroup; 217 | children = ( 218 | 3E4E89230EF59BC255123B67864ACF77 /* Foundation.framework */, 219 | ); 220 | name = iOS; 221 | sourceTree = ""; 222 | }; 223 | CA77575583C5E599946361A69B51B360 /* Pods-PlayerView_Tests */ = { 224 | isa = PBXGroup; 225 | children = ( 226 | 68732CBD4565897FD8F126DE23437861 /* Info.plist */, 227 | CF420F14214B7AEABE69B4F3B2D74DAE /* Pods-PlayerView_Tests.modulemap */, 228 | E331380A1771ACCFDF23838E71EAB9D9 /* Pods-PlayerView_Tests-acknowledgements.markdown */, 229 | 04D689CF02FE45EB710C77E46F3C95A7 /* Pods-PlayerView_Tests-acknowledgements.plist */, 230 | B35E203BB3D50D238DE9DC59F930309C /* Pods-PlayerView_Tests-dummy.m */, 231 | 300D5F01688D78FCF45EB6A4452A6FAD /* Pods-PlayerView_Tests-frameworks.sh */, 232 | D1BFE91201EE81785549B8A325130EAD /* Pods-PlayerView_Tests-resources.sh */, 233 | B595E12AF343F27C7A47CF8DF8FEE1A2 /* Pods-PlayerView_Tests-umbrella.h */, 234 | 2CBB57DB44A471914FEC5D8E8D693499 /* Pods-PlayerView_Tests.debug.xcconfig */, 235 | D053C5141633AB79DAF770905BBF5CC6 /* Pods-PlayerView_Tests.release.xcconfig */, 236 | ); 237 | name = "Pods-PlayerView_Tests"; 238 | path = "Target Support Files/Pods-PlayerView_Tests"; 239 | sourceTree = ""; 240 | }; 241 | EAEFE49D57F96C09801EC2C430997600 /* Classes */ = { 242 | isa = PBXGroup; 243 | children = ( 244 | C4DF35F397BDEA9A217D5B58F7C9B3A1 /* PlayerView.swift */, 245 | ); 246 | path = Classes; 247 | sourceTree = ""; 248 | }; 249 | /* End PBXGroup section */ 250 | 251 | /* Begin PBXHeadersBuildPhase section */ 252 | 3E6D3FE5C5CE65E4EAF6AF517D487DB2 /* Headers */ = { 253 | isa = PBXHeadersBuildPhase; 254 | buildActionMask = 2147483647; 255 | files = ( 256 | 56516AB6B0CC08A0B73DA6A5C81A10F3 /* PlayerView-umbrella.h in Headers */, 257 | ); 258 | runOnlyForDeploymentPostprocessing = 0; 259 | }; 260 | 471607E72958F21E128181653EA2F8DA /* Headers */ = { 261 | isa = PBXHeadersBuildPhase; 262 | buildActionMask = 2147483647; 263 | files = ( 264 | ADC191DA73EA4BE5E04A0D18B6688A5E /* Pods-PlayerView_Example-umbrella.h in Headers */, 265 | ); 266 | runOnlyForDeploymentPostprocessing = 0; 267 | }; 268 | 7C8F018D8FC6AFD10E21D477900EBAD6 /* Headers */ = { 269 | isa = PBXHeadersBuildPhase; 270 | buildActionMask = 2147483647; 271 | files = ( 272 | D2B9AE680A59635A497E80119C8F3DA2 /* Pods-PlayerView_Tests-umbrella.h in Headers */, 273 | ); 274 | runOnlyForDeploymentPostprocessing = 0; 275 | }; 276 | /* End PBXHeadersBuildPhase section */ 277 | 278 | /* Begin PBXNativeTarget section */ 279 | 2283F2F713CE2EC02E80A59393D2947C /* PlayerView */ = { 280 | isa = PBXNativeTarget; 281 | buildConfigurationList = 910DEB7CFC9BF2E65D399BC497343B40 /* Build configuration list for PBXNativeTarget "PlayerView" */; 282 | buildPhases = ( 283 | 50395A8DFE3B7AC18E17044A4F557B56 /* Sources */, 284 | 0794EC31C729D398E72E0FAD97E2B386 /* Frameworks */, 285 | 63705BEC26E0F5D6FC9D31E5C2E1FBE5 /* Resources */, 286 | 3E6D3FE5C5CE65E4EAF6AF517D487DB2 /* Headers */, 287 | ); 288 | buildRules = ( 289 | ); 290 | dependencies = ( 291 | 5911DDF759CCBE19EC32506E813D1F02 /* PBXTargetDependency */, 292 | ); 293 | name = PlayerView; 294 | productName = PlayerView; 295 | productReference = 70CD1F638A2CC3A856EF7D38320AE4CC /* PlayerView.framework */; 296 | productType = "com.apple.product-type.framework"; 297 | }; 298 | 69EC593D6D45DA36BE1D07C651754BF3 /* Pods-PlayerView_Tests */ = { 299 | isa = PBXNativeTarget; 300 | buildConfigurationList = 0090DC524E8284059F2C7895520439E8 /* Build configuration list for PBXNativeTarget "Pods-PlayerView_Tests" */; 301 | buildPhases = ( 302 | 4DEA24C897312B6987DE9BB8AB65AAB3 /* Sources */, 303 | 6C79F39E0BCE6AC841C01015B66A2F72 /* Frameworks */, 304 | 7C8F018D8FC6AFD10E21D477900EBAD6 /* Headers */, 305 | ); 306 | buildRules = ( 307 | ); 308 | dependencies = ( 309 | 55B81F8F82484CA7612EA2ABA08594A1 /* PBXTargetDependency */, 310 | ); 311 | name = "Pods-PlayerView_Tests"; 312 | productName = "Pods-PlayerView_Tests"; 313 | productReference = 374F48B685293E22DDB2394B8F9FBEA6 /* Pods_PlayerView_Tests.framework */; 314 | productType = "com.apple.product-type.framework"; 315 | }; 316 | A05E7B8CE5EF8E125E1CAA5F0F39CDE7 /* PlayerView-PlayerView */ = { 317 | isa = PBXNativeTarget; 318 | buildConfigurationList = 86DD52705790ECA95AF68C4B09A14A62 /* Build configuration list for PBXNativeTarget "PlayerView-PlayerView" */; 319 | buildPhases = ( 320 | B58E79161F54C946E8357FE4B19E3DF9 /* Sources */, 321 | 426AF4213A90D3D54227C5715C5A1AB4 /* Frameworks */, 322 | 0FCD1D89A69B4EE5DD976FBD6BB78E54 /* Resources */, 323 | ); 324 | buildRules = ( 325 | ); 326 | dependencies = ( 327 | ); 328 | name = "PlayerView-PlayerView"; 329 | productName = "PlayerView-PlayerView"; 330 | productReference = 0C5904D24CB3CA4ABADF30E3FCA1BF64 /* PlayerView.bundle */; 331 | productType = "com.apple.product-type.bundle"; 332 | }; 333 | F467DF02121F5227D4737D0A03376CFB /* Pods-PlayerView_Example */ = { 334 | isa = PBXNativeTarget; 335 | buildConfigurationList = 6BAD05B68BF9137A3F6E56FF180ECFE2 /* Build configuration list for PBXNativeTarget "Pods-PlayerView_Example" */; 336 | buildPhases = ( 337 | 793346051656EA6CC17C479A0AB340A7 /* Sources */, 338 | DA77EBCF0834C19F1952DCE5A4C9B6CA /* Frameworks */, 339 | 471607E72958F21E128181653EA2F8DA /* Headers */, 340 | ); 341 | buildRules = ( 342 | ); 343 | dependencies = ( 344 | F5B8E5AAA494230710150937BCE8A5A0 /* PBXTargetDependency */, 345 | ); 346 | name = "Pods-PlayerView_Example"; 347 | productName = "Pods-PlayerView_Example"; 348 | productReference = 3B1E648FA0278BD3685C6224EA001B62 /* Pods_PlayerView_Example.framework */; 349 | productType = "com.apple.product-type.framework"; 350 | }; 351 | /* End PBXNativeTarget section */ 352 | 353 | /* Begin PBXProject section */ 354 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 355 | isa = PBXProject; 356 | attributes = { 357 | LastSwiftUpdateCheck = 0700; 358 | LastUpgradeCheck = 0700; 359 | }; 360 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 361 | compatibilityVersion = "Xcode 6.3"; 362 | developmentRegion = English; 363 | hasScannedForEncodings = 0; 364 | knownRegions = ( 365 | en, 366 | ); 367 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 368 | productRefGroup = A63CC9ABA0431B2639095A51A35106FD /* Products */; 369 | projectDirPath = ""; 370 | projectRoot = ""; 371 | targets = ( 372 | 2283F2F713CE2EC02E80A59393D2947C /* PlayerView */, 373 | A05E7B8CE5EF8E125E1CAA5F0F39CDE7 /* PlayerView-PlayerView */, 374 | F467DF02121F5227D4737D0A03376CFB /* Pods-PlayerView_Example */, 375 | 69EC593D6D45DA36BE1D07C651754BF3 /* Pods-PlayerView_Tests */, 376 | ); 377 | }; 378 | /* End PBXProject section */ 379 | 380 | /* Begin PBXResourcesBuildPhase section */ 381 | 0FCD1D89A69B4EE5DD976FBD6BB78E54 /* Resources */ = { 382 | isa = PBXResourcesBuildPhase; 383 | buildActionMask = 2147483647; 384 | files = ( 385 | ); 386 | runOnlyForDeploymentPostprocessing = 0; 387 | }; 388 | 63705BEC26E0F5D6FC9D31E5C2E1FBE5 /* Resources */ = { 389 | isa = PBXResourcesBuildPhase; 390 | buildActionMask = 2147483647; 391 | files = ( 392 | F74AB8E4600992838CEDD734D5204C04 /* PlayerView.bundle in Resources */, 393 | ); 394 | runOnlyForDeploymentPostprocessing = 0; 395 | }; 396 | /* End PBXResourcesBuildPhase section */ 397 | 398 | /* Begin PBXSourcesBuildPhase section */ 399 | 4DEA24C897312B6987DE9BB8AB65AAB3 /* Sources */ = { 400 | isa = PBXSourcesBuildPhase; 401 | buildActionMask = 2147483647; 402 | files = ( 403 | 52C4BCAE189FB20AB0A9D06D48B78A17 /* Pods-PlayerView_Tests-dummy.m in Sources */, 404 | ); 405 | runOnlyForDeploymentPostprocessing = 0; 406 | }; 407 | 50395A8DFE3B7AC18E17044A4F557B56 /* Sources */ = { 408 | isa = PBXSourcesBuildPhase; 409 | buildActionMask = 2147483647; 410 | files = ( 411 | 1F3BAE442B3297D38764A3370D59C18B /* PlayerView-dummy.m in Sources */, 412 | 92BDC89000777BCC719A42099854F428 /* PlayerView.swift in Sources */, 413 | ); 414 | runOnlyForDeploymentPostprocessing = 0; 415 | }; 416 | 793346051656EA6CC17C479A0AB340A7 /* Sources */ = { 417 | isa = PBXSourcesBuildPhase; 418 | buildActionMask = 2147483647; 419 | files = ( 420 | 7A5C604640759B74E354CCE02B59BC5E /* Pods-PlayerView_Example-dummy.m in Sources */, 421 | ); 422 | runOnlyForDeploymentPostprocessing = 0; 423 | }; 424 | B58E79161F54C946E8357FE4B19E3DF9 /* Sources */ = { 425 | isa = PBXSourcesBuildPhase; 426 | buildActionMask = 2147483647; 427 | files = ( 428 | ); 429 | runOnlyForDeploymentPostprocessing = 0; 430 | }; 431 | /* End PBXSourcesBuildPhase section */ 432 | 433 | /* Begin PBXTargetDependency section */ 434 | 55B81F8F82484CA7612EA2ABA08594A1 /* PBXTargetDependency */ = { 435 | isa = PBXTargetDependency; 436 | name = PlayerView; 437 | target = 2283F2F713CE2EC02E80A59393D2947C /* PlayerView */; 438 | targetProxy = 34B69BCAA4FEE6023463E845E382618C /* PBXContainerItemProxy */; 439 | }; 440 | 5911DDF759CCBE19EC32506E813D1F02 /* PBXTargetDependency */ = { 441 | isa = PBXTargetDependency; 442 | name = "PlayerView-PlayerView"; 443 | target = A05E7B8CE5EF8E125E1CAA5F0F39CDE7 /* PlayerView-PlayerView */; 444 | targetProxy = D1BCA18468158B3C4F3ADAD29AF84891 /* PBXContainerItemProxy */; 445 | }; 446 | F5B8E5AAA494230710150937BCE8A5A0 /* PBXTargetDependency */ = { 447 | isa = PBXTargetDependency; 448 | name = PlayerView; 449 | target = 2283F2F713CE2EC02E80A59393D2947C /* PlayerView */; 450 | targetProxy = 16E8614FDDB5B7CB4B195948350B4282 /* PBXContainerItemProxy */; 451 | }; 452 | /* End PBXTargetDependency section */ 453 | 454 | /* Begin XCBuildConfiguration section */ 455 | 04F58564CF21D8FFCBFC6603DB1E8639 /* Release */ = { 456 | isa = XCBuildConfiguration; 457 | baseConfigurationReference = 1F7A7115060323942E1E8AC19CD24E21 /* Pods-PlayerView_Example.release.xcconfig */; 458 | buildSettings = { 459 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 460 | CURRENT_PROJECT_VERSION = 1; 461 | DEFINES_MODULE = YES; 462 | DYLIB_COMPATIBILITY_VERSION = 1; 463 | DYLIB_CURRENT_VERSION = 1; 464 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 465 | ENABLE_STRICT_OBJC_MSGSEND = YES; 466 | INFOPLIST_FILE = "Target Support Files/Pods-PlayerView_Example/Info.plist"; 467 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 468 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 469 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 470 | MACH_O_TYPE = staticlib; 471 | MODULEMAP_FILE = "Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example.modulemap"; 472 | MTL_ENABLE_DEBUG_INFO = NO; 473 | OTHER_LDFLAGS = ""; 474 | OTHER_LIBTOOLFLAGS = ""; 475 | PODS_ROOT = "$(SRCROOT)"; 476 | PRODUCT_NAME = Pods_PlayerView_Example; 477 | SDKROOT = iphoneos; 478 | SKIP_INSTALL = YES; 479 | TARGETED_DEVICE_FAMILY = "1,2"; 480 | VERSIONING_SYSTEM = "apple-generic"; 481 | VERSION_INFO_PREFIX = ""; 482 | }; 483 | name = Release; 484 | }; 485 | 10DE1947DAC0ED28F6C0A9F9BD75D546 /* Release */ = { 486 | isa = XCBuildConfiguration; 487 | buildSettings = { 488 | ALWAYS_SEARCH_USER_PATHS = NO; 489 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 490 | CLANG_CXX_LIBRARY = "libc++"; 491 | CLANG_ENABLE_MODULES = YES; 492 | CLANG_ENABLE_OBJC_ARC = YES; 493 | CLANG_WARN_BOOL_CONVERSION = YES; 494 | CLANG_WARN_CONSTANT_CONVERSION = YES; 495 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 496 | CLANG_WARN_EMPTY_BODY = YES; 497 | CLANG_WARN_ENUM_CONVERSION = YES; 498 | CLANG_WARN_INT_CONVERSION = YES; 499 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 500 | CLANG_WARN_UNREACHABLE_CODE = YES; 501 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 502 | COPY_PHASE_STRIP = YES; 503 | ENABLE_NS_ASSERTIONS = NO; 504 | GCC_C_LANGUAGE_STANDARD = gnu99; 505 | GCC_PREPROCESSOR_DEFINITIONS = "RELEASE=1"; 506 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 507 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 508 | GCC_WARN_UNDECLARED_SELECTOR = YES; 509 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 510 | GCC_WARN_UNUSED_FUNCTION = YES; 511 | GCC_WARN_UNUSED_VARIABLE = YES; 512 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 513 | STRIP_INSTALLED_PRODUCT = NO; 514 | SWIFT_VERSION = 4.0; 515 | SYMROOT = "${SRCROOT}/../build"; 516 | VALIDATE_PRODUCT = YES; 517 | }; 518 | name = Release; 519 | }; 520 | 46DCE5D14BCEEFA946F845E9AF328448 /* Release */ = { 521 | isa = XCBuildConfiguration; 522 | baseConfigurationReference = A8B23CA9D7A6A33A0718BB5411A10E3E /* PlayerView.xcconfig */; 523 | buildSettings = { 524 | ENABLE_STRICT_OBJC_MSGSEND = YES; 525 | PRODUCT_NAME = PlayerView; 526 | SDKROOT = iphoneos; 527 | SKIP_INSTALL = YES; 528 | WRAPPER_EXTENSION = bundle; 529 | }; 530 | name = Release; 531 | }; 532 | 4C77F8CF94A1D28A913E7791C7A2AB3C /* Debug */ = { 533 | isa = XCBuildConfiguration; 534 | baseConfigurationReference = 3D5395F17923B68FE2114BBD0FB4CD31 /* Pods-PlayerView_Example.debug.xcconfig */; 535 | buildSettings = { 536 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 537 | CURRENT_PROJECT_VERSION = 1; 538 | DEFINES_MODULE = YES; 539 | DYLIB_COMPATIBILITY_VERSION = 1; 540 | DYLIB_CURRENT_VERSION = 1; 541 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 542 | ENABLE_STRICT_OBJC_MSGSEND = YES; 543 | INFOPLIST_FILE = "Target Support Files/Pods-PlayerView_Example/Info.plist"; 544 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 545 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 546 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 547 | MACH_O_TYPE = staticlib; 548 | MODULEMAP_FILE = "Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example.modulemap"; 549 | MTL_ENABLE_DEBUG_INFO = YES; 550 | OTHER_LDFLAGS = ""; 551 | OTHER_LIBTOOLFLAGS = ""; 552 | PODS_ROOT = "$(SRCROOT)"; 553 | PRODUCT_NAME = Pods_PlayerView_Example; 554 | SDKROOT = iphoneos; 555 | SKIP_INSTALL = YES; 556 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 557 | TARGETED_DEVICE_FAMILY = "1,2"; 558 | VERSIONING_SYSTEM = "apple-generic"; 559 | VERSION_INFO_PREFIX = ""; 560 | }; 561 | name = Debug; 562 | }; 563 | 552D02D5BA751AC2E8790D2811D496CA /* Debug */ = { 564 | isa = XCBuildConfiguration; 565 | buildSettings = { 566 | ALWAYS_SEARCH_USER_PATHS = NO; 567 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 568 | CLANG_CXX_LIBRARY = "libc++"; 569 | CLANG_ENABLE_MODULES = YES; 570 | CLANG_ENABLE_OBJC_ARC = YES; 571 | CLANG_WARN_BOOL_CONVERSION = YES; 572 | CLANG_WARN_CONSTANT_CONVERSION = YES; 573 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 574 | CLANG_WARN_EMPTY_BODY = YES; 575 | CLANG_WARN_ENUM_CONVERSION = YES; 576 | CLANG_WARN_INT_CONVERSION = YES; 577 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 578 | CLANG_WARN_UNREACHABLE_CODE = YES; 579 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 580 | COPY_PHASE_STRIP = NO; 581 | GCC_C_LANGUAGE_STANDARD = gnu99; 582 | GCC_DYNAMIC_NO_PIC = NO; 583 | GCC_OPTIMIZATION_LEVEL = 0; 584 | GCC_PREPROCESSOR_DEFINITIONS = ( 585 | "DEBUG=1", 586 | "$(inherited)", 587 | ); 588 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 589 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 590 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 591 | GCC_WARN_UNDECLARED_SELECTOR = YES; 592 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 593 | GCC_WARN_UNUSED_FUNCTION = YES; 594 | GCC_WARN_UNUSED_VARIABLE = YES; 595 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 596 | ONLY_ACTIVE_ARCH = YES; 597 | STRIP_INSTALLED_PRODUCT = NO; 598 | SWIFT_VERSION = 4.0; 599 | SYMROOT = "${SRCROOT}/../build"; 600 | }; 601 | name = Debug; 602 | }; 603 | 5E41C6C76E56786365C3FB39DC5210BF /* Debug */ = { 604 | isa = XCBuildConfiguration; 605 | baseConfigurationReference = A8B23CA9D7A6A33A0718BB5411A10E3E /* PlayerView.xcconfig */; 606 | buildSettings = { 607 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 608 | CURRENT_PROJECT_VERSION = 1; 609 | DEFINES_MODULE = YES; 610 | DYLIB_COMPATIBILITY_VERSION = 1; 611 | DYLIB_CURRENT_VERSION = 1; 612 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 613 | ENABLE_STRICT_OBJC_MSGSEND = YES; 614 | GCC_PREFIX_HEADER = "Target Support Files/PlayerView/PlayerView-prefix.pch"; 615 | INFOPLIST_FILE = "Target Support Files/PlayerView/Info.plist"; 616 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 617 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 618 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 619 | MODULEMAP_FILE = "Target Support Files/PlayerView/PlayerView.modulemap"; 620 | MTL_ENABLE_DEBUG_INFO = YES; 621 | PRODUCT_NAME = PlayerView; 622 | SDKROOT = iphoneos; 623 | SKIP_INSTALL = YES; 624 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 625 | TARGETED_DEVICE_FAMILY = "1,2"; 626 | VERSIONING_SYSTEM = "apple-generic"; 627 | VERSION_INFO_PREFIX = ""; 628 | }; 629 | name = Debug; 630 | }; 631 | C9A7BDC62A0456C20E24CB398FADC4FD /* Release */ = { 632 | isa = XCBuildConfiguration; 633 | baseConfigurationReference = A8B23CA9D7A6A33A0718BB5411A10E3E /* PlayerView.xcconfig */; 634 | buildSettings = { 635 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 636 | CURRENT_PROJECT_VERSION = 1; 637 | DEFINES_MODULE = YES; 638 | DYLIB_COMPATIBILITY_VERSION = 1; 639 | DYLIB_CURRENT_VERSION = 1; 640 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 641 | ENABLE_STRICT_OBJC_MSGSEND = YES; 642 | GCC_PREFIX_HEADER = "Target Support Files/PlayerView/PlayerView-prefix.pch"; 643 | INFOPLIST_FILE = "Target Support Files/PlayerView/Info.plist"; 644 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 645 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 646 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 647 | MODULEMAP_FILE = "Target Support Files/PlayerView/PlayerView.modulemap"; 648 | MTL_ENABLE_DEBUG_INFO = NO; 649 | PRODUCT_NAME = PlayerView; 650 | SDKROOT = iphoneos; 651 | SKIP_INSTALL = YES; 652 | TARGETED_DEVICE_FAMILY = "1,2"; 653 | VERSIONING_SYSTEM = "apple-generic"; 654 | VERSION_INFO_PREFIX = ""; 655 | }; 656 | name = Release; 657 | }; 658 | CBE731E7CC1A9B794AFF8E7207098631 /* Debug */ = { 659 | isa = XCBuildConfiguration; 660 | baseConfigurationReference = A8B23CA9D7A6A33A0718BB5411A10E3E /* PlayerView.xcconfig */; 661 | buildSettings = { 662 | ENABLE_STRICT_OBJC_MSGSEND = YES; 663 | PRODUCT_NAME = PlayerView; 664 | SDKROOT = iphoneos; 665 | SKIP_INSTALL = YES; 666 | WRAPPER_EXTENSION = bundle; 667 | }; 668 | name = Debug; 669 | }; 670 | D31DFEFA55B4D2C91ECE2B1C9E65C781 /* Debug */ = { 671 | isa = XCBuildConfiguration; 672 | baseConfigurationReference = 2CBB57DB44A471914FEC5D8E8D693499 /* Pods-PlayerView_Tests.debug.xcconfig */; 673 | buildSettings = { 674 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 675 | CURRENT_PROJECT_VERSION = 1; 676 | DEFINES_MODULE = YES; 677 | DYLIB_COMPATIBILITY_VERSION = 1; 678 | DYLIB_CURRENT_VERSION = 1; 679 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 680 | ENABLE_STRICT_OBJC_MSGSEND = YES; 681 | INFOPLIST_FILE = "Target Support Files/Pods-PlayerView_Tests/Info.plist"; 682 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 683 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 684 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 685 | MACH_O_TYPE = staticlib; 686 | MODULEMAP_FILE = "Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests.modulemap"; 687 | MTL_ENABLE_DEBUG_INFO = YES; 688 | OTHER_LDFLAGS = ""; 689 | OTHER_LIBTOOLFLAGS = ""; 690 | PODS_ROOT = "$(SRCROOT)"; 691 | PRODUCT_NAME = Pods_PlayerView_Tests; 692 | SDKROOT = iphoneos; 693 | SKIP_INSTALL = YES; 694 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 695 | TARGETED_DEVICE_FAMILY = "1,2"; 696 | VERSIONING_SYSTEM = "apple-generic"; 697 | VERSION_INFO_PREFIX = ""; 698 | }; 699 | name = Debug; 700 | }; 701 | EE1AA9AD6461DBD37B01E2F7FA54B12F /* Release */ = { 702 | isa = XCBuildConfiguration; 703 | baseConfigurationReference = D053C5141633AB79DAF770905BBF5CC6 /* Pods-PlayerView_Tests.release.xcconfig */; 704 | buildSettings = { 705 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 706 | CURRENT_PROJECT_VERSION = 1; 707 | DEFINES_MODULE = YES; 708 | DYLIB_COMPATIBILITY_VERSION = 1; 709 | DYLIB_CURRENT_VERSION = 1; 710 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 711 | ENABLE_STRICT_OBJC_MSGSEND = YES; 712 | INFOPLIST_FILE = "Target Support Files/Pods-PlayerView_Tests/Info.plist"; 713 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 714 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 715 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 716 | MACH_O_TYPE = staticlib; 717 | MODULEMAP_FILE = "Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests.modulemap"; 718 | MTL_ENABLE_DEBUG_INFO = NO; 719 | OTHER_LDFLAGS = ""; 720 | OTHER_LIBTOOLFLAGS = ""; 721 | PODS_ROOT = "$(SRCROOT)"; 722 | PRODUCT_NAME = Pods_PlayerView_Tests; 723 | SDKROOT = iphoneos; 724 | SKIP_INSTALL = YES; 725 | TARGETED_DEVICE_FAMILY = "1,2"; 726 | VERSIONING_SYSTEM = "apple-generic"; 727 | VERSION_INFO_PREFIX = ""; 728 | }; 729 | name = Release; 730 | }; 731 | /* End XCBuildConfiguration section */ 732 | 733 | /* Begin XCConfigurationList section */ 734 | 0090DC524E8284059F2C7895520439E8 /* Build configuration list for PBXNativeTarget "Pods-PlayerView_Tests" */ = { 735 | isa = XCConfigurationList; 736 | buildConfigurations = ( 737 | D31DFEFA55B4D2C91ECE2B1C9E65C781 /* Debug */, 738 | EE1AA9AD6461DBD37B01E2F7FA54B12F /* Release */, 739 | ); 740 | defaultConfigurationIsVisible = 0; 741 | defaultConfigurationName = Release; 742 | }; 743 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 744 | isa = XCConfigurationList; 745 | buildConfigurations = ( 746 | 552D02D5BA751AC2E8790D2811D496CA /* Debug */, 747 | 10DE1947DAC0ED28F6C0A9F9BD75D546 /* Release */, 748 | ); 749 | defaultConfigurationIsVisible = 0; 750 | defaultConfigurationName = Release; 751 | }; 752 | 6BAD05B68BF9137A3F6E56FF180ECFE2 /* Build configuration list for PBXNativeTarget "Pods-PlayerView_Example" */ = { 753 | isa = XCConfigurationList; 754 | buildConfigurations = ( 755 | 4C77F8CF94A1D28A913E7791C7A2AB3C /* Debug */, 756 | 04F58564CF21D8FFCBFC6603DB1E8639 /* Release */, 757 | ); 758 | defaultConfigurationIsVisible = 0; 759 | defaultConfigurationName = Release; 760 | }; 761 | 86DD52705790ECA95AF68C4B09A14A62 /* Build configuration list for PBXNativeTarget "PlayerView-PlayerView" */ = { 762 | isa = XCConfigurationList; 763 | buildConfigurations = ( 764 | CBE731E7CC1A9B794AFF8E7207098631 /* Debug */, 765 | 46DCE5D14BCEEFA946F845E9AF328448 /* Release */, 766 | ); 767 | defaultConfigurationIsVisible = 0; 768 | defaultConfigurationName = Release; 769 | }; 770 | 910DEB7CFC9BF2E65D399BC497343B40 /* Build configuration list for PBXNativeTarget "PlayerView" */ = { 771 | isa = XCConfigurationList; 772 | buildConfigurations = ( 773 | 5E41C6C76E56786365C3FB39DC5210BF /* Debug */, 774 | C9A7BDC62A0456C20E24CB398FADC4FD /* Release */, 775 | ); 776 | defaultConfigurationIsVisible = 0; 777 | defaultConfigurationName = Release; 778 | }; 779 | /* End XCConfigurationList section */ 780 | }; 781 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 782 | } 783 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PlayerView.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/PlayerView/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/PlayerView/PlayerView-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_PlayerView : NSObject 3 | @end 4 | @implementation PodsDummy_PlayerView 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/PlayerView/PlayerView-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/PlayerView/PlayerView-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double PlayerViewVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char PlayerViewVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/PlayerView/PlayerView.modulemap: -------------------------------------------------------------------------------- 1 | framework module PlayerView { 2 | umbrella header "PlayerView-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/PlayerView/PlayerView.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/PlayerView" "${PODS_ROOT}/Headers/Public" 3 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 4 | PODS_ROOT = ${SRCROOT} 5 | SKIP_INSTALL = YES -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## PlayerView 5 | 6 | The MIT License (MIT) 7 | 8 | Copyright (c) 2016 davidlondono 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - http://cocoapods.org 29 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | The MIT License (MIT) 18 | 19 | Copyright (c) 2016 davidlondono 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | Title 40 | PlayerView 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Generated by CocoaPods - http://cocoapods.org 47 | Title 48 | 49 | Type 50 | PSGroupSpecifier 51 | 52 | 53 | StringsTable 54 | Acknowledgements 55 | Title 56 | Acknowledgements 57 | 58 | 59 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_PlayerView_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_PlayerView_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | 86 | if [[ "$CONFIGURATION" == "Debug" ]]; then 87 | install_framework "Pods-PlayerView_Example/PlayerView.framework" 88 | fi 89 | if [[ "$CONFIGURATION" == "Release" ]]; then 90 | install_framework "Pods-PlayerView_Example/PlayerView.framework" 91 | fi 92 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | realpath() { 12 | DIRECTORY="$(cd "${1%/*}" && pwd)" 13 | FILENAME="${1##*/}" 14 | echo "$DIRECTORY/$FILENAME" 15 | } 16 | 17 | install_resource() 18 | { 19 | case $1 in 20 | *.storyboard) 21 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" 22 | ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" 23 | ;; 24 | *.xib) 25 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" 26 | ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" 27 | ;; 28 | *.framework) 29 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 30 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 31 | echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 32 | rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 33 | ;; 34 | *.xcdatamodel) 35 | echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" 36 | xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" 37 | ;; 38 | *.xcdatamodeld) 39 | echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" 40 | xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" 41 | ;; 42 | *.xcmappingmodel) 43 | echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" 44 | xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" 45 | ;; 46 | *.xcassets) 47 | ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") 48 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 49 | ;; 50 | /*) 51 | echo "$1" 52 | echo "$1" >> "$RESOURCES_TO_COPY" 53 | ;; 54 | *) 55 | echo "${PODS_ROOT}/$1" 56 | echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" 57 | ;; 58 | esac 59 | } 60 | 61 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 62 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 63 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 64 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 65 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 66 | fi 67 | rm -f "$RESOURCES_TO_COPY" 68 | 69 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 70 | then 71 | case "${TARGETED_DEVICE_FAMILY}" in 72 | 1,2) 73 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 74 | ;; 75 | 1) 76 | TARGET_DEVICE_ARGS="--target-device iphone" 77 | ;; 78 | 2) 79 | TARGET_DEVICE_ARGS="--target-device ipad" 80 | ;; 81 | *) 82 | TARGET_DEVICE_ARGS="--target-device mac" 83 | ;; 84 | esac 85 | 86 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 87 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 88 | while read line; do 89 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 90 | XCASSET_FILES+=("$line") 91 | fi 92 | done <<<"$OTHER_XCASSETS" 93 | 94 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 95 | fi 96 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_PlayerView_ExampleVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_PlayerView_ExampleVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$CONFIGURATION_BUILD_DIR/PlayerView.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "PlayerView" 6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 7 | PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-PlayerView_Example 8 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_PlayerView_Example { 2 | umbrella header "Pods-PlayerView_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Example/Pods-PlayerView_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$CONFIGURATION_BUILD_DIR/PlayerView.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "PlayerView" 6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 7 | PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-PlayerView_Example 8 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## PlayerView 5 | 6 | The MIT License (MIT) 7 | 8 | Copyright (c) 2016 davidlondono 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - http://cocoapods.org 29 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | The MIT License (MIT) 18 | 19 | Copyright (c) 2016 davidlondono 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | Title 40 | PlayerView 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Generated by CocoaPods - http://cocoapods.org 47 | Title 48 | 49 | Type 50 | PSGroupSpecifier 51 | 52 | 53 | StringsTable 54 | Acknowledgements 55 | Title 56 | Acknowledgements 57 | 58 | 59 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_PlayerView_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_PlayerView_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | 86 | if [[ "$CONFIGURATION" == "Debug" ]]; then 87 | install_framework "Pods-PlayerView_Tests/PlayerView.framework" 88 | fi 89 | if [[ "$CONFIGURATION" == "Release" ]]; then 90 | install_framework "Pods-PlayerView_Tests/PlayerView.framework" 91 | fi 92 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | realpath() { 12 | DIRECTORY="$(cd "${1%/*}" && pwd)" 13 | FILENAME="${1##*/}" 14 | echo "$DIRECTORY/$FILENAME" 15 | } 16 | 17 | install_resource() 18 | { 19 | case $1 in 20 | *.storyboard) 21 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" 22 | ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" 23 | ;; 24 | *.xib) 25 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" 26 | ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" 27 | ;; 28 | *.framework) 29 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 30 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 31 | echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 32 | rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 33 | ;; 34 | *.xcdatamodel) 35 | echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" 36 | xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" 37 | ;; 38 | *.xcdatamodeld) 39 | echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" 40 | xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" 41 | ;; 42 | *.xcmappingmodel) 43 | echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" 44 | xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" 45 | ;; 46 | *.xcassets) 47 | ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") 48 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 49 | ;; 50 | /*) 51 | echo "$1" 52 | echo "$1" >> "$RESOURCES_TO_COPY" 53 | ;; 54 | *) 55 | echo "${PODS_ROOT}/$1" 56 | echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" 57 | ;; 58 | esac 59 | } 60 | 61 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 62 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 63 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 64 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 65 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 66 | fi 67 | rm -f "$RESOURCES_TO_COPY" 68 | 69 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 70 | then 71 | case "${TARGETED_DEVICE_FAMILY}" in 72 | 1,2) 73 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 74 | ;; 75 | 1) 76 | TARGET_DEVICE_ARGS="--target-device iphone" 77 | ;; 78 | 2) 79 | TARGET_DEVICE_ARGS="--target-device ipad" 80 | ;; 81 | *) 82 | TARGET_DEVICE_ARGS="--target-device mac" 83 | ;; 84 | esac 85 | 86 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 87 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 88 | while read line; do 89 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 90 | XCASSET_FILES+=("$line") 91 | fi 92 | done <<<"$OTHER_XCASSETS" 93 | 94 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 95 | fi 96 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_PlayerView_TestsVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_PlayerView_TestsVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$CONFIGURATION_BUILD_DIR/PlayerView.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "PlayerView" 6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 7 | PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-PlayerView_Tests 8 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_PlayerView_Tests { 2 | umbrella header "Pods-PlayerView_Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PlayerView_Tests/Pods-PlayerView_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$CONFIGURATION_BUILD_DIR/PlayerView.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "PlayerView" 6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 7 | PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-PlayerView_Tests 8 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Example/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Tests/Tests.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import XCTest 3 | import PlayerView 4 | 5 | class Tests: XCTestCase { 6 | 7 | override func setUp() { 8 | super.setUp() 9 | // Put setup code here. This method is called before the invocation of each test method in the class. 10 | } 11 | 12 | override func tearDown() { 13 | // Put teardown code here. This method is called after the invocation of each test method in the class. 14 | super.tearDown() 15 | } 16 | 17 | func testExample() { 18 | // This is an example of a functional test case. 19 | XCTAssert(true, "Pass") 20 | } 21 | 22 | func testPerformanceExample() { 23 | // This is an example of a performance test case. 24 | self.measureBlock() { 25 | // Put the code you want to measure the time of here. 26 | } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 davidlondono 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 | -------------------------------------------------------------------------------- /PlayerView.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint PlayerView.podspec' to ensure this is a 3 | # valid spec before submitting. 4 | # 5 | # Any lines starting with a # are optional, but their use is encouraged 6 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | s.name = "PlayerView" 11 | s.version = "0.2.7" 12 | s.summary = "A UIView for videos using AVPlayer with delegate" 13 | 14 | # This description is used to generate tags and improve search results. 15 | # * Think: What does it do? Why did you write it? What is the focus? 16 | # * Try to keep it short, snappy and to the point. 17 | # * Write the description between the DESC delimiters below. 18 | # * Finally, don't worry about the indent, CocoaPods strips it! 19 | s.description = <<-DESC 20 | This Library allows to set a video on a custom UIView by setting the callbacks on a delegate for easy use. this View implements the AVPlayer from AVFoundation 21 | DESC 22 | 23 | s.homepage = "https://github.com/davidlondono/PlayerView" 24 | # s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2" 25 | s.license = 'MIT' 26 | s.author = { "David Alejandro" => "davidlondono9@gmail.com" } 27 | s.source = { :git => "https://github.com/davidlondono/PlayerView.git", :tag => s.version.to_s } 28 | s.social_media_url = 'https://twitter.com/davidlondono' 29 | 30 | s.platform = :ios, '8.0' 31 | s.requires_arc = true 32 | 33 | s.source_files = 'Sources/**/*' 34 | # s.resource_bundles = { 35 | # 'PlayerView' => ['Pod/Assets/*.png'] 36 | # } 37 | 38 | # s.public_header_files = 'Pod/Classes/**/*.h' 39 | # s.frameworks = 'UIKit', 'MapKit' 40 | # s.dependency 'AFNetworking', '~> 2.3' 41 | end 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PlayerView 2 | 3 | [![CI Status](http://img.shields.io/travis/David Alejandro/PlayerView.svg?style=flat)](https://travis-ci.org/David Alejandro/PlayerView) 4 | [![Version](https://img.shields.io/cocoapods/v/PlayerView.svg?style=flat)](http://cocoapods.org/pods/PlayerView) 5 | [![License](https://img.shields.io/cocoapods/l/PlayerView.svg?style=flat)](http://cocoapods.org/pods/PlayerView) 6 | [![Platform](https://img.shields.io/cocoapods/p/PlayerView.svg?style=flat)](http://cocoapods.org/pods/PlayerView) 7 | 8 | An elegant wraper API for AVPlayer to get events over Delegate so you dount need to use KVO 9 | 10 | ## Installation 11 | 12 | PlayerView is available through [CocoaPods](http://cocoapods.org). To install 13 | it, simply add the following line to your Podfile: 14 | 15 | ```ruby 16 | pod "PlayerView" 17 | ``` 18 | 19 | ### CocoaPods 20 | 21 | `PlayerView` is available through [CocoaPods](http://cocoapods.org). To install 22 | it, simply add the following line to your `Podfile`: 23 | 24 | 25 | ```ruby 26 | source 'https://github.com/CocoaPods/Specs.git' 27 | platform :iOS, '8.0' 28 | use_frameworks! 29 | 30 | pod 'PlayerView' 31 | ``` 32 | 33 | ### Carthage 34 | 35 | Installation is also available using the dependency manager [Carthage](https://github.com/Carthage/Carthage). 36 | 37 | To integrate, add the following line to your `Cartfile`: 38 | 39 | ```ogdl 40 | github "davidlondono/PlayerView" >= 0.2.7 41 | ``` 42 | 43 | ### Swift Package Manager 44 | 45 | Installation can be done with the [Swift Package Manager](https://swift.org/package-manager/), add the following in your `Package.swift` : 46 | 47 | ```Swift 48 | import PackageDescription 49 | 50 | let package = Package( 51 | name: "PlayerView", 52 | dependencies: [ 53 | .Package(url: "https://github.com/davidlondono/PlayerView.git", majorVersion: 0), 54 | ] 55 | ) 56 | ``` 57 | 58 | ## Usage 59 | 60 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 61 | 62 | 63 | ### Storyboard 64 | Just add a view and add as a class on **Identity inspector > Custom Class > Class**, make sure to add Module if is imported externaly (Pod, Package manager ....) 65 | 66 | ```Swift 67 | import PlayerView 68 | ``` 69 | 70 | ```Swift 71 | @IBOutlet var playerVideo: PlayerView! 72 | ``` 73 | 74 | ### Code 75 | 76 | Just need to add de view as a normal View: 77 | 78 | ```Swift 79 | import PlayerView 80 | ``` 81 | 82 | ```Swift 83 | 84 | 85 | 86 | let playerVideo = PlayerVideo() 87 | 88 | //also could add frame: 89 | // let playerVideo = PlayerVideo(frame: frame) 90 | view.addSubView(playerVideo) 91 | 92 | 93 | ``` 94 | 95 | ## Control 96 | 97 | 98 | ```Swift 99 | //set aspect mode of video 100 | //default AVLayerVideoGravityResizeAspectFill 101 | playerVideo.fillMode = .ResizeAspect 102 | 103 | //Set or Get the seconds of the current time of reproduction 104 | //this will set to reproduce on 3.5 seconds 105 | playerVideo.currentTime = 3.5 106 | 107 | //define the time interval to get callback delegate of the current time of reproduction, default sends 60 times on 1 second 108 | //default CMTimeMake(1, 60) 109 | //this send the time one time per one second 110 | playerVideo.interval = CMTimeMake(1, 1) 111 | 112 | //set and get the speed of reproduction 113 | //if speed is set to 0, the video will pause (same as playerVideo.pause()) 114 | //if speed is set to 1,0, the video will pause (same as playerVideo.play()) 115 | playerVideo.rate = 0.5 116 | 117 | //play the video at rate 1.0 118 | playerVideo.play() 119 | 120 | // pause the video on current time 121 | playerVideo.pause() 122 | 123 | 124 | // stop the video on current time 125 | playerVideo.stop() 126 | 127 | 128 | // stop the video on current time 129 | playerVideo.next() 130 | 131 | //to set the url of Video 132 | if let url = NSURL(string: "http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4") { 133 | playerVideo.url = url 134 | //or 135 | playerVideo.urls = [url] 136 | 137 | //add videos on queue 138 | playerVideo.addVideosOnQueue(urls: [url]) 139 | } 140 | 141 | //Take a screenshot on time, and return time to ensure the tolerance of the image 142 | //on 20.7 seconds 143 | let(image1, time1) = playerVideo.screenshotTime(20.7) 144 | //on actual time 145 | let(image2, time2) = playerVideo.screenshotTime() 146 | 147 | 148 | //on actual time 149 | let image3 = playerVideo.screenshot() 150 | 151 | //reset queue and observers 152 | playerVideo.resetPlayer() 153 | ``` 154 | ## Delegate 155 | you could get event data from the PlayerView, just implement the delegate 156 | all the functions are optionals 157 | 158 | ```Swift 159 | import PlayerView 160 | import AVFoundation 161 | ``` 162 | 163 | ```Swift 164 | playerVideo.delegate = self 165 | ``` 166 | 167 | ```Swift 168 | 169 | extension MyClass:PlayerViewDelegate { 170 | 171 | 172 | func playerVideo(player: PlayerView, statusPlayer: PlayerViewStatus, error: NSError?) { 173 | //got the status of the player 174 | //useful to know if is ready to play 175 | //if status is unknown then got the error 176 | } 177 | 178 | func playerVideo(player: PlayerView, statusItemPlayer: PlayerViewItemStatus, error: NSError?) { 179 | //some status got here first, this is the status of AVPlayerItem 180 | //useful to know if is ready to play 181 | //if status is unknown then got the error 182 | } 183 | 184 | func playerVideo(player: PlayerView, loadedTimeRanges: [PlayerviewTimeRange]) { 185 | //got the buffer of the video 186 | //to know the progress loaded 187 | 188 | //this will get the seconds of the end of the buffer 189 | //loadedTimeRanges.first!.end.seconds 190 | 191 | } 192 | 193 | func playerVideo(player: PlayerView, duration: Double) { 194 | //the player knows the duration of the video to reproduce on seconds 195 | } 196 | 197 | func playerVideo(player: PlayerView, currentTime: Double) { 198 | //executed using the playerVideo.interval 199 | //only executed when the is reproducing, on pause (rate == 1) this doesn't execute 200 | //default executed like 60 frames per seconds, so 60 times on a second 201 | } 202 | 203 | func playerVideo(player: PlayerView, rate: Float) { 204 | //if the speed of reproduction changed by pausing, playing or changing speed 205 | } 206 | 207 | func playerVideo(playerFinished player: PlayerView) { 208 | //when the video finishes the reproduction to the end 209 | } 210 | } 211 | ``` 212 | 213 | ## Extra Info 214 | 215 | - If you like another shorcut, have a better implementation of something or just say thanks, just send me an email [davidlondono9@gmail.com](mailto:davidlondono9@gmail.com?subject=PlayerView is Awesome) 216 | 217 | - Im using a video on http, so I needed to add this on the `info.plist` to accept all on http, 218 | this is not safe to use on production, so better to add only trusted domains or use https 219 | 220 | ```xml 221 | NSAppTransportSecurity 222 | 223 | 224 | NSAllowsArbitraryLoads 225 | 226 | 227 | ``` 228 | 229 | ## Author 230 | 231 | David Alejandro, [davidlondono9@gmail.com](mailto:davidlondono9@gmail.com?subject=PlayerView is Awesome) 232 | 233 | ## License 234 | 235 | PlayerView is available under the MIT license. See the LICENSE file for more info. 236 | -------------------------------------------------------------------------------- /Sources/Classes/PlayerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PlayerVideoViewController.swift 3 | // PlayerVideo 4 | // 5 | // Created by David Alejandro on 2/17/16. 6 | // Copyright © 2016 David Alejandro. All rights reserved. 7 | // 8 | 9 | import AVFoundation 10 | import UIKit 11 | 12 | private extension Selector { 13 | static let playerItemDidPlayToEndTime = #selector(PlayerView.playerItemDidPlayToEndTime(aNotification:)) 14 | } 15 | 16 | public extension PVTimeRange{ 17 | static let zero = kCMTimeRangeZero 18 | } 19 | 20 | public typealias PVStatus = AVPlayerStatus 21 | public typealias PVItemStatus = AVPlayerItemStatus 22 | public typealias PVTimeRange = CMTimeRange 23 | public typealias PVPlayer = AVQueuePlayer 24 | public typealias PVPlayerItem = AVPlayerItem 25 | 26 | public protocol PlayerViewDelegate: class { 27 | func playerVideo(player: PlayerView, statusPlayer: PVStatus, error: Error?) 28 | func playerVideo(player: PlayerView, statusItemPlayer: PVItemStatus, error: Error?) 29 | func playerVideo(player: PlayerView, loadedTimeRanges: [PVTimeRange]) 30 | func playerVideo(player: PlayerView, duration: Double) 31 | func playerVideo(player: PlayerView, currentTime: Double) 32 | func playerVideo(player: PlayerView, rate: Float) 33 | func playerVideo(playerFinished player: PlayerView) 34 | } 35 | 36 | public extension PlayerViewDelegate { 37 | 38 | func playerVideo(player: PlayerView, statusPlayer: PVStatus, error: Error?) { 39 | 40 | } 41 | func playerVideo(player: PlayerView, statusItemPlayer: PVStatus, error: Error?) { 42 | 43 | } 44 | func playerVideo(player: PlayerView, loadedTimeRanges: [PVTimeRange]) { 45 | 46 | } 47 | func playerVideo(player: PlayerView, duration: Double) { 48 | 49 | } 50 | func playerVideo(player: PlayerView, currentTime: Double) { 51 | 52 | } 53 | func playerVideo(player: PlayerView, rate: Float) { 54 | 55 | } 56 | func playerVideo(playerFinished player: PlayerView) { 57 | 58 | } 59 | } 60 | 61 | public enum PlayerViewFillMode { 62 | case resizeAspect 63 | case resizeAspectFill 64 | case resize 65 | 66 | init?(videoGravity: AVLayerVideoGravity) { 67 | switch videoGravity { 68 | case .resizeAspect: 69 | self = .resizeAspect 70 | case .resizeAspectFill: 71 | self = .resizeAspectFill 72 | case .resize: 73 | self = .resize 74 | default: 75 | return nil 76 | } 77 | } 78 | 79 | var videoGravity: AVLayerVideoGravity { 80 | get { 81 | switch self { 82 | case .resizeAspect: 83 | return AVLayerVideoGravity.resizeAspect 84 | case .resizeAspectFill: 85 | return AVLayerVideoGravity.resizeAspectFill 86 | case .resize: 87 | return AVLayerVideoGravity.resize 88 | } 89 | } 90 | } 91 | } 92 | 93 | private extension CMTime { 94 | static var zero:CMTime { return kCMTimeZero } 95 | } 96 | /// A simple `UIView` subclass that is backed by an `AVPlayerLayer` layer. 97 | public class PlayerView: UIView { 98 | 99 | 100 | 101 | var playerLayer: AVPlayerLayer { 102 | get { 103 | return self.layer as! AVPlayerLayer 104 | } 105 | } 106 | 107 | override public class var layerClass: Swift.AnyClass { 108 | get { 109 | return AVPlayerLayer.self 110 | } 111 | } 112 | 113 | 114 | private var timeObserverToken: AnyObject? 115 | private weak var lastPlayerTimeObserve: PVPlayer? 116 | 117 | private var urlsQueue: Array? 118 | //MARK: - Public Variables 119 | public weak var delegate: PlayerViewDelegate? 120 | 121 | public var loopVideosQueue = false 122 | 123 | public var player: PVPlayer? { 124 | get { 125 | return playerLayer.player as? PVPlayer 126 | } 127 | 128 | set { 129 | playerLayer.player = newValue 130 | } 131 | } 132 | 133 | 134 | public var fillMode: PlayerViewFillMode! { 135 | didSet { 136 | playerLayer.videoGravity = fillMode.videoGravity 137 | } 138 | } 139 | 140 | 141 | public var currentTime: Double { 142 | get { 143 | guard let player = player else { 144 | return 0 145 | } 146 | return CMTimeGetSeconds(player.currentTime()) 147 | } 148 | set { 149 | guard let timescale = player?.currentItem?.duration.timescale else { 150 | return 151 | } 152 | let newTime = CMTimeMakeWithSeconds(newValue, timescale) 153 | player!.seek(to: newTime,toleranceBefore: CMTime.zero,toleranceAfter: CMTime.zero) 154 | } 155 | } 156 | public var interval = CMTimeMake(1, 60) { 157 | didSet { 158 | if rate != 0 { 159 | addCurrentTimeObserver() 160 | } 161 | } 162 | } 163 | 164 | public var rate: Float { 165 | get { 166 | guard let player = player else { 167 | return 0 168 | } 169 | return player.rate 170 | } 171 | set { 172 | if newValue == 0 { 173 | removeCurrentTimeObserver() 174 | } else if rate == 0 && newValue != 0 { 175 | addCurrentTimeObserver() 176 | } 177 | 178 | player?.rate = newValue 179 | } 180 | } 181 | // MARK: private Functions 182 | 183 | 184 | /** 185 | Add all observers for a PVPlayer 186 | */ 187 | func addObserversPlayer(avPlayer: PVPlayer) { 188 | avPlayer.addObserver(self, forKeyPath: "status", options: [.new], context: &statusContext) 189 | avPlayer.addObserver(self, forKeyPath: "rate", options: [.new], context: &rateContext) 190 | avPlayer.addObserver(self, forKeyPath: "currentItem", options: [.old,.new], context: &playerItemContext) 191 | } 192 | 193 | /** 194 | Remove all observers for a PVPlayer 195 | */ 196 | func removeObserversPlayer(avPlayer: PVPlayer) { 197 | 198 | avPlayer.removeObserver(self, forKeyPath: "status", context: &statusContext) 199 | avPlayer.removeObserver(self, forKeyPath: "rate", context: &rateContext) 200 | avPlayer.removeObserver(self, forKeyPath: "currentItem", context: &playerItemContext) 201 | 202 | if let timeObserverToken = timeObserverToken { 203 | avPlayer.removeTimeObserver(timeObserverToken) 204 | } 205 | } 206 | func addObserversVideoItem(playerItem: PVPlayerItem) { 207 | playerItem.addObserver(self, forKeyPath: "loadedTimeRanges", options: [], context: &loadedContext) 208 | playerItem.addObserver(self, forKeyPath: "duration", options: [], context: &durationContext) 209 | playerItem.addObserver(self, forKeyPath: "status", options: [], context: &statusItemContext) 210 | NotificationCenter.default.addObserver(self, selector: .playerItemDidPlayToEndTime, name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: playerItem) 211 | } 212 | func removeObserversVideoItem(playerItem: PVPlayerItem) { 213 | 214 | playerItem.removeObserver(self, forKeyPath: "loadedTimeRanges", context: &loadedContext) 215 | playerItem.removeObserver(self, forKeyPath: "duration", context: &durationContext) 216 | playerItem.removeObserver(self, forKeyPath: "status", context: &statusItemContext) 217 | NotificationCenter.default.removeObserver(self, name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: playerItem) 218 | } 219 | 220 | func removeCurrentTimeObserver() { 221 | 222 | if let timeObserverToken = self.timeObserverToken { 223 | lastPlayerTimeObserve?.removeTimeObserver(timeObserverToken) 224 | } 225 | timeObserverToken = nil 226 | } 227 | 228 | func addCurrentTimeObserver() { 229 | removeCurrentTimeObserver() 230 | 231 | lastPlayerTimeObserve = player 232 | self.timeObserverToken = player?.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main) { [weak self] time-> Void in 233 | if let mySelf = self { 234 | self?.delegate?.playerVideo(player: mySelf, currentTime: mySelf.currentTime) 235 | } 236 | } as AnyObject? 237 | } 238 | 239 | @objc func playerItemDidPlayToEndTime(aNotification: NSNotification) { 240 | //notification of player to stop 241 | let item = aNotification.object as! PVPlayerItem 242 | if loopVideosQueue && player?.items().count == 1, 243 | let urlsQueue = urlsQueue { 244 | 245 | self.addVideosOnQueue(urls: urlsQueue, afterItem: item) 246 | } 247 | self.delegate?.playerVideo(playerFinished: self) 248 | } 249 | // MARK: public Functions 250 | 251 | public func play() { 252 | rate = 1 253 | //player?.play() 254 | } 255 | 256 | public func pause() { 257 | rate = 0 258 | //player?.pause() 259 | } 260 | 261 | 262 | public func stop() { 263 | currentTime = 0 264 | pause() 265 | } 266 | public func next() { 267 | player?.advanceToNextItem() 268 | } 269 | 270 | public func resetPlayer() { 271 | urlsQueue = nil 272 | guard let player = player else { 273 | return 274 | } 275 | player.pause() 276 | 277 | removeObserversPlayer(avPlayer: player) 278 | 279 | if let playerItem = player.currentItem { 280 | removeObserversVideoItem(playerItem: playerItem) 281 | } 282 | self.player = nil 283 | } 284 | 285 | public func availableDuration() -> PVTimeRange { 286 | let range = self.player?.currentItem?.loadedTimeRanges.first 287 | if let range = range { 288 | return range.timeRangeValue 289 | } 290 | return PVTimeRange.zero 291 | } 292 | 293 | public func screenshot() throws -> UIImage? { 294 | guard let time = player?.currentItem?.currentTime() else { 295 | return nil 296 | } 297 | 298 | return try screenshotCMTime(cmTime: time)?.0 299 | } 300 | 301 | public func screenshotTime(time: Double? = nil) throws -> (UIImage, photoTime: CMTime)?{ 302 | guard let timescale = player?.currentItem?.duration.timescale else { 303 | return nil 304 | } 305 | 306 | let timeToPicture: CMTime 307 | if let time = time { 308 | 309 | timeToPicture = CMTimeMakeWithSeconds(time, timescale) 310 | } else if let time = player?.currentItem?.currentTime() { 311 | timeToPicture = time 312 | } else { 313 | return nil 314 | } 315 | return try screenshotCMTime(cmTime: timeToPicture) 316 | } 317 | 318 | private func screenshotCMTime(cmTime: CMTime) throws -> (UIImage,photoTime: CMTime)? { 319 | guard let player = player , let asset = player.currentItem?.asset else { 320 | return nil 321 | } 322 | let imageGenerator = AVAssetImageGenerator(asset: asset) 323 | 324 | var timePicture = CMTime.zero 325 | imageGenerator.appliesPreferredTrackTransform = true 326 | imageGenerator.requestedTimeToleranceAfter = CMTime.zero 327 | imageGenerator.requestedTimeToleranceBefore = CMTime.zero 328 | 329 | let ref = try imageGenerator.copyCGImage(at: cmTime, actualTime: &timePicture) 330 | let viewImage: UIImage = UIImage(cgImage: ref) 331 | return (viewImage, timePicture) 332 | } 333 | public var url: URL? { 334 | didSet { 335 | guard let url = url else { 336 | urls = nil 337 | return 338 | } 339 | urls = [url] 340 | } 341 | } 342 | 343 | public var urls: [URL]? { 344 | willSet(newUrls) { 345 | 346 | 347 | print("willSet urls") 348 | resetPlayer() 349 | guard let urls = newUrls else { 350 | return 351 | } 352 | //reset before put another URL 353 | 354 | urlsQueue = urls 355 | let playerItems = urls.map { (url) -> PVPlayerItem in 356 | return PVPlayerItem(url: url) 357 | } 358 | 359 | let avPlayer = PVPlayer(items: playerItems) 360 | self.player = avPlayer 361 | 362 | avPlayer.actionAtItemEnd = .pause 363 | 364 | 365 | let playerItem = avPlayer.currentItem! 366 | 367 | print("adding observers") 368 | addObserversPlayer(avPlayer: avPlayer) 369 | addObserversVideoItem(playerItem: playerItem) 370 | 371 | // Do any additional setup after loading the view, typically from a nib. 372 | } 373 | } 374 | public func addVideosOnQueue(urls: [URL], afterItem: PVPlayerItem? = nil) { 375 | //on last item on player 376 | let item = afterItem ?? player?.items().last 377 | 378 | urlsQueue?.append(contentsOf: urls) 379 | //for each url found 380 | urls.forEach({ (url) in 381 | 382 | //create a video item 383 | let itemNew = PVPlayerItem(url: url) 384 | 385 | 386 | //and insert the item on the player 387 | player?.insert(itemNew, after: item) 388 | }) 389 | 390 | } 391 | 392 | 393 | 394 | // public func addVideosOnQueue(urls: [URL], afterItem: PVPlayerItem? = nil) { 395 | // return addVideosOnQueue(urls: urls,afterItem: afterItem) 396 | // } 397 | 398 | 399 | 400 | 401 | 402 | public convenience init() { 403 | self.init(frame: CGRect.zero) 404 | 405 | self.fillMode = .resizeAspect 406 | } 407 | 408 | public override init(frame: CGRect) { 409 | super.init(frame: frame) 410 | 411 | self.fillMode = .resizeAspect 412 | } 413 | 414 | required public init?(coder aDecoder: NSCoder) { 415 | super.init(coder: aDecoder) 416 | 417 | self.fillMode = .resizeAspect 418 | } 419 | 420 | deinit { 421 | delegate = nil 422 | resetPlayer() 423 | } 424 | // MARK: private variables for context KVO 425 | 426 | private var statusContext = true 427 | private var statusItemContext = true 428 | private var loadedContext = true 429 | private var durationContext = true 430 | private var currentTimeContext = true 431 | private var rateContext = true 432 | private var playerItemContext = true 433 | 434 | 435 | 436 | 437 | public override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 438 | 439 | 440 | //print("CHANGE",keyPath) 441 | 442 | 443 | if context == &statusContext { 444 | 445 | guard let avPlayer = player else { 446 | super.observeValue(forKeyPath: keyPath, of: object, change: change , context: context) 447 | return 448 | } 449 | // self.delegate?.playerVideo(self, statusPlayer: avPlayer.status, error: avPlayer.error) 450 | self.delegate?.playerVideo(player: self, statusItemPlayer: avPlayer.status, error: avPlayer.error) 451 | // self.delegate?.playerVideo(player: self, statusItemPlayer: avPlayer.status, error: avPlayer.error) 452 | 453 | 454 | } else if context == &loadedContext { 455 | 456 | let playerItem = player?.currentItem 457 | 458 | guard let times = playerItem?.loadedTimeRanges else { 459 | return 460 | } 461 | 462 | let values = times.map({ $0.timeRangeValue}) 463 | self.delegate?.playerVideo(player: self, loadedTimeRanges: values) 464 | 465 | 466 | } else if context == &durationContext{ 467 | 468 | if let currentItem = player?.currentItem { 469 | self.delegate?.playerVideo(player: self, duration: currentItem.duration.seconds) 470 | 471 | } 472 | 473 | } else if context == &statusItemContext{ 474 | //status of item has changed 475 | if let currentItem = player?.currentItem { 476 | 477 | self.delegate?.playerVideo(player: self, statusItemPlayer: currentItem.status, error: currentItem.error) 478 | } 479 | 480 | } else if context == &rateContext{ 481 | guard let newRateNumber = (change?[NSKeyValueChangeKey.newKey] as? NSNumber) else{ 482 | return 483 | } 484 | let newRate = newRateNumber.floatValue 485 | if newRate == 0 { 486 | removeCurrentTimeObserver() 487 | } else { 488 | addCurrentTimeObserver() 489 | } 490 | 491 | //self.delegate?.playerVideo(self, rate: newRate) 492 | self.delegate?.playerVideo(player: self, rate: newRate) 493 | 494 | } else if context == &playerItemContext{ 495 | guard let oldItem = (change?[NSKeyValueChangeKey.oldKey] as? PVPlayerItem) else{ 496 | return 497 | } 498 | removeObserversVideoItem(playerItem: oldItem) 499 | guard let newItem = (change?[NSKeyValueChangeKey.newKey] as? PVPlayerItem) else{ 500 | return 501 | } 502 | addObserversVideoItem(playerItem: newItem) 503 | } else { 504 | super.observeValue(forKeyPath: keyPath, of: object, change: change , context: context) 505 | } 506 | } 507 | } 508 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj --------------------------------------------------------------------------------