iOS6から導入されたUIActivityViewControllerでShareKitいらず

iOS6から使えるようになった、UIActivity/UIActivityViewControllerをご存知でしょうか。(WWDC2012の資料で見かけた記憶が無く、最近存在に気付きました。)
iOS6の標準Appで見かけるようになった以下のようなアイコンベースのアクションシート画面を表示して、イメージやテキストなどをShareすることができるviewControllerです。



Share先は、Facebook,Twitter,Weibo, Message, Mail, Print, Pasteboard, AssignToContact, SaveToCameraRollに標準で対応しています。

渡せるデータは、各サービスによって異なりますが、おおよそ、NSString, UIImage, NSURLあたり。渡すデータ種別に応じて、対象となるShare先が自動的に選択されて表示されます。(対象データがテキストの場合は、SaveToCameraRollは表示されないなど。)

使い方は超簡単。

- (IBAction)shareButtonPressed:(id)sender {

 // 1. shareする素材を用意して、NSArrayにする。(複数種類のデータを一度に渡せる)
 NSString *shareText = @"hogehoge";
 NSURL *shareURL = [NSURL URLWithString:@"http://www.apple.com"];
 NSArray *activityItems = @[self.imageView.image, shareText, shareURL];

 // 2. Controller生成
 UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
 // 第一引数にShareするデータをNSArrayで
 // 第二引数には、標準以外のサービスを利用したい場合に指定。
 // (Share対象サービスを自作できるようで、自作したサービスを利用する場合に指定。標準サービスのみ利用の場合は、nilでOK)

 // 3. shareボタンを表示したくないサービスを NSArrayで用意して、指定
 NSArray *excludeActivities = @[UIActivityTypePostToWeibo];
 activityController.excludedActivityTypes = excludeActivities;

 // 4. activity処理完了時の動作
 void (^completionHandler)(NSString *activityType, BOOL completed) = ^(NSString *activityType, BOOL completed){
 NSLog(@"completetion handler");
 // ただし、キャンセルした場合は、completedがNOでかえってくる。(Activity処理そのものの成否は解らない?
 };
 activityController.completionHandler = completionHandler;

 // modalで表示
 [self presentViewController:activityController animated:YES completion:^{
  NSLog(@"Activity complete!!");
 }];
}
デモコードを以下におきました。
https://github.com/kenhama/UIActivityDemo

従来であれば、ShareKitを使うところですが、アプリのサポート対象がiOS6以上でよいならばこちらが簡単でよさげです。

追記:WWDC2012のPDFあらためてチェクしたら、ちゃんと紹介されてたorz
追記2: completion handlerを追記

Expedited App Review Request してみた話

Expedited App Review Request ってご存知でしょうか?

 

昨日リリースされた.Schedのver.3.20で,iOS6対応にBUGがあり予定が全く参照できないという致命的状況となってしまいましたが、本日、修正版のver.3.21がリリースされました。(利用者の方、大変ご迷惑おかけしました。m(_ _)m )

 

通常、iOSアプリのリリースには、Appleの審査に約1週間程待たされるのですが、この「Expedited App Review Request」が通ると優先的にレビューしてもらうことが出来ます。

 

やり方は、

1. iTunes Connectを開く

2. Contact us を選択

3. “App Review” -> “Request Expedited Review” を選択

4. contact us のリンクをクリックすると、申請フォームが現れるので入力 (緊急対応が必要な理由を英作文)



 

 

・フォームに入力〜送信後、1時間もせずにメール連絡(定型フォーマット自動返信っぽい)

超訳

「超忙しいんで、対応可能かどうかの返事は、営業日1日か2日待って」

 

・15時間後にメール連絡(定型フォーマットっぽい)

超訳

「緊急状況は解ったんで1回だけ例外でexpdited reviewするよ。」

「expedited reviewは保障するものでないし、限定的なものなんで、次は対応できるかわからんよ。」

・5時間後にInReview

・1時間後にProcessing for App Store

 

ということで、iTunes ConnectにアプリをSubmitしてからリリースまで通常1週間はかかるところを、24H以内でリリースできました。

 

やっちゃった時のための、緊急修正手段として覚えておいて損はないかと思います。

 

追記@9/22 13:00

上記を書いてる間に、ver.3.21でiOS5だと起動できないという、さらに致命的なBUGを埋め込んでいたことが判明(汗)。

利用者の方(iOS5の環境でver.3.21を導入された方)へ、お詫び申し上げます。修正版がリリースされるまで今しばらくお待ち願います。

現状は、一旦AppStoreから削除した上で、修正版のver.3.22をsubmit、再度Expedited review requestしています。(多用はダメと言われてるそばから、再度expedited review依頼にチャレンジ中)

 

追記@9/25 AM

二回目のExpedited review requestが無事受け入れられ、先ほど、Rady fo saleになりました。二回目のExpedited review requestを行った日が土曜日であったため、土日明けで即座に対応してくれた感じです。(ダメもとの2連続Expedited review requestでしたが、通りました。ちなみに、メール内容は1回目と完全に同一内容でした。)