Skip to content
This repository
Browse code

Facebook iOS SDK 3.2 (see https://developers.facebook.com/ios/change-…

…log-3.x/)

Summary:

Modified
    FBSession properties accessToken, expirationDate and loginType have been deprecated. Instead use the new accessTokenData property to access this info.
    FBSession methods reauthorize* have been deprecated, instead use the requestNew* methods.
    Improved error handling logic, including handling various iOS 6 cases.
    The Scrumptious sample now uses FBLoginViewfor authentication. The sample has also been modified to show best practices in handling errors during authorization and calling Facebook APIs.
    Samples migrated from the deprecated APIs. The -ObjC linker flag added to all samples.
    Implicit logging added to provide Facebook Insights to events such as launching/dismissing the native share sheet, launching/dismissing the native Login dialog, friend picker usage, and place picker usage. A new advanced setting in the App Dashboard named Mobile SDK Insights, allows you to turn off the implicit logging which is on by default.
    PlacePickerSample sample displays an alert when a place is selected.
    JustRequestSample sample renamed to GraphApiSample.

Added
    FBWebDialog class to provide webview dialogs to replace Facebook dialog API.
    NSError(FBError) category extension to NSError to simplify Facebook error handling.
    FBSession methods requestNewPublishPermissions:defaultAudience:completionHandler: requestNewReadPermissions:completionHandler: for requesting new or additional permissions for the session.
    FBSession method openFromAccessTokenData to support opening from an FBAccessTokenData instance.
    FBSession class method renewSystemCredentials to allow easy refresh of iOS 6 account store.
    FBSession class methods to get and set default URL scheme suffix used in sessions:
        setDefaultUrlSchemeSuffix:
        defaultUrlSchemeSuffix
    FBAccessTokenData class to simplify access token data operations.
    FBSession property accessTokenData used to get the FBAccessTokenData used in the session.
    FBSessionTokenCachingStrategy methods to operate with FBAccessTokenData:
        nullCacheInstance - class method that returns an FBSessionTokenCachingStrategy instance that does not perform any caching. One scenario where this is useful is importing an access token using the openFromAccessTokenData method on an FBSession instance that is not initialized from cache. The nullCacheInstance can be used to create the required FBSession instance.
        cacheFBAccessTokenData: - method used to cache a token represented by FBAccessTokenData.
        fetchFBAccessTokenData - method used to fetch a cached token.
    FBPlacePickerViewController method updateView to allow a place picker refresh without a network roundtrip.
    FBLoginViewDelegate method loginView:handleError: to notify the delegate of communication or authorization errors.
    FBSettings method publishInstall:withHandler: enables defining a handler to process server response when publishing an attributed install for Mobile App Install Ads analytics.
    FBInsights class to provide client-side logging of specialized app analytics that are then available on Facebook Insights. Also provides analytics for Conversion Pixel tracking for ads optimization.
    FBSettings class methods setClientToken and clientToken to enable anonymous Facebook API calls in support of FBInsights logging.

Fixed
    Memory leaks in FBUserSettingsViewController, FBLoginView, and FBSession.
    Incorrect use of publish permissions when read permissions should be used, in FBUserSettingsViewController and FBLoginView.
    FBViewController to initialize ''done'' and''cancel'' buttons properly for non-programmatic init paths.
    FBViewController and FBLoginView documentation.
    A bug in the FBSession handleOpenURL method that no longer passed through errors.
    A bug in the FBSession handleDidBecomeActive method that incorrectly coupled to the active session.
    A bug in FBSession that prevented KVO of the state property.
    How friend picker and place picker selection changed events are triggered when items are deselected. The event was being triggered multiple times in certain scenarios.
    The friend picker to properly handle profiles with no name data.
    A bug in WebView Login dialog reauthorization flow that did not invoke reauthorization handlers.
    Rotation bugs in ProfilePictureSample, FriendPickerSample and FBUserSettingsViewController.
    FriendPickerViewController and PlacePickerViewController can now fetch Retina-sized images.

Reviewers: clang

Reviewed By: clang

Test Plan: Release Testing.
  • Loading branch information...
commit 76b75a4fe076da2df8974cb7651e66e8a9d46d2c 1 parent 2a030e7
Chris Pan authored February 25, 2013

