Revert "Merge branch 'master' of https://github.com/MPG13/Nook-Music"
This reverts commit9edf3dc531
, reversing changes made to21509d9bf6
.
|
@ -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 */;
|
||||
}
|
|
@ -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>
|
1027
grandfatherrock.xcodeproj/project.pbxproj
Normal file
7
grandfatherrock.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:grandfatherrock.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
BIN
grandfatherrock/Assets.xcassets/Header.imageset/Animal_Crossing_Logo.png
vendored
Normal file
After Width: | Height: | Size: 95 KiB |
|
@ -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"
|
||||
}
|
|
@ -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"
|
||||
}
|
BIN
grandfatherrock/Assets.xcassets/bg.imageset/tumblr_nw9ifvY4vK1s1lku3o2_1280-1.jpg
vendored
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
grandfatherrock/Assets.xcassets/bg.imageset/tumblr_nw9ifvY4vK1s1lku3o2_1280-2.jpg
vendored
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
grandfatherrock/Assets.xcassets/bg.imageset/tumblr_nw9ifvY4vK1s1lku3o2_1280.jpg
vendored
Normal file
After Width: | Height: | Size: 78 KiB |
12
grandfatherrock/Assets.xcassets/first.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "first.pdf"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
BIN
grandfatherrock/Assets.xcassets/first.imageset/first.pdf
vendored
Normal file
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 1.1 MiB |
12
grandfatherrock/Assets.xcassets/second.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "second.pdf"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
BIN
grandfatherrock/Assets.xcassets/second.imageset/second.pdf
vendored
Normal 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>
|
||||
|
|
|
@ -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
|
||||
}}}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|