diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 1767a0c..0000000 --- a/.gitignore +++ /dev/null @@ -1,166 +0,0 @@ -# Created by https://www.toptal.com/developers/gitignore/api/macos,windows,xcode,swift,swiftpackagemanager -# Edit at https://www.toptal.com/developers/gitignore?templates=macos,windows,xcode,swift,swiftpackagemanager - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### macOS Patch ### -# iCloud generated files -*.icloud - -### Swift ### -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings -xcuserdata/ - -## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) -*.xcscmblueprint -*.xccheckout - -## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) -build/ -DerivedData/ -*.moved-aside -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 - -## Obj-C/Swift specific -*.hmap - -## App packaging -*.ipa -*.dSYM.zip -*.dSYM - -## Playgrounds -timeline.xctimeline -playground.xcworkspace - -# Swift Package Manager -# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. -# Packages/ -# Package.pins -# Package.resolved -# *.xcodeproj -# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata -# hence it is not needed unless you have added a package configuration file to your project -# .swiftpm - -.build/ - -# CocoaPods -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control -# Pods/ -# Add this line if you want to avoid checking in source code from the Xcode workspace -# *.xcworkspace - -# Carthage -# Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - -Carthage/Build/ - -# Accio dependency management -Dependencies/ -.accio/ - -# fastlane -# It is recommended to not store the screenshots in the git repo. -# Instead, use fastlane to re-generate the screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/#source-control - -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots/**/*.png -fastlane/test_output - -# Code Injection -# After new code Injection tools there's a generated folder /iOSInjectionProject -# https://github.com/johnno1962/injectionforxcode - -iOSInjectionProject/ - -### SwiftPackageManager ### -Packages -xcuserdata -*.xcodeproj - - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -Thumbs.db:encryptable -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### Xcode ### - -## Xcode 8 and earlier - -### Xcode Patch ### -*.xcodeproj/* -!*.xcodeproj/project.pbxproj -!*.xcodeproj/xcshareddata/ -!*.xcodeproj/project.xcworkspace/ -!*.xcworkspace/contents.xcworkspacedata -/*.gcno -**/xcshareddata/WorkspaceSettings.xcsettings - -# End of https://www.toptal.com/developers/gitignore/api/macos,windows,xcode,swift,swiftpackagemanager \ No newline at end of file diff --git a/iOS/.githooks/pre-commit b/iOS/.githooks/pre-commit old mode 100755 new mode 100644 index 2703e87..1a24852 --- a/iOS/.githooks/pre-commit +++ b/iOS/.githooks/pre-commit @@ -1,3 +1 @@ #!/bin/sh - -echo "iOS" \ No newline at end of file diff --git a/iOS/.gitignore b/iOS/.gitignore index b934dfb..43cab86 100644 --- a/iOS/.gitignore +++ b/iOS/.gitignore @@ -76,7 +76,6 @@ playground.xcworkspace # Packages/ # Package.pins # Package.resolved -# *.xcodeproj # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata # hence it is not needed unless you have added a package configuration file to your project # .swiftpm @@ -121,7 +120,6 @@ iOSInjectionProject/ ### SwiftPackageManager ### Packages xcuserdata -*.xcodeproj ### Xcode ### @@ -131,9 +129,6 @@ xcuserdata ### Xcode Patch ### *.xcodeproj/* !*.xcodeproj/project.pbxproj -!*.xcodeproj/xcshareddata/ -!*.xcodeproj/project.xcworkspace/ -!*.xcworkspace/contents.xcworkspacedata /*.gcno **/xcshareddata/WorkspaceSettings.xcsettings diff --git a/iOS/.swiftlint.yml b/iOS/.swiftlint.yml new file mode 100644 index 0000000..4ec0578 --- /dev/null +++ b/iOS/.swiftlint.yml @@ -0,0 +1,27 @@ +# 한 라인 길이 제한 +line_length: + warning: 120 #default: 120 + error: 200 + +# 강제 형변환 +force_cast: error +force_try: error + +# 의미없는 공백/줄 바꿈 +trailing_newline: warning +trailing_whitespace: + severity: warning + +# 함수 길이 제한 +function_body_length: + warning: 50 + error: 100 + +# 타입 지정 시, 이름 조건 +type_name: + min_length: + warning: 3 + error: 0 + max_length: + warning: 40 + error: 1000 diff --git a/iOS/MSCoreKit/.gitignore b/iOS/MSCoreKit/.gitignore deleted file mode 100644 index 0023a53..0000000 --- a/iOS/MSCoreKit/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -.DS_Store -/.build -/Packages -xcuserdata/ -DerivedData/ -.swiftpm/configuration/registries.json -.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata -.netrc diff --git a/iOS/MSCoreKit/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/iOS/MSCoreKit/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/iOS/MSCoreKit/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/iOS/MSCoreKit/Package.swift b/iOS/MSCoreKit/Package.swift index 833fe9a..eb15905 100644 --- a/iOS/MSCoreKit/Package.swift +++ b/iOS/MSCoreKit/Package.swift @@ -11,7 +11,7 @@ extension String { static let networking = "MSNetworking" static let fetcher = "MSFetcher" static let cache = "MSCacheStorage" - + var testTarget: String { return self + "Tests" } @@ -44,7 +44,7 @@ let package = Package( .target(name: .networking) ]), .target(name: .cache), - + // Tests .testTarget(name: .persistentStorage.testTarget, dependencies: [.target(name: .persistentStorage)]), diff --git a/iOS/MSCoreKit/Tests/MSPersistentStorageTests/MSPersistentStorageTests.swift b/iOS/MSCoreKit/Tests/MSPersistentStorageTests/MSPersistentStorageTests.swift index eaac037..559fad5 100644 --- a/iOS/MSCoreKit/Tests/MSPersistentStorageTests/MSPersistentStorageTests.swift +++ b/iOS/MSCoreKit/Tests/MSPersistentStorageTests/MSPersistentStorageTests.swift @@ -7,7 +7,4 @@ import XCTest -final class MSPersistentStorageTests: XCTestCase { - -} - +final class MSPersistentStorageTests: XCTestCase { } diff --git a/iOS/MSFoundation/.gitignore b/iOS/MSFoundation/.gitignore deleted file mode 100644 index 0023a53..0000000 --- a/iOS/MSFoundation/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -.DS_Store -/.build -/Packages -xcuserdata/ -DerivedData/ -.swiftpm/configuration/registries.json -.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata -.netrc diff --git a/iOS/MSFoundation/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/iOS/MSFoundation/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/iOS/MSFoundation/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/iOS/MSFoundation/Package.swift b/iOS/MSFoundation/Package.swift index 5a14aa8..49213ae 100644 --- a/iOS/MSFoundation/Package.swift +++ b/iOS/MSFoundation/Package.swift @@ -10,7 +10,7 @@ extension String { static let foundationExt = "FoundationExt" static let logger = "MSLogger" static let userDefaults = "MSUserDefaults" - + var testTarget: String { return self + "Tests" } @@ -36,7 +36,7 @@ let package = Package( .target(name: .foundationExt), .target(name: .logger), .target(name: .userDefaults), - + // Tests .testTarget(name: .logger.testTarget, dependencies: [.target(name: .logger)]), diff --git a/iOS/MSFoundation/Sources/MSUserDefaults/UserDefaultsStorage.swift b/iOS/MSFoundation/Sources/MSUserDefaults/UserDefaultsStorage.swift index 791ef38..c66e41d 100644 --- a/iOS/MSFoundation/Sources/MSUserDefaults/UserDefaultsStorage.swift +++ b/iOS/MSFoundation/Sources/MSUserDefaults/UserDefaultsStorage.swift @@ -6,5 +6,3 @@ // import Foundation - - diff --git a/iOS/MSFoundation/Tests/MSLoggerTests/MSLoggerTests.swift b/iOS/MSFoundation/Tests/MSLoggerTests/MSLoggerTests.swift index cd3f09c..ec58f24 100644 --- a/iOS/MSFoundation/Tests/MSLoggerTests/MSLoggerTests.swift +++ b/iOS/MSFoundation/Tests/MSLoggerTests/MSLoggerTests.swift @@ -9,5 +9,5 @@ import XCTest import MSLogger final class MSLoggerTests: XCTestCase { - + } diff --git a/iOS/MSUIKit/.gitignore b/iOS/MSUIKit/.gitignore deleted file mode 100644 index 0023a53..0000000 --- a/iOS/MSUIKit/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -.DS_Store -/.build -/Packages -xcuserdata/ -DerivedData/ -.swiftpm/configuration/registries.json -.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata -.netrc diff --git a/iOS/MSUIKit/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/iOS/MSUIKit/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/iOS/MSUIKit/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/iOS/MSUIKit/Package.swift b/iOS/MSUIKit/Package.swift index bfabf39..6286996 100644 --- a/iOS/MSUIKit/Package.swift +++ b/iOS/MSUIKit/Package.swift @@ -9,7 +9,7 @@ extension String { static let package = "MSUIKit" static let designSystem = "MSDesignSystem" static let components = "MSUIComponents" - + var testTarget: String { return self + "Tests" } diff --git a/iOS/MusicSpot/.swift-version b/iOS/MusicSpot/.swift-version new file mode 100644 index 0000000..95ee81a --- /dev/null +++ b/iOS/MusicSpot/.swift-version @@ -0,0 +1 @@ +5.9 diff --git a/iOS/MusicSpot/.swiftformat b/iOS/MusicSpot/.swiftformat new file mode 100644 index 0000000..d92e7aa --- /dev/null +++ b/iOS/MusicSpot/.swiftformat @@ -0,0 +1,11 @@ +# 코드 들여쓰기 +--indent 4 + +# 공백 문자 삭제 +--trimwhitespace always + +# 줄 바꿈 문자 관리 +--linebreaks lf #cr, lf, crlf + +# wrapMultilineStatementBraces 비활성화 +--disable wrapMultilineStatementBraces diff --git a/iOS/MusicSpot/MusicSpot.xcodeproj/project.pbxproj b/iOS/MusicSpot/MusicSpot.xcodeproj/project.pbxproj new file mode 100644 index 0000000..6ce3610 --- /dev/null +++ b/iOS/MusicSpot/MusicSpot.xcodeproj/project.pbxproj @@ -0,0 +1,378 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + DD73F8592B024C4900EE9BF2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD73F8582B024C4900EE9BF2 /* AppDelegate.swift */; }; + DD73F85B2B024C4900EE9BF2 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD73F85A2B024C4900EE9BF2 /* SceneDelegate.swift */; }; + DD73F8622B024C4B00EE9BF2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DD73F8612B024C4B00EE9BF2 /* Assets.xcassets */; }; + DD73F8652B024C4B00EE9BF2 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DD73F8632B024C4B00EE9BF2 /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + DD73F8552B024C4900EE9BF2 /* MusicSpot.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MusicSpot.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DD73F8582B024C4900EE9BF2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + DD73F85A2B024C4900EE9BF2 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + DD73F8612B024C4B00EE9BF2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + DD73F8642B024C4B00EE9BF2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + DD73F8662B024C4B00EE9BF2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + DD73F86D2B024CA000EE9BF2 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/LaunchScreen.strings; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + DD73F8522B024C4900EE9BF2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + DD73F84C2B024C4900EE9BF2 = { + isa = PBXGroup; + children = ( + DD73F8572B024C4900EE9BF2 /* MusicSpot */, + DD73F8562B024C4900EE9BF2 /* Products */, + DD73F8C72B027EBD00EE9BF2 /* Frameworks */, + ); + sourceTree = ""; + }; + DD73F8562B024C4900EE9BF2 /* Products */ = { + isa = PBXGroup; + children = ( + DD73F8552B024C4900EE9BF2 /* MusicSpot.app */, + ); + name = Products; + sourceTree = ""; + }; + DD73F8572B024C4900EE9BF2 /* MusicSpot */ = { + isa = PBXGroup; + children = ( + DD73F8582B024C4900EE9BF2 /* AppDelegate.swift */, + DD73F85A2B024C4900EE9BF2 /* SceneDelegate.swift */, + DD73F8612B024C4B00EE9BF2 /* Assets.xcassets */, + DD73F8632B024C4B00EE9BF2 /* LaunchScreen.storyboard */, + DD73F8662B024C4B00EE9BF2 /* Info.plist */, + ); + path = MusicSpot; + sourceTree = ""; + }; + DD73F8C72B027EBD00EE9BF2 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + DD73F8542B024C4900EE9BF2 /* MusicSpot */ = { + isa = PBXNativeTarget; + buildConfigurationList = DD73F8692B024C4B00EE9BF2 /* Build configuration list for PBXNativeTarget "MusicSpot" */; + buildPhases = ( + DD73F8512B024C4900EE9BF2 /* Sources */, + DD73F8522B024C4900EE9BF2 /* Frameworks */, + DD73F8532B024C4900EE9BF2 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MusicSpot; + packageProductDependencies = ( + ); + productName = MusicSpot; + productReference = DD73F8552B024C4900EE9BF2 /* MusicSpot.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + DD73F84D2B024C4900EE9BF2 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1500; + LastUpgradeCheck = 1500; + TargetAttributes = { + DD73F8542B024C4900EE9BF2 = { + CreatedOnToolsVersion = 15.0.1; + }; + }; + }; + buildConfigurationList = DD73F8502B024C4900EE9BF2 /* Build configuration list for PBXProject "MusicSpot" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = ko; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + ko, + ); + mainGroup = DD73F84C2B024C4900EE9BF2; + packageReferences = ( + ); + productRefGroup = DD73F8562B024C4900EE9BF2 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + DD73F8542B024C4900EE9BF2 /* MusicSpot */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + DD73F8532B024C4900EE9BF2 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DD73F8652B024C4B00EE9BF2 /* LaunchScreen.storyboard in Resources */, + DD73F8622B024C4B00EE9BF2 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + DD73F8512B024C4900EE9BF2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DD73F8592B024C4900EE9BF2 /* AppDelegate.swift in Sources */, + DD73F85B2B024C4900EE9BF2 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + DD73F8632B024C4B00EE9BF2 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DD73F8642B024C4B00EE9BF2 /* Base */, + DD73F86D2B024CA000EE9BF2 /* ko */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + DD73F8672B024C4B00EE9BF2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + 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 = 15.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + DD73F8682B024C4B00EE9BF2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + 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 = 15.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + DD73F86A2B024C4B00EE9BF2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = B3PWYBKFUK; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = MusicSpot/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = MusicSpot; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.travel"; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp8.MusicSpot; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + DD73F86B2B024C4B00EE9BF2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = B3PWYBKFUK; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = MusicSpot/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = MusicSpot; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.travel"; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp8.MusicSpot; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + DD73F8502B024C4900EE9BF2 /* Build configuration list for PBXProject "MusicSpot" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DD73F8672B024C4B00EE9BF2 /* Debug */, + DD73F8682B024C4B00EE9BF2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DD73F8692B024C4B00EE9BF2 /* Build configuration list for PBXNativeTarget "MusicSpot" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DD73F86A2B024C4B00EE9BF2 /* Debug */, + DD73F86B2B024C4B00EE9BF2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = DD73F84D2B024C4900EE9BF2 /* Project object */; +} diff --git a/iOS/MusicSpot/MusicSpot.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iOS/MusicSpot/MusicSpot.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/iOS/MusicSpot/MusicSpot.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/iOS/MusicSpot/MusicSpot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/MusicSpot/MusicSpot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/iOS/MusicSpot/MusicSpot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/iOS/MusicSpot/MusicSpot/AppDelegate.swift b/iOS/MusicSpot/MusicSpot/AppDelegate.swift index 0d0cd62..767e147 100644 --- a/iOS/MusicSpot/MusicSpot/AppDelegate.swift +++ b/iOS/MusicSpot/MusicSpot/AppDelegate.swift @@ -9,18 +9,16 @@ import UIKit @main class AppDelegate: UIResponder, UIApplicationDelegate { - - func application(_ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - return true + func application(_: UIApplication, + didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + true } - + // MARK: UISceneSession Lifecycle - - func application(_ application: UIApplication, + + func application(_: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, - options: UIScene.ConnectionOptions) -> UISceneConfiguration { - return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + options _: UIScene.ConnectionOptions) -> UISceneConfiguration { + UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } - } diff --git a/iOS/MusicSpot/MusicSpot/SceneDelegate.swift b/iOS/MusicSpot/MusicSpot/SceneDelegate.swift index 5e3820a..61bf718 100644 --- a/iOS/MusicSpot/MusicSpot/SceneDelegate.swift +++ b/iOS/MusicSpot/MusicSpot/SceneDelegate.swift @@ -6,18 +6,13 @@ // import UIKit -import MSLogger class SceneDelegate: UIResponder, UIWindowSceneDelegate { - var window: UIWindow? - + func scene(_ scene: UIScene, - willConnectTo session: UISceneSession, - options connectionOptions: UIScene.ConnectionOptions) { - guard let _ = (scene as? UIWindowScene) else { return } - - print(logger) + willConnectTo _: UISceneSession, + options _: UIScene.ConnectionOptions) { + guard (scene as? UIWindowScene) != nil else { return } } - } diff --git a/iOS/commit b/iOS/commit new file mode 100755 index 0000000..aa105f5 --- /dev/null +++ b/iOS/commit @@ -0,0 +1,29 @@ +#!/bin/sh + +LINTPATH='.swiftlint.yml' +declare -a PATHS=("MSCoreKit" "MSFoundation" "MSUIKit" "MusicSpot") +failures="" + +for path in "${PATHS[@]}"; do + if [ -d "$path" ]; then + echo "👀 Running SwiftLint for $path" + result=$(swiftlint lint --strict --progress --config $LINTPATH $path) + if [ "$result" == '' ]; then + echo "✅ Lint succeed for $path\n" + else + echo "❌ Lint failed for $path\n" + failures+="\n\033[1m✔️ $path\033[0m\n$result\n" + fi + else + echo "❓ $path directory does not exist." + exit 1 + fi +done + +if [ ! -z "$failures" ]; then + echo "$failures" + exit 1 +else + echo "✨ All linting checks passed. Ready to commit." + gitmoji -c +fi