Skip to content

boostcampwm-2024/refactor-iOS03-SniffMeet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation


SniffMEET

SniffMEET ์•„์ด์ฝ˜

SniffMEET๋Š” ๋ฐ˜๋ ค๊ฒฌ ์‚ฐ์ฑ… ์นœ๊ตฌ๋ฅผ ์ฐพ๋Š” ์ƒˆ๋กœ์šด ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿพ ์ฆ‰์„์—์„œ ๋งŒ๋‚œ ์‚ฌ๋žŒ๋“ค๊ณผ ์—ฐ๋ฝ์ฒ˜ ๊ณต์œ  ์—†์ด ํ”„๋กœํ•„ ๋“œ๋ž ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ฉ”์ดํŠธ๋ฅผ ๋งบ์„ ์ˆ˜ ์žˆ์–ด์š”.
๐Ÿพ ๋ฉ”์ดํŠธ ๊ด€๊ณ„์ธ ๋ฐ˜๋ ค๊ฒฌ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.
๐Ÿพ ๋ฉ”์ดํŠธ ๊ด€๊ณ„๋ฅผ ๋งบ์€ ์‚ฌ๋žŒ์—๊ฒŒ๋งŒ ์‚ฐ์ฑ… ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์–ด์š”.
๐Ÿพ ์‚ฐ์ฑ… ์š”์ฒญ์€ ์žฅ์†Œ์™€ ๋ฉ”์‹œ์ง€๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์–ด์š”.

SniffMEET์—์„œ ๋ฐ˜๋ ค๊ฒฌ๊ณผ์˜ ์‚ฐ์ฑ…์„ ๋”์šฑ ํŠน๋ณ„ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”.
์ƒˆ๋กœ์šด ์ธ์—ฐ, ํ–‰๋ณตํ•œ ์‚ฐ์ฑ…์œผ๋กœ ์ด์–ด์ ธ์š”. ๐Ÿถ๐Ÿ’›

๐Ÿ“ฑ ๊ธฐ์ˆ ์  ๋„์ „

Profile Drop ๊ธฐ๋Šฅ

NameDrop ํ˜•ํƒœ์˜ ๋ฐฉ์‹์œผ๋กœ ๊ธฐ๊ธฐ๊ฐ„ ํŠน์ • ์•ก์…˜์— ๋Œ€ํ•œ ๋ฐ˜์‘์œผ๋กœ ๋ฐ˜๋ ค๊ฒฌ ํ”„๋กœํ•„ ์นด๋“œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ์—์„œ ๊ณต์‹์œผ๋กœ ์ œ๊ณตํ•˜๋Š” NameDrop API๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— NearbyInteraction + MultipeerConnectivity ์ด์šฉํ•˜์—ฌ ์ง์ ‘ ๋น„์Šทํ•œ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•œ ํ”Œ๋กœ์šฐ์ž…๋‹ˆ๋‹ค.

Screenshot 2024-11-14 at 1 48 06โ€ฏAM

  • ๊ธฐ๊ธฐ๋“ค์€ ๊ฐ๊ฐ NISession๊ณผ MPCSession์„ ๋…๋ฆฝ์ ์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ๊ธฐ๊ธฐ๋“ค์€ MPCSession์„ ํ†ตํ•ด Advertising / Browsing ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๊ธฐ๊ฐ€ ๋ฐœ๊ฒฌ๋œ๋‹ค๋ฉด Invite ํ•˜๊ณ  ์„ธ์…˜์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • NISession์€ ์‹œ์ž‘๋˜๋ฉด ์ž๋™์œผ๋กœ ๊ธฐ๊ธฐ๋งˆ๋‹ค DiscoveryToken์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • DiscoveryToken์„ ๊ธฐ๊ธฐ๋ผ๋ฆฌ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ MPCSession์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
  • DiscoveryToken์ด ์ •์ƒ์ ์œผ๋กœ ๊ตํ™˜๋˜๋ฉด NISession์œผ๋กœ ์—ฐ๊ฒฐ๋˜๊ณ  ๊ธฐ๊ธฐ์˜ ๊ฑฐ๋ฆฌ์™€ ๋ฐฉํ–ฅ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ดํ›„, ํ•ด๋‹นํ•˜๋Š” ๊ฑฐ๋ฆฌ์™€ ๋ฐฉํ–ฅ์— ์žˆ๋Š” ๊ธฐ๊ธฐ์™€ MPCSession์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ(ํ”„๋กœํ•„ ์นด๋“œ)๋ฅผ ๊ตํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ๋‘ ํ”ผ์–ด๊ฐ„์— ๋ฐ์ดํ„ฐ ๊ตํ™˜์ด ๋งˆ์น˜๊ฒŒ ๋˜๋ฉด NI, MPC Session ๋ชจ๋‘ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

