What is NSBundle and mainBundle in Objective-C?
Suppose our code is:
NSString *myFile=[[NSBundle mainBundle]pathForResource:@"subjects" ofType:@"plist"];
We create subject.plist in Xcode (File> new> new file> iOS> resource> property list) and copy it into our supporting folder.
This is really a way of getting to files installed on the iOS device when we do not know where they are. It's a way to obtain our subject.plist
file, which is a part of the internal Bundle or internal package for our application. We don't have direct access to a file system on an iOS device, so this is the way we get hold of our own assets.
A bundle is a structure used for packaging software on Mac OS X. Applications, frameworks and plug-ins are all different kinds of bundles. Bundles may contain executable code, resources, header files and other stuff (including other bundles) if you so wish.
Bundles are implemented as directory trees with a defined structure. Applications, frameworks and plug-ins each have their own variation on the structure of the tree. However, to the Finder, bundles look like single files.
The main bundle is simply the bundle of the application that is running. So, for instance, the main bundle of the Apple mail program is /Applications/Mail.app.
There is a good apple documentation about bundles. Bundle Programming Guide