質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1499閲覧

【Swift・CloudKit】レコード作成者と異なるユーザーが編集する方法

unagimochimochi

総合スコア7

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/10/31 01:35

前提・実現したいこと

CloudKitに関して質問です。

開発段階ではレコードの編集をうまくできていたのですが、
先日、TestFlightで何名かにテスト版を配布したところ、編集ができないことがありました。

いくつかの失敗例を見たところ、
レコード作成者でないユーザーが編集しようとするとうまくいかないのでは、と推測できました。

CloudKit

こちらは CloudKit Dashboard で確認できるレコードの詳細です。
この緑で隠した部分が一致しないといけないのでは、と思いました。

既存のレコードを編集するときは以下のようにおこなっています。

Swift

1func editRecord() { 2 3 // パブリックデータベースにアクセス 4 let publicDatabase = CKContainer.default().publicCloudDatabase 5 6 // レコードの検索条件を作成 7 // 〈accountID〉はレコードのフィールド名、〈myID!〉はその中身 8 // これが〈myID!〉だと成功するが、他人のレコードを編集しようとするとエラーになると推測 9 let predicate = NSPredicate(format: "accountID == %@", argumentArray: [myID!]) 10 let query = CKQuery(recordType: "Accounts", predicate: predicate) 11 12 publicDatabase.perform(query, inZoneWith: nil, completionHandler: {(records, error) in 13 14 if let error = error { 15 print("編集エラー1: (error)") 16 return 17 } 18 19 for record in records! { 20 21 // 編集するフィールド名とそこに入れる新しい値 22 record["currentLocation"] = CLLocation(latitude: 40.689283, longitude: -74.044368) 23 24 self.publicDatabase.save(record, completionHandler: {(record, error) in 25 26 if let error = error { 27 print("編集エラー2: (error)") 28 return 29 } 30 print("編集成功") 31 }) 32 } 33 }) 34}

開発段階ではすべてのレコードを私が作成・編集していたので、エラーが出ることはありません。

この推測が正しいのか、
またその場合、レコード作成者と異なるユーザーが編集する場合どのように実現すればいいか、
お教えくださると幸いです。

発生している問題

レコード作成者以外が編集できない(推測)。
編集に失敗しても、アプリがクラッシュする等はない。

補足情報(FW/ツールのバージョンなど)

Xcode 11.6
Swift 5

ここまで読んでくださり、ありがとうございます。
質問に至らぬ点があるかもしれませんが、どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

Stack Overflow で回答を得られました。
CloudKit - How to modify the record created by other user

CloudKit Dashboard にて、
Schema > Security Roles > AuthenticatedWrite にチェックを入れ、
Production に Deploy したらうまくいきました。

イメージ説明

投稿2020/11/09 01:25

unagimochimochi

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問