Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ DerivedData/
*.xccheckout
*.xcscmblueprint
*.moved-aside
*.xcconfig

# Swift Package Manager
.build/
Expand Down
54 changes: 54 additions & 0 deletions KillingPart.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@
objectVersion = 77;
objects = {

/* Begin PBXBuildFile section */
12CE25AA2F3DC9BE0057A858 /* Development.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 12CE25A92F3DC9BE0057A858 /* Development.xcconfig */; };
12CE25AC2F3DCA940057A858 /* Release.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 12CE25AB2F3DCA940057A858 /* Release.xcconfig */; };
12F7A0012F3F010000A00001 /* KakaoSDKCommon in Frameworks */ = {isa = PBXBuildFile; productRef = 12F7A0112F3F010000A00001 /* KakaoSDKCommon */; };
12F7A0022F3F010000A00001 /* KakaoSDKAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 12F7A0122F3F010000A00001 /* KakaoSDKAuth */; };
12F7A0032F3F010000A00001 /* KakaoSDKUser in Frameworks */ = {isa = PBXBuildFile; productRef = 12F7A0132F3F010000A00001 /* KakaoSDKUser */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
1231F12E2F372E5D00CFA51D /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
Expand All @@ -27,6 +35,8 @@
1231F11D2F372E5B00CFA51D /* KillingPart.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KillingPart.app; sourceTree = BUILT_PRODUCTS_DIR; };
1231F12D2F372E5D00CFA51D /* KillingPartTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KillingPartTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
1231F1372F372E5D00CFA51D /* KillingPartUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KillingPartUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
12CE25A92F3DC9BE0057A858 /* Development.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Development.xcconfig; sourceTree = "<group>"; };
12CE25AB2F3DCA940057A858 /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
Expand Down Expand Up @@ -65,6 +75,9 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
12F7A0012F3F010000A00001 /* KakaoSDKCommon in Frameworks */,
12F7A0022F3F010000A00001 /* KakaoSDKAuth in Frameworks */,
12F7A0032F3F010000A00001 /* KakaoSDKUser in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand All @@ -88,6 +101,8 @@
1231F1142F372E5B00CFA51D = {
isa = PBXGroup;
children = (
12CE25AB2F3DCA940057A858 /* Release.xcconfig */,
12CE25A92F3DC9BE0057A858 /* Development.xcconfig */,
1231F11F2F372E5B00CFA51D /* KillingPart */,
1231F1302F372E5D00CFA51D /* KillingPartTests */,
1231F13A2F372E5D00CFA51D /* KillingPartUITests */,
Expand Down Expand Up @@ -125,6 +140,9 @@
);
name = KillingPart;
packageProductDependencies = (
12F7A0112F3F010000A00001 /* KakaoSDKCommon */,
12F7A0122F3F010000A00001 /* KakaoSDKAuth */,
12F7A0132F3F010000A00001 /* KakaoSDKUser */,
);
productName = KillingPart;
productReference = 1231F11D2F372E5B00CFA51D /* KillingPart.app */;
Expand Down Expand Up @@ -208,6 +226,9 @@
);
mainGroup = 1231F1142F372E5B00CFA51D;
minimizedProjectReferenceProxies = 1;
packageReferences = (
12F7A0212F3F010000A00001 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */,
);
preferredProjectObjectVersion = 77;
productRefGroup = 1231F11E2F372E5B00CFA51D /* Products */;
projectDirPath = "";
Expand All @@ -225,6 +246,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
12CE25AA2F3DC9BE0057A858 /* Development.xcconfig in Resources */,
12CE25AC2F3DCA940057A858 /* Release.xcconfig in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -284,6 +307,7 @@
/* Begin XCBuildConfiguration section */
1231F13F2F372E5D00CFA51D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 12CE25A92F3DC9BE0057A858 /* Development.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
Expand Down Expand Up @@ -348,6 +372,7 @@
};
1231F1402F372E5D00CFA51D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 12CE25AB2F3DCA940057A858 /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
Expand Down Expand Up @@ -626,6 +651,35 @@
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */

/* Begin XCRemoteSwiftPackageReference section */
12F7A0212F3F010000A00001 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/kakao/kakao-ios-sdk";
requirement = {
branch = master;
kind = branch;
Comment on lines +660 to +661
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Kakao SDK dependency is pinned to the master branch instead of a specific version. This can lead to unexpected breaking changes when the dependency updates automatically. Consider pinning to a specific version tag or at minimum using a version range to ensure stability and reproducible builds.

Suggested change
branch = master;
kind = branch;
kind = exactVersion;
version = 2.21.0;

Copilot uses AI. Check for mistakes.
};
};
/* End XCRemoteSwiftPackageReference section */

/* Begin XCSwiftPackageProductDependency section */
12F7A0112F3F010000A00001 /* KakaoSDKCommon */ = {
isa = XCSwiftPackageProductDependency;
package = 12F7A0212F3F010000A00001 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDKCommon;
};
12F7A0122F3F010000A00001 /* KakaoSDKAuth */ = {
isa = XCSwiftPackageProductDependency;
package = 12F7A0212F3F010000A00001 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDKAuth;
};
12F7A0132F3F010000A00001 /* KakaoSDKUser */ = {
isa = XCSwiftPackageProductDependency;
package = 12F7A0212F3F010000A00001 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDKUser;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 1231F1152F372E5B00CFA51D /* Project object */;
}

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

6 changes: 6 additions & 0 deletions KillingPart/Assets.xcassets/Login/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "maintabIcoChats.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"template-rendering-intent" : "template"
}
}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "loginTitle.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "loginTitle 1.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "loginTitle 2.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 19 additions & 0 deletions KillingPart/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,25 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BASE_URL</key>
<string>$(BASE_URL)</string>
<key>KAKAO_NATIVE_APP_KEY</key>
<string>$(KAKAO_NATIVE_APP_KEY)</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>kakaokompassauth</string>
</array>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>kakao$(KAKAO_NATIVE_APP_KEY)</string>
</array>
</dict>
</array>
<key>UIAppFonts</key>
<array>
<string>Paperlogy-1Thin.ttf</string>
Expand Down
19 changes: 19 additions & 0 deletions KillingPart/KillingPartApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,37 @@
//

import SwiftUI
import KakaoSDKAuth
import KakaoSDKCommon

@main
struct KillingPartApp: App {
init() {
if ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] != "1" {
AppFont.registerPaperlogyFonts()
configureKakaoSDK()
}
}

var body: some Scene {
WindowGroup {
RootFlowView()
.onOpenURL { url in
if AuthApi.isKakaoTalkLoginUrl(url) {
_ = AuthController.handleOpenUrl(url: url)
}
}
}
}

private func configureKakaoSDK() {
let appKey = (Bundle.main.object(forInfoDictionaryKey: "KAKAO_NATIVE_APP_KEY") as? String ?? "")
.trimmingCharacters(in: .whitespacesAndNewlines)

guard !appKey.isEmpty, appKey != "YOUR_KAKAO_NATIVE_APP_KEY" else {
return
}

KakaoSDK.initSDK(appKey: appKey)
}
}
11 changes: 11 additions & 0 deletions KillingPart/Models/KakaoSocialLoginModels.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import Foundation

struct KakaoSocialLoginRequest: Encodable {
let accessToken: String
}

struct KakaoSocialLoginResponse: Decodable {
let accessToken: String
let refreshToken: String
let isNew: Bool
}
Binary file added KillingPart/Resources/Videos/login.mp4
Binary file not shown.
25 changes: 25 additions & 0 deletions KillingPart/Services/APIConfiguration.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import Foundation

enum APIConfiguration {
static let baseURL: URL = {
guard
let baseURLString = Bundle.main.object(forInfoDictionaryKey: "BASE_URL") as? String,
let baseURL = URL(string: baseURLString),
baseURL.scheme != nil,
baseURL.host != nil
else {
preconditionFailure(
"BASE_URL is missing or invalid (\(Bundle.main.object(forInfoDictionaryKey: "BASE_URL") as? String ?? "nil")). Check your xcconfig values."
)
}

return baseURL
}()

static func endpoint(path: String) -> URL {
let components = path.split(separator: "/").map(String.init)
return components.reduce(baseURL) { partialURL, component in
partialURL.appendingPathComponent(component)
}
}
}
Loading