SwiftUI 로 카카오맵 불러오기

믿기지 않겠지만, 아직도 카카오맵은 Swift를 지원하지 않는다. 이번에 SwiftUI에서 되는지 테스트 해보다가 다행히 표시 되길래 남겨놓는다.

  • http://apis.map.kakao.com/ios/guide/ 에서 최신 라이브러리 다운로드
  • DaumMap.framework 를 드래그해서 [프로젝트] - Frameworks 에 넣기
  • Targets - [Project] - General - Frameworks, Libraries... 에서 DaumMap.frameworkEmbed & Sign으로 변경
  • Build Phases - Copy Bundle ResourcesDaumMap.framework 안의 이미지들을 추가(Info.plist, DaumMap 파일은 추가하면 안됨. Copy items if needed 체크 해제)
    • 이걸 안하면 내 위치 마커 같은게 표시 안됨
    • New Group without Folder로 적당한 곳에 몰아넣으면 보기 편하다
  • Build Phases - Link Binary With Libraries에 아래 라이브러리 추가
    • DaumMap.framework – DaumMap (팝업에서 Add Other 눌러서 찾기)
    • libsqlite3.tbd
    • 아래 목록은 그래도 오류가나면 하나씩 추가해보기
      • libxml2.tbd libc++.tbd
      • QuartzCore.framework
      • CoreLocation.framework
      • SystemConfiguration.framework
      • OpenGLES.framework
  • Build Setting - Objective-C Automatic Reference CountingNO로 변경
  • 프로젝트 최상위 폴더 안에 Kakao-Map-Bridge-Header.h 파일 추가(Podfile이 만들어지는 곳. 경로 변경 오류 회피용)
// Kakao_Map_Bridge_Header_h.h
#ifndef Kakao_Map_Bridge_Header_h
#define Kakao_Map_Bridge_Header_h

#import <DaumMap/MTMapView.h>
#endif /* Kakao_Map_Bridge_Header_h */
  • Build Setting - Objective-C Bridging HeaderKakao-Map-Bridge-Header.h 추가(폴더 경로 주의)
$(PROJECT_DIR)/Kakao-Map-Bridge-Header.h
  • https://developers.kakao.com/apps 에서 번들ID로 key 받아서 Info.plist에 KAKAO_APP_KEY 에 넣기

이렇게하면 카카오맵이 표시된다. 근데 다른 화면으로 이동해도 계속 로그가 찍히는걸로 봐선 메모리 해제가 안되는 것 같다 ㅠㅠ

struct KakaoMapView: UIViewRepresentable { 
  func makeUIView(context: Context) -> MTMapView {
    let view = MTMapView(frame: .zero)
    view.currentLocationTrackingMode = .onWithoutHeading
    view.showCurrentLocationMarker = true
    
    return view
  }
}