Search code examples
iphoneiostwitterfile-sharing

Attach a picture to twitter post


How can I attach a picture to a twitter post like the iPhone built in photo app does? If any body has some samplecode that will be a great help. Thanks.


Solution

  • The other answers are suggesting TWTweetComposeViewController, however you should if you can avoid using this class, it's now deprecated in iOS 6,

    Please see here: TWTweetComposeViewController deprecated in IOS6

    And from Apple themselves, WWDC 2012, session 306 presentation PDF:

    Twitter Framework

    • Twitter framework is deprecated

    • Do not use TWTweetComposeViewController

    To use Twitter now you should use the SLComposeViewController class of the Social framework, it's usage is almost identical to TWTweetComposeViewController.

    You may need to support iOS 5, in which case you have no other option then to use the TWTweetComposeViewController class, but you should make the effort to check for SLComposeViewController and use that if it's available, simply because this will save you time and effort in the near future when support for iOS 5 is dropped, the TWTweetComposeViewController class really may be gone. If you rely on the Twitter framework now for simplicity as it does work on iOS 5 and 6, you're being short sighted and you will have problems sometime later, it's only a few more lines to do this and it will mean you won't need to worry about future iOS SDK releases.

    You should import Twitter.framework and Social.framework, mark them both as optional imports (not required).

    Example code:

    UIImage *myImage = [...]; // an image
    
    if( NSClassFromString(@"SLComposeViewController") ){
        // We have the Social framework in our iOS system
        // iOS 6 and later will use this
    
        if([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]){
            SLComposeViewController *twitterCompose = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
    
            [twitterCompose addImage:myImage]; // Adding your UIImage
    
            twitterCompose.completionHandler = ^(SLComposeViewControllerResult result){
                // Handle result, dismiss view controller
                [self dismissViewControllerAnimated:YES 
                                         completion:nil];
            };
    
            [self presentViewController:twitterCompose
                               animated:YES
                             completion:nil];
        }else{
            // the user does not have Twitter set up
        }
    }else if( NSClassFromString(@"TWTweetComposeViewController") ){
        // We don't have the Social framework, work with the Twitter framework
        // iOS 5 only will use this
    
        if( [TWTweetComposeViewController canSendTweet] ){
            TWTweetComposeViewController *twitterCompose = [[TWTweetComposeViewController alloc] init];
    
            [twitterCompose addImage:myImage];
    
            twitterCompose.completionHandler = ^(TWTweetComposeViewControllerResult result){
                // Handle result, dismiss view controller
                [self dismissViewControllerAnimated:YES 
                                         completion:nil];
            };
            [self presentViewController:twitterCompose
                               animated:YES
                             completion:nil];
        }else{
            // the user hasn't go Twitter set up on their device.
        }
    }else{
        // Wow you're going retro with this app, 
        // you must be on iOS 4 if you ever get here...
    }