summaryrefslogtreecommitdiffstats
path: root/macosx
diff options
context:
space:
mode:
authorDamiano Galassi <[email protected]>2017-01-25 11:03:00 +0100
committerDamiano Galassi <[email protected]>2017-01-25 11:03:00 +0100
commit178071e0ce842af53e8c51e6275e8956fc4aa27c (patch)
tree6337430f7ec1900ce562bf394954469cc68b80d2 /macosx
parent79c33c0ca996311224bbd3719c85238a3358cb5e (diff)
MacGui: improve management of security scoped resources. Fix external SRT in the sandboxed build.
Diffstat (limited to 'macosx')
-rw-r--r--macosx/HBAudio.m2
-rw-r--r--macosx/HBCodingUtilities.h3
-rw-r--r--macosx/HBCore.m14
-rw-r--r--macosx/HBJob+Private.h6
-rw-r--r--macosx/HBJob.h8
-rw-r--r--macosx/HBJob.m97
-rw-r--r--macosx/HBSecurityAccessToken.h35
-rw-r--r--macosx/HBSecurityAccessToken.m42
-rw-r--r--macosx/HBSubtitles.m87
-rw-r--r--macosx/HBSubtitlesTrack.m1
-rw-r--r--macosx/HBUtilities.h1
-rw-r--r--macosx/HBUtilities.m9
-rw-r--r--macosx/HandBrake.xcodeproj/project.pbxproj8
13 files changed, 219 insertions, 94 deletions
diff --git a/macosx/HBAudio.m b/macosx/HBAudio.m
index be7df2465..410749427 100644
--- a/macosx/HBAudio.m
+++ b/macosx/HBAudio.m
@@ -7,7 +7,7 @@
#import "HBAudio.h"
#import "HBJob.h"
-#import "HBJob+HBJobConversion.m"
+#import "HBJob+HBJobConversion.h"
#import "HBTitle.h"
#import "HBAudioTrack.h"
#import "HBAudioTrackPreset.h"
diff --git a/macosx/HBCodingUtilities.h b/macosx/HBCodingUtilities.h
index 17d188b7f..cc92f9b6e 100644
--- a/macosx/HBCodingUtilities.h
+++ b/macosx/HBCodingUtilities.h
@@ -23,6 +23,9 @@
#define decodeCollectionOfObjects2(x, cl, objectcl, objectcl2) x = [HBCodingUtilities decodeObjectOfClasses:[NSSet setWithObjects:[cl class], [objectcl class], [objectcl2 class], nil] forKey:OBJC_STRINGIFY(x) decoder:decoder];
+#define decodeCollectionOfObjects3(x, cl, objectcl, objectcl2, objectcl3) x = [HBCodingUtilities decodeObjectOfClasses:[NSSet setWithObjects:[cl class], [objectcl class], [objectcl2 class], [objectcl3 class], nil] forKey:OBJC_STRINGIFY(x) decoder:decoder];
+
+
#define decodeObjectOrFail(x, class) x = [HBCodingUtilities decodeObjectOfClass:class forKey:OBJC_STRINGIFY(x) decoder:decoder]; if (x == nil) {NSLog(@"Failed to decode: %@", OBJC_STRINGIFY(x)); goto fail;}
NS_ASSUME_NONNULL_BEGIN
diff --git a/macosx/HBCore.m b/macosx/HBCore.m
index dbce136f6..7e9024b47 100644
--- a/macosx/HBCore.m
+++ b/macosx/HBCore.m
@@ -12,6 +12,7 @@
#import "HBStateFormatter+Private.h"
#import "HBTitle+Private.h"
+#import "HBJob+Private.h"
#include <dlfcn.h>
@@ -243,13 +244,8 @@ typedef void (^HBCoreCleanupHandler)();
NSAssert(url, @"[HBCore scanURL:] called with nil url.");
#ifdef __SANDBOX_ENABLED__
- BOOL accessingSecurityScopedResource = [url startAccessingSecurityScopedResource];
- self.cleanupHandler = ^{
- if (accessingSecurityScopedResource)
- {
- [url stopAccessingSecurityScopedResource];
- }
- };
+ __block HBSecurityAccessToken *token = [HBSecurityAccessToken tokenWithObject:url];
+ self.cleanupHandler = ^{ token = nil; };
#endif
// Reset the titles array
@@ -509,8 +505,8 @@ typedef void (^HBCoreCleanupHandler)();
#ifdef __SANDBOX_ENABLED__
HBJob *jobCopy = [job copy];
- [jobCopy startAccessingSecurityScopedResource];
- self.cleanupHandler = ^{ [jobCopy stopAccessingSecurityScopedResource]; };
+ __block HBSecurityAccessToken *token = [HBSecurityAccessToken tokenWithObject:jobCopy];
+ self.cleanupHandler = ^{ token = nil; };
#endif
// Add the job to libhb
diff --git a/macosx/HBJob+Private.h b/macosx/HBJob+Private.h
index 2479516e6..839267253 100644
--- a/macosx/HBJob+Private.h
+++ b/macosx/HBJob+Private.h
@@ -7,6 +7,10 @@
//
#import <HandBrakeKit/HandBrakeKit.h>
+#import "HBSecurityAccessToken.h"
+
+@interface HBJob (Private) <HBSecurityScope>
+@end
@interface HBVideo (Private)
@@ -44,7 +48,7 @@
@end
-@interface HBSubtitles (Private)
+@interface HBSubtitles (Private) <HBSecurityScope>
- (instancetype)initWithJob:(HBJob *)job;
diff --git a/macosx/HBJob.h b/macosx/HBJob.h
index ff4af8d09..66a42ccec 100644
--- a/macosx/HBJob.h
+++ b/macosx/HBJob.h
@@ -86,14 +86,6 @@ typedef NS_ENUM(NSUInteger, HBJobState){
@property (nonatomic, readwrite, weak, nullable) NSUndoManager *undo;
-/* Given a HBJob created by NSSecureCoding, make the resource referenced by the job accessible to the process.
- */
-- (BOOL)startAccessingSecurityScopedResource;
-
-/* Revokes the access granted to the url by a prior successful call to startAccessingSecurityScopedResource.
- */
-- (void)stopAccessingSecurityScopedResource;
-
@end
NS_ASSUME_NONNULL_END
diff --git a/macosx/HBJob.m b/macosx/HBJob.m
index 3eac48e3d..725036377 100644
--- a/macosx/HBJob.m
+++ b/macosx/HBJob.m
@@ -10,9 +10,11 @@
#import "HBAudioDefaults.h"
#import "HBSubtitlesDefaults.h"
+#import "HBMutablePreset.h"
#import "HBCodingUtilities.h"
-#import "HBMutablePreset.h"
+#import "HBUtilities.h"
+#import "HBSecurityAccessToken.h"
#include "hb.h"
@@ -31,12 +33,12 @@ NSString *HBChaptersChangedNotification = @"HBChaptersChangedNotification";
@property (nonatomic, readwrite) NSData *outputURLFolderBookmark;
/**
- Keep track of startAccessingSecurityScopedResource return value
- to avoid calling stopAccessingSecurityScopedResource when unnecessary
- and stopping another instance from accessing the url.
+ Keep track of security scoped resources status.
*/
-@property (nonatomic, readwrite) BOOL accessingSecurityScopedFileURL;
-@property (nonatomic, readwrite) BOOL accessingSecurityScopedOutputURL;
+@property (nonatomic, readwrite) HBSecurityAccessToken *fileURLToken;
+@property (nonatomic, readwrite) HBSecurityAccessToken *outputURLToken;
+@property (nonatomic, readwrite) HBSecurityAccessToken *subtitlesToken;
+@property (nonatomic, readwrite) NSInteger *accessCount;
@end
@@ -230,16 +232,14 @@ NSString *HBChaptersChangedNotification = @"HBChaptersChangedNotification";
- (BOOL)startAccessingSecurityScopedResource
{
#ifdef __SANDBOX_ENABLED__
- if (!self.accessingSecurityScopedFileURL)
+ if (self.accessCount == 0)
{
- self.accessingSecurityScopedFileURL = [self.fileURL startAccessingSecurityScopedResource];
+ self.fileURLToken = [HBSecurityAccessToken tokenWithObject:self.fileURL];
+ self.outputURLToken = [HBSecurityAccessToken tokenWithObject:self.outputURL];
+ self.subtitlesToken = [HBSecurityAccessToken tokenWithObject:self.subtitles];
}
- if (!self.accessingSecurityScopedOutputURL)
- {
- self.accessingSecurityScopedOutputURL = [self.outputURL startAccessingSecurityScopedResource];
- }
-
- return self.accessingSecurityScopedFileURL || self.accessingSecurityScopedOutputURL;
+ self.accessCount += 1;
+ return YES;
#else
return NO;
#endif
@@ -248,13 +248,13 @@ NSString *HBChaptersChangedNotification = @"HBChaptersChangedNotification";
- (void)stopAccessingSecurityScopedResource
{
#ifdef __SANDBOX_ENABLED__
- if (self.accessingSecurityScopedFileURL)
- {
- [self.fileURL stopAccessingSecurityScopedResource];
- }
- if (self.accessingSecurityScopedOutputURL)
+ self.accessCount -= 1;
+ NSAssert(self.accessCount >= 0, @"[HBJob stopAccessingSecurityScopedResource:] unbalanced call");
+ if (self.accessCount == 0)
{
- [self.outputURL stopAccessingSecurityScopedResource];
+ self.fileURLToken = nil;
+ self.outputURLToken = nil;
+ self.subtitlesToken = nil;
}
#endif
}
@@ -322,41 +322,20 @@ NSString *HBChaptersChangedNotification = @"HBChaptersChangedNotification";
encodeObject(_uuid);
#ifdef __SANDBOX_ENABLED__
- NSError *error = nil;
-
if (!_fileURLBookmark)
{
- _fileURLBookmark = [_fileURL bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope|NSURLBookmarkCreationSecurityScopeAllowOnlyReadAccess
- includingResourceValuesForKeys:nil
- relativeToURL:nil
- error:&error];
-
- if (error)
- {
- NSLog(@"Error creating bookmark for URL (%@): %@", _fileURL, error);
- }
+ _fileURLBookmark = [HBUtilities bookmarkFromURL:_fileURL
+ options:NSURLBookmarkCreationWithSecurityScope |
+ NSURLBookmarkCreationSecurityScopeAllowOnlyReadAccess];
}
encodeObject(_fileURLBookmark);
if (!_outputURLFolderBookmark)
{
- BOOL accessed = [_outputURL startAccessingSecurityScopedResource];
-
- _outputURLFolderBookmark = [_outputURL bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
- includingResourceValuesForKeys:nil
- relativeToURL:nil
- error:&error];
-
-
- if (error)
- {
- NSLog(@"Error creating bookmark for URL (%@): %@", _outputURL, error);
- }
- if (accessed)
- {
- [_outputURL stopAccessingSecurityScopedResource];
- }
+ __attribute__((unused)) HBSecurityAccessToken *token = [HBSecurityAccessToken tokenWithObject:_outputURL];
+ _outputURLFolderBookmark = [HBUtilities bookmarkFromURL:_outputURL];
+ token = nil;
}
encodeObject(_outputURLFolderBookmark);
@@ -397,22 +376,11 @@ NSString *HBChaptersChangedNotification = @"HBChaptersChangedNotification";
decodeObject(_uuid, NSString);
#ifdef __SANDBOX_ENABLED__
- NSError *error;
-
_fileURLBookmark = [HBCodingUtilities decodeObjectOfClass:[NSData class] forKey:@"_fileURLBookmark" decoder:decoder];
if (_fileURLBookmark)
{
- BOOL bookmarkDataIsStale;
- _fileURL = [NSURL URLByResolvingBookmarkData:_fileURLBookmark
- options:NSURLBookmarkResolutionWithSecurityScope
- relativeToURL:nil
- bookmarkDataIsStale:&bookmarkDataIsStale
- error:&error];
- if (error)
- {
- NSLog(@"Error creating URL from bookmark (%@): %@", _outputURL, error);
- }
+ _fileURL = [HBUtilities URLFromBookmark:_fileURLBookmark];
}
else
{
@@ -423,16 +391,7 @@ NSString *HBChaptersChangedNotification = @"HBChaptersChangedNotification";
if (_outputURLFolderBookmark)
{
- BOOL bookmarkDataIsStale;
- _outputURL = [NSURL URLByResolvingBookmarkData:_outputURLFolderBookmark
- options:NSURLBookmarkResolutionWithSecurityScope
- relativeToURL:nil
- bookmarkDataIsStale:&bookmarkDataIsStale
- error:&error];
- if (error)
- {
- NSLog(@"Error creating URL from bookmark (%@): %@", _outputURL, error);
- }
+ _outputURL = [HBUtilities URLFromBookmark:_outputURLFolderBookmark];
}
else
{
diff --git a/macosx/HBSecurityAccessToken.h b/macosx/HBSecurityAccessToken.h
new file mode 100644
index 000000000..1ad0b3979
--- /dev/null
+++ b/macosx/HBSecurityAccessToken.h
@@ -0,0 +1,35 @@
+//
+// HBSecurityAccessToken.h
+// HandBrake
+//
+// Created by Damiano Galassi on 24/01/17.
+//
+//
+
+#import <Foundation/Foundation.h>
+
+@protocol HBSecurityScope <NSObject>
+
+/* Given an instance, make the resource referenced by the job accessible to the process.
+ */
+- (BOOL)startAccessingSecurityScopedResource;
+
+/* Revokes the access granted to the url by a prior successful call to startAccessingSecurityScopedResource.
+ */
+- (void)stopAccessingSecurityScopedResource;
+
+@end
+
+@interface NSURL (HBSecurityScope) <HBSecurityScope>
+
+- (BOOL)startAccessingSecurityScopedResource;
+- (void)stopAccessingSecurityScopedResource;
+
+@end
+
+@interface HBSecurityAccessToken : NSObject
+
++ (instancetype)tokenWithObject:(id<HBSecurityScope>)object;
+- (instancetype)initWithObject:(id<HBSecurityScope>)object;
+
+@end
diff --git a/macosx/HBSecurityAccessToken.m b/macosx/HBSecurityAccessToken.m
new file mode 100644
index 000000000..027f66920
--- /dev/null
+++ b/macosx/HBSecurityAccessToken.m
@@ -0,0 +1,42 @@
+//
+// HBSecurityAccessToken.m
+// HandBrake
+//
+// Created by Damiano Galassi on 24/01/17.
+//
+//
+
+#import "HBSecurityAccessToken.h"
+
+@interface HBSecurityAccessToken ()
+@property (nonatomic, readonly) id<HBSecurityScope> object;
+@property (nonatomic, readonly) BOOL accessed;
+@end
+
+@implementation HBSecurityAccessToken
+
+- (instancetype)initWithObject:(id<HBSecurityScope>)object;
+{
+ self = [super init];
+ if (self)
+ {
+ _object = object;
+ _accessed = [_object startAccessingSecurityScopedResource];
+ }
+ return self;
+}
+
++ (instancetype)tokenWithObject:(id<HBSecurityScope>)object
+{
+ return [[self alloc] initWithObject:object];
+}
+
+- (void)dealloc
+{
+ if (_accessed)
+ {
+ [_object stopAccessingSecurityScopedResource];
+ }
+}
+
+@end
diff --git a/macosx/HBSubtitles.m b/macosx/HBSubtitles.m
index c98f9fcec..7a0ca3828 100644
--- a/macosx/HBSubtitles.m
+++ b/macosx/HBSubtitles.m
@@ -13,7 +13,9 @@
#import "HBJob+HBJobConversion.h"
#import "HBTitle.h"
#import "HBCodingUtilities.h"
+#import "HBUtilities.h"
#import "HBJob+Private.h"
+#import "HBSecurityAccessToken.h"
#include "common.h"
@@ -22,6 +24,7 @@ extern NSString *keySubTrackLanguageIsoCode;
extern NSString *keySubTrackType;
extern NSString *keySubTrackSrtFileURL;
+extern NSString *keySubTrackSrtFileURLBookmark;
#define NONE_TRACK_INDEX 0
#define FOREIGN_TRACK_INDEX 1
@@ -30,6 +33,9 @@ extern NSString *keySubTrackSrtFileURL;
@property (nonatomic, readwrite) NSArray<NSDictionary *> *sourceTracks;
+@property (nonatomic, readonly) NSMutableArray<HBSecurityAccessToken *> *tokens;
+@property (nonatomic, readwrite) NSInteger *accessCount;
+
@property (nonatomic, readwrite, weak) HBJob *job;
@property (nonatomic, readwrite) int container;
@@ -50,6 +56,7 @@ extern NSString *keySubTrackSrtFileURL;
_tracks = [[NSMutableArray alloc] init];
_defaults = [[HBSubtitlesDefaults alloc] init];
+ _tokens = [NSMutableArray array];
NSMutableArray *sourceTracks = [job.title.subtitlesTracks mutableCopy];
@@ -215,12 +222,26 @@ extern NSString *keySubTrackSrtFileURL;
- (void)addSrtTrackFromURL:(NSURL *)srtURL
{
+#ifdef __SANDBOX_ENABLED__
+ // Create the security scoped bookmark
+ NSData *bookmark = [HBUtilities bookmarkFromURL:srtURL
+ options:NSURLBookmarkCreationWithSecurityScope |
+ NSURLBookmarkCreationSecurityScopeAllowOnlyReadAccess];
+#endif
+
// Create a new entry for the subtitle source array so it shows up in our subtitle source list
NSMutableArray *sourceTrack = [self.sourceTracks mutableCopy];
+#ifdef __SANDBOX_ENABLED__
[sourceTrack addObject:@{keySubTrackName: srtURL.lastPathComponent,
- keySubTrackType: @(SRTSUB),
- keySubTrackSrtFileURL: srtURL}];
- self.sourceTracks = sourceTrack;
+ keySubTrackType: @(SRTSUB),
+ keySubTrackSrtFileURL: srtURL,
+ keySubTrackSrtFileURLBookmark: bookmark}];
+#else
+ [sourceTrack addObject:@{keySubTrackName: srtURL.lastPathComponent,
+ keySubTrackType: @(SRTSUB),
+ keySubTrackSrtFileURL: srtURL}];
+#endif
+ self.sourceTracks = [sourceTrack copy];
HBSubtitlesTrack *track = [self trackFromSourceTrackIndex:self.sourceTracksArray.count - 1];
[self insertObject:track inTracksAtIndex:[self countOfTracks] - 1];
}
@@ -396,6 +417,38 @@ extern NSString *keySubTrackSrtFileURL;
}];
}
+- (BOOL)startAccessingSecurityScopedResource
+{
+#ifdef __SANDBOX_ENABLED__
+ if (self.accessCount == 0)
+ {
+ for (NSDictionary *sourceTrack in self.sourceTracks)
+ {
+ if (sourceTrack[keySubTrackSrtFileURLBookmark])
+ {
+ [self.tokens addObject:[HBSecurityAccessToken tokenWithObject:sourceTrack[keySubTrackSrtFileURL]]];
+ }
+ }
+ }
+ self.accessCount += 1;
+ return YES;
+#else
+ return NO;
+#endif
+}
+
+- (void)stopAccessingSecurityScopedResource
+{
+#ifdef __SANDBOX_ENABLED__
+ self.accessCount -= 1;
+ NSAssert(self.accessCount >= 0, @"[HBSubtitles stopAccessingSecurityScopedResource:] unbalanced call");
+ if (self.accessCount == 0)
+ {
+ [self.tokens removeAllObjects];
+ }
+#endif
+}
+
#pragma mark - NSCopying
- (instancetype)copyWithZone:(NSZone *)zone
@@ -419,6 +472,7 @@ extern NSString *keySubTrackSrtFileURL;
}
copy->_defaults = [_defaults copy];
+ copy->_tokens = [NSMutableArray array];
}
return copy;
@@ -445,8 +499,33 @@ extern NSString *keySubTrackSrtFileURL;
{
self = [super init];
+ _tokens = [NSMutableArray array];
+
decodeInt(_container);
- decodeCollectionOfObjects2(_sourceTracks, NSArray, NSDictionary, NSURL);
+ decodeCollectionOfObjects3(_sourceTracks, NSArray, NSDictionary, NSURL, NSData);
+
+#ifdef __SANDBOX_ENABLED__
+ NSMutableArray *sourceTracks = [_sourceTracks mutableCopy];
+ for (NSDictionary *sourceTrack in _sourceTracks)
+ {
+ if (sourceTrack[keySubTrackSrtFileURLBookmark])
+ {
+ NSMutableDictionary<NSString *, id> *copy = [sourceTrack mutableCopy];
+ NSURL *srtURL = [HBUtilities URLFromBookmark:sourceTrack[keySubTrackSrtFileURLBookmark]];
+ if (srtURL)
+ {
+ copy[keySubTrackSrtFileURL] = srtURL;
+ }
+ [sourceTracks addObject:copy];
+ }
+ else
+ {
+ [sourceTracks addObject:sourceTrack];
+ }
+ }
+ _sourceTracks = [sourceTracks copy];
+#endif
+
decodeCollectionOfObjects(_tracks, NSMutableArray, HBSubtitlesTrack);
for (HBSubtitlesTrack *track in _tracks)
diff --git a/macosx/HBSubtitlesTrack.m b/macosx/HBSubtitlesTrack.m
index bcff453fa..f87a7be5b 100644
--- a/macosx/HBSubtitlesTrack.m
+++ b/macosx/HBSubtitlesTrack.m
@@ -19,6 +19,7 @@ NSString *keySubTrackName = @"keySubTrackName";
NSString *keySubTrackLanguageIsoCode = @"keySubTrackLanguageIsoCode";
NSString *keySubTrackType = @"keySubTrackType";
NSString *keySubTrackSrtFileURL = @"keySubTrackSrtFileURL";
+NSString *keySubTrackSrtFileURLBookmark = @"keySubTrackSrtFileURLBookmark";
@interface HBSubtitlesTrack ()
@property (nonatomic, readwrite) BOOL validating;
diff --git a/macosx/HBUtilities.h b/macosx/HBUtilities.h
index c7f195b1f..1807cdca8 100644
--- a/macosx/HBUtilities.h
+++ b/macosx/HBUtilities.h
@@ -32,6 +32,7 @@ NS_ASSUME_NONNULL_BEGIN
+ (nullable NSURL *)URLFromBookmark:(NSData *)bookmark;
+ (nullable NSData *)bookmarkFromURL:(NSURL *)url;
++ (nullable NSData *)bookmarkFromURL:(NSURL *)url options:(NSURLBookmarkCreationOptions)options;
+ (NSString *)displayNameForURL:(NSURL *)URL;
+ (NSURL *)mediaURLFromURL:(NSURL *)URL;
diff --git a/macosx/HBUtilities.m b/macosx/HBUtilities.m
index a0db9927b..8d83f46f3 100644
--- a/macosx/HBUtilities.m
+++ b/macosx/HBUtilities.m
@@ -71,13 +71,13 @@
return isStale ? nil : url;
}
-+ (nullable NSData *)bookmarkFromURL:(NSURL *)url
++ (nullable NSData *)bookmarkFromURL:(NSURL *)url options:(NSURLBookmarkCreationOptions)options
{
NSParameterAssert(url);
NSError *error;
- NSData *bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope includingResourceValuesForKeys:nil relativeToURL:nil error:&error];
+ NSData *bookmark = [url bookmarkDataWithOptions:options includingResourceValuesForKeys:nil relativeToURL:nil error:&error];
if (error)
{
@@ -88,6 +88,11 @@
return bookmark;
}
++ (nullable NSData *)bookmarkFromURL:(NSURL *)url
+{
+ return [HBUtilities bookmarkFromURL:url options:NSURLBookmarkCreationWithSecurityScope];
+}
+
+ (NSString *)displayNameForURL:(NSURL *)URL
{
NSString *displayName = URL.lastPathComponent;
diff --git a/macosx/HandBrake.xcodeproj/project.pbxproj b/macosx/HandBrake.xcodeproj/project.pbxproj
index 091c5261e..bf1467439 100644
--- a/macosx/HandBrake.xcodeproj/project.pbxproj
+++ b/macosx/HandBrake.xcodeproj/project.pbxproj
@@ -169,6 +169,8 @@
A91CE2FC1C7DB99D0068F46F /* HBPreset.h in Headers */ = {isa = PBXBuildFile; fileRef = A9CF25F21990D64E0023F727 /* HBPreset.h */; settings = {ATTRIBUTES = (Public, ); }; };
A91CE2FD1C7DB99D0068F46F /* HBMutablePreset.h in Headers */ = {isa = PBXBuildFile; fileRef = A96CD1741BCC5F9100F372F1 /* HBMutablePreset.h */; settings = {ATTRIBUTES = (Public, ); }; };
A91CE2FE1C7DB99D0068F46F /* HBTreeNode.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D488A31996270300E9B1BA /* HBTreeNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A91D54871E378ABD006D0997 /* HBSecurityAccessToken.h in Headers */ = {isa = PBXBuildFile; fileRef = A91D54851E378ABD006D0997 /* HBSecurityAccessToken.h */; };
+ A91D54881E378ABD006D0997 /* HBSecurityAccessToken.m in Sources */ = {isa = PBXBuildFile; fileRef = A91D54861E378ABD006D0997 /* HBSecurityAccessToken.m */; };
A91F97351D7B2A4E00D82DCE /* HBAudioTransformers.h in Headers */ = {isa = PBXBuildFile; fileRef = A91F97331D7B2A4E00D82DCE /* HBAudioTransformers.h */; };
A91F97361D7B2A4E00D82DCE /* HBAudioTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = A91F97341D7B2A4E00D82DCE /* HBAudioTransformers.m */; };
A92268781A6E555500A8D5C5 /* HBAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A92268771A6E555500A8D5C5 /* HBAppDelegate.m */; };
@@ -418,6 +420,8 @@
A91CE2CF1C7DABCE0068F46F /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; };
A91CE2D11C7DABDA0068F46F /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
A91CE2D31C7DABE40068F46F /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; };
+ A91D54851E378ABD006D0997 /* HBSecurityAccessToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBSecurityAccessToken.h; sourceTree = "<group>"; };
+ A91D54861E378ABD006D0997 /* HBSecurityAccessToken.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBSecurityAccessToken.m; sourceTree = "<group>"; };
A91F97331D7B2A4E00D82DCE /* HBAudioTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBAudioTransformers.h; sourceTree = "<group>"; };
A91F97341D7B2A4E00D82DCE /* HBAudioTransformers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBAudioTransformers.m; sourceTree = "<group>"; };
A92268761A6E555500A8D5C5 /* HBAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBAppDelegate.h; sourceTree = "<group>"; };
@@ -966,6 +970,8 @@
A93B0DF71C804CF50051A3FA /* NSDictionary+HBAdditions.m */,
A98F38041C7DCA7E00E469C8 /* HBStateFormatter+Private.h */,
A98F38051C7DCA7E00E469C8 /* HBStateFormatter+Private.m */,
+ A91D54851E378ABD006D0997 /* HBSecurityAccessToken.h */,
+ A91D54861E378ABD006D0997 /* HBSecurityAccessToken.m */,
);
name = Others;
sourceTree = "<group>";
@@ -1247,6 +1253,7 @@
files = (
A9736F051C7DA5FE008F1D18 /* HandBrakeKit.h in Headers */,
A91CE2D71C7DAEEE0068F46F /* HBCore.h in Headers */,
+ A91D54871E378ABD006D0997 /* HBSecurityAccessToken.h in Headers */,
A91CE2D81C7DAEEE0068F46F /* HBTitle.h in Headers */,
A91CE2D91C7DAEEE0068F46F /* HBJob.h in Headers */,
A91CE2DA1C7DAEEE0068F46F /* HBRange.h in Headers */,
@@ -1581,6 +1588,7 @@
A91CE2A01C7DA7320068F46F /* HBRange+UIAdditions.m in Sources */,
A91CE2A21C7DA7320068F46F /* HBVideo+UIAdditions.m in Sources */,
A91CE2A41C7DA7320068F46F /* HBPicture+UIAdditions.m in Sources */,
+ A91D54881E378ABD006D0997 /* HBSecurityAccessToken.m in Sources */,
A91119A61C7DD64A001C463C /* HBDistributedArray.m in Sources */,
A91CE2A61C7DA7320068F46F /* HBFilters+UIAdditions.m in Sources */,
A91CE2A81C7DA7320068F46F /* HBDVDDetector.m in Sources */,