AC Tape Deck

This commit is contained in:
Micah Gomez 2020-09-14 16:49:41 -06:00
parent c451b3d131
commit 13df6cbaff
67 changed files with 3684 additions and 0 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

View file

@ -0,0 +1,676 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 52;
objects = {
/* Begin PBXBuildFile section */
BD7A5E342510173A003E992C /* day.gif in Resources */ = {isa = PBXBuildFile; fileRef = BD7A5E332510173A003E992C /* day.gif */; };
BD7D35D72510042D00A61B6B /* night.gif in Resources */ = {isa = PBXBuildFile; fileRef = BD7D35D52510042D00A61B6B /* night.gif */; };
BD7D35DB2510111700A61B6B /* SwiftyGif in Frameworks */ = {isa = PBXBuildFile; productRef = BD7D35DA2510111700A61B6B /* SwiftyGif */; };
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 */
BD7A5E332510173A003E992C /* day.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = day.gif; sourceTree = "<group>"; };
BD7D35D52510042D00A61B6B /* night.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = night.gif; sourceTree = "<group>"; };
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 = (
BD7D35DB2510111700A61B6B /* SwiftyGif in Frameworks */,
);
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 */
BD7D35D42510042D00A61B6B /* gifs */ = {
isa = PBXGroup;
children = (
BD7A5E332510173A003E992C /* day.gif */,
BD7D35D52510042D00A61B6B /* night.gif */,
);
path = gifs;
sourceTree = "<group>";
};
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 */,
BD7D35D42510042D00A61B6B /* gifs */,
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;
packageProductDependencies = (
BD7D35DA2510111700A61B6B /* SwiftyGif */,
);
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;
packageReferences = (
BD7D35D92510111700A61B6B /* XCRemoteSwiftPackageReference "SwiftyGif" */,
);
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 */,
BD7D35D72510042D00A61B6B /* night.gif in Resources */,
BD7A5E342510173A003E992C /* day.gif 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;
CURRENT_PROJECT_VERSION = 4;
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;
CURRENT_PROJECT_VERSION = 4;
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 */
/* Begin XCRemoteSwiftPackageReference section */
BD7D35D92510111700A61B6B /* XCRemoteSwiftPackageReference "SwiftyGif" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/kirualex/SwiftyGif.git";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 5.3.0;
};
};
/* End XCRemoteSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
BD7D35DA2510111700A61B6B /* SwiftyGif */ = {
isa = XCSwiftPackageProductDependency;
package = BD7D35D92510111700A61B6B /* XCRemoteSwiftPackageReference "SwiftyGif" */;
productName = SwiftyGif;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = BDA060EE2447F3E5009C72CE /* Project object */;
}

View file

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

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View file

@ -0,0 +1,16 @@
{
"object": {
"pins": [
{
"package": "SwiftyGif",
"repositoryURL": "https://github.com/kirualex/SwiftyGif.git",
"state": {
"branch": null,
"revision": "420d12cba8338b03993f73a72c1f6b70d5273cf2",
"version": "5.3.0"
}
}
]
},
"version": 1
}

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>grandfatherrock.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
</dict>
</plist>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:TapeDeck.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>

BIN
grandfatherrock/.DS_Store vendored Normal file

Binary file not shown.

View file

