아이폰/아이팟터치 펌웨어 3.0에서 오프라인맵이 사용하는 심볼릭링크 방식은 더 이상 통용되지 않습니다.

펌웨어 3.0에 포함된 기본 구글맵 지도어플은 내부적인 기능 추가외에도 몇가지 사항이 달라졌습니다.

오프라인맵이 사용하는 방식은 원래 구글맵이 사용하는 캐쉬 디렉토리의 지도파일을 심볼릭링크로 만들고, GMDL 지도파일을 연결해주어 사용하는 방식입니다.

심볼릭 링크로 만들어주면, GMDL지도파일을 구글맵 캐쉬 디렉토리에 생성하지 않아도 되고, 구글맵이 지도파일을 삭제하더라도 심볼릭 링크만 삭제되고 GMDL지도파일은 다른 곳에 있기 때문에 필요할때 링크만 다시 만들어서 사용하면 간편합니다. 오프라인맵 어플이 하는 일은 이 심볼릭 링크를 캐쉬 디렉토리에 만들어 줍니다.

** 심볼릭링크는 실제 파일은 아니지만, 실제파일을 연결시켜주어, 심볼릭링크를 사용하더라도, 원래 파일을 사용할 수 있게 해줍니다. (윈도의 바로가기 버튼이라고 생각하시면 이해가 쉬울듯 하네요.)

지도 데이타 파일명 : MapTiles.sqlitedb
지도 데이타 설정파일 : com.apple.Maps.plist

구글맵 지도 캐쉬 디렉토리 : /private/var/mobile/Library/Caches/MapTiles/
오프라인맵의 GMDL지도 디렉토리 : /private/var/mobile/Media/Maps/Seoul/

그렇지만, 펌웨어 3.0의 구글맵 어플은 이제 더 이상 심볼릭링크로는 작동되지 않도록 수정된거 같습니다.

    1. 심볼릭링크가 작동되지 않으면 무슨 일이 있는가?  

심볼릭링크가 구글 캐쉬 디렉토리에서 사용할 수 없다면, 사용자는 GMDL지도파일을 구글 캐쉬 디렉토리에 업로드해야합니다.

문제는, 구글 캐쉬 디렉토리의 지도파일은 무선랜이 되는 상태에서는 특정 규칙에 따라 매번 지워지게 되어 있습니다. GMDL지도파일을 캐쉬 디렉토리에 올려도 온라인/오프라인을 반복해서 사용하다보면, 어느새 데이타는 날아가게 되고, 사용자는 GMDL파일을 다시 캐쉬 디렉토리로 업로드해야합니다.

서울경기지역 GMDL지도파일이 약 570메가인데, 1세대 아이팟터치 내부에서 복사를 실행해도 약 6분이 소요되었습니다. 2세대는 약간 더 빠르겠지만, 오프라인에서 지도를 사용하는 순간은 매우 급하게 찾아보아야할때가 많은데, 캐쉬 디렉토리로 복사를 실행하고 6분씩 멍하니 있는 것은 매우 활용성이 떨어지는 일입니다.

그나마, 지도파일이 삭제되는 것을 방지하기 위해서는 구글맵 어플은 오프라인상태에서만 사용하는 것입니다. 구글맵 어플을 온라인에서 사용하지 않으면 지도파일은 그대로 보존됩니다.

    2. GMDL 지도파일은 계속 사용 가능 한가?  

GDML지도파일에 문제가 있는지를 테스트하기위해, GMDL지도파일을 구글맵이 사용하는 캐쉬 디렉토리에 직접 업로드하였습니다. 오프라인 상태에서 구글맵을 실행해보니, 매우 잘 보입니다. 그러나, GMDL지도파일을 캐쉬 디렉토리가 아닌, 다른 곳에 놓고 심볼릭 링크를 만들어서 실행하면 지도가 전혀 보이지 않습니다. 이것은 GMDL지도 데이타는 사용가능하지만, 심볼릭링크로는 작동이 안되고 GMDL지도데이타가 구글 캐쉬 디렉토리에 위치해야만 한다는 것입니다.

    3. 심볼릭링크 대신 하드링크로 사용할 수 있는가?  

심볼릭 링크와 비슷한 방식이지만, 링크를 만들때 하드 링크로 만들면 해결할 수 있지 않을까란 의견을 보고 하드링크로 시도해 보았습니다만, 역시나 심볼릭 링크와 마찬가지로 하드링크도 작동하지 않았습니다.

