iOS/Framework

SDK - GoogleMaps downgrade

DevBabamba 2018. 1. 3. 22:01
반응형


GoogleMaps downgrade

1.나타난 문제

  • 기존에 앱(google maps 2.4.0)이 설치 되어있는 상황에서 새로 업데이트되는 앱(google map 1.13.2)으로 업데이트 할 경우, 맵 view 자체는 업로드 되지만 맵 tile 이미지가 불리지 않는 문제가 나타났다(Google 로고 등은 다 나타나는 상황이다).
  • 기존앱을 완전히 지우고, 업데이트 버전을 설치한 경우 문제없이 맵이 불려지는 것을 확인하였다.
  • 기존 앱의 설정이 남아있고, 이 설정이 업데이트 된 후에도 남아있어 맵 tile을 로드하지 못하는 상황이라는 가설을 세웠다.
  • https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW1 에서 보면 디렉토리의 구성이 아래 그림과 같음을 알 수 있었다.

    Library Directory에는 App-Specific Files를 저장하고 있다고 밝히고 있다.

    • 이 안에는 Application Support, Caches, Frameworks, Preferences Directory가 있는것을 위의 문서에서 확인할 수 있다.
    • Application Support는 App이 관리하는 App이 생성한 데이터 파일, configuration 파일, templates, 기타 fixed 또는 modifiable resource들이 있고, 이들 파일들을 저장하는데 사용할 수 있다고 정의 되어있다.
    • 따라서 앱을 업데이트 했을 경우에는 이 폴더 내에 있는 파일은 계속 남아 있지만, 앱을 완전히 삭제하면 같이 사라지게 된다.
    • Directory를 이리 저리 확인하던 중 google map에 관련된 파일이 Application Support Directory에 존재하는것을 알게 됐다.
    • 문제가 된 앱의 Application Support Directory에서 아래 사진안의 파일들이 존재하였다.

    • 참고로 문제가 된 앱은 Google Maps이외의 라이브러리도 사용하고 있으며, Google 관련 라이브러리 외의 다른 라이브러리는 해당 부분에 파일을 저장하지 않는것을 위와 같이 확인했다.
    • 각 앱 마다 다른 파일이 존재할 수 있으므로 안에 있는 파일을 꼭 확인해 봐야 한다.
    • NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
      NSString *applicationSupportDirectoryPath = [directoryPaths firstObject];
      NSArray *subPaths = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:applicationSupportDirectoryPath error:nil];
      for (NSString *path in subPaths) {
          NSLog(@"%@", path);
      }


      let directoryPaths = NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true)
      let applicationSupportDirectoryPath = directoryPaths.first
      if let checkedPath = applicationSupportDirectoryPath {
          do {
              let subPaths = try FileManager.default.subpathsOfDirectory(atPath: checkedPath)
              for path in subPaths {
                  print(path)
          }
      } catch {
         print("")
      }
    • google map과 관련된것(com.google.GoogleMaps)만 삭제하여 테스트한 결과 문제없이 맵 tile을 불러오는것을 확인하였다.
    • 삭제는 앱델리게이트의 didFinishLaunchingWithOptions: 가 실행될 때 하였다.
    • 파일의 예상 용도는 tile 이미지를 불러오는데 필요한것이라고 만 예상을 했고, 해당 파일을 확인하지 않았다. 후에 확인하여 관련 포스팅을 해보겠다.
    • 삭제 되는 세개의 파일들은 앱 실행 후 다시 생성되는것으로 확인하였다.


반응형