Merge branch 'master' of https://github.com/MPG13/Nook-Music
631
TapeDeck.xcodeproj/project.pbxproj
Normal file
|
@ -0,0 +1,631 @@
|
||||||
|
// !$*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 */;
|
||||||
|
}
|
7
TapeDeck.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:/Users/micahgomez/Documents/Programming/iOS/grandfatherrockAnyMusic/TapeDeck.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
|
@ -1,7 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Workspace
|
|
||||||
version = "1.0">
|
|
||||||
<FileRef
|
|
||||||
location = "self:grandfatherrock.xcodeproj">
|
|
||||||
</FileRef>
|
|
||||||
</Workspace>
|
|
Before Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 78 KiB |
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"filename" : "first.pdf"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"version" : 1,
|
|
||||||
"author" : "xcode"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,17 +1,17 @@
|
||||||
{
|
{
|
||||||
"images" : [
|
"images" : [
|
||||||
{
|
{
|
||||||
"filename" : "tumblr_nw9ifvY4vK1s1lku3o2_1280.jpg",
|
"filename" : "woodpause-2.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "1x"
|
"scale" : "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "tumblr_nw9ifvY4vK1s1lku3o2_1280-1.jpg",
|
"filename" : "woodpause-1.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "tumblr_nw9ifvY4vK1s1lku3o2_1280-2.jpg",
|
"filename" : "woodpause.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "3x"
|
"scale" : "3x"
|
||||||
}
|
}
|
BIN
grandfatherrock/Assets.xcassets/pause.imageset/woodpause-1.png
vendored
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
grandfatherrock/Assets.xcassets/pause.imageset/woodpause-2.png
vendored
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
grandfatherrock/Assets.xcassets/pause.imageset/woodpause.png
vendored
Normal file
After Width: | Height: | Size: 1.2 MiB |
|
@ -1,15 +1,17 @@
|
||||||
{
|
{
|
||||||
"images" : [
|
"images" : [
|
||||||
{
|
{
|
||||||
"filename" : "Animal_Crossing_Logo.png",
|
"filename" : "woodplay-2.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "1x"
|
"scale" : "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "woodplay-1.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "woodplay.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "3x"
|
"scale" : "3x"
|
||||||
}
|
}
|
BIN
grandfatherrock/Assets.xcassets/play.imageset/woodplay-1.png
vendored
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
grandfatherrock/Assets.xcassets/play.imageset/woodplay-2.png
vendored
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
grandfatherrock/Assets.xcassets/play.imageset/woodplay.png
vendored
Normal file
After Width: | Height: | Size: 1.1 MiB |
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"filename" : "second.pdf"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"version" : 1,
|
|
||||||
"author" : "xcode"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,138 +1,177 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<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">
|
<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="retina6_1" orientation="portrait" appearance="light"/>
|
<device id="retina4_0" orientation="portrait" appearance="light"/>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17124"/>
|
||||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
<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"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<customFonts key="customFonts">
|
||||||
|
<array key="FinkHeavy.ttf">
|
||||||
|
<string>FinkHeavy</string>
|
||||||
|
</array>
|
||||||
|
</customFonts>
|
||||||
<scenes>
|
<scenes>
|
||||||
<!--First-->
|
<!--Home-->
|
||||||
<scene sceneID="hNz-n2-bh7">
|
<scene sceneID="hNz-n2-bh7">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController id="9pv-A4-QxB" customClass="FirstViewController" customModule="ACNH_Music" customModuleProvider="target" sceneMemberID="viewController">
|
<viewController id="9pv-A4-QxB" customClass="FirstViewController" customModule="Nook_Music" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
<view key="view" contentMode="scaleToFill" id="tsR-hK-woN">
|
<view key="view" contentMode="scaleToFill" id="tsR-hK-woN">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="519"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="bg" translatesAutoresizingMaskIntoConstraints="NO" id="97A-Tb-Qsv">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1nc-vR-sG8">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="414" height="813"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="519"/>
|
||||||
</imageView>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Header" translatesAutoresizingMaskIntoConstraints="NO" id="c8b-AM-xhS">
|
</view>
|
||||||
<rect key="frame" x="87" y="44" width="240" height="128"/>
|
<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"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="240" id="00q-8w-g1n"/>
|
<constraint firstAttribute="height" constant="100" id="F3L-jt-5KI"/>
|
||||||
<constraint firstAttribute="height" constant="128" id="5dI-4S-c46"/>
|
|
||||||
</constraints>
|
</constraints>
|
||||||
</imageView>
|
<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>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Nou-CB-qnJ">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Nou-CB-qnJ">
|
||||||
<rect key="frame" x="179.5" y="421" width="55" height="54"/>
|
<rect key="frame" x="95" y="195" width="130" height="129"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="55" id="6cz-HP-FRR"/>
|
<constraint firstAttribute="width" constant="130" id="1c8-JO-es0"/>
|
||||||
<constraint firstAttribute="width" constant="55" id="Eyz-wg-cHP"/>
|
<constraint firstAttribute="width" secondItem="Nou-CB-qnJ" secondAttribute="height" multiplier="1:1" id="3mw-Za-8Hw"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="50"/>
|
||||||
<state key="normal" backgroundImage="play.circle" catalog="system"/>
|
<state key="normal" backgroundImage="play.circle" catalog="system"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="play:" destination="9pv-A4-QxB" eventType="touchUpInside" id="3Tt-QE-VYp"/>
|
<action selector="play:" destination="9pv-A4-QxB" eventType="touchUpInside" id="3Tt-QE-VYp"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
|
||||||
<constraints>
|
|
||||||
<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"/>
|
<viewLayoutGuide key="safeArea" id="PQr-Ze-W5v"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="1nc-vR-sG8" secondAttribute="trailing" id="2Vn-Qs-7Nb"/>
|
||||||
|
<constraint firstItem="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"/>
|
||||||
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<tabBarItem key="tabBarItem" title="First" image="first" id="acW-dT-cKf"/>
|
<tabBarItem key="tabBarItem" title="Home" image="play.fill" catalog="system" id="acW-dT-cKf"/>
|
||||||
<connections>
|
<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="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>
|
</connections>
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="W5J-7L-Pyd" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="W5J-7L-Pyd" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="749.27536231884062" y="-320.08928571428572"/>
|
<point key="canvasLocation" x="748.125" y="-321.12676056338029"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Second-->
|
<!--Select Music-->
|
||||||
<scene sceneID="wg7-f3-ORb">
|
<scene sceneID="wg7-f3-ORb">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController id="8rJ-Kc-sve" customClass="SecondViewController" customModule="ACNH_Music" customModuleProvider="target" sceneMemberID="viewController">
|
<viewController title="Select Music" id="8rJ-Kc-sve" customClass="SecondViewController" customModule="Nook_Music" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
<view key="view" contentMode="scaleToFill" id="QS5-Rx-YEW">
|
<view key="view" contentMode="scaleToFill" id="QS5-Rx-YEW">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="519"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<pickerView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sso-15-Cbi">
|
<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="0.0" y="131" width="414" height="612"/>
|
<rect key="frame" x="16" y="59" width="288" height="414"/>
|
||||||
</pickerView>
|
<color key="backgroundColor" white="0.66666666669999997" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<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">
|
<prototypes>
|
||||||
<rect key="frame" x="20" y="78" width="374" height="45"/>
|
<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">
|
||||||
<constraints>
|
<rect key="frame" x="0.0" y="28" width="288" height="55.5"/>
|
||||||
<constraint firstAttribute="height" constant="45" id="poI-WG-n1S"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</constraints>
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="5AF-Zr-dWg" id="pj0-Tk-AlP">
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
<rect key="frame" x="0.0" y="0.0" width="288" height="55.5"/>
|
||||||
<nil key="textColor"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<nil key="highlightedColor"/>
|
<subviews>
|
||||||
</label>
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="7Ay-o2-vni">
|
||||||
<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="16" y="10" width="33" height="20.5"/>
|
||||||
<rect key="frame" x="20" y="44" width="374" height="26"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<constraints>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<constraint firstAttribute="height" constant="26" id="IPr-7Z-G1X"/>
|
<nil key="textColor"/>
|
||||||
</constraints>
|
<nil key="highlightedColor"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
</label>
|
||||||
<nil key="textColor"/>
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Subtitle" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="g7Z-Mf-X37">
|
||||||
<nil key="highlightedColor"/>
|
<rect key="frame" x="16" y="31.5" width="44" height="14.5"/>
|
||||||
</label>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vLK-eh-BHE">
|
<fontDescription key="fontDescription" type="system" pointSize="12"/>
|
||||||
<rect key="frame" x="20" y="751" width="374" height="62"/>
|
<nil key="textColor"/>
|
||||||
<constraints>
|
<nil key="highlightedColor"/>
|
||||||
<constraint firstAttribute="height" constant="62" id="Fb5-OH-nv2"/>
|
</label>
|
||||||
</constraints>
|
</subviews>
|
||||||
<state key="normal" title="Visit My Website"/>
|
</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"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="visitWebsite:" destination="8rJ-Kc-sve" eventType="touchUpInside" id="IDz-Ml-7iY"/>
|
<action selector="visitWebsite:" destination="8rJ-Kc-sve" eventType="touchUpInside" id="IDz-Ml-7iY"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
|
||||||
<constraints>
|
|
||||||
<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"/>
|
<viewLayoutGuide key="safeArea" id="O1u-W8-tvY"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="EyG-9P-mxm" firstAttribute="leading" secondItem="tNe-0A-XZP" secondAttribute="leading" id="0Ug-kD-Es8"/>
|
||||||
|
<constraint firstItem="O1u-W8-tvY" firstAttribute="trailing" secondItem="tNe-0A-XZP" secondAttribute="trailing" constant="16" id="7D2-6v-kz9"/>
|
||||||
|
<constraint firstItem="EyG-9P-mxm" firstAttribute="trailing" secondItem="tNe-0A-XZP" secondAttribute="trailing" id="D5N-RQ-J49"/>
|
||||||
|
<constraint firstItem="vLK-eh-BHE" firstAttribute="leading" secondItem="tNe-0A-XZP" secondAttribute="leading" id="MYc-UO-KEr"/>
|
||||||
|
<constraint firstItem="EyG-9P-mxm" firstAttribute="top" secondItem="tNe-0A-XZP" secondAttribute="bottom" constant="8" 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"/>
|
||||||
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<tabBarItem key="tabBarItem" title="Second" image="second" id="cPa-gy-q4n"/>
|
<tabBarItem key="tabBarItem" title="Select Music" image="music.note.list" catalog="system" id="cPa-gy-q4n"/>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="nowPlaying" destination="foD-1t-xIm" id="s92-ip-7GI"/>
|
<outlet property="hoursTable" destination="EyG-9P-mxm" id="nKa-0x-NrF"/>
|
||||||
<outlet property="pickerView" destination="sso-15-Cbi" id="nO9-ZE-D3p"/>
|
<outlet property="selectListControl" destination="tNe-0A-XZP" id="Y9A-1K-Qj9"/>
|
||||||
<outletCollection property="pickerView" destination="sso-15-Cbi" collectionClass="NSMutableArray" id="D9W-Up-1mz"/>
|
<segue destination="8LK-WS-C3a" kind="presentation" modalPresentationStyle="automatic" id="4kl-sn-3de"/>
|
||||||
</connections>
|
</connections>
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="4Nw-L8-lE0" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="4Nw-L8-lE0" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="749.27536231884062" y="359.59821428571428"/>
|
<point key="canvasLocation" x="748.125" y="359.15492957746477"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Tab Bar Controller-->
|
<!--Tab Bar Controller-->
|
||||||
<scene sceneID="yl2-sM-qoP">
|
<scene sceneID="yl2-sM-qoP">
|
||||||
<objects>
|
<objects>
|
||||||
<tabBarController id="49e-Tb-3d3" sceneMemberID="viewController">
|
<tabBarController id="49e-Tb-3d3" sceneMemberID="viewController">
|
||||||
<tabBar key="tabBar" contentMode="scaleToFill" id="W28-zg-YXA">
|
<tabBar key="tabBar" contentMode="scaleToFill" translucent="NO" id="W28-zg-YXA">
|
||||||
<rect key="frame" x="0.0" y="975" width="768" height="49"/>
|
<rect key="frame" x="0.0" y="975" width="768" height="49"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<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"/>
|
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
@ -146,12 +185,146 @@
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="0.0" y="0.0"/>
|
<point key="canvasLocation" x="0.0" y="0.0"/>
|
||||||
</scene>
|
</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>
|
</scenes>
|
||||||
<resources>
|
<resources>
|
||||||
<image name="Header" width="300" height="206"/>
|
<image name="music.note.list" catalog="system" width="128" height="115"/>
|
||||||
<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.circle" catalog="system" width="128" height="121"/>
|
||||||
<image name="second" width="30" height="30"/>
|
<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>
|
||||||
</resources>
|
</resources>
|
||||||
</document>
|
</document>
|
||||||
|
|
|
@ -8,74 +8,237 @@
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import AVFoundation
|
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{
|
public class musicHandler{
|
||||||
@objc class func updateMusic(){
|
@objc class func updateMusic(){
|
||||||
|
|
||||||
let defaults = UserDefaults.standard
|
|
||||||
|
|
||||||
timer.invalidate()
|
timer.invalidate()
|
||||||
|
|
||||||
prevVol = Double(audioPlayer.volume)
|
|
||||||
audioPlayer.setVolume(0, fadeDuration: 3)
|
|
||||||
print("updating song")
|
print("updating song")
|
||||||
|
|
||||||
GlobalVars.hour = Calendar.current.component(.hour, from: Date())
|
GlobalVars.hour = Calendar.current.component(.hour, from: Date())
|
||||||
if(GlobalVars.hour<10){
|
|
||||||
hourPadding = "0"
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
hourPadding = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
switch defaults.integer(forKey: "titleNo") {
|
//song = GlobalVars.titleCode + hourPadding + String(GlobalVars.hour)
|
||||||
case 0:
|
//print(song)
|
||||||
GlobalVars.titleCode = "acnh"
|
let musicPlayer = MPMusicPlayerController.applicationMusicPlayer
|
||||||
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{
|
do{
|
||||||
|
|
||||||
audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: song, ofType: "mp3")!))
|
var mediaPredicate = MPMediaPredicate()
|
||||||
audioPlayer.prepareToPlay()
|
switch GlobalVars.selectedMusicList {
|
||||||
audioPlayer.numberOfLoops = -1
|
case 0:
|
||||||
|
if(GlobalVars.musicSelectionID0[GlobalVars.hour] != 0){
|
||||||
let audioSession = AVAudioSession.sharedInstance()
|
mediaPredicate = MPMediaPropertyPredicate(value: GlobalVars.musicSelectionID0[GlobalVars.hour], forProperty: "persistentID")
|
||||||
do{
|
} else {
|
||||||
try audioSession.setCategory(.playback, mode: .default)
|
var searchID:UInt64 = 0
|
||||||
try audioSession.setActive(true)
|
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()
|
||||||
}
|
}
|
||||||
catch{
|
if(MPMusicPlayerController.applicationMusicPlayer.playbackState == MPMusicPlaybackState.playing){
|
||||||
print(error)
|
musicPlayer.play()
|
||||||
}
|
}
|
||||||
if(GlobalVars.musicStarted){
|
|
||||||
audioPlayer.play()
|
|
||||||
}
|
|
||||||
audioPlayer.setVolume(Float(prevVol), fadeDuration: 1)
|
|
||||||
|
|
||||||
if(Calendar.current.component(.minute, from: Date()) == 0){
|
if(Calendar.current.component(.minute, from: Date()) == 0){
|
||||||
date = Date().addingTimeInterval(3600)
|
date = Date().addingTimeInterval(3600)
|
||||||
}
|
} else{
|
||||||
else{
|
|
||||||
let currentMinute = Calendar.current.component(.minute, from: Date())
|
let currentMinute = Calendar.current.component(.minute, from: Date())
|
||||||
let currentSeconds = Calendar.current.component(.second, from: Date())
|
let currentSeconds = Calendar.current.component(.second, from: Date())
|
||||||
let timeTillTopOfTheHour = 3600 - currentSeconds - (currentMinute * 60)
|
let timeTillTopOfTheHour = 3600 - currentSeconds - (currentMinute * 60)
|
||||||
date = Date().addingTimeInterval(TimeInterval(timeTillTopOfTheHour))
|
date = Date().addingTimeInterval(TimeInterval(timeTillTopOfTheHour))
|
||||||
}
|
}
|
||||||
|
|
||||||
print(date)
|
print(date)
|
||||||
|
|
||||||
timer = Timer(fireAt: date, interval: 0, target: self, selector: #selector(updateMusic), userInfo: nil, repeats: false)
|
timer = Timer(fireAt: date, interval: 0, target: self, selector: #selector(updateMusic), userInfo: nil, repeats: false)
|
||||||
RunLoop.main.add(timer, forMode: RunLoop.Mode.common)
|
RunLoop.main.add(timer, forMode: RunLoop.Mode.common)
|
||||||
|
|
||||||
|
@ -83,21 +246,24 @@ public class musicHandler{
|
||||||
}
|
}
|
||||||
|
|
||||||
struct GlobalVars {
|
struct GlobalVars {
|
||||||
static var selectedGame = ""
|
static var musicSelectionID0:[UInt64] = [UInt64]()
|
||||||
static var selectedGameNo = 0
|
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 musicStarted = false
|
||||||
static var titleCode = "acnh"
|
|
||||||
static var titleName = UserDefaults.standard.string(forKey: "selectedTitle")
|
static var titleName = UserDefaults.standard.string(forKey: "selectedTitle")
|
||||||
static var hour = Calendar.current.component(.hour, from: Date())
|
static var hour = Calendar.current.component(.hour, from: Date())
|
||||||
}
|
}
|
||||||
|
|
||||||
var audioPlayer = AVAudioPlayer()
|
|
||||||
|
|
||||||
var song = "acnh00"
|
|
||||||
//var hour = 0
|
|
||||||
var i = 0
|
var i = 0
|
||||||
|
|
||||||
//var calendar = Calendar.current
|
|
||||||
var date = Date()
|
var date = Date()
|
||||||
var timer = Timer()
|
var timer = Timer()
|
||||||
let currentSeconds = Calendar.current.component(.second, from: Date())
|
let currentSeconds = Calendar.current.component(.second, from: Date())
|
||||||
|
@ -105,63 +271,198 @@ let currentMinute = Calendar.current.component(.minute, from: Date())
|
||||||
let timeTillTopOfTheHour = 3600 - currentSeconds - (currentMinute * 60)
|
let timeTillTopOfTheHour = 3600 - currentSeconds - (currentMinute * 60)
|
||||||
var hourPadding = ""
|
var hourPadding = ""
|
||||||
var prevVol = 0.0
|
var prevVol = 0.0
|
||||||
//var titleCode = "acnh"
|
|
||||||
|
|
||||||
class FirstViewController: UIViewController{
|
class FirstViewController: UIViewController{
|
||||||
|
|
||||||
let defaults = UserDefaults.standard
|
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() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
// Do any additional setup after loading the view.
|
// 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")){
|
if(!defaults.bool(forKey: "didRun")){
|
||||||
defaults.set("New Horizons", forKey: "selectedTitle")
|
defaults.set("New Horizons", forKey: "selectedTitle")
|
||||||
defaults.set(0, forKey: "titleNo")
|
defaults.set(0, forKey: "titleNo")
|
||||||
defaults.set(true, forKey: "didRun")
|
//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")
|
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")
|
||||||
}
|
}
|
||||||
|
|
||||||
GlobalVars.selectedGame = defaults.string(forKey: "selectedTitle")!
|
|
||||||
GlobalVars.selectedGameNo = defaults.integer(forKey: "titleNo")
|
|
||||||
|
|
||||||
print(currentSeconds)
|
print(currentSeconds)
|
||||||
print(currentMinute)
|
print(currentMinute)
|
||||||
|
|
||||||
print(timeTillTopOfTheHour)
|
print(timeTillTopOfTheHour)
|
||||||
|
|
||||||
|
//print(GlobalVars.selectedSong)
|
||||||
|
|
||||||
GlobalVars.hour = Calendar.current.component(.hour, from: Date())
|
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))
|
date = Date().addingTimeInterval(TimeInterval(timeTillTopOfTheHour))
|
||||||
print(date)
|
print(date)
|
||||||
timer = Timer(fireAt: date, interval: 0, target: musicHandler.self, selector: #selector(musicHandler.updateMusic), userInfo: nil, repeats: false)
|
timer = Timer(fireAt: date, interval: 0, target: musicHandler.self, selector: #selector(musicHandler.updateMusic), userInfo: nil, repeats: false)
|
||||||
RunLoop.main.add(timer, forMode: .common)
|
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{
|
||||||
do{
|
|
||||||
|
|
||||||
audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: song, ofType: "mp3")!))
|
audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: song, ofType: "mp3")!))
|
||||||
audioPlayer.prepareToPlay()
|
audioPlayer.prepareToPlay()
|
||||||
|
@ -177,31 +478,243 @@ class FirstViewController: UIViewController{
|
||||||
}
|
}
|
||||||
catch{
|
catch{
|
||||||
print(error)
|
print(error)
|
||||||
|
}*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBOutlet var gradientView: UIView!
|
||||||
|
|
||||||
|
override func viewDidAppear(_ animated: Bool) {
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
defaults.set(true, forKey: "didRun")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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 weak var controlButton: UIButton!
|
||||||
|
|
||||||
|
@IBOutlet var PlayButtonSize: NSLayoutConstraint!
|
||||||
|
|
||||||
|
|
||||||
@IBAction func play(_ sender: Any) {
|
@IBAction func play(_ sender: Any) {
|
||||||
if(!GlobalVars.musicStarted){
|
if(!GlobalVars.musicStarted){
|
||||||
|
|
||||||
|
|
||||||
GlobalVars.musicStarted = true
|
GlobalVars.musicStarted = true
|
||||||
|
musicHandler.updateMusic()
|
||||||
audioPlayer.play()
|
let musicPlayer = MPMusicPlayerController.applicationMusicPlayer
|
||||||
|
musicPlayer.play()
|
||||||
GlobalVars.musicStarted = true
|
GlobalVars.musicStarted = true
|
||||||
controlButton.setBackgroundImage(UIImage(systemName: "pause.circle"), for: UIControl.State.normal)
|
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{
|
else{
|
||||||
audioPlayer.pause()
|
let musicPlayer = MPMusicPlayerController.applicationMusicPlayer
|
||||||
|
musicPlayer.pause()
|
||||||
GlobalVars.musicStarted = false
|
GlobalVars.musicStarted = false
|
||||||
controlButton.setBackgroundImage(UIImage(systemName: "play.circle"), for: UIControl.State.normal)
|
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(){
|
/*@objc func updateMusic(){
|
||||||
|
|
||||||
//timer.invalidate()
|
//timer.invalidate()
|
||||||
|
@ -252,3 +765,115 @@ 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,6 +4,8 @@
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
|
<key>CFBundleDisplayName</key>
|
||||||
|
<string>AC Tape Deck</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
|
@ -18,8 +20,16 @@
|
||||||
<string>$(MARKETING_VERSION)</string>
|
<string>$(MARKETING_VERSION)</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1</string>
|
<string>1</string>
|
||||||
|
<key>LSApplicationCategoryType</key>
|
||||||
|
<string>public.app-category.music</string>
|
||||||
<key>LSRequiresIPhoneOS</key>
|
<key>LSRequiresIPhoneOS</key>
|
||||||
<true/>
|
<true/>
|
||||||
|
<key>NSAppleMusicUsageDescription</key>
|
||||||
|
<string>To select songs for each hour</string>
|
||||||
|
<key>UIAppFonts</key>
|
||||||
|
<array>
|
||||||
|
<string>FinkHeavyttf</string>
|
||||||
|
</array>
|
||||||
<key>UIApplicationSceneManifest</key>
|
<key>UIApplicationSceneManifest</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>UIApplicationSupportsMultipleScenes</key>
|
<key>UIApplicationSupportsMultipleScenes</key>
|
||||||
|
|
|
@ -30,13 +30,11 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||||
func sceneDidBecomeActive(_ scene: UIScene) {
|
func sceneDidBecomeActive(_ scene: UIScene) {
|
||||||
// Called when the scene has moved from an inactive state to an active state.
|
// 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.
|
// 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) {
|
func sceneWillResignActive(_ scene: UIScene) {
|
||||||
// Called when the scene will move from an active state to an inactive state.
|
// 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).
|
// This may occur due to temporary interruptions (ex. an incoming phone call).
|
||||||
activateProximitySensor(isOn: false)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func sceneWillEnterForeground(_ scene: UIScene) {
|
func sceneWillEnterForeground(_ scene: UIScene) {
|
||||||
|
@ -50,21 +48,6 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||||
// to restore the scene back to its current state.
|
// 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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|