@ -0,0 +1,37 @@
//
// AppDelegate.swift
// grandfatherrock
//
// Created by Micah Gomez on 4/15/20.
// Copyright © 2020 Micah Gomez. All rights reserved.
//
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return true
}
// MARK: UISceneSession Lifecycle
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "ACBackgroundNightLarge.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ACBackgroundNightLarge-1.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ACBackgroundNightLarge-2.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "ACBackgroundDayLarge.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ACBackgroundDayLarge-1.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ACBackgroundDayLarge-2.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,122 @@
{
"images" : [
{
"filename" : "Icon-App-20x20@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "Icon-App-20x20@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "20x20"
},
{
"filename" : "Icon-App-29x29@1x.png",
"idiom" : "iphone",
"scale" : "1x",
"size" : "29x29"
},
{
"filename" : "Icon-App-29x29@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "Icon-App-29x29@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "29x29"
},
{
"filename" : "Icon-App-40x40@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "Icon-App-40x40@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "40x40"
},
{
"filename" : "Icon-App-60x60@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "60x60"
},
{
"filename" : "Icon-App-60x60@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "60x60"
},
{
"filename" : "Icon-App-20x20@1x.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "20x20"
},
{
"filename" : "Icon-App-20x20@2x.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "Icon-App-29x29@1x.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "29x29"
},
{
"filename" : "Icon-App-29x29@2x.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "Icon-App-40x40@1x.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "40x40"
},
{
"filename" : "Icon-App-40x40@2x.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "Icon-App-76x76@1x.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "76x76"
},
{
"filename" : "Icon-App-76x76@2x.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "76x76"
},
{
"filename" : "Icon-App-83.5x83.5@2x.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "83.5x83.5"
},
{
"filename" : "ItunesArtwork@2x.png",
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 953 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

View file

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "output-onlineimagetools.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "output-onlineimagetools-1.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "output-onlineimagetools-2.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 KiB

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "Screen Shot 2020-09-13 at 6.28.42 PM.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Screen Shot 2020-09-13 at 6.28.42 PM-1.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Screen Shot 2020-09-13 at 6.28.42 PM-2.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "woodpause-2.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "woodpause-1.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "woodpause.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "woodplay-2.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "woodplay-1.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "woodplay.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View file

@ -0,0 +1,47 @@
<?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" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17124"/>
<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>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="erM-YB-Vzk">
<rect key="frame" x="123.5" y="269.5" width="128" height="128"/>
<constraints>
<constraint firstAttribute="width" secondItem="erM-YB-Vzk" secondAttribute="height" multiplier="1:1" id="0TT-ZM-7es"/>
<constraint firstAttribute="width" constant="128" id="xCb-tz-RTW"/>
</constraints>
</imageView>
</subviews>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="erM-YB-Vzk" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="9Sw-2e-l2R"/>
<constraint firstItem="erM-YB-Vzk" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="Mtq-Xq-8oK"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="52" y="374.66266866566718"/>
</scene>
</scenes>
<resources>
<image name="LaunchImage" width="768" height="768"/>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>

View file

@ -0,0 +1,393 @@
<?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"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17124"/>
<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-->
<scene sceneID="hNz-n2-bh7">
<objects>
<viewController id="9pv-A4-QxB" customClass="FirstViewController" customModule="Nook_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="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1nc-vR-sG8">
<rect key="frame" x="-1" y="0.0" width="320" height="519"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ACBackgroundDay" translatesAutoresizingMaskIntoConstraints="NO" id="Ujw-y3-bt3">
<rect key="frame" x="-2" y="433" width="324" height="86"/>
<constraints>
<constraint firstAttribute="width" secondItem="Ujw-y3-bt3" secondAttribute="height" multiplier="64:17" id="d12-4g-usi"/>
</constraints>
</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"/>
<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"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="50"/>
<color key="tintColor" red="0.86256664989999998" green="0.69524472950000005" blue="0.2422021627" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<state key="normal" backgroundImage="play.circle" catalog="system"/>
<connections>
<action selector="play:" destination="9pv-A4-QxB" eventType="touchUpInside" id="3Tt-QE-VYp"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="hh:mm am" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontForContentSizeCategory="YES" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ERT-d4-fi5">
<rect key="frame" x="8" y="20" width="304" height="100"/>
<constraints>
<constraint firstAttribute="height" constant="100" id="F3L-jt-5KI"/>
</constraints>
<fontDescription key="fontDescription" name="FinkHeavy" family="FinkHeavy" pointSize="64"/>
<color key="textColor" red="0.86256664989999998" green="0.69524472950000005" blue="0.2422021627" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="wordWrap" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontForContentSizeCategory="YES" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gBq-iQ-6kU">
<rect key="frame" x="8" y="128" width="304" height="36"/>
<constraints>
<constraint firstAttribute="height" constant="36" id="bRW-kw-OkP"/>
</constraints>
<fontDescription key="fontDescription" name="FinkHeavy" family="FinkHeavy" pointSize="18"/>
<color key="textColor" red="0.86256664989999998" green="0.69524472950000005" blue="0.2422021627" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<viewLayoutGuide key="safeArea" id="PQr-Ze-W5v"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="1nc-vR-sG8" secondAttribute="trailing" id="2Vn-Qs-7Nb"/>
<constraint firstItem="Nou-CB-qnJ" firstAttribute="centerY" secondItem="tsR-hK-woN" secondAttribute="centerY" id="78a-Pt-jNF"/>
<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="Ujw-y3-bt3" firstAttribute="bottom" secondItem="PQr-Ze-W5v" secondAttribute="bottom" id="M3J-pn-Sam"/>
<constraint firstItem="Ujw-y3-bt3" firstAttribute="leading" secondItem="PQr-Ze-W5v" secondAttribute="leading" constant="-2" id="M4e-yJ-sli"/>
<constraint firstItem="gBq-iQ-6kU" firstAttribute="trailing" secondItem="ERT-d4-fi5" secondAttribute="trailing" id="Qlw-5S-SBe"/>
<constraint firstItem="ERT-d4-fi5" firstAttribute="top" secondItem="PQr-Ze-W5v" secondAttribute="top" constant="20" id="abF-4H-3Jo"/>
<constraint firstItem="gBq-iQ-6kU" firstAttribute="leading" secondItem="ERT-d4-fi5" secondAttribute="leading" id="e83-8N-8nC"/>
<constraint firstItem="Nou-CB-qnJ" firstAttribute="centerX" secondItem="tsR-hK-woN" secondAttribute="centerX" id="iDP-6C-9Nk"/>
<constraint firstItem="gBq-iQ-6kU" firstAttribute="top" secondItem="ERT-d4-fi5" secondAttribute="bottom" constant="8" symbolic="YES" id="suB-Xs-y8e"/>
<constraint firstItem="1nc-vR-sG8" firstAttribute="top" secondItem="tsR-hK-woN" secondAttribute="top" id="uQw-4j-WKL"/>
<constraint firstItem="Ujw-y3-bt3" firstAttribute="trailing" secondItem="PQr-Ze-W5v" secondAttribute="trailing" constant="2" id="zIw-Ko-SKq"/>
</constraints>
</view>
<tabBarItem key="tabBarItem" title="Home" image="play.fill" catalog="system" 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="sceneryImageView" destination="Ujw-y3-bt3" id="zJN-5h-eRp"/>
<outlet property="songLabel" destination="gBq-iQ-6kU" id="SyO-qx-0Rf"/>
<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"/>
</scene>
<!--Select Music-->
<scene sceneID="wg7-f3-ORb">
<objects>
<viewController title="Select Music" id="8rJ-Kc-sve" customClass="SecondViewController" customModule="Nook_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="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="MfW-5R-IkK" userLabel="Gradient View">
<rect key="frame" x="0.0" y="0.0" width="320" height="519"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<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="47" width="288" height="392"/>
<color key="backgroundColor" systemColor="systemFillColor"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleAspectFit" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="hourcell" rowHeight="80" id="4WK-Bk-wob" customClass="hourDataCell" customModule="Nook_Music" customModuleProvider="target">
<rect key="frame" x="0.0" y="28" width="288" height="80"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="4WK-Bk-wob" id="zgb-be-Y4R">
<rect key="frame" x="0.0" y="0.0" width="288" height="80"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Subtitle" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2R2-5b-J2i">
<rect key="frame" x="16" y="51" width="256" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="ceH-gs-wP7"/>
</constraints>
<fontDescription key="fontDescription" name="FinkHeavy" family="FinkHeavy" pointSize="17"/>
<color key="textColor" red="0.86256664989999998" green="0.69524472950000005" blue="0.2422021627" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Title" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TnY-SL-DcE">
<rect key="frame" x="16" y="12" width="256" height="31"/>
<fontDescription key="fontDescription" name="FinkHeavy" family="FinkHeavy" pointSize="32"/>
<color key="textColor" red="0.86256664989999998" green="0.69524472950000005" blue="0.2422021627" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstItem="TnY-SL-DcE" firstAttribute="top" secondItem="zgb-be-Y4R" secondAttribute="top" constant="12" id="7oj-qJ-yMk"/>
<constraint firstItem="2R2-5b-J2i" firstAttribute="leading" secondItem="TnY-SL-DcE" secondAttribute="leading" id="Tnu-dC-vta"/>
<constraint firstAttribute="bottom" secondItem="2R2-5b-J2i" secondAttribute="bottom" constant="12" id="X65-MT-lRF"/>
<constraint firstItem="TnY-SL-DcE" firstAttribute="trailing" secondItem="zgb-be-Y4R" secondAttribute="trailingMargin" id="fU6-5L-hIZ"/>
<constraint firstItem="TnY-SL-DcE" firstAttribute="leading" secondItem="zgb-be-Y4R" secondAttribute="leadingMargin" id="pXl-VA-AsQ"/>
<constraint firstItem="2R2-5b-J2i" firstAttribute="top" secondItem="TnY-SL-DcE" secondAttribute="bottom" constant="8" symbolic="YES" id="rGC-Xp-zFD"/>
<constraint firstItem="2R2-5b-J2i" firstAttribute="trailing" secondItem="TnY-SL-DcE" secondAttribute="trailing" id="yHY-hS-Ebe"/>
</constraints>
</tableViewCellContentView>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<inset key="separatorInset" minX="15" minY="0.0" maxX="15" maxY="0.0"/>
<connections>
<outlet property="hourLabel" destination="TnY-SL-DcE" id="31a-F7-XYW"/>
<outlet property="songLabel" destination="2R2-5b-J2i" id="S8P-g3-e5g"/>
</connections>
</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="8" width="288" height="32"/>
<segments>
<segment title="First"/>
<segment title="Second"/>
<segment title="Third"/>
<segment title="Fourth"/>
<segment title="Fifth"/>
</segments>
<color key="selectedSegmentTintColor" systemColor="systemFillColor"/>
<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="459" width="288" height="40"/>
<fontDescription key="fontDescription" name="FinkHeavy" family="FinkHeavy" pointSize="24"/>
<color key="tintColor" red="0.86256664989999998" green="0.69524472950000005" blue="0.2422021627" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<state key="normal" title="Developer Information">
<color key="titleShadowColor" systemColor="labelColor"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="size" keyPath="layer.shadowOffset">
<size key="value" width="0.0" height="0.0"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="layer.shadowOpacity">
<integer key="value" value="1"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<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"/>
<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" 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="8" id="cBr-Ja-CsG"/>
<constraint firstItem="vLK-eh-BHE" firstAttribute="bottom" secondItem="O1u-W8-tvY" secondAttribute="bottom" constant="-20" 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="20" id="lRh-DA-wzr"/>
</constraints>
</view>
<tabBarItem key="tabBarItem" title="Select Music" image="music.note.list" catalog="system" id="cPa-gy-q4n"/>
<connections>
<outlet property="gradientView" destination="MfW-5R-IkK" id="2mB-cs-cXs"/>
<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"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="4Nw-L8-lE0" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="748.125" y="359.15492957746477"/>
</scene>
<!--Tab Bar Controller-->
<scene sceneID="yl2-sM-qoP">
<objects>
<tabBarController id="49e-Tb-3d3" sceneMemberID="viewController">
<tabBar key="tabBar" contentMode="scaleToFill" barStyle="black" translucent="NO" backgroundImage="grass" itemPositioning="fill" 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" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="tintColor" red="0.86256664989999998" green="0.69524472950000005" blue="0.2422021627" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="selectedImageTintColor" red="0.86256664989999998" green="0.69524472950000005" blue="0.2422021627" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</tabBar>
<connections>
<segue destination="9pv-A4-QxB" kind="relationship" relationship="viewControllers" id="u7Y-xg-7CH"/>
<segue destination="8rJ-Kc-sve" kind="relationship" relationship="viewControllers" id="lzU-1b-eKA"/>
</connections>
</tabBarController>
<placeholder placeholderIdentifier="IBFirstResponder" id="HuB-VB-40B" sceneMemberID="firstResponder"/>
</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="568"/>
<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="ACBackgroundDay" width="750" height="200"/>
<image name="grass" width="530" height="93"/>
<image name="music.note.list" catalog="system" width="128" height="115"/>
<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>
<systemColor name="systemFillColor">
<color red="0.47058823529411764" green="0.47058823529411764" blue="0.50196078431372548" alpha="0.20000000000000001" colorSpace="custom" customColorSpace="sRGB"/>
</systemColor>
</resources>
</document>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>AC Tape Deck</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</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>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
<key>UISceneStoryboardFile</key>
<string>Main</string>
</dict>
</array>
</dict>
</dict>
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UIStatusBarTintParameters</key>
<dict>
<key>UINavigationBar</key>
<dict>
<key>Style</key>
<string>UIBarStyleDefault</string>
<key>Translucent</key>
<false/>
</dict>
</dict>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>

View file

@ -0,0 +1,53 @@
//
// SceneDelegate.swift
// grandfatherrock
//
// Created by Micah Gomez on 4/15/20.
// Copyright © 2020 Micah Gomez. All rights reserved.
//
import UIKit
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
guard let _ = (scene as? UIWindowScene) else { return }
}
func sceneDidDisconnect(_ scene: UIScene) {
// Called as the scene is being released by the system.
// This occurs shortly after the scene enters the background, or when its session is discarded.
// Release any resources associated with this scene that can be re-created the next time the scene connects.
// The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead).
}
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.
}
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).
}
func sceneWillEnterForeground(_ scene: UIScene) {
// Called as the scene transitions from the background to the foreground.
// Use this method to undo the changes made on entering the background.
}
func sceneDidEnterBackground(_ scene: UIScene) {
// Called as the scene transitions from the foreground to the background.
// Use this method to save data, release shared resources, and store enough scene-specific state information
// to restore the scene back to its current state.
}
}

