Revert "Merge branch 'master' of https://github.com/MPG13/Nook-Music"

This reverts commit 9edf3dc531, reversing
changes made to 21509d9bf6.
This commit is contained in:
Micah Gomez 2020-09-14 16:46:38 -06:00
parent 9edf3dc531
commit f513e9aa50
27 changed files with 1304 additions and 1677 deletions

View file

@ -1,631 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
BDA060FA2447F3E6009C72CE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDA060F92447F3E6009C72CE /* AppDelegate.swift */; };
BDA060FC2447F3E6009C72CE /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDA060FB2447F3E6009C72CE /* SceneDelegate.swift */; };
BDA060FE2447F3E6009C72CE /* FirstViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDA060FD2447F3E6009C72CE /* FirstViewController.swift */; };
BDA061002447F3E6009C72CE /* SecondViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDA060FF2447F3E6009C72CE /* SecondViewController.swift */; };
BDA061032447F3E6009C72CE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BDA061012447F3E6009C72CE /* Main.storyboard */; };
BDA061052447F3F2009C72CE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BDA061042447F3F2009C72CE /* Assets.xcassets */; };
BDA061082447F3F2009C72CE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BDA061062447F3F2009C72CE /* LaunchScreen.storyboard */; };
BDA061132447F3F3009C72CE /* grandfatherrockTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDA061122447F3F3009C72CE /* grandfatherrockTests.swift */; };
BDA0611E2447F3F3009C72CE /* grandfatherrockUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDA0611D2447F3F3009C72CE /* grandfatherrockUITests.swift */; };
BDB53FCE250765A2004E9788 /* FinkHeavy.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BDB53FCC250765A1004E9788 /* FinkHeavy.ttf */; };
BDE8138F2507422100371570 /* ThirdViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDE8138E2507422100371570 /* ThirdViewController.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
BDA0610F2447F3F3009C72CE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BDA060EE2447F3E5009C72CE /* Project object */;
proxyType = 1;
remoteGlobalIDString = BDA060F52447F3E6009C72CE;
remoteInfo = grandfatherrock;
};
BDA0611A2447F3F3009C72CE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BDA060EE2447F3E5009C72CE /* Project object */;
proxyType = 1;
remoteGlobalIDString = BDA060F52447F3E6009C72CE;
remoteInfo = grandfatherrock;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
BDA060F62447F3E6009C72CE /* Nook Music.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Nook Music.app"; sourceTree = BUILT_PRODUCTS_DIR; };
BDA060F92447F3E6009C72CE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
BDA060FB2447F3E6009C72CE /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
BDA060FD2447F3E6009C72CE /* FirstViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstViewController.swift; sourceTree = "<group>"; };
BDA060FF2447F3E6009C72CE /* SecondViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecondViewController.swift; sourceTree = "<group>"; };
BDA061022447F3E6009C72CE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
BDA061042447F3F2009C72CE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
BDA061072447F3F2009C72CE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
BDA061092447F3F2009C72CE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
BDA0610E2447F3F3009C72CE /* grandfatherrockTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = grandfatherrockTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
BDA061122447F3F3009C72CE /* grandfatherrockTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = grandfatherrockTests.swift; sourceTree = "<group>"; };
BDA061142447F3F3009C72CE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
BDA061192447F3F3009C72CE /* grandfatherrockUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = grandfatherrockUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
BDA0611D2447F3F3009C72CE /* grandfatherrockUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = grandfatherrockUITests.swift; sourceTree = "<group>"; };
BDA0611F2447F3F3009C72CE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
BDA0618A244826DB009C72CE /* grandfatherrock.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = grandfatherrock.entitlements; sourceTree = "<group>"; };
BDB53FCC250765A1004E9788 /* FinkHeavy.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = FinkHeavy.ttf; sourceTree = "<group>"; };
BDE8138E2507422100371570 /* ThirdViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThirdViewController.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
BDA060F32447F3E6009C72CE /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
BDA0610B2447F3F3009C72CE /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
BDA061162447F3F3009C72CE /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
BDA060ED2447F3E5009C72CE = {
isa = PBXGroup;
children = (
BDA060F82447F3E6009C72CE /* grandfatherrock */,
BDA061112447F3F3009C72CE /* grandfatherrockTests */,
BDA0611C2447F3F3009C72CE /* grandfatherrockUITests */,
BDA060F72447F3E6009C72CE /* Products */,
);
sourceTree = "<group>";
};
BDA060F72447F3E6009C72CE /* Products */ = {
isa = PBXGroup;
children = (
BDA060F62447F3E6009C72CE /* Nook Music.app */,
BDA0610E2447F3F3009C72CE /* grandfatherrockTests.xctest */,
BDA061192447F3F3009C72CE /* grandfatherrockUITests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
BDA060F82447F3E6009C72CE /* grandfatherrock */ = {
isa = PBXGroup;
children = (
BDA0618A244826DB009C72CE /* grandfatherrock.entitlements */,
BDA060F92447F3E6009C72CE /* AppDelegate.swift */,
BDA060FB2447F3E6009C72CE /* SceneDelegate.swift */,
BDA060FD2447F3E6009C72CE /* FirstViewController.swift */,
BDA060FF2447F3E6009C72CE /* SecondViewController.swift */,
BDE8138E2507422100371570 /* ThirdViewController.swift */,
BDA061012447F3E6009C72CE /* Main.storyboard */,
BDA061042447F3F2009C72CE /* Assets.xcassets */,
BDB53FCA250765A1004E9788 /* fonts */,
BDA061062447F3F2009C72CE /* LaunchScreen.storyboard */,
BDA061092447F3F2009C72CE /* Info.plist */,
);
path = grandfatherrock;
sourceTree = "<group>";
};
BDA061112447F3F3009C72CE /* grandfatherrockTests */ = {
isa = PBXGroup;
children = (
BDA061122447F3F3009C72CE /* grandfatherrockTests.swift */,
BDA061142447F3F3009C72CE /* Info.plist */,
);
path = grandfatherrockTests;
sourceTree = "<group>";
};
BDA0611C2447F3F3009C72CE /* grandfatherrockUITests */ = {
isa = PBXGroup;
children = (
BDA0611D2447F3F3009C72CE /* grandfatherrockUITests.swift */,
BDA0611F2447F3F3009C72CE /* Info.plist */,
);
path = grandfatherrockUITests;
sourceTree = "<group>";
};
BDB53FCA250765A1004E9788 /* fonts */ = {
isa = PBXGroup;
children = (
BDB53FCC250765A1004E9788 /* FinkHeavy.ttf */,
);
path = fonts;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
BDA060F52447F3E6009C72CE /* grandfatherrock */ = {
isa = PBXNativeTarget;
buildConfigurationList = BDA061222447F3F3009C72CE /* Build configuration list for PBXNativeTarget "grandfatherrock" */;
buildPhases = (
BDA060F22447F3E6009C72CE /* Sources */,
BDA060F32447F3E6009C72CE /* Frameworks */,
BDA060F42447F3E6009C72CE /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = grandfatherrock;
productName = grandfatherrock;
productReference = BDA060F62447F3E6009C72CE /* Nook Music.app */;
productType = "com.apple.product-type.application";
};
BDA0610D2447F3F3009C72CE /* grandfatherrockTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = BDA061252447F3F3009C72CE /* Build configuration list for PBXNativeTarget "grandfatherrockTests" */;
buildPhases = (
BDA0610A2447F3F3009C72CE /* Sources */,
BDA0610B2447F3F3009C72CE /* Frameworks */,
BDA0610C2447F3F3009C72CE /* Resources */,
);
buildRules = (
);
dependencies = (
BDA061102447F3F3009C72CE /* PBXTargetDependency */,
);
name = grandfatherrockTests;
productName = grandfatherrockTests;
productReference = BDA0610E2447F3F3009C72CE /* grandfatherrockTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
BDA061182447F3F3009C72CE /* grandfatherrockUITests */ = {
isa = PBXNativeTarget;
buildConfigurationList = BDA061282447F3F3009C72CE /* Build configuration list for PBXNativeTarget "grandfatherrockUITests" */;
buildPhases = (
BDA061152447F3F3009C72CE /* Sources */,
BDA061162447F3F3009C72CE /* Frameworks */,
BDA061172447F3F3009C72CE /* Resources */,
);
buildRules = (
);
dependencies = (
BDA0611B2447F3F3009C72CE /* PBXTargetDependency */,
);
name = grandfatherrockUITests;
productName = grandfatherrockUITests;
productReference = BDA061192447F3F3009C72CE /* grandfatherrockUITests.xctest */;
productType = "com.apple.product-type.bundle.ui-testing";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
BDA060EE2447F3E5009C72CE /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1140;
LastUpgradeCheck = 1200;
ORGANIZATIONNAME = "Micah Gomez";
TargetAttributes = {
BDA060F52447F3E6009C72CE = {
CreatedOnToolsVersion = 11.4.1;
};
BDA0610D2447F3F3009C72CE = {
CreatedOnToolsVersion = 11.4.1;
TestTargetID = BDA060F52447F3E6009C72CE;
};
BDA061182447F3F3009C72CE = {
CreatedOnToolsVersion = 11.4.1;
TestTargetID = BDA060F52447F3E6009C72CE;
};
};
};
buildConfigurationList = BDA060F12447F3E5009C72CE /* Build configuration list for PBXProject "TapeDeck" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = BDA060ED2447F3E5009C72CE;
productRefGroup = BDA060F72447F3E6009C72CE /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
BDA060F52447F3E6009C72CE /* grandfatherrock */,
BDA0610D2447F3F3009C72CE /* grandfatherrockTests */,
BDA061182447F3F3009C72CE /* grandfatherrockUITests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
BDA060F42447F3E6009C72CE /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BDA061082447F3F2009C72CE /* LaunchScreen.storyboard in Resources */,
BDA061052447F3F2009C72CE /* Assets.xcassets in Resources */,
BDA061032447F3E6009C72CE /* Main.storyboard in Resources */,
BDB53FCE250765A2004E9788 /* FinkHeavy.ttf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
BDA0610C2447F3F3009C72CE /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
BDA061172447F3F3009C72CE /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
BDA060F22447F3E6009C72CE /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BDA061002447F3E6009C72CE /* SecondViewController.swift in Sources */,
BDA060FE2447F3E6009C72CE /* FirstViewController.swift in Sources */,
BDE8138F2507422100371570 /* ThirdViewController.swift in Sources */,
BDA060FA2447F3E6009C72CE /* AppDelegate.swift in Sources */,
BDA060FC2447F3E6009C72CE /* SceneDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
BDA0610A2447F3F3009C72CE /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BDA061132447F3F3009C72CE /* grandfatherrockTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
BDA061152447F3F3009C72CE /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BDA0611E2447F3F3009C72CE /* grandfatherrockUITests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
BDA061102447F3F3009C72CE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = BDA060F52447F3E6009C72CE /* grandfatherrock */;
targetProxy = BDA0610F2447F3F3009C72CE /* PBXContainerItemProxy */;
};
BDA0611B2447F3F3009C72CE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = BDA060F52447F3E6009C72CE /* grandfatherrock */;
targetProxy = BDA0611A2447F3F3009C72CE /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
BDA061012447F3E6009C72CE /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
BDA061022447F3E6009C72CE /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
BDA061062447F3F2009C72CE /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
BDA061072447F3F2009C72CE /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
BDA061202447F3F3009C72CE /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
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 = 13.4;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
BDA061212447F3F3009C72CE /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
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 = gnu11;
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 = 13.4;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
BDA061232447F3F3009C72CE /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = grandfatherrock/grandfatherrock.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = PRBH2T6668;
INFOPLIST_FILE = grandfatherrock/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = dev.mpg13.grandfatherrock;
PRODUCT_NAME = "Nook Music";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
BDA061242447F3F3009C72CE /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = grandfatherrock/grandfatherrock.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = PRBH2T6668;
INFOPLIST_FILE = grandfatherrock/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = dev.mpg13.grandfatherrock;
PRODUCT_NAME = "Nook Music";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
BDA061262447F3F3009C72CE /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = PRBH2T6668;
INFOPLIST_FILE = grandfatherrockTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = dev.mpg13.grandfatherrockTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/grandfatherrock.app/grandfatherrock";
};
name = Debug;
};
BDA061272447F3F3009C72CE /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = PRBH2T6668;
INFOPLIST_FILE = grandfatherrockTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = dev.mpg13.grandfatherrockTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/grandfatherrock.app/grandfatherrock";
};
name = Release;
};
BDA061292447F3F3009C72CE /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = PRBH2T6668;
INFOPLIST_FILE = grandfatherrockUITests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = dev.mpg13.grandfatherrockUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_TARGET_NAME = grandfatherrock;
};
name = Debug;
};
BDA0612A2447F3F3009C72CE /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = PRBH2T6668;
INFOPLIST_FILE = grandfatherrockUITests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = dev.mpg13.grandfatherrockUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_TARGET_NAME = grandfatherrock;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
BDA060F12447F3E5009C72CE /* Build configuration list for PBXProject "TapeDeck" */ = {
isa = XCConfigurationList;
buildConfigurations = (
BDA061202447F3F3009C72CE /* Debug */,
BDA061212447F3F3009C72CE /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
BDA061222447F3F3009C72CE /* Build configuration list for PBXNativeTarget "grandfatherrock" */ = {
isa = XCConfigurationList;
buildConfigurations = (
BDA061232447F3F3009C72CE /* Debug */,
BDA061242447F3F3009C72CE /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
BDA061252447F3F3009C72CE /* Build configuration list for PBXNativeTarget "grandfatherrockTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
BDA061262447F3F3009C72CE /* Debug */,
BDA061272447F3F3009C72CE /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
BDA061282447F3F3009C72CE /* Build configuration list for PBXNativeTarget "grandfatherrockUITests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
BDA061292447F3F3009C72CE /* Debug */,
BDA0612A2447F3F3009C72CE /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = BDA060EE2447F3E5009C72CE /* Project object */;
}

View file

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:/Users/micahgomez/Documents/Programming/iOS/grandfatherrockAnyMusic/TapeDeck.xcodeproj">
</FileRef>
</Workspace>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:grandfatherrock.xcodeproj">
</FileRef>
</Workspace>

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

View file

@ -1,17 +1,15 @@
{
"images" : [
{
"filename" : "woodplay-2.png",
"filename" : "Animal_Crossing_Logo.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "woodplay-1.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "woodplay.png",
"idiom" : "universal",
"scale" : "3x"
}

View file

@ -1,17 +1,17 @@
{
"images" : [
{
"filename" : "woodpause-2.png",
"filename" : "tumblr_nw9ifvY4vK1s1lku3o2_1280.jpg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "woodpause-1.png",
"filename" : "tumblr_nw9ifvY4vK1s1lku3o2_1280-1.jpg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "woodpause.png",
"filename" : "tumblr_nw9ifvY4vK1s1lku3o2_1280-2.jpg",
"idiom" : "universal",
"scale" : "3x"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View file

@ -0,0 +1,12 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "first.pdf"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

View file

@ -0,0 +1,12 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "second.pdf"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

View file

@ -1,177 +1,138 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17154" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="49e-Tb-3d3">
<device id="retina4_0" orientation="portrait" appearance="light"/>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="49e-Tb-3d3">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17124"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<customFonts key="customFonts">
<array key="FinkHeavy.ttf">
<string>FinkHeavy</string>
</array>
</customFonts>
<scenes>
<!--Home-->
<!--First-->
<scene sceneID="hNz-n2-bh7">
<objects>
<viewController id="9pv-A4-QxB" customClass="FirstViewController" customModule="Nook_Music" customModuleProvider="target" sceneMemberID="viewController">
<viewController id="9pv-A4-QxB" customClass="FirstViewController" customModule="ACNH_Music" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="tsR-hK-woN">
<rect key="frame" x="0.0" y="0.0" width="320" height="519"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1nc-vR-sG8">
<rect key="frame" x="0.0" y="0.0" width="320" height="519"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="hh:mm" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ERT-d4-fi5">
<rect key="frame" x="8" y="20" width="304" height="100"/>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="bg" translatesAutoresizingMaskIntoConstraints="NO" id="97A-Tb-Qsv">
<rect key="frame" x="0.0" y="0.0" width="414" height="813"/>
</imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Header" translatesAutoresizingMaskIntoConstraints="NO" id="c8b-AM-xhS">
<rect key="frame" x="87" y="44" width="240" height="128"/>
<constraints>
<constraint firstAttribute="height" constant="100" id="F3L-jt-5KI"/>
<constraint firstAttribute="width" constant="240" id="00q-8w-g1n"/>
<constraint firstAttribute="height" constant="128" id="5dI-4S-c46"/>
</constraints>
<fontDescription key="fontDescription" name="FinkHeavy" family="FinkHeavy" pointSize="52"/>
<color key="textColor" red="0.86256664989999998" green="0.69524472950000005" blue="0.2422021627" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Nou-CB-qnJ">
<rect key="frame" x="95" y="195" width="130" height="129"/>
<rect key="frame" x="179.5" y="421" width="55" height="54"/>
<constraints>
<constraint firstAttribute="width" constant="130" id="1c8-JO-es0"/>
<constraint firstAttribute="width" secondItem="Nou-CB-qnJ" secondAttribute="height" multiplier="1:1" id="3mw-Za-8Hw"/>
<constraint firstAttribute="height" constant="55" id="6cz-HP-FRR"/>
<constraint firstAttribute="width" constant="55" id="Eyz-wg-cHP"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="50"/>
<state key="normal" backgroundImage="play.circle" catalog="system"/>
<connections>
<action selector="play:" destination="9pv-A4-QxB" eventType="touchUpInside" id="3Tt-QE-VYp"/>
</connections>
</button>
</subviews>
<viewLayoutGuide key="safeArea" id="PQr-Ze-W5v"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="1nc-vR-sG8" secondAttribute="trailing" id="2Vn-Qs-7Nb"/>
<constraint firstItem="1nc-vR-sG8" firstAttribute="leading" secondItem="tsR-hK-woN" secondAttribute="leading" id="B9F-vB-YN1"/>
<constraint firstItem="PQr-Ze-W5v" firstAttribute="trailing" secondItem="ERT-d4-fi5" secondAttribute="trailing" constant="8" id="BuE-zP-hu9"/>
<constraint firstAttribute="bottom" secondItem="1nc-vR-sG8" secondAttribute="bottom" id="D6C-6f-D6F"/>
<constraint firstItem="ERT-d4-fi5" firstAttribute="leading" secondItem="PQr-Ze-W5v" secondAttribute="leading" constant="8" id="IuE-ro-63E"/>
<constraint firstItem="Nou-CB-qnJ" firstAttribute="centerX" secondItem="tsR-hK-woN" secondAttribute="centerX" id="Rhv-3N-E8g"/>
<constraint firstItem="Nou-CB-qnJ" firstAttribute="centerX" secondItem="tsR-hK-woN" secondAttribute="centerX" id="ZmI-4D-EGj"/>
<constraint firstItem="ERT-d4-fi5" firstAttribute="top" secondItem="PQr-Ze-W5v" secondAttribute="top" constant="20" id="abF-4H-3Jo"/>
<constraint firstItem="Nou-CB-qnJ" firstAttribute="centerY" secondItem="tsR-hK-woN" secondAttribute="centerY" id="dEB-Qh-RQi"/>
<constraint firstItem="1nc-vR-sG8" firstAttribute="top" secondItem="tsR-hK-woN" secondAttribute="top" id="uQw-4j-WKL"/>
<constraint firstItem="Nou-CB-qnJ" firstAttribute="centerY" secondItem="tsR-hK-woN" secondAttribute="centerY" id="vWU-vE-uEg"/>
<constraint firstItem="97A-Tb-Qsv" firstAttribute="centerX" secondItem="Nou-CB-qnJ" secondAttribute="centerX" id="1uk-Aq-Hsl"/>
<constraint firstItem="Nou-CB-qnJ" firstAttribute="centerY" secondItem="tsR-hK-woN" secondAttribute="centerY" id="F87-LI-cos"/>
<constraint firstItem="Nou-CB-qnJ" firstAttribute="centerX" secondItem="tsR-hK-woN" secondAttribute="centerX" id="Kbq-6h-PAh"/>
<constraint firstItem="97A-Tb-Qsv" firstAttribute="bottom" secondItem="PQr-Ze-W5v" secondAttribute="bottom" id="XJk-eF-0em"/>
<constraint firstItem="97A-Tb-Qsv" firstAttribute="leading" secondItem="PQr-Ze-W5v" secondAttribute="leading" id="ZGd-x4-SGY"/>
<constraint firstItem="c8b-AM-xhS" firstAttribute="centerX" secondItem="tsR-hK-woN" secondAttribute="centerX" id="jDK-Cu-Dee"/>
<constraint firstItem="c8b-AM-xhS" firstAttribute="top" secondItem="PQr-Ze-W5v" secondAttribute="top" id="jXZ-h9-ews"/>
<constraint firstItem="97A-Tb-Qsv" firstAttribute="top" secondItem="tsR-hK-woN" secondAttribute="topMargin" constant="-44" id="pTn-cK-rll"/>
</constraints>
<viewLayoutGuide key="safeArea" id="PQr-Ze-W5v"/>
</view>
<tabBarItem key="tabBarItem" title="Home" image="play.fill" catalog="system" id="acW-dT-cKf"/>
<tabBarItem key="tabBarItem" title="First" image="first" id="acW-dT-cKf"/>
<connections>
<outlet property="PlayButtonSize" destination="1c8-JO-es0" id="aFW-tJ-O5u"/>
<outlet property="controlButton" destination="Nou-CB-qnJ" id="s10-cM-NWa"/>
<outlet property="gradientView" destination="1nc-vR-sG8" id="bJA-Q5-DBR"/>
<outlet property="timeLabel" destination="ERT-d4-fi5" id="pOH-To-ihA"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="W5J-7L-Pyd" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="748.125" y="-321.12676056338029"/>
<point key="canvasLocation" x="749.27536231884062" y="-320.08928571428572"/>
</scene>
<!--Select Music-->
<!--Second-->
<scene sceneID="wg7-f3-ORb">
<objects>
<viewController title="Select Music" id="8rJ-Kc-sve" customClass="SecondViewController" customModule="Nook_Music" customModuleProvider="target" sceneMemberID="viewController">
<viewController id="8rJ-Kc-sve" customClass="SecondViewController" customModule="ACNH_Music" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="QS5-Rx-YEW">
<rect key="frame" x="0.0" y="0.0" width="320" height="519"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="EyG-9P-mxm">
<rect key="frame" x="16" y="59" width="288" height="414"/>
<color key="backgroundColor" white="0.66666666669999997" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="hourcell" textLabel="7Ay-o2-vni" detailTextLabel="g7Z-Mf-X37" style="IBUITableViewCellStyleSubtitle" id="5AF-Zr-dWg">
<rect key="frame" x="0.0" y="28" width="288" height="55.5"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="5AF-Zr-dWg" id="pj0-Tk-AlP">
<rect key="frame" x="0.0" y="0.0" width="288" height="55.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="7Ay-o2-vni">
<rect key="frame" x="16" y="10" width="33" height="20.5"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Subtitle" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="g7Z-Mf-X37">
<rect key="frame" x="16" y="31.5" width="44" height="14.5"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</tableViewCell>
</prototypes>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="16"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</tableView>
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="tNe-0A-XZP">
<rect key="frame" x="16" y="20" width="288" height="32"/>
<segments>
<segment title="First"/>
<segment title="Second"/>
<segment title="Third"/>
<segment title="Fourth"/>
<segment title="Fifth"/>
</segments>
<connections>
<action selector="selectListControlChanged:" destination="8rJ-Kc-sve" eventType="valueChanged" id="5tP-hy-40Y"/>
</connections>
</segmentedControl>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vLK-eh-BHE">
<rect key="frame" x="16" y="481" width="288" height="30"/>
<state key="normal" title="Developer Information"/>
<pickerView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sso-15-Cbi">
<rect key="frame" x="0.0" y="131" width="414" height="612"/>
</pickerView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Now Playing" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="foD-1t-xIm">
<rect key="frame" x="20" y="78" width="374" height="45"/>
<constraints>
<constraint firstAttribute="height" constant="45" id="poI-WG-n1S"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Now Playing:" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CmE-yR-ujc">
<rect key="frame" x="20" y="44" width="374" height="26"/>
<constraints>
<constraint firstAttribute="height" constant="26" id="IPr-7Z-G1X"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vLK-eh-BHE">
<rect key="frame" x="20" y="751" width="374" height="62"/>
<constraints>
<constraint firstAttribute="height" constant="62" id="Fb5-OH-nv2"/>
</constraints>
<state key="normal" title="Visit My Website"/>
<connections>
<action selector="visitWebsite:" destination="8rJ-Kc-sve" eventType="touchUpInside" id="IDz-Ml-7iY"/>
</connections>
</button>
</subviews>
<viewLayoutGuide key="safeArea" id="O1u-W8-tvY"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="EyG-9P-mxm" firstAttribute="leading" secondItem="tNe-0A-XZP" secondAttribute="leading" id="0Ug-kD-Es8"/>
<constraint firstItem="O1u-W8-tvY" firstAttribute="trailing" secondItem="tNe-0A-XZP" secondAttribute="trailing" constant="16" id="7D2-6v-kz9"/>
<constraint firstItem="EyG-9P-mxm" firstAttribute="trailing" secondItem="tNe-0A-XZP" secondAttribute="trailing" id="D5N-RQ-J49"/>
<constraint firstItem="vLK-eh-BHE" firstAttribute="leading" secondItem="tNe-0A-XZP" secondAttribute="leading" id="MYc-UO-KEr"/>
<constraint firstItem="EyG-9P-mxm" firstAttribute="top" secondItem="tNe-0A-XZP" secondAttribute="bottom" constant="8" symbolic="YES" id="Y8x-0r-NO8"/>
<constraint firstItem="tNe-0A-XZP" firstAttribute="leading" secondItem="O1u-W8-tvY" secondAttribute="leading" constant="16" id="ZzX-JZ-R7L"/>
<constraint firstItem="tNe-0A-XZP" firstAttribute="top" secondItem="O1u-W8-tvY" secondAttribute="top" constant="20" id="cBr-Ja-CsG"/>
<constraint firstItem="vLK-eh-BHE" firstAttribute="bottom" secondItem="O1u-W8-tvY" secondAttribute="bottom" constant="-8" id="imQ-3z-Lky"/>
<constraint firstItem="vLK-eh-BHE" firstAttribute="trailing" secondItem="tNe-0A-XZP" secondAttribute="trailing" id="jKU-me-vte"/>
<constraint firstItem="vLK-eh-BHE" firstAttribute="top" secondItem="EyG-9P-mxm" secondAttribute="bottom" constant="8" symbolic="YES" id="lRh-DA-wzr"/>
<constraint firstItem="CmE-yR-ujc" firstAttribute="top" secondItem="O1u-W8-tvY" secondAttribute="top" id="2gN-Hd-ya0"/>
<constraint firstItem="CmE-yR-ujc" firstAttribute="leading" secondItem="QS5-Rx-YEW" secondAttribute="leadingMargin" id="CzX-AB-qoQ"/>
<constraint firstItem="foD-1t-xIm" firstAttribute="top" secondItem="CmE-yR-ujc" secondAttribute="bottom" constant="8" id="F8y-Gt-BuI"/>
<constraint firstItem="foD-1t-xIm" firstAttribute="leading" secondItem="vLK-eh-BHE" secondAttribute="leading" id="FCJ-zm-ALB"/>
<constraint firstItem="vLK-eh-BHE" firstAttribute="bottom" secondItem="O1u-W8-tvY" secondAttribute="bottom" id="L55-Fe-N5I"/>
<constraint firstItem="foD-1t-xIm" firstAttribute="trailing" secondItem="vLK-eh-BHE" secondAttribute="trailing" id="NJ7-TR-Ejw"/>
<constraint firstItem="sso-15-Cbi" firstAttribute="top" secondItem="foD-1t-xIm" secondAttribute="bottom" constant="8" id="Paq-L4-xiD"/>
<constraint firstItem="foD-1t-xIm" firstAttribute="centerX" secondItem="sso-15-Cbi" secondAttribute="centerX" id="a7X-s8-nFT"/>
<constraint firstItem="CmE-yR-ujc" firstAttribute="trailing" secondItem="QS5-Rx-YEW" secondAttribute="trailingMargin" id="c4C-Ao-ZiQ"/>
<constraint firstItem="vLK-eh-BHE" firstAttribute="top" secondItem="sso-15-Cbi" secondAttribute="bottom" constant="8" id="kKo-JZ-mBP"/>
<constraint firstItem="CmE-yR-ujc" firstAttribute="trailing" secondItem="foD-1t-xIm" secondAttribute="trailing" id="lmo-3y-T9n"/>
<constraint firstItem="CmE-yR-ujc" firstAttribute="leading" secondItem="foD-1t-xIm" secondAttribute="leading" id="nlU-Gt-9LL"/>
<constraint firstItem="sso-15-Cbi" firstAttribute="leading" secondItem="O1u-W8-tvY" secondAttribute="leading" id="wf8-rc-oxd"/>
</constraints>
<viewLayoutGuide key="safeArea" id="O1u-W8-tvY"/>
</view>
<tabBarItem key="tabBarItem" title="Select Music" image="music.note.list" catalog="system" id="cPa-gy-q4n"/>
<tabBarItem key="tabBarItem" title="Second" image="second" id="cPa-gy-q4n"/>
<connections>
<outlet property="hoursTable" destination="EyG-9P-mxm" id="nKa-0x-NrF"/>
<outlet property="selectListControl" destination="tNe-0A-XZP" id="Y9A-1K-Qj9"/>
<segue destination="8LK-WS-C3a" kind="presentation" modalPresentationStyle="automatic" id="4kl-sn-3de"/>
<outlet property="nowPlaying" destination="foD-1t-xIm" id="s92-ip-7GI"/>
<outlet property="pickerView" destination="sso-15-Cbi" id="nO9-ZE-D3p"/>
<outletCollection property="pickerView" destination="sso-15-Cbi" collectionClass="NSMutableArray" id="D9W-Up-1mz"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="4Nw-L8-lE0" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="748.125" y="359.15492957746477"/>
<point key="canvasLocation" x="749.27536231884062" y="359.59821428571428"/>
</scene>
<!--Tab Bar Controller-->
<scene sceneID="yl2-sM-qoP">
<objects>
<tabBarController id="49e-Tb-3d3" sceneMemberID="viewController">
<tabBar key="tabBar" contentMode="scaleToFill" translucent="NO" id="W28-zg-YXA">
<tabBar key="tabBar" contentMode="scaleToFill" id="W28-zg-YXA">
<rect key="frame" x="0.0" y="975" width="768" height="49"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
@ -185,146 +146,12 @@
</objects>
<point key="canvasLocation" x="0.0" y="0.0"/>
</scene>
<!--Information-->
<scene sceneID="jKA-ec-7mv">
<objects>
<viewController storyboardIdentifier="ThirdViewController" title="Information" useStoryboardIdentifierAsRestorationIdentifier="YES" id="8LK-WS-C3a" customClass="ThirdViewController" customModule="Nook_Music" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="uzG-eo-7Z1">
<rect key="frame" x="0.0" y="0.0" width="320" height="548"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="SvO-8B-YAs">
<rect key="frame" x="16" y="133" width="288" height="50"/>
<color key="backgroundColor" white="0.66666666669999997" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="Ovh-Gj-aeg"/>
</constraints>
<color key="tintColor" systemColor="labelColor"/>
<state key="normal" title="Developer Website"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="16"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="websiteButton:" destination="8LK-WS-C3a" eventType="touchUpInside" id="hj9-mu-r8z"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gD8-gD-kvG">
<rect key="frame" x="16" y="191" width="288" height="50"/>
<color key="backgroundColor" white="0.66666666669999997" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="86M-fp-v4h"/>
</constraints>
<color key="tintColor" systemColor="labelColor"/>
<state key="normal" title="Support"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="16"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="supportEmail:" destination="8LK-WS-C3a" eventType="touchUpInside" id="VSU-7w-Lre"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7aC-B4-rXp">
<rect key="frame" x="16" y="307" width="288" height="50"/>
<color key="backgroundColor" white="0.66666666669999997" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="5vv-SB-MDJ"/>
</constraints>
<color key="tintColor" systemColor="labelColor"/>
<state key="normal" title="Medium Tip ($2.99)"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="16"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="mediumTipButton:" destination="8LK-WS-C3a" eventType="touchUpInside" id="MGK-3n-WVP"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="11I-Jn-Iz5">
<rect key="frame" x="16" y="249" width="288" height="50"/>
<color key="backgroundColor" white="0.66666666669999997" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="CNG-36-g6T"/>
</constraints>
<color key="tintColor" systemColor="labelColor"/>
<state key="normal" title="Small Tip ($0.99)"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="16"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="smallTipButton:" destination="8LK-WS-C3a" eventType="touchUpInside" id="0wn-bB-u54"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="GLx-A2-QUQ">
<rect key="frame" x="16" y="365" width="288" height="50"/>
<color key="backgroundColor" white="0.66666666669999997" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="p0w-nB-MDa"/>
</constraints>
<color key="tintColor" systemColor="labelColor"/>
<state key="normal" title="Large Tip ($4.99)"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="16"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="largeTipButton:" destination="8LK-WS-C3a" eventType="touchUpInside" id="dQn-0b-voB"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" lineBreakMode="wordWrap" numberOfLines="5" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8BV-wp-YO2">
<rect key="frame" x="20" y="423" width="280" height="43"/>
<string key="text">Everything in AC Tape Deck is entirely free. Tips are welcome but not expected, and are not required to use any features of the app.</string>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<viewLayoutGuide key="safeArea" id="Qng-vH-mPk"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="gD8-gD-kvG" firstAttribute="top" secondItem="SvO-8B-YAs" secondAttribute="bottom" constant="8" symbolic="YES" id="6Kl-jm-0xO"/>
<constraint firstItem="Qng-vH-mPk" firstAttribute="trailing" secondItem="SvO-8B-YAs" secondAttribute="trailing" constant="16" id="FNp-wP-MqG"/>
<constraint firstItem="8BV-wp-YO2" firstAttribute="top" secondItem="GLx-A2-QUQ" secondAttribute="bottom" constant="8" symbolic="YES" id="JIW-Fd-Rao"/>
<constraint firstItem="Qng-vH-mPk" firstAttribute="trailing" secondItem="7aC-B4-rXp" secondAttribute="trailing" constant="16" id="MWS-Gk-aGc"/>
<constraint firstItem="Qng-vH-mPk" firstAttribute="trailing" secondItem="gD8-gD-kvG" secondAttribute="trailing" constant="16" id="MZO-QU-Llr"/>
<constraint firstItem="11I-Jn-Iz5" firstAttribute="leading" secondItem="Qng-vH-mPk" secondAttribute="leading" constant="16" id="T9p-4Y-zLx"/>
<constraint firstItem="8BV-wp-YO2" firstAttribute="leading" secondItem="Qng-vH-mPk" secondAttribute="leading" constant="20" id="VP9-am-I43"/>
<constraint firstItem="SvO-8B-YAs" firstAttribute="leading" secondItem="Qng-vH-mPk" secondAttribute="leading" constant="16" id="bn2-fl-3tf"/>
<constraint firstItem="7aC-B4-rXp" firstAttribute="top" secondItem="11I-Jn-Iz5" secondAttribute="bottom" constant="8" symbolic="YES" id="boZ-R0-Egc"/>
<constraint firstItem="Qng-vH-mPk" firstAttribute="trailing" secondItem="11I-Jn-Iz5" secondAttribute="trailing" constant="16" id="ca1-LO-hvh"/>
<constraint firstItem="Qng-vH-mPk" firstAttribute="trailing" secondItem="GLx-A2-QUQ" secondAttribute="trailing" constant="16" id="cq5-VN-aQn"/>
<constraint firstItem="GLx-A2-QUQ" firstAttribute="top" secondItem="7aC-B4-rXp" secondAttribute="bottom" constant="8" symbolic="YES" id="d1I-xc-Hch"/>
<constraint firstItem="11I-Jn-Iz5" firstAttribute="centerY" secondItem="uzG-eo-7Z1" secondAttribute="centerY" id="gNV-Ot-LZH"/>
<constraint firstItem="11I-Jn-Iz5" firstAttribute="top" secondItem="gD8-gD-kvG" secondAttribute="bottom" constant="8" symbolic="YES" id="gOC-dn-ruY"/>
<constraint firstItem="7aC-B4-rXp" firstAttribute="leading" secondItem="Qng-vH-mPk" secondAttribute="leading" constant="16" id="kRg-ln-3zw"/>
<constraint firstItem="Qng-vH-mPk" firstAttribute="trailing" secondItem="8BV-wp-YO2" secondAttribute="trailing" constant="20" id="tXG-To-QNv"/>
<constraint firstItem="GLx-A2-QUQ" firstAttribute="leading" secondItem="Qng-vH-mPk" secondAttribute="leading" constant="16" id="tZw-B5-E6V"/>
<constraint firstItem="gD8-gD-kvG" firstAttribute="leading" secondItem="Qng-vH-mPk" secondAttribute="leading" constant="16" id="vcE-OD-6IL"/>
</constraints>
</view>
<tabBarItem key="tabBarItem" title="Home" image="play.fill" catalog="system" id="eCI-mO-7Eb"/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="mPH-OS-Cf0" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1507.5" y="358.0985915492958"/>
</scene>
</scenes>
<resources>
<image name="music.note.list" catalog="system" width="128" height="115"/>
<image name="Header" width="300" height="206"/>
<image name="bg" width="300" height="533"/>
<image name="first" width="30" height="30"/>
<image name="play.circle" catalog="system" width="128" height="121"/>
<image name="play.fill" catalog="system" width="116" height="128"/>
<systemColor name="labelColor">
<color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
<image name="second" width="30" height="30"/>
</resources>
</document>

View file

@ -8,462 +8,44 @@
import UIKit
import AVFoundation
import MediaPlayer
import StoreKit
protocol ObjectSavable {
func setObject<Object>(_ object: Object, forKey: String) throws where Object: Encodable
func getObject<Object>(forKey: String, castTo type: Object.Type) throws -> Object where Object: Decodable
}
enum ObjectSavableError: String, LocalizedError {
case unableToEncode = "Unable to encode object into data"
case noValue = "No data object found for the given key"
case unableToDecode = "Unable to decode object into given type"
var errorDescription: String? {
rawValue
}
}
extension UserDefaults: ObjectSavable {
func setObject<Object>(_ object: Object, forKey: String) throws where Object: Encodable {
let encoder = JSONEncoder()
do {
let data = try encoder.encode(object)
set(data, forKey: forKey)
} catch {
throw ObjectSavableError.unableToEncode
}
}
func getObject<Object>(forKey: String, castTo type: Object.Type) throws -> Object where Object: Decodable {
guard let data = data(forKey: forKey) else { throw ObjectSavableError.noValue }
let decoder = JSONDecoder()
do {
let object = try decoder.decode(type, from: data)
return object
} catch {
throw ObjectSavableError.unableToDecode
}
}
}
public class musicHandler{
@objc class func updateMusic(){
let defaults = UserDefaults.standard
timer.invalidate()
prevVol = Double(audioPlayer.volume)
audioPlayer.setVolume(0, fadeDuration: 3)
print("updating song")
GlobalVars.hour = Calendar.current.component(.hour, from: Date())
if(GlobalVars.hour<10){
hourPadding = "0"
}
else{
hourPadding = ""
}
//song = GlobalVars.titleCode + hourPadding + String(GlobalVars.hour)
//print(song)
let musicPlayer = MPMusicPlayerController.applicationMusicPlayer
switch defaults.integer(forKey: "titleNo") {
case 0:
GlobalVars.titleCode = "acnh"
case 1:
GlobalVars.titleCode = "acnl"
case 2:
GlobalVars.titleCode = "accf"
case 3:
GlobalVars.titleCode = "acpg"
default:
GlobalVars.titleCode = "acnh"
}
song = GlobalVars.titleCode + hourPadding + String(GlobalVars.hour)
print(song)
do{
var mediaPredicate = MPMediaPredicate()
switch GlobalVars.selectedMusicList {
case 0:
if(GlobalVars.musicSelectionID0[GlobalVars.hour] != 0){
mediaPredicate = MPMediaPropertyPredicate(value: GlobalVars.musicSelectionID0[GlobalVars.hour], forProperty: "persistentID")
} else {
var searchID:UInt64 = 0
var searchHour:Int = GlobalVars.hour
while (searchID == 0) {
if(searchHour > 0){
searchHour -= 1
} else {
searchHour = 23
}
if(searchHour == GlobalVars.hour){
print("no songs found!")
break
}
print("searching ", searchHour)
searchID = GlobalVars.musicSelectionID0[searchHour]
print(searchID)
}
print("Song Found!")
mediaPredicate = MPMediaPropertyPredicate(value: GlobalVars.musicSelectionID0[searchHour], forProperty: "persistentID")
}
case 1:
if(GlobalVars.musicSelectionID1[GlobalVars.hour] != 0){
mediaPredicate = MPMediaPropertyPredicate(value: GlobalVars.musicSelectionID1[GlobalVars.hour], forProperty: "persistentID")
} else {
var searchID:UInt64 = 0
var searchHour:Int = GlobalVars.hour
while (searchID == 0) {
if(searchHour > 0){
searchHour -= 1
} else {
searchHour = 23
}
if(searchHour == GlobalVars.hour){
print("no songs found!")
break
}
print("searching ", searchHour)
searchID = GlobalVars.musicSelectionID1[searchHour]
print(searchID)
}
print("Song Found!")
mediaPredicate = MPMediaPropertyPredicate(value: GlobalVars.musicSelectionID1[searchHour], forProperty: "persistentID")
}
case 2:
if(GlobalVars.musicSelectionID2[GlobalVars.hour] != 0){
mediaPredicate = MPMediaPropertyPredicate(value: GlobalVars.musicSelectionID2[GlobalVars.hour], forProperty: "persistentID")
} else {
var searchID:UInt64 = 0
var searchHour:Int = GlobalVars.hour
while (searchID == 0) {
if(searchHour > 0){
searchHour -= 1
} else {
searchHour = 23
}
if(searchHour == GlobalVars.hour){
print("no songs found!")
break
}
print("searching ", searchHour)
searchID = GlobalVars.musicSelectionID2[searchHour]
print(searchID)
}
print("Song Found!")
mediaPredicate = MPMediaPropertyPredicate(value: GlobalVars.musicSelectionID2[searchHour], forProperty: "persistentID")
}
case 3:
if(GlobalVars.musicSelectionID3[GlobalVars.hour] != 0){
mediaPredicate = MPMediaPropertyPredicate(value: GlobalVars.musicSelectionID3[GlobalVars.hour], forProperty: "persistentID")
} else {
var searchID:UInt64 = 0
var searchHour:Int = GlobalVars.hour
while (searchID == 0) {
if(searchHour > 0){
searchHour -= 1
} else {
searchHour = 23
}
if(searchHour == GlobalVars.hour){
print("no songs found!")
break
}
print("searching ", searchHour)
searchID = GlobalVars.musicSelectionID3[searchHour]
print(searchID)
}
print("Song Found!")
mediaPredicate = MPMediaPropertyPredicate(value: GlobalVars.musicSelectionID3[searchHour], forProperty: "persistentID")
}
case 4:
if(GlobalVars.musicSelectionID4[GlobalVars.hour] != 0){
mediaPredicate = MPMediaPropertyPredicate(value: GlobalVars.musicSelectionID4[GlobalVars.hour], forProperty: "persistentID")
} else {
var searchID:UInt64 = 0
var searchHour:Int = GlobalVars.hour
while (searchID == 0) {
if(searchHour > 0){
searchHour -= 1
} else {
searchHour = 23
}
if(searchHour == GlobalVars.hour){
print("no songs found!")
break
}
print("searching ", searchHour)
searchID = GlobalVars.musicSelectionID4[searchHour]
print(searchID)
}
print("Song Found!")
mediaPredicate = MPMediaPropertyPredicate(value: GlobalVars.musicSelectionID4[searchHour], forProperty: "persistentID")
}
default:
if(GlobalVars.musicSelectionID0[GlobalVars.hour] != 0){
mediaPredicate = MPMediaPropertyPredicate(value: GlobalVars.musicSelectionID0[GlobalVars.hour], forProperty: "persistentID")
} else {
var searchID:UInt64 = 0
var searchHour:Int = GlobalVars.hour
while (searchID == 0) {
if(searchHour > 0){
searchHour -= 1
} else {
searchHour = 23
}
if(searchHour == GlobalVars.hour){
print("no songs found!")
break
}
print("searching ", searchHour)
searchID = GlobalVars.musicSelectionID0[searchHour]
print(searchID)
}
print("Song Found!")
mediaPredicate = MPMediaPropertyPredicate(value: GlobalVars.musicSelectionID0[searchHour], forProperty: "persistentID")
}
}
//let mediaPredicate = MPMediaPropertyPredicate(value: GlobalVars.musicSelectionID1[GlobalVars.hour], forProperty: "persistentID")
let mediaQuery = MPMediaQuery()
mediaQuery.addFilterPredicate(mediaPredicate)
//let mediaItemCollection: MPMediaItemCollection = MPMediaItemCollection()
musicPlayer.setQueue(with: mediaQuery)
print(mediaQuery)
//musicPlayer.play()
}
if(MPMusicPlayerController.applicationMusicPlayer.playbackState == MPMusicPlaybackState.playing){
musicPlayer.play()
}
if(Calendar.current.component(.minute, from: Date()) == 0){
date = Date().addingTimeInterval(3600)
} else{
let currentMinute = Calendar.current.component(.minute, from: Date())
let currentSeconds = Calendar.current.component(.second, from: Date())
let timeTillTopOfTheHour = 3600 - currentSeconds - (currentMinute * 60)
date = Date().addingTimeInterval(TimeInterval(timeTillTopOfTheHour))
}
print(date)
timer = Timer(fireAt: date, interval: 0, target: self, selector: #selector(updateMusic), userInfo: nil, repeats: false)
RunLoop.main.add(timer, forMode: RunLoop.Mode.common)
}
}
struct GlobalVars {
static var musicSelectionID0:[UInt64] = [UInt64]()
static var musicSelection0:[String] = [String]()
static var musicSelectionID1:[UInt64] = [UInt64]()
static var musicSelection1:[String] = [String]()
static var musicSelectionID2:[UInt64] = [UInt64]()
static var musicSelection2:[String] = [String]()
static var musicSelectionID3:[UInt64] = [UInt64]()
static var musicSelection3:[String] = [String]()
static var musicSelectionID4:[UInt64] = [UInt64]()
static var musicSelection4:[String] = [String]()
static var selectedMusicList:Int = 0
static var musicStarted = false
static var titleName = UserDefaults.standard.string(forKey: "selectedTitle")
static var hour = Calendar.current.component(.hour, from: Date())
}
var i = 0
var date = Date()
var timer = Timer()
let currentSeconds = Calendar.current.component(.second, from: Date())
let currentMinute = Calendar.current.component(.minute, from: Date())
let timeTillTopOfTheHour = 3600 - currentSeconds - (currentMinute * 60)
var hourPadding = ""
var prevVol = 0.0
class FirstViewController: UIViewController{
let defaults = UserDefaults.standard
let musicPlayer = MPMusicPlayerController.applicationMusicPlayer
//@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var timeLabel: UILabel!
var labelTimer = Timer()
@objc func tick() {
//dateLabel.text = DateFormatter.localizedString(from: Date(), dateStyle: .long, timeStyle: .none)
timeLabel.text = DateFormatter.localizedString(from: Date(), dateStyle: .none, timeStyle: .short)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
musicPlayer.stop()
GlobalVars.musicStarted = false
IAPHandler.shared.fetchAvailableProducts()
IAPHandler.shared.purchaseStatusBlock = {[weak self] (type) in
guard let strongSelf = self else{ return }
if type == .purchased {
let alertView = UIAlertController(title: "", message: type.message(), preferredStyle: .alert)
let action = UIAlertAction(title: "OK", style: .default, handler: { (alert) in
})
alertView.addAction(action)
strongSelf.present(alertView, animated: true, completion: nil)
}
}
if(!defaults.bool(forKey: "didRun")){
defaults.set("New Horizons", forKey: "selectedTitle")
defaults.set(0, forKey: "titleNo")
//defaults.set(true, forKey: "didRun")
GlobalVars.musicSelectionID0 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
GlobalVars.musicSelection0 = ["","","","","","","","","","","","","","","","","","","","","","","",""]
GlobalVars.musicSelectionID1 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
GlobalVars.musicSelection1 = ["","","","","","","","","","","","","","","","","","","","","","","",""]
GlobalVars.musicSelectionID2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
GlobalVars.musicSelection2 = ["","","","","","","","","","","","","","","","","","","","","","","",""]
GlobalVars.musicSelectionID3 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
GlobalVars.musicSelection3 = ["","","","","","","","","","","","","","","","","","","","","","","",""]
GlobalVars.musicSelectionID4 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
GlobalVars.musicSelection4 = ["","","","","","","","","","","","","","","","","","","","","","","",""]
do {
try defaults.setObject(GlobalVars.musicSelection0, forKey: "savedMusicSelection0")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelectionID0, forKey: "savedMusicSelectionID0")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelection1, forKey: "savedMusicSelection1")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelectionID1, forKey: "savedMusicSelectionID1")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelection2, forKey: "savedMusicSelection2")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelectionID2, forKey: "savedMusicSelectionID2")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelection3, forKey: "savedMusicSelection3")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelectionID3, forKey: "savedMusicSelectionID3")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelection4, forKey: "savedMusicSelection4")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelectionID4, forKey: "savedMusicSelectionID4")
} catch {
print(error.localizedDescription)
}
print("First App run")
} else {
do {
GlobalVars.musicSelection0 = try defaults.getObject(forKey: "savedMusicSelection0", castTo: [String].self)
print(GlobalVars.musicSelection0)
} catch {
print(error.localizedDescription)
}
do {
GlobalVars.musicSelectionID0 = try defaults.getObject(forKey: "savedMusicSelectionID0", castTo: [UInt64].self)
print(GlobalVars.musicSelectionID0)
} catch {
print(error.localizedDescription)
}
do {
GlobalVars.musicSelection1 = try defaults.getObject(forKey: "savedMusicSelection1", castTo: [String].self)
print(GlobalVars.musicSelection1)
} catch {
print(error.localizedDescription)
}
do {
GlobalVars.musicSelectionID1 = try defaults.getObject(forKey: "savedMusicSelectionID1", castTo: [UInt64].self)
print(GlobalVars.musicSelectionID1)
} catch {
print(error.localizedDescription)
}
do {
GlobalVars.musicSelection2 = try defaults.getObject(forKey: "savedMusicSelection2", castTo: [String].self)
print(GlobalVars.musicSelection2)
} catch {
print(error.localizedDescription)
}
do {
GlobalVars.musicSelectionID2 = try defaults.getObject(forKey: "savedMusicSelectionID2", castTo: [UInt64].self)
print(GlobalVars.musicSelectionID2)
} catch {
print(error.localizedDescription)
}
do {
GlobalVars.musicSelection3 = try defaults.getObject(forKey: "savedMusicSelection3", castTo: [String].self)
print(GlobalVars.musicSelection3)
} catch {
print(error.localizedDescription)
}
do {
GlobalVars.musicSelectionID3 = try defaults.getObject(forKey: "savedMusicSelectionID3", castTo: [UInt64].self)
print(GlobalVars.musicSelectionID3)
} catch {
print(error.localizedDescription)
}
do {
GlobalVars.musicSelection4 = try defaults.getObject(forKey: "savedMusicSelection4", castTo: [String].self)
print(GlobalVars.musicSelection4)
} catch {
print(error.localizedDescription)
}
do {
GlobalVars.musicSelectionID4 = try defaults.getObject(forKey: "savedMusicSelectionID4", castTo: [UInt64].self)
print(GlobalVars.musicSelectionID4)
} catch {
print(error.localizedDescription)
}
do {
GlobalVars.selectedMusicList = try defaults.getObject(forKey: "savedSelectedMusicList", castTo: Int.self)
print(GlobalVars.selectedMusicList)
} catch {
print(error.localizedDescription)
}
print("App Ran Before")
}
print(currentSeconds)
print(currentMinute)
print(timeTillTopOfTheHour)
//print(GlobalVars.selectedSong)
GlobalVars.hour = Calendar.current.component(.hour, from: Date())
date = Date().addingTimeInterval(TimeInterval(timeTillTopOfTheHour))
print(date)
timer = Timer(fireAt: date, interval: 0, target: musicHandler.self, selector: #selector(musicHandler.updateMusic), userInfo: nil, repeats: false)
RunLoop.main.add(timer, forMode: .common)
//dateLabel.text = DateFormatter.localizedString(from: Date(), dateStyle: .long, timeStyle: .none)
timeLabel.text = DateFormatter.localizedString(from: Date(), dateStyle: .none, timeStyle: .short)
labelTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector:#selector(self.tick) , userInfo: nil, repeats: true)
/*do{
audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: song, ofType: "mp3")!))
audioPlayer.prepareToPlay()
audioPlayer.numberOfLoops = -1
@ -478,243 +60,148 @@ class FirstViewController: UIViewController{
}
catch{
print(error)
}*/
}
if(GlobalVars.musicStarted){
audioPlayer.play()
}
audioPlayer.setVolume(Float(prevVol), fadeDuration: 1)
if(Calendar.current.component(.minute, from: Date()) == 0){
date = Date().addingTimeInterval(3600)
}
else{
let currentMinute = Calendar.current.component(.minute, from: Date())
let currentSeconds = Calendar.current.component(.second, from: Date())
let timeTillTopOfTheHour = 3600 - currentSeconds - (currentMinute * 60)
date = Date().addingTimeInterval(TimeInterval(timeTillTopOfTheHour))
}
print(date)
timer = Timer(fireAt: date, interval: 0, target: self, selector: #selector(updateMusic), userInfo: nil, repeats: false)
RunLoop.main.add(timer, forMode: RunLoop.Mode.common)
}
}
struct GlobalVars {
static var selectedGame = ""
static var selectedGameNo = 0
static var musicStarted = false
static var titleCode = "acnh"
static var titleName = UserDefaults.standard.string(forKey: "selectedTitle")
static var hour = Calendar.current.component(.hour, from: Date())
}
var audioPlayer = AVAudioPlayer()
var song = "acnh00"
//var hour = 0
var i = 0
//var calendar = Calendar.current
var date = Date()
var timer = Timer()
let currentSeconds = Calendar.current.component(.second, from: Date())
let currentMinute = Calendar.current.component(.minute, from: Date())
let timeTillTopOfTheHour = 3600 - currentSeconds - (currentMinute * 60)
var hourPadding = ""
var prevVol = 0.0
//var titleCode = "acnh"
class FirstViewController: UIViewController{
@IBOutlet var gradientView: UIView!
override func viewDidAppear(_ animated: Bool) {
let defaults = UserDefaults.standard
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print("fuck!")
if (!defaults.bool(forKey: "didRun")){
let fuckAlert = UIAlertController(title: "Welcome!", message: "Please visit the 'Select Music' tab to set your hourly playlist, and come back here and hit play once it's ready!", preferredStyle: .alert)
// Create OK button
let OKAction = UIAlertAction(title: "OK", style: .default) { (action:UIAlertAction!) in
print("Ok button tapped");
}
fuckAlert.addAction(OKAction)
// Present Dialog message
self.present(fuckAlert, animated: true, completion:nil)
if(!defaults.bool(forKey: "didRun")){
defaults.set("New Horizons", forKey: "selectedTitle")
defaults.set(0, forKey: "titleNo")
defaults.set(true, forKey: "didRun")
print("First App run")
}
GlobalVars.selectedGame = defaults.string(forKey: "selectedTitle")!
GlobalVars.selectedGameNo = defaults.integer(forKey: "titleNo")
print(currentSeconds)
print(currentMinute)
print(timeTillTopOfTheHour)
GlobalVars.hour = Calendar.current.component(.hour, from: Date())
if(GlobalVars.hour<10){
hourPadding = "0"
}
else{
hourPadding = ""
}
switch defaults.integer(forKey: "titleNo") {
case 0:
GlobalVars.titleCode = "acnh"
case 1:
GlobalVars.titleCode = "acnl"
case 2:
GlobalVars.titleCode = "accf"
case 3:
GlobalVars.titleCode = "acpg"
default:
GlobalVars.titleCode = "acnh"
}
song = GlobalVars.titleCode + hourPadding + String(GlobalVars.hour)
print(song)
date = Date().addingTimeInterval(TimeInterval(timeTillTopOfTheHour))
print(date)
timer = Timer(fireAt: date, interval: 0, target: musicHandler.self, selector: #selector(musicHandler.updateMusic), userInfo: nil, repeats: false)
RunLoop.main.add(timer, forMode: .common)
do{
audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: song, ofType: "mp3")!))
audioPlayer.prepareToPlay()
audioPlayer.numberOfLoops = -1
let audioSession = AVAudioSession.sharedInstance()
do{
try audioSession.setCategory(.playback, mode: .default)
try audioSession.setActive(true)
}
}
var foundSong = false
switch GlobalVars.selectedMusicList {
case 0:
for i in GlobalVars.musicSelectionID0 {
if (i != 0){
foundSong = true
}
}
case 1:
for i in GlobalVars.musicSelectionID1 {
if (i != 0){
foundSong = true
}
}
case 2:
for i in GlobalVars.musicSelectionID2 {
if (i != 0){
foundSong = true
}
}
case 3:
for i in GlobalVars.musicSelectionID3 {
if (i != 0){
foundSong = true
}
}
case 4:
for i in GlobalVars.musicSelectionID4 {
if (i != 0){
foundSong = true
}
}
default:
for i in GlobalVars.musicSelectionID0 {
if (i != 0){
foundSong = true
}
}
catch{
print(error)
}
if !foundSong && defaults.bool(forKey: "didRun") {
let errorAlert = UIAlertController(title: "Song Error", message: "No songs found in this track. Please visit the 'Select Music' tab to set a song and get started!", preferredStyle: .alert)
// Create OK button
let OKAction = UIAlertAction(title: "OK", style: .default) { (action:UIAlertAction!) in
print("Ok button tapped");
}
errorAlert.addAction(OKAction)
// Present Dialog message
self.present(errorAlert, animated: true, completion:nil)
print("Song is missing for at one hour")
controlButton.isEnabled = false
} else {
controlButton.isEnabled = true
}
self.view.layoutIfNeeded()
}
override func viewWillAppear(_ animated: Bool) {
// create the gradient layer
let gradient = CAGradientLayer()
gradient.frame = self.view.bounds
print("time: ", GlobalVars.hour)
if((GlobalVars.hour >= 8) && (GlobalVars.hour <= 19)){ //Daytime
print("day")
gradient.colors = [UIColor(red: 0.39, green: 0.69, blue: 1.00, alpha: 1).cgColor, UIColor(red: 0.07, green: 0.45, blue: 0.87, alpha: 1).cgColor]
} else if((GlobalVars.hour >= 20) && (GlobalVars.hour <= 21)){//Sunset
print("sunset")
gradient.colors = [UIColor(red: 0.00, green: 0.31, blue: 0.59, alpha: 1).cgColor, UIColor(red: 1.00, green: 0.78, blue: 0.88, alpha: 1).cgColor]
} else if((GlobalVars.hour >= 22) || (GlobalVars.hour <= 5)){//Night
print("night")
gradient.colors = [UIColor(red: 0.08, green: 0.27, blue: 0.59, alpha: 1).cgColor, UIColor(red: 0.00, green: 0.20, blue: 0.29, alpha: 1).cgColor]
} else if((GlobalVars.hour >= 6) && (GlobalVars.hour <= 7)){//Sunrise
print("sunrise")
gradient.colors = [UIColor(red: 0.02, green: 0.26, blue: 0.49, alpha: 1).cgColor, UIColor(red: 0.89, green: 0.68, blue: 0.60, alpha: 1).cgColor]
}
gradient.locations = [0.00, 1.00]
/*let gradientChangeAnimation = CABasicAnimation(keyPath: "colors")
gradientChangeAnimation.duration = 5.0
if((GlobalVars.hour >= 8) && (GlobalVars.hour <= 19)){ //Daytime
print("day")
gradientChangeAnimation.toValue = [UIColor(red: 0.00, green: 0.31, blue: 0.59, alpha: 1).cgColor, UIColor(red: 0.07, green: 0.45, blue: 0.87, alpha: 1).cgColor]
} else if((GlobalVars.hour >= 20) && (GlobalVars.hour <= 21)){//Sunset
print("sunset")
gradientChangeAnimation.toValue = [UIColor(red: 0.00, green: 0.31, blue: 0.59, alpha: 1).cgColor, UIColor(red: 1.00, green: 0.61, blue: 0.43, alpha: 1).cgColor]
} else if((GlobalVars.hour >= 22) || (GlobalVars.hour <= 5)){//Night
print("night")
gradientChangeAnimation.toValue = [
UIColor(red: 0.68, green: 0.67, blue: 1.0, alpha: 1).cgColor,
UIColor(red: 1.00, green: 0.00, blue: 0.09, alpha: 1).cgColor
]
} else if((GlobalVars.hour >= 6) && (GlobalVars.hour <= 7)){//Sunrise
print("sunrise")
gradientChangeAnimation.toValue = [UIColor(red: 0.02, green: 0.26, blue: 0.49, alpha: 1).cgColor, UIColor(red: 0.89, green: 0.68, blue: 0.60, alpha: 1).cgColor]
}
gradientChangeAnimation.autoreverses = true
gradientChangeAnimation.fillMode = CAMediaTimingFillMode.forwards
gradientChangeAnimation.isRemovedOnCompletion = false
gradient.add(gradientChangeAnimation, forKey: "colorChange")
*/
// add the gradient to the view
gradientView.layer.addSublayer(gradient)
if (MPMusicPlayerController.applicationMusicPlayer.playbackState == MPMusicPlaybackState.playing) {
GlobalVars.musicStarted = true
controlButton.setBackgroundImage(UIImage(systemName: "pause.circle"), for: UIControl.State.normal)
UIView.animate(withDuration: 0.4, delay: 0,usingSpringWithDamping: 0.5,initialSpringVelocity: 0){
self.PlayButtonSize.constant = 130
}
} else {
GlobalVars.musicStarted = false
controlButton.setBackgroundImage(UIImage(systemName: "play.circle"), for: UIControl.State.normal)
UIView.animate(withDuration: 0.4, delay: 0,usingSpringWithDamping: 0.5,initialSpringVelocity: 0){
self.PlayButtonSize.constant = 90
}
}
}
override func viewWillDisappear(_ animated: Bool) {
gradientView.layer.sublayers?.forEach { $0.removeFromSuperlayer() }
do {
try defaults.setObject(GlobalVars.musicSelection0, forKey: "savedMusicSelection0")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelectionID0, forKey: "savedMusicSelectionID0")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelection1, forKey: "savedMusicSelection1")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelectionID1, forKey: "savedMusicSelectionID1")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelection2, forKey: "savedMusicSelection2")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelectionID2, forKey: "savedMusicSelectionID2")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelection3, forKey: "savedMusicSelection3")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelectionID3, forKey: "savedMusicSelectionID3")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelection4, forKey: "savedMusicSelection4")
} catch {
print(error.localizedDescription)
}
do {
try defaults.setObject(GlobalVars.musicSelectionID4, forKey: "savedMusicSelectionID4")
} catch {
print(error.localizedDescription)
}
}
@IBOutlet weak var controlButton: UIButton!
@IBOutlet var PlayButtonSize: NSLayoutConstraint!
@IBAction func play(_ sender: Any) {
if(!GlobalVars.musicStarted){
GlobalVars.musicStarted = true
musicHandler.updateMusic()
let musicPlayer = MPMusicPlayerController.applicationMusicPlayer
musicPlayer.play()
audioPlayer.play()
GlobalVars.musicStarted = true
controlButton.setBackgroundImage(UIImage(systemName: "pause.circle"), for: UIControl.State.normal)
UIView.animate(withDuration: 0.4,delay:0,usingSpringWithDamping: 0.5,initialSpringVelocity: 0){
self.PlayButtonSize.constant = 130
self.view.layoutIfNeeded()
}
}
else{
let musicPlayer = MPMusicPlayerController.applicationMusicPlayer
musicPlayer.pause()
audioPlayer.pause()
GlobalVars.musicStarted = false
controlButton.setBackgroundImage(UIImage(systemName: "play.circle"), for: UIControl.State.normal)
UIView.animate(withDuration: 0.4, delay: 0,usingSpringWithDamping: 0.5,initialSpringVelocity: 0){
self.PlayButtonSize.constant = 90
self.view.layoutIfNeeded()
}
}
}
/*@objc func updateMusic(){
//timer.invalidate()
@ -765,115 +252,3 @@ class FirstViewController: UIViewController{
}
enum IAPHandlerAlertType{
case disabled
case restored
case purchased
func message() -> String{
switch self {
case .disabled: return "Purchases are disabled in your device!"
case .restored: return "You've successfully restored your purchase!"
case .purchased: return "You've successfully bought this purchase!"
}
}
}
class IAPHandler: NSObject {
static let shared = IAPHandler()
let SMALL_TIP_PRODUCT_ID = "smalltip"
let MEDIUM_TIP_PRODUCT_ID = "mediumtip"
let LARGE_TIP_PRODUCT_ID = "largetip"
fileprivate var productID = ""
fileprivate var productsRequest = SKProductsRequest()
fileprivate var iapProducts = [SKProduct]()
var purchaseStatusBlock: ((IAPHandlerAlertType) -> Void)?
// MARK: - MAKE PURCHASE OF A PRODUCT
func canMakePurchases() -> Bool { return SKPaymentQueue.canMakePayments() }
func purchaseMyProduct(index: Int){
if iapProducts.count == 0 { return }
if self.canMakePurchases() {
let product = iapProducts[index]
let payment = SKPayment(product: product)
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().add(payment)
print("PRODUCT TO PURCHASE: \(product.productIdentifier)")
productID = product.productIdentifier
} else {
purchaseStatusBlock?(.disabled)
}
}
// MARK: - RESTORE PURCHASE
func restorePurchase(){
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().restoreCompletedTransactions()
}
// MARK: - FETCH AVAILABLE IAP PRODUCTS
func fetchAvailableProducts(){
// Put here your IAP Products ID's
let productIdentifiers = NSSet(objects: SMALL_TIP_PRODUCT_ID,MEDIUM_TIP_PRODUCT_ID,LARGE_TIP_PRODUCT_ID
)
productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers as! Set<String>)
productsRequest.delegate = self
productsRequest.start()
}
}
extension IAPHandler: SKProductsRequestDelegate, SKPaymentTransactionObserver{
// MARK: - REQUEST IAP PRODUCTS
func productsRequest (_ request:SKProductsRequest, didReceive response:SKProductsResponse) {
if (response.products.count > 0) {
iapProducts = response.products
for product in iapProducts{
let numberFormatter = NumberFormatter()
numberFormatter.formatterBehavior = .behavior10_4
numberFormatter.numberStyle = .currency
numberFormatter.locale = product.priceLocale
let price1Str = numberFormatter.string(from: product.price)
print(product.localizedDescription + "\nfor just \(price1Str!)")
}
}
}
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
purchaseStatusBlock?(.restored)
}
// MARK:- IAP PAYMENT QUEUE
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction:AnyObject in transactions {
if let trans = transaction as? SKPaymentTransaction {
switch trans.transactionState {
case .purchased:
print("purchased")
SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
purchaseStatusBlock?(.purchased)
break
case .failed:
print("failed")
SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
break
case .restored:
print("restored")
SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
break
default: break
}}}
}
}

View file

@ -4,8 +4,6 @@
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>AC Tape Deck</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
@ -20,16 +18,8 @@
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.music</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppleMusicUsageDescription</key>
<string>To select songs for each hour</string>
<key>UIAppFonts</key>
<array>
<string>FinkHeavyttf</string>
</array>
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>

View file

@ -30,11 +30,13 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
func sceneDidBecomeActive(_ scene: UIScene) {
// Called when the scene has moved from an inactive state to an active state.
// Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
activateProximitySensor(isOn: true)
}
func sceneWillResignActive(_ scene: UIScene) {
// Called when the scene will move from an active state to an inactive state.
// This may occur due to temporary interruptions (ex. an incoming phone call).
activateProximitySensor(isOn: false)
}
func sceneWillEnterForeground(_ scene: UIScene) {
@ -48,6 +50,21 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
// to restore the scene back to its current state.
}
func activateProximitySensor(isOn: Bool) {
let device = UIDevice.current
device.isProximityMonitoringEnabled = isOn
if isOn {
NotificationCenter.default.addObserver(self, selector: #selector(proximityStateDidChange), name: UIDevice.proximityStateDidChangeNotification, object: device)
} else {
NotificationCenter.default.removeObserver(self, name: UIDevice.proximityStateDidChangeNotification, object: device)
}
}
@objc func proximityStateDidChange(notification: NSNotification) {
if let device = notification.object as? UIDevice {
print(device)
}
}
}

Binary file not shown.