하드링크를 제안한 분은 작동이 된다고 하는데, 저는 안됩니다. ㅡ.,ㅡ

    4. 펌웨어 2.x 에 있는 구글맵 어플을 3.0에서 사용하면 어떨까?  

3.0의 구글맵 어플이 지도파일이 심볼릭링크인지를 확인하고 심볼릭링크이면 작동하지 않도록 만들었다면,  심볼릭링크와 전혀 문제가 없는 펌웨어 2.x의 구글맵어플을 3.0으로 가져와서 사용하면 어떨까하는 아이디어가 떠올랐습니다.

다행히, 저는 3.0이지만, 아내는 2.2.1펌웨어를 그대로 사용하고 있어서, 아내의 아이팟터치에서 2.2.1의 구글맵 어플을 다운로드받아 제 아이팟터치 3.0에 업로드해주었습니다.

3.0에서 2.2.1의 구글맵 어플을 실행해보니, 첫화면이 뜨자마자 홈화면으로 튕겨나갑니다.

혹시나 파일 권한 문제인가 싶어서, 권한조정도 해보았으나 역시나 같은 증상입니다.

이번에는 원래의 3.0 구글맵 어플을 다시 설치해주고, 실행화일만 2.2.1것으로 바꿔치기를 했습니다. 역시나 튕겨나갑니다.

    5. OfflineMaps 3.0 Preview는?  

오프라인맵 3.0 프리뷰 버젼이 등장해있습니다. 직접 테스트해보진 않았지만, 게시판에 글들을 보니, 오프라인맵 개발자도 심볼릭링크 문제는 해결하지 못했습니다. 새로운 오프라인맵 3.0 프리뷰에서는 GMDL지도파일을 구글 캐쉬 디렉토리에 복사해주는 기능을 넣은 듯합니다. 복사하는 행위자체는 이 어플을 통한다면 간편해지지만, 제 경우 6분이나 기다려야합니다. 근본적인 문제가 해결되지 못했고, 개발자도 오프라인에서만 구글맵을 사용할 것을 권장하고 있습니다. (온라인 상태가 되면 지도파일이 지워지기때문)

OfflineMaps 3.0 Preview 원문 내용보기

    6. 지도파일이 삭제 안되도록 할수 없는가?  

오프라인맵 개발자 사이트의 댓글을 보다보니 최근에는 지도파일을 삭제 방지하는 방법이 등장했습니다.

GMM 이라는 시스템 라이브러리가 구글맵 지도데이타 파일을 핸들링하게 되는데, 이 라이브러리를 수정해서  지도데이타가 삭제되지 않도록 하는 방법입니다.

GMM의 위치 : /System/Library/PrivateFrameworks/GMM.framework/GMM

1. GMM 원본파일 백업 (혹시 모를 사태를 방지)
2. GMM 원본파일 PC로 다운로드
3. Hex 에디터를 사용해서 GMM의 offset 2E48에 위치한 71 50 EF E6 00 50 A0 E3 로 변경후 저장
4. 수정된 GMM을 다시 아이폰/아이팟터치로 업로드

** Hex 에디터 무료버젼 다운로드 

지도파일 삭제 방지 원문 내용보기

그러나, 제가 테스트해보니, GMDL지도 데이타 파일이 여전히 삭제되는 문제가 발생합니다.
해결되었다는 분도 댓글에 보이던데, 무엇이 잘못된건지 아직 잘 모르겠고 난감합니다.

    결론  

GMDL지도 데이타가 자꾸 지워지기 때문에 심볼릭링크를 사용하는 방법이 펌웨어 2.x에서는 유용하게 사용되었습니다.

하지만, 구글맵을 오프라인에서 사용하는 기존의 심볼릭링크 방식은 더이상 3.0에서 불가능하게 되었고, 결국 지도 데이타가 구글 캐쉬 디렉토리에 존재해야합니다. 구글 캐쉬의 지도파일은 매번 삭제되는 경우가 많은데, 6번의 삭제 방지 방법이 통한다면 일단 문제는 어느 정도 해결될 듯합니다.

그렇지 않다면, 구글맵 어플은 오프라인일때만 사용하거나, 매번 필요할때마다 GMDL지도 파일을 구글 캐쉬 디렉토리로 복사해줘야하는 불편함을 겪을수밖에 없습니다.

근본적인 문제가 해결될 수 있도록 계속 연구 좀 해보겠습니다. ㅡ.,ㅡ

+ Recent posts