2016-10-16 4 views
0

iCloud에 백업 수단으로 파일을 저장합니다. 파일 업로드 및 다운로드가 정상적으로 작동하는 것 같지만 기기에서 앱을 삭제하고 동일한 기기에 앱을 다시 설치하면 iCloud에 업로드 된 파일을 볼 수 없습니다 (앱을 삭제하기 직전에 해당 기기에서도 볼 수 있음).). ubiquityIdentityToken은 모든 설치에서 동일합니다. 기기간에 동기화를 시도하지 않고 저장하고 검색합니다. 나는 \하지만이 코드를 실행하여 \ 설정 \ iCloud에 \ 관리 스토리지에있는 파일을 볼 수앱을 다시 설치하면 iCloud 파일이 표시되지 않습니다.

func createListOfSQLBaseFilesIniCloudDocumentsDirectory() -> [String]{ 

    let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents") 

    var iCloudBackupSQLFiles = [String]() 

    do{ 
     let directoryContents = try FileManager.default.contentsOfDirectory(at: iCloudDocumentsURL!, includingPropertiesForKeys: nil, options: []) 

     for myFile in directoryContents { 
      if myFile.pathExtension == "sqlite" { 

       let fileWithExtension = myFile.lastPathComponent 
       //backupSQLFiles is an array of full file names - including the extension 
       iCloudBackupSQLFiles.append(fileWithExtension) 

      }//if myFile 
     }//for in 

    } catch let error as NSError { 
     print("Unresolved error \(error), \(error.userInfo)") 
    }//do catch 

    return iCloudBackupSQLFiles 

}//createListOfSQLBaseFilesIniCloudDocumentsDirectory 

모든 지침 감상 할 수있다. Swift 3, iOS 10, Xcode 8

답변

4

다른 누구도이 문제가 발생했다고 생각하기가 어렵습니다. 다시 말하지만 이것은 단순한 파일 저장 및 검색을위한 것이며 장치간에 동적으로 동기화되지 않습니다.

문제의 요지는 iCloud가 클라우드 파일을 새 장치에 자동으로 동기화하지 않는다는 것입니다. 귀하의 코드가 그렇게해야합니다. 따라서 iCloud가 아닌 기기에서 앱을 제거하고 동일한 앱을 다시 설치하면 앱에 이전 iCloud 파일이 표시되지 않습니다. 새로운 코드를 추가하고 위의 코드로 코드를 볼 수는 있지만 실제로는 유비쿼터스 컨테이너 복사본을보고있는 중입니다. 이전 항목을 보려면 iCloud에서 metadataQuery를 수행해야하며 metadataQuery 결과에서 관심있는 파일의 파일 이름을 구문 분석 한 다음 startDownloadingUpdateItem (at :)을 각 파일에 실행하십시오. 예를 들어, metadataQuery 결과에서 iCloud에있는 파일 배열을 만들어이 for-loop에 do-catch를 넣습니다.

let fileManager = FileManager.default 
let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents", isDirectory: true) 
let iCloudDocumentToCheckURL = iCloudDocumentsURL?.appendingPathComponent(whateverFileName, isDirectory: false) 

do { 
    try fileManager.startDownloadingUbiquitousItem(at: iCloudDocumentToCheckURL!) 
    print("tested file: \(whateverFileName)") 

} catch let error as NSError { 
    print("Unresolved error \(error), \(error.userInfo)") 
}//do catch