Take the 2-minute tour ×

Is there any way to use a NSBundle from the documents folder on iOS?

share|improve this question
I don't understand this question. What exactly is it that you want to do? –  Mark Probst Feb 24 '11 at 13:28
add comment

2 Answers

Not sure what the exact question is, either, but here is how I access the local document folder of my app (this is not the documents folder where you store sources your app uses, but the one your app stores local resources) for example, in my app I take pics with the camera and store them to the app's local folder, not the device camera roll, so to get the number of images I do this, in the viewWillAppear method use:

// create the route of localDocumentsFolder
NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//first use the local documents folder
NSString *docsPath = [NSString stringWithFormat:@"%@/Documents", NSHomeDirectory()];
//then use its bundle, indicating its path
NSString *bundleRoot = [[NSBundle bundleWithPath:docsPath] bundlePath];
//then get its content
NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:bundleRoot error:nil];
// this counts the total of jpg images contained in the local document folder of the app
NSArray *onlyJPGs = [dirContents filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self ENDSWITH '.JPG'"]];
// in console tell me how many jpg do I have
NSLog(@"numero de fotos en total: %i", [onlyJPGs count]);

if you want to know what is in the documents folder (the one you can actually browse in the iOS Simulator

via ~/YourUserName/Library/Application Support/iPhone Simulator/versioOfSimulator/Applications/appFolder/Documents)

you would use NSString *bundleRoot = [[NSBundle mainBundle] bundlePath]; instead.

Hope it helps you, mate!

share|improve this answer
add comment

I'm not entirely sure what you're getting at, but the general approach as far as using a file from your application's bundle is to copy it into the document directory as follows:

  1. Check (on first launch, startup or as required) for the presence of the file in your document directory.

  2. If it's not present, copy the "install" version of the file from your bundle into the document directory.

In terms of some sample code, I've a method I use for such purposes as follows:

- (BOOL)copyFromBundle:(NSString *)fileName {

    BOOL copySucceeded = NO;

    // Get our document path.
    NSString *documentPath = [searchPaths objectAtIndex:0];

    // Get the full path to our file.
    NSString *filePath = [documentPath stringByAppendingPathComponent:fileName];

    NSLog(@"copyFromBundle - checking for presence of \"%@\"...", fileName);

    // Get a file manager
    NSFileManager *fileManager = [NSFileManager defaultManager];

    // Does the database already exist? (If not, copy it from our bundle)
    if(![fileManager fileExistsAtPath:filePath]) {

        // Get the bundle location
        NSString *bundleDBPath = [[NSBundle mainBundle] pathForResource:fileName ofType:nil];

        // Copy the DB to our document directory.
        copySucceeded = [fileManager copyItemAtPath:bundleDBPath

        if(!copySucceeded) {
            NSLog(@"copyFromBundle - Unable to copy \"%@\" to document directory.", fileName);
        else {
            NSLog(@"copyFromBundle - Succesfully copied \"%@\" to document directory.", fileName);

    else {
        NSLog(@"copyFromBundle - \"%@\" already exists in document directory - ignoring.", fileName);   

    return copySucceeded;

This will check for the presence of the named file in your document directory and copy the file from your bundle if it doesn't already exist.

share|improve this answer
add comment

Your Answer


