ALAssetsLibraryでiPhone,iPadの写真フォルダにアクセスする

//  MyAssetManager.h

#import <Foundation/Foundation.h>
#import <AssetsLibrary/AssetsLibrary.h>

@interface MyAssetsManager : NSObject 
{
    ALAssetsLibrary *assetsLibrary_;
}

- (void)addObserverForAssetsLibraryChange:(id)anObserver
                                 selector:(SEL)aSelector;
- (void)removeObserverForAssetsLibraryChange:(id)anObserver;
- (void)enumerateAssets;
@end
//  MyAssetManager.m

#import "MyAssetsManager.h"

#define MYASSETSMANAGER_ASSETSNOTIFICATION_NAME @"ALAssetsLibraryChangedNotification" 

@implementation MyAssetsManager
- (id)init
{
    assetsLibrary_ = [[ALAssetsLibrary alloc] init];
    return self;
}

- (void)dealloc
{
    [assetsLibrary_ release];
    [super dealloc];
}

- (void)addObserverForAssetsLibraryChange:(id)anObserver
                                 selector:(SEL)aSelector
{
    NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
    [defaultCenter addObserver:anObserver
                      selector:aSelector
                          name:MYASSETSMANAGER_ASSETSNOTIFICATION_NAME
						object:nil];
}

- (void)removeObserverForAssetsLibraryChange:(id)anObserver
{
    NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
    [defaultCenter removeObserver:anObserver
                             name:MYASSETSMANAGER_ASSETSNOTIFICATION_NAME
                           object:nil];
}

- (void)enumerateAssets
{
    __block NSUInteger assetCount = 0;	
	
    void (^assetResultBlock)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *asset, NSUInteger index, BOOL *stop)
    {
	if (*stop) {
	    NSLog(@"Stop enumerating assets.");
	} else if (!asset) {
	    NSLog(@"End of the group.");
	} else {	
             // TODO
             NSDictionary *urls = [asset valueForProperty:ALAssetPropertyURLs];
             NSLog(@"%06d:%@", assetCount, urls);
             ++assetCount;
	}
    };	
	
    void (^resultBlock)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop)
    {
        if (*stop) {
            NSLog(@"Stop enumerating groups.");
        } else if (!group) {
            NSLog(@"End of enumation.");
        } else {
            ALAssetsFilter *assetsFilter = [ALAssetsFilter allPhotos];
	   [group setAssetsFilter:assetsFilter];	
            NSInteger numberOfAssets = [group numberOfAssets];
            NSString *groupName = [group valueForProperty:ALAssetsGroupPropertyName];
            NSLog(@"%@:num:%d", groupName, numberOfAssets);
            [group enumerateAssetsUsingBlock:assetResultBlock];		
        }
    };
    
    void (^failureBlock)(NSError *) = ^(NSError *error)
    {
        NSLog(@"Exception in enumerating assets. %@", error);
    };
	
    [assetsLibrary_ enumerateGroupsWithTypes:ALAssetsGroupAll
                                  usingBlock:resultBlock
                                failureBlock:failureBlock];
}

@end
#undef MYASSETSMANAGER_ASSETSNOTIFICATION_NAME

TODOコメントあたりでメタデータの取得などいろいろできます。
フィルタや対象グループを変更することで、写真や映像などのフィルタリングが出来ます。
"ALAssetsLibraryChangedNotification"に登録することで写真フォルダの変更等を知ることができます。ただし"ALAssetsLibraryChangedNotification"ではiTunesの同期処理による写真フォルダの変更には対応できないようです。