Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
e6475b1
[FEAT] #15 Usecase template 추가
JustHm Mar 18, 2025
de6565b
[FIX] #15 CoreData에 이미지 저장 로직 분리
JustHm Mar 18, 2025
28209f7
[CHORE] #15 코드 수정
JustHm Mar 18, 2025
6058228
[FEAT] #15 DB연결 Usecase 작성
JustHm Mar 18, 2025
9885cd7
[FEAT] #15 Edit Protocol Method and func init Moya network Logic
HISEHOONAN Mar 18, 2025
e507c07
[FEAT] #15 Coredata Fetch동작만 비동기로 변경, UseCase에서도 동일하게 completion으로 데이…
JustHm Mar 18, 2025
d315b53
[FEAT] #15 UnitTest 타겟 추가
JustHm Mar 18, 2025
75f52ac
[FEAT] #15 ViewController에 Usecase주입해주기위한 변수 추가
JustHm Mar 18, 2025
5e2c738
[FEAT] #15 예시로 usecase 적용 코드 추가
JustHm Mar 18, 2025
a6075ac
[CHORE] #15 테스트코드 추가 (핀 추가, 핀로드)
JustHm Mar 18, 2025
cb5df6c
[FEAT] #15 파일매니저 URL 초기화 구문 추가 (기본값도 적용)
JustHm Mar 18, 2025
a7fd7eb
[CHORE] #15 테스트 코드 수정...
JustHm Mar 18, 2025
7599e9b
[FEAT] #15 add TestCode
HISEHOONAN Mar 18, 2025
82a4ace
[FIX] #15 날씨 디코딩 에러 수정 (디코딩 타겟 모델 변경)
JustHm Mar 18, 2025
419435d
[FEAT] #15 edit icon func and testing
HISEHOONAN Mar 18, 2025
9ff236c
[FEAT] #15 edit icon code and FSCalendar dots
HISEHOONAN Mar 19, 2025
5e4fc9d
[FEAT] #15 add collectionview data
HISEHOONAN Mar 20, 2025
0f7f5d1
[CHORE] #15 자잘한 코드 수정
JustHm Mar 20, 2025
ad0a9db
[FEAT] #15 - 1 Add LaunchScreen and etc
HISEHOONAN Mar 20, 2025
f461880
Merge branch '#15-1' into feature/#15
HISEHOONAN Mar 20, 2025
0d801ec
[CHORE] #15 Error handling
HISEHOONAN Mar 20, 2025
b9681fe
Merge branch 'dev' into feature/#15
HISEHOONAN Mar 20, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 137 additions & 0 deletions Pinit/Pinit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,21 @@
D14369DC2D82D1970095F7E3 /* FSCalendar in Frameworks */ = {isa = PBXBuildFile; productRef = D14369DB2D82D1970095F7E3 /* FSCalendar */; };
D1436C432D8332020095F7E3 /* CombineMoya in Frameworks */ = {isa = PBXBuildFile; productRef = D1436C422D8332020095F7E3 /* CombineMoya */; };
D1436C452D8332020095F7E3 /* Moya in Frameworks */ = {isa = PBXBuildFile; productRef = D1436C442D8332020095F7E3 /* Moya */; };
D1BCDA062D892DA4002C03BB /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = D1BCDA052D892DA4002C03BB /* Kingfisher */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
220085DD2D8945550090A4C5 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 6DDB45B92D7ED702006C4A4B /* Project object */;
proxyType = 1;
remoteGlobalIDString = 6DDB45C02D7ED702006C4A4B;
remoteInfo = Pinit;
};
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
220085D92D8945550090A4C5 /* PinitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PinitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
6DDB45C12D7ED702006C4A4B /* Pinit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Pinit.app; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */

Expand All @@ -28,6 +40,11 @@
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */

/* Begin PBXFileSystemSynchronizedRootGroup section */
220085DA2D8945550090A4C5 /* PinitTests */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = PinitTests;
sourceTree = "<group>";
};
D1286F2B2D815BB8006B5E52 /* Pinit */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
Expand All @@ -39,6 +56,13 @@
/* End PBXFileSystemSynchronizedRootGroup section */

