カテゴリー別アーカイブ: Parse

【Parseメモ】BFTaskMultipleExceptionsExceptionリンクエラー

ParseSDKをver1.6.1からver1.6.4に更新したら以下のリンクエラーがでるようになった。


BFTaskMultipleExceptionsExceptionは、Bolts.frameworkの最新版(ver1.1.4)ではBFTask.hに

として定義されている。

しかし、現状の環境下で参照してるバージョンでは定義されていないらしい。

 

現状の環境は、

  • ParseSDK Ver1.6.4
  • FacebookSDK Ver3.20.0

Bolts.frameworkはFacebookSDKに含まれていて、このBolts.frameworkはver1.1.3であり、BFTask.hには上記の定数は定義されていない。

だからといって、Bolts.frameworkの最新版(ver1.1.4)を個別にリンクしようとすると、FacebookSDKが持つBolts.frameworkとduplicate symbols のリンクエラーを生じる。

FacebookSDKを最新版のver3.23.1にアップグレードしても、Bolts.frameworkのバージョンは同じくver1.1.3なので状況は変わらない。

FacebookSDKが参照しているBolts.frameworkを手動で最新版へ変更する手段が私には分からないので、ParseSDKのバージョンを元に戻して、FacebookSDK側の対応を待つことにする。

 

参考

Parse and facebook sdk -duplicate symbol


【Parseメモ】PFLogInViewControllerからTwitterログインしたアカウント情報を端末にも保存する

アカウントを端末へ保存

PFLogInViewControllerを使ってTwitterログインした際、アカウント情報を端末(設定アプリ)にも保存する方法を調べてみた。

発端

そもそもの発端は、Twitterにpostする画面としてSLComposeViewControllerを使おうとしたこと。そしてSLComposeViewControllerを使うには、端末に保存されたアカウントを必要とする。

前提

PFLogInViewControllerを使ってのTwitterログイン時、アカウントが端末に未登録の場合はWebViewベースの認証画面が表示され、アカウントを入力してログインする。

問題

この状態でSLComposeViewControllerを使おうとすると、端末へのアカウント登録を誘導するアラートが表示される。このアラートから設定アプリへ切り替えして登録することもできるが、ユーザーにとって登録が二度手間となるうえ、登録後に元のアプリへは自動で戻ってこれない。なのでユーザーが自分でアプリ切り替えをしないといけない。これらの動線は極力避けたかった。

アカウントの保存

ということで、PFLogInViewControllerでTwitterログインしたアカウント情報を使って端末にTwitterアカウントを保存する処理を調べて書いてみた。

 

まずはAccounts.frameworkをimportし、

 

Twitterログイン後に以下処理を行う。

 

これで端末上にアカウントが保存される。

 

ちなみに、同じ方法でFacebookアカウントも処理しようとしたが、

Error Domain=com.apple.accounts Code=7 “The application is not permitted to access Facebook accounts”

というエラーが発生して保存できない。
何かしらpermissionを与える方法があるのかどうか一通りネットでも調べてみたが、明確な情報はほとんどなく今のところお手上げ状態。

Facebookの基本的な認証システムを理解できていないのが要因かもしれない。


【Parseメモ】Crash Reporting

クラッシュログを収集。

機能を有効にするには、Parse app keys を initialize する前に以下のコードを入れる。

一度有効にしておくと、クラッシュレポートは再起動時にParse側に送信され、analytics dashboard上で確認することができようになる。

 

symbolicate

クラッシュログの中のシンボルを読める状態にしてクラッシュログを分析しやすくする。そのためににsymbolファイルをParseへ送信しておく。

送信方法は2つ

1.手動で送信

$ parse symbols <dSYM/xcarchive/DWARF path>

→pathの指定の仕方が良く分からない。dSYMファイルを探さないといけないっぽい。

2.自動的に送信(Parse推奨)

Xcodeがビルド時にsymbolファイルを自動的にParseへ送信してくれる。便利。

手順としては、
1.Parse Cloud Code directoryを作成。
2.Build Phases で Run Script 設定

Run Scriptの設定については参考サイトの動画が分かりやすい。

Parse Quick Start Install the SDK

 

Analytics dashboard Crashes

テスト的に AppDelegate の application:didFinishLaunchingWithOptions:の中でNSExceptionを発生させてみた。

リスト

screenshot

 

詳細:symbolなし

screenshot

symbolなしだとどこで例外が発生したのか分かりにくい。
symbolicateさせるためにdSYMファイルを送信することを促すメッセージが表示されている。

 

詳細:symbolあり

screenshot

symbolありだと、AppDelegateのメソッド内で何かが起きたことがなんとなく分かる。

 

参考

Parse Developer Guide | Crash Reporting

Parse Quick Start Install the SDK


【Parseメモ】PFUserオブジェクトへの他ユーザーからの書込権限は追加できない

PFUserのACLに、Roleによる編集権限を追加しようとしたらエラー発生。

 

 

エラー

error: user objects cannot allow writes from other users

ユーザーオブジェクトには、他のユーザーから編集できるようになる権限を付与できないので、ユーザーオブジェクトを編集するような処理は Cloud Code で master key 使ってやれということのようだ。

 

参考

iOS; Allow admin user write access to another user


【Parseメモ】PFConfig

key/value型の設定値をParse Config Dashboard上で設定しておき、アプリ側ではPFConfigオブジェクトを使ってその値を取得できる。

アプリに埋め込まずサーバ側で設定を保持しておきたい値がある場合に便利。

ただし、

  • 現状、登録できる値は100個まで
  • 設定値全体のサイズは128KBまで

という制限がある。

 

設定画面

スクリーンショット-2015-01-19-16.31.50

スクリーンショット-2015-01-19-16.34.27

スクリーンショット-2015-01-19-16.34.43

 

 

取得方法

 

参照

PFConfig Class Reference

Parse Developer Guide Config


【Parseメモ】PFQuery 同一キーへの複数制約の追加

Array型のカラムに対して以下のように複数の制約を追加した場合、期待するのは、友達A(friendA)と友達B(friendB)との両者とも友達である(friendsに含まれる)ユーザーのリストが得られること。


だが、結果は友達B(friendB)のみが友達であるユーザーのリストとなる。
これは後から設定した制約が前のを上書きしてしまうことが原因。

こういう場合は、

とする。

ただし、PFRelation型の場合は使えない。(なぜ?)

参照

PFQuery with multiple constraints on one key

PFQuery Class Reference