2016-11-07 5 views
3

iMessage 확장을 개발 중입니다. 그것은 핵심 데이터를 성공적으로 사용합니다. store.sqlite 파일을 평가해야하지만 찾을 수는 없습니다.MacBook에 iMessage 확장의 sqlite 저장 파일을 다운로드하는 방법

우리는 다음과 같이 그것을 찾으려고 :

엑스 코드에서
  • : 창 -> 장치
  • Installed Apps에서, 우리의 확장

  • Download Container ...을 선택하지만 용기가 비어 있습니다 :


    업데이트 :

    이제

    file:///var/mobile/Containers/Data/PluginKitPlugin/9C15B67C-8917-4A24-9FB0-BD119C43B3C4/Library/Application%20Support/Model.sqlite

    우리가 Documents 폴더에 모델을 복사하려고하는, 될 : 우리가 모델 URL을 얻는 방법을 발견 @Mundi's answer

    감사합니다 나중에 Xcode를 통해 MacBook으로 다운로드 할 수 있습니다 (위 참조).

    는 불행하게도`문서의 경로 :

    NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] 
    

    /var/mobile/Containers/ 다시 수 있습니다 :

    file:///var/mobile/Containers/Data/PluginKitPlugin/D0BBD375-A8B7-43DD-8486-1909965CAEB0/Documents 
    

    우리가 어떻게 우리의 맥북에 공유 컨테이너에서 Model.sqlite 파일을 다운로드 할 수 있습니까?

  • +0

    시뮬레이터에서이 작업을 수행하는 것이 가능합니까? 그런 다음 MacOS 파일 시스템에서 직접 파일에 액세스 할 수 있습니다. – Mundi

    +0

    불행히도 우리는 장치에서 하나 필요합니다. – shallowThought

    +0

    파일을 Documents 디렉토리에 복사하고 Airdrop을 통해 Mac과 공유하지 않으므로 프로그래밍 방식으로 문제를 해결할 수 있습니까? 너 그렇게 해봤 니? – KrishnaCA

    답변

    1

    가장 좋은 방법 같은 것이 수출을 작성하는 것입니다냅니다 : 나를 위해 작동 무엇

    저장소 URL을 기록하고 그것을 찾기 위해 그것을 사용하는 것입니다 메일 공유 작업을 사용합니다. 내 애플 리케이션 중 하나에서 사용자가 sqlite 파일의 복사본을 전자 메일로 보내 모든 데이터를 내보낼 수 있습니다.

    func exportAllDataSqlite() { 
        let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! 
    
        var newFilePath: URL! 
        var mutablePathComponents = [String]() 
        var sqliteFileCopied = false 
    
        do { 
         let directoryContents = try FileManager.default.contentsOfDirectory(at: documentsUrl, includingPropertiesForKeys: nil, options: FileManager.DirectoryEnumerationOptions()) 
         for f in directoryContents { 
          let pathComponents = f.pathComponents 
          if pathComponents.last == "XXXXWhatever your file is called when created by the persisten store.sqliteXXXXX" { 
           //create a copy of the file with a dated file name 
           mutablePathComponents = pathComponents 
    
           let dateComponents = (Calendar.current as NSCalendar).components([.day, .month, .year], from: Date()) 
           let dateString = "\(dateComponents.day)-\(dateComponents.month)-\(dateComponents.year)" 
    
           mutablePathComponents[mutablePathComponents.count-1] = "Events App \(dateString).sqlite" 
    
    
           newFilePath = NSURL.fileURL(withPathComponents: mutablePathComponents) 
           do { 
            try FileManager.default.copyItem(at: f, to: newFilePath!) 
            sqliteFileCopied = true 
            print("Copied sqlite file") 
           } catch let error as NSError { 
            print(error.localizedDescription) 
           } 
    
          } 
         } 
        } catch let error as NSError { 
         print(error.localizedDescription) 
        } 
    
        if sqliteFileCopied == true { 
         //sharing 
         let activityItem:URL = newFilePath! 
    
         let objectsToShare = [activityItem] 
         let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil) 
    
         activityVC.completionWithItemsHandler = { activity, success, items, error in 
          do { 
           try FileManager.default.removeItem(at: newFilePath!) 
           print("Deleted file: \(newFilePath!)") 
          } catch let error as NSError { 
           print(error.localizedDescription) 
          } 
         } 
    
         let excludeActivities = [UIActivityType.airDrop, 
               UIActivityType.print, 
               UIActivityType.assignToContact, 
               UIActivityType.saveToCameraRoll, 
               UIActivityType.addToReadingList, 
               UIActivityType.postToFlickr, 
               UIActivityType.postToVimeo] 
         activityVC.excludedActivityTypes = excludeActivities 
    
         self.present(activityVC, animated: true, completion: nil) 
        } else { 
         print("file not copied so can't be shared") 
        } 
    } 
    

    가장 초기의 스위프트 중 일부는 훌륭하지만 작동합니다. 전날 내 애플 리케이션의 배포 된 복사본에 문제를 디버그, 그냥 자신에게 전자 메일 및 Mac에서 Sqlite 뷰어로 열어 그것을 사용합니다.

    +0

    하드 코어하지만 위대한 :-) – shallowThought

    2

    실제 sqlite 파일은 공유 컨테이너에있을 가능성이 큽니다.

    print(container.persistentStoreCoordinator.persistentStores.first!.url!) 
    

    이와

    file:///Users/developer/Library/Developer/CoreSimulator/Devices/2EAE0CD4-7899-45A3-8E83-E7D79DEEA08F/data/Containers/Data/Application/37F48A5E-7DAB-4E30-A752-F5B62826A15A/Library/Application%20Support/Events.sqlite

    +0

    'NSPersistentContainer'에서 어떻게 가져 옵니까? – shallowThought

    +0

    URL로가는 방법을 보여주기 위해 답변을 업데이트했습니다. – Mundi

    +0

    질문이 업데이트되었습니다. – shallowThought