๐Ÿ”ฅ ์ค‘๋ณต ์—ฐ๊ฒฐ ๋ฌธ์ œ

startAdvertising์œผ๋กœ ๊ธฐ๊ธฐ ์กด์žฌ๋ฅผ ๊ด‘๊ณ ํ•˜๊ณ  startBrowsing์œผ๋กœ ๊ธฐ๊ธฐ๋ฅผ ํƒ์ƒ‰ํ•ด์„œ invite๋ฅผ ๋ณด๋‚ด๋Š” ๊ณผ์ •์—์„œ, ์–‘์ชฝ ๊ธฐ๊ธฐ ๋ชจ๋‘ advertising, browsing, invite๋ฅผ ์ง„ํ–‰ํ•ด ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋˜์—ˆ๊ณ  ์—ฐ๊ฒฐ ๋ถˆ์•ˆ์ •์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

PassthroughSubject ์ด์šฉํ•ด invite ๋ฐ›์•˜๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ๋ฐ›์€๊ฒฝ์šฐ ๋”์ด์ƒ invite๋ฅผ ๋ณด๋‚ด์ง€ ์•Š๋„๋ก stopbrowsingํ•˜์—ฌ ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ฅ ์—ฐ๊ฒฐ์„ฑ ๋ฌธ์ œ

PeerConnection connectedHandler (advertiser side) - error [Unable to connect].
PeerConnection connectedHandler remoteServiceName is nil.
[GCKSession] Not in connected state, so giving up for participant [1C22D602] on channel [0].ll

์œ„์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๋“ค์ด ๋ฐœ์ƒํ•˜๋ฉฐ MPCSession์ด Connected ์ƒํƒœ๊ฐ€ ๋œ ์ดํ›„ ๋ฐ”๋กœ Disconnected๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

์ฒ˜์Œ์—๋Š” ์—ฐ๊ฒฐ ์„ฑ๊ณต์ด ๋žœ๋ค์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ™˜๊ฒฝ ํ†ต์ œ ๋ฐฉ์‹์˜ ๋นŒ๋“œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด p2p wifi ์—ฐ๊ฒฐ ์ƒํƒœ์—์„œ๋งŒ ๋ถˆ์•ˆ์ •ํ•˜๊ณ  ์ผ๋ฐ˜ wifi ์—ฐ๊ฒฐ ์ƒํƒœ์—์„œ๋Š” ์—ฐ๊ฒฐ์ด ์•ˆ์ •์ ์ธ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ด๋„ ์ฝ”๋“œ ์ƒ์˜ ๋ฌธ์ œ๋Š” ์—†์–ด ๋ณด์˜€๊ณ , ๋™์ผํ•œ ์ฝ”๋“œ์—์„œ ์™€์ดํŒŒ์ด ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์—ฐ๊ฒฐ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์—†์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ด ์ฝ”๋“œ ์™ธ์ ์ธ ๋ถ€๋ถ„์„ ์‚ดํˆ๊ณ  ๋ฌธ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