Showing 139 changed files with 6,819 additions and 2,105 deletions. Show diff stats Hide diff stats

  1. 5  .arcconfig
  2. 3  .gitignore
  3. 10  samples/BooleanOGSample/BooleanOGSample.xcodeproj/project.pbxproj
  4. 54  samples/BooleanOGSample/BooleanOGSample/BOGFirstViewController.m
  5. 4  samples/BooleanOGSample/BooleanOGSample/BOGSecondViewController.h
  6. 12  samples/BooleanOGSample/BooleanOGSample/BOGSecondViewController.m
  7. 2  samples/BooleanOGSample/BooleanOGSample/BooleanOGSample-Info.plist
  8. 171  samples/BooleanOGSample/BooleanOGSample/en.lproj/BOGSecondViewController_iPad.xib
  9. 175  samples/BooleanOGSample/BooleanOGSample/en.lproj/BOGSecondViewController_iPhone.xib
  10. 10  samples/FriendPickerSample/FriendPickerSample.xcodeproj/project.pbxproj
  11. 11  samples/FriendPickerSample/FriendPickerSample/FPAppDelegate.m
  12. 5  samples/FriendPickerSample/FriendPickerSample/FPViewController.m
  13. 60  samples/FriendPickerSample/FriendPickerSample/en.lproj/FPViewController_iPhone.xib
  14. 106  ...stRequestSample/JustRequestSample.xcodeproj → GraphApiSample/GraphApiSample.xcodeproj}/project.pbxproj
  15. 0  samples/{JustRequestSample/JustRequestSample → GraphApiSample/GraphApiSample}/Default-568h@2x.png
  16. 0  samples/{JustRequestSample/JustRequestSample → GraphApiSample/GraphApiSample}/Default.png
  17. 0  samples/{JustRequestSample/JustRequestSample → GraphApiSample/GraphApiSample}/Default@2x.png
  18. 6  ...RequestSample/JustRequestSample/JRAppDelegate.h → GraphApiSample/GraphApiSample/GraphApiAppDelegate.h}
  19. 10  ...RequestSample/JustRequestSample/JRAppDelegate.m → GraphApiSample/GraphApiSample/GraphApiAppDelegate.m}
  20. 6  ...tRequestSample/JustRequestSample-Info.plist → GraphApiSample/GraphApiSample/GraphApiSample-Info.plist}
  21. 2  ...tRequestSample/JustRequestSample-Prefix.pch → GraphApiSample/GraphApiSample/GraphApiSample-Prefix.pch}
  22. 2  ...tSample/JustRequestSample/JRViewController.h → GraphApiSample/GraphApiSample/GraphApiViewController.h}
  23. 20  ...tSample/JustRequestSample/JRViewController.m → GraphApiSample/GraphApiSample/GraphApiViewController.m}
  24. 0  samples/{JustRequestSample/JustRequestSample → GraphApiSample/GraphApiSample}/Icon-72.png
  25. 0  samples/{JustRequestSample/JustRequestSample → GraphApiSample/GraphApiSample}/Icon-72@2x.png
  26. 0  samples/{JustRequestSample/JustRequestSample → GraphApiSample/GraphApiSample}/Icon.png
  27. 0  samples/{JustRequestSample/JustRequestSample → GraphApiSample/GraphApiSample}/Icon@2x.png
  28. 73  ...oj/JRViewController_iPad.xib → GraphApiSample/GraphApiSample/en.lproj/GraphApiViewController_iPad.xib}
  29. 72  ...RViewController_iPhone.xib → GraphApiSample/GraphApiSample/en.lproj/GraphApiViewController_iPhone.xib}
  30. 0  samples/{JustRequestSample/JustRequestSample → GraphApiSample/GraphApiSample}/en.lproj/InfoPlist.strings
  31. 4  samples/{JustRequestSample/JustRequestSample → GraphApiSample/GraphApiSample}/main.m
  32. 4  samples/{JustRequestSample → GraphApiSample}/ReadMe.txt
  33. 10  samples/Hackbook/Hackbook.xcodeproj/project.pbxproj
  34. 10  samples/HelloFacebookSample/HelloFacebookSample.xcodeproj/project.pbxproj
  35. 7  samples/HelloFacebookSample/HelloFacebookSample/HFAppDelegate.m
  36. 28  samples/HelloFacebookSample/HelloFacebookSample/HFViewController.m
  37. 14  samples/PlacePickerSample/PlacePickerSample.xcodeproj/project.pbxproj
  38. 38  samples/PlacePickerSample/PlacePickerSample/PPViewController.m
  39. 10  samples/ProfilePictureSample/ProfilePictureSample.xcodeproj/project.pbxproj
  40. 7  samples/ProfilePictureSample/ProfilePictureSample/PPAppDelegate.m
  41. 124  samples/ProfilePictureSample/ProfilePictureSample/en.lproj/PPViewController_iPad.xib
  42. 19  samples/Scrumptious/ReadMe.txt
  43. 14  samples/Scrumptious/Scrumptious.xcodeproj/project.pbxproj
  44. 18  samples/Scrumptious/scrumptious/SCAppDelegate.h
  45. 238  samples/Scrumptious/scrumptious/SCAppDelegate.m
  46. 16  samples/Scrumptious/scrumptious/SCLoginViewController.h
  47. 110  samples/Scrumptious/scrumptious/SCLoginViewController.m
  48. 166  samples/Scrumptious/scrumptious/SCLoginViewController.xib
  49. 2  samples/Scrumptious/scrumptious/SCProtocols.h
  50. 12  samples/Scrumptious/scrumptious/SCViewController.h
  51. 406  samples/Scrumptious/scrumptious/SCViewController.m
  52. 10  samples/SessionLoginSample/SessionLoginSample.xcodeproj/project.pbxproj
  53. 2  samples/SessionLoginSample/SessionLoginSample/SLViewController.m
  54. 2  samples/SwitchUserSample/SwitchUserSample.xcodeproj/project.pbxproj
  55. 2  samples/SwitchUserSample/SwitchUserSample/SUUserManager.m
  56. 10  scripts/build_distribution.sh
  57. 2  scripts/build_documentation.sh
  58. 3  scripts/build_framework.sh
  59. 2  scripts/build_samples.sh
  60. 127  scripts/build_scrumptious_distribution.sh
  61. 2  scripts/common.sh
  62. 39  scripts/configure_simulator_for_unit_tests.sh
  63. 32  src/FBAccessTokenData+Internal.h
  64. 115  src/FBAccessTokenData.h
  65. 209  src/FBAccessTokenData.m
  66. 3  src/FBDataDiskCache.m
  67. 187  src/FBError.h
  68. 11  src/FBError.m
  69. 46  src/FBErrorUtility.h
  70. 267  src/FBErrorUtility.m
  71. 26  src/FBFetchedAppSettings.h
  72. 25  src/FBFetchedAppSettings.m
  73. 17  src/FBFriendPickerViewController.m
  74. 7  src/FBGraphObjectPagingLoader.m
  75. 2  src/FBGraphObjectTableCell.m
  76. 2  src/FBGraphObjectTableDataSource.m
  77. 28  src/FBGraphObjectTableSelection.m
  78. 56  src/FBInsights+Internal.h
  79. 271  src/FBInsights.h
  80. 1,137  src/FBInsights.m
  81. 6  src/FBLogger.m
  82. 22  src/FBLoginView.h
  83. 123  src/FBLoginView.m
  84. 41  src/FBNativeDialogs.m
  85. 10  src/FBPlacePickerViewController.h
  86. 35  src/FBPlacePickerViewController.m
  87. 3  src/FBRequest.m
  88. 268  src/FBRequestConnection.m
  89. 4  src/FBSDKVersion.h
  90. 14  src/FBSession+Internal.h
  91. 12  src/FBSession+Protected.h
  92. 171  src/FBSession.h
  93. 1,002  src/FBSession.m
  94. 38  src/FBSessionInsightsState.h
  95. 114  src/FBSessionInsightsState.m
  96. 35  src/FBSessionTokenCachingStrategy.h
  97. 50  src/FBSessionTokenCachingStrategy.m
  98. 66  src/FBSettings.h
  99. 199  src/FBSettings.m
  100. 85  src/FBSystemAccountStoreAdapter.h
  101. 286  src/FBSystemAccountStoreAdapter.m
  102. 88  src/FBTestSession.m
  103. 46  src/FBURLConnection.m
  104. 2  src/FBUserSettingsViewController.h
  105. 76  src/FBUserSettingsViewController.m
  106. BIN  src/FBUserSettingsViewResources.bundle/images/loginBackgroundIPadLandscape.jpg
  107. BIN  src/FBUserSettingsViewResources.bundle/images/loginBackgroundIPadLandscape@2x.jpg
  108. BIN  src/FBUserSettingsViewResources.bundle/images/loginBackgroundIPadPortrait.jpg
  109. BIN  src/FBUserSettingsViewResources.bundle/images/loginBackgroundIPadPortrait@2x.jpg
  110. BIN  src/FBUserSettingsViewResources.bundle/images/loginBackgroundIPhonePortrait.jpg
  111. BIN  src/FBUserSettingsViewResources.bundle/images/loginBackgroundIPhonePortrait@2x.jpg
  112. 27  src/FBUtility.h
  113. 153  src/FBUtility.m
  114. 2  src/FBViewController+Internal.h
  115. 7  src/FBViewController.h
  116. 47  src/FBViewController.m
  117. 110  src/FBWebDialogs.h
  118. 212  src/FBWebDialogs.m
  119. 12  src/Facebook.m
  120. 13  src/FacebookSDK.h
  121. BIN  src/FacebookSDKResources.bundle/Contents/Resources/en.lproj/Localizable.strings
  122. BIN  src/FacebookSDKResources.bundle/Contents/Resources/he.lproj/Localizable.strings
  123. BIN  src/FacebookSDKResources.bundle/FBProfilePictureView/images/fb_blank_profile_portrait.png
  124. BIN  src/FacebookSDKResources.bundle/FBProfilePictureView/images/fb_blank_profile_square.png
  125. 59  src/NSError+FBError.h
  126. 71  src/NSError+FBError.m
  127. 112  src/facebook-ios-sdk.xcodeproj/project.pbxproj
  128. 37  src/facebook-ios-sdk.xcodeproj/xcshareddata/xcschemes/facebook-ios-sdk-tests.xcscheme
  129. 38  src/facebook-ios-sdk.xcodeproj/xcshareddata/xcschemes/facebook-ios-sdk.xcscheme
  130. 22  src/tests/FBAccessTokenDataTests.h
  131. 358  src/tests/FBAccessTokenDataTests.m
  132. 6  src/tests/FBCommonRequestTests.m
  133. 5  src/tests/FBGraphObjectTests.m
  134. 20  src/tests/FBRequestConnectionTests.m
  135. 1  src/tests/FBSessionTests.h
  136. 76  src/tests/FBSessionTests.m
  137. 3  src/tests/FBTestSessionTests.m
  138. 1  src/tests/FBTests.h
  139. 18  src/tests/FacebookSDKTests.xcconfig
