Skip to content

๐Ÿ› [Fix] Watch ๊ณต์œ  Keychain Access Group entitlement ๋ณต๊ตฌ (#1213) - #1269

Open
JEONG-J wants to merge 2 commits into
developfrom
bug/1213
Open

๐Ÿ› [Fix] Watch ๊ณต์œ  Keychain Access Group entitlement ๋ณต๊ตฌ (#1213)#1269
JEONG-J wants to merge 2 commits into
developfrom
bug/1213

Conversation

@JEONG-J

@JEONG-J JEONG-J commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

๐Ÿ”— ๊ด€๋ จ ์ด์Šˆ

Closes #1213

โœจ PR ์œ ํ˜•

๐Ÿ› ๋ฒ„๊ทธ ์ˆ˜์ • โ€” #1147 ๋ฒˆ๋“ค ID ์ •๋ ฌ ๊ณผ์ •์—์„œ ์œ ์‹ค๋œ ๊ณต์œ  Keychain Access Group entitlement ๋ณต๊ตฌ

๐Ÿ“ท ์Šคํฌ๋ฆฐ์ƒท or ์˜์ƒ(UI ๋ณ€๊ฒฝ ์‹œ)

ํ•ด๋‹น ์—†์Œ

๐Ÿ› ๏ธ ์ž‘์—…๋‚ด์šฉ

PR #627(744ad80b)์ด ๋„ฃ์—ˆ๋˜ ๊ณต์œ  Keychain Access Group entitlement ๋ฅผ #1147(a68f93c2)์ด "๋ฏธ์‚ฌ์šฉ" ์‚ฌ์œ ๋กœ iOSยทwatch ์–‘์ชฝ์—์„œ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค(์›Œ์น˜ entitlements ๋Š” ํŒŒ์ผ์งธ ์‚ญ์ œ, Project.swift ์˜ entitlements: ์ธ์ž๋„ ํ•จ๊ป˜ ์‚ฌ๋ผ์ง). ํ˜„ํ–‰ ๋ฒˆ๋“ค ID ์ฒด๊ณ„ ๊ธฐ์ค€์œผ๋กœ ๋ณต๊ตฌํ•ฉ๋‹ˆ๋‹ค.

  • UMCApp/UMCApp.entitlements โ€” keychain-access-groups ์ถ”๊ฐ€
    • ์ฒซ ํ•ญ๋ชฉ $(AppIdentifierPrefix)com.umc.product.shared(๊ณต์œ  ๊ทธ๋ฃน), ๋‘˜์งธ ํ•ญ๋ชฉ $(AppIdentifierPrefix)com.umc.product(๊ธฐ๋ณธ ๊ทธ๋ฃน)
    • ๊ธฐ์กด ํ‚ค 5๊ฐœ๋Š” ๋ฌด๋ณ€๊ฒฝ
  • UMCApp/UMCWatchApp/UMCWatchApp.entitlements โ€” ์‹ ๊ทœ ์ƒ์„ฑ
    • ์ฒซ ํ•ญ๋ชฉ $(AppIdentifierPrefix)com.umc.product.shared, ๋‘˜์งธ ํ•ญ๋ชฉ $(AppIdentifierPrefix)com.umc.product.watchkitapp
  • UMCApp/UMCWatchApp/Project.swift โ€” watchAppProject(entitlements: .file(path: "UMCWatchApp.entitlements")) ๋ฐฐ์„ 
    • ํŒŒ์ผ๋งŒ ๋งŒ๋“ค๊ณ  ์ธ์ž๋ฅผ ์•ˆ ๋„˜๊ธฐ๋ฉด ๋ฌดํšจ๋ผ ์ด ํ•œ ์ค„์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค
  • UMCApp/Core/Network/Sources/Auth/KeychainTokenStore.swift โ€” access group ๋™์ž‘์„ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์„œ ์ฃผ์„๋งŒ ์ถ”๊ฐ€, ๋กœ์ง ๋ฌด๋ณ€๊ฒฝ
  • docs/claude/build-and-modules.md โ€” ใ€Œ๊ณต์œ  Keychain Access Groupใ€ ์†Œ์ ˆ ์ถ”๊ฐ€ (์„ธ ๋ฒˆ์งธ ์œ ์‹ค ๋ฐฉ์ง€์šฉ ๊ทœ์•ฝ ๋ฌธ์„œํ™”)

๊ฒ€์ฆ

  • tuist install + tuist generate ์„ฑ๊ณต
  • ์ƒ์„ฑ๋œ UMCWatchApp.xcodeproj/project.pbxproj ์— CODE_SIGN_ENTITLEMENTS = UMCWatchApp.entitlements (Debug/Release ์–‘์ชฝ) ํ™•์ธ
  • cd UMCApp && make test โ†’ TEST SUCCEEDED (32 tests / 5 suites, iPhone 17 Pro ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ)
  • plutil -lint ๋‘ entitlements ๋ชจ๋‘ ํ†ต๊ณผ

๐Ÿ“‹ ์ถ”ํ›„ ์ง„ํ–‰ ์ƒํ™ฉ

  • ์›Œ์น˜ ๋‹จ๋… API ํ˜ธ์ถœ์€ ์ด PR ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Apple Watch ๋Š” ์ž์ฒด keychain ์„ ๊ฐ€์ง„ ๋ณ„๊ฐœ ๊ธฐ๊ธฐ๋ผ, access group ์„ ๋งž์ถฐ๋„ ์›Œ์น˜๊ฐ€ iPhone ์˜ keychain ํ•ญ๋ชฉ์„ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. access group ์€ ๋™์ผ ๊ธฐ๊ธฐ ๋‚ด ๋™์ผ ํŒ€ ์„œ๋ช… ํƒ€๊ฒŸ ๊ฐ„ ๊ณต์œ  ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด์Šˆ ์™„๋ฃŒ ์กฐ๊ฑด ์ค‘ "์‹ค์ œ ํŽ˜์–ด๋ง ๊ธฐ๊ธฐ์—์„œ ์›Œ์น˜๊ฐ€ iPhone ์ €์žฅ ํ† ํฐ์„ ์ฝ์–ด์˜ค๋Š”์ง€ ๊ฒ€์ฆ"์€ ์ด ๊ฒฝ๋กœ๋กœ๋Š” ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์‹ค์ œ ํ† ํฐ ์ „๋‹ฌ ๊ฒฝ๋กœ๋Š” WatchConnectivity ๋กœ iPhoneโ†’Watch ์ „์†ก ํ›„ ์›Œ์น˜ ์ž์ฒด keychain ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (โ™ป๏ธ Refactor: WatchConnectivity ๋„๋ฉ”์ธ ํŽ˜์ด๋กœ๋“œ ๊ณ„์•ฝ ์ •์˜ + ์–‘๋ฐฉํ–ฅ ์ˆ˜์‹  ๊ฒฝ๋กœ ๊ตฌํ˜„ย #1210 ํŽ˜์ด๋กœ๋“œ ๊ณ„์•ฝ / ๐Ÿ› Bug: iOS ์•ฑ์— WCSession ๋ฏธ๋ฐฐ์„  โ€” CoreWatchConnectivity ๋งํฌยทDI ๋“ฑ๋กยทactivate() ํ˜ธ์ถœ ์—†์Œย #1211 WCSession ๋ฐฐ์„ ).
  • ๊ทธ ์ „์ œ๋กœ TokenStoreยทKeychainTokenStore ์˜ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ๋ชจ๋“ˆ ์ถ”์ถœ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ CoreNetwork ๋Š” KakaoSDK(iOS 13+ ์ „์šฉ)ยทGoogleSignIn(macOS/iOS ์ „์šฉ)์— ์˜์กดํ•ด watchOS ๋นŒ๋“œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ์†Œ์…œ ๋กœ๊ทธ์ธ SDK ์—†๋Š” ๋ณ„๋„ ๋ชจ๋“ˆ๋กœ ๋–ผ์–ด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค โ†’ ๐Ÿ€ ETC: WatchConnectivity ํ…Œ์ŠคํŠธ ํƒ€๊ฒŸ + CI watchOS ๋นŒ๋“œ ๊ฒ€์ฆ ์ถ”๊ฐ€ย #1216 ๋ฒ”์œ„.
  • ์‚ฌ๋žŒ์ด ํ•ด์•ผ ํ•  ์ผ: Apple Developer ํฌํ„ธ์—์„œ App ID com.umc.product ยท com.umc.product.watchkitapp ๋‘ ๊ฐœ์— Keychain Sharing capability ์™€ com.umc.product.shared ๊ทธ๋ฃน ๋“ฑ๋ก. ๋ฏธ๋“ฑ๋ก์ด๋ฉด ์‹ค๊ธฐ๊ธฐ/์•„์นด์ด๋ธŒ ์„œ๋ช…์ด ์‹คํŒจํ•˜๊ณ  ๋Ÿฐํƒ€์ž„ ์ฆ์ƒ์€ SecItemAdd ์˜ errSecMissingEntitlement(-34018) ์ž…๋‹ˆ๋‹ค. ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋นŒ๋“œยทํ…Œ์ŠคํŠธ๋Š” ์˜ํ–ฅ ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ๋ฆฌ๋ทฐ ํฌ์ธํŠธ

  • ๊ทธ๋ฃน ์‹๋ณ„์ž ํ™•์ •: ํ˜„ํ–‰ ๋ฒˆ๋“ค ID ์ฒด๊ณ„(com.umc.product / .watchkitapp / group.com.umc.product.widget)์— ๋งž์ถฐ $(AppIdentifierPrefix)com.umc.product.shared ๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒ€ ID ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ•์ง€ ์•Š๊ณ  ๋ ˆํฌ ๊ด€๋ก€๋Œ€๋กœ $(AppIdentifierPrefix) ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐ์—ด ์ˆœ์„œ๊ฐ€ ๊ณ„์•ฝ์ž…๋‹ˆ๋‹ค. kSecAttrAccessGroup ๋ฏธ์ง€์ • SecItemAdd ๋Š” ๋ฐฐ์—ด ์ฒซ ํ•ญ๋ชฉ์— ์ €์žฅํ•˜๋ฏ€๋กœ, ๊ณต์œ  ๊ทธ๋ฃน์„ ์ฒซ ๋ฒˆ์งธ์— ๋‘๋ฉด Swift ์ชฝ์— ํŒ€ ํ”„๋ฆฌํ”ฝ์Šค ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ ๋„ ํ† ํฐ์ด ๊ณต์œ  ๊ทธ๋ฃน์œผ๋กœ ๊ฐ‘๋‹ˆ๋‹ค. KeychainTokenStore ๊ฐ€ access group ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋กœ์ง ๋ณ€๊ฒฝ์ด ํ•„์š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‘˜์งธ ํ•ญ๋ชฉ์€ ์•ˆ์ „์žฅ์น˜์ž…๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ยท์‚ญ์ œ ์ฟผ๋ฆฌ๋Š” access group ๋ฏธ์ง€์ • ์‹œ ์•ฑ์ด ๊ฐ€์ง„ ๋ชจ๋“  ๊ทธ๋ฃน์„ ํ›‘์œผ๋ฏ€๋กœ, ๊ธฐ์กด ๋ฐฐํฌํŒ์ด ๊ธฐ๋ณธ ๊ทธ๋ฃน์— ์ €์žฅํ•œ ํ† ํฐ์ด ๊ณ„์† ์ฝํž™๋‹ˆ๋‹ค โ†’ ์—…๋ฐ์ดํŠธ ์‹œ ๊ฐ•์ œ ๋กœ๊ทธ์•„์›ƒ ์—†์Œ. ์ด ์ค„์„ ๋นผ๋ฉด ์ „ ์‚ฌ์šฉ์ž ์žฌ๋กœ๊ทธ์ธ์ž…๋‹ˆ๋‹ค.

โœ… Checklist

PR์ด ๋‹ค์Œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”!!!

  • ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค
  • ์œ ์ง€-๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด ์ฃผ์„์ฒ˜๋ฆฌ๋ฅผ ์ž˜ ์ž‘์„ฑํ•˜์˜€๋Š”๊ฐ€?

- iOSยทwatchOS ์–‘ ํƒ€๊ฒŸ์— `$(AppIdentifierPrefix)com.umc.product.shared` ๋ฅผ
  `keychain-access-groups` ์ฒซ ํ•ญ๋ชฉ์œผ๋กœ ์„ ์–ธ (#1147 ์—์„œ ์œ ์‹ค๋œ #627 ์˜ ์„ค์ •)
- `UMCWatchApp.entitlements` ์‹ ๊ทœ ์ƒ์„ฑ ํ›„ `watchAppProject(entitlements:)` ๋กœ ๋ฐฐ์„  โ€”
  ํŒŒ์ผ๋งŒ ๋งŒ๋“ค๊ณ  ์ธ์ž๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š์œผ๋ฉด ๋ฌดํšจ๋ผ ์ด ๋ฐฐ์„ ์ด ํ•ต์‹ฌ
- ๋‘˜์งธ ํ•ญ๋ชฉ์— ๊ฐ ํƒ€๊ฒŸ ์ž๊ธฐ App ID ๊ทธ๋ฃน์„ ๋‚จ๊ฒจ ๊ธฐ์กด ๊ธฐ๋ณธ ๊ทธ๋ฃน์— ์ €์žฅ๋œ ํ† ํฐ์ด
  ๊ณ„์† ์กฐํšŒ๋˜๊ฒŒ ์œ ์ง€ (์—…๋ฐ์ดํŠธ ์‹œ ๊ฐ•์ œ ๋กœ๊ทธ์•„์›ƒ ๋ฐฉ์ง€)
- `KeychainTokenStore` ๋Š” access group ๋ฏธ์ง€์ • ๊ธฐ๋ณธ๊ฐ’ ๊ทœ์น™์— ์˜์กดํ•จ์„ ๋ฌธ์„œ ์ฃผ์„์œผ๋กœ ๋ช…์‹œ
- `docs/claude/build-and-modules.md` ์— ๋ฐฐ์—ด ์ˆœ์„œ ๊ณ„์•ฝยทwatchOS ์ œ์•ฝยท์„œ๋ช… ์ฃผ์˜ ๊ทœ์•ฝ ์ถ”๊ฐ€
@JEONG-J JEONG-J added the ๐Ÿ› Bug ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ์ž…๋‹ˆ๋‹ค. label Aug 29, 2026
@JEONG-J JEONG-J self-assigned this Aug 29, 2026
- UMCApp.entitlements ์ฃผ์„์—์„œ ์œ„์ ฏ ํƒ€๊ฒŸ์„ ๊ณต์œ  ๊ทธ๋ฃน ๋Œ€์ƒ์ฒ˜๋Ÿผ ์ฝํžˆ๋˜ ํ‘œํ˜„ ์ œ๊ฑฐ (์œ„์ ฏ์€ Keychain ๋ฏธ์‚ฌ์šฉ)
- KeychainTokenStore ๋ฌธ์„œ ์ฃผ์„์— clear() ์—ญ์‹œ ๋ชจ๋“  access group ๋Œ€์ƒ์ž„์„ ๋ช…์‹œ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

๐Ÿ› Bug ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ์ž…๋‹ˆ๋‹ค.

Projects

None yet

1 participant