Xcode(プロジェクトの左のナビゲーターの一番上)->Targets->Build Settings->Link Binary With Libraries で、「Social.framework」を追加しておく。
また、iOS5でのTwitter投稿も共存させたいならば「Twitter.framework」も同様に追加しておく。
#import <Social/Social.h>
#import <Twitter/Twitter.h>
// LINE
- (IBAction)postLine:(id)sender {
NSString* postContent = [NSString stringWithFormat:@"投稿内容"];
[Line shareToLine:postContent];
}
// Facebook
- (IBAction)postFacebook:(id)sender {
SLComposeViewController *facebookPostVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
NSString* postContent = [NSString stringWithFormat:@"投稿内容"];
[facebookPostVC setInitialText:postContent];
[facebookPostVC addURL:[NSURL URLWithString:@"url"]]; // URL文字列
[facebookPostVC addImage:[UIImage imageNamed:@"image_name_string"]]; // 画像名(文字列)
[self presentViewController:facebookPostVC animated:YES completion:nil];
}
// Twitter
- (IBAction)postTwitter:(id)sender {
NSString* postContent = [NSString stringWithFormat:@"「%@」", _entry.title];
NSURL* appURL = [NSURL URLWithString:_entry.link];
// =========== iOSバージョンで、処理を分岐 ============
// iOS Version
NSString *iosVersion = [[[UIDevice currentDevice] systemVersion] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
// Social.frameworkを使う
if ([iosVersion floatValue] >= 6.0) {
SLComposeViewController *twitterPostVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[twitterPostVC setInitialText:postContent];
[twitterPostVC addURL:appURL]; // アプリURL
[self presentViewController:twitterPostVC animated:YES completion:nil];
}
// Twitter.frameworkを使う
else if ([iosVersion floatValue] >= 5.0) {
// Twitter画面を保持するViewControllerを作成する。
TWTweetComposeViewController *twitter = [[TWTweetComposeViewController alloc] init];
// 初期表示する文字列を指定する。
[twitter setInitialText:postContent];
// TweetにURLを追加することが出来ます。
[twitter addURL:appURL];
// Tweet後のコールバック処理を記述します。
// ブロックでの記載となり、引数にTweet結果が渡されます。
twitter.completionHandler = ^(TWTweetComposeViewControllerResult res) {
if (res == TWTweetComposeViewControllerResultDone)
NSLog(@"tweet done.");
else if (res == TWTweetComposeViewControllerResultCancelled)
NSLog(@"tweet canceled.");
};
// Tweet画面を表示します。
[self presentModalViewController:twitter animated:YES];
}
}
iOS6以降で導入された標準でのFacebook, Twitter連携を使った投稿と、iOS5以降で導入されたTwitter投稿が共存しています。iOS5の環境では、Social.frameworkは機能しないからです。
しかも、iOS6.0以上でないデバイスでこの処理を実行すると、クラッシュしてしまいます。(そもそもSocial.frameworkを読み込めない)
なので、Social.frameworkを追加したところで、Framework名の右に付いているパラメータを、「Required」から「Optional」に変更することで、とりあえずビルドは通るようになります。
さらに、iOS6以前のデバイスの場合には、例えばFacebookとTwitterの投稿ボタンを隠す等、iOSのバージョンによって条件分岐したいと思うので、以下のようにして実装するとよいでしょう。
@interface RankingViewController ()
{
// Social
IBOutlet UIButton *LineButton;
IBOutlet UIButton *FacebookButton;
IBOutlet UIButton *TwitterButton;
}
- (void)viewDidLoad {
[super viewDidLoad];
// =========== iOSバージョンで、処理を分岐 ============
// iOS Version
NSString *iosVersion =
[[[UIDevice currentDevice] systemVersion] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
if ([iosVersion floatValue] < 6.0) { // iOSのバージョンが6.0以上でないときは、ボタンを隠す
// Twitter,Facebook連携はiOS6.0以降
FacebookButton.hidden = YES;
TwitterButton.hidden = YES;
}
// ===============================================
}
ちなみに、LINEの処理はURLスキームを用いているだけで、Social.frameworkを使っていません。なので、iOS6以前でも使うことが出来ます。