Skip to content
Browse files

[ios-sdk] Replace doc generation with appledoc.

Summary:
appledoc is an open-source documentation generator that generates docs
with a style similar to the Apple documentation and that can easily integrate
with Xcode.

Updated build_documentation.sh to use appledoc if installed, and error if not.

Updated build_distribution.sh to install docset in package/Library/Developer/Shared/...
so it will be installed into user's Xcode docs directory.

Test Plan:
- Blew away build directory and any Facebook dirs under ~/Library/Developer/Shared
- Ran build_distribution.sh
- Installed package
- Ran Xcode
- Verified "Facebook iOS SDK" is shown in Organizer

Reviewers: jacl, mmarucheck, gregschechte, ekoneil

Reviewed By: jacl

CC: caabernathy, platform-diffs@lists, yariv

Differential Revision: https://phabricator.fb.com/D490657

Task ID: 1113291
  • Loading branch information...
1 parent 07bd2cf commit 94906693299d24e4ed0462c3ff3d69255d8962e2 @clang13 clang13 committed Jun 8, 2012
View
6 scripts/build_distribution.sh
@@ -28,7 +28,7 @@ FB_SDK_BUILD_PACKAGE=$FB_SDK_BUILD/package
FB_SDK_BUILD_PACKAGE_FRAMEWORK_SUBDIR=Documents/FacebookSDK
FB_SDK_BUILD_PACKAGE_FRAMEWORK=$FB_SDK_BUILD_PACKAGE/$FB_SDK_BUILD_PACKAGE_FRAMEWORK_SUBDIR
FB_SDK_BUILD_PACKAGE_SAMPLES=$FB_SDK_BUILD_PACKAGE/Documents/FacebookSDK/Samples
-FB_SDK_BUILD_PACKAGE_DOCS=$FB_SDK_BUILD_PACKAGE/Documents/FacebookSDK/Documentation
+FB_SDK_BUILD_PACKAGE_DOCS=$FB_SDK_BUILD_PACKAGE/Library/Developer/Shared/Documentation/DocSets/$FB_SDK_DOCSET_NAME
# -----------------------------------------------------------------------------
# Call out to build prerequisites.
@@ -65,8 +65,8 @@ mkdir -p $FB_SDK_BUILD_PACKAGE_DOCS
|| die "Could not copy $FB_SDK_FRAMEWORK"
\cp -R $FB_SDK_SAMPLES/ $FB_SDK_BUILD_PACKAGE_SAMPLES \
|| die "Could not copy $FB_SDK_BUILD_PACKAGE_SAMPLES"
-\cp -R $FB_SDK_FRAMEWORK_DOCS/ $FB_SDK_BUILD_PACKAGE_DOCS \
- || die "Could not copy $$FB_SDK_FRAMEWORK_DOCS"
+\cp -R $FB_SDK_FRAMEWORK_DOCS/docset/Contents $FB_SDK_BUILD_PACKAGE_DOCS \
+ || die "Could not copy $$FB_SDK_FRAMEWORK_DOCS/docset/Contents"
\cp $FB_SDK_ROOT/README.mdown $FB_SDK_BUILD_PACKAGE/Documents/FacebookSDK \
|| die "Could not copy README.mdown"
View
25 scripts/build_documentation.sh
@@ -16,6 +16,7 @@
#
# This script builds the API documentation from source-level comments.
+# This script requires appldoc be installed: https://github.com/tomaz/appledoc
. ${FB_SDK_SCRIPT:-$(dirname $0)}/common.sh
@@ -36,8 +37,28 @@ test -d $FB_SDK_BUILD \
cd $FB_SDK_SRC
-\headerdoc2html -o $FB_SDK_FRAMEWORK_DOCS $FB_SDK_FRAMEWORK/Headers >/dev/null 2>&1
-\gatherheaderdoc $FB_SDK_FRAMEWORK_DOCS
+APPLEDOC=appledoc
+hash $APPLEDOC &>/dev/null
+if [ "$?" -eq "0" ]; then
+ APPLEDOC_DOCSET_NAME="Facebook iOS SDK"
+ $APPLEDOC --project-name "$APPLEDOC_DOCSET_NAME" \
+ --project-company "Facebook" \
+ --company-id "com.facebook" \
+ --output "$FB_SDK_BUILD"/com.facebook.Facebook-iOS-SDK.docset \
+ --preprocess-headerdoc \
+ --docset-bundle-name "$APPLEDOC_DOCSET_NAME" \
+ --docset-feed-name "$APPLEDOC_DOCSET_NAME" \
+ --exit-threshold 2 \
+ --no-install-docset \
+ --search-undocumented-doc \
+ --keep-undocumented-members \
+ --keep-undocumented-objects \
+ --explicit-crossref \
+ $FB_SDK_FRAMEWORK/Headers \
+ || die 'appledoc execution failed'
+else
+ die "appledoc not installed, unable to build documentation"
+fi
# -----------------------------------------------------------------------------
# Done
View
5 scripts/common.sh
@@ -60,8 +60,11 @@ if [ -z "$FB_SDK_SCRIPT" ]; then
# The path to the built Facebook iOS SDK .framework
FB_SDK_FRAMEWORK=$FB_SDK_BUILD/$FB_SDK_FRAMEWORK_NAME
+ # The name of the docset
+ FB_SDK_DOCSET_NAME=com.facebook.Facebook-iOS-SDK.docset
+
# The path to the framework docs
- FB_SDK_FRAMEWORK_DOCS=$FB_SDK_BUILD/docs
+ FB_SDK_FRAMEWORK_DOCS=$FB_SDK_BUILD/$FB_SDK_DOCSET_NAME
fi
View
2 src/FBCacheDescriptor.h
@@ -34,6 +34,8 @@
@method
@abstract
Fetches and caches the data described by the cache descriptor instance, for the given session.
+
+ @param session the <FBSession> to use for fetching data
*/
- (void)prefetchAndCacheForSession:(FBSession*)session;
View
31 src/FBFriendPickerViewController.h
@@ -136,12 +136,17 @@ typedef enum {
/*!
@abstract
Used to initialize the object
+
+ @param aDecoder See [UIViewController initWithCoder:].
*/
- (id)initWithCoder:(NSCoder *)aDecoder;
/*!
@abstract
Used to initialize the object
+
+ @param nibNameOrNil See [UIViewController initWithNibName:bundle:].
+ @param nibBundleOrNil See [UIViewController initWithNibName:bundle:].
*/
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
@@ -153,6 +158,8 @@ typedef enum {
Cache descriptors are used to fetch and cache the data used by the ViewController, at some point
prior in the execution of the application. If the ViewController finds a cached copy of the data, it will
first display the cached content, and then fetch a fresh copy from the server.
+
+ @param cacheDescriptor an <FBCacheDescriptor> to pull properties from
*/
- (void)configureUsingCachedDescriptor:(FBCacheDescriptor*)cacheDescriptor;
@@ -213,38 +220,46 @@ typedef enum {
@protocol FBFriendPickerDelegate <NSObject>
@optional
-/*!
+/*!
@abstract
Called whenever data is loaded.
@discussion
The tableView is automatically reloaded when this happens, but if
another tableView (such as for a UISearchBar) is showing data then
it may need to be reloaded too.
+
+ @param friendPicker the friend picker whose data changed
*/
-- (void)friendPickerViewControllerDataDidChange:
-(FBFriendPickerViewController *)friendPicker;
+- (void)friendPickerViewControllerDataDidChange:(FBFriendPickerViewController *)friendPicker;
-/*!
+/*!
@abstract
Called whenever the selection changes.
+
+ @param friendPicker the friend picker whose selection changed
*/
-- (void)friendPickerViewControllerSelectionDidChange:
-(FBFriendPickerViewController *)friendPicker;
+- (void)friendPickerViewControllerSelectionDidChange:(FBFriendPickerViewController *)friendPicker;
-/*!
+/*!
@abstract
Called on each user to determine whether they show up in the list.
@discussion
This can be used to implement a search bar that filters the list.
+
+ @param friendPicker the friend picker that is asking whether to display a user
+ @param user an <FBGraphUser> object representing the user to show (or not)
*/
- (BOOL)friendPickerViewController:(FBFriendPickerViewController *)friendPicker
shouldIncludeUser:(id <FBGraphUser>)user;
-/*!
+/*!
@abstract
Called if there is a communication error.
+
+ @param friendPicker the friend picker that encountered the error
+ @param error the error that occurred
*/
- (void)friendPickerViewController:(FBFriendPickerViewController *)friendPicker
handleError:(NSError *)error;
View
115 src/FBGraphObject.h
@@ -33,7 +33,7 @@
<ul>
<li> Lightweight/maintainable/robust </li>
<li> Extensible and resilient to change, both by Facebook and third party (OG) </li>
- <li> Simple and natural extension to objective-c </li>
+ <li> Simple and natural extension to Objective-C </li>
</ul>
The FBGraphObject at its core is a duck typed (if it walks/swims/quacks...
@@ -42,62 +42,58 @@
increases discoverability, maintainability, robustness and simplicity.
The following excerpt from the PlacePickerSample shows a simple use of the
a facade protocol FBGraphPlace by an application:
+
<pre>
- @textblock
- - (void)placePickerViewControllerSelectionDidChange:(FBPlacePickerViewController *)placePicker
- {
- id<FBGraphPlace> place = placePicker.selection;
+ &dash; (void)placePickerViewControllerSelectionDidChange:(FBPlacePickerViewController *)placePicker
+ {
+ id&#060;FBGraphPlace&#062; place = placePicker.selection;
- // we'll use logging to show the simple typed property access to place and location info
- NSLog(@"place=%@, city=%@, state=%@, lat long=%@ %@",
+ // we'll use logging to show the simple typed property access to place and location info
+ NSLog(@"place=%@, city=%@, state=%@, lat long=%@ %@",
place.name,
place.location.city,
place.location.state,
place.location.latitude,
place.location.longitude);
- }
- @/textblock
+ }
</pre>
Note that in this example, access to common place information is available through typed property
syntax. But if at some point places in the Social Graph supported additional fields "foo" and "bar", not
reflected in the FBGraphPlace protocol, the application could still access the values like so:
+
<pre>
- @textblock
- NSString *foo = [place objectForKey:@"foo"]; // perhaps located at the ... in the preceding example
- NSNumber *bar = [place objectForKey:@"bar"]; // extensibility applies to Social and Open graph uses
- @/textblock
+ NSString *foo = [place objectForKey:@"foo"]; // perhaps located at the ... in the preceding example
+ NSNumber *bar = [place objectForKey:@"bar"]; // extensibility applies to Social and Open graph uses
</pre>
In addition to untyped access, applications and future revisions of the SDK may add facade protocols by
declaring a protocol inheriting the FBGraphObject protocol, like so:
+
<pre>
- @textblock
- @protocol MyGraphThing<FBGraphObject>
- @property (copy, nonatomic) NSString *id;
- @property (copy, nonatomic) NSString *name;
- @end
- @/textblock
+ &#064;protocol MyGraphThing&#060;FBGraphObject&#062;
+ &#064;property (copy, nonatomic) NSString *id;
+ &#064;property (copy, nonatomic) NSString *name;
+ &#064;end
</pre>
-
+
Important: facade implementations are inferred by graph objects returned by the methods of the SDK. This
means that no explicit implementation is required by application or SDK code. Any FBGraphObject instance
may be cast to any FBGraphObject facade protocol, and accessed via properties. If a field is not present
for a given facade property, the property will return nil.
The following layer diagram depicts some of the concepts discussed thus far:
+
<pre>
- @textblock
- *-------------* *------------* *-------------**--------------------------*
- Facade --> | FBGraphUser | |FBGraphPlace| | MyGraphThing|| MyGraphPersonExtentension| ...
- *-------------* *------------* *-------------**--------------------------*
- *-----------------------------------------* *---------------------------------*
- Transparent impl --> | FBGraphObject<FBGraphObject> (instaces) | | CustomClass<FBGraphObject> |
- *-----------------------------------------* *---------------------------------*
- *-------------------**------------------------* *-----------------------------*
- Apparent impl --> |NSMutableDictionary||FBGraphObject (protocol)| |FBGraphObject (class methods)|
- *-------------------**------------------------* *-----------------------------*
- @/textblock
+ *-------------* *------------* *-------------**--------------------------*
+ Facade --> | FBGraphUser | |FBGraphPlace| | MyGraphThing|| MyGraphPersonExtentension| ...
+ *-------------* *------------* *-------------**--------------------------*
+ *---------------------------------* *------------------------------------*
+ Transparent impl --> | FBGraphObject (instances) | | CustomClass&#060;FBGraphObject&#062; |
+ *---------------------------------* *------------------------------------*
+ *-------------------**------------------------* *-----------------------------*
+ Apparent impl --> |NSMutableDictionary||FBGraphObject (protocol)| |FBGraphObject (class methods)|
+ *-------------------**------------------------* *-----------------------------*
</pre>
The *Facade* layer is meant for typed access to graph objects. The *Transparent impl* layer (more
@@ -107,29 +103,61 @@
Implementation note: the SDK returns NSMutableDictionary derived instances with types declared like
one of the following:
+
<pre>
- @textblock
- NSMutableDictionary<FBGraphObject> *obj; // no facade specified (still castable by app)
- NSMutableDictionary<FBGraphPlace> *person; // facade specified when possible
- @/textblock
+ NSMutableDictionary&#060;FBGraphObject&#062; *obj; // no facade specified (still castable by app)
+ NSMutableDictionary&#060;FBGraphPlace&#062; *person; // facade specified when possible
</pre>
+
However, when passing a graph object to the SDK, NSMutableDictionary is not assumed; only the
FBGraphObject protocol is assumed, like so:
+
<pre>
- @textblock
- id<FBGraphObject> anyGraphObj;
- @/textblock
+ id&#060;FBGraphObject&#062; anyGraphObj;
</pre>
+
As such, the methods declared on the FBGraphObject protocol represent the methods used by the SDK to
consume graph objects. While the FBGraphObject class implements the full NSMutableDictionary and KVC
interfaces, these are not consumed directly by the SDK, and are optional for custom implementations.
*/
@protocol FBGraphObject<NSObject>
+/*!
+ @method
+ @abstract
+ Returns the number of properties on this FBGraphObject.
+ */
- (NSUInteger)count;
+/*!
+ @method
+ @abstract
+ Returns a property on this FBGraphObject.
+
+ @param aKey name of the property to return
+ */
- (id)objectForKey:(id)aKey;
+/*!
+ @method
+ @abstract
+ Returns an enumerator of the property naems on this FBGraphObject.
+ */
- (NSEnumerator *)keyEnumerator;
+/*!
+ @method
+ @abstract
+ Removes a property on this FBGraphObject.
+
+ @param aKey name of the property to remove
+ */
- (void)removeObjectForKey:(id)aKey;
+/*!
+ @method
+ @abstract
+ Sets the value of a property on this FBGraphObject.
+
+ @param anObject the new value of the property
+ @param aKey name of the property to set
+ */
- (void)setObject:(id)anObject forKey:(id)aKey;
@end
@@ -171,13 +199,22 @@
not copy the source object if it can be avoided, but rather wraps and uses it as is. The returned object derives
callers shoudl use the returned object after calls to this method, rather than continue to call methods on the original
object.
+
+ @param jsonDictionary the dictionary representing the underlying object to wrap
*/
+ (NSMutableDictionary<FBGraphObject>*)graphObjectWrappingDictionary:(NSDictionary*)jsonDictionary;
/*!
@method
@abstract
- Used to compare two graph objects to determine if they are the same object.
+ Used to compare two FBGraphObjects to determine if represent the same object. We do not overload
+ the concept of equality as there are various types of equality that may be important for an FBGraphObject
+ (for instance, two different FBGraphObjects could represent the same object, but contain different
+ subsets of fields).
+
+ @param anObject an FBGraphObject to test
+
+ @param anotherObject the FBGraphObject to compare it against
*/
+ (BOOL)isGraphObjectID:(id<FBGraphObject>)anObject sameAs:(id<FBGraphObject>)anotherObject;
View
13 src/FBPlacePickerViewController.h
@@ -109,12 +109,17 @@
/*!
@abstract
Initializes an instance of the view controller
+
+ @param aDecoder See [UIViewController initWithCoder:].
*/
- (id)initWithCoder:(NSCoder *)aDecoder;
/*!
@abstract
Initializes an instance of the view controller
+
+ @param nibNameOrNil See [UIViewController initWithNibName:bundle:].
+ @param nibBundleOrNil See [UIViewController initWithNibName:bundle:].
*/
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
@@ -128,6 +133,8 @@
@end
/*!
+ @protocol
+
@abstract
If a conforming delegate is provided, the view controller will notify the delegate of selection change,
filter and error events
@@ -168,13 +175,19 @@
@discussion
This can be used to implement a search bar that filters the list.
+
+ @param placePicker the place picker that is asking whether to display a place
+ @param place an <FBGraphPlace> object representing the place to show (or not)
*/
- (BOOL)placePickerViewController:(FBPlacePickerViewController *)placePicker
shouldIncludePlace:(id <FBGraphPlace>)place;
/*!
@abstract
Called if there is a communication error.
+
+ @param placePicker the place picker that encountered the error
+ @param error the error that occurred
*/
- (void)placePickerViewController:(FBPlacePickerViewController *)placePicker
handleError:(NSError *)error;
View
193 src/FBRequest.h
@@ -50,18 +50,16 @@ typedef NSUInteger FBRequestState __attribute__((deprecated));
from Facebook's graph and rest APIs.
@discussion
- An FBSession object is required
+ An <FBSession object> is required
for all authenticated uses of FBRequest, but unauthenticated requests
are also supported.
An instance of FBRequest represents the arguments and setup for a connection
- to Facebook. At connection time, an FBRequestConnection object is created to
+ to Facebook. At connection time, an <FBRequestConnection> object is created to
manage a single connection. Class and instance methods prefixed with start*
can be used to connect and setup with a single method. An FBRequest object
may be used to issue multiple connections to Facebook. To cancel a connection
- use the instance method on FBRequestConnection.
-
- @unsorted
+ use the instance method on <FBRequestConnection>.
*/
@interface FBRequest : NSObject {
@private
@@ -82,15 +80,17 @@ typedef NSUInteger FBRequestState __attribute__((deprecated));
@methodgroup Creating a request
@method
-
- @seealso initWithSession:graphPath:parameters:HTTPMethod:
+ Calls <initWithSession:graphPath:parameters:HTTPMethod:> with default parameters.
*/
- (id)init;
/*!
@method
-
- @seealso initWithSession:graphPath:parameters:HTTPMethod:
+ Calls <initWithSession:graphPath:parameters:HTTPMethod:> with default parameters
+ except for the ones provided to this method.
+
+ @param session See <initWithSession:graphPath:parameters:HTTPMethod:>.
+ @param graphPath See <initWithSession:graphPath:parameters:HTTPMethod:>.
*/
- (id)initWithSession:(FBSession*)session
graphPath:(NSString *)graphPath;
@@ -104,26 +104,22 @@ typedef NSUInteger FBRequestState __attribute__((deprecated));
@discussion
Note that this only sets properties on the FBRequest.
- To send the request, initialize a FBRequestConnection, add this request,
- and send start to the FBRequestConnection. See other methods on this
+ To send the request, initialize a <FBRequestConnection>, add this request,
+ and send <[FBRequestConnection start]>. See other methods on this
class for shortcuts to simplify this process.
@param session the session object representing the identity of the
- Facebook user making the request; nil implies an
- unauthenticated request; default=nil
-
+ Facebook user making the request; nil implies an unauthenticated request; default=nil
+
@param graphPath specifies a path for a graph request, as well as
- indicates to the object to use the graph subdomain;
- before start is one of graphPath or restMethod
- must be non-nil and the other must be nil
-
+ indicates to the object to use the graph subdomain; before start is one of graphPath
+ or restMethod must be non-nil and the other must be nil
+
@param parameters specifies url parameters for the request; nil
- implies that automatically handled parameters such as
- access_token should be set, but no additional
- parameters will be set; default=nil
-
- @param HTTPMethod indicates the HTTP method to use; nil implies GET;
- default=nil
+ implies that automatically handled parameters such as access_token should be set, but
+ no additional parameters will be set; default=nil
+
+ @param HTTPMethod indicates the HTTP method to use; nil implies GET; default=nil
*/
- (id)initWithSession:(FBSession*)session
graphPath:(NSString *)graphPath
@@ -138,24 +134,22 @@ typedef NSUInteger FBRequestState __attribute__((deprecated));
@discussion
Note that this only sets properties on the FBRequest.
- To send the request, initialize a FBRequestConnection, add this request,
- and send start to the FBRequestConnection. See other methods on this
+ To send the request, initialize a <FBRequestConnection>, add this request,
+ and send <[FBRequestConnection start]>. See other methods on this
class for shortcuts to simplify this process.
@param session the session object representing the identity of the
- Facebook user making the request; nil implies an
- unauthenticated request; default=nil
+ Facebook user making the request; nil implies an unauthenticated request; default=nil
@param graphPath specifies a path for a graph request, as well as
- indicates to the object to use the graph subdomain;
- before start is one of graphPath or restMethod
- must be non-nil and the other must be nil
+ indicates to the object to use the graph subdomain; before start is one of graphPath
+ or restMethod must be non-nil and the other must be nil
@param graphObject an object or open graph action to post
*/
- (id)initForPostWithSession:(FBSession*)session
graphPath:(NSString *)graphPath
- graphObject:(id<FBGraphObject>)object;
+ graphObject:(id<FBGraphObject>)graphObject;
/*!
@method
@@ -167,24 +161,21 @@ typedef NSUInteger FBRequestState __attribute__((deprecated));
Note that this only sets properties on the FBRequest.
- To send the request, initialize a FBRequestConnection, add this request,
- and send start to the FBRequestConnection. See other methods on this
+ To send the request, initialize a <FBRequestConnection>, add this request,
+ and send <[FBRequestConnection start]>. See other methods on this
class for shortcuts to simplify this process.
@param session the session object representing the identity of the
- Facebook user making the request; nil implies an
- unauthenticated request; default=nil
-
+ Facebook user making the request; nil implies an unauthenticated request; default=nil
+
@param restMethod restMethod specifies the method for a request
- to the deprecated Facebook rest API
-
+ to the deprecated Facebook rest API
+
@param parameters specifies url parameters for the request; nil
- implies that automatically handled parameters such as
- access_token should be set, but no additional
- parameters will be set; default=nil
-
- @param HTTPMethod indicates the HTTP method to use; nil implies GET;
- default=nil
+ implies that automatically handled parameters such as access_token should be set, but
+ no additional parameters will be set; default=nil
+
+ @param HTTPMethod indicates the HTTP method to use; nil implies GET; default=nil
*/
- (id)initWithSession:(FBSession*)session
restMethod:(NSString *)restMethod
@@ -271,31 +262,34 @@ typedef NSUInteger FBRequestState __attribute__((deprecated));
Used to start a connection. The block is called in all three
completion cases: success, error, & cancel.
- @param completionHandler handler block, called when the request completes
- with success, error, or cancel
+ @param handler handler block, called when the request completes
+ with success, error, or cancel
*/
- (FBRequestConnection*)startWithCompletionHandler:(FBRequestHandler)handler;
/*!
@methodgroup FBRequestConnection start methods
@abstract
- These methods start a FBRequestConnection.
+ These methods start a <FBRequestConnection>.
@discussion
These simplify the process of preparing a request to send. These
handle the steps of initializing a FBRequest, initializing a
- FBRequestConnection, and adding the FBRequest to the
- FBRequestConnection.
+ <FBRequestConnection>, and adding the FBRequest to the
+ <FBRequestConnection>.
*/
/*!
@method
@abstract
- Creates and links a FBRequest and FBRequestConnection, ready to start.
+ Creates and links a FBRequest and <FBRequestConnection>, ready to start.
- @seealso connectionWithSession:graphPath:parameters:HTTPMethod:handler:
+ See <connectionWithSession:graphPath:parameters:HTTPMethod:completionHandler:>
+
+ @param graphPath See <connectionWithSession:graphPath:parameters:HTTPMethod:completionHandler:>
+ @param handler See <connectionWithSession:graphPath:parameters:HTTPMethod:completionHandler:>
*/
+ (FBRequestConnection*)startWithGraphPath:(NSString*)graphPath
completionHandler:(FBRequestHandler)handler;
@@ -304,9 +298,13 @@ typedef NSUInteger FBRequestState __attribute__((deprecated));
@method
@abstract
- Creates and links a FBRequest and FBRequestConnection, ready to start.
+ Creates and links a FBRequest and <FBRequestConnection>, ready to start.
+
+ See <connectionWithSession:graphPath:parameters:HTTPMethod:completionHandler:>
- @seealso connectionWithSession:graphPath:parameters:HTTPMethod:handler:
+ @param session See <connectionWithSession:graphPath:parameters:HTTPMethod:completionHandler:>
+ @param graphPath See <connectionWithSession:graphPath:parameters:HTTPMethod:completionHandler:>
+ @param handler See <connectionWithSession:graphPath:parameters:HTTPMethod:completionHandler:>
*/
+ (FBRequestConnection*)startWithSession:(FBSession*)session
graphPath:(NSString*)graphPath
@@ -316,53 +314,47 @@ typedef NSUInteger FBRequestState __attribute__((deprecated));
@method
@abstract
- Creates and links a FBRequest and FBRequestConnection, ready to start.
+ Creates and links a FBRequest and <FBRequestConnection>, ready to start.
@param session the session object representing the identity of the
- Facebook user making the request; nil implies an
- unauthenticated request; default=nil
-
+ Facebook user making the request; nil implies an unauthenticated request; default=nil
+
@param graphPath specifies a path for a graph request, as well as
- indicates to the object to use the graph subdomain;
- before start is one of graphPath or restMethod
- must be non-nil and the other must be nil
-
+ indicates to the object to use the graph subdomain; before start is one of graphPath
+ or restMethod must be non-nil and the other must be nil
+
@param graphObject an object or open graph action to post
-
+
@param handler handler block, called when the request completes
- with success, error, or cancel
+ with success, error, or cancel
*/
+ (FBRequestConnection*)startForPostWithSession:(FBSession*)session
graphPath:(NSString*)graphPath
- graphObject:(id<FBGraphObject>)object
+ graphObject:(id<FBGraphObject>)graphObject
completionHandler:(FBRequestHandler)handler;
/*!
@method
@abstract
- Creates and links a FBRequest and FBRequestConnection, ready to start.
-
+ Creates and links a FBRequest and <FBRequestConnection>, ready to start.
+
@param session the session object representing the identity of the
- Facebook user making the request; nil implies an
- unauthenticated request; default=nil
-
+ Facebook user making the request; nil implies an unauthenticated request; default=nil
+
@param graphPath specifies a path for a graph request, as well as
- indicates to the object to use the graph subdomain;
- before start is one of graphPath or restMethod
- must be non-nil and the other must be nil
-
+ indicates to the object to use the graph subdomain; before start is one of graphPath
+ or restMethod must be non-nil and the other must be nil
+
@param parameters specifies url parameters for the request; nil
- implies that automatically handled parameters such as
- access_token should be set, but no additional
- parameters will be set; default=nil
-
- @param HTTPMethod indicates the HTTP method to use; nil implies GET;
- default=nil
-
+ implies that automatically handled parameters such as access_token should be set, but
+ no additional parameters will be set; default=nil
+
+ @param HTTPMethod indicates the HTTP method to use; nil implies GET; default=nil
+
@param handler handler block, called when the request completes
- with success, error, or cancel
+ with success, error, or cancel
*/
+ (FBRequestConnection*)startWithSession:(FBSession*)session
graphPath:(NSString*)graphPath
@@ -381,7 +373,7 @@ typedef NSUInteger FBRequestState __attribute__((deprecated));
initialize a FBRequest based on strongly typed parameters that are
specific to the scenario.
- They do not initialize a FBRequestConnection, so the app still needs
+ They do not initialize a <FBRequestConnection>, so the app still needs
to call connectionWithCompletionHandler: and then start on the result.
*/
@@ -403,12 +395,11 @@ typedef NSUInteger FBRequestState __attribute__((deprecated));
@discussion
Simplifies preparing a request to retrieve "me".
- This does not initialize a FBRequestConnection, so the app still needs
+ This does not initialize a <FBRequestConnection>, so the app still needs
to call connectionWithCompletionHandler: and then start on the result.
-
+
@param session the session object representing the identity of the
- Facebook user making the request; nil implies an
- unauthenticated request; default=nil
+ Facebook user making the request; nil implies an unauthenticated request; default=nil
*/
+ (FBRequest*)requestForMeWithSession:(FBSession*)session;
@@ -421,12 +412,11 @@ typedef NSUInteger FBRequestState __attribute__((deprecated));
@discussion
Simplifies preparing a request to retrieve "me/friends".
- This does not initialize a FBRequestConnection, so the app still needs
+ This does not initialize a <FBRequestConnection>, so the app still needs
to call connectionWithCompletionHandler: and then start on the result.
@param session the session object representing the identity of the
- Facebook user making the request; nil implies an
- unauthenticated request; default=nil
+ Facebook user making the request; nil implies an unauthenticated request; default=nil
*/
+ (FBRequest*)requestForMyFriendsWithSession:(FBSession*)session;
@@ -442,14 +432,13 @@ typedef NSUInteger FBRequestState __attribute__((deprecated));
To post a photo to a specific album, add a graph object representing
the album to the parameters under the key @"album".
- This does not initialize a FBRequestConnection, so the app still needs
+ This does not initialize a <FBRequestConnection>, so the app still needs
to call connectionWithCompletionHandler: and then start on the result.
@param photo the UIImage to upload.
@param session the session object representing the identity of the
- Facebook user making the request; nil implies an
- unauthenticated request; default=nil
+ Facebook user making the request; nil implies an unauthenticated request; default=nil
*/
+ (FBRequest*)requestForUploadPhoto:(UIImage *)photo
session:(FBSession *)session;
@@ -463,7 +452,7 @@ typedef NSUInteger FBRequestState __attribute__((deprecated));
@discussion
Simplifies preparing a get graph objects.
- This does not initialize a FBRequestConnection, so the app still needs
+ This does not initialize a <FBRequestConnection>, so the app still needs
to call connectionWithCompletionHandler: and then start on the result.
@param graphPath the path to the graph object(s) to retrieve.
@@ -484,23 +473,21 @@ typedef NSUInteger FBRequestState __attribute__((deprecated));
@discussion
Simplifies preparing a request to search for places near a coordinate.
- This does not initialize a FBRequestConnection, so the app still needs
+ This does not initialize a <FBRequestConnection>, so the app still needs
to call connectionWithCompletionHandler: and then start on the result.
@param coordinate the coordinates to search near
@param radius the radius to search in meters
-
+
@param limit the maxiumum number of results to return. It is
- possible to receive fewer than this because of
- the radius and because of server limits.
-
+ possible to receive fewer than this because of the radius and because of server limits.
+
@param searchText text to use in the query to narrow the set of places
- returned.
-
+ returned.
+
@param session the session object representing the identity of the
- Facebook user making the request; nil implies an
- unauthenticated request; default=nil
+ Facebook user making the request; nil implies an unauthenticated request; default=nil
*/
+ (FBRequest*)requestForPlacesSearchAtCoordinate:(CLLocationCoordinate2D)coordinate
radiusInMeters:(NSInteger)radius
View
8 src/FBRequest.m
@@ -77,13 +77,13 @@ - (id)initWithSession:(FBSession*)session
- (id)initForPostWithSession:(FBSession*)session
graphPath:(NSString *)graphPath
- graphObject:(id<FBGraphObject>)object {
+ graphObject:(id<FBGraphObject>)graphObject {
self = [self initWithSession:session
graphPath:graphPath
parameters:nil
HTTPMethod:kPostHTTPMethod];
if (self) {
- self.graphObject = object;
+ self.graphObject = graphObject;
}
return self;
}
@@ -169,12 +169,12 @@ + (FBRequestConnection*)startWithSession:(FBSession*)session
+ (FBRequestConnection*)startForPostWithSession:(FBSession*)session
graphPath:(NSString*)graphPath
- graphObject:(id<FBGraphObject>)object
+ graphObject:(id<FBGraphObject>)graphObject
completionHandler:(FBRequestHandler)handler
{
FBRequest *request = [[[FBRequest alloc] initForPostWithSession:session
graphPath:graphPath
- graphObject:object]
+ graphObject:graphObject]
autorelease];
return [request startWithCompletionHandler:handler];
View
51 src/FBRequestConnection.h
@@ -62,7 +62,7 @@ typedef void (^FBRequestHandler)(FBRequestConnection *connection,
@discussion
Represents a single connection to Facebook to service a request. The logical
- request settings are encapsulated in a reusable FBRequest object, and
+ request settings are encapsulated in a reusable <FBRequest> object, and
FBRequestConnection encapsulates the concerns of a single communication
e.g. starting and canceling a connection, batching.
@@ -77,7 +77,7 @@ typedef void (^FBRequestHandler)(FBRequestConnection *connection,
/*!
@method
- @seealso initWithTimeout: for parameter details
+ Calls <initWithTimeout:> with a default timeout of 180 seconds.
*/
- (id)init;
@@ -90,16 +90,14 @@ typedef void (^FBRequestHandler)(FBRequestConnection *connection,
@discussion
For a single request, the usual method for creating an FBRequestConnection
- object is to call one of the start* methods on FBRequest. However, it is
- allowable to init an FBRequestConnection object directly, and call addRequest
- to add one or more request objects to the connection, before calling start.
+ object is to call one of the start* methods on <FBRequest>. However, it is
+ allowable to init an FBRequestConnection object directly, and call <addRequest:completionHandler:>
+ to add one or more request objects to the connection, before calling <start>.
Note that if requests are part of a batch, they must have an open
FBSession that has an access token associated with it, or a default App ID
- must be set either in the plist or an explicit call to [FBSession setDefaultAppID].
-
- @param timeout NSTimeInterval to wait for a response before giving up.
- The units are in seconds.
+ must be set either in the plist or an explicit call to <[FBSession defaultAppID]>.
+ @param timeout NSTimeInterval (seconds) to wait for a response before giving up.
*/
- (id)initWithTimeout:(NSTimeInterval)timeout;
@@ -115,7 +113,7 @@ typedef void (^FBRequestHandler)(FBRequestConnection *connection,
FBRequestConnection to send that request. It is also legal to set this
property, and the provided NSMutableURLRequest will be used instead. However,
the NSMutableURLRequest must result in an appropriate response. Further, once
- this property has been set, no more FBRequests can be added to this
+ this property has been set, no more <FBRequest>s can be added to this
FBRequestConnection.
*/
@property(nonatomic, retain, readwrite) NSMutableURLRequest *urlRequest;
@@ -129,7 +127,7 @@ typedef void (^FBRequestHandler)(FBRequestConnection *connection,
the server.
The property is nil until the request completes. If there was a response,
- it is non-nil during the FBRequestHandler callback.
+ it is non-nil during the <FBRequestHandler> callback.
*/
@property(nonatomic, retain, readonly) NSHTTPURLResponse *urlResponse;
@@ -139,8 +137,11 @@ typedef void (^FBRequestHandler)(FBRequestConnection *connection,
/*!
@method
-
- @seealso addRequest:completionHandler:batchEntryName: for parameter details
+ Adds an <FBRequest> to this connection. See <addRequest:completionHandler:batchEntryName:> for
+ more information.
+
+ @param request See <addRequest:completionHandler:batchEntryName:>.
+ @param handler See <addRequest:completionHandler:batchEntryName:>.
*/
- (void)addRequest:(FBRequest*)request
completionHandler:(FBRequestHandler)handler;
@@ -149,19 +150,20 @@ typedef void (^FBRequestHandler)(FBRequestConnection *connection,
@method
@abstract
- Add one or more requests to the connection, prior to calling start.
+ Add one or more <FBRequest>s to the connection, prior to calling <start>.
@discussion
- The block passed to addRequest is retained until the block is called upon
+ The completion handler is retained until the block is called upon
completion or cancellation of the connection.
@param request A request to be included in the round-trip when start is called
@param handler A handler to call back when the round-trip completes or times out
-
+
@param name An optional name for this request. This can be used to feed
- the results of one request as an input to another FBRequest in
- the same FBRequestConnection; default=nil
+ the results of one request as an input to another <FBRequest> in the same
+ FBRequestConnection as described at https://developers.facebook.com/docs/reference/api/batch/ ;
+ default=nil
*/
- (void)addRequest:(FBRequest*)request
completionHandler:(FBRequestHandler)handler
@@ -186,16 +188,11 @@ typedef void (^FBRequestHandler)(FBRequestConnection *connection,
such cases multiple error conditions may apply, and if so the following
priority (highest to lowest) is used.
- <pre>
- @textblock
- FBRequestConnectionInvalidRequestKey -- when an FBRequest is unable to be
- encoded for transmission
+ - <FBRequestConnectionInvalidRequestKey> -- when an <FBRequest> is unable to be
+ encoded for transmission
- FBRequestConnectionInvalidBatchKey -- when any request in the connection
- cannot be encoded for transmission
- with the batch, all requests fail
- @/textblock
- </pre>
+ - <FBRequestConnectionInvalidBatchKey> -- when any request in the connection
+ cannot be encoded for transmission with the batch, all requests fail
Start may not be called twice.
*/
View
83 src/FBSession.h
@@ -27,7 +27,7 @@
#define FB_SESSIONSTATEOPENBIT (1 << 9)
/*
- * Constants defining logging behavior. Use with [FBSession setLoggingLevel]
+ * Constants defining logging behavior. Use with <[FBSession setLoggingBehavior]>.
*/
/*! Log requests from FBRequest* classes */
@@ -102,7 +102,7 @@ typedef enum {
/*!
@typedef
- @abstract Block type used to define blocks called by FBSession for state updates
+ @abstract Block type used to define blocks called by <FBSession> for state updates
@discussion
*/
typedef void (^FBSessionStateHandler)(FBSession *session,
@@ -112,7 +112,8 @@ typedef void (^FBSessionStateHandler)(FBSession *session,
/*!
@typedef
- @abstract Block type used to define blocks called by [FBSession reauthorizeWithPermissions]
+ @abstract Block type used to define blocks called by <[FBSession reauthorizeWithPermissions]>/.
+
@discussion
*/
typedef void (^FBSessionReauthorizeResultHandler)(FBSession *session,
@@ -124,7 +125,7 @@ typedef void (^FBSessionReauthorizeResultHandler)(FBSession *session,
@abstract
FBSession object is used to authenticate/authorize a user, as well
as to manage the related access token. An FBSession object is required
- for all authenticated uses of FBRequest.
+ for all authenticated uses of <FBRequest>.
@discussion
Instances of the FBSession class notifiy of state changes in these ways:
@@ -133,8 +134,6 @@ typedef void (^FBSessionReauthorizeResultHandler)(FBSession *session,
back in the course of state transitions for the session (e.g. login, session closed, etc.)
b) the object supports KVO for property changes
-
- @unsorted
*/
@interface FBSession : NSObject
@@ -144,15 +143,19 @@ typedef void (^FBSessionReauthorizeResultHandler)(FBSession *session,
/*!
@method
-
- @seealso initWithAppID:permissions:urlSchemeSuffix:tokenCacheStrategy: for parameter details
+
+ @abstract Initializes the object using default values for the parameters to
+ <initWithAppID:permissions:urlSchemeSuffix:tokenCacheStrategy:>.
*/
- (id)init;
/*!
@method
- @seealso initWithAppID:permissions:urlSchemeSuffix:tokenCacheStrategy: for parameter details
+ @abstract Initializes the object using default values for the parameters to
+ <initWithAppID:permissions:urlSchemeSuffix:tokenCacheStrategy:>.
+
+ @param permissions See <initWithAppID:permissions:urlSchemeSuffix:tokenCacheStrategy:>.
*/
- (id)initWithPermissions:(NSArray*)permissions;
@@ -163,25 +166,20 @@ typedef void (^FBSessionReauthorizeResultHandler)(FBSession *session,
Following are the descriptions of the arguments along with their
defaults when ommitted.
- @description
+ @discussion
Note: for a first cut at this, we are removing the public ability
to force an extension to an access token; instead we will implicitly do this
when requests are made.
@param permissions array of strings naming permissions to authorize; a
- nil value indicates access to basic information;
- default=nil
- @param appId returns a session object for the given app id; nil
- specifies that the default obtained by [FBSession
- defaultAppID] is used; default=nil
+ nil value indicates access to basic information; default=nil
+ @param appID the Facebook App ID for the session; nil
+ specifies that the default obtained by <[FBSession defaultAppID]> is used; default=nil
@param urlSchemeSuffix suffix, used for cases where multiple iOS apps use
- a single appid; nil indicates the urlSchemeSuffix
- should be pulled from plist; default=nil
+ a single appid; nil indicates the urlSchemeSuffix should be pulled from plist; default=nil
@param tokenCachingStrategy policy object for fetching and storing a cached
- token value; when nil, the token and expiration date
- are stored using NSUserDefaults with the names
- "FBAccessTokenKey", and "FBExpirationDateKey";
- default=nil
+ token value; when nil, the token and expiration date are stored using NSUserDefaults with
+ the names "FBAccessTokenKey", and "FBExpirationDateKey"; default=nil
*/
- (id)initWithAppID:(NSString*)appID
permissions:(NSArray*)permissions
@@ -190,7 +188,7 @@ typedef void (^FBSessionReauthorizeResultHandler)(FBSession *session,
// instance readonly properties
-/*! @abstract indicates whether the session is open and ready for use with FBRequest, et al. */
+/*! @abstract indicates whether the session is open and ready for use with <FBRequest>, et al. */
@property(readonly) BOOL isOpen;
/*! @abstract detailed session state */
@@ -220,10 +218,10 @@ typedef void (^FBSessionReauthorizeResultHandler)(FBSession *session,
@abstract opens a session for a user on Facebook
- @description
- A session may not be used with FBRequest and other classes in the SDK until it is open. If, prior
- to calling open, the session is in the FBSessionStateCreatedTokenLoaded state, then no UX occurs, and
- the session becomes available for use. If the session is in the FBSessionStateCreated state, prior
+ @discussion
+ A session may not be used with <FBRequest> and other classes in the SDK until it is open. If, prior
+ to calling open, the session is in the <FBSessionStateCreatedTokenLoaded> state, then no UX occurs, and
+ the session becomes available for use. If the session is in the <FBSessionStateCreated> state, prior
to calling open, then a call to open causes login UX to occur, either via the Facebook application
or via Safari.
@@ -241,10 +239,10 @@ typedef void (^FBSessionReauthorizeResultHandler)(FBSession *session,
@abstract logs a user on to Facebook
- @description
- A session may not be used with FBRequest and other classes in the SDK until it is open. If, prior
- to calling open, the session is in the FBSessionStateCreatedTokenLoaded state, then no UX occurs, and
- the session becomes available for use. If the session is in the FBSessionStateCreated state, prior
+ @discussion
+ A session may not be used with <FBRequest> and other classes in the SDK until it is open. If, prior
+ to calling open, the session is in the <FBSessionStateCreatedTokenLoaded> state, then no UX occurs, and
+ the session becomes available for use. If the session is in the <FBSessionStateCreated> state, prior
to calling open, then a call to open causes login UX to occur, either via the Facebook application
or via Safari.
@@ -254,7 +252,7 @@ typedef void (^FBSessionReauthorizeResultHandler)(FBSession *session,
changes; the block is released when the session transitions to an closed state
@param behavior control whether to allow/force/prohibit SSO (default
- is FBSessionLoginBehaviorSSOWithFallback)
+ is <FBSessionLoginBehaviorSSOWithFallback>)
@param handler a block to call with state changes; default=nil
*/
- (void)openWithBehavior:(FBSessionLoginBehavior)behavior
@@ -277,11 +275,11 @@ typedef void (^FBSessionReauthorizeResultHandler)(FBSession *session,
Reauthorizes the session, with additional permissions
@param permissions array of strings naming permissions to authorize; a
- nil value indicates access to basic information;
- nil reauthorizes the current permissions
+ nil value indicates access to basic information; nil reauthorizes the current permissions
@param behavior control whether to allow/force/prohibit SSO (default
- is FBSessionLoginBehaviorSSOWithFallback)
- @param handler a block to call with the result of the reauthorize call; nil indicates no callback
+ is <FBSessionLoginBehaviorSSOWithFallback>)
+ @param handler a block to call with the result of the reauthorize call;
+ nil indicates no callback
*/
- (void)reauthorizeWithPermissions:(NSArray*)permissions
behavior:(FBSessionLoginBehavior)behavior
@@ -290,8 +288,10 @@ typedef void (^FBSessionReauthorizeResultHandler)(FBSession *session,
/*!
@abstract
Helper method, used to provide an implementation for
- [UIApplicationDelegate application:openUrl:*] capable of updating a session
+ [UIApplicationDelegate application:openURL:sourceApplication:annotation:] capable of updating a session
based on the url
+
+ @param url The URL as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:].
*/
- (BOOL)handleOpenURL:(NSURL*)url;
@@ -302,17 +302,18 @@ typedef void (^FBSessionReauthorizeResultHandler)(FBSession *session,
/*!
@method
- @abstract retrieve the current FB SDK logging behavior.
+ @abstract retrieve the current Facebook SDK logging behavior.
*/
+ (NSSet *)loggingBehavior;
/*!
@method
- @abstract set the current FB SDK logging behavior. Should consist of strings defined as constants with FB_LOG_BEHAVIOR_* above,
- and can be constructed with [NSSet initWithObjects:]
+ @abstract set the current Facebook SDK logging behavior. Should consist of strings defined as
+ constants with FB_LOG_BEHAVIOR_*, and can be constructed with [NSSet initWithObjects:]
+ @param loggingBehavior a set of strings indicating what should be logged.
*/
+ (void)setLoggingBehavior:(NSSet *)loggingBehavior;
@@ -321,9 +322,11 @@ typedef void (^FBSessionReauthorizeResultHandler)(FBSession *session,
@abstract Set the default Facebook App ID to use for sessions. The app ID may be
overridden on a per-FBSession basis.
+
+ @param appID the Facebook App ID to use for <FBSession>s unless overridden.
*/
-
+ (void)setDefaultAppID:(NSString*)appID;
+
/*!
@method
View
12 src/FBSessionTokenCachingStrategy.h
@@ -42,21 +42,21 @@
Initializes and returns an instance
@param tokenInformationKeyName Specifies a key name to use for cached token information in NSUserDefaults, nil
- indicates a default value of @"FBAccessTokenInformationKey"
+ indicates a default value of @"FBAccessTokenInformationKey"
*/
- (id)initWithUserDefaultTokenInformationKeyName:(NSString*)tokenInformationKeyName;
/*!
@abstract
- Called by FBSession (and overridden by inheritors), in order to cache token information.
+ Called by <FBSession> (and overridden by inheritors), in order to cache token information.
@param tokenInformation Dictionary containing token information to be cached by the method
*/
- (void)cacheTokenInformation:(NSDictionary*)tokenInformation;
/*!
@abstract
- Called by FBSession (and overridden by inheritors), in order to fetch cached token information
+ Called by <FBSession> (and overridden by inheritors), in order to fetch cached token information
@discussion
An overriding implementation should only return a token if it
@@ -66,12 +66,14 @@
/*!
@abstract
- Called by FBSession (and overridden by inheritors), in order delete any cached information for a given token
+ Called by <FBSession> (and overridden by inheritors), in order delete any cached information for a given token
@discussion
Not all implementations will make use of the token value passedas an argument; however advanced implementations
may need the token value in order to locate and delete the cache. An overriding implementation must be able to
tolerate a nil token, as well as a token value for which no cached information exists
+
+ @param token the access token to clear
*/
- (void)clearToken:(NSString*)token;
@@ -84,7 +86,7 @@
/*!
@abstract
Helper function called by the SDK as well as application code, used to determine whether a given dictionary
- contains the minimum token information usable by the FBSession.
+ contains the minimum token information usable by the <FBSession>.
@param tokenInformation Dictionary containing token information to be validated
*/
View
8 src/FBTestSession.h
@@ -64,8 +64,6 @@ extern NSString *kThirdTestUserTag;
test user NOT use a shared test user, or this scheme will break down. If a shared test user
seems to be in an invalid state, it can be deleted manually via the Web interface at
https://developers.facebook.com/apps/APP_ID/permissions?role=test+users.
-
- @unsorted
*/
@interface FBTestSession : FBSession
@@ -82,7 +80,7 @@ extern NSString *kThirdTestUserTag;
@abstract
Constructor helper to create a session for use in unit tests
- @description
+ @discussion
This method creates a session object which uses a shared test user with the right permissions,
creating one if necessary on open (but not deleting it on close, so it can be re-used in later
tests). Calling this method multiple times may return sessions with the same user. If this is not
@@ -100,7 +98,7 @@ extern NSString *kThirdTestUserTag;
@abstract
Constructor helper to create a session for use in unit tests
- @description
+ @discussion
This method creates a session object which uses a shared test user with the right permissions,
creating one if necessary on open (but not deleting it on close, so it can be re-used in later
tests).
@@ -124,7 +122,7 @@ extern NSString *kThirdTestUserTag;
@abstract
Constructor helper to create a session for use in unit tests
- @description
+ @discussion
This method creates a session object which creates a test user on open, and destroys the user on
close; This method should not be used in application code -- but is useful for creating unit tests
that use the Facebook iOS SDK.

0 comments on commit 9490669

Please sign in to comment.
Something went wrong with that request. Please try again.