p2p ์™€์ดํŒŒ์ด ์—ฐ๊ฒฐ์„ ์œ„ํ•ด์„œ๋Š” ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ ๊ถŒํ•œ์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ๋ฐ, ์ดˆ๊ธฐ ์…‹ํŒ… ๊ณผ์ •์—์„œ ์ถ”๊ฐ€ํ•œ ๊ถŒํ•œ์ด PR ์ถฉ๋Œ ํ•ด๊ฒฐ๊ณผ์ •์—์„œ ๋ˆ„๋ฝ๋˜๋ฉฐ ๊ถŒํ•œ์กฐ๊ฑด์ด ์‚ฌ๋ผ์ง„ ์ƒํƒœ์˜€์Šต๋‹ˆ๋‹ค. ๊ถŒํ•œ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•˜์˜€๊ณ  ์—ฐ๊ฒฐ ์ƒํƒœ๊ฐ€ ๋ชจ๋‘ ์ •์ƒ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ฅ ๊ธฐ๊ธฐ ๊ฐ„ ๋ฐฉํ–ฅ ํŒŒ์•… ๋ฌธ์ œ

// ๋ฐฉํ–ฅ ์ธก๊นŒ์ง€ ์ „๋ถ€ ์„ฑ๊ณตํ•œ ๊ธฐ๊ธฐ ๋กœ๊ทธ
Distance and Direction to peer: 0.84639883 and SIMD3<Float>(-0.30216265, 0.33539462, -0.892305)
Distance and Direction to peer: 0.7151826 and SIMD3<Float>(-0.35387823, 0.27636543, -0.89352804)
Distance and Direction to peer: 0.7253396 and SIMD3<Float>(-0.07152926, 0.03417755, -0.99685276)

// ๋ฐฉํ–ฅ ์ธก์ • ์‹คํŒจํ•œ ๊ธฐ๊ธฐ ๋กœ๊ทธ
Distance and Direction to peer: 0.6682374 and SIMD3<Float> (0.1, 0.1, 0.1)
Distance and Direction to peer: 0.51894075 and SIMD3<Float>(0.1, 0.1, 0.1)
Distance and Direction to peer: 0.32887232 and SIMDะ—<Float>(0.1, 0.1, 0.1)
Distance and Direction to peer: 0.17357983 and SIMD3<Float>(0.1, 0.1, 0.1)

NI ์ด์šฉํ•ด ๊ธฐ๊ธฐ ๊ฐ„ ๊ฑฐ๋ฆฌ์™€ ๋ฐฉํ–ฅ์„ ์ธก์ •ํ•˜๋Š” ์‹œ์ ์—์„œ ๋‘ ๊ธฐ๊ธฐ ์ค‘ ํ•œ ๊ธฐ๊ธฐ์—์„œ ๋ฐฉํ–ฅ๋งŒ ์ธก์ •์ด ์•ˆ๋˜๋Š” ์ƒํƒœ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

๋™์ผํ•œ ๋ฉ”์„œ๋“œ์—์„œ ๊ฑฐ๋ฆฌ์™€ ๋ฐฉํ–ฅ์„ ์ธก์ •ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๋ฐฉํ–ฅ๋งŒ ์ธก์ •๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์—์„œ ๊ธฐ๊ธฐ ๋ฌธ์ œ๋ฅผ ๋– ์˜ฌ๋ ธ๊ณ , ๋‹ค๋ฅธ ๊ธฐ๊ธฐ์™€ ๊ต์ฐจ๊ฒ€์ฆ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ 1๊ฐœ์˜ ๊ธฐ๊ธฐ์—์„œ๋งŒ ๋ฐฉํ–ฅ์ด ์ธก์ •๋˜์ง€ ์•Š๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๊ธฐ๊ธฐ ๋ฌธ์ œ๋กœ ๊ฒฐ๋ก ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค.