5  .arcconfig
... ...
@@ -1,5 +0,0 @@
1  
-{
2  
-  "project_id" : "facebook-ios-sdk",
3  
-  "conduit_uri" : "https://phabricator.fb.com/api/",
4  
-  "copyright_holder" : "Facebook"
5  
-}
3  .gitignore
@@ -17,3 +17,6 @@ test/UnitTest/build/
17 17
 project.xcworkspace
18 18
 xcuserdata
19 19
 .arc
  20
+.arcconfig
  21
+.internal/
  22
+TestAppIdAndSecret.xcconfig
10  samples/BooleanOGSample/BooleanOGSample.xcodeproj/project.pbxproj
@@ -359,7 +359,10 @@
359 359
 				GCC_PREFIX_HEADER = "BooleanOGSample/BooleanOGSample-Prefix.pch";
360 360
 				INFOPLIST_FILE = "BooleanOGSample/BooleanOGSample-Info.plist";
361 361
 				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
362  
-				OTHER_LDFLAGS = "-lsqlite3.0";
  362
+				OTHER_LDFLAGS = (
  363
+					"-lsqlite3.0",
  364
+					"-ObjC",
  365
+				);
363 366
 				PRODUCT_NAME = "$(TARGET_NAME)";
364 367
 				WRAPPER_EXTENSION = app;
365 368
 			};
@@ -376,7 +379,10 @@
376 379
 				GCC_PREFIX_HEADER = "BooleanOGSample/BooleanOGSample-Prefix.pch";
377 380
 				INFOPLIST_FILE = "BooleanOGSample/BooleanOGSample-Info.plist";
378 381
 				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
379  
-				OTHER_LDFLAGS = "-lsqlite3.0";
  382
+				OTHER_LDFLAGS = (
  383
+					"-lsqlite3.0",
  384
+					"-ObjC",
  385
+				);
380 386
 				PRODUCT_NAME = "$(TARGET_NAME)";
381 387
 				WRAPPER_EXTENSION = app;
382 388
 			};
54  samples/BooleanOGSample/BooleanOGSample/BOGFirstViewController.m
@@ -151,9 +151,9 @@ - (void)postAction:(NSString *)actionPath
151 151
         
152 152
         // if we don't have permission to post, let's first address that
