Upload
kennan
View
87
Download
0
Embed Size (px)
DESCRIPTION
The Alfresco iOS SDK. Gi Lee (Zia Consulting) Peter Schmidt (Alfresco). Alfresco iOS SDK – Intro Who we are. Gi Lee Zia Consulting (Technical Architect) [email protected] Objective-C CMIS library. Peter Schmidt Alfresco Software (Senior iOS Engineer) - PowerPoint PPT Presentation
Citation preview
The Alfresco iOS SDK
Gi Lee (Zia Consulting)
Peter Schmidt (Alfresco)
Alfresco iOS SDK – Intro Who we are
Gi LeeZia Consulting(Technical Architect)
Objective-C CMIS library
Peter SchmidtAlfresco Software(Senior iOS Engineer)
Alfresco SDK library & samples apps
Alfresco iOS SDK – IntroWhat we will talk about
Gi LeeCMIS library (Apache)•Part of iOS Alfresco SDK
•Architecture & Design
•Code examples
Peter SchmidtAlfresco SDK•How to get and install it
•Architecture & Design
•Code examples
•Demo of Sample app
•How to get support
ObjectiveCMIS – The BasicsIntroducing the library
• Low level API for CMIS
• Static Cocoa Touch Library
• No third-party API’s
• Asynchronous
• AtomPub binding support
ObjectiveCMIS – The BasicsThe Xcode project
CMIS API LibraryCocoa Touch Static Library
DocumentationAppleDoc DocSet
Min. Req.
Min. Req.iOS 5.1iOS 5.1XCode 4.x
XCode 4.x• ARCARC
• BlocksBlocks
ObjectiveCMIS – The BasicsAn open source project
• Open source Objective-C implementation of CMIS
• Apache 2.0 license
• Collaborative project
• Recently accepted by Apache Chemistry
ObjectiveCMIS – The BasicsiOS specificsNaming Convention
• ObjectiveCMIS code prefixed with CMISError Handling
• No exceptions in iOS, use NSError• As per Apple standard:
“NSError object remains nil if method call is successful.” Always check!
Automated Reference Counting• No more retain, release, autorelease on object
Blocks• Used to handle asynchronous
requests & callbacks
ObjectiveCMIS – The BasicsWhat are blocks?
• Closures for Objective-C, C, C++
• Introduced in iOS 4
• Ad hoc functionality that can be passed like parameters
• Good for callbacks!
ObjectiveCMIS – The BasicsAsynchronous handling
Repository
// Completion BlockIf(nil != session){ self.session = session; …}else{ /* error handling */}
CMIS API
ObjectiveCMIS – Design & ArchitectureThe API layers
Client Binding API• Low-Level API• Follows the CMIS
Domain Model• More Control• Clunky to Implement
Client Object API• Object Oriented• Easy to Use• Built-In LinkCache
ObjectiveCMIS – Design & ArchitectureClient API common interface
ObjectiveCMIS - Getting StartedHow do I use it?
Added as a binary + Headers• Simple• Need to generate binary
Added to a Xcode Workspace• Extends workflow scope• Provides full access to source code
ObjectiveCMIS – Getting Started… as a Generated Binary + Headers
1. Execute the script build_universal_lib.sh
2. Add generated build output folder to your project
3. Configure the build target dependency• Link libObjectiveCMIS.a
4. Configure the Target Build Settings• User Header Search Paths =
“$(BUILT_PRODUCTS_DIR)” [recursive]• Other Linker Flags = “-ObjC –all_load”
ObjectiveCMIS – Getting Started… added to an Xcode workspace
1. Open/Create Xcode Workspace
1. Add the ObjectiveCMIS project to the workspace
1. Configure the build target dependency• Link libObjectiveCMIS.a
1. Configure the target Build Settings1. User Header Search Paths =
“$(BUILT_PRODUCTS_DIR)” [recursive]2. Other Linker Flags = “-ObjC –all_load”
2. Configure the project build scheme (optional)
ObjectiveCMIS – Getting StartedIn a nutshell
1. Add ObjectiveCMIS to your project2. Link the library libObjectiveCMIS.a3. Configure the target Build Settings
• User Header Search Paths = “$(BUILT_PRODUCTS_DIR)”
[recursive]• Other Linker Flags = “-ObjC –all_load”
ObjectiveCMIS – Documentation
http://gentlebytes.com/appledoc
ObjectiveCMIS – DocumentationGenerating the documentation
Setup AppleDoc• Clone the source from Github
• https://github.com/tomaz/appledoc
• Install Appledoc using the script install-appledoc.shinstall-appledoc.sh –b /usr/bin/ -t ~/Library/Application\ Support/appledoc
Generate Documentation• Open the ObjectiveCMIS Xcode project • Run the target “Documentation”
ObjectiveCMIS – Code ExampleSetup a CMIS session
// Define session parametersCMISSessionParameters *params = [[CMISSessionParameters alloc] initWithBindingType:CMISBindingTypeAtomPub];
params.atomPubUrl = [NSURL URLWithString:cmisAtompubLocation];params.username = @”devconUser";params.password = @”devconPassword";params.repositoryId = self.repoId;
// Connect session[CMISSession connectWithSessionParameters:sessionParams completionBlock:^(CMISSession *session, NSError *error) { if (session == nil) { // Error handling code goes here // Dig into error object to determine cause } else { // CMISSession successfully connected self.session = session; } }];
ObjectiveCMIS – Code ExampleGet the root collection[self.session retrieveRootFolderWithCompletionBlock: ^(CMISFolder *folder, NSError *error) { if (nil == folder) { // Error handling code goes here // Dig into error object to determine cause } else { /* Folder object is the root */ self.rootFolder = folder; } }];
Objective CMIS – Code ExampleQuery// Create Query Completion Blockvoid(^queryCompBlock)(CMISPagedResult *pagedResult, NSError *error);queryCompBlock = ^(CMISPagedResult *pagedResult, NSError *error){ if (nil == pagedResult) { // Error handling code goes here // Dig into error object to determine cause } else { /* Process the Paged Results */ }};
NSString *queryStr = @"SELECT * FROM cmis:document WHERE CONTAINS('DevCon')";
// Execute Query[self.session query:queryStr searchAllVersions:NO completionBlock:queryCompBlock];
ObjectiveCMISHow do I get the library?
Alfresco / Objective-CMIShttps://github.com/alfresco/Objective-CMIS
Alfresco iOS SDK – The BasicsWhat is included?
Sample Apps
Mobile API LibraryIncluding Objective CMIS
library
Documentation(appledoc docset)
Min. Req.
Min. Req.iOS 5.1iOS 5.1XCode 4.x
XCode 4.x• ARCARC
• JSONJSON
• Storyboards
Storyboards
Alfresco iOS SDK – The BasicsHow do I get the SDK?
• Download it from our website
• https://developer.alfresco.com/mobile
• From our public github repository
• https://github.com/Alfresco/alfresco-ios-sdk
• Online documentation/tutorial
• https://developer.alfresco.com/resources/alfresco/pdf/iOS-SDK-1.0.pdf
Alfresco iOS SDK – The BasicsHow do I install it?1. Unzip alfresco-ios-sdk.zip file
2. Open XCode
3. File menu
4. Add files to…
DONE ✔
Alfresco iOS SDK - Architecture & Design Design Principles
RepositoryAlfresco inthe Cloud
• Session-Service-Model• Session for
connections• Services for requests
between app & server• Model to handle data
• Blocks• To handle
asynchronous behaviour
Asynchronous calls
Alfresco iOS SDK - Architecture & DesignOverall Structure
Alfresco iOS SDK - Architecture & Design Session
Alfresco iOS SDK - Architecture & Design Services
Alfresco iOS SDK – CodingCreate a Session#import “AlfrescoRepositorySession.h”…@property (nonatomic, strong) id<AlfrescoSession> session;…
[AlfrescoRepositorySession connectWithUrl:url username:username password:password parameters:nil completionBlock:^(id<AlfrescoSession>session, NSError *error){
if(nil == session) FAILURE error handlingelse
weakSelf.session = session;}];
Alfresco iOS SDK – CodingBlocks Everywhere•Used in most methods of Alfresco SDK•Used to encapsulate asynchronous REST API/CMIS calls
EXAMPLE•Get the children in the root folder
#import “AlfrescoDocumentFolderService.h”…AlfrescoDocumentFolderService *folderService =
[[AlfrescoDocumentFolderService alloc] initWithSession:self.session];[folderService retrieveChildrenInFolder:self.session.rootFoldercompletionBlock:^(NSArray *children, NSError *error){
if(nil != children){
…<put your code handling folder children here>}
}];
Alfresco iOS SDK – CodingWhat about connecting to Cloud?Alfresco Cloud uses OAuth 2 for authenticating
1.Register with Cloud to get an API key and Secret key
2.Provide both in your APP
3.Alfresco iOS SDK provides a set of helper classes
• AlfrescoOAuthLoginViewController• Connects to login page• Handles the OAuth dance• Returns access/refresh token as part of
AlfrescoOAuthData
Alfresco iOS SDK – CodingCloud OAuth Dance
Alfresco iOS SDK – CodingConnecting to Alfresco in the Cloud#import “AlfrescoCloudSession.h”#import “AlfrescoOAuthData.h”#import “AlfrescoOAuthDataLoginViewController.h”…
AlfrescoOAuthCompletionBlock completionBlock =^void(AlfrescoOAuthData *oauthData, NSError *error){if(nil != oauthData){
[AlfrescoCloudSession connectWithOAuthData:oauthData parameters:nilcompletionBlock:(id<AlfrescoSession>session, NSError *error{
<your session handling goes here> }];
}};
AlfrescoOAuthLoginViewController *controller = [[AlfrescoOAuthLoginViewController alloc] initWithAPIKey:apiKey secretKey:secretKey completionBlock:completionBlock];
[self.navigationController pushViewController:controller animated:YES];
Alfresco iOS SDK – CodingDemo time
Alfresco iOS SDK – The RestWhat about support – CMIS library?
• Apache mailing list• [email protected] • Subscribe & archive:
• http://mail-archives.apache.org/mod_mbox/chemistry-dev/
• Raise tickets in JIRA• https://issues.apache.org/jira/browse/CMIS • Component: objectivecmis• (you’d need an account for that)
• Apache Chemistry website• http://chemistry.apache.org
Alfresco iOS SDK – The RestWhat about support – Alfresco SDK?
• Alfresco Forums• https://forums.alfresco.com • Look for Alfresco Mobile
• Raise tickets in JIRA• https://issues.alfresco.com/jira/browse/MOBSDK• (you need a JIRA account for this)
• Project: Mobile SDK• Components: API• Affects Version: iOS x.x• Assignee: Mobile Team unassigned
• Have Support Agreement? • Contact Support
Alfresco iOS SDK – The RestFeedback, Q&A?
• Feedback• Regarding SDK• Regarding tutorials
• Your Questions answered