I\'ve been working on getting \"custom skinnable\" interfaces working for my iOS app by bundling up xibs and downloading bundles, and loading the xibs in those bundles.
Excerpt from the Resource Programming Guide:
In UIKit, applications can load nib files only from their main bundle..
Doesn't sound like you can do what you're wanting to do. Or at least, Apple doesn't want you to do it. You can, of course, always download a .bundle
with images and load them as UIImage
or similar, and then save the "active" skin into a known directory which is the directory your app always looks for the images to use when displaying the interface. Changing the skin equates to replacing the image resources at that path with ones from a downloaded bundle.
Following the instructions here works:
loading NSBundle files on iOS
I was just creating the bundle incorrectly!
You need to create the bundle in Xcode though because if you don't, it won't be loaded. To create, Add a New Target to your project, choose Framework & Library -> Bundle, and link to Core Foundation. Then add the xibs you want to upload to the web to the target. Build target, reveal it in Finder, compress, and upload!
First of all if a bundle is not created properly it will not get loaded. So in-order to create a proper bundle below are the steps for creating a bundle:
Add a new target by choosing a template named bundle under OS X -> Framework & Libraries.
Select newly created target and change BaseSDK from OSX to Latest iOS.
Add .xibs, images or other resources which you want to use it from bundle in Build Phrases -> Copy Bundle Resources.
Add CoreFoundation framework in Build Phrases -> Link binary with Libraries.
Compile the target choosing iOS Device.
Save the newly created bundle from Products directory to some place.
Now copy that bundle into your main project. Load a bundle using below code:
NSString *path = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:path];"
You are now set with the new bundle.
After a good amount of time I figured out that this is a commonly faced problem of loading the resources via library. I was missing the step to add "CoreFramework" to link into the resource bundle and also was not copying it to the client application folder. These steps will help loading the resource bundle appropriately. #dsiddhapura's hint helped me identify these issues.