View file

@ -0,0 +1,485 @@
//
// SecondViewController.swift
// grandfatherrock
//
// Created by Micah Gomez on 4/15/20.
// Copyright © 2020 Micah Gomez. All rights reserved.
//
import UIKit
import MediaPlayer
class hourDataCell : UITableViewCell {
@IBOutlet weak var hourLabel: UILabel!
@IBOutlet weak var songLabel : UILabel!
}
class SecondViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, MPMediaPickerControllerDelegate {
var selectedSong: String = ""
var tableHour: Int = 0
let mediaPicker = MPMediaPickerController(mediaTypes: MPMediaType.music)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 24
}
func tableView(_ tableView: UITableView,
accessoryButtonTappedForRowWith indexPath: IndexPath){
let errorAlert = UIAlertController(title: "Song Error", message: "This song doesn't seem to be available. Please make sure that you've properly selected a song and that it is in your music library.", preferredStyle: .alert)
// Create OK button
let OKAction = UIAlertAction(title: "OK", style: .default) { (action:UIAlertAction!) in
let helpAlert = UIAlertController(title: "Need Help Importing Music?", message: "A tutorial is available to help with importing music to use with this app. Would you like to view it?", preferredStyle: .alert)
// Create OK button
let HelpAction = UIAlertAction(title: "Yes Please!", style: .default) { (action:UIAlertAction!) in
if let url = URL(string: "https://youtu.be/YtOC5YFCt7E") {
UIApplication.shared.open(url)
}
}
helpAlert.addAction(HelpAction)
let NoHelpAction = UIAlertAction(title: "No Thanks", style: .default) { (action:UIAlertAction!) in
//print("Ok button tapped");
}
helpAlert.addAction(NoHelpAction)
// Present Dialog message
self.present(helpAlert, animated: true, completion:nil)
}
errorAlert.addAction(OKAction)
// Present Dialog message
self.present(errorAlert, animated: true, completion:nil)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "hourcell", for: indexPath) as! hourDataCell
var rowHour:Int = 12
var hourString = String(rowHour)
hourString.append(" AM")
if (indexPath.row < 12) && (indexPath.row > 0) {
rowHour = indexPath.row
hourString = String(rowHour)
hourString.append(" AM")
} else if (indexPath.row > 11) {
rowHour = indexPath.row
if (indexPath.row > 12){
rowHour = rowHour - 12
}
hourString = String(rowHour)
hourString.append(" PM")
}
cell.hourLabel?.text = hourString
switch GlobalVars.selectedMusicList {
case 0:
cell.songLabel?.text = GlobalVars.musicSelection0[indexPath.row]
if (GlobalVars.musicSelectionID0[indexPath.row] == 0){
cell.accessoryType = .detailButton
} else {
cell.accessoryType = .none
}
case 1:
cell.songLabel?.text = GlobalVars.musicSelection1[indexPath.row]
if (GlobalVars.musicSelectionID1[indexPath.row] == 0){
cell.accessoryType = .detailButton
} else {
cell.accessoryType = .none
}
case 2:
cell.songLabel?.text = GlobalVars.musicSelection2[indexPath.row]
if (GlobalVars.musicSelectionID2[indexPath.row] == 0){
cell.accessoryType = .detailButton
} else {
cell.accessoryType = .none
}
case 3:
cell.songLabel?.text = GlobalVars.musicSelection3[indexPath.row]
if (GlobalVars.musicSelectionID3[indexPath.row] == 0){
cell.accessoryType = .detailButton
} else {
cell.accessoryType = .none
}
case 4:
cell.songLabel?.text = GlobalVars.musicSelection4[indexPath.row]
if (GlobalVars.musicSelectionID4[indexPath.row] == 0){
cell.accessoryType = .detailButton
} else {
cell.accessoryType = .none
}
default:
cell.songLabel?.text = "uh oh!"
cell.accessoryType = .detailButton
}
return cell
}
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool
{
return true
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath){
if editingStyle == .delete
{
switch GlobalVars.selectedMusicList {
case 0:
GlobalVars.musicSelection0[indexPath.row] = ""
GlobalVars.musicSelectionID0[indexPath.row] = 0
case 1:
GlobalVars.musicSelection1[indexPath.row] = ""
GlobalVars.musicSelectionID1[indexPath.row] = 0
case 2:
GlobalVars.musicSelection2[indexPath.row] = ""
GlobalVars.musicSelectionID2[indexPath.row] = 0
case 3:
GlobalVars.musicSelection3[indexPath.row] = ""
GlobalVars.musicSelectionID3[indexPath.row] = 0
case 4:
GlobalVars.musicSelection4[indexPath.row] = ""
GlobalVars.musicSelectionID4[indexPath.row] = 0
default:
GlobalVars.musicSelection0[indexPath.row] = ""
GlobalVars.musicSelectionID0[indexPath.row] = 0
}
hoursTable.reloadData()
if ((MPMusicPlayerController.applicationMusicPlayer.playbackState == MPMusicPlaybackState.playing) && (tableHour == GlobalVars.hour)){
musicHandler.updateMusic()
}
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
//let mediaPicker = MPMediaPickerController(mediaTypes: MPMediaType.music)
tableHour = indexPath.row
//print(tableHour)
present(mediaPicker, animated: true, completion: nil)
/*if (selectedSong != "") {
GlobalVars.musicSelection[indexPath.row] = selectedSong
selectedSong = ""
}
self.hoursTable.reloadData()*/
}
let defaults = UserDefaults.standard
/*func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return type.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return type[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
//print(type[row])
//print(row)
defaults.set(type[row], forKey: "selectedTitle")
defaults.set(row, forKey: "titleNo")
GlobalVars.selectedGame = type[row]
GlobalVars.selectedGameNo = row
GlobalVars.titleName = type[row]
musicHandler.updateMusic()
nowPlaying.text = GlobalVars.titleName! + " - " + String(GlobalVars.hour)
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}*/
func mediaPicker(_ mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection){
//let musicPlayer = MPMusicPlayerController.applicationMusicPlayer
//musicPlayer.setQueue(with: mediaItemCollection)
////print(mediaItemCollection)
//musicPlayer.play()
//print("selected song")
selectedSong = String(mediaItemCollection.items[0].title ?? "NOTHING")
//print(selectedSong)
//print(GlobalVars.selectedMusicList)
switch GlobalVars.selectedMusicList {
case 0:
GlobalVars.musicSelectionID0[tableHour] = mediaItemCollection.items[0].persistentID
GlobalVars.musicSelection0[tableHour] = selectedSong
case 1:
GlobalVars.musicSelectionID1[tableHour] = mediaItemCollection.items[0].persistentID
GlobalVars.musicSelection1[tableHour] = selectedSong
case 2:
GlobalVars.musicSelectionID2[tableHour] = mediaItemCollection.items[0].persistentID
GlobalVars.musicSelection2[tableHour] = selectedSong
case 3:
GlobalVars.musicSelectionID3[tableHour] = mediaItemCollection.items[0].persistentID
GlobalVars.musicSelection3[tableHour] = selectedSong
case 4:
GlobalVars.musicSelectionID4[tableHour] = mediaItemCollection.items[0].persistentID
GlobalVars.musicSelection4[tableHour] = selectedSong
default:
GlobalVars.musicSelectionID0[tableHour] = mediaItemCollection.items[0].persistentID
GlobalVars.musicSelection0[tableHour] = selectedSong
}
//GlobalVars.musicSelectionID1[tableHour] = mediaItemCollection.items[0].persistentID
//GlobalVars.musicSelection1[tableHour] = selectedSong
if ((MPMusicPlayerController.applicationMusicPlayer.playbackState == MPMusicPlaybackState.playing) && (tableHour == GlobalVars.hour)){
musicHandler.updateMusic()
}
hoursTable.reloadData()
dismiss(animated: true, completion: nil)
}
func mediaPickerDidCancel(_ mediaPicker: MPMediaPickerController) {
dismiss(animated: true, completion: nil)
hoursTable.reloadData()
}
@IBOutlet var hoursTable: UITableView!
@IBOutlet var gradientView: UIView!
@IBOutlet var selectListControl: UISegmentedControl!
@IBAction func selectListControlChanged(_ sender: Any) {
MPMusicPlayerController.applicationMusicPlayer.stop()
GlobalVars.selectedMusicList = selectListControl.selectedSegmentIndex
//print(GlobalVars.selectedMusicList)
hoursTable.reloadData()
/*var noSongs = false
switch GlobalVars.selectedMusicList {
case 0:
for i in GlobalVars.musicSelectionID0 {
if (i == 0){
noSongs = true
}
}
case 1:
for i in GlobalVars.musicSelectionID1 {
if (i == 0){
noSongs = true
}
}
case 2:
for i in GlobalVars.musicSelectionID2 {
if (i == 0){
noSongs = true
}
}
case 3:
for i in GlobalVars.musicSelectionID3 {
if (i == 0){
noSongs = true
}
}
case 4:
for i in GlobalVars.musicSelectionID4 {
if (i == 0){
noSongs = true
}
}
default:
for i in GlobalVars.musicSelectionID0 {
if (i == 0){
noSongs = true
}
}
}
if noSongs {
MPMusicPlayerController.applicationMusicPlayer.pause()
//print("pausing")
}*/
musicHandler.updateMusic()
//print("updating")
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// TODO REQUEST PERMISSION FIRST
mediaPicker.delegate = self
mediaPicker.allowsPickingMultipleItems = false
//present(mediaPicker, animated: true, completion: nil)
//selectedSong = ""
//pickerView.selectRow(2, inComponent: 0, animated: true)
//pickerView.dataSource = self
//pickerView.delegate = self
hoursTable.delegate = self
hoursTable.dataSource = self
selectListControl.selectedSegmentIndex = GlobalVars.selectedMusicList
}
override func viewWillAppear(_ animated: Bool) {
let prevHour = GlobalVars.hour
GlobalVars.hour = Calendar.current.component(.hour, from: Date())
if GlobalVars.hour != prevHour {
musicHandler.updateMusic()
}
// 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)
switch GlobalVars.selectedMusicList {
case 0:
//print(GlobalVars.musicSelectionID0)
print(GlobalVars.musicSelection0)
case 1:
//print(GlobalVars.musicSelectionID1)
print(GlobalVars.musicSelection1)
case 2:
//print(GlobalVars.musicSelectionID2)
print(GlobalVars.musicSelection2)
case 3:
//print(GlobalVars.musicSelectionID3)
print(GlobalVars.musicSelection3)
case 4:
//print(GlobalVars.musicSelectionID4)
print(GlobalVars.musicSelection4)
default:
//print(GlobalVars.musicSelectionID0)
print(GlobalVars.musicSelection0)
}
}
override func viewWillDisappear(_ animated: Bool) {
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)
}
do {
try defaults.setObject(GlobalVars.selectedMusicList, forKey: "savedSelectedMusicList")
} catch {
//print(error.localizedDescription)
}
}
override func viewDidDisappear(_ animated: Bool) {
gradientView.layer.sublayers?.forEach { $0.removeFromSuperlayer() }
}
@IBAction func visitWebsite(_ sender: Any) {
let NotificationVC = self.storyboard?.instantiateViewController(withIdentifier: "ThirdViewController") as! UIViewController
self.present(NotificationVC, animated: true, completion: nil)
}
}