153 153
         if ([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound) {
154  
-            [FBSession.activeSession reauthorizeWithPublishPermissions:[NSArray arrayWithObject:@"publish_actions"]
155  
-                                                     defaultAudience:FBSessionDefaultAudienceFriends
156  
-                                                   completionHandler:^(FBSession *session, NSError *error) {
  154
+            [FBSession.activeSession requestNewPublishPermissions:@[@"publish_actions"]
  155
+                                                  defaultAudience:FBSessionDefaultAudienceFriends
  156
+                                                completionHandler:^(FBSession *session, NSError *error) {
157 157
                                                        if (!error) {
158 158
                                                            // re-call assuming we now have the permission
159 159
                                                            [self postAction:actionPath
@@ -186,43 +186,27 @@ - (void)postAction:(NSString *)actionPath
186 186
                                                  // a more complex application may want to store or perform addtional actions
187 187
                                                  // with the id that represents the just-posted action
188 188
                                              } else {
189  
-                                                 // get the basic error message
190  
-                                                 NSString *message = error.localizedDescription;
191  
-                                                 
192  
-                                                 // see if we can improve on it with an error message from the server
193  
-                                                 id json = [error.userInfo objectForKey:FBErrorParsedJSONResponseKey];
194  
-                                                 id facebookError = nil;
195  
-                                                 NSDecimalNumber *code = nil;
196  
-                                                 if ([json isKindOfClass:[NSDictionary class]] &&
197  
-                                                     (json = [json objectForKey:@"body"]) &&
198  
-                                                     [json isKindOfClass:[NSDictionary class]] &&
199  
-                                                     (facebookError = [json objectForKey:@"error"]) &&
200  
-                                                     [facebookError isKindOfClass:[NSDictionary class]] &&
201  
-                                                     (json = [facebookError objectForKey:@"message"])) {
202  
-                                                     message = [json description];
203  
-                                                     code = [facebookError objectForKey:@"code"];
204  
-                                                 }
205  
-                                                 
206  
-                                                 if ([code intValue] == 200 && tryReauthIfNeeded) {
  189
+                                                 // See the Scrumptious sample for further error handling tips.
  190
+                                                 // In this sample, we will simply retry permission errors.
  191
+                                                 if (error.fberrorCategory == FBErrorCategoryPermissions && tryReauthIfNeeded) {
207 192
                                                      // We got an error indicating a permission is missing. This could happen if the user has gone into
208 193
                                                      // their Facebook settings and explictly removed a permission they had previously granted. Try reauthorizing
209 194
                                                      // again to get the permission back.
210  
-                                                     [FBSession.activeSession reauthorizeWithPermissions:[NSArray arrayWithObject:@"publish_actions"]
211  
-                                                                                                behavior:FBSessionLoginBehaviorWithFallbackToWebView
212  
-                                                                                       completionHandler:^(FBSession *session, NSError *error) {
213  
-                                                                                           if (!error) {
214  
-                                                                                               // re-call assuming we now have the permission
215  
-                                                                                               [self postAction:actionPath
216  
-                                                                                                    leftOperand:left
217  
-                                                                                                   rightOperand:right
218  
-                                                                                                         result:result
219  
-                                                                                              tryReauthIfNeeded:NO];
220  
-                                                                                           }
221  
-                                                                                       }];
  195
+                                                     [FBSession.activeSession requestNewPublishPermissions:@[@"publish_actions"]
  196
+                                                                                           defaultAudience:FBSessionDefaultAudienceFriends
  197
+                                                                                         completionHandler:^(FBSession *session, NSError *error) {
  198
+                                                                                             if (!error) {
  199
+                                                                                                 // re-call assuming we now have the permission
  200
+                                                                                                 [self postAction:actionPath
  201
+                                                                                                      leftOperand:left
  202
+                                                                                                     rightOperand:right
  203
+                                                                                                           result:result
  204
+                                                                                                tryReauthIfNeeded:NO];
  205
+                                                                                             }
  206
+                                                                                         }];
222 207
                                                  } else {
223  
-                                                     // display the message that we have
224 208
                                                      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"OG Post Failed"
225  
-                                                                                                     message:message
  209
+                                                                                                     message:error.fberrorUserMessage ?: @"Unknown error"
226 210
                                                                                                     delegate:nil
227 211
                                                                                            cancelButtonTitle:@"OK"
228 212
                                                                                            otherButtonTitles:nil];
4  samples/BooleanOGSample/BooleanOGSample/BOGSecondViewController.h
@@ -21,4 +21,8 @@
21 21
 
22 22
 @property (strong, nonatomic) IBOutlet UITextView *activityTextView;
23 23
 
  24
+@property (unsafe_unretained, nonatomic) IBOutlet UIButton *inviteButton;
  25
+
  26
+- (IBAction)clickInviteFriends:(id)sender;
  27
+
24 28
 @end
12  samples/BooleanOGSample/BooleanOGSample/BOGSecondViewController.m
@@ -47,7 +47,10 @@ - (void)viewDidAppear:(BOOL)animated {
47 47
     
48 48
     if (FBSession.activeSession.isOpen) {
49 49
         [self loadData];
  50
+        self.inviteButton.enabled = YES;
50 51
     } else {
  52
+        self.inviteButton.enabled = NO;
  53
+        
51 54
         // display the message that we have
52 55
         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Social Features Disabled"
53 56
                                                         message:@"There is no open session with Facebook. Use the Facebook Settings "
@@ -62,6 +65,7 @@ - (void)viewDidAppear:(BOOL)animated {
62 65
 - (void)viewDidUnload {
63 66
     self.activityTextView = nil;
64 67
 
  68
+    [self setInviteButton:nil];
65 69
     [super viewDidUnload];
66 70
 }
67 71
 
@@ -178,4 +182,12 @@ - (void)updateActivityForID:(NSString *)fbid {
178 182
     [connection start];    
179 183
 }
180 184
 
  185
+- (IBAction)clickInviteFriends:(id)sender {
  186
+    [FBWebDialogs presentRequestsDialogModallyWithSession:nil
  187
+                                                  message:@"Please come rock the logic with me!"
  188
+                                                    title:@"Invite a Friend"
  189
+                                               parameters:nil
  190
+                                                  handler:nil];
  191
+}
  192
+
181 193
 @end
2  samples/BooleanOGSample/BooleanOGSample/BooleanOGSample-Info.plist
@@ -62,8 +62,6 @@
62 62
 	<key>UISupportedInterfaceOrientations</key>
63 63
 	<array>
64 64
 		<string>UIInterfaceOrientationPortrait</string>
65  
-		<string>UIInterfaceOrientationLandscapeLeft</string>
66  
-		<string>UIInterfaceOrientationLandscapeRight</string>
67 65
 	</array>
68 66
 	<key>UISupportedInterfaceOrientations~ipad</key>
69 67
 	<array>
171  samples/BooleanOGSample/BooleanOGSample/en.lproj/BOGSecondViewController_iPad.xib
... ...
@@ -1,17 +1,18 @@
1 1
 <?xml version="1.0" encoding="UTF-8"?>
2 2
 <archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00">
3 3
 	<data>
4  
-		<int key="IBDocument.SystemTarget">1280</int>
5  
-		<string key="IBDocument.SystemVersion">11D50d</string>
6  
-		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
7  
-		<string key="IBDocument.AppKitVersion">1138.32</string>
8  
-		<string key="IBDocument.HIToolboxVersion">568.00</string>
  4
+		<int key="IBDocument.SystemTarget">1536</int>
  5
+		<string key="IBDocument.SystemVersion">11G63b</string>
  6
+		<string key="IBDocument.InterfaceBuilderVersion">2840</string>
  7
+		<string key="IBDocument.AppKitVersion">1138.51</string>
  8
+		<string key="IBDocument.HIToolboxVersion">569.00</string>
9 9
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
10 10
 			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
11  
-			<string key="NS.object.0">933</string>
  11
+			<string key="NS.object.0">1926</string>
12 12
 		</object>
13 13
 		<array key="IBDocument.IntegratedClassDependencies">
14 14
 			<string>IBProxyObject</string>
  15
+			<string>IBUIButton</string>
15 16
 			<string>IBUILabel</string>
16 17
 			<string>IBUINavigationBar</string>
17 18
 			<string>IBUINavigationItem</string>
@@ -44,6 +45,7 @@
44 45
 						<int key="NSvFlags">290</int>
45 46
 						<string key="NSFrameSize">{768, 44}</string>
46 47
 						<reference key="NSSuperview" ref="766721923"/>
  48
+						<reference key="NSWindow"/>
47 49
 						<reference key="NSNextKeyView" ref="247861754"/>
48 50
 						<bool key="IBUIOpaque">NO</bool>
49 51
 						<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
@@ -61,6 +63,7 @@
61 63
 						<int key="NSvFlags">292</int>
62 64
 						<string key="NSFrame">{{20, 44}, {748, 24}}</string>
63 65
 						<reference key="NSSuperview" ref="766721923"/>
  66
+						<reference key="NSWindow"/>
64 67
 						<reference key="NSNextKeyView" ref="85475434"/>
65 68
 						<string key="NSReuseIdentifierKey">_NS:328</string>
66 69
 						<bool key="IBUIOpaque">NO</bool>
@@ -72,6 +75,7 @@
72 75
 						<object class="NSColor" key="IBUITextColor" id="997973704">
73 76
 							<int key="NSColorSpace">1</int>
74 77
 							<bytes key="NSRGB">MCAwIDAAA</bytes>
  78
+							<string key="IBUIColorCocoaTouchKeyPath">darkTextColor</string>
75 79
 						</object>
76 80
 						<nil key="IBUIHighlightedColor"/>
77 81
 						<int key="IBUIBaselineAdjustment">1</int>
@@ -91,9 +95,10 @@
91 95
 						<int key="NSvFlags">274</int>
92 96
 						<string key="NSFrame">{{20, 76}, {728, 420}}</string>
93 97
 						<reference key="NSSuperview" ref="766721923"/>
  98
+						<reference key="NSWindow"/>
94 99
 						<reference key="NSNextKeyView" ref="86295492"/>
95 100
 						<string key="NSReuseIdentifierKey">_NS:408</string>
96  
-						<object class="NSColor" key="IBUIBackgroundColor">
  101
+						<object class="NSColor" key="IBUIBackgroundColor" id="969353036">
97 102
 							<int key="NSColorSpace">3</int>
98 103
 							<bytes key="NSWhite">MQA</bytes>
99 104
 						</object>
@@ -112,6 +117,7 @@
112 117
 						<int key="NSvFlags">292</int>
113 118
 						<string key="NSFrame">{{20, 504}, {728, 21}}</string>
114 119
 						<reference key="NSSuperview" ref="766721923"/>
  120
+						<reference key="NSWindow"/>
115 121
 						<string key="NSReuseIdentifierKey">_NS:345</string>
116 122
 						<bool key="IBUIOpaque">NO</bool>
117 123
 						<bool key="IBUIClipsSubviews">YES</bool>
@@ -129,8 +135,9 @@
129 135
 					<object class="IBUITextView" id="715347517">
130 136
 						<reference key="NSNextResponder" ref="766721923"/>
131 137
 						<int key="NSvFlags">292</int>
132  
-						<string key="NSFrame">{{20, 533}, {728, 446}}</string>
  138
+						<string key="NSFrame">{{20, 533}, {728, 335}}</string>
133 139
 						<reference key="NSSuperview" ref="766721923"/>
  140
+						<reference key="NSWindow"/>
134 141
 						<string key="NSReuseIdentifierKey">_NS:640</string>
135 142
 						<object class="NSColor" key="IBUIBackgroundColor">
136 143
 							<int key="NSColorSpace">1</int>
@@ -156,9 +163,42 @@
156 163
 							<int key="NSfFlags">16</int>
157 164
 						</object>
158 165
 					</object>
  166
+					<object class="IBUIButton" id="430374051">
  167
+						<reference key="NSNextResponder" ref="766721923"/>
  168
+						<int key="NSvFlags">292</int>
  169
+						<string key="NSFrame">{{20, 888}, {728, 44}}</string>
  170
+						<reference key="NSSuperview" ref="766721923"/>
  171
+						<reference key="NSWindow"/>
  172
+						<string key="NSReuseIdentifierKey">_NS:9</string>
  173
+						<bool key="IBUIOpaque">NO</bool>
  174
+						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
  175
+						<int key="IBUIContentHorizontalAlignment">0</int>
  176
+						<int key="IBUIContentVerticalAlignment">0</int>
  177
+						<int key="IBUIButtonType">1</int>
  178
+						<string key="IBUINormalTitle">Invite Friends</string>
  179
+						<reference key="IBUIHighlightedTitleColor" ref="969353036"/>
  180
+						<object class="NSColor" key="IBUINormalTitleColor">
  181
+							<int key="NSColorSpace">1</int>
  182
+							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
  183
+						</object>
  184
+						<object class="NSColor" key="IBUINormalTitleShadowColor">
  185
+							<int key="NSColorSpace">3</int>
  186
+							<bytes key="NSWhite">MC41AA</bytes>
  187
+						</object>
  188
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
  189
+							<int key="type">2</int>
  190
+							<double key="pointSize">15</double>
  191
+						</object>
  192
+						<object class="NSFont" key="IBUIFont">
  193
+							<string key="NSName">Helvetica-Bold</string>
  194
+							<double key="NSSize">15</double>
  195
+							<int key="NSfFlags">16</int>
  196
+						</object>
  197
+					</object>
159 198
 				</array>
160 199
 				<string key="NSFrame">{{0, 20}, {768, 1004}}</string>
161 200
 				<reference key="NSSuperview"/>
  201
+				<reference key="NSWindow"/>
162 202
 				<reference key="NSNextKeyView" ref="679231111"/>
163 203
 				<object class="NSColor" key="IBUIBackgroundColor">
164 204
 					<int key="NSColorSpace">3</int>
@@ -199,6 +239,23 @@
199 239
 					</object>
200 240
 					<int key="connectionID">17</int>
201 241
 				</object>
  242
+				<object class="IBConnectionRecord">
  243
+					<object class="IBCocoaTouchOutletConnection" key="connection">
  244
+						<string key="label">inviteButton</string>
  245
+						<reference key="source" ref="841351856"/>
  246
+						<reference key="destination" ref="430374051"/>
  247
+					</object>
  248
+					<int key="connectionID">19</int>
  249
+				</object>
  250
+				<object class="IBConnectionRecord">
  251
+					<object class="IBCocoaTouchEventConnection" key="connection">
  252
+						<string key="label">clickInviteFriends:</string>
  253
+						<reference key="source" ref="430374051"/>
  254
+						<reference key="destination" ref="841351856"/>
  255
+						<int key="IBEventType">7</int>
  256
+					</object>
  257
+					<int key="connectionID">20</int>
  258
+				</object>
202 259
 			</array>
203 260
 			<object class="IBMutableOrderedSet" key="objectRecords">
204 261
 				<array key="orderedObjects">
@@ -227,6 +284,7 @@
227 284
 							<reference ref="247861754"/>
228 285
 							<reference ref="86295492"/>
229 286
 							<reference ref="85475434"/>
  287
+							<reference ref="430374051"/>
230 288
 							<reference ref="715347517"/>
231 289
 						</array>
232 290
 						<reference key="parent" ref="0"/>
@@ -264,6 +322,11 @@
264 322
 						<reference key="object" ref="715347517"/>
265 323
 						<reference key="parent" ref="766721923"/>
266 324
 					</object>
  325
+					<object class="IBObjectRecord">
  326
+						<int key="objectID">18</int>
  327
+						<reference key="object" ref="430374051"/>
  328
+						<reference key="parent" ref="766721923"/>
  329
+					</object>
267 330
 				</array>
268 331
 			</object>
269 332
 			<dictionary class="NSMutableDictionary" key="flattenedProperties">
@@ -274,6 +337,7 @@
274 337
 				<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
275 338
 				<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
276 339
 				<string key="15.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  340
+				<string key="18.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
277 341
 				<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
278 342
 				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
279 343
 				<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
@@ -283,13 +347,98 @@
283 347
 			<nil key="activeLocalization"/>
284 348
 			<dictionary class="NSMutableDictionary" key="localizations"/>
285 349
 			<nil key="sourceID"/>
286  
-			<int key="maxID">17</int>
  350
+			<int key="maxID">20</int>
  351
+		</object>
  352
+		<object class="IBClassDescriber" key="IBDocument.Classes">
  353
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
  354
+				<object class="IBPartialClassDescription">
  355
+					<string key="className">BOGSecondViewController</string>
  356
+					<string key="superclassName">FBFriendPickerViewController</string>
  357
+					<object class="NSMutableDictionary" key="actions">
  358
+						<string key="NS.key.0">clickInviteFriends:</string>
  359
+						<string key="NS.object.0">id</string>
  360
+					</object>
  361
+					<object class="NSMutableDictionary" key="actionInfosByName">
  362
+						<string key="NS.key.0">clickInviteFriends:</string>
  363
+						<object class="IBActionInfo" key="NS.object.0">
  364
+							<string key="name">clickInviteFriends:</string>
  365
+							<string key="candidateClassName">id</string>
  366
+						</object>
  367
+					</object>
  368
+					<dictionary class="NSMutableDictionary" key="outlets">
  369
+						<string key="activityTextView">UITextView</string>
  370
+						<string key="inviteButton">UIButton</string>
  371
+					</dictionary>
  372
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
  373
+						<object class="IBToOneOutletInfo" key="activityTextView">
  374
+							<string key="name">activityTextView</string>
  375
+							<string key="candidateClassName">UITextView</string>
  376
+						</object>
  377
+						<object class="IBToOneOutletInfo" key="inviteButton">
  378
+							<string key="name">inviteButton</string>
  379
+							<string key="candidateClassName">UIButton</string>
  380
+						</object>
  381
+					</dictionary>
  382
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
  383
+						<string key="majorKey">IBProjectSource</string>
  384
+						<string key="minorKey">./Classes/BOGSecondViewController.h</string>
  385
+					</object>
  386
+				</object>
  387
+				<object class="IBPartialClassDescription">
  388
+					<string key="className">FBFriendPickerViewController</string>
  389
+					<string key="superclassName">FBViewController</string>
  390
+					<dictionary class="NSMutableDictionary" key="outlets">
  391
+						<string key="spinner">UIActivityIndicatorView</string>
  392
+						<string key="tableView">UITableView</string>
  393
+					</dictionary>
  394
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
  395
+						<object class="IBToOneOutletInfo" key="spinner">
  396
+							<string key="name">spinner</string>
  397
+							<string key="candidateClassName">UIActivityIndicatorView</string>
  398
+						</object>
  399
+						<object class="IBToOneOutletInfo" key="tableView">
  400
+							<string key="name">tableView</string>
  401
+							<string key="candidateClassName">UITableView</string>
  402
+						</object>
  403
+					</dictionary>
  404
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
  405
+						<string key="majorKey">IBProjectSource</string>
  406
+						<string key="minorKey">./Classes/FBFriendPickerViewController.h</string>
  407
+					</object>
  408
+				</object>
  409
+				<object class="IBPartialClassDescription">
  410
+					<string key="className">FBViewController</string>
  411
+					<string key="superclassName">UIViewController</string>
  412
+					<dictionary class="NSMutableDictionary" key="outlets">
  413
+						<string key="cancelButton">UIBarButtonItem</string>
  414
+						<string key="delegate">id</string>
  415
+						<string key="doneButton">UIBarButtonItem</string>
  416
+					</dictionary>
  417
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
  418
+						<object class="IBToOneOutletInfo" key="cancelButton">
  419
+							<string key="name">cancelButton</string>
  420
+							<string key="candidateClassName">UIBarButtonItem</string>
  421
+						</object>
  422
+						<object class="IBToOneOutletInfo" key="delegate">
  423
+							<string key="name">delegate</string>
  424
+							<string key="candidateClassName">id</string>
  425
+						</object>
  426
+						<object class="IBToOneOutletInfo" key="doneButton">
  427
+							<string key="name">doneButton</string>
  428
+							<string key="candidateClassName">UIBarButtonItem</string>
  429
+						</object>
  430
+					</dictionary>
  431
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
  432
+						<string key="majorKey">IBProjectSource</string>
  433
+						<string key="minorKey">./Classes/FBViewController.h</string>
  434
+					</object>
  435
+				</object>
  436
+			</array>
287 437
 		</object>
288  
-		<object class="IBClassDescriber" key="IBDocument.Classes"/>
289 438
 		<int key="IBDocument.localizationMode">0</int>
290 439
 		<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
291 440
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
292 441
 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
293  
-		<string key="IBCocoaTouchPluginVersion">933</string>
  442
+		<string key="IBCocoaTouchPluginVersion">1926</string>
294 443
 	</data>
295 444
 </archive>
175  samples/BooleanOGSample/BooleanOGSample/en.lproj/BOGSecondViewController_iPhone.xib
... ...
@@ -1,21 +1,22 @@
1 1
 <?xml version="1.0" encoding="UTF-8"?>
2 2
 <archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
3 3
 	<data>
4  
-		<int key="IBDocument.SystemTarget">1280</int>
5  
-		<string key="IBDocument.SystemVersion">11D50d</string>
6  
-		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
7  
-		<string key="IBDocument.AppKitVersion">1138.32</string>
8  
-		<string key="IBDocument.HIToolboxVersion">568.00</string>
  4
+		<int key="IBDocument.SystemTarget">1536</int>
  5
+		<string key="IBDocument.SystemVersion">11G63b</string>
  6
+		<string key="IBDocument.InterfaceBuilderVersion">2840</string>
  7
+		<string key="IBDocument.AppKitVersion">1138.51</string>
  8
+		<string key="IBDocument.HIToolboxVersion">569.00</string>
9 9
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
10 10
 			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
11  
-			<string key="NS.object.0">933</string>
  11
+			<string key="NS.object.0">1926</string>
12 12
 		</object>
13 13
 		<array key="IBDocument.IntegratedClassDependencies">
14  
-			<string>IBUITextView</string>
  14
+			<string>IBProxyObject</string>
  15
+			<string>IBUIButton</string>
  16
+			<string>IBUILabel</string>
15 17
 			<string>IBUITableView</string>
  18
+			<string>IBUITextView</string>
16 19
 			<string>IBUIView</string>
17  
-			<string>IBUILabel</string>
18  
-			<string>IBProxyObject</string>
19 20
 		</array>
20 21
 		<array key="IBDocument.PluginDependencies">
21 22
 			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
@@ -42,6 +43,7 @@
42 43
 						<int key="NSvFlags">292</int>
43 44
 						<string key="NSFrame">{{20, 2}, {280, 21}}</string>
44 45
 						<reference key="NSSuperview" ref="191373211"/>
  46
+						<reference key="NSWindow"/>
45 47
 						<reference key="NSNextKeyView" ref="799478532"/>
46 48
 						<string key="NSReuseIdentifierKey">_NS:328</string>
47 49
 						<bool key="IBUIOpaque">NO</bool>
@@ -53,6 +55,7 @@
53 55
 						<object class="NSColor" key="IBUITextColor" id="316081567">
54 56
 							<int key="NSColorSpace">1</int>
55 57
 							<bytes key="NSRGB">MCAwIDAAA</bytes>
  58
+							<string key="IBUIColorCocoaTouchKeyPath">darkTextColor</string>
56 59
 						</object>
57 60
 						<nil key="IBUIHighlightedColor"/>
58 61
 						<int key="IBUIBaselineAdjustment">1</int>
@@ -72,6 +75,7 @@
72 75
 						<int key="NSvFlags">274</int>
73 76
 						<string key="NSFrame">{{20, 31}, {280, 179}}</string>
74 77
 						<reference key="NSSuperview" ref="191373211"/>
  78
+						<reference key="NSWindow"/>
75 79
 						<reference key="NSNextKeyView" ref="323575925"/>
76 80
 						<string key="NSReuseIdentifierKey">_NS:408</string>
77 81
 						<object class="NSColor" key="IBUIBackgroundColor" id="151074266">
@@ -93,6 +97,7 @@
93 97
 						<int key="NSvFlags">292</int>
94 98
 						<string key="NSFrame">{{20, 218}, {280, 23}}</string>
95 99
 						<reference key="NSSuperview" ref="191373211"/>
  100
+						<reference key="NSWindow"/>
96 101
 						<reference key="NSNextKeyView" ref="872626249"/>
97 102
 						<string key="NSReuseIdentifierKey">_NS:345</string>
98 103
 						<bool key="IBUIOpaque">NO</bool>
@@ -111,9 +116,9 @@
111 116
 					<object class="IBUITextView" id="872626249">
112 117
 						<reference key="NSNextResponder" ref="191373211"/>
113 118
 						<int key="NSvFlags">292</int>
114  
-						<string key="NSFrame">{{20, 249}, {280, 147}}</string>
  119
+						<string key="NSFrame">{{20, 249}, {280, 91}}</string>
115 120
 						<reference key="NSSuperview" ref="191373211"/>
116  
-						<reference key="NSNextKeyView"/>
  121
+						<reference key="NSWindow"/>
117 122
 						<string key="NSReuseIdentifierKey">_NS:639</string>
118 123
 						<object class="NSColor" key="IBUIBackgroundColor">
119 124
 							<int key="NSColorSpace">1</int>
@@ -138,9 +143,42 @@
138 143
 							<int key="NSfFlags">16</int>
139 144
 						</object>
140 145
 					</object>
  146
+					<object class="IBUIButton" id="47680743">
  147
+						<reference key="NSNextResponder" ref="191373211"/>
  148
+						<int key="NSvFlags">292</int>
  149
+						<string key="NSFrame">{{20, 348}, {280, 44}}</string>
  150
+						<reference key="NSSuperview" ref="191373211"/>
  151
+						<reference key="NSWindow"/>
  152
+						<string key="NSReuseIdentifierKey">_NS:9</string>
  153
+						<bool key="IBUIOpaque">NO</bool>
  154
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
  155
+						<int key="IBUIContentHorizontalAlignment">0</int>
  156
+						<int key="IBUIContentVerticalAlignment">0</int>
  157
+						<int key="IBUIButtonType">1</int>
  158
+						<string key="IBUINormalTitle">Invite Friends</string>
  159
+						<reference key="IBUIHighlightedTitleColor" ref="151074266"/>
  160
+						<object class="NSColor" key="IBUINormalTitleColor">
  161
+							<int key="NSColorSpace">1</int>
  162
+							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
  163
+						</object>
  164
+						<object class="NSColor" key="IBUINormalTitleShadowColor">
  165
+							<int key="NSColorSpace">3</int>
  166
+							<bytes key="NSWhite">MC41AA</bytes>
  167
+						</object>
  168
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
  169
+							<int key="type">2</int>
  170
+							<double key="pointSize">15</double>
  171
+						</object>
  172
+						<object class="NSFont" key="IBUIFont">
  173
+							<string key="NSName">Helvetica-Bold</string>
  174
+							<double key="NSSize">15</double>
  175
+							<int key="NSfFlags">16</int>
  176
+						</object>
  177
+					</object>
141 178
 				</array>
142 179
 				<string key="NSFrame">{{0, 20}, {320, 411}}</string>
143 180
 				<reference key="NSSuperview"/>
  181
+				<reference key="NSWindow"/>
144 182
 				<reference key="NSNextKeyView" ref="957538452"/>
145 183
 				<reference key="IBUIBackgroundColor" ref="151074266"/>
146 184
 				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
@@ -174,6 +212,23 @@
174 212
 					</object>
175 213
 					<int key="connectionID">19</int>
176 214
 				</object>
  215
+				<object class="IBConnectionRecord">
  216
+					<object class="IBCocoaTouchOutletConnection" key="connection">
  217
+						<string key="label">inviteButton</string>
  218
+						<reference key="source" ref="372490531"/>
  219
+						<reference key="destination" ref="47680743"/>
  220
+					</object>
  221
+					<int key="connectionID">22</int>
  222
+				</object>
  223
+				<object class="IBConnectionRecord">
  224
+					<object class="IBCocoaTouchEventConnection" key="connection">
  225
+						<string key="label">clickInviteFriends:</string>
  226
+						<reference key="source" ref="47680743"/>
  227
+						<reference key="destination" ref="372490531"/>
  228
+						<int key="IBEventType">7</int>
  229
+					</object>
  230
+					<int key="connectionID">21</int>
  231
+				</object>
177 232
 			</array>
178 233
 			<object class="IBMutableOrderedSet" key="objectRecords">
179 234
 				<array key="orderedObjects">
@@ -191,6 +246,7 @@
191 246
 							<reference ref="799478532"/>
192 247
 							<reference ref="323575925"/>
193 248
 							<reference ref="872626249"/>
  249
+							<reference ref="47680743"/>
194 250
 						</array>
195 251
 						<reference key="parent" ref="0"/>
196 252
 					</object>
@@ -225,6 +281,11 @@
225 281
 						<reference key="object" ref="872626249"/>
226 282
 						<reference key="parent" ref="191373211"/>
227 283
 					</object>
  284
+					<object class="IBObjectRecord">
  285
+						<int key="objectID">20</int>
  286
+						<reference key="object" ref="47680743"/>
  287
+						<reference key="parent" ref="191373211"/>
  288
+					</object>
228 289
 				</array>
229 290
 			</object>
230 291
 			<dictionary class="NSMutableDictionary" key="flattenedProperties">
@@ -237,18 +298,104 @@
237 298
 				<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
238 299
 				<string key="15.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
239 300
 				<string key="18.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  301
+				<string key="20.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
240 302
 			</dictionary>
241 303
 			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
242 304
 			<nil key="activeLocalization"/>
243 305
 			<dictionary class="NSMutableDictionary" key="localizations"/>
244 306
 			<nil key="sourceID"/>
245  
-			<int key="maxID">19</int>
  307
+			<int key="maxID">22</int>
  308
+		</object>
  309
+		<object class="IBClassDescriber" key="IBDocument.Classes">
  310
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
  311
+				<object class="IBPartialClassDescription">
  312
+					<string key="className">BOGSecondViewController</string>
  313
+					<string key="superclassName">FBFriendPickerViewController</string>
  314
+					<object class="NSMutableDictionary" key="actions">
  315
+						<string key="NS.key.0">clickInviteFriends:</string>
  316
+						<string key="NS.object.0">id</string>
  317
+					</object>
  318
+					<object class="NSMutableDictionary" key="actionInfosByName">
  319
+						<string key="NS.key.0">clickInviteFriends:</string>
  320
+						<object class="IBActionInfo" key="NS.object.0">
  321
+							<string key="name">clickInviteFriends:</string>
  322
+							<string key="candidateClassName">id</string>
  323
+						</object>
  324
+					</object>
  325
+					<dictionary class="NSMutableDictionary" key="outlets">
  326
+						<string key="activityTextView">UITextView</string>
  327
+						<string key="inviteButton">UIButton</string>
  328
+					</dictionary>
  329
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
  330
+						<object class="IBToOneOutletInfo" key="activityTextView">
  331
+							<string key="name">activityTextView</string>
  332
+							<string key="candidateClassName">UITextView</string>
  333
+						</object>
  334
+						<object class="IBToOneOutletInfo" key="inviteButton">
  335
+							<string key="name">inviteButton</string>
  336
+							<string key="candidateClassName">UIButton</string>
  337
+						</object>
  338
+					</dictionary>
  339
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
  340
+						<string key="majorKey">IBProjectSource</string>
  341
+						<string key="minorKey">./Classes/BOGSecondViewController.h</string>
  342
+					</object>
  343
+				</object>
  344
+				<object class="IBPartialClassDescription">
  345
+					<string key="className">FBFriendPickerViewController</string>
  346
+					<string key="superclassName">FBViewController</string>
  347
+					<dictionary class="NSMutableDictionary" key="outlets">
  348
+						<string key="spinner">UIActivityIndicatorView</string>
  349
+						<string key="tableView">UITableView</string>
  350
+					</dictionary>
  351
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
  352
+						<object class="IBToOneOutletInfo" key="spinner">
  353
+							<string key="name">spinner</string>
  354
+							<string key="candidateClassName">UIActivityIndicatorView</string>
  355
+						</object>
  356
+						<object class="IBToOneOutletInfo" key="tableView">
  357
+							<string key="name">tableView</string>
  358
+							<string key="candidateClassName">UITableView</string>
  359
+						</object>
  360
+					</dictionary>
  361
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
  362
+						<string key="majorKey">IBProjectSource</string>
  363
+						<string key="minorKey">./Classes/FBFriendPickerViewController.h</string>
  364
+					</object>
  365
+				</object>
  366
+				<object class="IBPartialClassDescription">
  367
+					<string key="className">FBViewController</string>
  368
+					<string key="superclassName">UIViewController</string>
  369
+					<dictionary class="NSMutableDictionary" key="outlets">
  370
+						<string key="cancelButton">UIBarButtonItem</string>
  371
+						<string key="delegate">id</string>
  372
+						<string key="doneButton">UIBarButtonItem</string>
  373
+					</dictionary>
  374
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
  375
+						<object class="IBToOneOutletInfo" key="cancelButton">
  376
+							<string key="name">cancelButton</string>
  377
+							<string key="candidateClassName">UIBarButtonItem</string>
  378
+						</object>
  379
+						<object class="IBToOneOutletInfo" key="delegate">
  380
+							<string key="name">delegate</string>
  381
+							<string key="candidateClassName">id</string>
  382
+						</object>
  383
+						<object class="IBToOneOutletInfo" key="doneButton">
  384
+							<string key="name">doneButton</string>
  385
+							<string key="candidateClassName">UIBarButtonItem</string>
  386
+						</object>
  387
+					</dictionary>
  388
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
  389
+						<string key="majorKey">IBProjectSource</string>
  390
+						<string key="minorKey">./Classes/FBViewController.h</string>
  391
+					</object>
  392
+				</object>
  393
+			</array>
246 394
 		</object>
247  
-		<object class="IBClassDescriber" key="IBDocument.Classes"/>
248 395
 		<int key="IBDocument.localizationMode">0</int>
249 396
 		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
250 397
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
251 398
 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
252  
-		<string key="IBCocoaTouchPluginVersion">933</string>
  399
+		<string key="IBCocoaTouchPluginVersion">1926</string>
253 400
 	</data>
254 401
 </archive>
10  samples/FriendPickerSample/FriendPickerSample.xcodeproj/project.pbxproj
@@ -307,7 +307,10 @@
307 307
 				GCC_PREFIX_HEADER = "FriendPickerSample/FriendPickerSample-Prefix.pch";
308 308
 				INFOPLIST_FILE = "FriendPickerSample/FriendPickerSample-Info.plist";
309 309
 				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
310  
-				OTHER_LDFLAGS = "-lsqlite3.0";
  310
+				OTHER_LDFLAGS = (
  311
+				    "-lsqlite3.0",
  312
+				    "-ObjC",
  313
+				);
311 314
 				PRODUCT_NAME = "$(TARGET_NAME)";
312 315
 				WRAPPER_EXTENSION = app;
313 316
 			};
@@ -324,7 +327,10 @@
324 327
 				GCC_PREFIX_HEADER = "FriendPickerSample/FriendPickerSample-Prefix.pch";
325 328
 				INFOPLIST_FILE = "FriendPickerSample/FriendPickerSample-Info.plist";
326 329
 				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
327  
-				OTHER_LDFLAGS = "-lsqlite3.0";
  330
+				OTHER_LDFLAGS = (
  331
+				    "-lsqlite3.0",
  332
+				    "-ObjC",
  333
+				);
328 334
 				PRODUCT_NAME = "$(TARGET_NAME)";
329 335
 				WRAPPER_EXTENSION = app;
330 336
 			};
11  samples/FriendPickerSample/FriendPickerSample/FPAppDelegate.m
@@ -34,11 +34,10 @@ - (BOOL)application:(UIApplication *)application
34 34
 }
35 35
 
36 36
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
37  
-    // BUG:
38  
-    // Nib files require the type to have been loaded before they can do the
39  
-    // wireup successfully.  
  37
+    // If you have not added the -ObjC linker flag, you may need to uncomment the following line because
  38
+    // Nib files require the type to have been loaded before they can do the wireup successfully.
40 39
     // http://stackoverflow.com/questions/1725881/unknown-class-myclass-in-interface-builder-file-error-at-runtime
41  
-    [FBFriendPickerViewController class];
  40
+    // [FBFriendPickerViewController class];
42 41
 
43 42
     // Override point for customization after application launch.
44 43
     if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
@@ -60,6 +59,10 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
60 59
     return YES;
61 60
 }
62 61
 
  62
+- (NSUInteger)supportedInterfaceOrientations{
  63
+    return UIInterfaceOrientationMaskAllButUpsideDown;
  64
+}
  65
+
63 66
 // FBSample logic
64 67
 // It is important to close any FBSession object that is no longer useful
65 68
 - (void)applicationWillTerminate:(UIApplication *)application {
5  samples/FriendPickerSample/FriendPickerSample/FPViewController.m
@@ -115,6 +115,11 @@ - (void)fillTextBoxAndDismiss:(NSString *)text {
115 115
     [self dismissModalViewControllerAnimated:YES];
116 116
 }
117 117
 
  118
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation
  119
+{
  120
+    return YES;
  121
+}
  122
+
118 123
 #pragma mark -
119 124
 
120 125
 @end
60  samples/FriendPickerSample/FriendPickerSample/en.lproj/FPViewController_iPhone.xib
... ...
@@ -1,21 +1,21 @@
1 1
 <?xml version="1.0" encoding="UTF-8"?>
2 2
 <archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
3 3
 	<data>
4  
-		<int key="IBDocument.SystemTarget">1296</int>
5  
-		<string key="IBDocument.SystemVersion">11E53</string>
6  
-		<string key="IBDocument.InterfaceBuilderVersion">2182</string>
7  
-		<string key="IBDocument.AppKitVersion">1138.47</string>
  4
+		<int key="IBDocument.SystemTarget">1536</int>
  5
+		<string key="IBDocument.SystemVersion">11G63</string>
  6
+		<string key="IBDocument.InterfaceBuilderVersion">2844</string>
  7
+		<string key="IBDocument.AppKitVersion">1138.51</string>
8 8
 		<string key="IBDocument.HIToolboxVersion">569.00</string>
9 9
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
10 10
 			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
11  
-			<string key="NS.object.0">1181</string>
  11
+			<string key="NS.object.0">1930</string>
12 12
 		</object>
13 13
 		<array key="IBDocument.IntegratedClassDependencies">
14  
-			<string>IBUITextView</string>
  14
+			<string>IBProxyObject</string>
15 15
 			<string>IBUIButton</string>
16  
-			<string>IBUIView</string>
17 16
 			<string>IBUILabel</string>
18  
-			<string>IBProxyObject</string>
  17
+			<string>IBUITextView</string>
  18
+			<string>IBUIView</string>
19 19
 		</array>
20 20
 		<array key="IBDocument.PluginDependencies">
21 21
 			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
@@ -42,7 +42,6 @@
42 42
 						<int key="NSvFlags">292</int>
43 43
 						<string key="NSFrame">{{20, 130}, {280, 84}}</string>
44 44
 						<reference key="NSSuperview" ref="774585933"/>
45  
-						<reference key="NSWindow"/>
46 45
 						<string key="NSReuseIdentifierKey">_NS:639</string>
47 46
 						<object class="NSColor" key="IBUIBackgroundColor">
48 47
 							<int key="NSColorSpace">1</int>
@@ -72,7 +71,6 @@
72 71
 						<int key="NSvFlags">292</int>
73 72
 						<string key="NSFrame">{{86, 20}, {148, 37}}</string>
74 73
 						<reference key="NSSuperview" ref="774585933"/>
75  
-						<reference key="NSWindow"/>
76 74
 						<reference key="NSNextKeyView" ref="351918352"/>
77 75
 						<string key="NSReuseIdentifierKey">_NS:9</string>
78 76
 						<bool key="IBUIOpaque">NO</bool>
@@ -108,7 +106,6 @@
108 106
 						<int key="NSvFlags">292</int>
109 107
 						<string key="NSFrame">{{20, 101}, {118, 21}}</string>
110 108
 						<reference key="NSSuperview" ref="774585933"/>
111  
-						<reference key="NSWindow"/>
112 109
 						<reference key="NSNextKeyView" ref="148239609"/>
113 110
 						<string key="NSReuseIdentifierKey">_NS:9</string>
114 111
 						<bool key="IBUIOpaque">NO</bool>
@@ -120,6 +117,7 @@
120 117
 						<object class="NSColor" key="IBUITextColor">
121 118
 							<int key="NSColorSpace">1</int>
122 119
 							<bytes key="NSRGB">MCAwIDAAA</bytes>
  120
+							<string key="IBUIColorCocoaTouchKeyPath">darkTextColor</string>
123 121
 						</object>
124 122
 						<nil key="IBUIHighlightedColor"/>
125 123
 						<int key="IBUIBaselineAdjustment">0</int>
@@ -137,7 +135,6 @@
137 135
 				</array>
138 136
 				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
139 137
 				<reference key="NSSuperview"/>
140  
-				<reference key="NSWindow"/>
141 138
 				<reference key="NSNextKeyView" ref="180895893"/>
142 139
 				<object class="NSColor" key="IBUIBackgroundColor">
143 140
 					<int key="NSColorSpace">3</int>
@@ -242,48 +239,15 @@
242 239
 			<nil key="sourceID"/>
243 240
 			<int key="maxID">49</int>
244 241
 		</object>
245  
-		<object class="IBClassDescriber" key="IBDocument.Classes">
246  
-			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
247  
-				<object class="IBPartialClassDescription">
248  
-					<string key="className">FPViewController</string>
249  
-					<string key="superclassName">UIViewController</string>
250  
-					<object class="NSMutableDictionary" key="actions">
251  
-						<string key="NS.key.0">pickFriendsButtonClick:</string>
252  
-						<string key="NS.object.0">id</string>
253  
-					</object>
254  
-					<object class="NSMutableDictionary" key="actionInfosByName">
255  
-						<string key="NS.key.0">pickFriendsButtonClick:</string>
256  
-						<object class="IBActionInfo" key="NS.object.0">
257  
-							<string key="name">pickFriendsButtonClick:</string>
258  
-							<string key="candidateClassName">id</string>
259  
-						</object>
260  
-					</object>
261  
-					<object class="NSMutableDictionary" key="outlets">
262  
-						<string key="NS.key.0">selectedFriendsView</string>
263  
-						<string key="NS.object.0">UITextView</string>
264  
-					</object>
265  
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
266  
-						<string key="NS.key.0">selectedFriendsView</string>
267  
-						<object class="IBToOneOutletInfo" key="NS.object.0">
268  
-							<string key="name">selectedFriendsView</string>
269  
-							<string key="candidateClassName">UITextView</string>
270  
-						</object>
271  
-					</object>
272  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
273  
-						<string key="majorKey">IBProjectSource</string>
274  
-						<string key="minorKey">./Classes/FPViewController.h</string>
275  
-					</object>
276  
-				</object>