TreasureBoxというお気に入りアイテムを登録するアプリを作っているのですが、今回Share Extension経由でもお気に入りアイテムを登録できるようにしたいと考えました。

バックエンドはParseを使っており、Share Extensionを経由で他のアプリ(Safariなど)からお気に入りアイテムを登録するときに、自動的にユーザーをログインさせたいです。

Keychainを使って本体アプリとExtensionの間でcredentialを共有させることで、上記を実現しようとしているのですが、Parseではpasswordが管理者に対しても隠されており平文で参照することができないので、本体アプリ側でuser.passwordのように値を取ろうとするとnilになってしまい、extension側でログインできない状況です。

なお、KeychainのハンドリングはUICKeyChainStoreライブラリを利用させてもらっています。

質問

・Parseのログイン情報を本体アプリとExtensionで共有する方法としてKey Chainは適切でしょうか。 ・Key chainを使うのが正しいとして、passwordがstringで取れない場合、どのようにcredentialを渡すことができますでしょうか。PFUser OjbectをそのままkeychainないしNSUserDefaults経由で渡すことができればいいなぁと思いましたが、リファレンスを読む限りそれを実現する方法が見つかりませんでした。

アドバイスを頂けたら幸いです。

本体アプリ側コード

下記を本体アプリのfirst viewで実行するとusernameは取れるが、passwordがnilになってしまう。

user = [PFUser currentUser];

UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"nu.yuuichi"];
[store setString:user.username forKey:@"UserName"];
[store setString:user.password forKey:@"UserPassword"];
[store synchronize];

Extension側コード

UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"nu.yuuichi"];    
NSString *userName = [store stringForKey:@"UserName"];
NSString *userPassword = [store stringForKey:@"UserPassword"];

[store synchronize];

if(userName && userPassword){
    [PFUser logInWithUsernameInBackground:userName password:userPassword];
}