Swift

Swift4:iCloudコンテナのアクセス(訂正)

Xcode 9.0 / Swift4にアップデートの際、iCloudコンテナのアクセスについてまちがいと適正化のための修正が必要なことがわかりました。

NSFileCoordinator().

  • NSFileCoordinator().coordinate(writingItemAt: wFileURL!, options: .forReplacing, error: nil, byAccessor:{ (newURL) in
    do {
    } catch {
    }
    書き込みは、.forReplacingを指定すれば上書きになるので別途ファイル削除は不要。
  • NSFileCoordinator().coordinate(readingItemAt: wFileURL!, options: .withoutChanges, error: nil, byAccessor:{ (newURL) in
    do {
    } catch {
    }
    読み込みは、元ファイルをsaveする必要がないとき、.withoutChangesを指定する。

iCloudコンテナに接続できないときの処理

  • let wContainerURL  = FileManager.default.url(forUbiquityContainerIdentifier:pID)
    let wDocumentURL = wContainerURL?.appendingPathComponent(“Documents”)
    let wFileURL = wDocumentURL?.appendingPathComponent(pFilename)
    if String(describing: wFileURL?.path).count <= 0 || (wFileURL == nil) {
         self.CallAlert(“”, pIndex:self.C.msg32)
         self.ExecWait(10.0) { }
         exit(0)
    } else { }
  • アプリにiCloud Driveでチェックが入っていないとき、URLがnilになります。
    ① アラートを出す。
    ② Thread.sleep(forTimeInterval: 秒) ですぐにアラートが消えないよう一定時間待つ。
    ③ exit(0)で強制終了する。NSApplication.shared.terminate(self) だと異常終了(exception error)になる。

スクリーンショット 2017-10-12 05.08.22

Categories: Swift, 技術