Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

LINE/Facebook/Twitter投稿

More than 5 years have passed since last update.

Xcode(プロジェクトの左のナビゲーターの一番上)->Targets->Build Settings->Link Binary With Libraries で、「Social.framework」を追加しておく。
また、iOS5でのTwitter投稿も共存させたいならば「Twitter.framework」も同様に追加しておく。

social.h
#import <Social/Social.h>
#import <Twitter/Twitter.h>
social.m
// 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のバージョンによって条件分岐したいと思うので、以下のようにして実装するとよいでしょう。

social.m
@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以前でも使うことが出来ます。

EntreGulss
iOSエンジニア。
dely
世界をより明るくするために、「kurashiru」を開発している
https://www.dely.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away