├── .gitignore ├── .swift-version ├── HLSThumbnailGenerator.podspec ├── HLSThumbnailGenerator.xcodeproj ├── project.pbxproj └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── LICENSE ├── README.md ├── Sources ├── HLSThumbnailGenerator.h ├── Info.plist ├── PlatformBridge.swift ├── Protocols │ └── Dispatching.swift ├── ThumbnailGenerationError.swift └── ThumbnailGenerator.swift └── Tests ├── HLSThumbnailGeneratorTests.swift └── Info.plist /.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 | .DS_Store 9 | 10 | ## Various settings 11 | *.pbxuser 12 | !default.pbxuser 13 | *.mode1v3 14 | !default.mode1v3 15 | *.mode2v3 16 | !default.mode2v3 17 | *.perspectivev3 18 | !default.perspectivev3 19 | xcuserdata/ 20 | 21 | ## Other 22 | *.moved-aside 23 | *.xccheckout 24 | *.xcscmblueprint 25 | 26 | ## Obj-C/Swift specific 27 | *.hmap 28 | *.ipa 29 | *.dSYM.zip 30 | *.dSYM 31 | 32 | ## Playgrounds 33 | timeline.xctimeline 34 | playground.xcworkspace 35 | 36 | # Swift Package Manager 37 | # 38 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 39 | # Packages/ 40 | # Package.pins 41 | # Package.resolved 42 | .build/ 43 | 44 | # CocoaPods 45 | # 46 | # We recommend against adding the Pods directory to your .gitignore. However 47 | # you should judge for yourself, the pros and cons are mentioned at: 48 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 49 | # 50 | # Pods/ 51 | 52 | # Carthage 53 | # 54 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 55 | # Carthage/Checkouts 56 | 57 | Carthage/Build 58 | 59 | # fastlane 60 | # 61 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 62 | # screenshots whenever they are needed. 63 | # For more information about the recommended setup visit: 64 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 65 | 66 | fastlane/report.xml 67 | fastlane/Preview.html 68 | fastlane/screenshots/**/*.png 69 | fastlane/test_output 70 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 4.2 2 | -------------------------------------------------------------------------------- /HLSThumbnailGenerator.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'HLSThumbnailGenerator' 3 | s.version = '0.5.0' 4 | s.license = 'MIT' 5 | s.summary = 'Substitute for AVAssetImageGenerator when generating thumbnails from streaming video.' 6 | s.homepage = 'https://github.com/toddkramer/HLSThumbnailGenerator' 7 | s.author = 'Todd Kramer' 8 | s.source = { :git => 'https://github.com/toddkramer/HLSThumbnailGenerator.git', :tag => s.version } 9 | 10 | s.module_name = 'HLSThumbnailGenerator' 11 | s.ios.deployment_target = '9.0' 12 | s.osx.deployment_target = '10.11' 13 | s.tvos.deployment_target = '9.0' 14 | 15 | s.source_files = 'Sources/**/*.swift' 16 | end 17 | -------------------------------------------------------------------------------- /HLSThumbnailGenerator.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 9BF04EA6221ED12B00D1E6C1 /* HLSThumbnailGenerator.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BF04E9C221ED12B00D1E6C1 /* HLSThumbnailGenerator.framework */; }; 11 | 9BF04EC2221ED14100D1E6C1 /* HLSThumbnailGenerator.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BF04EB9221ED14100D1E6C1 /* HLSThumbnailGenerator.framework */; }; 12 | 9BF04EDE221ED16100D1E6C1 /* HLSThumbnailGenerator.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BF04ED5221ED16100D1E6C1 /* HLSThumbnailGenerator.framework */; }; 13 | 9BF04EF2221ED26800D1E6C1 /* HLSThumbnailGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BF04EED221ED26100D1E6C1 /* HLSThumbnailGenerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14 | 9BF04EF3221ED26900D1E6C1 /* HLSThumbnailGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BF04EED221ED26100D1E6C1 /* HLSThumbnailGenerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; 15 | 9BF04EF4221ED26A00D1E6C1 /* HLSThumbnailGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BF04EED221ED26100D1E6C1 /* HLSThumbnailGenerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; 16 | 9BF04EF5221ED3ED00D1E6C1 /* HLSThumbnailGeneratorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04EF0221ED26100D1E6C1 /* HLSThumbnailGeneratorTests.swift */; }; 17 | 9BF04EF6221ED3EE00D1E6C1 /* HLSThumbnailGeneratorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04EF0221ED26100D1E6C1 /* HLSThumbnailGeneratorTests.swift */; }; 18 | 9BF04EF7221ED3EF00D1E6C1 /* HLSThumbnailGeneratorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04EF0221ED26100D1E6C1 /* HLSThumbnailGeneratorTests.swift */; }; 19 | 9BF04EFA221ED45700D1E6C1 /* Dispatching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04EF9221ED45700D1E6C1 /* Dispatching.swift */; }; 20 | 9BF04EFB221ED45700D1E6C1 /* Dispatching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04EF9221ED45700D1E6C1 /* Dispatching.swift */; }; 21 | 9BF04EFC221ED45700D1E6C1 /* Dispatching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04EF9221ED45700D1E6C1 /* Dispatching.swift */; }; 22 | 9BF04EFE221ED48C00D1E6C1 /* PlatformBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04EFD221ED48C00D1E6C1 /* PlatformBridge.swift */; }; 23 | 9BF04EFF221ED48C00D1E6C1 /* PlatformBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04EFD221ED48C00D1E6C1 /* PlatformBridge.swift */; }; 24 | 9BF04F00221ED48C00D1E6C1 /* PlatformBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04EFD221ED48C00D1E6C1 /* PlatformBridge.swift */; }; 25 | 9BF04F02221ED4CC00D1E6C1 /* ThumbnailGenerationError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04F01221ED4CC00D1E6C1 /* ThumbnailGenerationError.swift */; }; 26 | 9BF04F03221ED4CC00D1E6C1 /* ThumbnailGenerationError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04F01221ED4CC00D1E6C1 /* ThumbnailGenerationError.swift */; }; 27 | 9BF04F04221ED4CC00D1E6C1 /* ThumbnailGenerationError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04F01221ED4CC00D1E6C1 /* ThumbnailGenerationError.swift */; }; 28 | 9BF04F06221ED50500D1E6C1 /* ThumbnailGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04F05221ED50500D1E6C1 /* ThumbnailGenerator.swift */; }; 29 | 9BF04F07221ED50500D1E6C1 /* ThumbnailGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04F05221ED50500D1E6C1 /* ThumbnailGenerator.swift */; }; 30 | 9BF04F08221ED50500D1E6C1 /* ThumbnailGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF04F05221ED50500D1E6C1 /* ThumbnailGenerator.swift */; }; 31 | /* End PBXBuildFile section */ 32 | 33 | /* Begin PBXContainerItemProxy section */ 34 | 9BF04EA7221ED12B00D1E6C1 /* PBXContainerItemProxy */ = { 35 | isa = PBXContainerItemProxy; 36 | containerPortal = 9BF04E91221ED0FF00D1E6C1 /* Project object */; 37 | proxyType = 1; 38 | remoteGlobalIDString = 9BF04E9B221ED12B00D1E6C1; 39 | remoteInfo = HLSThumbnailGeneratorMobile; 40 | }; 41 | 9BF04EC3221ED14100D1E6C1 /* PBXContainerItemProxy */ = { 42 | isa = PBXContainerItemProxy; 43 | containerPortal = 9BF04E91221ED0FF00D1E6C1 /* Project object */; 44 | proxyType = 1; 45 | remoteGlobalIDString = 9BF04EB8221ED14100D1E6C1; 46 | remoteInfo = HLSThumbnailGeneratorMac; 47 | }; 48 | 9BF04EDF221ED16100D1E6C1 /* PBXContainerItemProxy */ = { 49 | isa = PBXContainerItemProxy; 50 | containerPortal = 9BF04E91221ED0FF00D1E6C1 /* Project object */; 51 | proxyType = 1; 52 | remoteGlobalIDString = 9BF04ED4221ED16100D1E6C1; 53 | remoteInfo = HLSThumbnailGeneratorTV; 54 | }; 55 | /* End PBXContainerItemProxy section */ 56 | 57 | /* Begin PBXFileReference section */ 58 | 9BF04E9C221ED12B00D1E6C1 /* HLSThumbnailGenerator.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HLSThumbnailGenerator.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 59 | 9BF04EA5221ED12B00D1E6C1 /* HLSThumbnailGeneratorMobileTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HLSThumbnailGeneratorMobileTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 60 | 9BF04EB9221ED14100D1E6C1 /* HLSThumbnailGenerator.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HLSThumbnailGenerator.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 61 | 9BF04EC1221ED14100D1E6C1 /* HLSThumbnailGeneratorMacTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HLSThumbnailGeneratorMacTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 62 | 9BF04ED5221ED16100D1E6C1 /* HLSThumbnailGenerator.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HLSThumbnailGenerator.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 63 | 9BF04EDD221ED16100D1E6C1 /* HLSThumbnailGeneratorTVTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HLSThumbnailGeneratorTVTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 64 | 9BF04EED221ED26100D1E6C1 /* HLSThumbnailGenerator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HLSThumbnailGenerator.h; sourceTree = ""; }; 65 | 9BF04EEE221ED26100D1E6C1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 66 | 9BF04EF0221ED26100D1E6C1 /* HLSThumbnailGeneratorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HLSThumbnailGeneratorTests.swift; sourceTree = ""; }; 67 | 9BF04EF1221ED26100D1E6C1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 68 | 9BF04EF9221ED45700D1E6C1 /* Dispatching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dispatching.swift; sourceTree = ""; }; 69 | 9BF04EFD221ED48C00D1E6C1 /* PlatformBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlatformBridge.swift; sourceTree = ""; }; 70 | 9BF04F01221ED4CC00D1E6C1 /* ThumbnailGenerationError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThumbnailGenerationError.swift; sourceTree = ""; }; 71 | 9BF04F05221ED50500D1E6C1 /* ThumbnailGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThumbnailGenerator.swift; sourceTree = ""; }; 72 | /* End PBXFileReference section */ 73 | 74 | /* Begin PBXFrameworksBuildPhase section */ 75 | 9BF04E99221ED12B00D1E6C1 /* Frameworks */ = { 76 | isa = PBXFrameworksBuildPhase; 77 | buildActionMask = 2147483647; 78 | files = ( 79 | ); 80 | runOnlyForDeploymentPostprocessing = 0; 81 | }; 82 | 9BF04EA2221ED12B00D1E6C1 /* Frameworks */ = { 83 | isa = PBXFrameworksBuildPhase; 84 | buildActionMask = 2147483647; 85 | files = ( 86 | 9BF04EA6221ED12B00D1E6C1 /* HLSThumbnailGenerator.framework in Frameworks */, 87 | ); 88 | runOnlyForDeploymentPostprocessing = 0; 89 | }; 90 | 9BF04EB6221ED14100D1E6C1 /* Frameworks */ = { 91 | isa = PBXFrameworksBuildPhase; 92 | buildActionMask = 2147483647; 93 | files = ( 94 | ); 95 | runOnlyForDeploymentPostprocessing = 0; 96 | }; 97 | 9BF04EBE221ED14100D1E6C1 /* Frameworks */ = { 98 | isa = PBXFrameworksBuildPhase; 99 | buildActionMask = 2147483647; 100 | files = ( 101 | 9BF04EC2221ED14100D1E6C1 /* HLSThumbnailGenerator.framework in Frameworks */, 102 | ); 103 | runOnlyForDeploymentPostprocessing = 0; 104 | }; 105 | 9BF04ED2221ED16100D1E6C1 /* Frameworks */ = { 106 | isa = PBXFrameworksBuildPhase; 107 | buildActionMask = 2147483647; 108 | files = ( 109 | ); 110 | runOnlyForDeploymentPostprocessing = 0; 111 | }; 112 | 9BF04EDA221ED16100D1E6C1 /* Frameworks */ = { 113 | isa = PBXFrameworksBuildPhase; 114 | buildActionMask = 2147483647; 115 | files = ( 116 | 9BF04EDE221ED16100D1E6C1 /* HLSThumbnailGenerator.framework in Frameworks */, 117 | ); 118 | runOnlyForDeploymentPostprocessing = 0; 119 | }; 120 | /* End PBXFrameworksBuildPhase section */ 121 | 122 | /* Begin PBXGroup section */ 123 | 9BF04E90221ED0FF00D1E6C1 = { 124 | isa = PBXGroup; 125 | children = ( 126 | 9BF04EEC221ED26100D1E6C1 /* Sources */, 127 | 9BF04EEF221ED26100D1E6C1 /* Tests */, 128 | 9BF04E9D221ED12B00D1E6C1 /* Products */, 129 | ); 130 | sourceTree = ""; 131 | }; 132 | 9BF04E9D221ED12B00D1E6C1 /* Products */ = { 133 | isa = PBXGroup; 134 | children = ( 135 | 9BF04E9C221ED12B00D1E6C1 /* HLSThumbnailGenerator.framework */, 136 | 9BF04EA5221ED12B00D1E6C1 /* HLSThumbnailGeneratorMobileTests.xctest */, 137 | 9BF04EB9221ED14100D1E6C1 /* HLSThumbnailGenerator.framework */, 138 | 9BF04EC1221ED14100D1E6C1 /* HLSThumbnailGeneratorMacTests.xctest */, 139 | 9BF04ED5221ED16100D1E6C1 /* HLSThumbnailGenerator.framework */, 140 | 9BF04EDD221ED16100D1E6C1 /* HLSThumbnailGeneratorTVTests.xctest */, 141 | ); 142 | name = Products; 143 | sourceTree = ""; 144 | }; 145 | 9BF04EEC221ED26100D1E6C1 /* Sources */ = { 146 | isa = PBXGroup; 147 | children = ( 148 | 9BF04EED221ED26100D1E6C1 /* HLSThumbnailGenerator.h */, 149 | 9BF04EEE221ED26100D1E6C1 /* Info.plist */, 150 | 9BF04EFD221ED48C00D1E6C1 /* PlatformBridge.swift */, 151 | 9BF04EF8221ED44500D1E6C1 /* Protocols */, 152 | 9BF04F05221ED50500D1E6C1 /* ThumbnailGenerator.swift */, 153 | 9BF04F01221ED4CC00D1E6C1 /* ThumbnailGenerationError.swift */, 154 | ); 155 | path = Sources; 156 | sourceTree = ""; 157 | }; 158 | 9BF04EEF221ED26100D1E6C1 /* Tests */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | 9BF04EF0221ED26100D1E6C1 /* HLSThumbnailGeneratorTests.swift */, 162 | 9BF04EF1221ED26100D1E6C1 /* Info.plist */, 163 | ); 164 | path = Tests; 165 | sourceTree = ""; 166 | }; 167 | 9BF04EF8221ED44500D1E6C1 /* Protocols */ = { 168 | isa = PBXGroup; 169 | children = ( 170 | 9BF04EF9221ED45700D1E6C1 /* Dispatching.swift */, 171 | ); 172 | path = Protocols; 173 | sourceTree = ""; 174 | }; 175 | /* End PBXGroup section */ 176 | 177 | /* Begin PBXHeadersBuildPhase section */ 178 | 9BF04E97221ED12B00D1E6C1 /* Headers */ = { 179 | isa = PBXHeadersBuildPhase; 180 | buildActionMask = 2147483647; 181 | files = ( 182 | 9BF04EF2221ED26800D1E6C1 /* HLSThumbnailGenerator.h in Headers */, 183 | ); 184 | runOnlyForDeploymentPostprocessing = 0; 185 | }; 186 | 9BF04EB4221ED14100D1E6C1 /* Headers */ = { 187 | isa = PBXHeadersBuildPhase; 188 | buildActionMask = 2147483647; 189 | files = ( 190 | 9BF04EF3221ED26900D1E6C1 /* HLSThumbnailGenerator.h in Headers */, 191 | ); 192 | runOnlyForDeploymentPostprocessing = 0; 193 | }; 194 | 9BF04ED0221ED16100D1E6C1 /* Headers */ = { 195 | isa = PBXHeadersBuildPhase; 196 | buildActionMask = 2147483647; 197 | files = ( 198 | 9BF04EF4221ED26A00D1E6C1 /* HLSThumbnailGenerator.h in Headers */, 199 | ); 200 | runOnlyForDeploymentPostprocessing = 0; 201 | }; 202 | /* End PBXHeadersBuildPhase section */ 203 | 204 | /* Begin PBXNativeTarget section */ 205 | 9BF04E9B221ED12B00D1E6C1 /* HLSThumbnailGeneratorMobile */ = { 206 | isa = PBXNativeTarget; 207 | buildConfigurationList = 9BF04EAE221ED12B00D1E6C1 /* Build configuration list for PBXNativeTarget "HLSThumbnailGeneratorMobile" */; 208 | buildPhases = ( 209 | 9BF04E97221ED12B00D1E6C1 /* Headers */, 210 | 9BF04E98221ED12B00D1E6C1 /* Sources */, 211 | 9BF04E99221ED12B00D1E6C1 /* Frameworks */, 212 | 9BF04E9A221ED12B00D1E6C1 /* Resources */, 213 | ); 214 | buildRules = ( 215 | ); 216 | dependencies = ( 217 | ); 218 | name = HLSThumbnailGeneratorMobile; 219 | productName = HLSThumbnailGeneratorMobile; 220 | productReference = 9BF04E9C221ED12B00D1E6C1 /* HLSThumbnailGenerator.framework */; 221 | productType = "com.apple.product-type.framework"; 222 | }; 223 | 9BF04EA4221ED12B00D1E6C1 /* HLSThumbnailGeneratorMobileTests */ = { 224 | isa = PBXNativeTarget; 225 | buildConfigurationList = 9BF04EB1221ED12B00D1E6C1 /* Build configuration list for PBXNativeTarget "HLSThumbnailGeneratorMobileTests" */; 226 | buildPhases = ( 227 | 9BF04EA1221ED12B00D1E6C1 /* Sources */, 228 | 9BF04EA2221ED12B00D1E6C1 /* Frameworks */, 229 | 9BF04EA3221ED12B00D1E6C1 /* Resources */, 230 | ); 231 | buildRules = ( 232 | ); 233 | dependencies = ( 234 | 9BF04EA8221ED12B00D1E6C1 /* PBXTargetDependency */, 235 | ); 236 | name = HLSThumbnailGeneratorMobileTests; 237 | productName = HLSThumbnailGeneratorMobileTests; 238 | productReference = 9BF04EA5221ED12B00D1E6C1 /* HLSThumbnailGeneratorMobileTests.xctest */; 239 | productType = "com.apple.product-type.bundle.unit-test"; 240 | }; 241 | 9BF04EB8221ED14100D1E6C1 /* HLSThumbnailGeneratorMac */ = { 242 | isa = PBXNativeTarget; 243 | buildConfigurationList = 9BF04ECA221ED14100D1E6C1 /* Build configuration list for PBXNativeTarget "HLSThumbnailGeneratorMac" */; 244 | buildPhases = ( 245 | 9BF04EB4221ED14100D1E6C1 /* Headers */, 246 | 9BF04EB5221ED14100D1E6C1 /* Sources */, 247 | 9BF04EB6221ED14100D1E6C1 /* Frameworks */, 248 | 9BF04EB7221ED14100D1E6C1 /* Resources */, 249 | ); 250 | buildRules = ( 251 | ); 252 | dependencies = ( 253 | ); 254 | name = HLSThumbnailGeneratorMac; 255 | productName = HLSThumbnailGeneratorMac; 256 | productReference = 9BF04EB9221ED14100D1E6C1 /* HLSThumbnailGenerator.framework */; 257 | productType = "com.apple.product-type.framework"; 258 | }; 259 | 9BF04EC0221ED14100D1E6C1 /* HLSThumbnailGeneratorMacTests */ = { 260 | isa = PBXNativeTarget; 261 | buildConfigurationList = 9BF04ECD221ED14100D1E6C1 /* Build configuration list for PBXNativeTarget "HLSThumbnailGeneratorMacTests" */; 262 | buildPhases = ( 263 | 9BF04EBD221ED14100D1E6C1 /* Sources */, 264 | 9BF04EBE221ED14100D1E6C1 /* Frameworks */, 265 | 9BF04EBF221ED14100D1E6C1 /* Resources */, 266 | ); 267 | buildRules = ( 268 | ); 269 | dependencies = ( 270 | 9BF04EC4221ED14100D1E6C1 /* PBXTargetDependency */, 271 | ); 272 | name = HLSThumbnailGeneratorMacTests; 273 | productName = HLSThumbnailGeneratorMacTests; 274 | productReference = 9BF04EC1221ED14100D1E6C1 /* HLSThumbnailGeneratorMacTests.xctest */; 275 | productType = "com.apple.product-type.bundle.unit-test"; 276 | }; 277 | 9BF04ED4221ED16100D1E6C1 /* HLSThumbnailGeneratorTV */ = { 278 | isa = PBXNativeTarget; 279 | buildConfigurationList = 9BF04EE6221ED16200D1E6C1 /* Build configuration list for PBXNativeTarget "HLSThumbnailGeneratorTV" */; 280 | buildPhases = ( 281 | 9BF04ED0221ED16100D1E6C1 /* Headers */, 282 | 9BF04ED1221ED16100D1E6C1 /* Sources */, 283 | 9BF04ED2221ED16100D1E6C1 /* Frameworks */, 284 | 9BF04ED3221ED16100D1E6C1 /* Resources */, 285 | ); 286 | buildRules = ( 287 | ); 288 | dependencies = ( 289 | ); 290 | name = HLSThumbnailGeneratorTV; 291 | productName = HLSThumbnailGeneratorTV; 292 | productReference = 9BF04ED5221ED16100D1E6C1 /* HLSThumbnailGenerator.framework */; 293 | productType = "com.apple.product-type.framework"; 294 | }; 295 | 9BF04EDC221ED16100D1E6C1 /* HLSThumbnailGeneratorTVTests */ = { 296 | isa = PBXNativeTarget; 297 | buildConfigurationList = 9BF04EE9221ED16200D1E6C1 /* Build configuration list for PBXNativeTarget "HLSThumbnailGeneratorTVTests" */; 298 | buildPhases = ( 299 | 9BF04ED9221ED16100D1E6C1 /* Sources */, 300 | 9BF04EDA221ED16100D1E6C1 /* Frameworks */, 301 | 9BF04EDB221ED16100D1E6C1 /* Resources */, 302 | ); 303 | buildRules = ( 304 | ); 305 | dependencies = ( 306 | 9BF04EE0221ED16100D1E6C1 /* PBXTargetDependency */, 307 | ); 308 | name = HLSThumbnailGeneratorTVTests; 309 | productName = HLSThumbnailGeneratorTVTests; 310 | productReference = 9BF04EDD221ED16100D1E6C1 /* HLSThumbnailGeneratorTVTests.xctest */; 311 | productType = "com.apple.product-type.bundle.unit-test"; 312 | }; 313 | /* End PBXNativeTarget section */ 314 | 315 | /* Begin PBXProject section */ 316 | 9BF04E91221ED0FF00D1E6C1 /* Project object */ = { 317 | isa = PBXProject; 318 | attributes = { 319 | LastSwiftUpdateCheck = 1010; 320 | LastUpgradeCheck = 1010; 321 | TargetAttributes = { 322 | 9BF04E9B221ED12B00D1E6C1 = { 323 | CreatedOnToolsVersion = 10.1; 324 | LastSwiftMigration = 1010; 325 | }; 326 | 9BF04EA4221ED12B00D1E6C1 = { 327 | CreatedOnToolsVersion = 10.1; 328 | }; 329 | 9BF04EB8221ED14100D1E6C1 = { 330 | CreatedOnToolsVersion = 10.1; 331 | LastSwiftMigration = 1010; 332 | }; 333 | 9BF04EC0221ED14100D1E6C1 = { 334 | CreatedOnToolsVersion = 10.1; 335 | }; 336 | 9BF04ED4221ED16100D1E6C1 = { 337 | CreatedOnToolsVersion = 10.1; 338 | LastSwiftMigration = 1010; 339 | }; 340 | 9BF04EDC221ED16100D1E6C1 = { 341 | CreatedOnToolsVersion = 10.1; 342 | }; 343 | }; 344 | }; 345 | buildConfigurationList = 9BF04E94221ED0FF00D1E6C1 /* Build configuration list for PBXProject "HLSThumbnailGenerator" */; 346 | compatibilityVersion = "Xcode 9.3"; 347 | developmentRegion = en; 348 | hasScannedForEncodings = 0; 349 | knownRegions = ( 350 | en, 351 | ); 352 | mainGroup = 9BF04E90221ED0FF00D1E6C1; 353 | productRefGroup = 9BF04E9D221ED12B00D1E6C1 /* Products */; 354 | projectDirPath = ""; 355 | projectRoot = ""; 356 | targets = ( 357 | 9BF04E9B221ED12B00D1E6C1 /* HLSThumbnailGeneratorMobile */, 358 | 9BF04EA4221ED12B00D1E6C1 /* HLSThumbnailGeneratorMobileTests */, 359 | 9BF04EB8221ED14100D1E6C1 /* HLSThumbnailGeneratorMac */, 360 | 9BF04EC0221ED14100D1E6C1 /* HLSThumbnailGeneratorMacTests */, 361 | 9BF04ED4221ED16100D1E6C1 /* HLSThumbnailGeneratorTV */, 362 | 9BF04EDC221ED16100D1E6C1 /* HLSThumbnailGeneratorTVTests */, 363 | ); 364 | }; 365 | /* End PBXProject section */ 366 | 367 | /* Begin PBXResourcesBuildPhase section */ 368 | 9BF04E9A221ED12B00D1E6C1 /* Resources */ = { 369 | isa = PBXResourcesBuildPhase; 370 | buildActionMask = 2147483647; 371 | files = ( 372 | ); 373 | runOnlyForDeploymentPostprocessing = 0; 374 | }; 375 | 9BF04EA3221ED12B00D1E6C1 /* Resources */ = { 376 | isa = PBXResourcesBuildPhase; 377 | buildActionMask = 2147483647; 378 | files = ( 379 | ); 380 | runOnlyForDeploymentPostprocessing = 0; 381 | }; 382 | 9BF04EB7221ED14100D1E6C1 /* Resources */ = { 383 | isa = PBXResourcesBuildPhase; 384 | buildActionMask = 2147483647; 385 | files = ( 386 | ); 387 | runOnlyForDeploymentPostprocessing = 0; 388 | }; 389 | 9BF04EBF221ED14100D1E6C1 /* Resources */ = { 390 | isa = PBXResourcesBuildPhase; 391 | buildActionMask = 2147483647; 392 | files = ( 393 | ); 394 | runOnlyForDeploymentPostprocessing = 0; 395 | }; 396 | 9BF04ED3221ED16100D1E6C1 /* Resources */ = { 397 | isa = PBXResourcesBuildPhase; 398 | buildActionMask = 2147483647; 399 | files = ( 400 | ); 401 | runOnlyForDeploymentPostprocessing = 0; 402 | }; 403 | 9BF04EDB221ED16100D1E6C1 /* Resources */ = { 404 | isa = PBXResourcesBuildPhase; 405 | buildActionMask = 2147483647; 406 | files = ( 407 | ); 408 | runOnlyForDeploymentPostprocessing = 0; 409 | }; 410 | /* End PBXResourcesBuildPhase section */ 411 | 412 | /* Begin PBXSourcesBuildPhase section */ 413 | 9BF04E98221ED12B00D1E6C1 /* Sources */ = { 414 | isa = PBXSourcesBuildPhase; 415 | buildActionMask = 2147483647; 416 | files = ( 417 | 9BF04EFA221ED45700D1E6C1 /* Dispatching.swift in Sources */, 418 | 9BF04EFE221ED48C00D1E6C1 /* PlatformBridge.swift in Sources */, 419 | 9BF04F06221ED50500D1E6C1 /* ThumbnailGenerator.swift in Sources */, 420 | 9BF04F02221ED4CC00D1E6C1 /* ThumbnailGenerationError.swift in Sources */, 421 | ); 422 | runOnlyForDeploymentPostprocessing = 0; 423 | }; 424 | 9BF04EA1221ED12B00D1E6C1 /* Sources */ = { 425 | isa = PBXSourcesBuildPhase; 426 | buildActionMask = 2147483647; 427 | files = ( 428 | 9BF04EF5221ED3ED00D1E6C1 /* HLSThumbnailGeneratorTests.swift in Sources */, 429 | ); 430 | runOnlyForDeploymentPostprocessing = 0; 431 | }; 432 | 9BF04EB5221ED14100D1E6C1 /* Sources */ = { 433 | isa = PBXSourcesBuildPhase; 434 | buildActionMask = 2147483647; 435 | files = ( 436 | 9BF04EFB221ED45700D1E6C1 /* Dispatching.swift in Sources */, 437 | 9BF04EFF221ED48C00D1E6C1 /* PlatformBridge.swift in Sources */, 438 | 9BF04F07221ED50500D1E6C1 /* ThumbnailGenerator.swift in Sources */, 439 | 9BF04F03221ED4CC00D1E6C1 /* ThumbnailGenerationError.swift in Sources */, 440 | ); 441 | runOnlyForDeploymentPostprocessing = 0; 442 | }; 443 | 9BF04EBD221ED14100D1E6C1 /* Sources */ = { 444 | isa = PBXSourcesBuildPhase; 445 | buildActionMask = 2147483647; 446 | files = ( 447 | 9BF04EF6221ED3EE00D1E6C1 /* HLSThumbnailGeneratorTests.swift in Sources */, 448 | ); 449 | runOnlyForDeploymentPostprocessing = 0; 450 | }; 451 | 9BF04ED1221ED16100D1E6C1 /* Sources */ = { 452 | isa = PBXSourcesBuildPhase; 453 | buildActionMask = 2147483647; 454 | files = ( 455 | 9BF04EFC221ED45700D1E6C1 /* Dispatching.swift in Sources */, 456 | 9BF04F00221ED48C00D1E6C1 /* PlatformBridge.swift in Sources */, 457 | 9BF04F08221ED50500D1E6C1 /* ThumbnailGenerator.swift in Sources */, 458 | 9BF04F04221ED4CC00D1E6C1 /* ThumbnailGenerationError.swift in Sources */, 459 | ); 460 | runOnlyForDeploymentPostprocessing = 0; 461 | }; 462 | 9BF04ED9221ED16100D1E6C1 /* Sources */ = { 463 | isa = PBXSourcesBuildPhase; 464 | buildActionMask = 2147483647; 465 | files = ( 466 | 9BF04EF7221ED3EF00D1E6C1 /* HLSThumbnailGeneratorTests.swift in Sources */, 467 | ); 468 | runOnlyForDeploymentPostprocessing = 0; 469 | }; 470 | /* End PBXSourcesBuildPhase section */ 471 | 472 | /* Begin PBXTargetDependency section */ 473 | 9BF04EA8221ED12B00D1E6C1 /* PBXTargetDependency */ = { 474 | isa = PBXTargetDependency; 475 | target = 9BF04E9B221ED12B00D1E6C1 /* HLSThumbnailGeneratorMobile */; 476 | targetProxy = 9BF04EA7221ED12B00D1E6C1 /* PBXContainerItemProxy */; 477 | }; 478 | 9BF04EC4221ED14100D1E6C1 /* PBXTargetDependency */ = { 479 | isa = PBXTargetDependency; 480 | target = 9BF04EB8221ED14100D1E6C1 /* HLSThumbnailGeneratorMac */; 481 | targetProxy = 9BF04EC3221ED14100D1E6C1 /* PBXContainerItemProxy */; 482 | }; 483 | 9BF04EE0221ED16100D1E6C1 /* PBXTargetDependency */ = { 484 | isa = PBXTargetDependency; 485 | target = 9BF04ED4221ED16100D1E6C1 /* HLSThumbnailGeneratorTV */; 486 | targetProxy = 9BF04EDF221ED16100D1E6C1 /* PBXContainerItemProxy */; 487 | }; 488 | /* End PBXTargetDependency section */ 489 | 490 | /* Begin XCBuildConfiguration section */ 491 | 9BF04E95221ED0FF00D1E6C1 /* Debug */ = { 492 | isa = XCBuildConfiguration; 493 | buildSettings = { 494 | }; 495 | name = Debug; 496 | }; 497 | 9BF04E96221ED0FF00D1E6C1 /* Release */ = { 498 | isa = XCBuildConfiguration; 499 | buildSettings = { 500 | }; 501 | name = Release; 502 | }; 503 | 9BF04EAF221ED12B00D1E6C1 /* Debug */ = { 504 | isa = XCBuildConfiguration; 505 | buildSettings = { 506 | ALWAYS_SEARCH_USER_PATHS = NO; 507 | CLANG_ANALYZER_NONNULL = YES; 508 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 509 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 510 | CLANG_CXX_LIBRARY = "libc++"; 511 | CLANG_ENABLE_MODULES = YES; 512 | CLANG_ENABLE_OBJC_ARC = YES; 513 | CLANG_ENABLE_OBJC_WEAK = YES; 514 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 515 | CLANG_WARN_BOOL_CONVERSION = YES; 516 | CLANG_WARN_COMMA = YES; 517 | CLANG_WARN_CONSTANT_CONVERSION = YES; 518 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 519 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 520 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 521 | CLANG_WARN_EMPTY_BODY = YES; 522 | CLANG_WARN_ENUM_CONVERSION = YES; 523 | CLANG_WARN_INFINITE_RECURSION = YES; 524 | CLANG_WARN_INT_CONVERSION = YES; 525 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 526 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 527 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 528 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 529 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 530 | CLANG_WARN_STRICT_PROTOTYPES = YES; 531 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 532 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 533 | CLANG_WARN_UNREACHABLE_CODE = YES; 534 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 535 | CODE_SIGN_IDENTITY = "iPhone Developer"; 536 | CODE_SIGN_STYLE = Automatic; 537 | COPY_PHASE_STRIP = NO; 538 | CURRENT_PROJECT_VERSION = 1; 539 | DEBUG_INFORMATION_FORMAT = dwarf; 540 | DEFINES_MODULE = YES; 541 | DEVELOPMENT_TEAM = R3JQ32F9MD; 542 | DYLIB_COMPATIBILITY_VERSION = 1; 543 | DYLIB_CURRENT_VERSION = 1; 544 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 545 | ENABLE_STRICT_OBJC_MSGSEND = YES; 546 | ENABLE_TESTABILITY = YES; 547 | GCC_C_LANGUAGE_STANDARD = gnu11; 548 | GCC_DYNAMIC_NO_PIC = NO; 549 | GCC_NO_COMMON_BLOCKS = YES; 550 | GCC_OPTIMIZATION_LEVEL = 0; 551 | GCC_PREPROCESSOR_DEFINITIONS = ( 552 | "DEBUG=1", 553 | "$(inherited)", 554 | ); 555 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 556 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 557 | GCC_WARN_UNDECLARED_SELECTOR = YES; 558 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 559 | GCC_WARN_UNUSED_FUNCTION = YES; 560 | GCC_WARN_UNUSED_VARIABLE = YES; 561 | INFOPLIST_FILE = Sources/Info.plist; 562 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 563 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 564 | LD_RUNPATH_SEARCH_PATHS = ( 565 | "$(inherited)", 566 | "@executable_path/Frameworks", 567 | "@loader_path/Frameworks", 568 | ); 569 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 570 | MTL_FAST_MATH = YES; 571 | ONLY_ACTIVE_ARCH = YES; 572 | PRODUCT_BUNDLE_IDENTIFIER = com.toddkramer.HLSThumbnailGeneratorMobile; 573 | PRODUCT_NAME = HLSThumbnailGenerator; 574 | SDKROOT = iphoneos; 575 | SKIP_INSTALL = YES; 576 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 577 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 578 | SWIFT_VERSION = 4.2; 579 | TARGETED_DEVICE_FAMILY = "1,2"; 580 | VERSIONING_SYSTEM = "apple-generic"; 581 | VERSION_INFO_PREFIX = ""; 582 | }; 583 | name = Debug; 584 | }; 585 | 9BF04EB0221ED12B00D1E6C1 /* Release */ = { 586 | isa = XCBuildConfiguration; 587 | buildSettings = { 588 | ALWAYS_SEARCH_USER_PATHS = NO; 589 | CLANG_ANALYZER_NONNULL = YES; 590 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 591 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 592 | CLANG_CXX_LIBRARY = "libc++"; 593 | CLANG_ENABLE_MODULES = YES; 594 | CLANG_ENABLE_OBJC_ARC = YES; 595 | CLANG_ENABLE_OBJC_WEAK = YES; 596 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 597 | CLANG_WARN_BOOL_CONVERSION = YES; 598 | CLANG_WARN_COMMA = YES; 599 | CLANG_WARN_CONSTANT_CONVERSION = YES; 600 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 601 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 602 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 603 | CLANG_WARN_EMPTY_BODY = YES; 604 | CLANG_WARN_ENUM_CONVERSION = YES; 605 | CLANG_WARN_INFINITE_RECURSION = YES; 606 | CLANG_WARN_INT_CONVERSION = YES; 607 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 608 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 609 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 610 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 611 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 612 | CLANG_WARN_STRICT_PROTOTYPES = YES; 613 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 614 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 615 | CLANG_WARN_UNREACHABLE_CODE = YES; 616 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 617 | CODE_SIGN_IDENTITY = "iPhone Developer"; 618 | CODE_SIGN_STYLE = Automatic; 619 | COPY_PHASE_STRIP = NO; 620 | CURRENT_PROJECT_VERSION = 1; 621 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 622 | DEFINES_MODULE = YES; 623 | DEVELOPMENT_TEAM = R3JQ32F9MD; 624 | DYLIB_COMPATIBILITY_VERSION = 1; 625 | DYLIB_CURRENT_VERSION = 1; 626 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 627 | ENABLE_NS_ASSERTIONS = NO; 628 | ENABLE_STRICT_OBJC_MSGSEND = YES; 629 | GCC_C_LANGUAGE_STANDARD = gnu11; 630 | GCC_NO_COMMON_BLOCKS = YES; 631 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 632 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 633 | GCC_WARN_UNDECLARED_SELECTOR = YES; 634 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 635 | GCC_WARN_UNUSED_FUNCTION = YES; 636 | GCC_WARN_UNUSED_VARIABLE = YES; 637 | INFOPLIST_FILE = Sources/Info.plist; 638 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 639 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 640 | LD_RUNPATH_SEARCH_PATHS = ( 641 | "$(inherited)", 642 | "@executable_path/Frameworks", 643 | "@loader_path/Frameworks", 644 | ); 645 | MTL_ENABLE_DEBUG_INFO = NO; 646 | MTL_FAST_MATH = YES; 647 | PRODUCT_BUNDLE_IDENTIFIER = com.toddkramer.HLSThumbnailGeneratorMobile; 648 | PRODUCT_NAME = HLSThumbnailGenerator; 649 | SDKROOT = iphoneos; 650 | SKIP_INSTALL = YES; 651 | SWIFT_COMPILATION_MODE = wholemodule; 652 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 653 | SWIFT_VERSION = 4.2; 654 | TARGETED_DEVICE_FAMILY = "1,2"; 655 | VALIDATE_PRODUCT = YES; 656 | VERSIONING_SYSTEM = "apple-generic"; 657 | VERSION_INFO_PREFIX = ""; 658 | }; 659 | name = Release; 660 | }; 661 | 9BF04EB2221ED12B00D1E6C1 /* Debug */ = { 662 | isa = XCBuildConfiguration; 663 | buildSettings = { 664 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 665 | ALWAYS_SEARCH_USER_PATHS = NO; 666 | CLANG_ANALYZER_NONNULL = YES; 667 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 668 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 669 | CLANG_CXX_LIBRARY = "libc++"; 670 | CLANG_ENABLE_MODULES = YES; 671 | CLANG_ENABLE_OBJC_ARC = YES; 672 | CLANG_ENABLE_OBJC_WEAK = YES; 673 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 674 | CLANG_WARN_BOOL_CONVERSION = YES; 675 | CLANG_WARN_COMMA = YES; 676 | CLANG_WARN_CONSTANT_CONVERSION = YES; 677 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 678 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 679 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 680 | CLANG_WARN_EMPTY_BODY = YES; 681 | CLANG_WARN_ENUM_CONVERSION = YES; 682 | CLANG_WARN_INFINITE_RECURSION = YES; 683 | CLANG_WARN_INT_CONVERSION = YES; 684 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 685 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 686 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 687 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 688 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 689 | CLANG_WARN_STRICT_PROTOTYPES = YES; 690 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 691 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 692 | CLANG_WARN_UNREACHABLE_CODE = YES; 693 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 694 | CODE_SIGN_IDENTITY = "iPhone Developer"; 695 | CODE_SIGN_STYLE = Automatic; 696 | COPY_PHASE_STRIP = NO; 697 | DEBUG_INFORMATION_FORMAT = dwarf; 698 | DEVELOPMENT_TEAM = R3JQ32F9MD; 699 | ENABLE_STRICT_OBJC_MSGSEND = YES; 700 | ENABLE_TESTABILITY = YES; 701 | GCC_C_LANGUAGE_STANDARD = gnu11; 702 | GCC_DYNAMIC_NO_PIC = NO; 703 | GCC_NO_COMMON_BLOCKS = YES; 704 | GCC_OPTIMIZATION_LEVEL = 0; 705 | GCC_PREPROCESSOR_DEFINITIONS = ( 706 | "DEBUG=1", 707 | "$(inherited)", 708 | ); 709 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 710 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 711 | GCC_WARN_UNDECLARED_SELECTOR = YES; 712 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 713 | GCC_WARN_UNUSED_FUNCTION = YES; 714 | GCC_WARN_UNUSED_VARIABLE = YES; 715 | INFOPLIST_FILE = Tests/Info.plist; 716 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 717 | LD_RUNPATH_SEARCH_PATHS = ( 718 | "$(inherited)", 719 | "@executable_path/Frameworks", 720 | "@loader_path/Frameworks", 721 | ); 722 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 723 | MTL_FAST_MATH = YES; 724 | ONLY_ACTIVE_ARCH = YES; 725 | PRODUCT_BUNDLE_IDENTIFIER = com.toddkramer.HLSThumbnailGeneratorMobileTests; 726 | PRODUCT_NAME = "$(TARGET_NAME)"; 727 | SDKROOT = iphoneos; 728 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 729 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 730 | SWIFT_VERSION = 4.2; 731 | TARGETED_DEVICE_FAMILY = "1,2"; 732 | }; 733 | name = Debug; 734 | }; 735 | 9BF04EB3221ED12B00D1E6C1 /* Release */ = { 736 | isa = XCBuildConfiguration; 737 | buildSettings = { 738 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 739 | ALWAYS_SEARCH_USER_PATHS = NO; 740 | CLANG_ANALYZER_NONNULL = YES; 741 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 742 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 743 | CLANG_CXX_LIBRARY = "libc++"; 744 | CLANG_ENABLE_MODULES = YES; 745 | CLANG_ENABLE_OBJC_ARC = YES; 746 | CLANG_ENABLE_OBJC_WEAK = YES; 747 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 748 | CLANG_WARN_BOOL_CONVERSION = YES; 749 | CLANG_WARN_COMMA = YES; 750 | CLANG_WARN_CONSTANT_CONVERSION = YES; 751 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 752 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 753 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 754 | CLANG_WARN_EMPTY_BODY = YES; 755 | CLANG_WARN_ENUM_CONVERSION = YES; 756 | CLANG_WARN_INFINITE_RECURSION = YES; 757 | CLANG_WARN_INT_CONVERSION = YES; 758 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 759 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 760 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 761 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 762 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 763 | CLANG_WARN_STRICT_PROTOTYPES = YES; 764 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 765 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 766 | CLANG_WARN_UNREACHABLE_CODE = YES; 767 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 768 | CODE_SIGN_IDENTITY = "iPhone Developer"; 769 | CODE_SIGN_STYLE = Automatic; 770 | COPY_PHASE_STRIP = NO; 771 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 772 | DEVELOPMENT_TEAM = R3JQ32F9MD; 773 | ENABLE_NS_ASSERTIONS = NO; 774 | ENABLE_STRICT_OBJC_MSGSEND = YES; 775 | GCC_C_LANGUAGE_STANDARD = gnu11; 776 | GCC_NO_COMMON_BLOCKS = YES; 777 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 778 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 779 | GCC_WARN_UNDECLARED_SELECTOR = YES; 780 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 781 | GCC_WARN_UNUSED_FUNCTION = YES; 782 | GCC_WARN_UNUSED_VARIABLE = YES; 783 | INFOPLIST_FILE = Tests/Info.plist; 784 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 785 | LD_RUNPATH_SEARCH_PATHS = ( 786 | "$(inherited)", 787 | "@executable_path/Frameworks", 788 | "@loader_path/Frameworks", 789 | ); 790 | MTL_ENABLE_DEBUG_INFO = NO; 791 | MTL_FAST_MATH = YES; 792 | PRODUCT_BUNDLE_IDENTIFIER = com.toddkramer.HLSThumbnailGeneratorMobileTests; 793 | PRODUCT_NAME = "$(TARGET_NAME)"; 794 | SDKROOT = iphoneos; 795 | SWIFT_COMPILATION_MODE = wholemodule; 796 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 797 | SWIFT_VERSION = 4.2; 798 | TARGETED_DEVICE_FAMILY = "1,2"; 799 | VALIDATE_PRODUCT = YES; 800 | }; 801 | name = Release; 802 | }; 803 | 9BF04ECB221ED14100D1E6C1 /* Debug */ = { 804 | isa = XCBuildConfiguration; 805 | buildSettings = { 806 | ALWAYS_SEARCH_USER_PATHS = NO; 807 | CLANG_ANALYZER_NONNULL = YES; 808 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 809 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 810 | CLANG_CXX_LIBRARY = "libc++"; 811 | CLANG_ENABLE_MODULES = YES; 812 | CLANG_ENABLE_OBJC_ARC = YES; 813 | CLANG_ENABLE_OBJC_WEAK = YES; 814 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 815 | CLANG_WARN_BOOL_CONVERSION = YES; 816 | CLANG_WARN_COMMA = YES; 817 | CLANG_WARN_CONSTANT_CONVERSION = YES; 818 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 819 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 820 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 821 | CLANG_WARN_EMPTY_BODY = YES; 822 | CLANG_WARN_ENUM_CONVERSION = YES; 823 | CLANG_WARN_INFINITE_RECURSION = YES; 824 | CLANG_WARN_INT_CONVERSION = YES; 825 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 826 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 827 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 828 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 829 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 830 | CLANG_WARN_STRICT_PROTOTYPES = YES; 831 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 832 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 833 | CLANG_WARN_UNREACHABLE_CODE = YES; 834 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 835 | CODE_SIGN_IDENTITY = "Mac Developer"; 836 | CODE_SIGN_STYLE = Automatic; 837 | COMBINE_HIDPI_IMAGES = YES; 838 | COPY_PHASE_STRIP = NO; 839 | CURRENT_PROJECT_VERSION = 1; 840 | DEBUG_INFORMATION_FORMAT = dwarf; 841 | DEFINES_MODULE = YES; 842 | DEVELOPMENT_TEAM = R3JQ32F9MD; 843 | DYLIB_COMPATIBILITY_VERSION = 1; 844 | DYLIB_CURRENT_VERSION = 1; 845 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 846 | ENABLE_STRICT_OBJC_MSGSEND = YES; 847 | ENABLE_TESTABILITY = YES; 848 | FRAMEWORK_VERSION = A; 849 | GCC_C_LANGUAGE_STANDARD = gnu11; 850 | GCC_DYNAMIC_NO_PIC = NO; 851 | GCC_NO_COMMON_BLOCKS = YES; 852 | GCC_OPTIMIZATION_LEVEL = 0; 853 | GCC_PREPROCESSOR_DEFINITIONS = ( 854 | "DEBUG=1", 855 | "$(inherited)", 856 | ); 857 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 858 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 859 | GCC_WARN_UNDECLARED_SELECTOR = YES; 860 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 861 | GCC_WARN_UNUSED_FUNCTION = YES; 862 | GCC_WARN_UNUSED_VARIABLE = YES; 863 | INFOPLIST_FILE = Sources/Info.plist; 864 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 865 | LD_RUNPATH_SEARCH_PATHS = ( 866 | "$(inherited)", 867 | "@executable_path/../Frameworks", 868 | "@loader_path/Frameworks", 869 | ); 870 | MACOSX_DEPLOYMENT_TARGET = 10.11; 871 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 872 | MTL_FAST_MATH = YES; 873 | ONLY_ACTIVE_ARCH = YES; 874 | PRODUCT_BUNDLE_IDENTIFIER = com.toddkramer.HLSThumbnailGeneratorMac; 875 | PRODUCT_NAME = HLSThumbnailGenerator; 876 | SDKROOT = macosx; 877 | SKIP_INSTALL = YES; 878 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 879 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 880 | SWIFT_VERSION = 4.2; 881 | VERSIONING_SYSTEM = "apple-generic"; 882 | VERSION_INFO_PREFIX = ""; 883 | }; 884 | name = Debug; 885 | }; 886 | 9BF04ECC221ED14100D1E6C1 /* Release */ = { 887 | isa = XCBuildConfiguration; 888 | buildSettings = { 889 | ALWAYS_SEARCH_USER_PATHS = NO; 890 | CLANG_ANALYZER_NONNULL = YES; 891 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 892 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 893 | CLANG_CXX_LIBRARY = "libc++"; 894 | CLANG_ENABLE_MODULES = YES; 895 | CLANG_ENABLE_OBJC_ARC = YES; 896 | CLANG_ENABLE_OBJC_WEAK = YES; 897 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 898 | CLANG_WARN_BOOL_CONVERSION = YES; 899 | CLANG_WARN_COMMA = YES; 900 | CLANG_WARN_CONSTANT_CONVERSION = YES; 901 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 902 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 903 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 904 | CLANG_WARN_EMPTY_BODY = YES; 905 | CLANG_WARN_ENUM_CONVERSION = YES; 906 | CLANG_WARN_INFINITE_RECURSION = YES; 907 | CLANG_WARN_INT_CONVERSION = YES; 908 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 909 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 910 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 911 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 912 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 913 | CLANG_WARN_STRICT_PROTOTYPES = YES; 914 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 915 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 916 | CLANG_WARN_UNREACHABLE_CODE = YES; 917 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 918 | CODE_SIGN_IDENTITY = "Mac Developer"; 919 | CODE_SIGN_STYLE = Automatic; 920 | COMBINE_HIDPI_IMAGES = YES; 921 | COPY_PHASE_STRIP = NO; 922 | CURRENT_PROJECT_VERSION = 1; 923 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 924 | DEFINES_MODULE = YES; 925 | DEVELOPMENT_TEAM = R3JQ32F9MD; 926 | DYLIB_COMPATIBILITY_VERSION = 1; 927 | DYLIB_CURRENT_VERSION = 1; 928 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 929 | ENABLE_NS_ASSERTIONS = NO; 930 | ENABLE_STRICT_OBJC_MSGSEND = YES; 931 | FRAMEWORK_VERSION = A; 932 | GCC_C_LANGUAGE_STANDARD = gnu11; 933 | GCC_NO_COMMON_BLOCKS = YES; 934 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 935 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 936 | GCC_WARN_UNDECLARED_SELECTOR = YES; 937 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 938 | GCC_WARN_UNUSED_FUNCTION = YES; 939 | GCC_WARN_UNUSED_VARIABLE = YES; 940 | INFOPLIST_FILE = Sources/Info.plist; 941 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 942 | LD_RUNPATH_SEARCH_PATHS = ( 943 | "$(inherited)", 944 | "@executable_path/../Frameworks", 945 | "@loader_path/Frameworks", 946 | ); 947 | MACOSX_DEPLOYMENT_TARGET = 10.11; 948 | MTL_ENABLE_DEBUG_INFO = NO; 949 | MTL_FAST_MATH = YES; 950 | PRODUCT_BUNDLE_IDENTIFIER = com.toddkramer.HLSThumbnailGeneratorMac; 951 | PRODUCT_NAME = HLSThumbnailGenerator; 952 | SDKROOT = macosx; 953 | SKIP_INSTALL = YES; 954 | SWIFT_COMPILATION_MODE = wholemodule; 955 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 956 | SWIFT_VERSION = 4.2; 957 | VERSIONING_SYSTEM = "apple-generic"; 958 | VERSION_INFO_PREFIX = ""; 959 | }; 960 | name = Release; 961 | }; 962 | 9BF04ECE221ED14100D1E6C1 /* Debug */ = { 963 | isa = XCBuildConfiguration; 964 | buildSettings = { 965 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 966 | ALWAYS_SEARCH_USER_PATHS = NO; 967 | CLANG_ANALYZER_NONNULL = YES; 968 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 969 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 970 | CLANG_CXX_LIBRARY = "libc++"; 971 | CLANG_ENABLE_MODULES = YES; 972 | CLANG_ENABLE_OBJC_ARC = YES; 973 | CLANG_ENABLE_OBJC_WEAK = YES; 974 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 975 | CLANG_WARN_BOOL_CONVERSION = YES; 976 | CLANG_WARN_COMMA = YES; 977 | CLANG_WARN_CONSTANT_CONVERSION = YES; 978 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 979 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 980 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 981 | CLANG_WARN_EMPTY_BODY = YES; 982 | CLANG_WARN_ENUM_CONVERSION = YES; 983 | CLANG_WARN_INFINITE_RECURSION = YES; 984 | CLANG_WARN_INT_CONVERSION = YES; 985 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 986 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 987 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 988 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 989 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 990 | CLANG_WARN_STRICT_PROTOTYPES = YES; 991 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 992 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 993 | CLANG_WARN_UNREACHABLE_CODE = YES; 994 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 995 | CODE_SIGN_IDENTITY = "Mac Developer"; 996 | CODE_SIGN_STYLE = Automatic; 997 | COMBINE_HIDPI_IMAGES = YES; 998 | COPY_PHASE_STRIP = NO; 999 | DEBUG_INFORMATION_FORMAT = dwarf; 1000 | DEVELOPMENT_TEAM = R3JQ32F9MD; 1001 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1002 | ENABLE_TESTABILITY = YES; 1003 | GCC_C_LANGUAGE_STANDARD = gnu11; 1004 | GCC_DYNAMIC_NO_PIC = NO; 1005 | GCC_NO_COMMON_BLOCKS = YES; 1006 | GCC_OPTIMIZATION_LEVEL = 0; 1007 | GCC_PREPROCESSOR_DEFINITIONS = ( 1008 | "DEBUG=1", 1009 | "$(inherited)", 1010 | ); 1011 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1012 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1013 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1014 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1015 | GCC_WARN_UNUSED_FUNCTION = YES; 1016 | GCC_WARN_UNUSED_VARIABLE = YES; 1017 | INFOPLIST_FILE = Tests/Info.plist; 1018 | LD_RUNPATH_SEARCH_PATHS = ( 1019 | "$(inherited)", 1020 | "@executable_path/../Frameworks", 1021 | "@loader_path/../Frameworks", 1022 | ); 1023 | MACOSX_DEPLOYMENT_TARGET = 10.14; 1024 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 1025 | MTL_FAST_MATH = YES; 1026 | ONLY_ACTIVE_ARCH = YES; 1027 | PRODUCT_BUNDLE_IDENTIFIER = com.toddkramer.HLSThumbnailGeneratorMacTests; 1028 | PRODUCT_NAME = "$(TARGET_NAME)"; 1029 | SDKROOT = macosx; 1030 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 1031 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 1032 | SWIFT_VERSION = 4.2; 1033 | }; 1034 | name = Debug; 1035 | }; 1036 | 9BF04ECF221ED14100D1E6C1 /* Release */ = { 1037 | isa = XCBuildConfiguration; 1038 | buildSettings = { 1039 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 1040 | ALWAYS_SEARCH_USER_PATHS = NO; 1041 | CLANG_ANALYZER_NONNULL = YES; 1042 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 1043 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 1044 | CLANG_CXX_LIBRARY = "libc++"; 1045 | CLANG_ENABLE_MODULES = YES; 1046 | CLANG_ENABLE_OBJC_ARC = YES; 1047 | CLANG_ENABLE_OBJC_WEAK = YES; 1048 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 1049 | CLANG_WARN_BOOL_CONVERSION = YES; 1050 | CLANG_WARN_COMMA = YES; 1051 | CLANG_WARN_CONSTANT_CONVERSION = YES; 1052 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 1053 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 1054 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1055 | CLANG_WARN_EMPTY_BODY = YES; 1056 | CLANG_WARN_ENUM_CONVERSION = YES; 1057 | CLANG_WARN_INFINITE_RECURSION = YES; 1058 | CLANG_WARN_INT_CONVERSION = YES; 1059 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 1060 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 1061 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 1062 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 1063 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 1064 | CLANG_WARN_STRICT_PROTOTYPES = YES; 1065 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1066 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 1067 | CLANG_WARN_UNREACHABLE_CODE = YES; 1068 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 1069 | CODE_SIGN_IDENTITY = "Mac Developer"; 1070 | CODE_SIGN_STYLE = Automatic; 1071 | COMBINE_HIDPI_IMAGES = YES; 1072 | COPY_PHASE_STRIP = NO; 1073 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 1074 | DEVELOPMENT_TEAM = R3JQ32F9MD; 1075 | ENABLE_NS_ASSERTIONS = NO; 1076 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1077 | GCC_C_LANGUAGE_STANDARD = gnu11; 1078 | GCC_NO_COMMON_BLOCKS = YES; 1079 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1080 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1081 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1082 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1083 | GCC_WARN_UNUSED_FUNCTION = YES; 1084 | GCC_WARN_UNUSED_VARIABLE = YES; 1085 | INFOPLIST_FILE = Tests/Info.plist; 1086 | LD_RUNPATH_SEARCH_PATHS = ( 1087 | "$(inherited)", 1088 | "@executable_path/../Frameworks", 1089 | "@loader_path/../Frameworks", 1090 | ); 1091 | MACOSX_DEPLOYMENT_TARGET = 10.14; 1092 | MTL_ENABLE_DEBUG_INFO = NO; 1093 | MTL_FAST_MATH = YES; 1094 | PRODUCT_BUNDLE_IDENTIFIER = com.toddkramer.HLSThumbnailGeneratorMacTests; 1095 | PRODUCT_NAME = "$(TARGET_NAME)"; 1096 | SDKROOT = macosx; 1097 | SWIFT_COMPILATION_MODE = wholemodule; 1098 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 1099 | SWIFT_VERSION = 4.2; 1100 | }; 1101 | name = Release; 1102 | }; 1103 | 9BF04EE7221ED16200D1E6C1 /* Debug */ = { 1104 | isa = XCBuildConfiguration; 1105 | buildSettings = { 1106 | ALWAYS_SEARCH_USER_PATHS = NO; 1107 | CLANG_ANALYZER_NONNULL = YES; 1108 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 1109 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 1110 | CLANG_CXX_LIBRARY = "libc++"; 1111 | CLANG_ENABLE_MODULES = YES; 1112 | CLANG_ENABLE_OBJC_ARC = YES; 1113 | CLANG_ENABLE_OBJC_WEAK = YES; 1114 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 1115 | CLANG_WARN_BOOL_CONVERSION = YES; 1116 | CLANG_WARN_COMMA = YES; 1117 | CLANG_WARN_CONSTANT_CONVERSION = YES; 1118 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 1119 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 1120 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1121 | CLANG_WARN_EMPTY_BODY = YES; 1122 | CLANG_WARN_ENUM_CONVERSION = YES; 1123 | CLANG_WARN_INFINITE_RECURSION = YES; 1124 | CLANG_WARN_INT_CONVERSION = YES; 1125 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 1126 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 1127 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 1128 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 1129 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 1130 | CLANG_WARN_STRICT_PROTOTYPES = YES; 1131 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1132 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 1133 | CLANG_WARN_UNREACHABLE_CODE = YES; 1134 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 1135 | CODE_SIGN_IDENTITY = ""; 1136 | CODE_SIGN_STYLE = Automatic; 1137 | COPY_PHASE_STRIP = NO; 1138 | CURRENT_PROJECT_VERSION = 1; 1139 | DEBUG_INFORMATION_FORMAT = dwarf; 1140 | DEFINES_MODULE = YES; 1141 | DEVELOPMENT_TEAM = R3JQ32F9MD; 1142 | DYLIB_COMPATIBILITY_VERSION = 1; 1143 | DYLIB_CURRENT_VERSION = 1; 1144 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 1145 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1146 | ENABLE_TESTABILITY = YES; 1147 | GCC_C_LANGUAGE_STANDARD = gnu11; 1148 | GCC_DYNAMIC_NO_PIC = NO; 1149 | GCC_NO_COMMON_BLOCKS = YES; 1150 | GCC_OPTIMIZATION_LEVEL = 0; 1151 | GCC_PREPROCESSOR_DEFINITIONS = ( 1152 | "DEBUG=1", 1153 | "$(inherited)", 1154 | ); 1155 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1156 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1157 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1158 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1159 | GCC_WARN_UNUSED_FUNCTION = YES; 1160 | GCC_WARN_UNUSED_VARIABLE = YES; 1161 | INFOPLIST_FILE = Sources/Info.plist; 1162 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 1163 | LD_RUNPATH_SEARCH_PATHS = ( 1164 | "$(inherited)", 1165 | "@executable_path/Frameworks", 1166 | "@loader_path/Frameworks", 1167 | ); 1168 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 1169 | MTL_FAST_MATH = YES; 1170 | ONLY_ACTIVE_ARCH = YES; 1171 | PRODUCT_BUNDLE_IDENTIFIER = com.toddkramer.HLSThumbnailGeneratorTV; 1172 | PRODUCT_NAME = HLSThumbnailGenerator; 1173 | SDKROOT = appletvos; 1174 | SKIP_INSTALL = YES; 1175 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 1176 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 1177 | SWIFT_VERSION = 4.2; 1178 | TARGETED_DEVICE_FAMILY = 3; 1179 | TVOS_DEPLOYMENT_TARGET = 9.0; 1180 | VERSIONING_SYSTEM = "apple-generic"; 1181 | VERSION_INFO_PREFIX = ""; 1182 | }; 1183 | name = Debug; 1184 | }; 1185 | 9BF04EE8221ED16200D1E6C1 /* Release */ = { 1186 | isa = XCBuildConfiguration; 1187 | buildSettings = { 1188 | ALWAYS_SEARCH_USER_PATHS = NO; 1189 | CLANG_ANALYZER_NONNULL = YES; 1190 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 1191 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 1192 | CLANG_CXX_LIBRARY = "libc++"; 1193 | CLANG_ENABLE_MODULES = YES; 1194 | CLANG_ENABLE_OBJC_ARC = YES; 1195 | CLANG_ENABLE_OBJC_WEAK = YES; 1196 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 1197 | CLANG_WARN_BOOL_CONVERSION = YES; 1198 | CLANG_WARN_COMMA = YES; 1199 | CLANG_WARN_CONSTANT_CONVERSION = YES; 1200 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 1201 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 1202 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1203 | CLANG_WARN_EMPTY_BODY = YES; 1204 | CLANG_WARN_ENUM_CONVERSION = YES; 1205 | CLANG_WARN_INFINITE_RECURSION = YES; 1206 | CLANG_WARN_INT_CONVERSION = YES; 1207 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 1208 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 1209 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 1210 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 1211 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 1212 | CLANG_WARN_STRICT_PROTOTYPES = YES; 1213 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1214 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 1215 | CLANG_WARN_UNREACHABLE_CODE = YES; 1216 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 1217 | CODE_SIGN_IDENTITY = ""; 1218 | CODE_SIGN_STYLE = Automatic; 1219 | COPY_PHASE_STRIP = NO; 1220 | CURRENT_PROJECT_VERSION = 1; 1221 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 1222 | DEFINES_MODULE = YES; 1223 | DEVELOPMENT_TEAM = R3JQ32F9MD; 1224 | DYLIB_COMPATIBILITY_VERSION = 1; 1225 | DYLIB_CURRENT_VERSION = 1; 1226 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 1227 | ENABLE_NS_ASSERTIONS = NO; 1228 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1229 | GCC_C_LANGUAGE_STANDARD = gnu11; 1230 | GCC_NO_COMMON_BLOCKS = YES; 1231 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1232 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1233 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1234 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1235 | GCC_WARN_UNUSED_FUNCTION = YES; 1236 | GCC_WARN_UNUSED_VARIABLE = YES; 1237 | INFOPLIST_FILE = Sources/Info.plist; 1238 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 1239 | LD_RUNPATH_SEARCH_PATHS = ( 1240 | "$(inherited)", 1241 | "@executable_path/Frameworks", 1242 | "@loader_path/Frameworks", 1243 | ); 1244 | MTL_ENABLE_DEBUG_INFO = NO; 1245 | MTL_FAST_MATH = YES; 1246 | PRODUCT_BUNDLE_IDENTIFIER = com.toddkramer.HLSThumbnailGeneratorTV; 1247 | PRODUCT_NAME = HLSThumbnailGenerator; 1248 | SDKROOT = appletvos; 1249 | SKIP_INSTALL = YES; 1250 | SWIFT_COMPILATION_MODE = wholemodule; 1251 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 1252 | SWIFT_VERSION = 4.2; 1253 | TARGETED_DEVICE_FAMILY = 3; 1254 | TVOS_DEPLOYMENT_TARGET = 9.0; 1255 | VALIDATE_PRODUCT = YES; 1256 | VERSIONING_SYSTEM = "apple-generic"; 1257 | VERSION_INFO_PREFIX = ""; 1258 | }; 1259 | name = Release; 1260 | }; 1261 | 9BF04EEA221ED16200D1E6C1 /* Debug */ = { 1262 | isa = XCBuildConfiguration; 1263 | buildSettings = { 1264 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 1265 | ALWAYS_SEARCH_USER_PATHS = NO; 1266 | CLANG_ANALYZER_NONNULL = YES; 1267 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 1268 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 1269 | CLANG_CXX_LIBRARY = "libc++"; 1270 | CLANG_ENABLE_MODULES = YES; 1271 | CLANG_ENABLE_OBJC_ARC = YES; 1272 | CLANG_ENABLE_OBJC_WEAK = YES; 1273 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 1274 | CLANG_WARN_BOOL_CONVERSION = YES; 1275 | CLANG_WARN_COMMA = YES; 1276 | CLANG_WARN_CONSTANT_CONVERSION = YES; 1277 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 1278 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 1279 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1280 | CLANG_WARN_EMPTY_BODY = YES; 1281 | CLANG_WARN_ENUM_CONVERSION = YES; 1282 | CLANG_WARN_INFINITE_RECURSION = YES; 1283 | CLANG_WARN_INT_CONVERSION = YES; 1284 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 1285 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 1286 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 1287 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 1288 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 1289 | CLANG_WARN_STRICT_PROTOTYPES = YES; 1290 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1291 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 1292 | CLANG_WARN_UNREACHABLE_CODE = YES; 1293 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 1294 | CODE_SIGN_STYLE = Automatic; 1295 | COPY_PHASE_STRIP = NO; 1296 | DEBUG_INFORMATION_FORMAT = dwarf; 1297 | DEVELOPMENT_TEAM = R3JQ32F9MD; 1298 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1299 | ENABLE_TESTABILITY = YES; 1300 | GCC_C_LANGUAGE_STANDARD = gnu11; 1301 | GCC_DYNAMIC_NO_PIC = NO; 1302 | GCC_NO_COMMON_BLOCKS = YES; 1303 | GCC_OPTIMIZATION_LEVEL = 0; 1304 | GCC_PREPROCESSOR_DEFINITIONS = ( 1305 | "DEBUG=1", 1306 | "$(inherited)", 1307 | ); 1308 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1309 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1310 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1311 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1312 | GCC_WARN_UNUSED_FUNCTION = YES; 1313 | GCC_WARN_UNUSED_VARIABLE = YES; 1314 | INFOPLIST_FILE = Tests/Info.plist; 1315 | LD_RUNPATH_SEARCH_PATHS = ( 1316 | "$(inherited)", 1317 | "@executable_path/Frameworks", 1318 | "@loader_path/Frameworks", 1319 | ); 1320 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 1321 | MTL_FAST_MATH = YES; 1322 | ONLY_ACTIVE_ARCH = YES; 1323 | PRODUCT_BUNDLE_IDENTIFIER = com.toddkramer.HLSThumbnailGeneratorTVTests; 1324 | PRODUCT_NAME = "$(TARGET_NAME)"; 1325 | SDKROOT = appletvos; 1326 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 1327 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 1328 | SWIFT_VERSION = 4.2; 1329 | TARGETED_DEVICE_FAMILY = 3; 1330 | TVOS_DEPLOYMENT_TARGET = 12.1; 1331 | }; 1332 | name = Debug; 1333 | }; 1334 | 9BF04EEB221ED16200D1E6C1 /* Release */ = { 1335 | isa = XCBuildConfiguration; 1336 | buildSettings = { 1337 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 1338 | ALWAYS_SEARCH_USER_PATHS = NO; 1339 | CLANG_ANALYZER_NONNULL = YES; 1340 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 1341 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 1342 | CLANG_CXX_LIBRARY = "libc++"; 1343 | CLANG_ENABLE_MODULES = YES; 1344 | CLANG_ENABLE_OBJC_ARC = YES; 1345 | CLANG_ENABLE_OBJC_WEAK = YES; 1346 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 1347 | CLANG_WARN_BOOL_CONVERSION = YES; 1348 | CLANG_WARN_COMMA = YES; 1349 | CLANG_WARN_CONSTANT_CONVERSION = YES; 1350 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 1351 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 1352 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1353 | CLANG_WARN_EMPTY_BODY = YES; 1354 | CLANG_WARN_ENUM_CONVERSION = YES; 1355 | CLANG_WARN_INFINITE_RECURSION = YES; 1356 | CLANG_WARN_INT_CONVERSION = YES; 1357 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 1358 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 1359 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 1360 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 1361 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 1362 | CLANG_WARN_STRICT_PROTOTYPES = YES; 1363 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1364 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 1365 | CLANG_WARN_UNREACHABLE_CODE = YES; 1366 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 1367 | CODE_SIGN_STYLE = Automatic; 1368 | COPY_PHASE_STRIP = NO; 1369 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 1370 | DEVELOPMENT_TEAM = R3JQ32F9MD; 1371 | ENABLE_NS_ASSERTIONS = NO; 1372 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1373 | GCC_C_LANGUAGE_STANDARD = gnu11; 1374 | GCC_NO_COMMON_BLOCKS = YES; 1375 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1376 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1377 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1378 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1379 | GCC_WARN_UNUSED_FUNCTION = YES; 1380 | GCC_WARN_UNUSED_VARIABLE = YES; 1381 | INFOPLIST_FILE = Tests/Info.plist; 1382 | LD_RUNPATH_SEARCH_PATHS = ( 1383 | "$(inherited)", 1384 | "@executable_path/Frameworks", 1385 | "@loader_path/Frameworks", 1386 | ); 1387 | MTL_ENABLE_DEBUG_INFO = NO; 1388 | MTL_FAST_MATH = YES; 1389 | PRODUCT_BUNDLE_IDENTIFIER = com.toddkramer.HLSThumbnailGeneratorTVTests; 1390 | PRODUCT_NAME = "$(TARGET_NAME)"; 1391 | SDKROOT = appletvos; 1392 | SWIFT_COMPILATION_MODE = wholemodule; 1393 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 1394 | SWIFT_VERSION = 4.2; 1395 | TARGETED_DEVICE_FAMILY = 3; 1396 | TVOS_DEPLOYMENT_TARGET = 12.1; 1397 | VALIDATE_PRODUCT = YES; 1398 | }; 1399 | name = Release; 1400 | }; 1401 | /* End XCBuildConfiguration section */ 1402 | 1403 | /* Begin XCConfigurationList section */ 1404 | 9BF04E94221ED0FF00D1E6C1 /* Build configuration list for PBXProject "HLSThumbnailGenerator" */ = { 1405 | isa = XCConfigurationList; 1406 | buildConfigurations = ( 1407 | 9BF04E95221ED0FF00D1E6C1 /* Debug */, 1408 | 9BF04E96221ED0FF00D1E6C1 /* Release */, 1409 | ); 1410 | defaultConfigurationIsVisible = 0; 1411 | defaultConfigurationName = Release; 1412 | }; 1413 | 9BF04EAE221ED12B00D1E6C1 /* Build configuration list for PBXNativeTarget "HLSThumbnailGeneratorMobile" */ = { 1414 | isa = XCConfigurationList; 1415 | buildConfigurations = ( 1416 | 9BF04EAF221ED12B00D1E6C1 /* Debug */, 1417 | 9BF04EB0221ED12B00D1E6C1 /* Release */, 1418 | ); 1419 | defaultConfigurationIsVisible = 0; 1420 | defaultConfigurationName = Release; 1421 | }; 1422 | 9BF04EB1221ED12B00D1E6C1 /* Build configuration list for PBXNativeTarget "HLSThumbnailGeneratorMobileTests" */ = { 1423 | isa = XCConfigurationList; 1424 | buildConfigurations = ( 1425 | 9BF04EB2221ED12B00D1E6C1 /* Debug */, 1426 | 9BF04EB3221ED12B00D1E6C1 /* Release */, 1427 | ); 1428 | defaultConfigurationIsVisible = 0; 1429 | defaultConfigurationName = Release; 1430 | }; 1431 | 9BF04ECA221ED14100D1E6C1 /* Build configuration list for PBXNativeTarget "HLSThumbnailGeneratorMac" */ = { 1432 | isa = XCConfigurationList; 1433 | buildConfigurations = ( 1434 | 9BF04ECB221ED14100D1E6C1 /* Debug */, 1435 | 9BF04ECC221ED14100D1E6C1 /* Release */, 1436 | ); 1437 | defaultConfigurationIsVisible = 0; 1438 | defaultConfigurationName = Release; 1439 | }; 1440 | 9BF04ECD221ED14100D1E6C1 /* Build configuration list for PBXNativeTarget "HLSThumbnailGeneratorMacTests" */ = { 1441 | isa = XCConfigurationList; 1442 | buildConfigurations = ( 1443 | 9BF04ECE221ED14100D1E6C1 /* Debug */, 1444 | 9BF04ECF221ED14100D1E6C1 /* Release */, 1445 | ); 1446 | defaultConfigurationIsVisible = 0; 1447 | defaultConfigurationName = Release; 1448 | }; 1449 | 9BF04EE6221ED16200D1E6C1 /* Build configuration list for PBXNativeTarget "HLSThumbnailGeneratorTV" */ = { 1450 | isa = XCConfigurationList; 1451 | buildConfigurations = ( 1452 | 9BF04EE7221ED16200D1E6C1 /* Debug */, 1453 | 9BF04EE8221ED16200D1E6C1 /* Release */, 1454 | ); 1455 | defaultConfigurationIsVisible = 0; 1456 | defaultConfigurationName = Release; 1457 | }; 1458 | 9BF04EE9221ED16200D1E6C1 /* Build configuration list for PBXNativeTarget "HLSThumbnailGeneratorTVTests" */ = { 1459 | isa = XCConfigurationList; 1460 | buildConfigurations = ( 1461 | 9BF04EEA221ED16200D1E6C1 /* Debug */, 1462 | 9BF04EEB221ED16200D1E6C1 /* Release */, 1463 | ); 1464 | defaultConfigurationIsVisible = 0; 1465 | defaultConfigurationName = Release; 1466 | }; 1467 | /* End XCConfigurationList section */ 1468 | }; 1469 | rootObject = 9BF04E91221ED0FF00D1E6C1 /* Project object */; 1470 | } 1471 | -------------------------------------------------------------------------------- /HLSThumbnailGenerator.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /HLSThumbnailGenerator.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Todd Kramer 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HLSThumbnailGenerator 2 | 3 | ![CocoaPods Version](https://cocoapod-badges.herokuapp.com/v/HLSThumbnailGenerator/badge.png) [![Swift](https://img.shields.io/badge/swift-4.2-orange.svg?style=flat)](https://developer.apple.com/swift/) ![Platform](https://cocoapod-badges.herokuapp.com/p/HLSThumbnailGenerator/badge.png) [![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-4BC51D.svg?style=flat)](https://github.com/apple/swift-package-manager) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 4 | 5 | ## Overview 6 | 7 | HLSThumbnailGenerator is a substitute for AVAssetImageGenerator when generating thumbnails from streaming video. 8 | 9 | ## Features 10 | 11 | - iOS 9.0+, macOS 10.10+, tvOS 9.0+ 12 | - Can pass in an array of times (in seconds) to request thumbnails 13 | 14 | ## Usage 15 | 16 | ```swift 17 | let urlString = "" 18 | guard let url = URL(string: urlString) else { return } 19 | let asset = AVAsset(url: url) 20 | generator = ThumbnailGenerator(asset: asset) 21 | generator.delegate = self 22 | generator.generateThumbnails(atTimesInSeconds: [16.1, 33.2, 55.2]) 23 | ``` 24 | 25 | ## Installation 26 | 27 | ### CocoaPods 28 | 29 | [CocoaPods][] is a centralized dependency manager for Cocoa projects. To install 30 | HLSThumbnailGenerator with CocoaPods: 31 | 32 | 1. Make sure the latest version of CocoaPods is [installed](https://guides.cocoapods.org/using/getting-started.html#getting-started). 33 | 34 | 35 | 2. Add HLSThumbnailGenerator to your Podfile: 36 | 37 | ``` ruby 38 | use_frameworks! 39 | 40 | pod 'HLSThumbnailGenerator', '~> 0.5.0' 41 | ``` 42 | 43 | 3. Run `pod install`. 44 | 45 | [CocoaPods]: https://cocoapods.org 46 | 47 | 48 | ### Swift Package Manager 49 | 50 | [Swift Package Manager](https://github.com/apple/swift-package-manager) is Apple's 51 | official package manager for Swift frameworks. To install with Swift Package 52 | Manager: 53 | 54 | 1. Add HLSThumbnailGenerator to your Package.swift file: 55 | 56 | ``` 57 | import PackageDescription 58 | 59 | let package = Package( 60 | name: "MyAppTarget", 61 | dependencies: [ 62 | .Package(url: "https://github.com/toddkramer/HLSThumbnailGenerator", majorVersion: 0, minor: 5) 63 | ] 64 | ) 65 | ``` 66 | 67 | 2. Run `swift build`. 68 | 69 | 3. Generate Xcode project: 70 | 71 | ``` 72 | swift package generate-xcodeproj 73 | ``` 74 | 75 | 76 | ### Carthage 77 | 78 | [Carthage][] is a decentralized dependency manager for Cocoa projects. To 79 | install HLSThumbnailGenerator with Carthage: 80 | 81 | 1. Make sure Carthage is [installed][Carthage Installation]. 82 | 83 | 2. Add HLSThumbnailGenerator to your Cartfile: 84 | 85 | ``` 86 | github "toddkramer/HLSThumbnailGenerator" ~> 0.5.0 87 | ``` 88 | 89 | 3. Run `carthage update` and [add the appropriate framework][Carthage Usage]. 90 | 91 | 92 | [Carthage]: https://github.com/Carthage/Carthage 93 | [Carthage Installation]: https://github.com/Carthage/Carthage#installing-carthage 94 | [Carthage Usage]: https://github.com/Carthage/Carthage#adding-frameworks-to-an-application 95 | 96 | -------------------------------------------------------------------------------- /Sources/HLSThumbnailGenerator.h: -------------------------------------------------------------------------------- 1 | // 2 | // HLSThumbnailGenerator.h 3 | // 4 | // Copyright (c) 2019 Todd Kramer (http://www.tekramer.com) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | @import Foundation; 26 | 27 | FOUNDATION_EXPORT double HLSThumbnailGeneratorVersionNumber; 28 | FOUNDATION_EXPORT const unsigned char HLSThumbnailGeneratorVersionString[]; 29 | -------------------------------------------------------------------------------- /Sources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.5.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/PlatformBridge.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PlatformBridge.swift 3 | // 4 | // Copyright (c) 2019 Todd Kramer (http://www.tekramer.com) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(iOS) || os(tvOS) || os(watchOS) 26 | import UIKit 27 | public typealias Image = UIImage 28 | #elseif os(OSX) 29 | import Cocoa 30 | public typealias Image = NSImage 31 | #endif 32 | -------------------------------------------------------------------------------- /Sources/Protocols/Dispatching.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Dispatching.swift 3 | // 4 | // Copyright (c) 2019 Todd Kramer (http://www.tekramer.com) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Foundation 26 | 27 | protocol Dispatching: class { 28 | 29 | func async(_ block: @escaping () -> Void) 30 | func delay(_ seconds: TimeInterval, block: @escaping () -> Void) 31 | 32 | } 33 | 34 | extension DispatchQueue: Dispatching { 35 | 36 | func async(_ block: @escaping () -> Void) { 37 | async(group: nil, execute: block) 38 | } 39 | 40 | func delay(_ seconds: TimeInterval, block: @escaping () -> Void) { 41 | asyncAfter(deadline: .now() + seconds, execute: block) 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /Sources/ThumbnailGenerationError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ThumbnailGenerationError.swift 3 | // 4 | // Copyright (c) 2019 Todd Kramer (http://www.tekramer.com) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Foundation 26 | 27 | public enum ThumbnailGenerationError: Error { 28 | 29 | case seekInterrupted 30 | case copyPixelBufferFailed 31 | case imageCreationFailed 32 | 33 | public var localizedDescription: String { 34 | switch self { 35 | case .seekInterrupted: 36 | return "The remote player was unable to finish seeking to the requested time." 37 | case .copyPixelBufferFailed: 38 | return "The video output was unable to copy the pixel buffer at the requested time." 39 | case .imageCreationFailed: 40 | return "Could not create an image from the supplied pixel buffer." 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Sources/ThumbnailGenerator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ThumbnailGenerator.swift 3 | // 4 | // Copyright (c) 2019 Todd Kramer (http://www.tekramer.com) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import AVFoundation 26 | import CoreImage 27 | 28 | public protocol ThumbnailGeneratorDelegate: class { 29 | 30 | func thumbnailGenerator(_ thumbnailGenerator: ThumbnailGenerator, didGenerateThumbnail thumbnail: Image, atTime time: Double) 31 | func thumbnailGenerator(_ thumbnailGenerator: ThumbnailGenerator, thumbnailGenerationDidFailWithError error: ThumbnailGenerationError, 32 | atTime time: Double) 33 | 34 | } 35 | 36 | public final class ThumbnailGenerator { 37 | 38 | private enum PlayerState { 39 | case loading 40 | case ready 41 | } 42 | 43 | public let asset: AVAsset 44 | public weak var delegate: ThumbnailGeneratorDelegate? 45 | private(set) var times: [Double] = [] 46 | 47 | var player: AVPlayer! 48 | private var observer: NSKeyValueObservation? 49 | private var videoOutput: AVPlayerItemVideoOutput? 50 | private var playerState: PlayerState = .loading { 51 | didSet { 52 | guard playerState == .ready, !times.isEmpty else { return } 53 | generateNextThumbnail() 54 | 55 | } 56 | } 57 | 58 | private let mainQueue: Dispatching 59 | private let backgroundQueue: Dispatching 60 | 61 | init(asset: AVAsset, mainQueue: Dispatching, backgroundQueue: Dispatching) { 62 | self.asset = asset 63 | self.mainQueue = mainQueue 64 | self.backgroundQueue = backgroundQueue 65 | setup() 66 | } 67 | 68 | public convenience init(asset: AVAsset) { 69 | let defaultBackgroundQueue = DispatchQueue(label: "com.thumbnail-generator.background") 70 | self.init(asset: asset, mainQueue: DispatchQueue.main, backgroundQueue: defaultBackgroundQueue) 71 | } 72 | 73 | // MARK: - Setup 74 | 75 | private func setup() { 76 | setupPlayer() 77 | setupObserver() 78 | setupVideoOutput() 79 | } 80 | 81 | private func setupPlayer() { 82 | let playerItem = AVPlayerItem(asset: asset, automaticallyLoadedAssetKeys: []) 83 | player = AVPlayer(playerItem: playerItem) 84 | player.rate = 0 85 | } 86 | 87 | private func setupObserver() { 88 | self.observer = player.currentItem?.observe(\.status, options: [.new, .old]) { [weak self] (playerItem, change) in 89 | guard let self = self, case .readyToPlay = playerItem.status, self.playerState == .loading else { return } 90 | self.playerState = .ready 91 | } 92 | } 93 | 94 | private func setupVideoOutput() { 95 | let settings = [kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA] 96 | videoOutput = AVPlayerItemVideoOutput(pixelBufferAttributes: settings) 97 | guard let videoOutput = videoOutput else { return } 98 | player.currentItem?.add(videoOutput) 99 | } 100 | 101 | // MARK: - Thumbnail Generation 102 | 103 | public func generateThumbnails(atTimesInSeconds times: [Double]) { 104 | self.times += times 105 | guard playerState == .ready else { return } 106 | backgroundQueue.async(generateNextThumbnail) 107 | } 108 | 109 | private func generateNextThumbnail() { 110 | guard !times.isEmpty else { return } 111 | let time = times.removeFirst() 112 | generateThumbnail(atTimeInSeconds: time) 113 | } 114 | 115 | private func generateThumbnail(atTimeInSeconds time: Double) { 116 | let time = CMTime(seconds: time, preferredTimescale: 1) 117 | player.seek(to: time, toleranceBefore: .zero, toleranceAfter: .zero) { [weak self] isFinished in 118 | guard let self = self else { return } 119 | guard isFinished else { 120 | self.mainQueue.async { 121 | self.delegate?.thumbnailGenerator(self, thumbnailGenerationDidFailWithError: .seekInterrupted, atTime: time.seconds) 122 | } 123 | self.generateNextThumbnail() 124 | return 125 | } 126 | self.backgroundQueue.delay(0.3) { 127 | self.didFinishSeeking(toTime: time) 128 | } 129 | } 130 | } 131 | 132 | private func didFinishSeeking(toTime time: CMTime) { 133 | guard let buffer = videoOutput?.copyPixelBuffer(forItemTime: time, itemTimeForDisplay: nil) else { 134 | mainQueue.async { 135 | self.delegate?.thumbnailGenerator(self, thumbnailGenerationDidFailWithError: .copyPixelBufferFailed, atTime: time.seconds) 136 | } 137 | generateNextThumbnail() 138 | return 139 | } 140 | processPixelBuffer(buffer, atTime: time.seconds) 141 | } 142 | 143 | private func processPixelBuffer(_ buffer: CVPixelBuffer, atTime time: Double) { 144 | defer { 145 | generateNextThumbnail() 146 | } 147 | let ciImage = CIImage(cvPixelBuffer: buffer) 148 | let imageRect = CGRect(x: 0, y: 0, width: CVPixelBufferGetWidth(buffer), height: CVPixelBufferGetHeight(buffer)) 149 | guard let videoImage = CIContext().createCGImage(ciImage, from: imageRect) else { 150 | mainQueue.async { 151 | self.delegate?.thumbnailGenerator(self, thumbnailGenerationDidFailWithError: .imageCreationFailed, atTime: time) 152 | } 153 | return 154 | } 155 | #if os(iOS) || os(tvOS) || os(watchOS) 156 | let image = Image(cgImage: videoImage) 157 | #elseif os(OSX) 158 | let image = Image(cgImage: videoImage, size: imageRect.size) 159 | #endif 160 | mainQueue.async { 161 | self.delegate?.thumbnailGenerator(self, didGenerateThumbnail: image, atTime: time) 162 | } 163 | } 164 | 165 | } 166 | -------------------------------------------------------------------------------- /Tests/HLSThumbnailGeneratorTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HLSThumbnailGeneratorMobileTests.swift 3 | // 4 | // Copyright (c) 2019 Todd Kramer (http://www.tekramer.com) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import XCTest 26 | @testable import HLSThumbnailGenerator 27 | 28 | class HLSThumbnailGeneratorMobileTests: XCTestCase { 29 | 30 | override func setUp() { 31 | // Put setup code here. This method is called before the invocation of each test method in the class. 32 | } 33 | 34 | override func tearDown() { 35 | // Put teardown code here. This method is called after the invocation of each test method in the class. 36 | } 37 | 38 | func testExample() { 39 | // This is an example of a functional test case. 40 | // Use XCTAssert and related functions to verify your tests produce the correct results. 41 | } 42 | 43 | func testPerformanceExample() { 44 | // This is an example of a performance test case. 45 | self.measure { 46 | // Put the code you want to measure the time of here. 47 | } 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 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 | CFBundleVersion 20 | 1 21 | 22 | 23 | --------------------------------------------------------------------------------