Objective-C GData Framework Release Notes Project site: http://code.google.com/p/gdata-objectivec-client/ Discussion group: http://groups.google.com/group/gdata-objectivec-client-framework Changes since 1.5.0 Additions - Added GDataServerError, representing error responses from services supporting structured errors. On feed and entry fetch errors, a GDataServerErrorGroup will be available from the NSError object's userInfo dictionary with the key kGDataStructuredErrorsKey. - Added query parameters prettyprint, protocolVersion, language - Updated YouTube and DocList APIs for GData v2 servers - Added support for using GDataHTTPFetcher with a single failure selector. - Added GDataTargetNamespace.h (and a tool to generate it) to allow plug-ins to use the library with less risk of class name collision - Added -responseHeaders getter for GDataHTTPFetcher - Added -fetchDocEntryWithURL for fetching a single doc entry - Added -entryForGPhotoID for finding a photo or album with the given ID - Added -entryForSystemGroupID for finding a contact group with the given system group ID - Added feed method for finding feed entries of a single kind - Updated DocsSample with more folder support - Fetcher logging now uses xmllint to prettyprint XML for better readability in Safari - Added setNamespaces: to GDataXMLNode - Added new Docs query parameters and new category label constants - Builds for iPhone and requiring 10.5 and higher now take advantage of fast enumeration Bugs Fixed - Fixed finance portfolio description method (thanks dujunfly) - Fixed query generation for URLs that already contain some parameters Release 1.5.0 23-October-2008 Changes since 1.4.0 Additions - Services and tickets now support properties to make it easier to pass parameters to service callback methods. Tickets inherit a copy of the properties set in the service instance. - Added Google Finance, Webmaster Tools, and Google Books classes. - Picasa Web class, method, and constant names changed to Google Photos - Added support for contact groups and extended properties, and a method to generate contact feed URLs for projections. Added methods to remove contact properties. (thanks stevec) Added a service method to fetch a contact entry given its URL. - Added GDataXMLNode, a shim layer used for GDATA_IPHONE builds - GDataObject extension mechanism now supports extensions for attributes as well as for elements. - GDataObject base class now handles parsing, generation, copying, and comparison of local attributes. - Added namespace utilities to GDataObject: completeNamespaces, which returns a union of an objects declared namespaces with those of its parents, and pruneInheritedNamespaces, which removes an objects namespaces if they are also declared by its parents. - Added "strict" parameter to GDataQuery. - Made changes to support 64-bit builds on Leopard. - Added service support for Google AuthSub tokens. - Added service methods for fetching ACL feeds and entries. - Added a convenience routine for setting an entry's batch ID from a string. - Added YouTube "most_popular" feed ID, and query parameters for location and language restriction. - Moved array category method objectsWithValue:forKeyPath: to GDataUtilities - Added property methods to GDataHTTPFetcher. These are convenient alternatives to storing an NSDictionary in the userData. - Added support for OpenSearch 1.1 elements in feeds. - Added deleteEntry methods to service classes, and changed deleteResorceURL methods to require an ETag. - Replaced Obj-C categories on NSArray (such as -editLink) with methods of GDataObject classes to reduce the number of utility category names in global namespace. - Added more document type entry classes, and added more upload document types to docs sample application. Added folder document support to DocList APIs. - Added -setShouldUploadDataOnly setting to entry base class, allowing clients to upload media data to servers without the XML of the GDataObject. Bugs fixed - Moved common attribute and element text parsing to GDataObject base class, substantially reducing code in many classes derived from GDataObject. - Improved namespaced attribute support in GDataObject. - Improved parsing performance. - Fixed two ivar leaks in GDataServiceBase - GDataObject request generation refactored into its own routine in GDataServiceBase, allowing for authenticated non-XML requests. - No longer testing isPrimary in isEqual method in email, postal address, organization, IM, and phone elements. - Fixed typo in YouTube sample which passed password as client ID (thanks wshao99) - Contact feed class now registered so it can be found for XML feeds with the proper category. - Extended property elements now explcitly declare that they have no default namespace (xmlns="") to avoid child elements from being interpreted as atom elements. - Fixed ContactsSample to check the photo edit link to determine if the photo has changed on the server - HTTP logging now uses NSDateFormatter rather than NSCalendarDate. - Escaping of links now done in http logging. - Replaced NSDecimalSeparator use with NSLocale in parsing NSDecimalNumber. - Fixed a potential GDataHTTPFetcher crash on failed http authentication. - Properly encode slug header on uploads, per Atom RFC 5023 - Reduced some potential leaks on 10.4 due to NSURLConnection bugs. - Fixed string leaks in GDataXMLNode (thanks ct) - Fixed some inner GDataObject data structures being improperly copied as immutable Release 1.4.0 19-March-2008 Changes since 1.3.0 Additions - Added YouTube and Contacts support and sample applications - Each client service now has a unique header which can be included by client applications instead of the full header, such as #import "GData/GDataCalendar.h" rather than #import "GData/GData.h". - Run loop modes can be specified for services and http fetchers, allowing networking during modal dialogs. - Added GDataImplicitValueConstruct as base class for elements with no children or attribtues - Added GDATA_DEFINES header, GDATA_FOUNDATION_ONLY and GDATA_IPHONE conditional compilation tests - Added kUseRegisteredEntryClass constant instead of nil for specifying dynamic lookup of entry objects by "kind" category in classForEntries method - Added rel attribute and URL accessor to GDataFeedLink, and relatedLink category on NSArray in GDataLink - Added routine to generate URLs for Picasa Web Albums contact feeds - Added AreBoolsEqual() utility function - Added GDataUtilities class for general-purpose utility methods Bugs fixed - Google Docs sample now does authenticated document downloads. - Fixed potential crash when a previously-issued auth token becomes invalid. - Fixed leak of category list in feed base class (thanks riggle) - Framework now built as garbage collection-compatible - Unit test failures during garbage collection fixed - Copy methods on GDataObjects now do deep copies - Added missing constant kGDataBatchOperationQuery (thanks riggle) - Non-whitespace control characters are now removed from all attribute values and element text (thanks riggle) - Render pre-11th century dates with a leading zero (thanks riggle) - Renamed "initExtensionDeclarations" as "addExtensionDeclarations" and similar - Unified itemsForDescription mechanism into the GDataObject base class - Unit tests now invoke stringValue whenever needed so they can be omitted from key-value test paths - Added "charset=UTF-8" to the XML header and "Content-Transfer-Encoding=binary" to binary header inside input stream MIME documents - GDataFeedBase now specifies that entry class should be looked up dynamically rather than assuming they are of the class GDataEntryBase. - Removed the deprecated, never-used gd:contactSection support Release 1.3.0 5-December-2007 Changes since 1.2.0 Additions - Added kGDataLinkRelWebContent (thanks riggle) - Calendar events now have separate methods for recurrence and non-recurrence reminders, and calling setRecurrence will move the reminders appropriately - Added batch support for Calendar and Spreadsheet. Calendar sample app now does batch delete of events when more than one event is selected. - Added syncEvent, sequenceNumber, and iCalUID to Calendar event entries. - Added spreadsheet worksheet methods for setting row and column limits, and default values for those in new spreadsheets. - GDataService classes can now optionally follow "next" links when retrieving feeds. This must be enabled by calling setServiceShouldFollowNextLinks: on the service object. - GDataHTTPFetcher and services now optionally automatically retry fetches of some errors. Calling setIsServiceRetryEnabled: enables the retry behavior for services. - Feeds and entries now have methods for adding categories. - GDataCategory includes label convenience method categoryWithLabel: and utility categories on arrays, containsCategoryWithLabel: and categoryLabels. GDataCategory's isEqual: now compares label data as well. - Docs sample app can now delete a document. - Picasa Web sample app now shows how to move a photo to another album. - Added MacOSX version to service request user agent, along with a gzip string expected in the user agent by Google servers. - Added a very simple Calendar "Hello World" example tool by David Oster. Bugs Fixed - Project settings have been adjusted to build on Leopard. - Framework is now built with install location of @loader_path/../Frameworks... instead of @executable_path/../Frameworks/... so it can be loaded by other bundles such as plug-ins. - A specific format is now specified in the header for calling setUserAgent: (like [service setUserAgent:@"CompanyName-AppName-1.0"]) The library now will append the client library version to the user agent string. - GDataObject's isEqual: no longer compares local element names - Fixed PicasaWeb feed URL parameter escaping. - Fixed GDataCategory's categoriesWithScheme: category on NSArray. - Now removes null characters from strings added to XML elements to avoid XML that makes servers unhappy. - Feed, entry, and service classes now call their own methods more reliably to aid subclassing. - Text constructs no longer specify "type=text" since that is implied according to the Atom standard. - Service unit tests now cover http cookies and caching. - HTTP cookies now work with server at localhost. - Now defining -hash on GDataObject for better Leopard compatibility. - Fixed setting the ticket error on authentication errors. Release 1.2.0 15-August-2007 Changes since 1.1.0 Additions - Added support for Google Code Search - Added support for Google Docs document list - Added http logging (see GDataHTTPFetcherLogging.h) - Added ability to provide a connection class for GDataHTTPFetcher - Added routines to let library users override standard classes with their own surrogate subclasses (see GDataServiceBase.h) - Added setProperty:forKey: and propertyForKey: to GDataObject so users can easily attach any data without subclassing - The ticket now retains the posted object for the convenience of the callbacks - Added convenience setters for methods that take GDataTextContruct. For example, framework now supports setTitleWithString:. - Added new PicasaWeb query parameters and all-photos feed URL string. - Added support for Calendar web content gadget preferences - Added support for add/update/remove calendars and calendar subscriptions - Added ascending order parameter to Query base class - Added more Calendar query parameters - Authentication errors are now also returned in the userInfo with the "error" key (thanks ghulands) - Add rel constants for GDataWhere (thanks riggle) - Added a call to clear the last-modified dates tracked by the service object - Added HTMLLink convenience accessor Bugs Fixed - Fixed escaping algorithm for query parameter generation. - Calendar sample app no longer attempts to set the author value for an event, as the author is always the authenticated user - Removed method for retrieving a calendar event feed for a username - Changed addReminders: to addReminder: (thanks riggle) - Return proper numeric types in GDataValueConstruct methods (thanks riggle) - Fixed bugs in finding the proper class to instantiate from a category in XML - Store cookies on redirects (thanks riggle) - Fixed some addExtension methods - Fixed extra retain on arguments during pre-authenticated fetches - Allow subclasses of GDataEntryPhoto to override photoData method - Ensure default application identifier is valid for an http useragent - When a service is asked to retrieve a feed and actually fetches an entry, the service no longer creates a feed to contain the entry, so clients must be explicit about whether a feed or an entry is expected - Fixed convenience method for GDataTextConstruct to return subclass type (thanks ghulands) Release 1.1.0 4-June-2007 Changes since 1.0.0 - Added photos, media, and geo data classes, and Picasa Web Albums service classes - Interfaces now use proper subclasses of GDataValueConstruct to ensure that XML element names are generated from objects created from scratch. - The XMLElement extension methods may now pass nil as default name to their superclass to use the extension's defined default name. - Added ACL feed support, and ACL display and editing in Calendar sample - GDataAtomPubControl convenience creator adds the "app" namespace for the element - Fixed some incorrect selector signatures in the Blogger sample - Changed GDataHTTPFetcher to allow redirects from http to https - Upload of http data may now be monitored with progress callbacks - GData fetcher now can respond to proxy credential challenges - Entry content is now a GDataEntryContent object rather than a text construct - Add accidentally omitted extendedProperty interfaces to GDataEntryCalendarEvent and fix extendedProperty default element name (thanks iwankerl) Release 1.0.0 16-April-2007 Initial public release. Includes standard base elements, entry, feed, service, and query classes, and unit tests. Includes classes for Calendar, Google Base, Spreadsheets.