OpenMPT: Correctly OS version gate the OpenMPT plugins, and add an interface for any other plugin to use, should it ever become necessary

CQTexperiment
Christopher Snowhill 2021-12-27 17:46:09 -08:00
parent 25a43a9083
commit e2bca8f93b
8 changed files with 104 additions and 0 deletions

View File

@ -15,6 +15,10 @@
- (void)dealloc;
@end
@protocol CogVersionCheck <NSObject>
+ (BOOL)shouldLoadForOSVersion:(NSOperatingSystemVersion)version;
@end
@protocol CogContainer <NSObject>
+ (NSArray *)fileTypes; //mp3, ogg, etc
+ (NSArray *)mimeTypes;

View File

@ -68,6 +68,18 @@ static PluginController *sharedPluginController = nil;
{
NSArray *classNames = [[notification userInfo] objectForKey:@"NSLoadedClasses"];
for (NSString *className in classNames)
{
Class bundleClass = NSClassFromString(className);
if ([bundleClass conformsToProtocol:@protocol(CogVersionCheck)]) {
DLog(@"Component has version check: %@", className);
if (![bundleClass shouldLoadForOSVersion:[[NSProcessInfo processInfo] operatingSystemVersion]])
{
DLog(@"Plugin fails OS version check, ignoring");
return;
}
}
}
for (NSString *className in classNames)
{
DLog(@"Class loaded: %@", className);
Class bundleClass = NSClassFromString(className);

View File

@ -0,0 +1,18 @@
//
// OMPTVersionCheck.h
// OpenMPT
//
// Created by Christopher Snowhill on 12/27/21.
// Copyright © 2021 Christopher Snowhill. All rights reserved.
//
#ifndef OMPTVersionCheck_h
#define OMPTVersionCheck_h
#import "Plugin.h"
@interface OMPTOldVersionCheck : NSObject<CogVersionCheck>
+ (BOOL)shouldLoadForOSVersion:(NSOperatingSystemVersion)version;
@end
#endif /* OMPTVersionCheck_h */

View File

@ -0,0 +1,20 @@
//
// OMPTVersionCheck.m
// OpenMPT
//
// Created by Christopher Snowhill on 12/27/21.
// Copyright © 2021 Christopher Snowhill. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "OMPTVersionCheck.h"
@implementation OMPTOldVersionCheck
+ (BOOL)shouldLoadForOSVersion:(NSOperatingSystemVersion)version {
if (version.majorVersion < 10 ||
(version.majorVersion == 10 && version.minorVersion < 15))
return YES;
else
return NO;
}
@end

View File

@ -9,6 +9,7 @@
/* Begin PBXBuildFile section */
83187C7120E4EAB700DED293 /* libOpenMPTOld.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8308151E20E4EA96003ACEDA /* libOpenMPTOld.framework */; };
83187C7220E4EAC400DED293 /* libOpenMPTOld.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8308151E20E4EA96003ACEDA /* libOpenMPTOld.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
8372349F277AA34000CD0A77 /* OMPTVersionCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 8372349D277AA34000CD0A77 /* OMPTVersionCheck.m */; };
83E5FE731FFF010C00659F0F /* OMPTDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 83E5FE6D1FFF010B00659F0F /* OMPTDecoder.mm */; };
83E5FE741FFF010C00659F0F /* OMPTContainer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 83E5FE6F1FFF010B00659F0F /* OMPTContainer.mm */; };
83E5FE751FFF010C00659F0F /* OMPTMetadataReader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 83E5FE701FFF010C00659F0F /* OMPTMetadataReader.mm */; };
@ -45,6 +46,8 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
8372349D277AA34000CD0A77 /* OMPTVersionCheck.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OMPTVersionCheck.m; path = OpenMPT/OMPTVersionCheck.m; sourceTree = "<group>"; };
8372349E277AA34000CD0A77 /* OMPTVersionCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OMPTVersionCheck.h; path = OpenMPT/OMPTVersionCheck.h; sourceTree = "<group>"; };
83E5EFA31FFEF78100659F0F /* OpenMPTOld.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OpenMPTOld.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
83E5EFA61FFEF78100659F0F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
83E5EFC81FFEF7CC00659F0F /* libOpenMPTOld.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = libOpenMPTOld.xcodeproj; path = ../../Frameworks/OpenMPT.old/libOpenMPTOld.xcodeproj; sourceTree = "<group>"; };
@ -125,6 +128,8 @@
83E5FE6D1FFF010B00659F0F /* OMPTDecoder.mm */,
83E5FE721FFF010C00659F0F /* OMPTMetadataReader.h */,
83E5FE701FFF010C00659F0F /* OMPTMetadataReader.mm */,
8372349E277AA34000CD0A77 /* OMPTVersionCheck.h */,
8372349D277AA34000CD0A77 /* OMPTVersionCheck.m */,
);
name = Classes;
sourceTree = "<group>";
@ -216,6 +221,7 @@
buildActionMask = 2147483647;
files = (
83E5FE751FFF010C00659F0F /* OMPTMetadataReader.mm in Sources */,
8372349F277AA34000CD0A77 /* OMPTVersionCheck.m in Sources */,
83E5FE731FFF010C00659F0F /* OMPTDecoder.mm in Sources */,
83E5FE741FFF010C00659F0F /* OMPTContainer.mm in Sources */,
);