View file

@ -0,0 +1,50 @@
//
// SecondViewController.swift
// grandfatherrock
//
// Created by Micah Gomez on 4/15/20.
// Copyright © 2020 Micah Gomez. All rights reserved.
//
import UIKit
import MediaPlayer
class ThirdViewController: UIViewController {
@IBAction func websiteButton(_ sender: Any) {
if let url = URL(string: "https://micahpgomez.dev") {
UIApplication.shared.open(url)
}
}
@IBAction func supportEmail(_ sender: Any) {
if let url = URL(string: "mailto:support@micahpgomez.dev") {
UIApplication.shared.open(url)
}
}
@IBAction func smallTipButton(_ sender: Any) {
IAPHandler.shared.purchaseMyProduct(index: 0)
}
@IBAction func mediumTipButton(_ sender: Any) {
IAPHandler.shared.purchaseMyProduct(index: 1)
}
@IBAction func largeTipButton(_ sender: Any) {
IAPHandler.shared.purchaseMyProduct(index: 2)
}
let defaults = UserDefaults.standard
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//print("view loaded!")
}
}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
</plist>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>

View file

@ -0,0 +1,34 @@
//
// grandfatherrockTests.swift
// grandfatherrockTests
//
// Created by Micah Gomez on 4/15/20.
// Copyright © 2020 Micah Gomez. All rights reserved.
//
import XCTest
@testable import grandfatherrock
class grandfatherrockTests: XCTestCase {
override func setUpWithError() throws {
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDownWithError() throws {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
func testExample() throws {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testPerformanceExample() throws {
// This is an example of a performance test case.
self.measure {
// Put the code you want to measure the time of here.
}
}
}

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>

View file

@ -0,0 +1,43 @@
//
// grandfatherrockUITests.swift
// grandfatherrockUITests
//
// Created by Micah Gomez on 4/15/20.
// Copyright © 2020 Micah Gomez. All rights reserved.
//
import XCTest
class grandfatherrockUITests: XCTestCase {
override func setUpWithError() throws {
// Put setup code here. This method is called before the invocation of each test method in the class.
// In UI tests it is usually best to stop immediately when a failure occurs.
continueAfterFailure = false
// In UI tests its important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
}
override func tearDownWithError() throws {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
func testExample() throws {
// UI tests must launch the application that they test.
let app = XCUIApplication()
app.launch()
// Use recording to get started writing UI tests.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testLaunchPerformance() throws {
if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) {
// This measures how long it takes to launch your application.
measure(metrics: [XCTOSSignpostMetric.applicationLaunch]) {
XCUIApplication().launch()
}
}
}
}