KoreaMango 나무

2024년 watchOS, watchKit, watchExtension 개발 본문

iOS/watchOS

2024년 watchOS, watchKit, watchExtension 개발

KoreaMango 2024. 6. 12. 21:41

오랜만입니다 :)

 

요즘 다시 swift로 watchOS 를 개발하고 있어서 포스팅 하나 남깁니다!

 

# watchApp, watchApp WatchKit Extension

옛날 워치 앱 코드를 작업하다 보니 watchApp, watchApp WatchKit Extension 이렇게 두 개가 있더라구요

Apple Doc - Setting up a watchOS Project

 

이렇게 말이죠..

 

그런데 테스트로 만들어본 프로젝트에서 워치 앱을 만들어봤는데, 

watchApp 테스트 프로젝트

 

전혀 다른 구조더라구요.

 

scheme도 다르고 target도 달라서 이게 뭐지 싶었는데 찾아보니까

 

Xcode 14이후 부터는 watchKit Extension 필요없이 바로 watchApp으로 단일 앱 타겟으로 만들어진다고 해요.

 

그래서 크게 신경 안써도 되는 문제였어요.

 

# Watch Connectivity

iOS랑 watchOS랑 어떻게 데이터를 주고 받는지 찾아봤었는데

 

Watch Connectivity의 WCSession을 사용하면 되는거 같았어요.

 

통신을 하려면 iOS, watchOS 둘다 WCSession을 사용해야해요.

 

WCSessionDelegate를 상속 받아서 통신할 객체를 만들어야 하는데 이 WCSessionDelegate는 싱글톤이라서 

여러 곳에서 위임자로 상속한 다음 통신하려고 하면 충돌이 발생해 어느 한 쪽은 제대로 작동 안하니 주의하시길 바랍니다 :)

 

# watchOS 통신 테스트

watchOS랑 iOS랑 데이터를 잘 주고 받는지 테스트를 하려 했는데,
애플에서 시뮬레이터로 테스트하는 것 보다 실 기기로 테스트 하는 것을 권장한다고 해요.

 

그래서 실제 애플워치 하나랑 아이폰을 준비해서 xcode에 연결하고 build를 하려고 했는데 .....

 

xcode 15에서 watchOS를 잘 못찾는 버그가 있었어요..


https://forums.developer.apple.com/forums/thread/734694

 

Apple Watch cannot reconnect | Apple Developer Forums

This is a workaround that won't work if you only have one Mac... In my case, I happen to have a Macbook Pro and a mac mini, and the problem did not occur on the Macbook Pro, so I copied watchOS DeviceSupport (latest is Watch6,6 10.2 (21S364)) to the mac mi

forums.developer.apple.com

 

계속 제 애플워치를 못찾더라구요...

 

그래서 다른 방법 없나 찾아보던 중 한 방법을 찾았어요.

 

iOS는 연결이 잘 되는 상태였기 때문에 iOS를 빌드하고 실행한 다음 

 

iOS 안에 watch 어플을 통해서 워치 앱을 설치해줬어요.

 

그리고 통신 이벤트를 주니까

 

iOS 코드에 print, breakpoint를 걸어서 통신이 잘 되는 걸 확인했어요.

 

양쪽이 reachable 되어야 통신이 되는거니 iOS에만 결과가 나와도 

 

통신이 잘 되는 것을 확인할 수 있었어요!