View File

@ -9,6 +9,7 @@
/* Begin PBXBuildFile section */
83187C7120E4EAB700DED293 /* libOpenMPT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8308151E20E4EA96003ACEDA /* libOpenMPT.framework */; };
83187C7220E4EAC400DED293 /* libOpenMPT.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8308151E20E4EA96003ACEDA /* libOpenMPT.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
8372349C277AA23F00CD0A77 /* OMPTVersionCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 8372349B277AA23F00CD0A77 /* OMPTVersionCheck.m */; };
83E5FE731FFF010C00659F0F /* OMPTDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 83E5FE6D1FFF010B00659F0F /* OMPTDecoder.mm */; };
83E5FE741FFF010C00659F0F /* OMPTContainer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 83E5FE6F1FFF010B00659F0F /* OMPTContainer.mm */; };
83E5FE751FFF010C00659F0F /* OMPTMetadataReader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 83E5FE701FFF010C00659F0F /* OMPTMetadataReader.mm */; };
@ -45,6 +46,8 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
8372349A277AA1F600CD0A77 /* OMPTVersionCheck.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OMPTVersionCheck.h; path = OpenMPT/OMPTVersionCheck.h; sourceTree = "<group>"; };
8372349B277AA23F00CD0A77 /* OMPTVersionCheck.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = OMPTVersionCheck.m; path = OpenMPT/OMPTVersionCheck.m; sourceTree = "<group>"; };
83E5EFA31FFEF78100659F0F /* OpenMPT.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OpenMPT.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
83E5EFA61FFEF78100659F0F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
83E5EFC81FFEF7CC00659F0F /* libOpenMPT.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = libOpenMPT.xcodeproj; path = ../../Frameworks/OpenMPT/libOpenMPT.xcodeproj; sourceTree = "<group>"; };
@ -125,6 +128,8 @@
83E5FE6D1FFF010B00659F0F /* OMPTDecoder.mm */,
83E5FE721FFF010C00659F0F /* OMPTMetadataReader.h */,
83E5FE701FFF010C00659F0F /* OMPTMetadataReader.mm */,
8372349A277AA1F600CD0A77 /* OMPTVersionCheck.h */,
8372349B277AA23F00CD0A77 /* OMPTVersionCheck.m */,
);
name = Classes;
sourceTree = "<group>";
@ -216,6 +221,7 @@
buildActionMask = 2147483647;
files = (
83E5FE751FFF010C00659F0F /* OMPTMetadataReader.mm in Sources */,
8372349C277AA23F00CD0A77 /* OMPTVersionCheck.m in Sources */,
83E5FE731FFF010C00659F0F /* OMPTDecoder.mm in Sources */,
83E5FE741FFF010C00659F0F /* OMPTContainer.mm in Sources */,
);

View File

@ -0,0 +1,18 @@
//
// OMPTVersionCheck.h
// OpenMPT
//
// Created by Christopher Snowhill on 12/27/21.
// Copyright © 2021 Christopher Snowhill. All rights reserved.
//
#ifndef OMPTVersionCheck_h
#define OMPTVersionCheck_h
#import "Plugin.h"
@interface OMPTVersionCheck : NSObject<CogVersionCheck>
+ (BOOL)shouldLoadForOSVersion:(NSOperatingSystemVersion)version;
@end
#endif /* OMPTVersionCheck_h */

View File

@ -0,0 +1,20 @@
//
// OMPTVersionCheck.m
// OpenMPT
//
// Created by Christopher Snowhill on 12/27/21.
// Copyright © 2021 Christopher Snowhill. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "OMPTVersionCheck.h"
@implementation OMPTVersionCheck
+ (BOOL)shouldLoadForOSVersion:(NSOperatingSystemVersion)version {
if (version.majorVersion < 10 ||
(version.majorVersion == 10 && version.minorVersion < 15))
return NO;
else
return YES;
}
@end