Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Add submodule Twitter-OAuth-iPhone

  • Loading branch information...
commit f2b09acae30bb7e700c7fd1f6342d72b0e13ad45 1 parent 4e67013
@lucascorrea authored
View
6 .gitmodules
@@ -1,3 +1,3 @@
-[submodule "SCTwitter/ExternalFrameworks/MGTwitterEngine"]
- path = SCTwitter/ExternalFrameworks/MGTwitterEngine
- url = https://github.com/mattgemmell/MGTwitterEngine.git
+[submodule "SCTwitter/ExternalFrameworks/Twitter-OAuth-iPhone"]
+ path = SCTwitter/ExternalFrameworks/Twitter-OAuth-iPhone
+ url = https://github.com/bengottlieb/Twitter-OAuth-iPhone.git
View
236 SCTwitter.xcodeproj/project.pbxproj
@@ -15,6 +15,28 @@
F99446FE14FEF6370017A5D8 /* SCTwitterAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F99446FD14FEF6370017A5D8 /* SCTwitterAppDelegate.m */; };
F994470114FEF6370017A5D8 /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F99446FF14FEF6370017A5D8 /* MainStoryboard.storyboard */; };
F994470414FEF6370017A5D8 /* SCTwitterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F994470314FEF6370017A5D8 /* SCTwitterViewController.m */; };
+ F994471014FEFB1B0017A5D8 /* SCTwitter.m in Sources */ = {isa = PBXBuildFile; fileRef = F994470F14FEFB1B0017A5D8 /* SCTwitter.m */; };
+ F99447D614FEFD590017A5D8 /* libxml2.2.7.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F99447D514FEFD590017A5D8 /* libxml2.2.7.3.dylib */; };
+ F99448DD14FFF99F0017A5D8 /* jQueryInject.txt in Resources */ = {isa = PBXBuildFile; fileRef = F99448A314FFF99F0017A5D8 /* jQueryInject.txt */; };
+ F99448DE14FFF99F0017A5D8 /* jQueryInjectLandscape.txt in Resources */ = {isa = PBXBuildFile; fileRef = F99448A414FFF99F0017A5D8 /* jQueryInjectLandscape.txt */; };
+ F99448DF14FFF99F0017A5D8 /* libOAuth.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F99448A514FFF99F0017A5D8 /* libOAuth.a */; };
+ F99448E014FFF99F0017A5D8 /* MGTwitterEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448B814FFF99F0017A5D8 /* MGTwitterEngine.m */; };
+ F99448E114FFF99F0017A5D8 /* MGTwitterHTTPURLConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448BC14FFF99F0017A5D8 /* MGTwitterHTTPURLConnection.m */; };
+ F99448E214FFF99F0017A5D8 /* MGTwitterLibXMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448BE14FFF99F0017A5D8 /* MGTwitterLibXMLParser.m */; };
+ F99448E314FFF99F0017A5D8 /* MGTwitterMessagesLibXMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448C014FFF99F0017A5D8 /* MGTwitterMessagesLibXMLParser.m */; };
+ F99448E414FFF99F0017A5D8 /* MGTwitterMessagesParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448C214FFF99F0017A5D8 /* MGTwitterMessagesParser.m */; };
+ F99448E514FFF99F0017A5D8 /* MGTwitterMiscLibXMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448C414FFF99F0017A5D8 /* MGTwitterMiscLibXMLParser.m */; };
+ F99448E614FFF99F0017A5D8 /* MGTwitterMiscParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448C614FFF99F0017A5D8 /* MGTwitterMiscParser.m */; };
+ F99448E714FFF99F0017A5D8 /* MGTwitterStatusesLibXMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448CA14FFF99F0017A5D8 /* MGTwitterStatusesLibXMLParser.m */; };
+ F99448E814FFF99F0017A5D8 /* MGTwitterStatusesParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448CC14FFF99F0017A5D8 /* MGTwitterStatusesParser.m */; };
+ F99448E914FFF99F0017A5D8 /* MGTwitterUsersLibXMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448CE14FFF99F0017A5D8 /* MGTwitterUsersLibXMLParser.m */; };
+ F99448EA14FFF99F0017A5D8 /* MGTwitterUsersParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448D014FFF99F0017A5D8 /* MGTwitterUsersParser.m */; };
+ F99448EB14FFF99F0017A5D8 /* MGTwitterXMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448D214FFF99F0017A5D8 /* MGTwitterXMLParser.m */; };
+ F99448EC14FFF99F0017A5D8 /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448D414FFF99F0017A5D8 /* NSData+Base64.m */; };
+ F99448ED14FFF99F0017A5D8 /* NSString+UUID.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448D614FFF99F0017A5D8 /* NSString+UUID.m */; };
+ F99448EE14FFF99F0017A5D8 /* SA_OAuthTwitterController.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448D914FFF99F0017A5D8 /* SA_OAuthTwitterController.m */; };
+ F99448EF14FFF99F0017A5D8 /* SA_OAuthTwitterEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = F99448DB14FFF99F0017A5D8 /* SA_OAuthTwitterEngine.m */; };
+ F99448F014FFF99F0017A5D8 /* twitter_load.png in Resources */ = {isa = PBXBuildFile; fileRef = F99448DC14FFF99F0017A5D8 /* twitter_load.png */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@@ -31,6 +53,64 @@
F994470014FEF6370017A5D8 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard.storyboard; sourceTree = "<group>"; };
F994470214FEF6370017A5D8 /* SCTwitterViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SCTwitterViewController.h; sourceTree = "<group>"; };
F994470314FEF6370017A5D8 /* SCTwitterViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SCTwitterViewController.m; sourceTree = "<group>"; };
+ F994470E14FEFB1B0017A5D8 /* SCTwitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SCTwitter.h; path = SCTwitter/SCTwitter.h; sourceTree = "<group>"; };
+ F994470F14FEFB1B0017A5D8 /* SCTwitter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SCTwitter.m; path = SCTwitter/SCTwitter.m; sourceTree = "<group>"; };
+ F99447D514FEFD590017A5D8 /* libxml2.2.7.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.2.7.3.dylib; path = usr/lib/libxml2.2.7.3.dylib; sourceTree = SDKROOT; };
+ F99448A314FFF99F0017A5D8 /* jQueryInject.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jQueryInject.txt; sourceTree = "<group>"; };
+ F99448A414FFF99F0017A5D8 /* jQueryInjectLandscape.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jQueryInjectLandscape.txt; sourceTree = "<group>"; };
+ F99448A514FFF99F0017A5D8 /* libOAuth.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libOAuth.a; sourceTree = "<group>"; };
+ F99448A714FFF99F0017A5D8 /* NSMutableURLRequest+Parameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableURLRequest+Parameters.h"; sourceTree = "<group>"; };
+ F99448A814FFF99F0017A5D8 /* NSString+URLEncoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+URLEncoding.h"; sourceTree = "<group>"; };
+ F99448A914FFF99F0017A5D8 /* NSURL+Base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURL+Base.h"; sourceTree = "<group>"; };
+ F99448AA14FFF99F0017A5D8 /* OAAsynchronousDataFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAAsynchronousDataFetcher.h; sourceTree = "<group>"; };
+ F99448AB14FFF99F0017A5D8 /* OAConsumer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAConsumer.h; sourceTree = "<group>"; };
+ F99448AC14FFF99F0017A5D8 /* OADataFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OADataFetcher.h; sourceTree = "<group>"; };
+ F99448AD14FFF99F0017A5D8 /* OAHMAC_SHA1SignatureProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAHMAC_SHA1SignatureProvider.h; sourceTree = "<group>"; };
+ F99448AE14FFF99F0017A5D8 /* OAMutableURLRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAMutableURLRequest.h; sourceTree = "<group>"; };
+ F99448AF14FFF99F0017A5D8 /* OAPlaintextSignatureProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAPlaintextSignatureProvider.h; sourceTree = "<group>"; };
+ F99448B014FFF99F0017A5D8 /* OARequestParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OARequestParameter.h; sourceTree = "<group>"; };
+ F99448B114FFF99F0017A5D8 /* OAServiceTicket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAServiceTicket.h; sourceTree = "<group>"; };
+ F99448B214FFF99F0017A5D8 /* OASignatureProviding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OASignatureProviding.h; sourceTree = "<group>"; };
+ F99448B314FFF99F0017A5D8 /* OAToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAToken.h; sourceTree = "<group>"; };
+ F99448B414FFF99F0017A5D8 /* OAToken_KeychainExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAToken_KeychainExtensions.h; sourceTree = "<group>"; };
+ F99448B514FFF99F0017A5D8 /* OAuthConsumer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAuthConsumer.h; sourceTree = "<group>"; };
+ F99448B714FFF99F0017A5D8 /* MGTwitterEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterEngine.h; sourceTree = "<group>"; };
+ F99448B814FFF99F0017A5D8 /* MGTwitterEngine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGTwitterEngine.m; sourceTree = "<group>"; };
+ F99448B914FFF99F0017A5D8 /* MGTwitterEngineDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterEngineDelegate.h; sourceTree = "<group>"; };
+ F99448BA14FFF99F0017A5D8 /* MGTwitterEngineGlobalHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterEngineGlobalHeader.h; sourceTree = "<group>"; };
+ F99448BB14FFF99F0017A5D8 /* MGTwitterHTTPURLConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterHTTPURLConnection.h; sourceTree = "<group>"; };
+ F99448BC14FFF99F0017A5D8 /* MGTwitterHTTPURLConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGTwitterHTTPURLConnection.m; sourceTree = "<group>"; };
+ F99448BD14FFF99F0017A5D8 /* MGTwitterLibXMLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterLibXMLParser.h; sourceTree = "<group>"; };
+ F99448BE14FFF99F0017A5D8 /* MGTwitterLibXMLParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGTwitterLibXMLParser.m; sourceTree = "<group>"; };
+ F99448BF14FFF99F0017A5D8 /* MGTwitterMessagesLibXMLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterMessagesLibXMLParser.h; sourceTree = "<group>"; };
+ F99448C014FFF99F0017A5D8 /* MGTwitterMessagesLibXMLParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGTwitterMessagesLibXMLParser.m; sourceTree = "<group>"; };
+ F99448C114FFF99F0017A5D8 /* MGTwitterMessagesParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterMessagesParser.h; sourceTree = "<group>"; };
+ F99448C214FFF99F0017A5D8 /* MGTwitterMessagesParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGTwitterMessagesParser.m; sourceTree = "<group>"; };
+ F99448C314FFF99F0017A5D8 /* MGTwitterMiscLibXMLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterMiscLibXMLParser.h; sourceTree = "<group>"; };
+ F99448C414FFF99F0017A5D8 /* MGTwitterMiscLibXMLParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGTwitterMiscLibXMLParser.m; sourceTree = "<group>"; };
+ F99448C514FFF99F0017A5D8 /* MGTwitterMiscParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterMiscParser.h; sourceTree = "<group>"; };
+ F99448C614FFF99F0017A5D8 /* MGTwitterMiscParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGTwitterMiscParser.m; sourceTree = "<group>"; };
+ F99448C714FFF99F0017A5D8 /* MGTwitterParserDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterParserDelegate.h; sourceTree = "<group>"; };
+ F99448C814FFF99F0017A5D8 /* MGTwitterRequestTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterRequestTypes.h; sourceTree = "<group>"; };
+ F99448C914FFF99F0017A5D8 /* MGTwitterStatusesLibXMLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterStatusesLibXMLParser.h; sourceTree = "<group>"; };
+ F99448CA14FFF99F0017A5D8 /* MGTwitterStatusesLibXMLParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGTwitterStatusesLibXMLParser.m; sourceTree = "<group>"; };
+ F99448CB14FFF99F0017A5D8 /* MGTwitterStatusesParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterStatusesParser.h; sourceTree = "<group>"; };
+ F99448CC14FFF99F0017A5D8 /* MGTwitterStatusesParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGTwitterStatusesParser.m; sourceTree = "<group>"; };
+ F99448CD14FFF99F0017A5D8 /* MGTwitterUsersLibXMLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterUsersLibXMLParser.h; sourceTree = "<group>"; };
+ F99448CE14FFF99F0017A5D8 /* MGTwitterUsersLibXMLParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGTwitterUsersLibXMLParser.m; sourceTree = "<group>"; };
+ F99448CF14FFF99F0017A5D8 /* MGTwitterUsersParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterUsersParser.h; sourceTree = "<group>"; };
+ F99448D014FFF99F0017A5D8 /* MGTwitterUsersParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGTwitterUsersParser.m; sourceTree = "<group>"; };
+ F99448D114FFF99F0017A5D8 /* MGTwitterXMLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTwitterXMLParser.h; sourceTree = "<group>"; };
+ F99448D214FFF99F0017A5D8 /* MGTwitterXMLParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGTwitterXMLParser.m; sourceTree = "<group>"; };
+ F99448D314FFF99F0017A5D8 /* NSData+Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+Base64.h"; sourceTree = "<group>"; };
+ F99448D414FFF99F0017A5D8 /* NSData+Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+Base64.m"; sourceTree = "<group>"; };
+ F99448D514FFF99F0017A5D8 /* NSString+UUID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+UUID.h"; sourceTree = "<group>"; };
+ F99448D614FFF99F0017A5D8 /* NSString+UUID.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+UUID.m"; sourceTree = "<group>"; };
+ F99448D814FFF99F0017A5D8 /* SA_OAuthTwitterController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SA_OAuthTwitterController.h; sourceTree = "<group>"; };
+ F99448D914FFF99F0017A5D8 /* SA_OAuthTwitterController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SA_OAuthTwitterController.m; sourceTree = "<group>"; };
+ F99448DA14FFF99F0017A5D8 /* SA_OAuthTwitterEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SA_OAuthTwitterEngine.h; sourceTree = "<group>"; };
+ F99448DB14FFF99F0017A5D8 /* SA_OAuthTwitterEngine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SA_OAuthTwitterEngine.m; sourceTree = "<group>"; };
+ F99448DC14FFF99F0017A5D8 /* twitter_load.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = twitter_load.png; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -38,9 +118,11 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ F99447D614FEFD590017A5D8 /* libxml2.2.7.3.dylib in Frameworks */,
F99446EE14FEF6370017A5D8 /* UIKit.framework in Frameworks */,
F99446F014FEF6370017A5D8 /* Foundation.framework in Frameworks */,
F99446F214FEF6370017A5D8 /* CoreGraphics.framework in Frameworks */,
+ F99448DF14FFF99F0017A5D8 /* libOAuth.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -50,9 +132,9 @@
F99446DE14FEF6370017A5D8 = {
isa = PBXGroup;
children = (
+ F99447D514FEFD590017A5D8 /* libxml2.2.7.3.dylib */,
F99446F314FEF6370017A5D8 /* SCTwitter */,
- F99446EC14FEF6370017A5D8 /* Frameworks */,
- F99446EA14FEF6370017A5D8 /* Products */,
+ F994471114FEFB840017A5D8 /* Other Sources */,
);
sourceTree = "<group>";
};
@@ -83,6 +165,8 @@
F994470214FEF6370017A5D8 /* SCTwitterViewController.h */,
F994470314FEF6370017A5D8 /* SCTwitterViewController.m */,
F99446F414FEF6370017A5D8 /* Supporting Files */,
+ F994470E14FEFB1B0017A5D8 /* SCTwitter.h */,
+ F994470F14FEFB1B0017A5D8 /* SCTwitter.m */,
);
path = SCTwitter;
sourceTree = "<group>";
@@ -98,6 +182,119 @@
name = "Supporting Files";
sourceTree = "<group>";
};
+ F994471114FEFB840017A5D8 /* Other Sources */ = {
+ isa = PBXGroup;
+ children = (
+ F99447D414FEFD050017A5D8 /* ExternalFrameworks */,
+ F99446EC14FEF6370017A5D8 /* Frameworks */,
+ F99446EA14FEF6370017A5D8 /* Products */,
+ );
+ name = "Other Sources";
+ sourceTree = "<group>";
+ };
+ F99447D414FEFD050017A5D8 /* ExternalFrameworks */ = {
+ isa = PBXGroup;
+ children = (
+ F99448A114FFF99F0017A5D8 /* Twitter+OAuth */,
+ );
+ name = ExternalFrameworks;
+ sourceTree = "<group>";
+ };
+ F99448A114FFF99F0017A5D8 /* Twitter+OAuth */ = {
+ isa = PBXGroup;
+ children = (
+ F99448A214FFF99F0017A5D8 /* Libraries & Headers */,
+ F99448B614FFF99F0017A5D8 /* MGTwitterEngine */,
+ F99448D714FFF99F0017A5D8 /* SAOAuthTwitterEngine */,
+ );
+ name = "Twitter+OAuth";
+ path = "SCTwitter/ExternalFrameworks/Twitter-OAuth-iPhone/Twitter+OAuth";
+ sourceTree = "<group>";
+ };
+ F99448A214FFF99F0017A5D8 /* Libraries & Headers */ = {
+ isa = PBXGroup;
+ children = (
+ F99448A314FFF99F0017A5D8 /* jQueryInject.txt */,
+ F99448A414FFF99F0017A5D8 /* jQueryInjectLandscape.txt */,
+ F99448A514FFF99F0017A5D8 /* libOAuth.a */,
+ F99448A614FFF99F0017A5D8 /* OAuthConsumer */,
+ );
+ path = "Libraries & Headers";
+ sourceTree = "<group>";
+ };
+ F99448A614FFF99F0017A5D8 /* OAuthConsumer */ = {
+ isa = PBXGroup;
+ children = (
+ F99448A714FFF99F0017A5D8 /* NSMutableURLRequest+Parameters.h */,
+ F99448A814FFF99F0017A5D8 /* NSString+URLEncoding.h */,
+ F99448A914FFF99F0017A5D8 /* NSURL+Base.h */,
+ F99448AA14FFF99F0017A5D8 /* OAAsynchronousDataFetcher.h */,
+ F99448AB14FFF99F0017A5D8 /* OAConsumer.h */,
+ F99448AC14FFF99F0017A5D8 /* OADataFetcher.h */,
+ F99448AD14FFF99F0017A5D8 /* OAHMAC_SHA1SignatureProvider.h */,
+ F99448AE14FFF99F0017A5D8 /* OAMutableURLRequest.h */,
+ F99448AF14FFF99F0017A5D8 /* OAPlaintextSignatureProvider.h */,
+ F99448B014FFF99F0017A5D8 /* OARequestParameter.h */,
+ F99448B114FFF99F0017A5D8 /* OAServiceTicket.h */,
+ F99448B214FFF99F0017A5D8 /* OASignatureProviding.h */,
+ F99448B314FFF99F0017A5D8 /* OAToken.h */,
+ F99448B414FFF99F0017A5D8 /* OAToken_KeychainExtensions.h */,
+ F99448B514FFF99F0017A5D8 /* OAuthConsumer.h */,
+ );
+ path = OAuthConsumer;
+ sourceTree = "<group>";
+ };
+ F99448B614FFF99F0017A5D8 /* MGTwitterEngine */ = {
+ isa = PBXGroup;
+ children = (
+ F99448B714FFF99F0017A5D8 /* MGTwitterEngine.h */,
+ F99448B814FFF99F0017A5D8 /* MGTwitterEngine.m */,
+ F99448B914FFF99F0017A5D8 /* MGTwitterEngineDelegate.h */,
+ F99448BA14FFF99F0017A5D8 /* MGTwitterEngineGlobalHeader.h */,
+ F99448BB14FFF99F0017A5D8 /* MGTwitterHTTPURLConnection.h */,
+ F99448BC14FFF99F0017A5D8 /* MGTwitterHTTPURLConnection.m */,
+ F99448BD14FFF99F0017A5D8 /* MGTwitterLibXMLParser.h */,
+ F99448BE14FFF99F0017A5D8 /* MGTwitterLibXMLParser.m */,
+ F99448BF14FFF99F0017A5D8 /* MGTwitterMessagesLibXMLParser.h */,
+ F99448C014FFF99F0017A5D8 /* MGTwitterMessagesLibXMLParser.m */,
+ F99448C114FFF99F0017A5D8 /* MGTwitterMessagesParser.h */,
+ F99448C214FFF99F0017A5D8 /* MGTwitterMessagesParser.m */,
+ F99448C314FFF99F0017A5D8 /* MGTwitterMiscLibXMLParser.h */,
+ F99448C414FFF99F0017A5D8 /* MGTwitterMiscLibXMLParser.m */,
+ F99448C514FFF99F0017A5D8 /* MGTwitterMiscParser.h */,
+ F99448C614FFF99F0017A5D8 /* MGTwitterMiscParser.m */,
+ F99448C714FFF99F0017A5D8 /* MGTwitterParserDelegate.h */,
+ F99448C814FFF99F0017A5D8 /* MGTwitterRequestTypes.h */,
+ F99448C914FFF99F0017A5D8 /* MGTwitterStatusesLibXMLParser.h */,
+ F99448CA14FFF99F0017A5D8 /* MGTwitterStatusesLibXMLParser.m */,
+ F99448CB14FFF99F0017A5D8 /* MGTwitterStatusesParser.h */,
+ F99448CC14FFF99F0017A5D8 /* MGTwitterStatusesParser.m */,
+ F99448CD14FFF99F0017A5D8 /* MGTwitterUsersLibXMLParser.h */,
+ F99448CE14FFF99F0017A5D8 /* MGTwitterUsersLibXMLParser.m */,
+ F99448CF14FFF99F0017A5D8 /* MGTwitterUsersParser.h */,
+ F99448D014FFF99F0017A5D8 /* MGTwitterUsersParser.m */,
+ F99448D114FFF99F0017A5D8 /* MGTwitterXMLParser.h */,
+ F99448D214FFF99F0017A5D8 /* MGTwitterXMLParser.m */,
+ F99448D314FFF99F0017A5D8 /* NSData+Base64.h */,
+ F99448D414FFF99F0017A5D8 /* NSData+Base64.m */,
+ F99448D514FFF99F0017A5D8 /* NSString+UUID.h */,
+ F99448D614FFF99F0017A5D8 /* NSString+UUID.m */,
+ );
+ path = MGTwitterEngine;
+ sourceTree = "<group>";
+ };
+ F99448D714FFF99F0017A5D8 /* SAOAuthTwitterEngine */ = {
+ isa = PBXGroup;
+ children = (
+ F99448D814FFF99F0017A5D8 /* SA_OAuthTwitterController.h */,
+ F99448D914FFF99F0017A5D8 /* SA_OAuthTwitterController.m */,
+ F99448DA14FFF99F0017A5D8 /* SA_OAuthTwitterEngine.h */,
+ F99448DB14FFF99F0017A5D8 /* SA_OAuthTwitterEngine.m */,
+ F99448DC14FFF99F0017A5D8 /* twitter_load.png */,
+ );
+ path = SAOAuthTwitterEngine;
+ sourceTree = "<group>";
+ };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -132,6 +329,7 @@
hasScannedForEncodings = 0;
knownRegions = (
en,
+ English,
);
mainGroup = F99446DE14FEF6370017A5D8;
productRefGroup = F99446EA14FEF6370017A5D8 /* Products */;
@@ -150,6 +348,9 @@
files = (
F99446F814FEF6370017A5D8 /* InfoPlist.strings in Resources */,
F994470114FEF6370017A5D8 /* MainStoryboard.storyboard in Resources */,
+ F99448DD14FFF99F0017A5D8 /* jQueryInject.txt in Resources */,
+ F99448DE14FFF99F0017A5D8 /* jQueryInjectLandscape.txt in Resources */,
+ F99448F014FFF99F0017A5D8 /* twitter_load.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -163,6 +364,23 @@
F99446FA14FEF6370017A5D8 /* main.m in Sources */,
F99446FE14FEF6370017A5D8 /* SCTwitterAppDelegate.m in Sources */,
F994470414FEF6370017A5D8 /* SCTwitterViewController.m in Sources */,
+ F994471014FEFB1B0017A5D8 /* SCTwitter.m in Sources */,
+ F99448E014FFF99F0017A5D8 /* MGTwitterEngine.m in Sources */,
+ F99448E114FFF99F0017A5D8 /* MGTwitterHTTPURLConnection.m in Sources */,
+ F99448E214FFF99F0017A5D8 /* MGTwitterLibXMLParser.m in Sources */,
+ F99448E314FFF99F0017A5D8 /* MGTwitterMessagesLibXMLParser.m in Sources */,
+ F99448E414FFF99F0017A5D8 /* MGTwitterMessagesParser.m in Sources */,
+ F99448E514FFF99F0017A5D8 /* MGTwitterMiscLibXMLParser.m in Sources */,
+ F99448E614FFF99F0017A5D8 /* MGTwitterMiscParser.m in Sources */,
+ F99448E714FFF99F0017A5D8 /* MGTwitterStatusesLibXMLParser.m in Sources */,
+ F99448E814FFF99F0017A5D8 /* MGTwitterStatusesParser.m in Sources */,
+ F99448E914FFF99F0017A5D8 /* MGTwitterUsersLibXMLParser.m in Sources */,
+ F99448EA14FFF99F0017A5D8 /* MGTwitterUsersParser.m in Sources */,
+ F99448EB14FFF99F0017A5D8 /* MGTwitterXMLParser.m in Sources */,
+ F99448EC14FFF99F0017A5D8 /* NSData+Base64.m in Sources */,
+ F99448ED14FFF99F0017A5D8 /* NSString+UUID.m in Sources */,
+ F99448EE14FFF99F0017A5D8 /* SA_OAuthTwitterController.m in Sources */,
+ F99448EF14FFF99F0017A5D8 /* SA_OAuthTwitterEngine.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -236,7 +454,14 @@
buildSettings = {
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "SCTwitter/SCTwitter-Prefix.pch";
+ HEADER_SEARCH_PATHS = "${SDKROOT}/usr/include/libxml2/**";
INFOPLIST_FILE = "SCTwitter/SCTwitter-Info.plist";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/SCTwitter/ExternalFrameworks/Twitter+OAuth/Libraries & Headers\"",
+ "\"$(SRCROOT)/SCTwitter/ExternalFrameworks/Twitter-OAuth-iPhone/Twitter+OAuth/Libraries & Headers\"",
+ );
+ OTHER_CODE_SIGN_FLAGS = "";
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
@@ -247,7 +472,14 @@
buildSettings = {
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "SCTwitter/SCTwitter-Prefix.pch";
+ HEADER_SEARCH_PATHS = "${SDKROOT}/usr/include/libxml2/**";
INFOPLIST_FILE = "SCTwitter/SCTwitter-Info.plist";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/SCTwitter/ExternalFrameworks/Twitter+OAuth/Libraries & Headers\"",
+ "\"$(SRCROOT)/SCTwitter/ExternalFrameworks/Twitter-OAuth-iPhone/Twitter+OAuth/Libraries & Headers\"",
+ );
+ OTHER_CODE_SIGN_FLAGS = "";
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
1  SCTwitter/ExternalFrameworks/MGTwitterEngine
@@ -1 +0,0 @@
-Subproject commit e40658fb839da6ed437cadd494d15a1bdbdc815a
View
146 SCTwitter/ExternalFrameworks/Twitter+OAuth/TwitterDialog.h
@@ -0,0 +1,146 @@
+//
+// TwitterDialog.h
+// YatterBox
+//
+// Created by Lloyd Sparkes on 10/06/2011.
+// Copyright 2011 Lloyd Sparkes. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "OAuthConsumerCredentials.h"
+#import "OAuth.h"
+
+@protocol TwitterDialogDelegate;
+@protocol TwitterLoginDialogDelegate;
+
+
+@interface TwitterDialog : UIView<UIWebViewDelegate> {
+ id<TwitterDialogDelegate> _delegate;
+ id<TwitterLoginDialogDelegate> _logindelegate;
+ NSString * _serverURL;
+ NSURL* _loadingURL;
+ UIWebView* _webView;
+ UIActivityIndicatorView* _spinner;
+ UIImageView* _iconView;
+ UILabel* _titleLabel;
+ UIButton* _closeButton;
+ UIDeviceOrientation _orientation;
+ UIView* _modalBackgroundView;
+ BOOL _showingKeyboard;
+ OAuth *_twitterOAuth;
+
+}
+
+@property(nonatomic, retain) OAuth *twitterOAuth;
+@property(nonatomic,assign) id<TwitterDialogDelegate> delegate;
+@property(nonatomic,assign) id<TwitterLoginDialogDelegate> logindelegate;
+
+/**
+ * Displays the view with an animation.
+ *
+ * The view will be added to the top of the current key window.
+ */
+- (void)show;
+
+/**
+ * Displays the first page of the dialog.
+ *
+ * Do not ever call this directly. It is intended to be overriden by subclasses.
+ */
+- (void)load;
+
+/**
+ * Displays a URL in the dialog.
+ */
+- (void)loadURL:(NSString*)url
+ get:(NSDictionary*)getParams;
+
+/**
+ * Hides the view and notifies delegates of success or cancellation.
+ */
+- (void)dismissWithSuccess:(BOOL)success animated:(BOOL)animated;
+
+/**
+ * Hides the view and notifies delegates of an error.
+ */
+- (void)dismissWithError:(NSError*)error animated:(BOOL)animated;
+
+/**
+ * Subclasses may override to perform actions just prior to showing the dialog.
+ */
+- (void)dialogWillAppear;
+
+/**
+ * Subclasses may override to perform actions just after the dialog is hidden.
+ */
+- (void)dialogWillDisappear;
+
+/**
+ * Subclasses should override to process data returned from the server in a 'fbconnect' url.
+ *
+ * Implementations must call dismissWithSuccess:YES at some point to hide the dialog.
+ */
+- (void)dialogDidSucceed:(NSURL *)url;
+
+/**
+ * Subclasses should override to process data returned from the server in a 'fbconnect' url.
+ *
+ * Implementations must call dismissWithSuccess:YES at some point to hide the dialog.
+ */
+- (void)dialogDidCancel:(NSURL *)url;
+@end
+
+/*
+ *Your application should implement this delegate
+ */
+@protocol TwitterDialogDelegate <NSObject>
+
+@optional
+
+/**
+ * Called when the dialog succeeds and is about to be dismissed.
+ */
+- (void)dialogDidComplete:(TwitterDialog *)dialog;
+
+/**
+ * Called when the dialog succeeds with a returning url.
+ */
+- (void)dialogCompleteWithUrl:(NSURL *)url;
+
+/**
+ * Called when the dialog get canceled by the user.
+ */
+- (void)dialogDidNotCompleteWithUrl:(NSURL *)url;
+
+/**
+ * Called when the dialog is cancelled and is about to be dismissed.
+ */
+- (void)dialogDidNotComplete:(TwitterDialog *)dialog;
+
+/**
+ * Called when dialog failed to load due to an error.
+ */
+- (void)dialog:(TwitterDialog*)dialog didFailWithError:(NSError *)error;
+
+/**
+ * Asks if a link touched by a user should be opened in an external browser.
+ *
+ * If a user touches a link, the default behavior is to open the link in the Safari browser,
+ * which will cause your app to quit. You may want to prevent this from happening, open the link
+ * in your own internal browser, or perhaps warn the user that they are about to leave your app.
+ * If so, implement this method on your delegate and return NO. If you warn the user, you
+ * should hold onto the URL and once you have received their acknowledgement open the URL yourself
+ * using [[UIApplication sharedApplication] openURL:].
+ */
+- (BOOL)dialog:(TwitterDialog*)dialog shouldOpenURLInExternalBrowser:(NSURL *)url;
+
+@end
+
+@protocol TwitterLoginDialogDelegate <NSObject>
+
+- (void)twitterDidLogin;
+
+- (void)twitterDidNotLogin:(BOOL)cancelled;
+
+@end
+
View
615 SCTwitter/ExternalFrameworks/Twitter+OAuth/TwitterDialog.m
@@ -0,0 +1,615 @@
+//
+// TwitterDialog.m
+// YatterBox
+//
+// Created by Lloyd Sparkes on 10/06/2011.
+// Copyright 2011 Lloyd Sparkes. All rights reserved.
+//
+
+#import "TwitterDialog.h"
+
+static NSString* kDefaultTitle = @"Connect to Twitter";
+
+static CGFloat kFacebookBlue[4] = {0.296, 0.840, 1.0, 1.0};
+static CGFloat kBorderGray[4] = {0.3, 0.3, 0.3, 0.8};
+static CGFloat kBorderBlack[4] = {0.3, 0.3, 0.3, 1};
+static CGFloat kBorderBlue[4] = {0.23, 0.35, 0.6, 1.0};
+
+static CGFloat kTransitionDuration = 0.3;
+
+static CGFloat kTitleMarginX = 8;
+static CGFloat kTitleMarginY = 4;
+static CGFloat kPadding = 10;
+static CGFloat kBorderWidth = 10;
+
+@implementation TwitterDialog
+
+@synthesize delegate=_delegate, twitterOAuth=_twitterOAuth, logindelegate=_logindelegate;
+
+- (void)addRoundedRectToPath:(CGContextRef)context rect:(CGRect)rect radius:(float)radius {
+ CGContextBeginPath(context);
+ CGContextSaveGState(context);
+
+ if (radius == 0) {
+ CGContextTranslateCTM(context, CGRectGetMinX(rect), CGRectGetMinY(rect));
+ CGContextAddRect(context, rect);
+ } else {
+ rect = CGRectOffset(CGRectInset(rect, 0.5, 0.5), 0.5, 0.5);
+ CGContextTranslateCTM(context, CGRectGetMinX(rect)-0.5, CGRectGetMinY(rect)-0.5);
+ CGContextScaleCTM(context, radius, radius);
+ float fw = CGRectGetWidth(rect) / radius;
+ float fh = CGRectGetHeight(rect) / radius;
+
+ CGContextMoveToPoint(context, fw, fh/2);
+ CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1);
+ CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1);
+ CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1);
+ CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1);
+ }
+
+ CGContextClosePath(context);
+ CGContextRestoreGState(context);
+}
+
+- (void)drawRect:(CGRect)rect fill:(const CGFloat*)fillColors radius:(CGFloat)radius {
+ CGContextRef context = UIGraphicsGetCurrentContext();
+ CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
+
+ if (fillColors) {
+ CGContextSaveGState(context);
+ CGContextSetFillColor(context, fillColors);
+ if (radius) {
+ [self addRoundedRectToPath:context rect:rect radius:radius];
+ CGContextFillPath(context);
+ } else {
+ CGContextFillRect(context, rect);
+ }
+ CGContextRestoreGState(context);
+ }
+
+ CGColorSpaceRelease(space);
+}
+
+- (void)strokeLines:(CGRect)rect stroke:(const CGFloat*)strokeColor {
+ CGContextRef context = UIGraphicsGetCurrentContext();
+ CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
+
+ CGContextSaveGState(context);
+ CGContextSetStrokeColorSpace(context, space);
+ CGContextSetStrokeColor(context, strokeColor);
+ CGContextSetLineWidth(context, 1.0);
+
+ {
+ CGPoint points[] = {{rect.origin.x+0.5, rect.origin.y-0.5},
+ {rect.origin.x+rect.size.width, rect.origin.y-0.5}};
+ CGContextStrokeLineSegments(context, points, 2);
+ }
+ {
+ CGPoint points[] = {{rect.origin.x+0.5, rect.origin.y+rect.size.height-0.5},
+ {rect.origin.x+rect.size.width-0.5, rect.origin.y+rect.size.height-0.5}};
+ CGContextStrokeLineSegments(context, points, 2);
+ }
+ {
+ CGPoint points[] = {{rect.origin.x+rect.size.width-0.5, rect.origin.y},
+ {rect.origin.x+rect.size.width-0.5, rect.origin.y+rect.size.height}};
+ CGContextStrokeLineSegments(context, points, 2);
+ }
+ {
+ CGPoint points[] = {{rect.origin.x+0.5, rect.origin.y},
+ {rect.origin.x+0.5, rect.origin.y+rect.size.height}};
+ CGContextStrokeLineSegments(context, points, 2);
+ }
+
+ CGContextRestoreGState(context);
+
+ CGColorSpaceRelease(space);
+}
+
+- (BOOL)shouldRotateToOrientation:(UIDeviceOrientation)orientation {
+ if (orientation == _orientation) {
+ return NO;
+ } else {
+ return orientation == UIDeviceOrientationLandscapeLeft
+ || orientation == UIDeviceOrientationLandscapeRight
+ || orientation == UIDeviceOrientationPortrait
+ || orientation == UIDeviceOrientationPortraitUpsideDown;
+ }
+}
+
+- (CGAffineTransform)transformForOrientation {
+ UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
+ if (orientation == UIInterfaceOrientationLandscapeLeft) {
+ return CGAffineTransformMakeRotation(M_PI*1.5);
+ } else if (orientation == UIInterfaceOrientationLandscapeRight) {
+ return CGAffineTransformMakeRotation(M_PI/2);
+ } else if (orientation == UIInterfaceOrientationPortraitUpsideDown) {
+ return CGAffineTransformMakeRotation(-M_PI);
+ } else {
+ return CGAffineTransformIdentity;
+ }
+}
+
+- (void)sizeToFitOrientation:(BOOL)transform {
+ if (transform) {
+ self.transform = CGAffineTransformIdentity;
+ }
+
+ CGRect frame = [UIScreen mainScreen].applicationFrame;
+ CGPoint center = CGPointMake(
+ frame.origin.x + ceil(frame.size.width/2),
+ frame.origin.y + ceil(frame.size.height/2));
+
+ CGFloat scale_factor = 1.0f;
+
+ CGFloat width = floor(scale_factor * frame.size.width) - kPadding * 2;
+ CGFloat height = floor(scale_factor * frame.size.height) - kPadding * 2;
+
+ _orientation = [UIApplication sharedApplication].statusBarOrientation;
+ if (UIInterfaceOrientationIsLandscape(_orientation)) {
+ self.frame = CGRectMake(kPadding, kPadding, height, width);
+ } else {
+ self.frame = CGRectMake(kPadding, kPadding, width, height);
+ }
+ self.center = center;
+
+ if (transform) {
+ self.transform = [self transformForOrientation];
+ }
+}
+
+- (void)updateWebOrientation {
+ UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
+ if (UIInterfaceOrientationIsLandscape(orientation)) {
+ [_webView stringByEvaluatingJavaScriptFromString:
+ @"document.body.setAttribute('orientation', 90);"];
+ } else {
+ [_webView stringByEvaluatingJavaScriptFromString:
+ @"document.body.removeAttribute('orientation');"];
+ }
+}
+
+- (void)bounce1AnimationStopped {
+ [UIView beginAnimations:nil context:nil];
+ [UIView setAnimationDuration:kTransitionDuration/2];
+ [UIView setAnimationDelegate:self];
+ [UIView setAnimationDidStopSelector:@selector(bounce2AnimationStopped)];
+ self.transform = CGAffineTransformScale([self transformForOrientation], 0.9, 0.9);
+ [UIView commitAnimations];
+}
+
+- (void)bounce2AnimationStopped {
+ [UIView beginAnimations:nil context:nil];
+ [UIView setAnimationDuration:kTransitionDuration/2];
+ self.transform = [self transformForOrientation];
+ [UIView commitAnimations];
+}
+
+- (NSURL*)generateURL:(NSString*)baseURL params:(NSDictionary*)params {
+ if (params) {
+ NSMutableArray* pairs = [NSMutableArray array];
+ for (NSString* key in params.keyEnumerator) {
+ NSString* value = [params objectForKey:key];
+ NSString* escaped_value = (NSString *)CFURLCreateStringByAddingPercentEscapes(
+ NULL, /* allocator */
+ (CFStringRef)value,
+ NULL, /* charactersToLeaveUnescaped */
+ (CFStringRef)@"!*'();:@&=+$,/?%#[]",
+ kCFStringEncodingUTF8);
+
+ [pairs addObject:[NSString stringWithFormat:@"%@=%@", key, escaped_value]];
+ [escaped_value release];
+ }
+
+ NSString* query = [pairs componentsJoinedByString:@"&"];
+ NSString* url = [NSString stringWithFormat:@"%@?%@", baseURL, query];
+ return [NSURL URLWithString:url];
+ } else {
+ return [NSURL URLWithString:baseURL];
+ }
+}
+
+- (void)addObservers {
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(deviceOrientationDidChange:)
+ name:@"UIDeviceOrientationDidChangeNotification" object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(keyboardWillShow:) name:@"UIKeyboardWillShowNotification" object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(keyboardWillHide:) name:@"UIKeyboardWillHideNotification" object:nil];
+}
+
+- (void)removeObservers {
+ [[NSNotificationCenter defaultCenter] removeObserver:self
+ name:@"UIDeviceOrientationDidChangeNotification" object:nil];
+ [[NSNotificationCenter defaultCenter] removeObserver:self
+ name:@"UIKeyboardWillShowNotification" object:nil];
+ [[NSNotificationCenter defaultCenter] removeObserver:self
+ name:@"UIKeyboardWillHideNotification" object:nil];
+}
+
+- (void)postDismissCleanup {
+ [self removeObservers];
+ [self removeFromSuperview];
+ [_modalBackgroundView removeFromSuperview];
+}
+
+- (void)dismiss:(BOOL)animated {
+ [self dialogWillDisappear];
+
+ [_loadingURL release];
+ _loadingURL = nil;
+
+ if (animated) {
+ [UIView beginAnimations:nil context:nil];
+ [UIView setAnimationDuration:kTransitionDuration];
+ [UIView setAnimationDelegate:self];
+ [UIView setAnimationDidStopSelector:@selector(postDismissCleanup)];
+ self.alpha = 0;
+ [UIView commitAnimations];
+ } else {
+ [self postDismissCleanup];
+ }
+}
+
+- (void)cancel {
+ [self dialogDidCancel:nil];
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// NSObject
+
+- (id)init {
+ if (self = [super initWithFrame:CGRectZero]) {
+ _delegate = nil;
+ _loadingURL = nil;
+ _orientation = UIDeviceOrientationUnknown;
+ _showingKeyboard = NO;
+
+ self.backgroundColor = [UIColor clearColor];
+ self.autoresizesSubviews = YES;
+ self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+ self.contentMode = UIViewContentModeRedraw;
+
+ UIImage* iconImage = [UIImage imageNamed:@"ticon.png"];
+ UIImage* closeImage = [UIImage imageNamed:@"tclose.png"];
+
+ _iconView = [[UIImageView alloc] initWithImage:iconImage];
+ [self addSubview:_iconView];
+
+ UIColor* color = [UIColor colorWithRed:167.0/255 green:184.0/255 blue:216.0/255 alpha:1];
+ _closeButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
+ [_closeButton setImage:closeImage forState:UIControlStateNormal];
+ [_closeButton setTitleColor:color forState:UIControlStateNormal];
+ [_closeButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
+ [_closeButton addTarget:self action:@selector(cancel)
+ forControlEvents:UIControlEventTouchUpInside];
+
+ // To be compatible with OS 2.x
+#if __IPHONE_OS_VERSION_MAX_ALLOWED <= __IPHONE_2_2
+ _closeButton.font = [UIFont boldSystemFontOfSize:12];
+#else
+ _closeButton.titleLabel.font = [UIFont boldSystemFontOfSize:12];
+#endif
+
+ _closeButton.showsTouchWhenHighlighted = YES;
+ _closeButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin
+ | UIViewAutoresizingFlexibleBottomMargin;
+ [self addSubview:_closeButton];
+
+ CGFloat titleLabelFontSize = 14;
+ _titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
+ _titleLabel.text = kDefaultTitle;
+ _titleLabel.backgroundColor = [UIColor clearColor];
+ _titleLabel.textColor = [UIColor whiteColor];
+ _titleLabel.font = [UIFont boldSystemFontOfSize:titleLabelFontSize];
+ _titleLabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin
+ | UIViewAutoresizingFlexibleBottomMargin;
+ [self addSubview:_titleLabel];
+
+ _webView = [[UIWebView alloc] initWithFrame:CGRectMake(kPadding, kPadding, 480, 480)];
+ _webView.delegate = self;
+ _webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+ [self addSubview:_webView];
+
+ _spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:
+ UIActivityIndicatorViewStyleWhiteLarge];
+ _spinner.autoresizingMask =
+ UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin
+ | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
+ [self addSubview:_spinner];
+ _modalBackgroundView = [[UIView alloc] init];
+ }
+ return self;
+}
+
+- (void)dealloc {
+ _webView.delegate = nil;
+ [_webView release];
+ [_serverURL release];
+ [_spinner release];
+ [_titleLabel release];
+ [_iconView release];
+ [_closeButton release];
+ [_loadingURL release];
+ [_modalBackgroundView release];
+ [super dealloc];
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// UIView
+
+- (void)drawRect:(CGRect)rect {
+ CGRect grayRect = CGRectOffset(rect, -0.5, -0.5);
+ [self drawRect:grayRect fill:kBorderGray radius:10];
+
+ CGRect headerRect = CGRectMake(
+ ceil(rect.origin.x + kBorderWidth), ceil(rect.origin.y + kBorderWidth),
+ rect.size.width - kBorderWidth*2, _titleLabel.frame.size.height);
+ [self drawRect:headerRect fill:kFacebookBlue radius:0];
+ [self strokeLines:headerRect stroke:kBorderBlue];
+
+ CGRect webRect = CGRectMake(
+ ceil(rect.origin.x + kBorderWidth), headerRect.origin.y + headerRect.size.height,
+ rect.size.width - kBorderWidth*2, _webView.frame.size.height+1);
+ [self strokeLines:webRect stroke:kBorderBlack];
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// UIWebViewDelegate
+
+- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
+ navigationType:(UIWebViewNavigationType)navigationType {
+ NSURL* url = request.URL;
+ NSString* host = [url host];
+ NSLog(@"%@", host);
+ NSLog(@"%@", [url absoluteString]);
+ if ([host isEqualToString:@"google.co.uk"]) {
+ NSLog(@"At Yatterbox");
+ if ([[url.resourceSpecifier substringToIndex:8] isEqualToString:@"//cancel"]) {
+
+ } else {
+ NSLog(@"Suceeded Now Getting Access Token");
+ [self dialogDidSucceed:url];
+ }
+ return NO;
+ } else if ([_loadingURL isEqual:url]) {
+ return YES;
+ } else if (navigationType == UIWebViewNavigationTypeLinkClicked) {
+ if ([_delegate respondsToSelector:@selector(dialog:shouldOpenURLInExternalBrowser:)]) {
+ if (![_delegate dialog:self shouldOpenURLInExternalBrowser:url]) {
+ return NO;
+ }
+ }
+
+ [[UIApplication sharedApplication] openURL:request.URL];
+ return NO;
+ } else {
+ return YES;
+ }
+}
+
+- (void)webViewDidFinishLoad:(UIWebView *)webView {
+ [_spinner stopAnimating];
+ _spinner.hidden = YES;
+
+ _titleLabel.text = [_webView stringByEvaluatingJavaScriptFromString:@"document.title"];
+ [self updateWebOrientation];
+}
+
+- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
+ // 102 == WebKitErrorFrameLoadInterruptedByPolicyChange
+ if (!([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102)) {
+ [self dismissWithError:error animated:YES];
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// UIDeviceOrientationDidChangeNotification
+
+- (void)deviceOrientationDidChange:(void*)object {
+ UIDeviceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
+ if (!_showingKeyboard && [self shouldRotateToOrientation:orientation]) {
+ [self updateWebOrientation];
+
+ CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration;
+ [UIView beginAnimations:nil context:nil];
+ [UIView setAnimationDuration:duration];
+ [self sizeToFitOrientation:YES];
+ [UIView commitAnimations];
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// UIKeyboardNotifications
+
+- (void)keyboardWillShow:(NSNotification*)notification {
+
+ _showingKeyboard = YES;
+
+ UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
+ if (UIInterfaceOrientationIsLandscape(orientation)) {
+ _webView.frame = CGRectInset(_webView.frame,
+ -(kPadding + kBorderWidth),
+ -(kPadding + kBorderWidth) - _titleLabel.frame.size.height);
+ }
+}
+
+- (void)keyboardWillHide:(NSNotification*)notification {
+ _showingKeyboard = NO;
+
+ UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
+ if (UIInterfaceOrientationIsLandscape(orientation)) {
+ _webView.frame = CGRectInset(_webView.frame,
+ kPadding + kBorderWidth,
+ kPadding + kBorderWidth + _titleLabel.frame.size.height);
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+// public
+
+/**
+ * Find a specific parameter from the url
+ */
+- (NSString *) getStringFromUrl: (NSString*) url needle:(NSString *) needle {
+ NSString * str = nil;
+ NSRange start = [url rangeOfString:needle];
+ if (start.location != NSNotFound) {
+ NSRange end = [[url substringFromIndex:start.location+start.length] rangeOfString:@"&"];
+ NSUInteger offset = start.location+start.length;
+ str = end.location == NSNotFound
+ ? [url substringFromIndex:offset]
+ : [url substringWithRange:NSMakeRange(offset, end.location)];
+ str = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
+ }
+
+ return str;
+}
+
+- (id)initWithURL: (NSString *) serverURL
+ delegate: (id <TwitterDialogDelegate>) delegate {
+
+ self = [self init];
+ _serverURL = [serverURL retain];
+ _delegate = delegate;
+
+ return self;
+}
+
+- (NSString*)title {
+ return _titleLabel.text;
+}
+
+- (void)setTitle:(NSString*)title {
+ _titleLabel.text = title;
+}
+
+- (void)load {
+ NSDictionary * _params = [NSDictionary dictionaryWithObject:self.twitterOAuth.oauth_token forKey:@"oauth_token"];
+
+
+ [self loadURL:@"http://api.twitter.com/oauth/authorize" get:_params];
+}
+
+- (void)loadURL:(NSString*)url get:(NSDictionary*)getParams {
+
+ [_loadingURL release];
+ _loadingURL = [[self generateURL:url params:getParams] retain];
+ NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:_loadingURL];
+
+ [_webView loadRequest:request];
+}
+
+- (void)getAccessToken{
+ [self.twitterOAuth synchronousRequestTwitterTokenWithCallbackUrl:@"http://google.co.uk"];
+}
+
+- (void)show {
+
+ [self getAccessToken];
+
+ [self load];
+ [self sizeToFitOrientation:NO];
+
+ CGFloat innerWidth = self.frame.size.width - (kBorderWidth+1)*2;
+ [_iconView sizeToFit];
+ [_titleLabel sizeToFit];
+ [_closeButton sizeToFit];
+
+ _titleLabel.frame = CGRectMake(
+ kBorderWidth + kTitleMarginX + _iconView.frame.size.width + kTitleMarginX,
+ kBorderWidth,
+ innerWidth - (_titleLabel.frame.size.height + _iconView.frame.size.width + kTitleMarginX*2),
+ _titleLabel.frame.size.height + kTitleMarginY*2);
+
+ _iconView.frame = CGRectMake(
+ kBorderWidth + kTitleMarginX,
+ kBorderWidth + floor(_titleLabel.frame.size.height/2 - _iconView.frame.size.height/2),
+ _iconView.frame.size.width,
+ _iconView.frame.size.height);
+
+ _closeButton.frame = CGRectMake(
+ self.frame.size.width - (_titleLabel.frame.size.height + kBorderWidth),
+ kBorderWidth,
+ _titleLabel.frame.size.height,
+ _titleLabel.frame.size.height);
+
+ _webView.frame = CGRectMake(
+ kBorderWidth+1,
+ kBorderWidth + _titleLabel.frame.size.height,
+ innerWidth,
+ self.frame.size.height - (_titleLabel.frame.size.height + 1 + kBorderWidth*2));
+
+ [_spinner sizeToFit];
+ [_spinner startAnimating];
+ _spinner.center = _webView.center;
+
+ UIWindow* window = [UIApplication sharedApplication].keyWindow;
+ if (!window) {
+ window = [[UIApplication sharedApplication].windows objectAtIndex:0];
+ }
+
+ _modalBackgroundView.frame = window.frame;
+ [_modalBackgroundView addSubview:self];
+ [window addSubview:_modalBackgroundView];
+
+ [window addSubview:self];
+
+ [self dialogWillAppear];
+
+ self.transform = CGAffineTransformScale([self transformForOrientation], 0.001, 0.001);
+ [UIView beginAnimations:nil context:nil];
+ [UIView setAnimationDuration:kTransitionDuration/1.5];
+ [UIView setAnimationDelegate:self];
+ [UIView setAnimationDidStopSelector:@selector(bounce1AnimationStopped)];
+ self.transform = CGAffineTransformScale([self transformForOrientation], 1.1, 1.1);
+ [UIView commitAnimations];
+
+ [self addObservers];
+}
+
+- (void)dismissWithSuccess:(BOOL)success animated:(BOOL)animated {
+ if (success) {
+ if ([_delegate respondsToSelector:@selector(dialogDidComplete:)]) {
+ [_delegate dialogDidComplete:self];
+ }
+ } else {
+ if ([_delegate respondsToSelector:@selector(dialogDidNotComplete:)]) {
+ [_delegate dialogDidNotComplete:self];
+ }
+ }
+
+ [self dismiss:animated];
+}
+
+- (void)dismissWithError:(NSError*)error animated:(BOOL)animated {
+ if ([_delegate respondsToSelector:@selector(dialog:didFailWithError:)]) {
+ [_delegate dialog:self didFailWithError:error];
+ }
+
+ [self dismiss:animated];
+}
+
+- (void)dialogWillAppear {
+}
+
+- (void)dialogWillDisappear {
+}
+
+- (void)dialogDidSucceed:(NSURL *)url {
+ [self.twitterOAuth synchronousAuthorizeTwitterTokenWithVerifier:[self getStringFromUrl:[url absoluteString] needle:@"oauth_verifier="]];
+ [self.logindelegate twitterDidLogin];
+ [self dismissWithSuccess:YES animated:YES];
+}
+
+- (void)dialogDidCancel:(NSURL *)url {
+ if ([_delegate respondsToSelector:@selector(dialogDidNotCompleteWithUrl:)]) {
+ [_delegate dialogDidNotCompleteWithUrl:url];
+ }
+ [self.logindelegate twitterDidNotLogin:YES];
+ [self dismissWithSuccess:NO animated:YES];
+}
+
+
+
+@end
1  SCTwitter/ExternalFrameworks/Twitter-OAuth-iPhone
@@ -0,0 +1 @@
+Subproject commit 406971ee95b07d3454fd504f75a84f3ba62f8c75
View
33 SCTwitter/SCTwitter/SCTwitter.h
@@ -0,0 +1,33 @@
+//
+// SCTwitter.h
+// SCTwitter
+//
+// Created by Lucas Correa on 29/02/12.
+// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SA_OAuthTwitterController.h"
+#import "SA_OAuthTwitterEngine.h"
+
+#warning Your application App ID/API Key Twitter
+#define kConsumerKey @"D6vneoIuMP0pdBZJAV7gg"
+#define kConsumerSecret @"wWc59eahiaES9ZCZ7wp28Rw4hcURG4fmIXvvwJiaR8"
+
+
+typedef void(^SCTwitterCallback)(BOOL success, id result);
+
+@interface SCTwitter : NSObject <SA_OAuthTwitterEngineDelegate, SA_OAuthTwitterControllerDelegate>{
+ SA_OAuthTwitterEngine *_engine;
+ UIViewController *_viewController;
+
+}
+
+@property (nonatomic, copy) SCTwitterCallback loginCallback;
+
++ (SCTwitter *)shared;
++ (void)loginViewControler:(UIViewController *)aViewController callBack:(void (^)(BOOL success, id result))aCallBack;
+//+ (void)logoutCallBack:(void(^)(BOOL success, id result))callBack;
+
+@end
View
122 SCTwitter/SCTwitter/SCTwitter.m
@@ -0,0 +1,122 @@
+//
+// SCTwitter.m
+// SCTwitter
+//
+// Created by Lucas Correa on 29/02/12.
+// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
+//
+
+#import "SCTwitter.h"
+
+@interface SCTwitter()
+
+- (void)loginViewControler:(UIViewController *)aViewController callBack:(void (^)(BOOL success, id result))aCallBack;
+- (BOOL)isSessionValid;
+
+@end
+
+@implementation SCTwitter
+
+@synthesize loginCallback;
+
+static SCTwitter *_scTwitter = nil;
+
++ (SCTwitter *)shared {
+
+ @synchronized (self){
+
+ static dispatch_once_t pred;
+
+ dispatch_once(&pred, ^{
+ _scTwitter = [[SCTwitter alloc] init];
+ });
+ }
+
+ return _scTwitter;
+}
+
+- (SCTwitter *) init
+{
+ self = [super init];
+ if (self != nil){
+
+ // Initialize Twitter
+ _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate:self];
+ _engine.consumerKey = kConsumerKey;
+ _engine.consumerSecret = kConsumerSecret;
+
+ }
+ return self;
+}
+
+
++ (void)loginViewControler:(UIViewController *)aViewController callBack:(void (^)(BOOL, id))aCallBack
+{
+ [[SCTwitter shared] loginViewControler:aViewController callBack:aCallBack];
+}
+
+- (void)loginViewControler:(UIViewController *)aViewController callBack:(void (^)(BOOL, id))aCallBack
+{
+ if ([self isSessionValid]) {
+
+ // Call the login callback if we have one
+ if (aCallBack) {
+ aCallBack(YES, nil);
+ }
+
+ } else {
+ // Autorize twitter
+
+ self.loginCallback = aCallBack;
+ UIViewController *twitterController = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine:_engine delegate:self];
+ [aViewController presentModalViewController:twitterController animated: YES];
+ }
+}
+
+- (BOOL)isSessionValid
+{
+ return _engine && [_engine isAuthorized];
+}
+
+
+- (void) OAuthTwitterController: (SA_OAuthTwitterController *) controller authenticatedWithUsername: (NSString *) username {
+
+ // Call the login callback
+ if (self.loginCallback) {
+ self.loginCallback(YES, nil);
+ }
+
+}
+
+- (void) OAuthTwitterControllerFailed: (SA_OAuthTwitterController *) controller {
+
+// if (messageSuccessCallback) {
+// messageSuccessCallback();
+// }
+
+}
+
+
+- (void) storeCachedTwitterOAuthData: (NSString *) data forUsername: (NSString *) username {
+
+ // Store the twitter credentials
+ NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
+ [defaults setObject:data forKey:@"twitter_oauth_data"];
+ [defaults synchronize];
+
+}
+
+- (NSString *) cachedTwitterOAuthDataForUsername: (NSString *) username {
+
+ // Return the last stored auth data (we don't care about username)
+ NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
+
+ return [defaults objectForKey:@"twitter_oauth_data"];
+ return nil;
+}
+
+- (void) twitterOAuthConnectionFailedWithData: (NSData *) data {
+ NSLog(@"Twitter connection failed");
+}
+
+@end
View
1  SCTwitter/SCTwitterViewController.h
@@ -9,5 +9,6 @@
#import <UIKit/UIKit.h>
@interface SCTwitterViewController : UIViewController
+- (IBAction)loginButtonAction:(id)sender;
@end
View
8 SCTwitter/SCTwitterViewController.m
@@ -7,6 +7,7 @@
//
#import "SCTwitterViewController.h"
+#import "SCTwitter.h"
@implementation SCTwitterViewController
@@ -21,7 +22,6 @@ - (void)didReceiveMemoryWarning
- (void)viewDidLoad
{
[super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidUnload
@@ -57,4 +57,10 @@ - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interface
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
+- (IBAction)loginButtonAction:(id)sender {
+
+ [SCTwitter loginViewControler:self callBack:^(BOOL success, id result){
+ NSLog(@"Passou %i - %@", success, result);
+ }];
+}
@end
View
30 SCTwitter/en.lproj/MainStoryboard.storyboard
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="1.0" toolsVersion="1906" systemVersion="11A511" targetRuntime="iOS.CocoaTouch" nextObjectID="6" propertyAccessControl="none" initialViewController="2">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="1.0" toolsVersion="1938" systemVersion="11D50b" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="2">
<dependencies>
<development defaultVersion="4200" identifier="xcode"/>
- <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="902"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="933"/>
</dependencies>
<scenes>
<scene sceneID="5">
@@ -12,13 +12,35 @@
<view key="view" contentMode="scaleToFill" id="3">
<rect key="frame" x="0.0" y="20" width="320" height="460"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
- <subviews/>
- <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ <subviews>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="XDM-n1-1r6">
+ <rect key="frame" x="124" y="253" width="72" height="37"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+ <state key="normal">
+ <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <state key="highlighted">
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <connections>
+ <action selector="loginButtonAction:" destination="2" eventType="touchUpInside" id="9QK-Y5-wTG"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" white="0.43430656934306572" alpha="1" colorSpace="calibratedWhite"/>
</view>
</viewController>
</objects>
+ <point key="canvasLocation" x="-126" y="73"/>
</scene>
</scenes>
+ <classes>
+ <class className="SCTwitterViewController" superclassName="UIViewController">
+ <source key="sourceIdentifier" type="project" relativePath="./Classes/SCTwitterViewController.h"/>
+ </class>
+ </classes>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
Please sign in to comment.
Something went wrong with that request. Please try again.