68 Commits

Author SHA1 Message Date
Nicole Lehrer a070f2c785 Merge pull request #64 from vimeo/VIM-4496-airplayBug
VIM-4496: No Playback if Already in Airplay Mode
2016-09-01 22:37:26 -04:00
Nicole Lehrer 0935b0ec55 using default init 2016-08-30 13:55:38 -04:00
Gavin King 747f6bb56f Merge pull request #62 from vimeo/VIM-4419-drm-player-error-ui
VIM-4419: DRM player error UI
2016-08-22 16:38:15 -04:00
Gavin King aea0881949 better error handling 2016-08-16 15:40:55 -04:00
Gavin King df0e6caaaf Merge pull request #60 from vimeo/VIM-4503-session-time
VIM-4503: Session time
2016-08-12 16:00:23 -04:00
Gavin King 3197515537 moving constant 2016-08-11 11:01:53 -04:00
Gavin King 36cecee5bc Merge pull request #59 from vimeo/VIM-3520-airplay-mirror-bug
VIM-3520: Airplay Mirror Bug
2016-08-10 14:19:45 -04:00
Gavin King 3da484c5e2 airplay fix 2016-08-08 11:37:01 -04:00
Gavin King 59b9f3a5fe Merge pull request #53 from vimeo/v6.0.2
Merging v6.0.2 into master
2016-05-03 11:28:30 -04:00
Nicole Lehrer 1e78889bf9 Merge pull request #52 from vimeo/offlinePlaybackCrash
VIM-3864: Offline playback crash
2016-04-20 19:13:38 -04:00
Alfie Hanssen 6d227fb37f Merge pull request #49 from jersonperpetua/workspace_carthage_support
Workspace Carthage support
2016-04-20 15:36:06 -04:00
Nicole Lehrer 3dd7e8a2be revert back to 1f17c3e179 2016-04-16 15:32:03 -04:00
Nicole Lehrer 215670a00d make restart public 2016-04-16 12:35:05 -04:00
Nicole Lehrer 4ef059b790 remove check for isPlaying 2016-04-16 12:30:54 -04:00
Nicole Lehrer 1f17c3e179 check finished flag for success 2016-04-16 12:28:21 -04:00
Jerson Michael Perpetua cb0da4d8e0 Set the minimum target to iOS 8.0 2016-04-06 09:49:14 +08:00
Jerson Michael Perpetua 85ecae532b Add Carthage support by sharing the VimeoPlayer framework target 2016-04-06 09:49:05 +08:00
Alfie Hanssen faa6d70b09 bumped podspec version number, fixed source path 2016-04-01 13:45:30 -04:00
Alfie Hanssen 45117c9c7e Merge pull request #47 from vimeo/v6.0.2
v6.0.2 > Master
2016-04-01 12:31:14 -04:00
Alfie Hanssen 1e2843bda3 Update LICENSE.md 2016-03-31 22:09:30 -04:00
Alfie Hanssen 4e5c677dbe Update LICENSE.md 2016-03-31 22:09:22 -04:00
Alfie Hanssen 5b3d267add Update README.md 2016-03-31 22:01:34 -04:00
Alfie Hanssen 208c5bac56 Update README.md 2016-03-31 21:52:07 -04:00
Alfie Hanssen 46aa54e707 Merge pull request #46 from vimeo/framework
Adds Framework Project to Workspace
2016-03-29 11:32:48 -04:00
Alfie Hanssen 991fa26720 podspec update 2016-03-24 12:54:41 -04:00
Alfie Hanssen a4bb460876 renamed example project 2016-03-24 12:47:30 -04:00
Alfie Hanssen 55bbd0ed41 changed project setup to include framework 2016-03-24 12:10:16 -04:00
Gavin King cc3bce965f Merge pull request #44 from vimeo/nameChange
VIM-2388: Smokescreen -> Vimeo
2016-03-23 11:41:11 -04:00
Gavin King 684adc0531 name change 2016-03-23 11:33:19 -04:00
Gavin King 1adc511044 Merge pull request #43 from vimeo/example
VIM-3653: Example Project
2016-03-21 10:54:18 -04:00
Gavin King d4446bc3db more readme 2016-03-21 10:51:36 -04:00
Gavin King d908925d7e more readme 2016-03-21 10:50:10 -04:00
Gavin King 1c7720f088 readme 2016-03-21 10:48:23 -04:00
Rob Huebner 19b5797eb4 Merge pull request #42 from vimeo/v6.0.1
6.0.1 -> 6.0.2
2016-03-16 11:08:20 -04:00
Gavin King 4e10d0cece Merge pull request #41 from vimeo/v6.0.1
Merging v6.0.1 into master
2016-03-15 19:26:09 -04:00
Gavin King 0ead324b5c Merge branch 'master' into v6.0.1
# Conflicts:
#	VIMVideoPlayer.podspec
2016-03-15 19:25:59 -04:00
Gavin King 9c34e65a66 new video 2016-03-10 15:24:24 -05:00
Gavin King bb3277d25e naming 2016-03-10 12:34:06 -05:00
Gavin King 7ef2d71f3e adding workspace 2016-03-10 12:18:05 -05:00
Gavin King 0d031c0eb2 adding example 2016-03-10 12:13:37 -05:00
Rob Huebner 66d629f0e1 update podspec 2016-03-08 14:23:06 -05:00
Rob Huebner e21527c1e8 Merge pull request #38 from vimeo/tvos
Adding tvOS platform
2016-03-07 17:39:05 -05:00
Rob Huebner 9496df53a1 adding tvos platform 2016-03-01 11:16:57 -05:00
Gavin King c25d1cd49e Merge pull request #37 from vimeo/playerReset
Refactoring
2016-02-25 11:35:14 -05:00
Gavin King a979a07652 changes 2016-02-25 10:15:01 -05:00
Gavin King eb6dbdf5a5 fixing the file swap bug 2016-02-24 21:36:08 -05:00
Kevin Zetterstrom 3ecf8458cf Merge pull request #36 from vimeo/github_templates
adding github PR and issue templates
2016-02-19 11:05:59 -05:00
Kevin Zetterstrom 7a74c1e67d add required for Vimeans only 2016-02-19 11:04:15 -05:00
Kevin Zetterstrom e9a64fb531 adding github PR and issue templates 2016-02-19 09:40:58 -05:00
Alfie Hanssen eaf4f4b492 Merge pull request #35 from vimeo/readme-updates
Added information on Vimeo video playback to the README
2016-02-15 16:57:19 -05:00
Alfie Hanssen d42db154ca tweaks 2016-02-13 14:56:02 -05:00
Alfie Hanssen f09240d4d0 tweaks 2016-02-13 14:54:44 -05:00
Alfie Hanssen 91f68ff891 tweaks 2016-02-13 14:51:35 -05:00
Alfie Hanssen 25ee3e009a added information on vimeo video playback to the readme 2016-02-13 14:49:05 -05:00
Alfie Hanssen cc979b602c Update README.md 2016-02-04 15:08:00 -05:00
Rob Huebner a9fee87379 Merge pull request #32 from jersonperpetua/minimum_deployment_target_iOS_8.0
Reduce the minimum deployment target to iOS 8.0
2016-02-03 11:32:32 -05:00
Rob Huebner 15d08fe2b4 Merge pull request #33 from vimeo/playback-likely-to-keep-up
Adding appropriate playback likely to keep up callbacks
2016-01-29 10:54:03 -05:00
Rob Huebner 37e471cf04 adding comment 2016-01-29 10:53:20 -05:00
Rob Huebner e296e11ba6 adding appropriate playback likely to keep up callbacks 2016-01-28 17:50:38 -05:00
Jerson Michael Perpetua cbab5b4c7b Reduce the minimum deployment target to iOS 8.0 2016-01-27 16:06:36 +08:00
Rob Huebner c00367896d Merge pull request #30 from dtweston/carthage_support
Add a framework target for Carthage support
2016-01-06 13:54:36 -05:00
Dave Weston 0e68ced41a Add a framework target for Carthage support 2015-12-19 22:04:04 -05:00
Rob Huebner 8162c1cb3b Merge pull request #25 from vimeo/player-6.0
delegate callback for playback buffer empty
2015-11-25 12:58:23 -05:00
Alfie Hanssen ce399a8e98 Merge pull request #23 from edenvicary/patch-1
Fix broken contact link
2015-11-17 08:45:32 -05:00
Rob Huebner 932d66e6ba delegate callback for playback buffer empty 2015-11-16 15:24:18 -05:00
Eden Vicary de01806e8a Fix broken contact link 2015-11-16 18:31:06 +10:00
Alfie Hanssen d799cbb15b Merge pull request #20 from vimeo/pods
Deleted some comments from podspec
2015-10-08 13:30:43 -04:00
Alfie Hanssen 35e0d78004 deleted some comments from podspec 2015-10-06 13:58:30 -04:00
31 changed files with 1718 additions and 500 deletions
+11
View File
@@ -0,0 +1,11 @@
#### Issue Summary
A brief but thorough description of the issue.
#### Reproduction Steps
Detailed steps to reproduce the issue.
#### Expected Behavior
What do you expect to happen as a result of the reproduction steps?
#### Actual Behavior
What currently happens as a result of the reproduction steps?
+12
View File
@@ -0,0 +1,12 @@
#### Ticket
**Required for Vimeans only**
[TICKET_NUMBER](https://vimean.atlassian.net/browse/TICKET_NUMBER)
#### Ticket Summary
A brief but thorough description of the ticket.
#### Implementation Summary
A brief but thorough description of the changes put in place to address the ticket.
#### How to Test
Detailed *list* of what to test and how to test it. Including all edge cases.
@@ -0,0 +1,525 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
AF8720311CA44FBD004C752C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF8720301CA44FBD004C752C /* AppDelegate.swift */; };
AF8720331CA44FBD004C752C /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF8720321CA44FBD004C752C /* ViewController.swift */; };
AF8720361CA44FBD004C752C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AF8720341CA44FBD004C752C /* Main.storyboard */; };
AF8720381CA44FBD004C752C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AF8720371CA44FBD004C752C /* Assets.xcassets */; };
AF87203B1CA44FBD004C752C /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AF8720391CA44FBD004C752C /* LaunchScreen.storyboard */; };
AF8720461CA44FBD004C752C /* VimeoPlayer_iOS_ExampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF8720451CA44FBD004C752C /* VimeoPlayer_iOS_ExampleTests.swift */; };
AF8720511CA44FBD004C752C /* VimeoPlayer_iOS_ExampleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF8720501CA44FBD004C752C /* VimeoPlayer_iOS_ExampleUITests.swift */; };
AF87205F1CA44FF6004C752C /* VimeoPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF87205E1CA44FF6004C752C /* VimeoPlayer.framework */; };
AF8720631CA4507C004C752C /* waterfall.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = AF8720621CA4507C004C752C /* waterfall.mp4 */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
AF8720421CA44FBD004C752C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = AF8720251CA44FBC004C752C /* Project object */;
proxyType = 1;
remoteGlobalIDString = AF87202C1CA44FBD004C752C;
remoteInfo = "VimeoPlayer-iOS-Example";
};
AF87204D1CA44FBD004C752C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = AF8720251CA44FBC004C752C /* Project object */;
proxyType = 1;
remoteGlobalIDString = AF87202C1CA44FBD004C752C;
remoteInfo = "VimeoPlayer-iOS-Example";
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
AF87202D1CA44FBD004C752C /* VimeoPlayer-iOS-Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "VimeoPlayer-iOS-Example.app"; sourceTree = BUILT_PRODUCTS_DIR; };
AF8720301CA44FBD004C752C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
AF8720321CA44FBD004C752C /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
AF8720351CA44FBD004C752C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
AF8720371CA44FBD004C752C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
AF87203A1CA44FBD004C752C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
AF87203C1CA44FBD004C752C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
AF8720411CA44FBD004C752C /* VimeoPlayer-iOS-ExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "VimeoPlayer-iOS-ExampleTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
AF8720451CA44FBD004C752C /* VimeoPlayer_iOS_ExampleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VimeoPlayer_iOS_ExampleTests.swift; sourceTree = "<group>"; };
AF8720471CA44FBD004C752C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
AF87204C1CA44FBD004C752C /* VimeoPlayer-iOS-ExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "VimeoPlayer-iOS-ExampleUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
AF8720501CA44FBD004C752C /* VimeoPlayer_iOS_ExampleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VimeoPlayer_iOS_ExampleUITests.swift; sourceTree = "<group>"; };
AF8720521CA44FBD004C752C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
AF87205E1CA44FF6004C752C /* VimeoPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VimeoPlayer.framework; path = "../../VIMVideoPlayer-Framework/build/Debug-iphoneos/VimeoPlayer.framework"; sourceTree = "<group>"; };
AF8720611CA4507C004C752C /* Bridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bridge.h; sourceTree = "<group>"; };
AF8720621CA4507C004C752C /* waterfall.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = waterfall.mp4; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
AF87202A1CA44FBD004C752C /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
AF87205F1CA44FF6004C752C /* VimeoPlayer.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
AF87203E1CA44FBD004C752C /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
AF8720491CA44FBD004C752C /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
AF8720241CA44FBC004C752C = {
isa = PBXGroup;
children = (
AF87202F1CA44FBD004C752C /* VimeoPlayer-iOS-Example */,
AF8720441CA44FBD004C752C /* VimeoPlayer-iOS-ExampleTests */,
AF87204F1CA44FBD004C752C /* VimeoPlayer-iOS-ExampleUITests */,
AF87202E1CA44FBD004C752C /* Products */,
AF8720601CA45004004C752C /* Frameworks */,
);
sourceTree = "<group>";
};
AF87202E1CA44FBD004C752C /* Products */ = {
isa = PBXGroup;
children = (
AF87202D1CA44FBD004C752C /* VimeoPlayer-iOS-Example.app */,
AF8720411CA44FBD004C752C /* VimeoPlayer-iOS-ExampleTests.xctest */,
AF87204C1CA44FBD004C752C /* VimeoPlayer-iOS-ExampleUITests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
AF87202F1CA44FBD004C752C /* VimeoPlayer-iOS-Example */ = {
isa = PBXGroup;
children = (
AF8720301CA44FBD004C752C /* AppDelegate.swift */,
AF8720321CA44FBD004C752C /* ViewController.swift */,
AF8720341CA44FBD004C752C /* Main.storyboard */,
AF8720371CA44FBD004C752C /* Assets.xcassets */,
AF8720391CA44FBD004C752C /* LaunchScreen.storyboard */,
AF87203C1CA44FBD004C752C /* Info.plist */,
AF8720611CA4507C004C752C /* Bridge.h */,
AF8720621CA4507C004C752C /* waterfall.mp4 */,
);
path = "VimeoPlayer-iOS-Example";
sourceTree = "<group>";
};
AF8720441CA44FBD004C752C /* VimeoPlayer-iOS-ExampleTests */ = {
isa = PBXGroup;
children = (
AF8720451CA44FBD004C752C /* VimeoPlayer_iOS_ExampleTests.swift */,
AF8720471CA44FBD004C752C /* Info.plist */,
);
path = "VimeoPlayer-iOS-ExampleTests";
sourceTree = "<group>";
};
AF87204F1CA44FBD004C752C /* VimeoPlayer-iOS-ExampleUITests */ = {
isa = PBXGroup;
children = (
AF8720501CA44FBD004C752C /* VimeoPlayer_iOS_ExampleUITests.swift */,
AF8720521CA44FBD004C752C /* Info.plist */,
);
path = "VimeoPlayer-iOS-ExampleUITests";
sourceTree = "<group>";
};
AF8720601CA45004004C752C /* Frameworks */ = {
isa = PBXGroup;
children = (
AF87205E1CA44FF6004C752C /* VimeoPlayer.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
AF87202C1CA44FBD004C752C /* VimeoPlayer-iOS-Example */ = {
isa = PBXNativeTarget;
buildConfigurationList = AF8720551CA44FBD004C752C /* Build configuration list for PBXNativeTarget "VimeoPlayer-iOS-Example" */;
buildPhases = (
AF8720291CA44FBD004C752C /* Sources */,
AF87202A1CA44FBD004C752C /* Frameworks */,
AF87202B1CA44FBD004C752C /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = "VimeoPlayer-iOS-Example";
productName = "VimeoPlayer-iOS-Example";
productReference = AF87202D1CA44FBD004C752C /* VimeoPlayer-iOS-Example.app */;
productType = "com.apple.product-type.application";
};
AF8720401CA44FBD004C752C /* VimeoPlayer-iOS-ExampleTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = AF8720581CA44FBD004C752C /* Build configuration list for PBXNativeTarget "VimeoPlayer-iOS-ExampleTests" */;
buildPhases = (
AF87203D1CA44FBD004C752C /* Sources */,
AF87203E1CA44FBD004C752C /* Frameworks */,
AF87203F1CA44FBD004C752C /* Resources */,
);
buildRules = (
);
dependencies = (
AF8720431CA44FBD004C752C /* PBXTargetDependency */,
);
name = "VimeoPlayer-iOS-ExampleTests";
productName = "VimeoPlayer-iOS-ExampleTests";
productReference = AF8720411CA44FBD004C752C /* VimeoPlayer-iOS-ExampleTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
AF87204B1CA44FBD004C752C /* VimeoPlayer-iOS-ExampleUITests */ = {
isa = PBXNativeTarget;
buildConfigurationList = AF87205B1CA44FBD004C752C /* Build configuration list for PBXNativeTarget "VimeoPlayer-iOS-ExampleUITests" */;
buildPhases = (
AF8720481CA44FBD004C752C /* Sources */,
AF8720491CA44FBD004C752C /* Frameworks */,
AF87204A1CA44FBD004C752C /* Resources */,
);
buildRules = (
);
dependencies = (
AF87204E1CA44FBD004C752C /* PBXTargetDependency */,
);
name = "VimeoPlayer-iOS-ExampleUITests";
productName = "VimeoPlayer-iOS-ExampleUITests";
productReference = AF87204C1CA44FBD004C752C /* VimeoPlayer-iOS-ExampleUITests.xctest */;
productType = "com.apple.product-type.bundle.ui-testing";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
AF8720251CA44FBC004C752C /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0720;
LastUpgradeCheck = 0720;
ORGANIZATIONNAME = Vimeo;
TargetAttributes = {
AF87202C1CA44FBD004C752C = {
CreatedOnToolsVersion = 7.2;
};
AF8720401CA44FBD004C752C = {
CreatedOnToolsVersion = 7.2;
TestTargetID = AF87202C1CA44FBD004C752C;
};
AF87204B1CA44FBD004C752C = {
CreatedOnToolsVersion = 7.2;
TestTargetID = AF87202C1CA44FBD004C752C;
};
};
};
buildConfigurationList = AF8720281CA44FBC004C752C /* Build configuration list for PBXProject "VimeoPlayer-iOS-Example" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = AF8720241CA44FBC004C752C;
productRefGroup = AF87202E1CA44FBD004C752C /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
AF87202C1CA44FBD004C752C /* VimeoPlayer-iOS-Example */,
AF8720401CA44FBD004C752C /* VimeoPlayer-iOS-ExampleTests */,
AF87204B1CA44FBD004C752C /* VimeoPlayer-iOS-ExampleUITests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
AF87202B1CA44FBD004C752C /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AF87203B1CA44FBD004C752C /* LaunchScreen.storyboard in Resources */,
AF8720381CA44FBD004C752C /* Assets.xcassets in Resources */,
AF8720631CA4507C004C752C /* waterfall.mp4 in Resources */,
AF8720361CA44FBD004C752C /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
AF87203F1CA44FBD004C752C /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
AF87204A1CA44FBD004C752C /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
AF8720291CA44FBD004C752C /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AF8720331CA44FBD004C752C /* ViewController.swift in Sources */,
AF8720311CA44FBD004C752C /* AppDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
AF87203D1CA44FBD004C752C /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AF8720461CA44FBD004C752C /* VimeoPlayer_iOS_ExampleTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
AF8720481CA44FBD004C752C /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AF8720511CA44FBD004C752C /* VimeoPlayer_iOS_ExampleUITests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
AF8720431CA44FBD004C752C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = AF87202C1CA44FBD004C752C /* VimeoPlayer-iOS-Example */;
targetProxy = AF8720421CA44FBD004C752C /* PBXContainerItemProxy */;
};
AF87204E1CA44FBD004C752C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = AF87202C1CA44FBD004C752C /* VimeoPlayer-iOS-Example */;
targetProxy = AF87204D1CA44FBD004C752C /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
AF8720341CA44FBD004C752C /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
AF8720351CA44FBD004C752C /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
AF8720391CA44FBD004C752C /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
AF87203A1CA44FBD004C752C /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
AF8720531CA44FBD004C752C /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
AF8720541CA44FBD004C752C /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
AF8720561CA44FBD004C752C /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = "VimeoPlayer-iOS-Example/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.vimeo.VimeoPlayer-iOS-Example";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "${SRCROOT}/VimeoPlayer-iOS-Example/Bridge.h";
};
name = Debug;
};
AF8720571CA44FBD004C752C /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = "VimeoPlayer-iOS-Example/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.vimeo.VimeoPlayer-iOS-Example";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "${SRCROOT}/VimeoPlayer-iOS-Example/Bridge.h";
};
name = Release;
};
AF8720591CA44FBD004C752C /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
INFOPLIST_FILE = "VimeoPlayer-iOS-ExampleTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.vimeo.VimeoPlayer-iOS-ExampleTests";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VimeoPlayer-iOS-Example.app/VimeoPlayer-iOS-Example";
};
name = Debug;
};
AF87205A1CA44FBD004C752C /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
INFOPLIST_FILE = "VimeoPlayer-iOS-ExampleTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.vimeo.VimeoPlayer-iOS-ExampleTests";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VimeoPlayer-iOS-Example.app/VimeoPlayer-iOS-Example";
};
name = Release;
};
AF87205C1CA44FBD004C752C /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
INFOPLIST_FILE = "VimeoPlayer-iOS-ExampleUITests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.vimeo.VimeoPlayer-iOS-ExampleUITests";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_TARGET_NAME = "VimeoPlayer-iOS-Example";
USES_XCTRUNNER = YES;
};
name = Debug;
};
AF87205D1CA44FBD004C752C /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
INFOPLIST_FILE = "VimeoPlayer-iOS-ExampleUITests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.vimeo.VimeoPlayer-iOS-ExampleUITests";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_TARGET_NAME = "VimeoPlayer-iOS-Example";
USES_XCTRUNNER = YES;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
AF8720281CA44FBC004C752C /* Build configuration list for PBXProject "VimeoPlayer-iOS-Example" */ = {
isa = XCConfigurationList;
buildConfigurations = (
AF8720531CA44FBD004C752C /* Debug */,
AF8720541CA44FBD004C752C /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
AF8720551CA44FBD004C752C /* Build configuration list for PBXNativeTarget "VimeoPlayer-iOS-Example" */ = {
isa = XCConfigurationList;
buildConfigurations = (
AF8720561CA44FBD004C752C /* Debug */,
AF8720571CA44FBD004C752C /* Release */,
);
defaultConfigurationIsVisible = 0;
};
AF8720581CA44FBD004C752C /* Build configuration list for PBXNativeTarget "VimeoPlayer-iOS-ExampleTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
AF8720591CA44FBD004C752C /* Debug */,
AF87205A1CA44FBD004C752C /* Release */,
);
defaultConfigurationIsVisible = 0;
};
AF87205B1CA44FBD004C752C /* Build configuration list for PBXNativeTarget "VimeoPlayer-iOS-ExampleUITests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
AF87205C1CA44FBD004C752C /* Debug */,
AF87205D1CA44FBD004C752C /* Release */,
);
defaultConfigurationIsVisible = 0;
};
/* End XCConfigurationList section */
};
rootObject = AF8720251CA44FBC004C752C /* Project object */;
}
@@ -0,0 +1,64 @@
//
// AppDelegate.swift
// VimeoPlayer-iOS-Example
//
// Created by Alfred Hanssen on 3/24/16.
// Copyright © 2016 Vimeo. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
return true
}
func applicationWillResignActive(application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
func applicationDidEnterBackground(application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
func applicationWillEnterForeground(application: UIApplication) {
// 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.
}
func applicationDidBecomeActive(application: UIApplication) {
// 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.
}
func applicationWillTerminate(application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
}
@@ -0,0 +1,38 @@
{
"images" : [
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8150" systemVersion="15A204g" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8122"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
<viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
</document>
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9531" systemVersion="14F1021" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="VimeoPlayer_iOS_Example" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dlK-T8-76H" customClass="VIMVideoPlayerView">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<subviews>
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="Fpe-Xd-JjQ">
<rect key="frame" x="30" y="538" width="540" height="31"/>
</slider>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="m2w-Rp-esh">
<rect key="frame" x="265" y="464" width="70" height="42"/>
<inset key="contentEdgeInsets" minX="10" minY="10" maxX="10" maxY="10"/>
<state key="normal" title="Pause">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="selected" title="Play"/>
<connections>
<action selector="didTapPlayPauseButton:" destination="BYZ-38-t0r" eventType="touchUpInside" id="k4N-dE-gAb"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="Fpe-Xd-JjQ" secondAttribute="trailing" constant="32" id="Aio-uX-Vax"/>
<constraint firstAttribute="bottom" secondItem="Fpe-Xd-JjQ" secondAttribute="bottom" constant="32" id="AmU-0k-ECZ"/>
<constraint firstItem="Fpe-Xd-JjQ" firstAttribute="leading" secondItem="dlK-T8-76H" secondAttribute="leading" constant="32" id="g6f-nR-ucA"/>
<constraint firstItem="m2w-Rp-esh" firstAttribute="centerX" secondItem="dlK-T8-76H" secondAttribute="centerX" id="h8P-Ec-qS6"/>
<constraint firstItem="Fpe-Xd-JjQ" firstAttribute="top" secondItem="m2w-Rp-esh" secondAttribute="bottom" constant="32" id="ws9-bw-Fdm"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="dlK-T8-76H" secondAttribute="trailing" id="DiY-6m-b3H"/>
<constraint firstItem="dlK-T8-76H" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leading" id="K0Z-JZ-VFd"/>
<constraint firstItem="wfy-db-euE" firstAttribute="top" secondItem="dlK-T8-76H" secondAttribute="bottom" id="ObE-ww-JRe"/>
<constraint firstItem="dlK-T8-76H" firstAttribute="top" secondItem="8bC-Xf-vdC" secondAttribute="top" id="Zeb-bG-lQ1"/>
</constraints>
</view>
<connections>
<outlet property="slider" destination="Fpe-Xd-JjQ" id="jtw-Nk-gsP"/>
<outlet property="videoPlayerView" destination="dlK-T8-76H" id="nGY-wW-ReT"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="240" y="291"/>
</scene>
</scenes>
</document>
@@ -0,0 +1,9 @@
//
// VIMVideoPlayer-iOS-Example-Bridging-Header.h
// VIMVideoPlayer-iOS-Example
//
// Created by King, Gavin on 3/10/16.
// Copyright © 2016 Gavin King. All rights reserved.
//
#import <VimeoPlayer/VimeoPlayer.h>
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
</dict>
</plist>
@@ -0,0 +1,139 @@
//
// ViewController.swift
// VIMVideoPlayer-iOS-Example
//
// Created by King, Gavin on 3/9/16.
// Copyright © 2016 Gavin King. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
import UIKit
class ViewController: UIViewController, VIMVideoPlayerViewDelegate
{
@IBOutlet weak var videoPlayerView: VIMVideoPlayerView!
@IBOutlet weak var slider: UISlider!
private var isScrubbing = false
override func viewDidLoad()
{
super.viewDidLoad()
self.setupVideoPlayerView()
self.setupSlider()
}
// MARK: Setup
private func setupVideoPlayerView()
{
self.videoPlayerView.player.looping = true
self.videoPlayerView.player.disableAirplay()
self.videoPlayerView.setVideoFillMode(AVLayerVideoGravityResizeAspectFill)
self.videoPlayerView.delegate = self
if let path = NSBundle.mainBundle().pathForResource("waterfall", ofType: "mp4")
{
self.videoPlayerView.player.setURL(NSURL(fileURLWithPath: path))
}
else
{
assertionFailure("Video file not found!")
}
}
private func setupSlider()
{
self.slider.addTarget(self, action: "scrubbingDidStart", forControlEvents: UIControlEvents.TouchDown)
self.slider.addTarget(self, action: "scrubbingDidChange", forControlEvents: UIControlEvents.ValueChanged)
self.slider.addTarget(self, action: "scrubbingDidEnd", forControlEvents: UIControlEvents.TouchUpInside)
self.slider.addTarget(self, action: "scrubbingDidEnd", forControlEvents: UIControlEvents.TouchUpOutside)
}
// MARK: Actions
@IBAction func didTapPlayPauseButton(sender: UIButton)
{
if self.videoPlayerView.player.playing
{
sender.selected = true
self.videoPlayerView.player.pause()
}
else
{
sender.selected = false
self.videoPlayerView.player.play()
}
}
// MARK: Scrubbing Actions
func scrubbingDidStart()
{
self.isScrubbing = true
self.videoPlayerView.player.startScrubbing()
}
func scrubbingDidChange()
{
guard let duration = self.videoPlayerView.player.player.currentItem?.duration
where self.isScrubbing == true else
{
return
}
let time = Float(CMTimeGetSeconds(duration)) * self.slider.value
self.videoPlayerView.player.scrub(time)
}
func scrubbingDidEnd()
{
self.videoPlayerView.player.stopScrubbing()
self.isScrubbing = false
}
// MARK: VIMVideoPlayerViewDelegate
func videoPlayerViewIsReadyToPlayVideo(videoPlayerView: VIMVideoPlayerView?)
{
self.videoPlayerView.player.play()
}
func videoPlayerView(videoPlayerView: VIMVideoPlayerView!, timeDidChange cmTime: CMTime)
{
guard let duration = self.videoPlayerView.player.player.currentItem?.duration
where self.isScrubbing == false else
{
return
}
let durationInSeconds = Float(CMTimeGetSeconds(duration))
let timeInSeconds = Float(CMTimeGetSeconds(cmTime))
self.slider.value = timeInSeconds / durationInSeconds
}
}
@@ -0,0 +1,36 @@
//
// VimeoPlayer_iOS_ExampleTests.swift
// VimeoPlayer-iOS-ExampleTests
//
// Created by Alfred Hanssen on 3/24/16.
// Copyright © 2016 Vimeo. All rights reserved.
//
import XCTest
@testable import VimeoPlayer_iOS_Example
class VimeoPlayer_iOS_ExampleTests: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testExample() {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testPerformanceExample() {
// This is an example of a performance test case.
self.measureBlock {
// Put the code you want to measure the time of here.
}
}
}
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>
@@ -0,0 +1,36 @@
//
// VimeoPlayer_iOS_ExampleUITests.swift
// VimeoPlayer-iOS-ExampleUITests
//
// Created by Alfred Hanssen on 3/24/16.
// Copyright © 2016 Vimeo. All rights reserved.
//
import XCTest
class VimeoPlayer_iOS_ExampleUITests: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
// In UI tests it is usually best to stop immediately when a failure occurs.
continueAfterFailure = false
// UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
XCUIApplication().launch()
// In UI tests its important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testExample() {
// Use recording to get started writing UI tests.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
}
+4 -1
View File
@@ -1,4 +1,7 @@
Copyright (c) 2014-2015 Vimeo (https://vimeo.com)
The MIT License (MIT)
Copyright (c) 2014-2016 Vimeo (https://vimeo.com)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+73 -47
View File
@@ -1,100 +1,126 @@
# VIMVideoPlayer
`VIMVideoPlayer` is a simple wrapper around the [`AVPlayer`](https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVPlayer_Class/index.html) and [`AVPlayerLayer`](https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVPlayerLayer_Class/index.html#//apple_ref/occ/cl/AVPlayerLayer) classes. Check out the [Pegasus](https://github.com/vimeo/Pegasus) project for a demo.
`VIMVideoPlayer` is a simple wrapper around the [AVPlayer](https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVPlayer_Class/index.html) and [AVPlayerLayer](https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVPlayerLayer_Class/index.html#//apple_ref/occ/cl/AVPlayerLayer) classes.
## Setup
Add the `VIMVideoPlayerView` and `VIMVideoPlayer` classes to your project.
Do this by including it as a git submodule or by using cocoapods:
Do this by including this repo as a git submodule or by using cocoapods:
```Ruby
# Add this to your podfile
target 'MyTarget' do
pod 'VIMVideoPlayer', '5.4.2'
pod 'VIMVideoPlayer', {CURRENT_POD_VERSION}
end
```
## Usage
Create a new `VIMVideoPlayerView` and add it to your view hierarchy:
Create a new `VIMVideoPlayerView` instance or set up an @IBOutlet:
```Objective-c
#import "VIMVideoPlayerView.h"
```Swift
@IBOutlet weak var videoPlayerView: VIMVideoPlayerView!
...
- (void)viewDidLoad
override func viewDidLoad()
{
[super viewDidLoad];
self.videoPlayerView = [[VIMVideoPlayerView alloc] init];
self.videoPlayerView.translatesAutoresizingMaskIntoConstraints = NO;
self.videoPlayerView.delegate = self;
[self.videoPlayerView setVideoFillMode:AVLayerVideoGravityResizeAspect];
[self.videoPlayerView.player enableTimeUpdates];
[self.videoPlayerView.player enableAirplay];
[self.view addSubview:self.videoPlayerView];
NSDictionary *views = NSDictionaryOfVariableBindings(_videoPlayerView);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[_videoPlayerView]-0-|" options:0 metrics:nil views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_videoPlayerView]-0-|" options:0 metrics:nil views:views]];
// Configure the player as needed
self.videoPlayerView.player.looping = true
self.videoPlayerView.player.disableAirplay()
self.videoPlayerView.setVideoFillMode(AVLayerVideoGravityResizeAspectFill)
self.videoPlayerView.delegate = self
}
```
Play a video:
```Objective-c
```Swift
// Using an NSURL
NSURL *URL = ...;
[self.videoPlayerView.player setURL:URL];
[self.videoPlayerView.player play];
if let path = NSBundle.mainBundle().pathForResource("waterfall", ofType: "mp4")
{
self.videoPlayerView.player.setURL(NSURL(fileURLWithPath: path))
}
else
{
// Video file not found!
}
/*
Note: This must be a URL to an actual video resource (e.g. http://website.com/video.mp4 or .m3u8 etc.),
It cannot be a URL to a web page (e.g. https://vimeo.com/67069182),
See below for info on using VIMVideoPlayer to play Vimeo videos.
*/
// Using an AVPlayerItem
AVPlayerItem *playerItem = ...;
[self.videoPlayerView.player setPlayerItem:playerItem];
[self.videoPlayerView.player play];
let playerItem: AVPlayerItem = ...
self.videoPlayerView.player.setPlayerItem(playerItem)
self.videoPlayerView.player.play()
// Or using an AVAsset
AVAsset *asset = ...;
[self.videoPlayerView.player setAsset:asset];
[self.videoPlayerView.player play];
let asset: AVAsset = ...
self.videoPlayerView.player.setAsset(asset)
self.videoPlayerView.player.play()
```
Optionally implement the `VIMVideoPlayerViewDelegate` protocol methods:
```Objective-c
@protocol VIMVideoPlayerViewDelegate <NSObject>
```Swift
@optional
- (void)videoPlayerViewIsReadyToPlayVideo:(VIMVideoPlayerView *)videoPlayerView;
- (void)videoPlayerViewDidReachEnd:(VIMVideoPlayerView *)videoPlayerView;
- (void)videoPlayerView:(VIMVideoPlayerView *)videoPlayerView timeDidChange:(CMTime)cmTime;
- (void)videoPlayerView:(VIMVideoPlayerView *)videoPlayerView loadedTimeRangeDidChange:(float)duration;
- (void)videoPlayerView:(VIMVideoPlayerView *)videoPlayerView didFailWithError:(NSError *)error;
protocol VIMVideoPlayerViewDelegate
{
optional func videoPlayerViewIsReadyToPlayVideo(videoPlayerView: VIMVideoPlayerView!)
optional func videoPlayerViewDidReachEnd(videoPlayerView: VIMVideoPlayerView!)
optional func videoPlayerView(videoPlayerView: VIMVideoPlayerView!, timeDidChange cmTime: CMTime)
optional func videoPlayerView(videoPlayerView: VIMVideoPlayerView!, loadedTimeRangeDidChange duration: Float)
optional func videoPlayerViewPlaybackBufferEmpty(videoPlayerView: VIMVideoPlayerView!)
optional func videoPlayerViewPlaybackLikelyToKeepUp(videoPlayerView: VIMVideoPlayerView!)
optional func videoPlayerView(videoPlayerView: VIMVideoPlayerView!, didFailWithError error: NSError!)
}
@end
```
See `VIMVideoPlayer.h` for additional configuration options and functionality.
See [`VIMVideoPlayer.h`](https://github.com/vimeo/VIMVideoPlayer/blob/master/VIMVideoPlayer/VIMVideoPlayer.h) for additional configuration options.
See the [Pegasus](https://github.com/vimeo/Pegasus) project for an example of how to encapsulate a `VIMVideoPlayerView` instance with playback controls (play/pause/seek/airplay etc).
## Playing Vimeo Videos
[Vimeo Pro](https://vimeo.com/pro) members can access playback URLs for Vimeo videos using the [Vimeo API](https://developer.vimeo.com/). Playback URLs are only included in the response object if the requesting account is a [Vimeo Pro](https://vimeo.com/pro) account.
If you have a [Vimeo Pro](https://vimeo.com/pro) account, when you make a request to the [Vimeo API](https://developer.vimeo.com/) for a video object the response object will contain a list of video `files`. These represent the various resolution video files available for this particular video. Each has a `link`. You can use the string value keyed to `link` to create an NSURL. You can pass this NSURL to VIMVideoPlayer for playback.
Check out [this](http://stackoverflow.com/questions/31960338/ios-vimvideoplayerview-cant-load-vimeo-videos) Stack Overflow question for additional info.
You can use the [Vimeo iOS SDK](https://github.com/vimeo/VIMNetworking) to interact with the [Vimeo API](https://developer.vimeo.com/).
For full documentation on the Vimeo API go [here](https://developer.vimeo.com/).
## Found an Issue?
Please file it in the git [issue tracker](https://github.com/vimeo/VIMVideoPlayer/issues).
## Want to Contribute?
If you'd like to contribute, please follow our guidelines found in [CONTRIBUTING.md](CONTRIBUTING.md).
## License
`VIMVideoPlayer` is available under the MIT license. See the LICENSE file for more info.
`VIMVideoPlayer` is available under the MIT license. See the [LICENSE](LICENSE.md) file for more info.
## Questions?
Tweet at us here: @vimeoapi
Tweet at us here: [@vimeoapi](https://twitter.com/vimeoapi).
Post on [Stackoverflow](http://stackoverflow.com/questions/tagged/vimeo-ios) with the tag `vimeo-ios`
Post on [Stackoverflow](http://stackoverflow.com/questions/tagged/vimeo-ios) with the tag `vimeo-ios`.
Get in touch [here](Vimeo.com/help/contact)
Get in touch [here](https://vimeo.com/help/contact).
Interested in working at Vimeo? We're [hiring](https://vimeo.com/jobs)!
@@ -0,0 +1,409 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
AF8720021CA447E5004C752C /* VimeoPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = AF8720011CA447E5004C752C /* VimeoPlayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
AF8720091CA447E5004C752C /* VimeoPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF871FFE1CA447E5004C752C /* VimeoPlayer.framework */; };
AF87200E1CA447E5004C752C /* VimeoPlayerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = AF87200D1CA447E5004C752C /* VimeoPlayerTests.m */; };
AF87201C1CA44814004C752C /* VIMVideoPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = AF8720181CA44814004C752C /* VIMVideoPlayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
AF87201D1CA44814004C752C /* VIMVideoPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = AF8720191CA44814004C752C /* VIMVideoPlayer.m */; };
AF87201E1CA44814004C752C /* VIMVideoPlayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = AF87201A1CA44814004C752C /* VIMVideoPlayerView.h */; settings = {ATTRIBUTES = (Public, ); }; };
AF87201F1CA44814004C752C /* VIMVideoPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = AF87201B1CA44814004C752C /* VIMVideoPlayerView.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
AF87200A1CA447E5004C752C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = AF871FF51CA447E4004C752C /* Project object */;
proxyType = 1;
remoteGlobalIDString = AF871FFD1CA447E5004C752C;
remoteInfo = VimeoPlayer;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
AF871FFE1CA447E5004C752C /* VimeoPlayer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = VimeoPlayer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
AF8720011CA447E5004C752C /* VimeoPlayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VimeoPlayer.h; sourceTree = "<group>"; };
AF8720031CA447E5004C752C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
AF8720081CA447E5004C752C /* VimeoPlayerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VimeoPlayerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
AF87200D1CA447E5004C752C /* VimeoPlayerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VimeoPlayerTests.m; sourceTree = "<group>"; };
AF87200F1CA447E5004C752C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
AF8720181CA44814004C752C /* VIMVideoPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VIMVideoPlayer.h; path = "../../VIMVideoPlayer-Source/VIMVideoPlayer.h"; sourceTree = "<group>"; };
AF8720191CA44814004C752C /* VIMVideoPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VIMVideoPlayer.m; path = "../../VIMVideoPlayer-Source/VIMVideoPlayer.m"; sourceTree = "<group>"; };
AF87201A1CA44814004C752C /* VIMVideoPlayerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VIMVideoPlayerView.h; path = "../../VIMVideoPlayer-Source/VIMVideoPlayerView.h"; sourceTree = "<group>"; };
AF87201B1CA44814004C752C /* VIMVideoPlayerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VIMVideoPlayerView.m; path = "../../VIMVideoPlayer-Source/VIMVideoPlayerView.m"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
AF871FFA1CA447E5004C752C /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
AF8720051CA447E5004C752C /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
AF8720091CA447E5004C752C /* VimeoPlayer.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
AF871FF41CA447E4004C752C = {
isa = PBXGroup;
children = (
AF8720001CA447E5004C752C /* VimeoPlayer */,
AF87200C1CA447E5004C752C /* VimeoPlayerTests */,
AF871FFF1CA447E5004C752C /* Products */,
);
sourceTree = "<group>";
};
AF871FFF1CA447E5004C752C /* Products */ = {
isa = PBXGroup;
children = (
AF871FFE1CA447E5004C752C /* VimeoPlayer.framework */,
AF8720081CA447E5004C752C /* VimeoPlayerTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
AF8720001CA447E5004C752C /* VimeoPlayer */ = {
isa = PBXGroup;
children = (
AF8720011CA447E5004C752C /* VimeoPlayer.h */,
AF8720181CA44814004C752C /* VIMVideoPlayer.h */,
AF8720191CA44814004C752C /* VIMVideoPlayer.m */,
AF87201A1CA44814004C752C /* VIMVideoPlayerView.h */,
AF87201B1CA44814004C752C /* VIMVideoPlayerView.m */,
AF8720031CA447E5004C752C /* Info.plist */,
);
path = VimeoPlayer;
sourceTree = "<group>";
};
AF87200C1CA447E5004C752C /* VimeoPlayerTests */ = {
isa = PBXGroup;
children = (
AF87200D1CA447E5004C752C /* VimeoPlayerTests.m */,
AF87200F1CA447E5004C752C /* Info.plist */,
);
path = VimeoPlayerTests;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
AF871FFB1CA447E5004C752C /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
AF87201C1CA44814004C752C /* VIMVideoPlayer.h in Headers */,
AF87201E1CA44814004C752C /* VIMVideoPlayerView.h in Headers */,
AF8720021CA447E5004C752C /* VimeoPlayer.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
AF871FFD1CA447E5004C752C /* VimeoPlayer */ = {
isa = PBXNativeTarget;
buildConfigurationList = AF8720121CA447E5004C752C /* Build configuration list for PBXNativeTarget "VimeoPlayer" */;
buildPhases = (
AF871FF91CA447E5004C752C /* Sources */,
AF871FFA1CA447E5004C752C /* Frameworks */,
AF871FFB1CA447E5004C752C /* Headers */,
AF871FFC1CA447E5004C752C /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = VimeoPlayer;
productName = VimeoPlayer;
productReference = AF871FFE1CA447E5004C752C /* VimeoPlayer.framework */;
productType = "com.apple.product-type.framework";
};
AF8720071CA447E5004C752C /* VimeoPlayerTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = AF8720151CA447E5004C752C /* Build configuration list for PBXNativeTarget "VimeoPlayerTests" */;
buildPhases = (
AF8720041CA447E5004C752C /* Sources */,
AF8720051CA447E5004C752C /* Frameworks */,
AF8720061CA447E5004C752C /* Resources */,
);
buildRules = (
);
dependencies = (
AF87200B1CA447E5004C752C /* PBXTargetDependency */,
);
name = VimeoPlayerTests;
productName = VimeoPlayerTests;
productReference = AF8720081CA447E5004C752C /* VimeoPlayerTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
AF871FF51CA447E4004C752C /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0720;
ORGANIZATIONNAME = Vimeo;
TargetAttributes = {
AF871FFD1CA447E5004C752C = {
CreatedOnToolsVersion = 7.2;
};
AF8720071CA447E5004C752C = {
CreatedOnToolsVersion = 7.2;
};
};
};
buildConfigurationList = AF871FF81CA447E4004C752C /* Build configuration list for PBXProject "VimeoPlayer" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = AF871FF41CA447E4004C752C;
productRefGroup = AF871FFF1CA447E5004C752C /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
AF871FFD1CA447E5004C752C /* VimeoPlayer */,
AF8720071CA447E5004C752C /* VimeoPlayerTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
AF871FFC1CA447E5004C752C /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
AF8720061CA447E5004C752C /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
AF871FF91CA447E5004C752C /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AF87201F1CA44814004C752C /* VIMVideoPlayerView.m in Sources */,
AF87201D1CA44814004C752C /* VIMVideoPlayer.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
AF8720041CA447E5004C752C /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AF87200E1CA447E5004C752C /* VimeoPlayerTests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
AF87200B1CA447E5004C752C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = AF871FFD1CA447E5004C752C /* VimeoPlayer */;
targetProxy = AF87200A1CA447E5004C752C /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
AF8720101CA447E5004C752C /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.2;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Debug;
};
AF8720111CA447E5004C752C /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.2;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Release;
};
AF8720131CA447E5004C752C /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = VimeoPlayer/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.vimeo.VimeoPlayer;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
};
name = Debug;
};
AF8720141CA447E5004C752C /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = VimeoPlayer/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.vimeo.VimeoPlayer;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
};
name = Release;
};
AF8720161CA447E5004C752C /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
INFOPLIST_FILE = VimeoPlayerTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.vimeo.VimeoPlayerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
AF8720171CA447E5004C752C /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
INFOPLIST_FILE = VimeoPlayerTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.vimeo.VimeoPlayerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
AF871FF81CA447E4004C752C /* Build configuration list for PBXProject "VimeoPlayer" */ = {
isa = XCConfigurationList;
buildConfigurations = (
AF8720101CA447E5004C752C /* Debug */,
AF8720111CA447E5004C752C /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
AF8720121CA447E5004C752C /* Build configuration list for PBXNativeTarget "VimeoPlayer" */ = {
isa = XCConfigurationList;
buildConfigurations = (
AF8720131CA447E5004C752C /* Debug */,
AF8720141CA447E5004C752C /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
AF8720151CA447E5004C752C /* Build configuration list for PBXNativeTarget "VimeoPlayerTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
AF8720161CA447E5004C752C /* Debug */,
AF8720171CA447E5004C752C /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = AF871FF51CA447E4004C752C /* Project object */;
}
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0730"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@@ -14,10 +14,10 @@
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "50E506FF1B1E23A600DF1F7A"
BuildableName = "libVIMVideoPlayer.a"
BlueprintName = "VIMVideoPlayer"
ReferencedContainer = "container:VIMVideoPlayer.xcodeproj">
BlueprintIdentifier = "AF871FFD1CA447E5004C752C"
BuildableName = "VimeoPlayer.framework"
BlueprintName = "VimeoPlayer"
ReferencedContainer = "container:VimeoPlayer.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
@@ -26,27 +26,26 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
codeCoverageEnabled = "YES">
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "501A3B8F1BA205A20059040B"
BuildableName = "VIMVideoPlayerTests.xctest"
BlueprintName = "VIMVideoPlayerTests"
ReferencedContainer = "container:VIMVideoPlayer.xcodeproj">
BlueprintIdentifier = "AF8720071CA447E5004C752C"
BuildableName = "VimeoPlayerTests.xctest"
BlueprintName = "VimeoPlayerTests"
ReferencedContainer = "container:VimeoPlayer.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "50E506FF1B1E23A600DF1F7A"
BuildableName = "libVIMVideoPlayer.a"
BlueprintName = "VIMVideoPlayer"
ReferencedContainer = "container:VIMVideoPlayer.xcodeproj">
BlueprintIdentifier = "AF871FFD1CA447E5004C752C"
BuildableName = "VimeoPlayer.framework"
BlueprintName = "VimeoPlayer"
ReferencedContainer = "container:VimeoPlayer.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
@@ -65,10 +64,10 @@
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "50E506FF1B1E23A600DF1F7A"
BuildableName = "libVIMVideoPlayer.a"
BlueprintName = "VIMVideoPlayer"
ReferencedContainer = "container:VIMVideoPlayer.xcodeproj">
BlueprintIdentifier = "AF871FFD1CA447E5004C752C"
BuildableName = "VimeoPlayer.framework"
BlueprintName = "VimeoPlayer"
ReferencedContainer = "container:VimeoPlayer.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
@@ -83,10 +82,10 @@
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "50E506FF1B1E23A600DF1F7A"
BuildableName = "libVIMVideoPlayer.a"
BlueprintName = "VIMVideoPlayer"
ReferencedContainer = "container:VIMVideoPlayer.xcodeproj">
BlueprintIdentifier = "AF871FFD1CA447E5004C752C"
BuildableName = "VimeoPlayer.framework"
BlueprintName = "VimeoPlayer"
ReferencedContainer = "container:VimeoPlayer.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSPrincipalClass</key>
<string></string>
</dict>
</plist>
@@ -0,0 +1,20 @@
//
// VimeoPlayer.h
// VimeoPlayer
//
// Created by Alfred Hanssen on 3/24/16.
// Copyright © 2016 Vimeo. All rights reserved.
//
@import UIKit;
//! Project version number for VimeoPlayer.
FOUNDATION_EXPORT double VimeoPlayerVersionNumber;
//! Project version string for VimeoPlayer.
FOUNDATION_EXPORT const unsigned char VimeoPlayerVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <VimeoPlayer/PublicHeader.h>
#import <VimeoPlayer/VIMVideoPlayer.h>
#import <VimeoPlayer/VIMVideoPlayerView.h>
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>
@@ -1,18 +1,18 @@
//
// VIMVideoPlayerTests.m
// VIMVideoPlayerTests
// VimeoPlayerTests.m
// VimeoPlayerTests
//
// Created by Hanssen, Alfie on 9/10/15.
// Copyright © 2015 Vimeo. All rights reserved.
// Created by Alfred Hanssen on 3/24/16.
// Copyright © 2016 Vimeo. All rights reserved.
//
#import <XCTest/XCTest.h>
@interface VIMVideoPlayerTests : XCTestCase
@interface VimeoPlayerTests : XCTestCase
@end
@implementation VIMVideoPlayerTests
@implementation VimeoPlayerTests
- (void)setUp {
[super setUp];
@@ -1,6 +1,6 @@
//
// VideoPlayer.h
// Smokescreen
// Vimeo
//
// Created by Alfred Hanssen on 2/9/14.
// Copyright (c) 2014-2015 Vimeo (https://vimeo.com)
@@ -24,12 +24,13 @@
// THE SOFTWARE.
//
#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
@import Foundation;
@import AVFoundation;
@class AVPlayer;
@class VIMVideoPlayer;
static const float TimeUpdateInterval = 0.1f;
@protocol VIMVideoPlayerDelegate <NSObject>
@optional
@@ -37,6 +38,8 @@
- (void)videoPlayerDidReachEnd:(VIMVideoPlayer *)videoPlayer;
- (void)videoPlayer:(VIMVideoPlayer *)videoPlayer timeDidChange:(CMTime)cmTime;
- (void)videoPlayer:(VIMVideoPlayer *)videoPlayer loadedTimeRangeDidChange:(float)duration;
- (void)videoPlayerPlaybackBufferEmpty:(VIMVideoPlayer *)videoPlayer;
- (void)videoPlayerPlaybackLikelyToKeepUp:(VIMVideoPlayer *)videoPlayer;
- (void)videoPlayer:(VIMVideoPlayer *)videoPlayer didFailWithError:(NSError *)error;
@end
@@ -1,6 +1,6 @@
//
// VideoPlayer.m
// Smokescreen
// Vimeo
//
// Created by Alfred Hanssen on 2/9/14.
// Copyright (c) 2014-2015 Vimeo (https://vimeo.com)
@@ -28,7 +28,6 @@
static const float DefaultPlayableBufferLength = 2.0f;
static const float DefaultVolumeFadeDuration = 1.0f;
static const float TimeObserverInterval = 0.01f;
NSString * const kVideoPlayerErrorDomain = @"kVideoPlayerErrorDomain";
@@ -95,8 +94,15 @@ static void *VideoPlayer_PlayerItemLoadedTimeRangesContext = &VideoPlayer_Player
- (void)setupPlayer
{
self.player = [[AVPlayer alloc] init];
self.player.muted = NO;
self.player.allowsExternalPlayback = YES;
self.muted = NO;
self.looping = NO;
self.player.usesExternalPlaybackWhileExternalScreenIsActive = YES;
[self setVolume:1.0f];
[self enableTimeUpdates];
[self enableAirplay];
}
- (void)setupAudioSession
@@ -159,7 +165,8 @@ static void *VideoPlayer_PlayerItemLoadedTimeRangesContext = &VideoPlayer_Player
[self resetPlayerItemIfNecessary];
AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset:asset automaticallyLoadedAssetKeys:@[NSStringFromSelector(@selector(tracks))]];
AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset: asset];
if (!playerItem)
{
[self reportUnableToCreatePlayerItem];
@@ -439,13 +446,16 @@ static void *VideoPlayer_PlayerItemLoadedTimeRangesContext = &VideoPlayer_Player
{
[self.player seekToTime:kCMTimeZero toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero completionHandler:^(BOOL finished) {
_isAtEndTime = NO;
if (self.isPlaying)
if (finished)
{
[self play];
_isAtEndTime = NO;
if (self.isPlaying)
{
[self play];
}
}
}];
}
@@ -634,7 +644,7 @@ static void *VideoPlayer_PlayerItemLoadedTimeRangesContext = &VideoPlayer_Player
}
__weak typeof (self) weakSelf = self;
self.timeObserverToken = [self.player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(TimeObserverInterval, NSEC_PER_SEC) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {
self.timeObserverToken = [self.player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(TimeUpdateInterval, NSEC_PER_SEC) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {
__strong typeof (self) strongSelf = weakSelf;
if (!strongSelf)
@@ -711,12 +721,29 @@ static void *VideoPlayer_PlayerItemLoadedTimeRangesContext = &VideoPlayer_Player
NSLog(@"Video player Status Failed: player item error = %@", self.player.currentItem.error);
NSLog(@"Video player Status Failed: player error = %@", self.player.error);
// First, try to use the player error if it exists
NSError *error = self.player.error;
// Otherwise try to use the current item's error
if (!error)
{
error = self.player.currentItem.error;
}
else
// If there's a more specific underlyng error, use that
NSError *underlyingError = [error.userInfo objectForKey:NSUnderlyingErrorKey];
if (underlyingError)
{
error = underlyingError;
}
// Finally, construct our own as a last resort
if (!error)
{
error = [NSError errorWithDomain:kVideoPlayerErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"unknown player error, status == AVPlayerItemStatusFailed"}];
}
@@ -734,6 +761,18 @@ static void *VideoPlayer_PlayerItemLoadedTimeRangesContext = &VideoPlayer_Player
}
}
}
else if (newStatus == AVPlayerItemStatusReadyToPlay)
{
// When playback resumes after a buffering event, a new ReadyToPlay status is set [RH]
if ([self.delegate respondsToSelector:@selector(videoPlayerPlaybackLikelyToKeepUp:)])
{
dispatch_async(dispatch_get_main_queue(), ^
{
[self.delegate videoPlayerPlaybackLikelyToKeepUp:self];
});
}
}
}
else if (context == VideoPlayer_PlayerItemPlaybackBufferEmpty)
{
@@ -741,7 +780,13 @@ static void *VideoPlayer_PlayerItemLoadedTimeRangesContext = &VideoPlayer_Player
{
if (self.isPlaying)
{
// TODO: Show Loading indicator
dispatch_async(dispatch_get_main_queue(), ^
{
if ([self.delegate respondsToSelector:@selector(videoPlayerPlaybackBufferEmpty:)])
{
[self.delegate videoPlayerPlaybackBufferEmpty:self];
}
});
}
}
}
@@ -1,6 +1,6 @@
//
// VideoPlayerView.h
// Smokescreen
// Vimeo
//
// Created by Alfred Hanssen on 2/9/14.
// Copyright (c) 2014-2015 Vimeo (https://vimeo.com)
@@ -24,8 +24,9 @@
// THE SOFTWARE.
//
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@import Foundation;
@import AVFoundation;
@import UIKit;
@class VIMVideoPlayer;
@class VIMVideoPlayerView;
@@ -37,6 +38,8 @@
- (void)videoPlayerViewDidReachEnd:(VIMVideoPlayerView *)videoPlayerView;
- (void)videoPlayerView:(VIMVideoPlayerView *)videoPlayerView timeDidChange:(CMTime)cmTime;
- (void)videoPlayerView:(VIMVideoPlayerView *)videoPlayerView loadedTimeRangeDidChange:(float)duration;
- (void)videoPlayerViewPlaybackBufferEmpty:(VIMVideoPlayerView *)videoPlayerView;
- (void)videoPlayerViewPlaybackLikelyToKeepUp:(VIMVideoPlayerView *)videoPlayerView;
- (void)videoPlayerView:(VIMVideoPlayerView *)videoPlayerView didFailWithError:(NSError *)error;
@end
@@ -47,6 +50,8 @@
@property (nonatomic, strong) VIMVideoPlayer *player;
- (void)setPlayer:(VIMVideoPlayer *)player;
- (void)setVideoFillMode:(NSString *)fillMode;
@end
@@ -1,6 +1,6 @@
//
// VideoPlayerView.m
// Smokescreen
// Vimeo
//
// Created by Alfred Hanssen on 2/9/14.
// Copyright (c) 2014-2015 Vimeo (https://vimeo.com)
@@ -27,8 +27,6 @@
#import "VIMVideoPlayerView.h"
#import "VIMVideoPlayer.h"
#import <AVFoundation/AVFoundation.h>
@interface VIMVideoPlayerView () <VIMVideoPlayerDelegate>
@end
@@ -66,11 +64,9 @@
- (void)commonInit
{
_player = [[VIMVideoPlayer alloc] init];
_player.muted = YES;
_player.looping = YES;
VIMVideoPlayer *player = [[VIMVideoPlayer alloc] init];
[self attachPlayer];
[self setPlayer:player];
}
#pragma mark - Public API
@@ -81,7 +77,7 @@
{
return;
}
[self detachPlayer];
_player = player;
@@ -156,6 +152,22 @@
}
}
- (void)videoPlayerPlaybackBufferEmpty:(VIMVideoPlayer *)videoPlayer
{
if ([self.delegate respondsToSelector:@selector(videoPlayerViewPlaybackBufferEmpty:)])
{
[self.delegate videoPlayerViewPlaybackBufferEmpty:self];
}
}
- (void)videoPlayerPlaybackLikelyToKeepUp:(VIMVideoPlayer *)videoPlayer
{
if ([self.delegate respondsToSelector:@selector(videoPlayerViewPlaybackLikelyToKeepUp:)])
{
[self.delegate videoPlayerViewPlaybackLikelyToKeepUp:self];
}
}
- (void)videoPlayer:(VIMVideoPlayer *)videoPlayer didFailWithError:(NSError *)error
{
if ([self.delegate respondsToSelector:@selector(videoPlayerView:didFailWithError:)])
+7 -25
View File
@@ -9,7 +9,7 @@
Pod::Spec.new do |s|
s.name = "VIMVideoPlayer"
s.version = "5.6.0"
s.version = "6.0.1"
s.summary = "A simple wrapper around the AVPlayer and AVPlayerLayer classes."
s.description = <<-DESC
VIMVideoPlayer is a simple wrapper around the AVPlayer and AVPlayerLayer classes. Check out the README for details. And the Pegasus project for a demo.
@@ -19,7 +19,7 @@ Pod::Spec.new do |s|
s.license = "MIT"
s.license = { :type => "MIT", :file => "LICENSE.md" }
s.authors = { "Alfie Hanssen" => "alfiehanssen@gmail.com",
s.authors = { "Alfie Hanssen" => "alfiehanssen@gmail.com",
"Rob Huebner" => "robh@vimeo.com",
"Gavin King" => "gavin@vimeo.com",
"Kashif Muhammad" => "support@vimeo.com",
@@ -27,32 +27,14 @@ s.authors = { "Alfie Hanssen" => "alfiehanssen@gmail.com",
"Stephen Fredieu" => "support@vimeo.com",
"Rahul Kumar" => "support@vimeo.com" }
s.social_media_url = "http://twitter.com/vimeo"
# s.platform = :ios
# s.platform = :ios, "7.0"
# When using multiple platforms
s.ios.deployment_target = "7.0"
# s.osx.deployment_target = "10.7"
s.social_media_url = "http://twitter.com/vimeoapi"
s.ios.deployment_target = '7.0'
s.tvos.deployment_target = '9.0'
s.source = { :git => "https://github.com/vimeo/VIMVideoPlayer.git", :tag => s.version.to_s }
s.source_files = "VIMVideoPlayer", "VIMVideoPlayer/*.{h,m}"
s.exclude_files = "VIMVideoPlayer/Exclude"
# ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
#
# Link your library with frameworks, or libraries. Libraries do not include
# the lib prefix of their name.
#
# s.framework = "SomeFramework"
# s.frameworks = "SomeFramework", "AnotherFramework"
# s.library = "iconv"
# s.libraries = "iconv", "xml2"
s.source_files = "VIMVideoPlayer-Source/**/*.{h,m}"
s.requires_arc = true
end
end
-370
View File
@@ -1,370 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
501A3B931BA205A20059040B /* VIMVideoPlayerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 501A3B921BA205A20059040B /* VIMVideoPlayerTests.m */; };
501A3B951BA205A20059040B /* libVIMVideoPlayer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 50E507001B1E23A600DF1F7A /* libVIMVideoPlayer.a */; settings = {ASSET_TAGS = (); }; };
50E5071E1B1E23E100DF1F7A /* VIMVideoPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 50E5071B1B1E23E100DF1F7A /* VIMVideoPlayer.m */; };
50E5071F1B1E23E100DF1F7A /* VIMVideoPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 50E5071D1B1E23E100DF1F7A /* VIMVideoPlayerView.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
501A3B961BA205A20059040B /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 50E506F81B1E23A600DF1F7A /* Project object */;
proxyType = 1;
remoteGlobalIDString = 50E506FF1B1E23A600DF1F7A;
remoteInfo = VIMVideoPlayer;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
50E506FE1B1E23A600DF1F7A /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "include/$(PRODUCT_NAME)";
dstSubfolderSpec = 16;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
501A3B901BA205A20059040B /* VIMVideoPlayerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VIMVideoPlayerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
501A3B921BA205A20059040B /* VIMVideoPlayerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VIMVideoPlayerTests.m; sourceTree = "<group>"; };
501A3B941BA205A20059040B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
50E507001B1E23A600DF1F7A /* libVIMVideoPlayer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libVIMVideoPlayer.a; sourceTree = BUILT_PRODUCTS_DIR; };
50E5071A1B1E23E100DF1F7A /* VIMVideoPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VIMVideoPlayer.h; sourceTree = "<group>"; };
50E5071B1B1E23E100DF1F7A /* VIMVideoPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VIMVideoPlayer.m; sourceTree = "<group>"; };
50E5071C1B1E23E100DF1F7A /* VIMVideoPlayerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VIMVideoPlayerView.h; sourceTree = "<group>"; };
50E5071D1B1E23E100DF1F7A /* VIMVideoPlayerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VIMVideoPlayerView.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
501A3B8D1BA205A20059040B /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
501A3B951BA205A20059040B /* libVIMVideoPlayer.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
50E506FD1B1E23A600DF1F7A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
501A3B911BA205A20059040B /* VIMVideoPlayerTests */ = {
isa = PBXGroup;
children = (
501A3B921BA205A20059040B /* VIMVideoPlayerTests.m */,
501A3B941BA205A20059040B /* Info.plist */,
);
path = VIMVideoPlayerTests;
sourceTree = "<group>";
};
50E506F71B1E23A600DF1F7A = {
isa = PBXGroup;
children = (
50E507021B1E23A600DF1F7A /* VIMVideoPlayer */,
501A3B911BA205A20059040B /* VIMVideoPlayerTests */,
50E507011B1E23A600DF1F7A /* Products */,
);
sourceTree = "<group>";
};
50E507011B1E23A600DF1F7A /* Products */ = {
isa = PBXGroup;
children = (
50E507001B1E23A600DF1F7A /* libVIMVideoPlayer.a */,
501A3B901BA205A20059040B /* VIMVideoPlayerTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
50E507021B1E23A600DF1F7A /* VIMVideoPlayer */ = {
isa = PBXGroup;
children = (
50E5071A1B1E23E100DF1F7A /* VIMVideoPlayer.h */,
50E5071B1B1E23E100DF1F7A /* VIMVideoPlayer.m */,
50E5071C1B1E23E100DF1F7A /* VIMVideoPlayerView.h */,
50E5071D1B1E23E100DF1F7A /* VIMVideoPlayerView.m */,
);
path = VIMVideoPlayer;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
501A3B8F1BA205A20059040B /* VIMVideoPlayerTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 501A3B981BA205A20059040B /* Build configuration list for PBXNativeTarget "VIMVideoPlayerTests" */;
buildPhases = (
501A3B8C1BA205A20059040B /* Sources */,
501A3B8D1BA205A20059040B /* Frameworks */,
501A3B8E1BA205A20059040B /* Resources */,
);
buildRules = (
);
dependencies = (
501A3B971BA205A20059040B /* PBXTargetDependency */,
);
name = VIMVideoPlayerTests;
productName = VIMVideoPlayerTests;
productReference = 501A3B901BA205A20059040B /* VIMVideoPlayerTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
50E506FF1B1E23A600DF1F7A /* VIMVideoPlayer */ = {
isa = PBXNativeTarget;
buildConfigurationList = 50E507141B1E23A600DF1F7A /* Build configuration list for PBXNativeTarget "VIMVideoPlayer" */;
buildPhases = (
50E506FC1B1E23A600DF1F7A /* Sources */,
50E506FD1B1E23A600DF1F7A /* Frameworks */,
50E506FE1B1E23A600DF1F7A /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = VIMVideoPlayer;
productName = VIMVideoPlayer;
productReference = 50E507001B1E23A600DF1F7A /* libVIMVideoPlayer.a */;
productType = "com.apple.product-type.library.static";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
50E506F81B1E23A600DF1F7A /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0630;
ORGANIZATIONNAME = Vimeo;
TargetAttributes = {
501A3B8F1BA205A20059040B = {
CreatedOnToolsVersion = 7.0;
};
50E506FF1B1E23A600DF1F7A = {
CreatedOnToolsVersion = 6.3.1;
};
};
};
buildConfigurationList = 50E506FB1B1E23A600DF1F7A /* Build configuration list for PBXProject "VIMVideoPlayer" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 50E506F71B1E23A600DF1F7A;
productRefGroup = 50E507011B1E23A600DF1F7A /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
50E506FF1B1E23A600DF1F7A /* VIMVideoPlayer */,
501A3B8F1BA205A20059040B /* VIMVideoPlayerTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
501A3B8E1BA205A20059040B /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
501A3B8C1BA205A20059040B /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
501A3B931BA205A20059040B /* VIMVideoPlayerTests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
50E506FC1B1E23A600DF1F7A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
50E5071F1B1E23E100DF1F7A /* VIMVideoPlayerView.m in Sources */,
50E5071E1B1E23E100DF1F7A /* VIMVideoPlayer.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
501A3B971BA205A20059040B /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 50E506FF1B1E23A600DF1F7A /* VIMVideoPlayer */;
targetProxy = 501A3B961BA205A20059040B /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
501A3B991BA205A20059040B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_TESTABILITY = YES;
INFOPLIST_FILE = VIMVideoPlayerTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.vimeo.VIMVideoPlayerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
501A3B9A1BA205A20059040B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
INFOPLIST_FILE = VIMVideoPlayerTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.vimeo.VIMVideoPlayerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
50E507121B1E23A600DF1F7A /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.3;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
name = Debug;
};
50E507131B1E23A600DF1F7A /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.3;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
50E507151B1E23A600DF1F7A /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
};
name = Debug;
};
50E507161B1E23A600DF1F7A /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
501A3B981BA205A20059040B /* Build configuration list for PBXNativeTarget "VIMVideoPlayerTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
501A3B991BA205A20059040B /* Debug */,
501A3B9A1BA205A20059040B /* Release */,
);
defaultConfigurationIsVisible = 0;
};
50E506FB1B1E23A600DF1F7A /* Build configuration list for PBXProject "VIMVideoPlayer" */ = {
isa = XCConfigurationList;
buildConfigurations = (
50E507121B1E23A600DF1F7A /* Debug */,
50E507131B1E23A600DF1F7A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
50E507141B1E23A600DF1F7A /* Build configuration list for PBXNativeTarget "VIMVideoPlayer" */ = {
isa = XCConfigurationList;
buildConfigurations = (
50E507151B1E23A600DF1F7A /* Debug */,
50E507161B1E23A600DF1F7A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 50E506F81B1E23A600DF1F7A /* Project object */;
}
+10
View File
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Examples/VimeoPlayer-iOS-Example/VimeoPlayer-iOS-Example.xcodeproj">
</FileRef>
<FileRef
location = "group:VIMVideoPlayer-Framework/VimeoPlayer.xcodeproj">
</FileRef>
</Workspace>