NI๋ฅผ ์œ„ํ•ด์„œ๋Š” U1์นฉ์ด ํ•„์š”ํ•œ๋ฐ, ๊ธฐ๊ธฐ์—์„œ ๊ทธ ๋ถ€๋ถ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹œ๋„ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ธฐ์˜ ์ˆ˜๊ฐ€ ํ•œ์ •์ ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— 100ํผ์„ผํŠธ์˜ ํ™•์‹ ์„ ํ•  ์ˆ˜๋Š” ์—†๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

๐Ÿ”ฅ ์‹œ์  ์ฐจ์ด๋กœ ์ธํ•œ ์ผ๋ฐฉ์ ์ธ ์„ธ์…˜ ์ข…๋ฃŒ ๋ฌธ์ œ

๋‘ ๊ธฐ๊ธฐ ์„œ๋กœ์— ๋Œ€ํ•œ ๊ฑฐ๋ฆฌ์™€ ๋ฐฉํ–ฅ์„ ์ธก์ •ํ•˜์ง€๋งŒ ์„ค์ •ํ•œ ํŠน์ • ๋ฐฉํ–ฅ๊ณผ ๊ฑฐ๋ฆฌ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์‹œ์  ์ฐจ์ด๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด์ฒ˜๋Ÿผ ๋งŒ์กฑํ•˜๋Š” ์‹œ์ ์ด ๋‹ค๋ฆ„์— ๋”ฐ๋ผ ํ•œ์ชฝ ๊ธฐ๊ธฐ์—์„œ๋งŒ ๋ฐ์ดํ„ฐ ์ˆ˜์‹  ํ›„ ์ผ๋ฐฉ์ ์œผ๋กœ ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒํ•˜์—ฌ ๋‹ค๋ฅธ ๊ธฐ๊ธฐ์—์„œ๋Š” ํ”„๋กœํ•„ ๊ณต์œ ๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค.

๋˜ํ•œ NI๋Š” ์„ธ์…˜ ์—ฐ๊ฒฐ๋œ ๊ธฐ๊ธฐ์— ๋Œ€ํ•ด์„œ ์งง์€ ์‹œ๊ฐ„ ์ฃผ๊ธฐ ๋งˆ๋‹ค ๋ฐฉํ–ฅ๊ณผ ๊ฑฐ๋ฆฌ ์ธก์ •์œผ๋กœ ์—๋„ˆ์ง€ ์†Œ๋ชจ๊ฐ€ ํฐ ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ ์ตœ์†Œํ•œ์˜ ๋™์ž‘ ์‹œ๊ฐ„์„ ์œ ์ง€ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

๊ฒฐ๋ก 

์ข…๋ฃŒ๋˜๋Š” ์‹œ์ ์„ ์ž์‹ ์ด ๋ฐ์ดํ„ฐ ์ˆ˜์‹ ํ•˜๊ณ  ์ƒ๋Œ€๋ฐฉ ๊ธฐ๊ธฐ์—๊ฒŒ๋„ ์ˆ˜์‹  ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ฐ›์€ ์‹œ์ ์œผ๋กœ ํ•œ๋‹ค.

  1. ๊ธฐ๊ธฐ ๊ฐ„ ๊ฑฐ๋ฆฌ ๋ฐ ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ send ํ”Œ๋ž˜๊ทธ ์ „์†ก
  2. receive ํ”Œ๋ž˜๊ทธ๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ ๊นŒ์ง€ ๋Œ€๊ธฐ
  3. receive ํ”Œ๋ž˜๊ทธ๋ฅผ ์ˆ˜์‹ ๋ฐ›์œผ๋ฉด ์ƒ๋Œ€๋ฐฉ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ทฐ๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ฒŒ ๋œ๋‹ค.

๐Ÿถ 'SniffMEET'์—์„œ ๊ฐ€๋Šฅํ•œ ๊ฒƒ