/* Begin PBXFrameworksBuildPhase section */
220085D62D8945550090A4C5 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
6DDB45BE2D7ED702006C4A4B /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
Expand All @@ -47,6 +71,7 @@
D14369DC2D82D1970095F7E3 /* FSCalendar in Frameworks */,
D1436C452D8332020095F7E3 /* Moya in Frameworks */,
D1436C432D8332020095F7E3 /* CombineMoya in Frameworks */,
D1BCDA062D892DA4002C03BB /* Kingfisher in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand All @@ -57,6 +82,7 @@
isa = PBXGroup;
children = (
D1286F2B2D815BB8006B5E52 /* Pinit */,
220085DA2D8945550090A4C5 /* PinitTests */,
6DDB45C22D7ED702006C4A4B /* Products */,
);
sourceTree = "<group>";
Expand All @@ -65,13 +91,37 @@
isa = PBXGroup;
children = (
6DDB45C12D7ED702006C4A4B /* Pinit.app */,
220085D92D8945550090A4C5 /* PinitTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
220085D82D8945550090A4C5 /* PinitTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 220085E12D8945550090A4C5 /* Build configuration list for PBXNativeTarget "PinitTests" */;
buildPhases = (
220085D52D8945550090A4C5 /* Sources */,
220085D62D8945550090A4C5 /* Frameworks */,
220085D72D8945550090A4C5 /* Resources */,
);
buildRules = (
);
dependencies = (
220085DE2D8945550090A4C5 /* PBXTargetDependency */,
);
fileSystemSynchronizedGroups = (
220085DA2D8945550090A4C5 /* PinitTests */,
);
name = PinitTests;
packageProductDependencies = (
);
productName = PinitTests;
productReference = 220085D92D8945550090A4C5 /* PinitTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
6DDB45C02D7ED702006C4A4B /* Pinit */ = {
isa = PBXNativeTarget;
buildConfigurationList = 6DDB45D72D7ED704006C4A4B /* Build configuration list for PBXNativeTarget "Pinit" */;
Expand All @@ -93,6 +143,7 @@
D14369DB2D82D1970095F7E3 /* FSCalendar */,
D1436C422D8332020095F7E3 /* CombineMoya */,
D1436C442D8332020095F7E3 /* Moya */,
D1BCDA052D892DA4002C03BB /* Kingfisher */,
);
productName = Pinit;
productReference = 6DDB45C12D7ED702006C4A4B /* Pinit.app */;
Expand All @@ -108,6 +159,10 @@
LastSwiftUpdateCheck = 1620;
LastUpgradeCheck = 1620;
TargetAttributes = {
220085D82D8945550090A4C5 = {
CreatedOnToolsVersion = 16.2;
TestTargetID = 6DDB45C02D7ED702006C4A4B;
};
6DDB45C02D7ED702006C4A4B = {
CreatedOnToolsVersion = 16.2;
};
Expand All @@ -126,18 +181,27 @@
D1286F412D815BED006B5E52 /* XCRemoteSwiftPackageReference "SnapKit" */,
D14369DA2D82D1970095F7E3 /* XCRemoteSwiftPackageReference "FSCalendar" */,
D1436C412D8332020095F7E3 /* XCRemoteSwiftPackageReference "Moya" */,
D1BCDA042D892DA4002C03BB /* XCRemoteSwiftPackageReference "Kingfisher" */,
);
preferredProjectObjectVersion = 77;
productRefGroup = 6DDB45C22D7ED702006C4A4B /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
6DDB45C02D7ED702006C4A4B /* Pinit */,
220085D82D8945550090A4C5 /* PinitTests */,
);
};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
220085D72D8945550090A4C5 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
6DDB45BF2D7ED702006C4A4B /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
Expand All @@ -148,6 +212,13 @@
/* End PBXResourcesBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
220085D52D8945550090A4C5 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
6DDB45BD2D7ED702006C4A4B /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
Expand All @@ -157,7 +228,51 @@
};
/* End PBXSourcesBuildPhase section */

/* Begin PBXTargetDependency section */
220085DE2D8945550090A4C5 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 6DDB45C02D7ED702006C4A4B /* Pinit */;
targetProxy = 220085DD2D8945550090A4C5 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */

/* Begin XCBuildConfiguration section */
220085DF2D8945550090A4C5 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = UUYBHY988H;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.justhm.PinitTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Pinit.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Pinit";
};
name = Debug;
};
220085E02D8945550090A4C5 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = UUYBHY988H;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.justhm.PinitTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Pinit.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Pinit";
};
name = Release;
};
6DDB45D82D7ED704006C4A4B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
Expand Down Expand Up @@ -336,6 +451,15 @@
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
220085E12D8945550090A4C5 /* Build configuration list for PBXNativeTarget "PinitTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
220085DF2D8945550090A4C5 /* Debug */,
220085E02D8945550090A4C5 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
6DDB45BC2D7ED702006C4A4B /* Build configuration list for PBXProject "Pinit" */ = {
isa = XCConfigurationList;
buildConfigurations = (
Expand Down Expand Up @@ -381,6 +505,14 @@
minimumVersion = 15.0.3;
};
};
D1BCDA042D892DA4002C03BB /* XCRemoteSwiftPackageReference "Kingfisher" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/onevcat/Kingfisher.git";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 8.3.1;
};
};
/* End XCRemoteSwiftPackageReference section */

/* Begin XCSwiftPackageProductDependency section */
Expand All @@ -404,6 +536,11 @@
package = D1436C412D8332020095F7E3 /* XCRemoteSwiftPackageReference "Moya" */;
productName = Moya;
};
D1BCDA052D892DA4002C03BB /* Kingfisher */ = {
isa = XCSwiftPackageProductDependency;
package = D1BCDA042D892DA4002C03BB /* XCRemoteSwiftPackageReference "Kingfisher" */;
productName = Kingfisher;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 6DDB45B92D7ED702006C4A4B /* Project object */;
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 13 additions & 13 deletions Pinit/Pinit/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -62,19 +62,19 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
}()

// MARK: - Core Data Saving support
func saveContext () {
let context = persistentContainer.viewContext
if context.hasChanges {
do {
try context.save()
} catch {
// Replace this implementation with code to handle the error appropriately.
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
// func saveContext () {
// let context = persistentContainer.viewContext
// if context.hasChanges {
// do {
// try context.save()
// } catch {
// // Replace this implementation with code to handle the error appropriately.
// // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
// let nserror = error as NSError
// fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
// }
// }
// }

}

16 changes: 16 additions & 0 deletions Pinit/Pinit/DesignSystem/DesignSystem.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,22 @@

import UIKit

enum DesignSystemColor {
case Purple
case Lavender
}
extension DesignSystemColor {
var value: UIColor {
switch self {
case .Purple:
UIColor(hex: "#561CE2")
case .Lavender:
UIColor(hex: "#6450E2")

}
}
}

enum DesignSystemFont {
case Pretendard_Bold8
case Pretendard_Bold12
Expand Down
50 changes: 50 additions & 0 deletions Pinit/Pinit/LaunchScreen.storyboard
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina6_12" orientation="portrait" appearance="light"/>
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="obG-Y5-kRd">
<rect key="frame" x="0.0" y="832" width="393" height="0.0"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Splash" translatesAutoresizingMaskIntoConstraints="NO" id="HiI-S9-1Ji">
<rect key="frame" x="46.666666666666657" y="276" width="300" height="300"/>
<color key="tintColor" red="0.30980393290000002" green="0.12549020350000001" blue="0.85098040100000005" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<constraints>
<constraint firstAttribute="height" constant="300" id="U2l-QQ-6xh"/>
<constraint firstAttribute="width" constant="300" id="gcP-Ij-I8d"/>
</constraints>
</imageView>
</subviews>
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
<color key="backgroundColor" red="0.30980393290000002" green="0.12549020350000001" blue="0.85098040100000005" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<constraints>
<constraint firstItem="HiI-S9-1Ji" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="DSY-B9-rVS"/>
<constraint firstItem="HiI-S9-1Ji" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="hdN-aS-acq"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="52.671755725190835" y="374.64788732394368"/>
</scene>
</scenes>
<resources>
<image name="Splash" width="1024" height="1024"/>
</resources>
</document>
4 changes: 2 additions & 2 deletions Pinit/Pinit/Models/WeatherModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import Foundation

struct WeatherResponse : Codable {
let coord: Coord?
let weather: [Weather]?
let coord: Coord
let weather: [Weather]
}

// MARK: - Coord
Expand Down
Loading