...
 
Commits (218)
version: 2
jobs:
build:
macos:
xcode: "9.2.0"
environment:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
shell: /bin/bash --login -eo pipefail
steps:
- checkout
- run: echo "2.3.5" > .ruby-version
- restore_cache:
key: v1-gems-{{ checksum "Gemfile.lock" }}
- run: bundle check || bundle install --path .bundle
- save_cache:
key: v1-gems-{{ checksum "Gemfile.lock" }}
paths:
- .bundle
- restore_cache:
key: v1-pods-{{ checksum "Podfile.lock" }}
- run:
name: Install CocoaPods
command: |
curl https://cocoapods-specs.circleci.com/fetch-cocoapods-repo-from-s3.sh | bash -s cf
pod install
- save_cache:
key: v1-pods-{{ checksum "Podfile.lock" }}
paths:
- Pods
- run: bundle exec fastlane ci
- store_artifacts:
path: /Users/distiller/Library/Logs/gym
!Makefile
*.mode*
*.pbxuser
# Xcode
xcuserdata
*.xccheckout
*.pbxuser
*.mode*
# macOS
.DS_Store
# Fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
# CocoaPods
Pods
# Private Constants
0001-privateConstants.patch
# Others
!Makefile
build
External
ImportedSources
DerivedData
Pods
......@@ -5,3 +5,7 @@ Felix Paul Kühne <fkuehne@videolan.org>
<fkuehne@videolan.org> <felix@serioese.gmbh>
<fkuehne@videolan.org> <felix@feepk.net>
Marc Etcheverry <marc@taplightsoftware.com> <marcetcheverry@gmail.com>
Soomin Lee <bubu@mikan.io>
<bubu@mikan.io> <thehungrybu@gmail.com>
Carola Nitz <nitz.carola@googlemail.com>
<deploy@Caro.local> <nitz.carola@googlemail.com>
......@@ -12,7 +12,7 @@
font-weight: 300; }
</style>
<div style="text-align:left; border:solid transparent 1px; padding:0.5em 1em 0.5em 1em; overflow:auto; font-size:20pt; font-family: -apple-system; color:#1f1f1f"; A:link {text-decoration: none; color:#1f1f1f}>
<p align="center">Copyright &copy; 2013-2018 VideoLAN and authors<br /><br />Written by Tobias Conradi and Felix Paul Kühne</a>,<br /><br /> based on VLC for iOS by Felix Paul Kühne, Tobias Conradi, Gleb Pinigin, Pierre Sagaspe, Carola Nitz, Soomin Lee, Jean-Baptiste Kempf, Marc Etcheverry, <br />with additions by Vincent L. Cone, David Loiret, Benjamin Adolphi, Tam&aacute;s T&iacute;m&aacute;r</a>, Shenghan Chen, Martin Storsjö, Filipe Cabecinhas, Thomas Guillem, Alessio Pollero, Christoph Miebach, Diego Fernando Nieto, Christopher Loessl, Fabio Ritrovato, Kevin Chromik, Sylver Bruneau, David Fuhrmann, Ulrich Trampe, Ron Soffer, Riccardo Angius, Adam Viaud, Ahmad Harb, Dean Lee, Jörg Bleyel, Kai Neuwerth, Konstantin Pavlov, Luis Fernandes, Shai Shamir, Steven Kabbes, Tim Byrne and Winston Weinert.</p>
<p align="center">Copyright &copy; 2013-2018 VideoLAN and authors<br /><br />Written by Tobias Conradi and Felix Paul Kühne,<br /><br /> based on VLC for iOS by Felix Paul Kühne, Carola Nitz, Tobias Conradi, Pierre Sagaspe, Gleb Pinigin, Soomin Lee, Jean-Baptiste Kempf, Marc Etcheverry, <br />with additions by David Cordero, Vincent L. Cone, David Loiret, Mike JS. Choi, Benjamin Adolphi, Thomas Guillem, Tam&aacute;s T&iacute;m&aacute;r, Shenghan Chen, Victor Gama, Martin Storsjö, Filipe Cabecinhas, Alessio Pollero, Richard Soderberg, Christoph Miebach, Diego Fernando Nieto, Christopher Loessl, Fabio Ritrovato, Kevin Chromik, Sylver Bruneau, David Fuhrmann, Ulrich Trampe, Ron Soffer, Riccardo Angius, Adam Viaud, Ahmad Harb, Dean Lee, Jörg Bleyel, Kai Neuwerth, Konstantin Pavlov, Luis Fernandes, Shai Shamir, Steven Kabbes, Tim Byrne, Cameron Mozie, Pavel Akhrameev and Winston Weinert.</p>
<p align="center">We would like to thank the following people for tests, ideas and translations:<br />
Phan Anh, Helena Arndt, Andriy Bandura, Luca Barbato, Ana Coronel, Keiji Costantini, Ludovic Fauvet, Roberto Ferraro, David González, Marián Hikaník, Christian Kosim, Alexander Lakhin, Freya Lindhorst, Adrien Maglo, Fumio Nakayama, Savvas Nesseris, Ilkka Ollakka, Alexandre Perraud, Vincenzo Reale, Anton Regnander, Thomas De Rocker, Mario Siegmann, Yaron Shahrabani, Michał Trzebiatowski, Kaya Zeren, Transifex VLC project team<br />
<br />
......
......@@ -17,11 +17,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>3.0.0</string>
<string>3.0.3</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>300</string>
<string>306</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSRequiresIPhoneOS</key>
......
......@@ -140,7 +140,7 @@
trackCell.selectionMarkerVisible = isSelected;
VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
NSDictionary *description = [vpc chapterDescriptionsDictAtIndex:[vpc indexOfCurrentTitle]];
NSDictionary *description = [vpc chapterDescriptionsDictAtIndex:row];
NSString *chapter = description[VLCChapterDescriptionName];
if (chapter == nil)
......
......@@ -98,6 +98,7 @@
toFrame = smallFrame;
fromFrame = largeFrame;
[container addSubview:target.view];
[target.view layoutIfNeeded];
} else if ([source isKindOfClass:[VLCPlaybackInfoTVViewController class]]) {
infoVC = (VLCPlaybackInfoTVViewController*) source;
infoVC.dimmingView.alpha = 1.0;
......
......@@ -141,10 +141,6 @@
[vpc setAudioPassthrough:bValue];
[defaults setBool:bValue forKey:kVLCSettingUseSPDIF];
/* restart the audio output */
NSInteger currentAudioTrackIndex = [vpc indexOfCurrentAudioTrack];
[vpc selectAudioTrackAtIndex:0];
[vpc selectAudioTrackAtIndex:currentAudioTrackIndex];
} else {
[vpc selectAudioTrackAtIndex:row];
}
......
......@@ -15,8 +15,8 @@
#import "VLCIRTVTapGestureRecognizer.h"
#import "VLCHTTPUploaderController.h"
#import "VLCSiriRemoteGestureRecognizer.h"
#import "MetaDataFetcherKit.h"
#import "VLCNetworkImageView.h"
#import "VLCMetaData.h"
typedef NS_ENUM(NSInteger, VLCPlayerScanState)
{
......@@ -28,7 +28,7 @@ typedef NS_ENUM(NSInteger, VLCPlayerScanState)
@interface VLCFullscreenMovieTVViewController (UIViewControllerTransitioningDelegate) <UIViewControllerTransitioningDelegate, UIGestureRecognizerDelegate>
@end
@interface VLCFullscreenMovieTVViewController () <MDFHatchetFetcherDataRecipient>
@interface VLCFullscreenMovieTVViewController ()
@property (nonatomic) CADisplayLink *displayLink;
@property (nonatomic) NSTimer *audioDescriptionScrollTimer;
......@@ -36,7 +36,6 @@ typedef NS_ENUM(NSInteger, VLCPlayerScanState)
@property (nonatomic) VLCPlaybackInfoTVViewController *infoViewController;
@property (nonatomic) NSNumber *scanSavedPlaybackRate;
@property (nonatomic) VLCPlayerScanState scanState;
@property (nonatomic) MDFHatchetFetcher *audioMetaDataFetcher;
@property (nonatomic) NSString *lastArtist;
@property (nonatomic, readonly, getter=isSeekable) BOOL seekable;
......@@ -217,10 +216,6 @@ typedef NS_ENUM(NSInteger, VLCPlayerScanState)
}
}
if (!self.canScrub) {
return;
}
switch (panGestureRecognizer.state) {
case UIGestureRecognizerStateCancelled:
case UIGestureRecognizerStateFailed:
......@@ -233,10 +228,11 @@ typedef NS_ENUM(NSInteger, VLCPlayerScanState)
UIView *view = self.view;
CGPoint translation = [panGestureRecognizer translationInView:view];
BOOL canScrub = self.canScrub;
if (!bar.scrubbing) {
if (ABS(translation.x) > 150.0) {
if (self.isSeekable) {
if (self.isSeekable && canScrub) {
[self startScrubbing];
} else {
return;
......@@ -251,16 +247,17 @@ typedef NS_ENUM(NSInteger, VLCPlayerScanState)
}
}
if (!canScrub) {
return;
}
[self showPlaybackControlsIfNeededForUserInteraction];
[self setScanState:VLCPlayerScanStateNone];
const CGFloat scaleFactor = 8.0;
CGFloat fractionInView = translation.x/CGRectGetWidth(view.bounds)/scaleFactor;
CGFloat fractionInView = translation.x / CGRectGetWidth(view.bounds) / scaleFactor;
CGFloat scrubbingFraction = MAX(0.0, MIN(bar.scrubbingFraction + fractionInView,1.0));
if (ABS(scrubbingFraction - bar.playbackFraction)<0.005) {
scrubbingFraction = bar.playbackFraction;
} else {
......@@ -298,7 +295,7 @@ typedef NS_ENUM(NSInteger, VLCPlayerScanState)
bar.playbackFraction = bar.scrubbingFraction;
[self stopScrubbing];
[vpc setPlaybackPosition:bar.scrubbingFraction];
} else if(vpc.isPlaying) {
} else {
[vpc playPause];
}
}
......@@ -827,47 +824,34 @@ currentMediaHasTrackToChooseFrom:(BOOL)currentMediaHasTrackToChooseFrom
if (self.movieView.subviews.count < 2) {
controller.videoOutputView = self.movieView;
}
[self hidePlaybackControlsIfNeededAfterDelay];
} else {
[self showPlaybackControlsIfNeededForUserInteraction];
}
if (controller.isPlaying && !self.bufferingLabel.hidden) {
[UIView animateWithDuration:.3 animations:^{
self.bufferingLabel.hidden = YES;
}];
if (!self.bufferingLabel.hidden) {
[UIView animateWithDuration:.3 animations:^{
self.bufferingLabel.hidden = YES;
}];
}
}
}
- (void)displayMetadataForPlaybackController:(VLCPlaybackController *)controller
title:(NSString *)title
artwork:(UIImage *)artwork
artist:(NSString *)artist
album:(NSString *)album
audioOnly:(BOOL)audioOnly
- (void)displayMetadataForPlaybackController:(VLCPlaybackController *)controller metadata:(VLCMetaData *)metadata
{
NSString *title = metadata.title;
NSString *artist = metadata.artist;
NSString *albumName = metadata.albumName;
self.titleLabel.text = title;
if (audioOnly) {
if (metadata.isAudioOnly) {
self.audioArtworkImageView.image = nil;
self.audioDescriptionTextView.hidden = YES;
[self stopAudioDescriptionAnimation];
if (!self.audioMetaDataFetcher) {
self.audioMetaDataFetcher = [[MDFHatchetFetcher alloc] init];
self.audioMetaDataFetcher.dataRecipient = self;
}
[self.audioMetaDataFetcher cancelAllRequests];
if (artist != nil && album != nil) {
if (artist != nil && albumName != nil) {
[UIView animateWithDuration:.3 animations:^{
self.audioArtistLabel.text = artist;
self.audioArtistLabel.hidden = NO;
self.audioAlbumNameLabel.text = album;
self.audioAlbumNameLabel.text = albumName;
self.audioAlbumNameLabel.hidden = NO;
}];
APLog(@"Audio-only track meta changed, tracing artist '%@' and album '%@'", artist, album);
APLog(@"Audio-only track meta changed, tracing artist '%@' and album '%@'", artist, albumName);
} else if (artist != nil) {
[UIView animateWithDuration:.3 animations:^{
self.audioArtistLabel.text = artist;
......@@ -899,17 +883,10 @@ currentMediaHasTrackToChooseFrom:(BOOL)currentMediaHasTrackToChooseFrom
self.audioTitleLabel.text = title;
self.audioTitleLabel.hidden = NO;
if (artist != nil) {
if (album != nil) {
[self.audioMetaDataFetcher searchForAlbum:album ofArtist:artist];
} else
[self.audioMetaDataFetcher searchForArtist:artist];
}
[UIView animateWithDuration:0.3 animations:^{
self.audioView.hidden = NO;
}];
} else if (!self.audioView.hidden) {
[self.audioMetaDataFetcher cancelAllRequests];
self.audioView.hidden = YES;
self.audioArtworkImageView.image = nil;
[self.audioLargeBackgroundImageView stopAnimating];
......@@ -950,113 +927,6 @@ currentMediaHasTrackToChooseFrom:(BOOL)currentMediaHasTrackToChooseFrom
return [self.simultaneousGestureRecognizers containsObject:gestureRecognizer];
}
#pragma mark - meta data recipient
- (void)MDFHatchetFetcher:(MDFHatchetFetcher * _Nonnull)aFetcher
didFindAlbum:(MDFMusicAlbum * _Nonnull)album
byArtist:(MDFArtist * _Nullable)artist
forSearchRequest:(NSString *)searchRequest
{
/* we have no match */
if (!artist) {
[self _simplifyMetaDataSearchString:searchRequest];
return;
}
if (artist.biography) {
[self scrollAudioDescriptionAnimationToTop];
[UIView animateWithDuration:.3 animations:^{
self.audioDescriptionTextView.hidden = NO;
self.audioDescriptionTextView.text = artist.biography;
}];
[self startAudioDescriptionAnimation];
} else
[self stopAudioDescriptionAnimation];
NSString *imageURLString = album.artworkImage;
if (!imageURLString) {
NSArray *imageURLStrings = album.largeSizedArtistImages;
if (imageURLStrings.count > 0) {
imageURLString = imageURLStrings.firstObject;
} else {
imageURLStrings = artist.mediumSizedImages;
if (imageURLStrings.count > 0) {
imageURLString = imageURLStrings.firstObject;
}
}
}
if (imageURLString) {
[self.audioArtworkImageView setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@?height=500&width=500", imageURLString]]];
[self.audioLargeBackgroundImageView setImageWithURL:[NSURL URLWithString:imageURLString]];
} else {
UIImage *dummyImage = [UIImage imageNamed:@"about-app-icon"];
self.audioArtworkImageView.image = dummyImage;
self.audioLargeBackgroundImageView.image = dummyImage;
[self _simplifyMetaDataSearchString:searchRequest];
}
}
- (void)MDFHatchetFetcher:(MDFHatchetFetcher *)aFetcher didFailToFindAlbum:(NSString *)albumName forArtistName:(NSString *)artistName
{
APLog(@"%s: %@ %@", __PRETTY_FUNCTION__, albumName, artistName);
UIImage *dummyImage = [UIImage imageNamed:@"about-app-icon"];
self.audioArtworkImageView.image = dummyImage;
self.audioLargeBackgroundImageView.image = dummyImage;
}
- (void)MDFHatchetFetcher:(MDFHatchetFetcher *)aFetcher didFindArtist:(MDFArtist *)artist forSearchRequest:(NSString *)searchRequest
{
/* we have no match */
if (!artist) {
[self _simplifyMetaDataSearchString:searchRequest];
return;
}
if (artist.biography) {
[self scrollAudioDescriptionAnimationToTop];
[UIView animateWithDuration:.3 animations:^{
self.audioDescriptionTextView.text = artist.biography;
self.audioDescriptionTextView.hidden = NO;
}];
[self startAudioDescriptionAnimation];
} else
[self stopAudioDescriptionAnimation];
NSArray *imageURLStrings = artist.largeSizedImages;
NSString *imageURLString;
if (imageURLStrings.count > 0) {
imageURLString = imageURLStrings.firstObject;
} else {
imageURLStrings = artist.mediumSizedImages;
if (imageURLStrings.count > 0) {
imageURLString = imageURLStrings.firstObject;
}
}
if (imageURLString) {
[self.audioArtworkImageView setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@?height=500&width=500",imageURLString]]];
[self.audioLargeBackgroundImageView setImageWithURL:[NSURL URLWithString:imageURLString]];
} else {
[self _simplifyMetaDataSearchString:searchRequest];
}
}
- (void)_simplifyMetaDataSearchString:(NSString *)searchString
{
NSRange lastRange = [searchString rangeOfString:@" " options:NSBackwardsSearch];
if (lastRange.location != NSNotFound)
[self.audioMetaDataFetcher searchForArtist:[searchString substringToIndex:lastRange.location]];
}
- (void)MDFHatchetFetcher:(MDFHatchetFetcher *)aFetcher didFailToFindArtistForSearchRequest:(NSString *)searchRequest
{
APLog(@"%s: %@", __PRETTY_FUNCTION__, searchRequest);
UIImage *dummyImage = [UIImage imageNamed:@"about-app-icon"];
self.audioArtworkImageView.image = dummyImage;
self.audioLargeBackgroundImageView.image = dummyImage;
}
- (void)scrollAudioDescriptionAnimationToTop
{
[self stopAudioDescriptionAnimation];
......
......@@ -86,13 +86,25 @@
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>SETTINGS_DEINTERLACE</string>
<key>Key</key>
<string>deinterlace</string>
<key>DefaultValue</key>
<false/>
<integer>-1</integer>
<key>Values</key>
<array>
<string>1</string>
<string>0</string>
<string>-1</string>
</array>
<key>Titles</key>
<array>
<string>SETTINGS_DEINTERLACE_ON</string>
<string>SETTINGS_DEINTERLACE_OFF</string>
<string>SETTINGS_DEINTERLACE_AUTO</string>
</array>
</dict>
<dict>
<key>Type</key>
......
......@@ -76,13 +76,25 @@
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>SETTINGS_DEINTERLACE</string>
<key>Key</key>
<string>deinterlace</string>
<key>DefaultValue</key>
<false/>
<integer>-1</integer>
<key>Values</key>
<array>
<integer>1</integer>
<string>0</string>
<string>-1</string>
</array>
<key>Titles</key>
<array>
<string>SETTINGS_DEINTERLACE_ON</string>
<string>SETTINGS_DEINTERLACE_OFF</string>
<string>SETTINGS_DEINTERLACE_AUTO</string>
</array>
</dict>
<dict>
<key>Type</key>
......
......@@ -25,9 +25,6 @@
#import "UIViewController+VLCAlert.h"
#import "VLCFullscreenMovieTVViewController.h"
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[UIDevice currentDevice] systemVersion].floatValue >= [v floatValue])
#ifndef NDEBUG
#define APLog(format, ...) NSLog(format, ## __VA_ARGS__)
#else
......
......@@ -12,10 +12,9 @@
#import "VLCMDFBrowsingArtworkProvider.h"
#import "MetaDataFetcherKit.h"
@interface VLCMDFBrowsingArtworkProvider () <MDFMovieDBFetcherDataRecipient, MDFHatchetFetcherDataRecipient>
@interface VLCMDFBrowsingArtworkProvider () <MDFMovieDBFetcherDataRecipient>
{
MDFMovieDBFetcher *_tmdbFetcher;
MDFHatchetFetcher *_hatchetFetcher;
}
@end
......@@ -26,27 +25,16 @@
{
if (_tmdbFetcher) {
[_tmdbFetcher cancelAllRequests];
if (_hatchetFetcher)
[_hatchetFetcher cancelAllRequests];
} else {
_tmdbFetcher = [[MDFMovieDBFetcher alloc] init];
_tmdbFetcher.dataRecipient = self;
_tmdbFetcher.shouldDecrapifyInputStrings = YES;
if (_searchForAudioMetadata) {
_hatchetFetcher = [[MDFHatchetFetcher alloc] init];
_hatchetFetcher.dataRecipient = self;
}
}
}
- (void)setSearchForAudioMetadata:(BOOL)searchForAudioMetadata
{
if (searchForAudioMetadata) {
_hatchetFetcher = [[MDFHatchetFetcher alloc] init];
_hatchetFetcher.dataRecipient = self;
}
_searchForAudioMetadata = searchForAudioMetadata;
NSLog(@"there is currently no audio metadata fetcher :-(");
}
- (void)searchForArtworkForVideoRelatedString:(NSString *)string
......@@ -107,18 +95,11 @@
- (void)MDFMovieDBFetcher:(MDFMovieDBFetcher *)aFetcher didFailToFindMovieForSearchRequest:(NSString *)searchRequest
{
APLog(@"Failed to find a movie for '%@'", searchRequest);
if (_searchForAudioMetadata) {
[_hatchetFetcher searchForArtist:searchRequest];
}
}
- (void)MDFMovieDBFetcher:(MDFMovieDBFetcher *)aFetcher didFindTVShow:(MDFTVShow *)details forSearchRequest:(NSString *)searchRequest
{
if (details == nil) {
if (_searchForAudioMetadata) {
[_hatchetFetcher searchForArtist:searchRequest];
}
return;
}
......@@ -148,9 +129,6 @@
}
}
if (!imagePath) {
if (_searchForAudioMetadata) {
[_hatchetFetcher searchForArtist:searchRequest];
}
return;
}
......@@ -164,49 +142,6 @@
- (void)MDFMovieDBFetcher:(MDFMovieDBFetcher *)aFetcher didFailToFindTVShowForSearchRequest:(NSString *)searchRequest
{
APLog(@"failed to find TV show");
if (_searchForAudioMetadata) {
[_hatchetFetcher searchForArtist:searchRequest];
}
}
- (void)MDFHatchetFetcher:(MDFHatchetFetcher *)aFetcher didFindArtist:(MDFArtist *)artist forSearchRequest:(NSString *)searchRequest
{
/* we have no match */
if (!artist) {
[self _simplifyMetaDataSearchString:searchRequest];
return;
}
NSArray *imageURLStrings = artist.largeSizedImages;
NSString *imageURLString;
if (imageURLStrings.count > 0) {
imageURLString = imageURLStrings.firstObject;
} else {
imageURLStrings = artist.mediumSizedImages;
if (imageURLStrings.count > 0) {
imageURLString = imageURLStrings.firstObject;
}
}
if (imageURLString) {
self.artworkReceiver.thumbnailURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@?height=300&width=250",imageURLString]];
} else {
[self _simplifyMetaDataSearchString:searchRequest];
}
}
- (void)MDFHatchetFetcher:(MDFHatchetFetcher *)aFetcher didFailToFindArtistForSearchRequest:(NSString *)searchRequest
{
[self _simplifyMetaDataSearchString:searchRequest];
}
- (void)_simplifyMetaDataSearchString:(NSString *)searchString
{
NSRange lastRange = [searchString rangeOfString:@" " options:NSBackwardsSearch];
if (lastRange.location != NSNotFound)
[_hatchetFetcher searchForArtist:[searchString substringToIndex:lastRange.location]];
}
@end
iOS 3.1.4:
-----------
· We adapted VLC for the new iPad Pro by adjusting the App and bringing external screen support and FaceID to our iPad Pro users
· We brought the double tap to fullscreen feature to all devices, while still letting you double tap to jump back or forward on the sides of the screen
· Multiple files selection is now possible with iCloud Drive
· Fixed an issue where you couldn't log into the app if you killed it while setting a passcode
tvOS 3.0.3:
-----------
· Fixed black screen when playing back Audio files
· Fixed that list of chapters wasn't shown when the info pane was first opened
· Fixed a bug where all chapters show the name of the first chapter
· Improved audio passthrough behavior
· Audio / Subtitles track selector now appears without pausing first
· Greatly improved hardware decoding performance for H.264 and H.265 (Apple TV 4K only)
· Fix playback issues with certain AVI, MP4 and MKV files
· Improved display of subtitles
iOS 3.1.3:
-----------
· Added Corsican language
· Fixed a crash when reordering files outside of folders
· The Media title is now always visible when streaming to an external display
· Various Stability improvements and bug fixes
iOS 3.1.2:
-----------
· Added an activity indicator for buffering
· The background setting to continue playback is ignored when external screens are used
· Sorting in folders gets saved correctly
· Fixed playback pausing once external output devices like bluetooth headphones are disconnected
· Deinterlacing is disabled by default now modern devices no longer support this, which led to high battery usage
· Stability improvements for the H264 and H265 decoder and Chromecasting
iOS 3.1.1:
-----------
· Fixed the swiping Gestures to change brightness and Volume
· Chromecasting is not stopping anymore when locking the device
· Fixed Video not being displayed over an external Screen via HDMI
· Fixed Audio not working after pausing and leaving the App
· Fixed opening external files in VLC or from the Files app
· Fixed an issue where songs where skipped when playing albums or playlists
· Better 360 video behavior when panning
iOS 3.1.0:
-----------
· We added a feature many of you waited for: Chromecast support
· We fixed a bug where files on your phone were not displayed in VLC
· 360 videos can be viewed by moving your phone now
· Stability and performance improvements when decoding H.264/H.265 in hardware
· Improved audio playback quality
· Fixed a regression preventing the download of certain media files via http
· Fixed a regression where downloaded files might disappear
· Fixed a regression where users couldn't log into Google Drive
tvOS 3.0.2:
-----------
· Fixes issues with not being able to resume playback
· Fixes issues with no subtitles after selection
iOS 3.0.3:
-----------
· Hitting play after backgrounding VLC is finally fixed
· Opening a txt file on iOS won't jump into VLC anymore (we obviously still support this subtitle format)
· Instead of a black screen, when opening certain HEVC files, we now have a playing video
· Fixes an issue were users were prompted to enter a passcode without ever setting one
· We also fixed multiple crashes
· Scrubbing in the lock screen was added
iOS 3.0.2:
-----------
· Fixes issues with TouchID and FaceID
· Fixes a crash when opening a Folder
tvOS 3.0.1:
----------
· Fixes a crash browsing files on local file servers
iOS 3.0.1:
-----------
· Fixes a crash browsing files on local file servers
· the "use TouchID setting" is now respected
· Fixes a crash when locking your UI on iPhone X
iOS 3.0.0:
-----------
· Added support for Drag and Drop
......
......@@ -46,6 +46,9 @@ Look at the memory and performance while playing a video
* Upload the binary and dsym to Hockeyapp so that we get crashreporting
* Tag the version
* Upload archive and ipa to incoming of ftp.videolan.org and ping jb, thresh or etix to move it to ftp://ftp.videolan.org/pub/videolan/vlc-iOS
ipa: archive > export > for App Store
source archive: git archive --format=tar.gz <tag> -o <tag>.tar.gz
source "https://rubygems.org"
gem 'fastlane', '2.82.0'
gem 'cocoapods', '1.4.0'
gem 'xcode-install', '2.3.1'
gem 'xcodeproj', '1.5.6'
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (2.3.6)
activesupport (4.2.10)
i18n (~> 0.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
addressable (2.5.2)
public_suffix (>= 2.0.2, < 4.0)
atomos (0.1.2)
babosa (1.0.2)
claide (1.0.2)
cocoapods (1.4.0)
activesupport (>= 4.0.2, < 5)
claide (>= 1.0.2, < 2.0)
cocoapods-core (= 1.4.0)
cocoapods-deintegrate (>= 1.0.2, < 2.0)
cocoapods-downloader (>= 1.1.3, < 2.0)
cocoapods-plugins (>= 1.0.0, < 2.0)
cocoapods-search (>= 1.0.0, < 2.0)
cocoapods-stats (>= 1.0.0, < 2.0)
cocoapods-trunk (>= 1.3.0, < 2.0)
cocoapods-try (>= 1.1.0, < 2.0)
colored2 (~> 3.1)
escape (~> 0.0.4)
fourflusher (~> 2.0.1)
gh_inspector (~> 1.0)
molinillo (~> 0.6.4)
nap (~> 1.0)
ruby-macho (~> 1.1)
xcodeproj (>= 1.5.4, < 2.0)
cocoapods-core (1.4.0)
activesupport (>= 4.0.2, < 6)
fuzzy_match (~> 2.0.4)
nap (~> 1.0)
cocoapods-deintegrate (1.0.2)
cocoapods-downloader (1.1.3)
cocoapods-plugins (1.0.0)
nap
cocoapods-search (1.0.0)
cocoapods-stats (1.0.0)
cocoapods-trunk (1.3.0)
nap (>= 0.8, < 2.0)
netrc (~> 0.11)
cocoapods-try (1.1.0)
colored (1.2)
colored2 (3.1.2)
commander-fastlane (4.4.6)
highline (~> 1.7.2)
concurrent-ruby (1.0.5)
declarative (0.0.10)
declarative-option (0.1.0)
domain_name (0.5.20170404)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.2.1)
escape (0.0.4)
excon (0.60.0)
faraday (0.14.0)
multipart-post (>= 1.2, < 3)
faraday-cookie_jar (0.0.6)
faraday (>= 0.7.4)
http-cookie (~> 1.0.0)
faraday_middleware (0.12.2)
faraday (>= 0.7.4, < 1.0)
fastimage (2.1.1)
fastlane (2.82.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.3, < 3.0.0)
babosa (>= 1.0.2, < 2.0.0)
bundler (>= 1.12.0, < 2.0.0)
colored
commander-fastlane (>= 4.4.6, < 5.0.0)
dotenv (>= 2.1.1, < 3.0.0)
excon (>= 0.45.0, < 1.0.0)
faraday (~> 0.9)
faraday-cookie_jar (~> 0.0.6)
faraday_middleware (~> 0.9)
fastimage (>= 2.1.0, < 3.0.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-api-client (>= 0.13.1, < 0.14.0)
highline (>= 1.7.2, < 2.0.0)
json (< 3.0.0)
mini_magick (~> 4.5.1)
multi_json
multi_xml (~> 0.5)
multipart-post (~> 2.0.0)
plist (>= 3.1.0, < 4.0.0)
public_suffix (~> 2.0.0)
rubyzip (>= 1.1.0, < 2.0.0)
security (= 0.1.3)
slack-notifier (>= 2.0.0, < 3.0.0)
terminal-notifier (>= 1.6.2, < 2.0.0)
terminal-table (>= 1.4.5, < 2.0.0)
tty-screen (>= 0.6.3, < 1.0.0)
tty-spinner (>= 0.8.0, < 1.0.0)
word_wrap (~> 1.0.0)
xcodeproj (>= 1.5.2, < 2.0.0)
xcpretty (>= 0.2.4, < 1.0.0)
xcpretty-travis-formatter (>= 0.0.3)
fourflusher (2.0.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.2)
google-api-client (0.13.6)
addressable (~> 2.5, >= 2.5.1)
googleauth (~> 0.5)
httpclient (>= 2.8.1, < 3.0)
mime-types (~> 3.0)
representable (~> 3.0)
retriable (>= 2.0, < 4.0)
googleauth (0.6.2)
faraday (~> 0.12)
jwt (>= 1.4, < 3.0)
logging (~> 2.0)
memoist (~> 0.12)
multi_json (~> 1.11)
os (~> 0.9)
signet (~> 0.7)
highline (1.7.10)
http-cookie (1.0.3)
domain_name (~> 0.5)
httpclient (2.8.3)
i18n (0.9.5)
concurrent-ruby (~> 1.0)
json (2.1.0)
jwt (2.1.0)
little-plugger (1.1.4)
logging (2.2.2)
little-plugger (~> 1.1)
multi_json (~> 1.10)
memoist (0.16.0)
mime-types (3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521)
mini_magick (4.5.1)
minitest (5.11.3)
molinillo (0.6.4)
multi_json (1.13.1)
multi_xml (0.6.0)
multipart-post (2.0.0)
nanaimo (0.2.3)
nap (1.1.0)
netrc (0.11.0)
os (0.9.6)
plist (3.4.0)
public_suffix (2.0.5)
representable (3.0.4)
declarative (< 0.1.0)
declarative-option (< 0.2.0)
uber (< 0.2.0)
retriable (3.1.1)
rouge (2.0.7)
ruby-macho (1.1.0)
rubyzip (1.2.1)
security (0.1.3)
signet (0.8.1)
addressable (~> 2.3)
faraday (~> 0.9)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
slack-notifier (2.3.2)
terminal-notifier (1.8.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
thread_safe (0.3.6)
tty-cursor (0.5.0)
tty-screen (0.6.4)
tty-spinner (0.8.0)
tty-cursor (>= 0.5.0)
tzinfo (1.2.5)
thread_safe (~> 0.1)
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.5)
unicode-display_width (1.3.0)
word_wrap (1.0.0)
xcodeproj (1.5.6)
CFPropertyList (~> 2.3.3)
atomos (~> 0.1.2)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.2.3)
xcpretty (0.2.8)
rouge (~> 2.0.7)
xcpretty-travis-formatter (1.0.0)
xcpretty (~> 0.2, >= 0.0.7)
PLATFORMS
ruby
DEPENDENCIES
cocoapods (= 1.4.0)
fastlane (= 2.82.0)
BUNDLED WITH
1.16.1
source 'https://github.com/CocoaPods/Specs.git'
install! 'cocoapods', :deterministic_uuids => false
inhibit_all_warnings!
target 'VLC-iOS' do
platform :ios, '9.0'
def shared_pods
pod 'XKKeychain', '~>1.0'
pod 'box-ios-sdk-v2', :git => 'git://github.com/fkuehne/box-ios-sdk-v2.git' #has a logout function added
pod 'upnpx', '~>1.4.0'
pod 'CocoaHTTPServer', :git => 'git://github.com/fkuehne/CocoaHTTPServer.git' # has our fixes
pod 'VLC-WhiteRaccoon'
pod 'VLC-LiveSDK', '5.7.0x'
pod 'ObjectiveDropboxOfficial', :git => 'git://github.com/carolanitz/dropbox-sdk-obj-c.git' #update ios platform version
end
pod 'OBSlider', '1.1.0'
pod 'InAppSettingsKit', :git => 'git://github.com/fkuehne/InAppSettingsKit.git', :commit => '415ea6bb' #tvOS fix
pod 'upnpx', '~>1.4.0'
pod 'HockeySDK', '~>4.1.6', :subspecs => ['CrashOnlyLib']
pod 'XKKeychain', '~>1.0'
pod 'box-ios-sdk-v2', :git => 'git://github.com/fkuehne/box-ios-sdk-v2.git' #has a logout function added
pod 'CocoaHTTPServer', :git => 'git://github.com/fkuehne/CocoaHTTPServer.git' # has our fixes
pod 'RESideMenu', '~>4.0.7'
pod 'PAPasscode', '~>1.0'
pod 'GoogleAPIClient/Drive'
pod 'VLC-LXReorderableCollectionViewFlowLayout', '0.1.3v'
pod 'VLC-WhiteRaccoon'
pod 'VLC-LiveSDK', '5.7.0x'
pod 'MediaLibraryKit-unstable'
pod 'MobileVLCKit-unstable', '3.0.0a56'
pod 'GTMAppAuth'
pod 'ObjectiveDropboxOfficial', :git => 'git://github.com/carolanitz/dropbox-sdk-obj-c.git' #update ios platform version
def iOS_pods
pod 'OBSlider', '1.1.0'
pod 'InAppSettingsKit', :git => 'git://github.com/fkuehne/InAppSettingsKit.git', :commit => '415ea6bb' #tvOS fix
pod 'HockeySDK', '~>5.1.4', :subspecs => ['CrashOnlyLib']
pod 'RESideMenu', '~>4.0.7'
pod 'PAPasscode', '~>1.0'
pod 'GoogleAPIClient/Drive'
pod 'VLC-LXReorderableCollectionViewFlowLayout', '0.1.3v'
pod 'MediaLibraryKit-prod'
pod 'MobileVLCKit', '3.1.5'
pod 'GTMAppAuth'
end
target 'VLC-iOS-no-watch' do
platform :ios, '9.0'
target 'VLC-iOS' do
platform :ios, '9.0'
shared_pods
iOS_pods
end
pod 'OBSlider', '1.1.0'
pod 'InAppSettingsKit', :git => 'git://github.com/fkuehne/InAppSettingsKit.git', :commit => '415ea6bb' #tvOS fix
pod 'upnpx', '~>1.4.0'
pod 'HockeySDK', '~>4.1.6', :subspecs => ['CrashOnlyLib']
pod 'XKKeychain', '~>1.0'
pod 'box-ios-sdk-v2', :git => 'git://github.com/fkuehne/box-ios-sdk-v2.git' #has a logout function added
pod 'CocoaHTTPServer', :git => 'git://github.com/fkuehne/CocoaHTTPServer.git' # has our fixes
pod 'RESideMenu', '~>4.0.7'
pod 'PAPasscode', '~>1.0'
pod 'GoogleAPIClient/Drive'
pod 'VLC-LXReorderableCollectionViewFlowLayout', '0.1.3v'
pod 'VLC-WhiteRaccoon'
pod 'VLC-LiveSDK', '5.7.0x'
pod 'MediaLibraryKit-unstable'
pod 'MobileVLCKit-unstable', '3.0.0a56'
pod 'ObjectiveDropboxOfficial', :git => 'git://github.com/carolanitz/dropbox-sdk-obj-c.git' #update ios platform version
pod 'GTMAppAuth'
target 'VLC-iOS-no-watch' do
platform :ios, '9.0'
shared_pods
iOS_pods
end
target 'VLC-tvOS' do
platform :tvos, '10.2'
pod 'XKKeychain', '~>1.0'
pod 'box-ios-sdk-v2', :git => 'git://github.com/fkuehne/box-ios-sdk-v2.git' #has tvOS support added
pod 'upnpx', '~>1.4.0'
pod 'CocoaHTTPServer', :git => 'git://github.com/fkuehne/CocoaHTTPServer.git' # has our fixes
pod 'MetaDataFetcherKit', '~>0.1.8'
pod "OROpenSubtitleDownloader", :git => 'https://github.com/orta/OROpenSubtitleDownloader.git', :commit => '0509eac2'
pod 'GRKArrayDiff', '~> 2.1'
pod 'VLC-WhiteRaccoon'
pod 'VLC-LiveSDK', '5.7.0x'
pod 'ObjectiveDropboxOfficial', :git => 'git://github.com/carolanitz/dropbox-sdk-obj-c.git' #update ios platform version
pod 'HockeySDK-tvOS', '~>5.0.0'
pod 'TVVLCKit-unstable', '3.0.0a56'
platform :tvos, '10.2'
shared_pods
pod 'MetaDataFetcherKit', '~>0.3.1'
pod "OROpenSubtitleDownloader", :git => 'https://github.com/orta/OROpenSubtitleDownloader.git', :commit => '0509eac2'
pod 'GRKArrayDiff', '~> 2.1'
pod 'HockeySDK-tvOS', '~>5.1.0'
pod 'TVVLCKit', '3.1.5'
end
target 'VLC-watchOS-Extension' do
platform :watchos, '2.0'
pod 'MediaLibraryKit-unstable'
platform :watchos, '2.0'
pod 'MediaLibraryKit-unstable'
end
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
if target.name == 'VLC-watchOS-Extension'
installer_representation.pods_project.build_configurations.each do |config|
config.build_settings['SKIP_INSTALL'] = 'YES'
config.build_settings['CLANG_CXX_LIBRARY'] = 'libc++'
config.build_settings['VALID_ARCHS'] = 'armv7 armv7s arm64 i386 armv7k'
config.build_settings['ARCHS'] = 'armv7 armv7s arm64 i386 armv7k'
end
else
installer_representation.pods_project.build_configurations.each do |config|
config.build_settings['SKIP_INSTALL'] = 'YES'
config.build_settings['VALID_ARCHS'] = 'armv7 armv7s arm64 i386 armv7k'
config.build_settings['ARCHS'] = 'armv7 armv7s arm64 i386 armv7k'
config.build_settings['CLANG_CXX_LIBRARY'] = 'libc++'
end
installer_representation.pods_project.build_configurations.each do |config|
config.build_settings['SKIP_INSTALL'] = 'YES'
config.build_settings['CLANG_CXX_LIBRARY'] = 'libc++'
config.build_settings['VALID_ARCHS'] = 'armv7 armv7s arm64 i386 armv7k'
config.build_settings['ARCHS'] = 'armv7 armv7s arm64 i386 armv7k'
end
else
installer_representation.pods_project.build_configurations.each do |config|
config.build_settings['SKIP_INSTALL'] = 'YES'
config.build_settings['VALID_ARCHS'] = 'armv7 armv7s arm64 i386 armv7k'
config.build_settings['ARCHS'] = 'armv7 armv7s arm64 i386 armv7k'
config.build_settings['CLANG_CXX_LIBRARY'] = 'libc++'
end
end
end
end
......@@ -24,25 +24,27 @@ PODS:
- GoogleAPIClient/Drive (1.0.5):
- GoogleAPIClient/Core
- GTMSessionFetcher (~> 1.1)
- GRKArrayDiff (2.1)
- GRKArrayDiff (2.2.1)
- GTMAppAuth (0.7.0):
- AppAuth (~> 0.92.0)
- GTMSessionFetcher (~> 1.1)
- GTMSessionFetcher (1.1.13):
- GTMSessionFetcher/Full (= 1.1.13)
- GTMSessionFetcher/Core (1.1.13)
- GTMSessionFetcher/Full (1.1.13):
- GTMSessionFetcher/Core (= 1.1.13)
- HockeySDK-tvOS (5.0.0)
- HockeySDK/CrashOnlyLib (4.1.6)
- GTMSessionFetcher (1.2.0):
- GTMSessionFetcher/Full (= 1.2.0)
- GTMSessionFetcher/Core (1.2.0)
- GTMSessionFetcher/Full (1.2.0):
- GTMSessionFetcher/Core (= 1.2.0)
- HockeySDK-tvOS (5.1.0)
- HockeySDK/CrashOnlyLib (5.1.4)
- InAppSettingsKit (2.2.2)
- MediaLibraryKit-prod (2.6.6):
- MobileVLCKit (~> 3.1.0)
- MediaLibraryKit-unstable (2.6.5):
- MobileVLCKit-unstable (~> 3.0.0a8)
- MetaDataFetcherKit (0.1.8):
- MetaDataFetcherKit (0.3.1):
- AFNetworking (= 3.1.0)
- OROpenSubtitleDownloader
- MobileVLCKit-unstable (3.0.0a56)
- NSData+Base64 (1.0.0)
- MobileVLCKit (3.1.5)
- "NSData+Base64 (1.0.0)"
- ObjectiveDropboxOfficial (1.1)
- OBSlider (1.1.0)
- OROpenSubtitleDownloader (1.2.0):
......@@ -50,14 +52,14 @@ PODS:
- xmlrpc
- PAPasscode (1.0)
- RESideMenu (4.0.7)
- TVVLCKit-unstable (3.0.0a56)
- TVVLCKit (3.1.5)
- upnpx (1.4.0)
- VLC-LiveSDK (5.7.0x)
- VLC-LXReorderableCollectionViewFlowLayout (0.1.3v)
- VLC-WhiteRaccoon (1.0.0)
- XKKeychain (1.0.1)
- xmlrpc (2.3.4):
- NSData+Base64 (~> 1.0.0)
- "NSData+Base64 (~> 1.0.0)"
DEPENDENCIES:
- box-ios-sdk-v2 (from `git://github.com/fkuehne/box-ios-sdk-v2.git`)
......@@ -65,24 +67,51 @@ DEPENDENCIES:
- GoogleAPIClient/Drive
- GRKArrayDiff (~> 2.1)
- GTMAppAuth
- HockeySDK-tvOS (~> 5.0.0)
- HockeySDK/CrashOnlyLib (~> 4.1.6)
- HockeySDK-tvOS (~> 5.1.0)
- HockeySDK/CrashOnlyLib (~> 5.1.4)
- InAppSettingsKit (from `git://github.com/fkuehne/InAppSettingsKit.git`, commit `415ea6bb`)
- MediaLibraryKit-prod
- MediaLibraryKit-unstable
- MetaDataFetcherKit (~> 0.1.8)
- MobileVLCKit-unstable (= 3.0.0a56)
- MetaDataFetcherKit (~> 0.3.1)
- MobileVLCKit (= 3.1.5)
- ObjectiveDropboxOfficial (from `git://github.com/carolanitz/dropbox-sdk-obj-c.git`)
- OBSlider (= 1.1.0)
- OROpenSubtitleDownloader (from `https://github.com/orta/OROpenSubtitleDownloader.git`, commit `0509eac2`)
- PAPasscode (~> 1.0)
- RESideMenu (~> 4.0.7)
- TVVLCKit-unstable (= 3.0.0a56)
- TVVLCKit (= 3.1.5)
- upnpx (~> 1.4.0)
- VLC-LiveSDK (= 5.7.0x)
- VLC-LXReorderableCollectionViewFlowLayout (= 0.1.3v)
- VLC-WhiteRaccoon
- XKKeychain (~> 1.0)
SPEC REPOS:
https://github.com/cocoapods/specs.git:
- AFNetworking
- AppAuth
- GoogleAPIClient
- GRKArrayDiff
- GTMAppAuth
- GTMSessionFetcher
- HockeySDK
- HockeySDK-tvOS
- MediaLibraryKit-prod
- MediaLibraryKit-unstable
- MetaDataFetcherKit
- MobileVLCKit
- "NSData+Base64"
- OBSlider
- PAPasscode
- RESideMenu
- TVVLCKit
- upnpx
- VLC-LiveSDK
- VLC-LXReorderableCollectionViewFlowLayout
- VLC-WhiteRaccoon
- XKKeychain
- xmlrpc
EXTERNAL SOURCES:
box-ios-sdk-v2:
:git: git://github.com/fkuehne/box-ios-sdk-v2.git
......@@ -120,22 +149,23 @@ SPEC CHECKSUMS:
box-ios-sdk-v2: 9423bd75373350ea40b92f3d2d6e89f81d96d634
CocoaHTTPServer: 07df8b05a8bde406fe367d22c90a24a2fd4ca49f
GoogleAPIClient: 77df755d41d70ee5a99b7b752614fbb439f19438
GRKArrayDiff: cf743e6b30f6b72a3763e1f16cc5d9da39af86a5
GRKArrayDiff: 7522e374edcc55c1731a219e428847164b04cfab
GTMAppAuth: 8d724be29ab8f2f6d35b2bf929d76340c9d1f1b1
GTMSessionFetcher: 5bb1eae636127de695590f50e7d248483eb891e6
HockeySDK: 95db557d54489a570dcdefae0d02f98eecc279a3
HockeySDK-tvOS: 6b2a69f86419ebaf23225f59a64e5761ed3a0d8a
GTMSessionFetcher: 0c4baf0a73acd0041bf9f71ea018deedab5ea84e
HockeySDK: 15afe6bc0a5bfe3a531fd73dbf082095f37dac3b
HockeySDK-tvOS: 62e86233bfa7356c5ac5cd946816d1ca0e9033f6
InAppSettingsKit: 76d5cfbaa3e3f8aa53fe3628516da7eb1aa6a5cb
MediaLibraryKit-prod: 87d856c2f5cc46da9596e5da57c97190f6216682
MediaLibraryKit-unstable: aaf147005a2e024ed2f4c45440bfcc19225ca776
MetaDataFetcherKit: 44c90defa89b3a72cef60e07ad9de37821dd7c5d
MobileVLCKit-unstable: 970a43f97af623c4c1d0b9fb4f0d56ac48b21f2c
NSData+Base64: 4e84902c4db907a15673474677e57763ef3903e4
MetaDataFetcherKit: d1d61b061bf74268aaffb6bf08a70396672163df
MobileVLCKit: 4d44e56380d0ee41c76f9ec7015d3a4b62a963a3
"NSData+Base64": 4e84902c4db907a15673474677e57763ef3903e4
ObjectiveDropboxOfficial: e11cdf40e8965a6c24c6d6ff64905f2df43ab653
OBSlider: 490f108007bfdd5414a38650b211fe403a95b8a0
OROpenSubtitleDownloader: 154b8c08acbf8836b77ac259018dc8b5baef907e
PAPasscode: b408fb87c530cad58a554e26482e87dbb14b7bc2
RESideMenu: f24c508404b49c667344c54aba7e590883533958
TVVLCKit-unstable: cee6dd81fbb0af080dc439dd9859db51869fd2f1
TVVLCKit: 3449ff8cbf37946c53aa6240788842657456fc6e
upnpx: c695b99229e08154d23abe5c252cb64f1600f35d
VLC-LiveSDK: c9566a9edde968f969138f84cfd40b540a109b3f
VLC-LXReorderableCollectionViewFlowLayout: 0204946967b746ca183835e854826290be06e2f4
......@@ -143,6 +173,6 @@ SPEC CHECKSUMS:
XKKeychain: 852ef663c56a7194c73d3c68e8d9d4f07b121d4f
xmlrpc: 109bb21d15ed6d108b2c1ac5973a6a223a50f5f4
PODFILE CHECKSUM: e03f45114ee07cf57464697d7158e798adc5e3dc
PODFILE CHECKSUM: 1fd603142c46d3c4fbe3109f7a1f53352883ae98
COCOAPODS: 1.3.1
COCOAPODS: 1.5.3
# VLC iOS
# VLC for iOS & tvOS
The best open source player ported to iOS!
This repository has the source code of VLC for iOS and tvOS application.
This repository has the source code of the iOS/AppleTV application and mostly the interface.
It's currently written in Objective-C / Swift and uses [VLCKit](https://code.videolan.org/videolan/VLCKit), a libvlc wrapper.
It's currently written in Obj-C and uses libVLC for the playback.
- [Requirements](#requirements)
- [Building](#building)
- [VLC-iOS](#vlc-ios)
- [Custom VLCKit](#custom-vlckit)
- [Contribute](#contribute)
- [Communication](#communication)
- [Forum](#forum)
- [Issues](#issues)
- [IRC](#irc)
- [Code of Conduct](#code-of-conduct)
- [License](#license)
- [More](#more)
It's completely open source.
## Requirements
* Xcode 9.0+
* macOS 10.12+
* Cocoapods 1.4+
# How to start development for VLC for iOS:
## Building
### VLC-iOS
1. Run `pod install`.
2. Open `VLC.xcworkspace`.
3. Hit "Build and Run".
### Custom VLCkit
Mostly for debugging or advanced users, you might want to have a custom local VLCKit build.
1. Clone VLCKit:
`git clone https://code.videolan.org/videolan/VLCKit.git`
2. Inside the VLCKit folder, run the following command:
`./buildMobileVLCKit.sh -a ${MYARCH}`
## Requirements
* Xcode 7.0 or later
* OS X 10.10 or later
* Command Line Tools package: https://developer.apple.com/downloads/
* Cocoapods 1.0 or later
## Let's compile!
1. Run ```pod update```
2. Open `VLC for iOS.xcworkspace`.
3. Change `BUNDLE_IDENTIFIER_PREFIX` in `SharedConfig.xcconfig` to your domain name in reverse DNS style.
4. Hit "Build and Run".
## Compile with your own VLCKit build
1. Clone a VLCKit repository: `git clone https://code.videolan.org/videolan/VLCKit.git`
2. Inside the VLCKit folder, run the following command: `./buildMobileVLCKit.sh -a ${MYARCH}`
MYARCH can be `i386` `x86_64` `armv7` `armv7s` or `aarch64`.