diff --git a/KuringApp/KuringApp.xcodeproj/project.pbxproj b/KuringApp/KuringApp.xcodeproj/project.pbxproj index 20c148c6..47e362be 100644 --- a/KuringApp/KuringApp.xcodeproj/project.pbxproj +++ b/KuringApp/KuringApp.xcodeproj/project.pbxproj @@ -16,10 +16,6 @@ CAE658662B3992A800CD8A63 /* App in Frameworks */ = {isa = PBXBuildFile; productRef = CAE658652B3992A800CD8A63 /* App */; }; CAE94A9A2B5EA3B000F73A7E /* App in Frameworks */ = {isa = PBXBuildFile; productRef = CAE94A992B5EA3B000F73A7E /* App */; }; CAE94A9C2B5EA3B000F73A7E /* Labs in Frameworks */ = {isa = PBXBuildFile; productRef = CAE94A9B2B5EA3B000F73A7E /* Labs */; }; - DF331DAB2AC917E100D0BB08 /* kuring_app.png in Resources */ = {isa = PBXBuildFile; fileRef = DF331DA72AC917E000D0BB08 /* kuring_app.png */; }; - DF331DAC2AC917E100D0BB08 /* kuring_app_classic.png in Resources */ = {isa = PBXBuildFile; fileRef = DF331DA82AC917E000D0BB08 /* kuring_app_classic.png */; }; - DF331DAD2AC917E100D0BB08 /* kuring_app_sketch.png in Resources */ = {isa = PBXBuildFile; fileRef = DF331DA92AC917E000D0BB08 /* kuring_app_sketch.png */; }; - DF331DAE2AC917E100D0BB08 /* kuring_app_blueprint.png in Resources */ = {isa = PBXBuildFile; fileRef = DF331DAA2AC917E000D0BB08 /* kuring_app_blueprint.png */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -43,10 +39,6 @@ CA52DF2F2AD58DF2009B9272 /* KuringAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KuringAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; CACC2F4B2B7E638C003142E2 /* KuringApp.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = KuringApp.entitlements; sourceTree = ""; }; DF062D4A2AC87B6D00FC48C0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - DF331DA72AC917E000D0BB08 /* kuring_app.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = kuring_app.png; sourceTree = ""; }; - DF331DA82AC917E000D0BB08 /* kuring_app_classic.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = kuring_app_classic.png; sourceTree = ""; }; - DF331DA92AC917E000D0BB08 /* kuring_app_sketch.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = kuring_app_sketch.png; sourceTree = ""; }; - DF331DAA2AC917E000D0BB08 /* kuring_app_blueprint.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = kuring_app_blueprint.png; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -128,21 +120,9 @@ path = KuringAppTests; sourceTree = ""; }; - DF062D4B2AC8800000FC48C0 /* AppIcons */ = { - isa = PBXGroup; - children = ( - DF331DAA2AC917E000D0BB08 /* kuring_app_blueprint.png */, - DF331DA82AC917E000D0BB08 /* kuring_app_classic.png */, - DF331DA92AC917E000D0BB08 /* kuring_app_sketch.png */, - DF331DA72AC917E000D0BB08 /* kuring_app.png */, - ); - path = AppIcons; - sourceTree = ""; - }; DFE7AB132AC332D200230934 /* Setting */ = { isa = PBXGroup; children = ( - DF062D4B2AC8800000FC48C0 /* AppIcons */, ); path = Setting; sourceTree = ""; @@ -199,7 +179,7 @@ attributes = { BuildIndependentTargetsInParallel = 1; LastSwiftUpdateCheck = 1500; - LastUpgradeCheck = 1500; + LastUpgradeCheck = 1530; TargetAttributes = { A9DAFA4F2AB1F04B0064F748 = { CreatedOnToolsVersion = 15.0; @@ -237,11 +217,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - DF331DAD2AC917E100D0BB08 /* kuring_app_sketch.png in Resources */, - DF331DAE2AC917E100D0BB08 /* kuring_app_blueprint.png in Resources */, A9DAFA5B2AB1F04C0064F748 /* Preview Assets.xcassets in Resources */, - DF331DAB2AC917E100D0BB08 /* kuring_app.png in Resources */, - DF331DAC2AC917E100D0BB08 /* kuring_app_classic.png in Resources */, A9DAFA582AB1F04C0064F748 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -288,6 +264,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES = "AppIcon-kuring-app AppIcon-kuring-app-sketch AppIcon-kuring-app-classic AppIcon-kuring-app-blueprint"; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -351,6 +328,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES = "AppIcon-kuring-app AppIcon-kuring-app-sketch AppIcon-kuring-app-classic AppIcon-kuring-app-blueprint"; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -406,13 +384,15 @@ A9DAFA5F2AB1F04C0064F748 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES = "AppIcon-kuring-app.jpg AppIcon-kuring-app-classic AppIcon-kuring-app-sketch AppIcon-kuring-app-blueprint"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CODE_SIGN_ENTITLEMENTS = KuringApp/KuringApp.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 202405151220; DEVELOPMENT_ASSET_PATHS = "\"KuringApp/Preview Content\""; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = 38PD5AHVVF; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = KuringApp/Info.plist; @@ -439,13 +419,15 @@ A9DAFA602AB1F04C0064F748 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES = "AppIcon-kuring-app.jpg AppIcon-kuring-app-classic AppIcon-kuring-app-sketch AppIcon-kuring-app-blueprint"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CODE_SIGN_ENTITLEMENTS = KuringApp/KuringApp.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 202405151220; DEVELOPMENT_ASSET_PATHS = "\"KuringApp/Preview Content\""; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = 38PD5AHVVF; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = KuringApp/Info.plist; @@ -475,6 +457,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 17.0; @@ -497,6 +480,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 17.0; diff --git a/KuringApp/KuringApp.xcodeproj/xcshareddata/xcschemes/KuringApp.xcscheme b/KuringApp/KuringApp.xcodeproj/xcshareddata/xcschemes/KuringApp.xcscheme index 84b047d9..0175f717 100644 --- a/KuringApp/KuringApp.xcodeproj/xcshareddata/xcschemes/KuringApp.xcscheme +++ b/KuringApp/KuringApp.xcodeproj/xcshareddata/xcschemes/KuringApp.xcscheme @@ -1,6 +1,6 @@ + + + + diff --git a/KuringApp/KuringApp/Assets.xcassets/TabBar/archive.imageset/Contents.json b/KuringApp/KuringApp/Assets.xcassets/TabBar/archive.imageset/Contents.json new file mode 100644 index 00000000..d9e8b097 --- /dev/null +++ b/KuringApp/KuringApp/Assets.xcassets/TabBar/archive.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "archive.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/KuringApp/KuringApp/Assets.xcassets/TabBar/archive.imageset/archive.svg b/KuringApp/KuringApp/Assets.xcassets/TabBar/archive.imageset/archive.svg new file mode 100644 index 00000000..9f8485e6 --- /dev/null +++ b/KuringApp/KuringApp/Assets.xcassets/TabBar/archive.imageset/archive.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/KuringApp/KuringApp/Assets.xcassets/TabBar/list-fill.imageset/Contents.json b/KuringApp/KuringApp/Assets.xcassets/TabBar/list-fill.imageset/Contents.json new file mode 100644 index 00000000..7aa344cc --- /dev/null +++ b/KuringApp/KuringApp/Assets.xcassets/TabBar/list-fill.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "list-fill.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/KuringApp/KuringApp/Assets.xcassets/TabBar/list-fill.imageset/list-fill.svg b/KuringApp/KuringApp/Assets.xcassets/TabBar/list-fill.imageset/list-fill.svg new file mode 100644 index 00000000..c0fac02b --- /dev/null +++ b/KuringApp/KuringApp/Assets.xcassets/TabBar/list-fill.imageset/list-fill.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/KuringApp/KuringApp/Assets.xcassets/TabBar/list.imageset/Contents.json b/KuringApp/KuringApp/Assets.xcassets/TabBar/list.imageset/Contents.json new file mode 100644 index 00000000..3ad978ad --- /dev/null +++ b/KuringApp/KuringApp/Assets.xcassets/TabBar/list.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "list.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/KuringApp/KuringApp/Assets.xcassets/TabBar/list.imageset/list.svg b/KuringApp/KuringApp/Assets.xcassets/TabBar/list.imageset/list.svg new file mode 100644 index 00000000..1abbaf09 --- /dev/null +++ b/KuringApp/KuringApp/Assets.xcassets/TabBar/list.imageset/list.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/KuringApp/KuringApp/Assets.xcassets/TabBar/map-pin-fill.imageset/Contents.json b/KuringApp/KuringApp/Assets.xcassets/TabBar/map-pin-fill.imageset/Contents.json new file mode 100644 index 00000000..129f0f54 --- /dev/null +++ b/KuringApp/KuringApp/Assets.xcassets/TabBar/map-pin-fill.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "map-pin-fill.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/KuringApp/KuringApp/Assets.xcassets/TabBar/map-pin-fill.imageset/map-pin-fill.svg b/KuringApp/KuringApp/Assets.xcassets/TabBar/map-pin-fill.imageset/map-pin-fill.svg new file mode 100644 index 00000000..88bb8e58 --- /dev/null +++ b/KuringApp/KuringApp/Assets.xcassets/TabBar/map-pin-fill.imageset/map-pin-fill.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/KuringApp/KuringApp/Assets.xcassets/TabBar/map-pin.imageset/Contents.json b/KuringApp/KuringApp/Assets.xcassets/TabBar/map-pin.imageset/Contents.json new file mode 100644 index 00000000..051a30a6 --- /dev/null +++ b/KuringApp/KuringApp/Assets.xcassets/TabBar/map-pin.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "map-pin.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/KuringApp/KuringApp/Assets.xcassets/TabBar/map-pin.imageset/map-pin.svg b/KuringApp/KuringApp/Assets.xcassets/TabBar/map-pin.imageset/map-pin.svg new file mode 100644 index 00000000..d9dc5e33 --- /dev/null +++ b/KuringApp/KuringApp/Assets.xcassets/TabBar/map-pin.imageset/map-pin.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/KuringApp/KuringApp/Assets.xcassets/TabBar/more-horizontal-fill.imageset/Contents.json b/KuringApp/KuringApp/Assets.xcassets/TabBar/more-horizontal-fill.imageset/Contents.json new file mode 100644 index 00000000..6af65403 --- /dev/null +++ b/KuringApp/KuringApp/Assets.xcassets/TabBar/more-horizontal-fill.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "more-horizontal.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/KuringApp/KuringApp/Assets.xcassets/TabBar/more-horizontal-fill.imageset/more-horizontal.svg b/KuringApp/KuringApp/Assets.xcassets/TabBar/more-horizontal-fill.imageset/more-horizontal.svg new file mode 100644 index 00000000..9aa70778 --- /dev/null +++ b/KuringApp/KuringApp/Assets.xcassets/TabBar/more-horizontal-fill.imageset/more-horizontal.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/KuringApp/KuringApp/Assets.xcassets/TabBar/more-horizontal.imageset/Contents.json b/KuringApp/KuringApp/Assets.xcassets/TabBar/more-horizontal.imageset/Contents.json new file mode 100644 index 00000000..6af65403 --- /dev/null +++ b/KuringApp/KuringApp/Assets.xcassets/TabBar/more-horizontal.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "more-horizontal.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/KuringApp/KuringApp/Assets.xcassets/TabBar/more-horizontal.imageset/more-horizontal.svg b/KuringApp/KuringApp/Assets.xcassets/TabBar/more-horizontal.imageset/more-horizontal.svg new file mode 100644 index 00000000..bbcdf11c --- /dev/null +++ b/KuringApp/KuringApp/Assets.xcassets/TabBar/more-horizontal.imageset/more-horizontal.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/KuringApp/KuringApp/ContentView.swift b/KuringApp/KuringApp/ContentView.swift index caf8a542..8f4abc3f 100644 --- a/KuringApp/KuringApp/ContentView.swift +++ b/KuringApp/KuringApp/ContentView.swift @@ -14,8 +14,17 @@ import SettingsFeatures import ComposableArchitecture struct ContentView: View { + @State private var selection: TabBarItem = .notice + + enum TabBarItem: Hashable { + case notice + case archive + case campusMap + case settings + } + var body: some View { - TabView { + TabView(selection: $selection) { NoticeApp( store: Store( initialState: NoticeAppFeature.State( @@ -24,19 +33,13 @@ struct ContentView: View { reducer: { NoticeAppFeature()._printChanges() } ) ) + .tag(TabBarItem.notice) .tabItem { - Image(systemName: "list.dash") + Image(selection == .notice ? .listFill : .list) Text("공지사항") } - CampusApp() - .tabItem { - Image(systemName: "location") - - Text("캠퍼스맵") - } - BookmarkApp( store: Store( initialState: BookmarkAppFeature.State( @@ -45,24 +48,35 @@ struct ContentView: View { reducer: { BookmarkAppFeature() } ) ) + .tag(TabBarItem.archive) .tabItem { - Image(systemName: "archivebox") + Image(selection == .archive ? .archiveFill : .archive) Text("공지보관함") } + CampusApp() + .tag(TabBarItem.campusMap) + .tabItem { + Image(selection == .campusMap ? .mapPinFill : .mapPin) + + Text("캠퍼스맵") + } + SettingsApp( store: Store( initialState: SettingsAppFeature.State(), reducer: { SettingsAppFeature() } ) ) + .tag(TabBarItem.settings) .tabItem { - Image(systemName: "ellipsis") + Image(selection == .settings ? .moreHorizontalFill : .moreHorizontal) Text("더보기") } } + .tint(Color.black) } } diff --git a/KuringApp/KuringApp/Info.plist b/KuringApp/KuringApp/Info.plist index 27258e35..fc4469f2 100644 --- a/KuringApp/KuringApp/Info.plist +++ b/KuringApp/KuringApp/Info.plist @@ -4,40 +4,6 @@ FirebaseAppDelegateProxyEnabled - CFBundleIcons - - CFBundleAlternateIcons - - kuring_app - - CFBundleIconFiles - - kuring_app - - - kuring_app_blueprint - - CFBundleIconFiles - - kuring_app_blueprint - - - kuring_app_classic - - CFBundleIconFiles - - kuring_app_classic - - - kuring_app_sketch - - CFBundleIconFiles - - kuring_app_sketch - - - - ITSAppUsesNonExemptEncryption NSAppTransportSecurity diff --git a/package-kuring/.swiftpm/xcode/xcshareddata/xcschemes/App.xcscheme b/package-kuring/.swiftpm/xcode/xcshareddata/xcschemes/App.xcscheme index ec2f2f07..68162ffc 100644 --- a/package-kuring/.swiftpm/xcode/xcshareddata/xcschemes/App.xcscheme +++ b/package-kuring/.swiftpm/xcode/xcshareddata/xcschemes/App.xcscheme @@ -1,6 +1,6 @@ String { + return value.replacingOccurrences(of: "-", with: ".") + } } #Preview { List { - NoticeRow(notice: .random) + NoticeRow(notice: .random, rowType: .important) .listRowInsets(EdgeInsets()) - NoticeRow(notice: .random) + NoticeRow(notice: .random, bookmarked: true, rowType: .importantAndBookmark) .listRowInsets(EdgeInsets()) NoticeRow(notice: .random) .listRowInsets(EdgeInsets()) - NoticeRow(notice: .random) + NoticeRow(notice: .random, bookmarked: true) .listRowInsets(EdgeInsets()) } .listStyle(.plain) diff --git a/package-kuring/Sources/UIKit/SettingsUI/AppIconSelector.swift b/package-kuring/Sources/UIKit/SettingsUI/AppIconSelector.swift index d8b0a018..dc82eab0 100644 --- a/package-kuring/Sources/UIKit/SettingsUI/AppIconSelector.swift +++ b/package-kuring/Sources/UIKit/SettingsUI/AppIconSelector.swift @@ -15,7 +15,7 @@ public struct AppIconSelector: View { List(store.appIcons) { icon in HStack { VStack { - Image(icon.rawValue, bundle: Bundle.settings) + Image(uiImage: UIImage(named: icon.rawValue) ?? UIImage()) .resizable() .frame(width: 70, height: 70) .cornerRadius(10)