์ต๋ช… ๋กœ๊ทธ์ธ

  • ๋ฐ˜๋ ค๋™๋ฌผ ์ •๋ณด ์ž…๋ ฅ๋งŒ์œผ๋กœ ์•ฑ ์ด์šฉ์ด ๊ฐ€๋Šฅํ•ด์š”
  • ๋ฐ˜๋ ค๋™๋ฌผ ์ •๋ณด๋Š” ํ™ˆ ํ”„๋กœํ•„ ์นด๋“œ๋ฅผ ํ†ตํ•ด ํ™•์ธ / ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”
์˜จ๋ณด๋”ฉ ๋ฐ ๋กœ๊ทธ์ธ ๋ฐ˜๋ ค๋™๋ฌผ ์ •๋ณด ์ˆ˜์ •

๋ฉ”์ดํŠธ ๋งบ๊ธฐ

  • ํ”„๋กœํ•„ ๋“œ๋ž ํ˜•ํƒœ์˜ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ฉ”์ดํŠธ ๋งบ๊ธฐ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์–ด์š”
  • ์ง์ ‘ ๋งŒ๋‚œ ์ƒ๋Œ€๋งŒ ๋ฉ”์ดํŠธ๋ฅผ ๋งบ์„ ์ˆ˜ ์žˆ์–ด์š”
  • ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์š”์ฒญ ์ƒ๋Œ€์˜ ๋ฐ˜๋ ค๋™๋ฌผ์˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”
  • ์ˆ˜๋ฝ์‹œ ๋ฉ”์ดํŠธ ๊ด€๊ณ„๊ฐ€ ํ˜•์„ฑ๋˜์–ด ์ดํ›„ ์‚ฐ์ฑ…์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์–ด์š”
ํ”„๋กœํ•„ ๋“œ๋ž ์ƒ๋Œ€ ๋ฐ˜๋ ค๊ฒฌ ์ •๋ณด ํ™•์ธ ๋ฉ”์ดํŠธ ๋ชฉ๋ก

์‚ฐ์ฑ… ์š”์ฒญ

  • ๋‚ด ๋ฉ”์ดํŠธ๋“ค์—๊ฒŒ ์‚ฐ์ฑ…์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์–ด์š”
  • ๊ฐ„๋‹จํ•œ ๋ฉ”์„ธ์ง€์™€ ๋งŒ๋‚จ์˜ ์žฅ์†Œ๋ฅผ ์ •ํ•ด ์š”์ฒญํ•  ์ˆ˜ ์žˆ์–ด์š”
  • ์ง€๋„์—์„œ ๋งŒ๋‚  ์žฅ์†Œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”
  • ์•Œ๋ฆผ์„ ํ†ตํ•ด ๋ฉ”์ดํŠธ์—๊ฒŒ ์š”์ฒญ์ด ์ „๋‹ฌ๋ผ์š”
์‚ฐ์ฑ… ์š”์ฒญ ๋ณด๋‚ด๊ธฐ ์‚ฐ์ฑ… ์š”์ฒญ ์ˆ˜๋ฝ ์•Œ๋ฆผ


๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ

VIPER ํŒจํ„ด

ํŒ€์›๋“ค์ด ๋ชจ๋‘ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋˜ ํŒจํ„ด์ด๋ผ ๊ณ ๋ คํ•ด๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์กฐ๊ฐ€ ์ „๋ถ€ ๋‚˜๋ˆ ์ ธ ์žˆ์–ด ์ดˆ๊ธฐ ์„ค์ •์ด ๋ถ€๋‹ด๋œ๋‹ค๋Š” ์ ์ด ์žˆ์ง€๋งŒ ์ข€ ๋” ๊ฐ๊ฐ์˜ ์—ญํ• ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ญํ• ์ด ์ž˜ ๊ตฌ๋ถ„๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์—์„œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์ž‘์—…์‹œ ์ˆ˜์ •์˜ ๋ฒ”์œ„๊ฐ€ ์ค„์–ด๋“ ๋‹ค๋Š” ์ ์ด ์žˆ์–ด์„œ ์›ํ™œํžˆ ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Swift Concurrency

๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด์„œ๋Š” Swift Concurrency๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ์˜ ๋Ž์Šค๊ฐ€ ๊นŠ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์—์„œ ๊ฐ€๋…์„ฑ์ด ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์—๋Ÿฌ ํ•ธ๋“ค๋งํ•  ๋•Œ GCD๋Š” ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ๊ณผ ๋น„๊ตํ•˜๋ฉด ์—๋Ÿฌ ํ•ธ๋“ค๋ง๋„ ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ์™€ DB ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Combine

๋น„๋™๊ธฐ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ first-party ํ”„๋ ˆ์ž„์›Œํฌ์ธ Combine์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ๊ณผ UI ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

MapKit

์‚ฌ์šฉ์„ฑ์ด ํŽธ๋ฆฌํ•˜๋‹ค๋Š” ์ ๊ณผ ์ปค์Šคํ…€์ด ๋น„๊ต์  ๊ฐ„ํŽธํ•œ ์ด์œ ๋กœ ์ง€๋„ ์‚ฌ์šฉ์— MapKit์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

Supabase

Supabase ์„œ๋ฒ„์™€ HTTP REST API๋กœ ์ง์ ‘ ํ†ต์‹ ํ•˜๋„๋ก Supabase Layer๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์—์„œ ์ž์ฒด์ ์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. Supabase ์œ ์ €์™€ ์„ธ์…˜ ๋ณต์›์ด๋‚˜ ๊ฐฑ์‹ ๊ณผ ๊ฐ™์€ ๋กœ์ง์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. image

Nearby Interaction

ํŠน์ • ๊ฑฐ๋ฆฌ์™€ ๋ฐฉํ–ฅ์„ ๋งŒ์กฑํ•˜๋Š” ๊ธฐ๊ธฐ์— ๋Œ€ํ•ด์„œ๋งŒ ํ”„๋กœํ•„ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. NI๋Š” ํƒ์ƒ‰ํ•œ ๊ธฐ๊ธฐ์˜ ๊ฑฐ๋ฆฌ์™€ ๋ฐฉํ–ฅ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ UWB๋ฅผ ์ง€์›ํ•˜๋Š” ๊ธฐ๊ธฐ(iPhone 11+)์— ์ œํ•œ๋˜์–ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Multipeer Connectivity

Nearby Interaction์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•ด ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์™€์ดํŒŒ์ด๋‚˜ ๋ธ”๋ฃจํˆฌ์Šค๋ฅผ ์ด์šฉํ•ด ๊ธฐ๊ธฐ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ์—ฐ๊ฒฐํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ๋ฅผ ์ด์šฉํ•˜์—ฌ DiscoveryToken๊ณผ ํ”„๋กœํ•„ ์นด๋“œ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Push Notification

์‚ฐ์ฑ… ์š”์ฒญ / ์‘๋‹ต ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด Push Notification ์„œ๋ฒ„๋ฅผ Vapor๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ํŒ€์› ์†Œ๊ฐœ

๋ฐฐํ˜„์ง„ ์œค์ง€์„ฑ ์ตœ์ง„์› ํ—ˆํ˜œ๋ฏผ

๐Ÿ›  ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

ํ•ญ๋ชฉ ๋‚ด์šฉ
๊ฐœ๋ฐœ ํˆด Xcode 16+
ํƒ€์ผ“ ๋ฒ„์ „ iOS 15+
๋ฒ„์ „ ๊ด€๋ฆฌ ๋„๊ตฌ GitHub
์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋„๊ตฌ SwiftLint
์˜์กด์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ Swift Package Manager (SPM)

๐Ÿ“ ๋ฌธ์„œ

ํŒ€๋…ธ์…˜ Wiki ๋””์ž์ธ ํ”„๋กœ๋•ํŠธ ๋ฐฑ๋กœ๊ทธ

๐Ÿ“† 2024. 10. 28 - ์ง„ํ–‰ ์ค‘

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages