Canarys | IT Services

Blogs

Implementing iOS Setting Bundle

,
Share

 iOS Setting Bundle:-

Actually sometimes we need to interact our app i.e giving some input value or changing some default value or use default value unless we are not changing that value  in  that case we need to create one app setting which will be outside the app but once we click on Setting in device we can navigate to Setting panel  where we can get out app and we modify something there.Once we will come back to our app after Setting screen , can see the change .So here there are two major things first how to create Setting Bundle and then how to read the Setting Bundle value in our app (app delegate).

First we are going to see how to create Setting Bundle and what are all types of control which we can create in Setting bundle:-
Control type
 Description
Text field
The text field type displays a title (optional) and an editable text field. You can use this type for preferences that require the user to specify a custom string value.
The key for this type is PSTextFieldSpecifier.
Title
The title type displays a read-only string value. You can use this type to display read-only preference values. (If the preference contains cryptic or nonintuitive values, this type lets you map the possible values to custom strings.)
The key for this type is PSTitleValueSpecifier.
Toggle switch
The toggle switch type displays an ON/OFF toggle button. You can use this type to configure a preference that can have only one of two values. Although you typically use this type to represent preferences containing Boolean values, you can also use it with preferences containing non-Boolean values.
The key for this type is PSToggleSwitchSpecifier.
Slider
The slider type displays a slider control. You can use this type for a preference that represents a range of values. The value for this type is a real number whose minimum and maximum value you specify.
The key for this type is PSSliderSpecifier.
Multivalue
The multivalue type lets the user select one value from a list of values. You can use this type for a preference that supports a set of mutually exclusive values. The values can be of any type.
The key for this type is PSMultiValueSpecifier.
Group
The group type is for organizing groups of preferences on a single page. The group type does not represent a configurable preference. It simply contains a title string that is displayed immediately before one or more configurable preferences.
The key for this type is PSGroupSpecifier.
Child pane
The child pane type lets the user navigate to a new page of preferences. You use this type to implement hierarchical preferences. For more information on how you configure and use this preference type.
The key for this type is PSChildPaneSpecifier.
Here we are going to see an example where we are creating one input field as textfield and setting some default value.
This is format of Root.plist file 
    

        

        Title

        

        Here we can give our app name

        

        StringsTable

        

        Root

        

        PreferenceSpecifiers

        

        
            
                Type

                

                PSGroupSpecifier

                

                Title

                

                Option

                

            

            

            
                DefaultValue
                Here we can set the default value
            

                

                Type

                

                PSTextFieldSpecifier

                

                Title

                

                Timeout

                

                Key

                

                name_p_preference

                

                DefaultValue

                

                240

                

                IsSecure

                

                

                

                KeyboardType

                

                NumberPad

                

                AutocapitalizationType

                

                None

                

                AutocorrectionType

                

                No
            

            

        
    
So now we are done with Root,plist file.It’s time to create one empty folder and put this Root.plist file in that,after that change the name of folder as Settings.bundle,while changing name you will be getting this  message prompt,please click on Add and then go ahead.
first
After Click on Add we will get our Settings.bundle like this:-
second1
Now we are done with Settings.bundle ,please add this to project just drag and drop into project.After running app when we will navigate into Setting screen we can get our app setting something like this.In this example i have created one app TestApp setting which is appearing like this.
third
Here we are going to see how to read default(if any) value or entered value from Setting bundle

NSString *kFirstNameKey= @”name_p_preference”;

//for reading default value for Terminal
    NSString *testValue = [[NSUserDefaults standardUserDefaultsstringForKey:kFirstNameKey];
if (testValue == nil)
{
// no default values have been set, create them here based on what’s in our Settings bundle info
NSString *pathStr = [[NSBundle mainBundlebundlePath];
NSString *settingsBundlePath = [pathStr stringByAppendingPathComponent:@”Settings.bundle”];
NSString *finalPath = [settingsBundlePath stringByAppendingPathComponent:@”Root.plist”];
NSDictionary *settingsDict = [NSDictionary dictionaryWithContentsOfFile:finalPath];
NSArray *prefSpecifierArray = [settingsDict objectForKey:@”PreferenceSpecifiers”];

        

NSString *firstNameDefault = nil;
        
NSDictionary *prefItem;
for (prefItem in prefSpecifierArray)
{
NSString *keyValueStr = [prefItem objectForKey:@”Key”];
id defaultValue = [prefItem objectForKey:@”DefaultValue”];

            

if ([keyValueStr isEqualToString:kFirstNameKey])
{
firstNameDefault = defaultValue;
}

            

       
// since no default values have been set (i.e. no preferences file created), create it here
  

        NSString *defaultterminalval = [[NSUserDefaults standardUserDefaultsstringForKey:kFirstNameKey];

       //here we can store this defaultterminalval to use somewhere else as per our need

        [[NSUserDefaults standardUserDefaults]setObject:defaultterminalval forKey:@”TerminalTimeOut”];

}

    else
    {
        NSString *getterminaltimeout=[NSString stringWithFormat:@”%@”,[[NSUserDefaults standardUserDefaultsvalueForKey:@”name_p_preference”]];
   
   //in this block we are reading the value which has been entered from setting screen
  }

Leave a Reply

Your email address will not be published. Required fields are marked *

Reach Us

With Canarys,
Let’s Plan. Grow. Strive. Succeed.