forked from mirrors/linphone-iphone
Merge branch 'inappsettings' into new_ui
Conflicts: Classes/FirstLoginViewController.m Classes/InCallViewController.m Classes/LinphoneAppDelegate.h Classes/LinphoneAppDelegate.m Classes/LinphoneUI/LinphoneManager.h Classes/LinphoneUI/LinphoneManager.m Classes/MainScreenWithVideoPreview.m Classes/PhoneViewController.m PhoneMainView.xib linphone.xcodeproj/project.pbxproj
This commit is contained in:
commit
44e438ab33
67 changed files with 5604 additions and 851 deletions
|
|
@ -76,8 +76,8 @@
|
|||
//[error show];
|
||||
//[error release];
|
||||
//erase uername passwd
|
||||
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"username_preference"];
|
||||
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"password_preference"];
|
||||
[[LinphoneManager instance].settingsStore setObject:Nil forKey:@"username_preference"];
|
||||
[[LinphoneManager instance].settingsStore setObject:Nil forKey:@"password_preference"];
|
||||
break;
|
||||
}
|
||||
case LinphoneRegistrationProgress: {
|
||||
|
|
@ -124,9 +124,8 @@
|
|||
[error show];
|
||||
[error release];
|
||||
} else {
|
||||
[[NSUserDefaults standardUserDefaults] setObject:username.text forKey:@"username_preference"];
|
||||
[[NSUserDefaults standardUserDefaults] setObject:passwd.text forKey:@"password_preference"];
|
||||
[[LinphoneManager instance] reconfigureLinphoneIfNeeded:nil];
|
||||
[[LinphoneManager instance].settingsStore setObject:username.text forKey:@"username_preference"];
|
||||
[[LinphoneManager instance].settingsStore setObject:passwd.text forKey:@"password_preference"];
|
||||
[self.activityIndicator setHidden:false];
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
<string key="NSFrameSize">{320, 480}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView"/>
|
||||
<object class="NSColor" key="IBUIBackgroundColor">
|
||||
<int key="NSColorSpace">1</int>
|
||||
<bytes key="NSRGB">MSAxIDEAA</bytes>
|
||||
|
|
@ -143,46 +144,61 @@
|
|||
<nil key="activeLocalization"/>
|
||||
<dictionary class="NSMutableDictionary" key="localizations"/>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">12</int>
|
||||
<int key="maxID">16</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">IASKAbstractSettingsStore</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">./Classes/IASKAbstractSettingsStore.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">LinphoneAppDelegate</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="NSMutableDictionary" key="outlets">
|
||||
<string key="NS.key.0">window</string>
|
||||
<string key="NS.object.0">UIWindow</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
|
||||
<string key="NS.key.0">window</string>
|
||||
<object class="IBToOneOutletInfo" key="NS.object.0">
|
||||
<dictionary class="NSMutableDictionary" key="outlets">
|
||||
<string key="settings">LinphoneCoreSettingsStore</string>
|
||||
<string key="window">UIWindow</string>
|
||||
</dictionary>
|
||||
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
|
||||
<object class="IBToOneOutletInfo" key="settings">
|
||||
<string key="name">settings</string>
|
||||
<string key="candidateClassName">LinphoneCoreSettingsStore</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo" key="window">
|
||||
<string key="name">window</string>
|
||||
<string key="candidateClassName">UIWindow</string>
|
||||
</object>
|
||||
</object>
|
||||
</dictionary>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">./Classes/LinphoneAppDelegate.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">LinphoneCoreSettingsStore</string>
|
||||
<string key="superclassName">IASKAbstractSettingsStore</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">./Classes/LinphoneCoreSettingsStore.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">PhoneMainView</string>
|
||||
<string key="superclassName">UIViewController</string>
|
||||
<dictionary class="NSMutableDictionary" key="outlets">
|
||||
<string key="addCallTabBar">UIView</string>
|
||||
<string key="callTabBarController">UIViewController</string>
|
||||
<string key="contentView">UIView</string>
|
||||
<string key="incomingCallTabBarController">UIViewController</string>
|
||||
<string key="mainTabBarController">UIViewController</string>
|
||||
<string key="statusBarController">UIViewController</string>
|
||||
<string key="statusBarView">UIView</string>
|
||||
<string key="stateBarController">UIViewController</string>
|
||||
<string key="stateBarView">UIView</string>
|
||||
<string key="tabBarView">UIView</string>
|
||||
</dictionary>
|
||||
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
|
||||
<object class="IBToOneOutletInfo" key="addCallTabBar">
|
||||
<string key="name">addCallTabBar</string>
|
||||
<string key="candidateClassName">UIView</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo" key="callTabBarController">
|
||||
<string key="name">callTabBarController</string>
|
||||
<string key="candidateClassName">UIViewController</string>
|
||||
|
|
@ -191,16 +207,20 @@
|
|||
<string key="name">contentView</string>
|
||||
<string key="candidateClassName">UIView</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo" key="incomingCallTabBarController">
|
||||
<string key="name">incomingCallTabBarController</string>
|
||||
<string key="candidateClassName">UIViewController</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo" key="mainTabBarController">
|
||||
<string key="name">mainTabBarController</string>
|
||||
<string key="candidateClassName">UIViewController</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo" key="statusBarController">
|
||||
<string key="name">statusBarController</string>
|
||||
<object class="IBToOneOutletInfo" key="stateBarController">
|
||||
<string key="name">stateBarController</string>
|
||||
<string key="candidateClassName">UIViewController</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo" key="statusBarView">
|
||||
<string key="name">statusBarView</string>
|
||||
<object class="IBToOneOutletInfo" key="stateBarView">
|
||||
<string key="name">stateBarView</string>
|
||||
<string key="candidateClassName">UIView</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo" key="tabBarView">
|
||||
|
|
|
|||
|
|
@ -19,7 +19,9 @@
|
|||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <AddressBookUI/ABPeoplePickerNavigationController.h>
|
||||
#import "CoreTelephony/CTCallCenter.h"
|
||||
#import <CoreTelephony/CTCallCenter.h>
|
||||
|
||||
#import "LinphoneCoreSettingsStore.h"
|
||||
|
||||
@interface LinphoneAppDelegate : NSObject <UIApplicationDelegate,UIAlertViewDelegate> {
|
||||
UIWindow *window;
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#import "ConsoleViewController.h"
|
||||
#import "MoreViewController.h"
|
||||
#import "LinphoneCoreSettingsStore.h"
|
||||
|
||||
#include "LinphoneManager.h"
|
||||
#include "linphonecore.h"
|
||||
|
|
@ -78,6 +79,8 @@ int __aeabi_idiv(int a, int b) {
|
|||
|
||||
}
|
||||
- (void)applicationDidEnterBackground:(UIApplication *)application {
|
||||
if ([[LinphoneManager instance] settingsStore]!=Nil)
|
||||
[[[LinphoneManager instance] settingsStore] synchronize];
|
||||
if (![[LinphoneManager instance] enterBackgroundMode]) {
|
||||
// destroying eventHandler if app cannot go in background.
|
||||
// Otherwise if a GSM call happen and Linphone is resumed,
|
||||
|
|
@ -130,41 +133,15 @@ int __aeabi_idiv(int a, int b) {
|
|||
}
|
||||
|
||||
- (void)loadDefaultSettings:(NSDictionary *) appDefaults {
|
||||
|
||||
NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
|
||||
if(!settingsBundle) {
|
||||
NSLog(@"Could not find Settings.bundle");
|
||||
return;
|
||||
}
|
||||
|
||||
NSMutableDictionary *rootSettings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]];
|
||||
NSMutableDictionary *audioSettings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"audio.plist"]];
|
||||
NSMutableDictionary *videoSettings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"video.plist"]];
|
||||
NSMutableDictionary *advancedSettings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Advanced.plist"]];
|
||||
|
||||
NSMutableArray *preferences = [rootSettings objectForKey:@"PreferenceSpecifiers"];
|
||||
[preferences addObjectsFromArray:[audioSettings objectForKey:@"PreferenceSpecifiers"]];
|
||||
[preferences addObjectsFromArray:[videoSettings objectForKey:@"PreferenceSpecifiers"]];
|
||||
[preferences addObjectsFromArray:[advancedSettings objectForKey:@"PreferenceSpecifiers"]];
|
||||
|
||||
NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];
|
||||
|
||||
for(NSDictionary *prefSpecification in preferences) {
|
||||
NSString *key = [prefSpecification objectForKey:@"Key"];
|
||||
if(key && [prefSpecification objectForKey:@"DefaultValue"]) {
|
||||
[defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key];
|
||||
}
|
||||
}
|
||||
[defaultsToRegister addEntriesFromDictionary:appDefaults];
|
||||
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister];
|
||||
[defaultsToRegister release];
|
||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||
[[[LinphoneManager instance] settingsStore] synchronize];
|
||||
}
|
||||
|
||||
- (void)setupUI {
|
||||
|
||||
// Change to default view
|
||||
[[LinphoneManager instance] changeView: PhoneView_Dialer];
|
||||
|
||||
[UIDevice currentDevice].batteryMonitoringEnabled = YES;
|
||||
}
|
||||
|
||||
- (void)setupGSMInteraction {
|
||||
|
|
@ -178,25 +155,16 @@ int __aeabi_idiv(int a, int b) {
|
|||
}
|
||||
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
|
||||
NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||
@"NO", @"enable_first_login_view_preference", //
|
||||
#ifdef HAVE_AMR
|
||||
@"YES",@"amr_8k_preference", // enable amr by default if compiled with
|
||||
#endif
|
||||
#ifdef HAVE_G729
|
||||
@"YES",@"g729_preference", // enable amr by default if compiled with
|
||||
#endif
|
||||
//@"+33",@"countrycode_preference",
|
||||
nil];
|
||||
|
||||
[self loadDefaultSettings: appDefaults];
|
||||
NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys: nil];
|
||||
// Put your default NSUserDefaults settings in the dictionary above.
|
||||
|
||||
if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]
|
||||
&& [UIApplication sharedApplication].applicationState == UIApplicationStateBackground
|
||||
&& [[NSUserDefaults standardUserDefaults] boolForKey:@"disable_autoboot_preference"]) {
|
||||
&& ![[NSUserDefaults standardUserDefaults] boolForKey:@"start_at_boot_preference"]) {
|
||||
// autoboot disabled, doing nothing
|
||||
} else {
|
||||
[self startApplication];
|
||||
[self loadDefaultSettings: appDefaults];
|
||||
}
|
||||
|
||||
return YES;
|
||||
|
|
@ -210,7 +178,7 @@ int __aeabi_idiv(int a, int b) {
|
|||
[self setupUI];
|
||||
|
||||
[[LinphoneManager instance] startLibLinphone];
|
||||
|
||||
|
||||
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound];
|
||||
|
||||
[self setupGSMInteraction];
|
||||
|
|
|
|||
32
Classes/LinphoneCoreSettingsStore.h
Normal file
32
Classes/LinphoneCoreSettingsStore.h
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
/* LinphoneCoreSettingsStore.h
|
||||
*
|
||||
* Copyright (C) 2012 Belledonne Comunications, Grenoble, France
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "IASKSettingsStore.h"
|
||||
|
||||
#import "LinphoneManager.h"
|
||||
|
||||
@interface LinphoneCoreSettingsStore : IASKAbstractSettingsStore {
|
||||
NSDictionary *dict;
|
||||
NSDictionary *changedDict;
|
||||
}
|
||||
|
||||
-(void) transformLinphoneCoreToKeys;
|
||||
|
||||
@end
|
||||
412
Classes/LinphoneCoreSettingsStore.m
Normal file
412
Classes/LinphoneCoreSettingsStore.m
Normal file
|
|
@ -0,0 +1,412 @@
|
|||
/* LinphoneCoreSettingsStore.m
|
||||
*
|
||||
* Copyright (C) 2012 Belledonne Comunications, Grenoble, France
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#import "LinphoneCoreSettingsStore.h"
|
||||
|
||||
#include "lpconfig.h"
|
||||
|
||||
extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args);
|
||||
|
||||
@implementation LinphoneCoreSettingsStore
|
||||
|
||||
- (void)handleMigration{
|
||||
|
||||
NSUserDefaults *oldconfig=[NSUserDefaults standardUserDefaults];
|
||||
NSArray *allkeys=[[oldconfig dictionaryRepresentation] allKeys];
|
||||
for(NSString* key in allkeys){
|
||||
NSLog(@"Migrating old config item %@ to in app settings.",key);
|
||||
[self setObject:[oldconfig objectForKey:key] forKey:key];
|
||||
}
|
||||
[self synchronize];
|
||||
NSLog(@"Migration done");
|
||||
}
|
||||
|
||||
- (id)init{
|
||||
self = [super init];
|
||||
if (self){
|
||||
dict=[[NSMutableDictionary alloc] init];
|
||||
changedDict=[[NSMutableDictionary alloc] init];
|
||||
LinphoneCore *lc=[LinphoneManager getLc];
|
||||
if (lp_config_get_int(linphone_core_get_config(lc),"app","config_migrated",0)==0){
|
||||
[self handleMigration];
|
||||
lp_config_set_int(linphone_core_get_config(lc),"app","config_migrated",1);
|
||||
}
|
||||
[self transformLinphoneCoreToKeys];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc{
|
||||
[super dealloc];
|
||||
[dict release];
|
||||
[changedDict release];
|
||||
}
|
||||
|
||||
- (void)transformKeysToLinphoneCore{
|
||||
//LinphoneCore *lc=[LinphoneManager getLc];
|
||||
|
||||
}
|
||||
|
||||
- (void)setString:(const char*)value forKey:(NSString*)key{
|
||||
id obj=Nil;
|
||||
if (value) obj=[[NSString alloc] initWithCString:value encoding:[NSString defaultCStringEncoding] ];
|
||||
[self setObject: obj forKey:key];
|
||||
}
|
||||
|
||||
- (NSString*)stringForKey:(NSString*) key{
|
||||
return [self objectForKey: key];
|
||||
}
|
||||
|
||||
- (void)transformCodecsToKeys: (const MSList *)codecs{
|
||||
LinphoneCore *lc=[LinphoneManager getLc];
|
||||
const MSList *elem=codecs;
|
||||
for(;elem!=NULL;elem=elem->next){
|
||||
PayloadType *pt=(PayloadType*)elem->data;
|
||||
NSString *pref=[LinphoneManager getPrefForCodec:pt->mime_type withRate:pt->clock_rate];
|
||||
if (pref){
|
||||
[self setBool: linphone_core_payload_type_enabled(lc,pt) forKey: pref];
|
||||
}else{
|
||||
ms_warning("Codec %s/%i supported by core is not shown in iOS app config view.",
|
||||
pt->mime_type,pt->clock_rate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)transformLinphoneCoreToKeys{
|
||||
LinphoneCore *lc=[LinphoneManager getLc];
|
||||
LinphoneProxyConfig *cfg=NULL;
|
||||
linphone_core_get_default_proxy(lc,&cfg);
|
||||
if (cfg){
|
||||
const char *identity=linphone_proxy_config_get_identity(cfg);
|
||||
LinphoneAddress *addr=linphone_address_new(identity);
|
||||
if (addr){
|
||||
const char *proxy=linphone_proxy_config_get_addr(cfg);
|
||||
LinphoneAddress *proxy_addr=linphone_address_new(proxy);
|
||||
const char *port=linphone_address_get_port(proxy_addr);
|
||||
|
||||
[self setString: linphone_address_get_username(addr) forKey:@"username_preference"];
|
||||
[self setString: linphone_address_get_domain(addr) forKey:@"domain_preference"];
|
||||
if (strcmp(linphone_address_get_domain(addr),linphone_address_get_domain(proxy_addr))!=0
|
||||
|| port!=NULL){
|
||||
char tmp[256]={0};
|
||||
if (port!=NULL) {
|
||||
snprintf(tmp,sizeof(tmp)-1,"%s:%s",linphone_address_get_domain(proxy_addr),port);
|
||||
}else snprintf(tmp,sizeof(tmp)-1,"%s",linphone_address_get_domain(proxy_addr));
|
||||
[self setString: tmp forKey:@"proxy_preference"];
|
||||
}
|
||||
linphone_address_destroy(addr);
|
||||
linphone_address_destroy(proxy_addr);
|
||||
|
||||
[self setBool: (linphone_proxy_config_get_route(cfg)!=NULL) forKey:@"outbound_proxy_preference"];
|
||||
|
||||
}
|
||||
}
|
||||
{
|
||||
LCSipTransports tp;
|
||||
const char *tname="udp";
|
||||
linphone_core_get_sip_transports(lc, &tp);
|
||||
if (tp.udp_port>0) tname="udp";
|
||||
else if (tp.tcp_port>0) tname="tcp";
|
||||
else if (tp.tls_port>0) tname="tls";
|
||||
[self setString: tname forKey:@"transport_preference"];
|
||||
}
|
||||
{
|
||||
LinphoneAuthInfo *ai;
|
||||
const MSList *elem=linphone_core_get_auth_info_list(lc);
|
||||
if (elem && (ai=(LinphoneAuthInfo*)elem->data)){
|
||||
[self setString: linphone_auth_info_get_passwd(ai) forKey:@"password_preference"];
|
||||
}
|
||||
}
|
||||
{
|
||||
[self setString: linphone_core_get_stun_server(lc) forKey:@"stun_preference"];
|
||||
}
|
||||
|
||||
{
|
||||
[self transformCodecsToKeys: linphone_core_get_audio_codecs(lc)];
|
||||
[self transformCodecsToKeys: linphone_core_get_video_codecs(lc)];
|
||||
}
|
||||
|
||||
{
|
||||
LinphoneMediaEncryption menc=linphone_core_get_media_encryption(lc);
|
||||
const char *val;
|
||||
switch(menc){
|
||||
LinphoneMediaEncryptionSRTP:
|
||||
val="SRTP";
|
||||
break;
|
||||
LinphoneMediaEncryptionZRTP:
|
||||
val="ZRTP";
|
||||
break;
|
||||
default:
|
||||
val="None";
|
||||
}
|
||||
[self setString:val forKey:@"media_encryption_preference"];
|
||||
}
|
||||
|
||||
[self setBool: lp_config_get_int(linphone_core_get_config(lc),"app","debugenable_preference",0) forKey:@"debugenable_preference"];
|
||||
[self setBool: lp_config_get_int(linphone_core_get_config(lc),"app","check_config_disable_preference",0) forKey:@"check_config_disable_preference"];
|
||||
[self setBool: lp_config_get_int(linphone_core_get_config(lc),"app","wifi_only_preference",0) forKey:@"wifi_only_preference"];
|
||||
[self setBool: lp_config_get_int(linphone_core_get_config(lc),"app","backgroundmode_preference",TRUE) forKey:@"backgroundmode_preference"];
|
||||
/*keep this one also in the standardUserDefaults so that it can be read before starting liblinphone*/
|
||||
BOOL start_at_boot;
|
||||
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"start_at_boot_preference"]==Nil)
|
||||
start_at_boot=TRUE;
|
||||
else start_at_boot=[[NSUserDefaults standardUserDefaults] boolForKey:@"start_at_boot_preference"];
|
||||
[self setBool: start_at_boot forKey:@"start_at_boot_preference"];
|
||||
|
||||
|
||||
|
||||
if (linphone_core_tunnel_available()){
|
||||
/*FIXME: enhance linphonecore API to handle tunnel more easily in applications */
|
||||
LinphoneTunnel *tun=linphone_core_get_tunnel(lc);
|
||||
//[self setString: linphone_tunnel_get_servers(tun) forKey:tunnel_address_preference];
|
||||
//[self setInteger: blabla forKey:tunnel_port_preference];
|
||||
//[self setString: forKey:@"tunnel_enabled_preference"];
|
||||
}
|
||||
{
|
||||
const LinphoneVideoPolicy *pol;
|
||||
[self setBool: linphone_core_video_enabled(lc) forKey:@"enable_video_preference"];
|
||||
pol=linphone_core_get_video_policy(lc);
|
||||
[self setBool:(pol->automatically_accept && pol->automatically_initiate) forKey:@"start_video_preference"];
|
||||
}
|
||||
if (lp_config_get_int(linphone_core_get_config(lc),"app","debugenable_preference",0))
|
||||
linphone_core_enable_logs_with_cb((OrtpLogFunc)linphone_iphone_log_handler);
|
||||
|
||||
[changedDict release];
|
||||
changedDict=[[NSMutableDictionary alloc] init];
|
||||
}
|
||||
|
||||
- (void)setObject:(id)value forKey:(NSString *)key {
|
||||
[dict setValue:value forKey:key];
|
||||
[changedDict setValue:[NSNumber numberWithBool:TRUE] forKey:key];
|
||||
}
|
||||
|
||||
- (id)objectForKey:(NSString*)key {
|
||||
return [dict valueForKey:key];
|
||||
}
|
||||
|
||||
- (BOOL)valueChangedForKey:(NSString*)key{
|
||||
return [ [changedDict valueForKey:key] boolValue];
|
||||
}
|
||||
|
||||
- (void)synchronizeAccount{
|
||||
LinphoneCore *lc=[LinphoneManager getLc];
|
||||
LinphoneManager* lLinphoneMgr = [LinphoneManager instance];
|
||||
LinphoneProxyConfig* proxyCfg=NULL;
|
||||
/* unregister before modifying any settings */
|
||||
{
|
||||
linphone_core_get_default_proxy(lc, &proxyCfg);
|
||||
|
||||
if (proxyCfg) {
|
||||
// this will force unregister WITHOUT destorying the proxyCfg object
|
||||
linphone_proxy_config_edit(proxyCfg);
|
||||
|
||||
int i=0;
|
||||
while (linphone_proxy_config_get_state(proxyCfg)!=LinphoneRegistrationNone &&
|
||||
linphone_proxy_config_get_state(proxyCfg)!=LinphoneRegistrationCleared &&
|
||||
linphone_proxy_config_get_state(proxyCfg)!=LinphoneRegistrationFailed &&
|
||||
i++<40 ) {
|
||||
linphone_core_iterate(lc);
|
||||
usleep(10000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NSString* transport = [self stringForKey:@"transport_preference"];
|
||||
|
||||
LCSipTransports transportValue={0};
|
||||
if (transport!=nil) {
|
||||
if (linphone_core_get_sip_transports(lc, &transportValue)) {
|
||||
ms_error("cannot get current transport");
|
||||
}
|
||||
// Only one port can be set at one time, the others's value is 0
|
||||
if ([transport isEqualToString:@"tcp"]) {
|
||||
if (transportValue.tcp_port == 0) transportValue.tcp_port=transportValue.udp_port + transportValue.tls_port;
|
||||
transportValue.udp_port=0;
|
||||
transportValue.tls_port=0;
|
||||
} else if ([transport isEqualToString:@"udp"]){
|
||||
if (transportValue.udp_port == 0) transportValue.udp_port=transportValue.tcp_port + transportValue.tls_port;
|
||||
transportValue.tcp_port=0;
|
||||
transportValue.tls_port=0;
|
||||
} else if ([transport isEqualToString:@"tls"]){
|
||||
if (transportValue.tls_port == 0) transportValue.tls_port=transportValue.udp_port + transportValue.tcp_port;
|
||||
transportValue.tcp_port=0;
|
||||
transportValue.udp_port=0;
|
||||
} else {
|
||||
ms_error("unexpected transport [%s]",[transport cStringUsingEncoding:[NSString defaultCStringEncoding]]);
|
||||
}
|
||||
if (linphone_core_set_sip_transports(lc, &transportValue)) {
|
||||
ms_error("cannot set transport");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//configure sip account
|
||||
|
||||
//mandatory parameters
|
||||
|
||||
NSString* username = [self stringForKey:@"username_preference"];
|
||||
NSString* domain = [self stringForKey:@"domain_preference"];
|
||||
NSString* accountPassword = [self stringForKey:@"password_preference"];
|
||||
bool isOutboundProxy= [self boolForKey:@"outbound_proxy_preference"];
|
||||
|
||||
|
||||
//clear auth info list
|
||||
linphone_core_clear_all_auth_info(lc);
|
||||
//clear existing proxy config
|
||||
linphone_core_clear_proxy_config(lc);
|
||||
if (username && [username length] >0 && domain && [domain length]>0) {
|
||||
const char* identity = [[NSString stringWithFormat:@"sip:%@@%@",username,domain] cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
const char* password = [accountPassword cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
|
||||
NSString* proxyAddress = [self stringForKey:@"proxy_preference"];
|
||||
if ((!proxyAddress || [proxyAddress length] <1 ) && domain) {
|
||||
proxyAddress = [NSString stringWithFormat:@"sip:%@",domain] ;
|
||||
} else {
|
||||
proxyAddress = [NSString stringWithFormat:@"sip:%@",proxyAddress] ;
|
||||
}
|
||||
|
||||
const char* proxy = [proxyAddress cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
|
||||
NSString* prefix = [self stringForKey:@"prefix_preference"];
|
||||
bool substitute_plus_by_00 = [self boolForKey:@"substitute_+_by_00_preference"];
|
||||
//possible valid config detected
|
||||
|
||||
proxyCfg = linphone_proxy_config_new();
|
||||
|
||||
// add username password
|
||||
LinphoneAddress *from = linphone_address_new(identity);
|
||||
LinphoneAuthInfo *info;
|
||||
if (from !=0){
|
||||
info=linphone_auth_info_new(linphone_address_get_username(from),NULL,password,NULL,NULL);
|
||||
linphone_core_add_auth_info(lc,info);
|
||||
}
|
||||
linphone_address_destroy(from);
|
||||
|
||||
// configure proxy entries
|
||||
linphone_proxy_config_set_identity(proxyCfg,identity);
|
||||
linphone_proxy_config_set_server_addr(proxyCfg,proxy);
|
||||
linphone_proxy_config_enable_register(proxyCfg,true);
|
||||
BOOL isWifiOnly = [self boolForKey:@"wifi_only_preference"];
|
||||
|
||||
if (isWifiOnly && lLinphoneMgr.connectivity == wwan) {
|
||||
linphone_proxy_config_expires(proxyCfg, 0);
|
||||
} else {
|
||||
linphone_proxy_config_expires(proxyCfg, lLinphoneMgr.defaultExpires);
|
||||
}
|
||||
|
||||
if (isOutboundProxy)
|
||||
linphone_proxy_config_set_route(proxyCfg,proxy);
|
||||
|
||||
if ([prefix length]>0) {
|
||||
linphone_proxy_config_set_dial_prefix(proxyCfg, [prefix cStringUsingEncoding:[NSString defaultCStringEncoding]]);
|
||||
}
|
||||
linphone_proxy_config_set_dial_escape_plus(proxyCfg,substitute_plus_by_00);
|
||||
|
||||
linphone_core_add_proxy_config(lc,proxyCfg);
|
||||
//set to default proxy
|
||||
linphone_core_set_default_proxy(lc,proxyCfg);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)synchronize {
|
||||
LinphoneCore *lc=[LinphoneManager getLc];
|
||||
|
||||
if (lc==NULL) return YES;
|
||||
BOOL account_changed;
|
||||
|
||||
account_changed=[self valueChangedForKey:@"username_preference"]
|
||||
|| [self valueChangedForKey:@"password_preference"]
|
||||
|| [self valueChangedForKey:@"domain_preference"]
|
||||
|| [self valueChangedForKey:@"proxy_preference"]
|
||||
|| [self valueChangedForKey:@"outbound_proxy_preference"]
|
||||
|| [self valueChangedForKey:@"transport_preference"]
|
||||
|| [self valueChangedForKey:@"prefix_preference"]
|
||||
|| [self valueChangedForKey:@"substitute_+_by_00_preference"];
|
||||
|
||||
if (account_changed)
|
||||
[self synchronizeAccount];
|
||||
|
||||
//Configure Codecs
|
||||
|
||||
PayloadType *pt;
|
||||
const MSList *elem;
|
||||
|
||||
for (elem=linphone_core_get_audio_codecs(lc);elem!=NULL;elem=elem->next){
|
||||
pt=(PayloadType*)elem->data;
|
||||
NSString *pref=[LinphoneManager getPrefForCodec:pt->mime_type withRate:pt->clock_rate];
|
||||
linphone_core_enable_payload_type(lc,pt,[self boolForKey: pref]);
|
||||
}
|
||||
for (elem=linphone_core_get_video_codecs(lc);elem!=NULL;elem=elem->next){
|
||||
pt=(PayloadType*)elem->data;
|
||||
NSString *pref=[LinphoneManager getPrefForCodec:pt->mime_type withRate:pt->clock_rate];
|
||||
linphone_core_enable_payload_type(lc,pt,[self boolForKey: pref]);
|
||||
}
|
||||
|
||||
bool enableVideo = [self boolForKey:@"enable_video_preference"];
|
||||
linphone_core_enable_video(lc, enableVideo, enableVideo);
|
||||
|
||||
NSString *menc = [self stringForKey:@"media_encryption_preference"];
|
||||
if (menc && [menc compare:@"SRTP"])
|
||||
linphone_core_set_media_encryption(lc, LinphoneMediaEncryptionSRTP);
|
||||
else if (menc && [menc compare:@"ZRTP"])
|
||||
linphone_core_set_media_encryption(lc, LinphoneMediaEncryptionZRTP);
|
||||
else linphone_core_set_media_encryption(lc, LinphoneMediaEncryptionNone);
|
||||
|
||||
NSString* stun_server = [self stringForKey:@"stun_preference"];
|
||||
if ([stun_server length]>0){
|
||||
linphone_core_set_stun_server(lc,[stun_server cStringUsingEncoding:[NSString defaultCStringEncoding]]);
|
||||
linphone_core_set_firewall_policy(lc, LinphonePolicyUseStun);
|
||||
}else{
|
||||
linphone_core_set_stun_server(lc, NULL);
|
||||
linphone_core_set_firewall_policy(lc, LinphonePolicyNoFirewall);
|
||||
}
|
||||
|
||||
LinphoneVideoPolicy policy;
|
||||
policy.automatically_accept = [self boolForKey:@"start_video_preference"];;
|
||||
policy.automatically_initiate = [self boolForKey:@"start_video_preference"];
|
||||
linphone_core_set_video_policy(lc, &policy);
|
||||
|
||||
UIDevice* device = [UIDevice currentDevice];
|
||||
bool backgroundSupported = false;
|
||||
if ([device respondsToSelector:@selector(isMultitaskingSupported)])
|
||||
backgroundSupported = [device isMultitaskingSupported];
|
||||
BOOL isbackgroundModeEnabled;
|
||||
if (backgroundSupported) {
|
||||
isbackgroundModeEnabled = [self boolForKey:@"backgroundmode_preference"];
|
||||
} else {
|
||||
isbackgroundModeEnabled=false;
|
||||
}
|
||||
lp_config_set_int(linphone_core_get_config(lc),"app","backgroundmode_preference",isbackgroundModeEnabled);
|
||||
|
||||
BOOL debugmode=[self boolForKey:@"debugenable_preference"];
|
||||
lp_config_set_int(linphone_core_get_config(lc),"app","debugenable_preference",debugmode);
|
||||
if (debugmode) linphone_core_enable_logs_with_cb((OrtpLogFunc)linphone_iphone_log_handler);
|
||||
else linphone_core_disable_logs();
|
||||
|
||||
/*keep this one also in the standardUserDefaults so that it can be read before starting liblinphone*/
|
||||
BOOL start_at_boot=[self boolForKey:@"start_at_boot_preference"];
|
||||
[[NSUserDefaults standardUserDefaults] setBool: start_at_boot forKey:@"start_at_boot_preference"];
|
||||
|
||||
[changedDict release];
|
||||
changedDict=[[NSMutableDictionary alloc] init];
|
||||
return YES;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
@ -20,7 +20,11 @@
|
|||
#import <Foundation/Foundation.h>
|
||||
#import <AVFoundation/AVAudioSession.h>
|
||||
#import <SystemConfiguration/SCNetworkReachability.h>
|
||||
|
||||
#import "LogView.h"
|
||||
#import "IASKSettingsReader.h"
|
||||
#import "IASKSettingsStore.h"
|
||||
#import "IASKAppSettingsViewController.h"
|
||||
|
||||
#include "linphonecore.h"
|
||||
|
||||
|
|
@ -65,7 +69,7 @@ typedef struct _LinphoneCallAppData {
|
|||
- (id) initWithCall: (LinphoneCall*) call;
|
||||
@end
|
||||
|
||||
@interface LinphoneManager : NSObject <AVAudioSessionDelegate> {
|
||||
@interface LinphoneManager : NSObject <AVAudioSessionDelegate, IASKSettingsReaderFilterDelegate, IASKSettingsDelegate> {
|
||||
@protected
|
||||
SCNetworkReachabilityRef proxyReachability;
|
||||
@private
|
||||
|
|
@ -80,7 +84,7 @@ typedef struct _LinphoneCallAppData {
|
|||
|
||||
PhoneView currentView;
|
||||
|
||||
NSDictionary* currentSettings;
|
||||
id<IASKSettingsStore> settingsStore;
|
||||
|
||||
@public
|
||||
CallContext currentCallContextBeforeGoingBackground;
|
||||
|
|
@ -94,6 +98,7 @@ typedef struct _LinphoneCallAppData {
|
|||
+ (void)logUIElementPressed:(const char*) name;
|
||||
+ (void)abstractCall:(id) object dict:(NSDictionary *) dict;
|
||||
- (void)registerLogView:(id<LogView>) view;
|
||||
+ (NSString *)getPrefForCodec: (const char*) name withRate: (int) rate;
|
||||
|
||||
- (void)startLibLinphone;
|
||||
- (BOOL)isNotIphone3G;
|
||||
|
|
@ -105,7 +110,6 @@ typedef struct _LinphoneCallAppData {
|
|||
- (NSString*)getDisplayNameFromAddressBook:(NSString*) number andUpdateCallLog:(LinphoneCallLog*)log;
|
||||
- (UIImage*)getImageFromAddressBook:(NSString*) number;
|
||||
|
||||
- (BOOL)reconfigureLinphoneIfNeeded:(NSDictionary *)oldSettings;
|
||||
- (void)setupNetworkReachabilityCallback;
|
||||
- (void)refreshRegisters;
|
||||
|
||||
|
|
@ -115,8 +119,12 @@ typedef struct _LinphoneCallAppData {
|
|||
- (void)fullScreen:(BOOL) enabled;
|
||||
- (PhoneView) currentView;
|
||||
|
||||
@property (nonatomic, retain) id<IASKSettingsStore> settingsStore;
|
||||
|
||||
@property Connectivity connectivity;
|
||||
@property (nonatomic) int defaultExpires;
|
||||
@property (readonly) const char* frontCamId;
|
||||
@property (readonly) const char* backCamId;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
|||
|
|
@ -17,16 +17,20 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#import "LinphoneManager.h"
|
||||
#include "linphonecore_utils.h"
|
||||
#include "lpconfig.h"
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netdb.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
#import <AVFoundation/AVAudioSession.h>
|
||||
#import <AudioToolbox/AudioToolbox.h>
|
||||
#import <SystemConfiguration/SystemConfiguration.h>
|
||||
|
||||
#import "LinphoneManager.h"
|
||||
#import "FastAddressBook.h"
|
||||
#include <sys/sysctl.h>
|
||||
#include <SystemConfiguration/SystemConfiguration.h>
|
||||
#import "LinphoneCoreSettingsStore.h"
|
||||
|
||||
static LinphoneCore* theLinphoneCore=nil;
|
||||
static LinphoneManager* theLinphoneManager=nil;
|
||||
|
|
@ -41,7 +45,7 @@ extern void libmsx264_init();
|
|||
#endif
|
||||
#define FRONT_CAM_NAME "AV Capture: Front Camera"
|
||||
#define BACK_CAM_NAME "AV Capture: Back Camera"
|
||||
#define DEFAULT_EXPIRES 600
|
||||
|
||||
#if defined (HAVE_SILK)
|
||||
extern void libmssilk_init();
|
||||
#endif
|
||||
|
|
@ -68,12 +72,48 @@ PhoneView currentView = -1;
|
|||
@synthesize connectivity;
|
||||
@synthesize frontCamId;
|
||||
@synthesize backCamId;
|
||||
@synthesize defaultExpires;
|
||||
@synthesize settingsStore;
|
||||
|
||||
struct codec_name_pref_table{
|
||||
const char *name;
|
||||
int rate;
|
||||
NSString *prefname;
|
||||
};
|
||||
|
||||
struct codec_name_pref_table codec_pref_table[]={
|
||||
{ "speex", 8000, @"speex_8k_preference" },
|
||||
{ "speex", 16000, @"speex_16k_preference" },
|
||||
{ "silk", 24000, @"silk_24k_preference" },
|
||||
{ "silk", 16000, @"silk_16k_preference" },
|
||||
{ "amr", 8000, @"amr_8k_preference" },
|
||||
{ "ilbc", 8000, @"ilbc_preference"},
|
||||
{ "pcmu", 8000, @"pcmu_preference"},
|
||||
{ "pcma", 8000, @"pcma_preference"},
|
||||
{ "g722", 8000, @"g722_preference"},
|
||||
{ "g729", 8000, @"g729_preference"},
|
||||
{ "mp4v-es", 90000, @"mp4v-es_preference"},
|
||||
{ "h264", 90000, @"h264_preference"},
|
||||
{ "vp8", 90000, @"vp8_preference"},
|
||||
{ NULL,0,Nil }
|
||||
};
|
||||
|
||||
+ (NSString *) getPrefForCodec: (const char*) name withRate: (int) rate{
|
||||
int i;
|
||||
for(i=0;codec_pref_table[i].name!=NULL;++i){
|
||||
if (strcasecmp(codec_pref_table[i].name,name)==0 && codec_pref_table[i].rate==rate)
|
||||
return codec_pref_table[i].prefname;
|
||||
}
|
||||
return Nil;
|
||||
}
|
||||
|
||||
|
||||
- (id)init {
|
||||
assert (!theLinphoneManager);
|
||||
if ((self= [super init])) {
|
||||
mFastAddressBook = [[FastAddressBook alloc] init];
|
||||
theLinphoneManager = self;
|
||||
self.defaultExpires=600;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
|
@ -232,7 +272,7 @@ PhoneView currentView = -1;
|
|||
}
|
||||
|
||||
//generic log handler for debug version
|
||||
static void linphone_iphone_log_handler(int lev, const char *fmt, va_list args){
|
||||
void linphone_iphone_log_handler(int lev, const char *fmt, va_list args){
|
||||
NSString* format = [[NSString alloc] initWithCString:fmt encoding:[NSString defaultCStringEncoding]];
|
||||
NSLogv(format,args);
|
||||
NSString* formatedString = [[NSString alloc] initWithFormat:format arguments:args];
|
||||
|
|
@ -401,7 +441,7 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
[[LinphoneManager instance] kickOffNetworkConnection];
|
||||
} else {
|
||||
Connectivity newConnectivity;
|
||||
BOOL isWifiOnly = [[NSUserDefaults standardUserDefaults] boolForKey:@"wifi_only_preference"];
|
||||
BOOL isWifiOnly = lp_config_get_int(linphone_core_get_config([LinphoneManager getLc]),"app","wifi_only_preference",FALSE);
|
||||
if (!ctx || ctx->testWWan)
|
||||
newConnectivity = flags & kSCNetworkReachabilityFlagsIsWWAN ? wwan:wifi;
|
||||
else
|
||||
|
|
@ -413,7 +453,7 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
&& (lLinphoneMgr.connectivity == newConnectivity || lLinphoneMgr.connectivity == none)) {
|
||||
linphone_proxy_config_expires(proxy, 0);
|
||||
} else if (proxy){
|
||||
linphone_proxy_config_expires(proxy, DEFAULT_EXPIRES); //might be better to save the previous value
|
||||
linphone_proxy_config_expires(proxy, lLinphoneMgr.defaultExpires); //might be better to save the previous value
|
||||
}
|
||||
|
||||
if (lLinphoneMgr.connectivity == none) {
|
||||
|
|
@ -436,268 +476,23 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
}
|
||||
}
|
||||
|
||||
- (BOOL)reconfigureLinphoneIfNeeded:(NSDictionary *)settings {
|
||||
if (theLinphoneCore==nil) {
|
||||
ms_warning("cannot configure linphone because not initialized yet");
|
||||
return NO;
|
||||
}
|
||||
|
||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||
NSDictionary* newSettings = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
|
||||
if (settings != nil) {
|
||||
/* reconfigure only if newSettings != settings */
|
||||
if ([newSettings isEqualToDictionary:settings]) {
|
||||
ms_message("Same settings: no need to reconfigure linphone");
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
NSLog(@"Configuring Linphone (new settings)");
|
||||
|
||||
|
||||
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"debugenable_preference"]) {
|
||||
//redirect all traces to the iphone log framework
|
||||
linphone_core_enable_logs_with_cb((OrtpLogFunc)linphone_iphone_log_handler);
|
||||
}
|
||||
else {
|
||||
linphone_core_disable_logs();
|
||||
}
|
||||
|
||||
NSBundle* myBundle = [NSBundle mainBundle];
|
||||
|
||||
/* unregister before modifying any settings */
|
||||
{
|
||||
LinphoneProxyConfig* proxyCfg;
|
||||
linphone_core_get_default_proxy(theLinphoneCore, &proxyCfg);
|
||||
|
||||
if (proxyCfg) {
|
||||
// this will force unregister WITHOUT destorying the proxyCfg object
|
||||
linphone_proxy_config_edit(proxyCfg);
|
||||
|
||||
int i=0;
|
||||
while (linphone_proxy_config_get_state(proxyCfg)!=LinphoneRegistrationNone &&
|
||||
linphone_proxy_config_get_state(proxyCfg)!=LinphoneRegistrationCleared &&
|
||||
linphone_proxy_config_get_state(proxyCfg)!=LinphoneRegistrationFailed &&
|
||||
i++<40 ) {
|
||||
linphone_core_iterate(theLinphoneCore);
|
||||
usleep(100000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const char* lRootCa = [[myBundle pathForResource:@"rootca"ofType:@"pem"] cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
linphone_core_set_root_ca(theLinphoneCore, lRootCa);
|
||||
|
||||
NSString* transport = [[NSUserDefaults standardUserDefaults] stringForKey:@"transport_preference"];
|
||||
|
||||
LCSipTransports transportValue;
|
||||
if (transport!=nil) {
|
||||
if (linphone_core_get_sip_transports(theLinphoneCore, &transportValue)) {
|
||||
ms_error("cannot get current transport");
|
||||
}
|
||||
// Only one port can be set at one time, the others's value is 0
|
||||
if ([transport isEqualToString:@"tcp"]) {
|
||||
if (transportValue.tcp_port == 0) transportValue.tcp_port=transportValue.udp_port + transportValue.tls_port;
|
||||
transportValue.udp_port=0;
|
||||
transportValue.tls_port=0;
|
||||
} else if ([transport isEqualToString:@"udp"]){
|
||||
if (transportValue.udp_port == 0) transportValue.udp_port=transportValue.tcp_port + transportValue.tls_port;
|
||||
transportValue.tcp_port=0;
|
||||
transportValue.tls_port=0;
|
||||
} else if ([transport isEqualToString:@"tls"]){
|
||||
if (transportValue.tls_port == 0) transportValue.tls_port=transportValue.udp_port + transportValue.tcp_port;
|
||||
transportValue.tcp_port=0;
|
||||
transportValue.udp_port=0;
|
||||
} else {
|
||||
ms_error("unexpected transport [%s]",[transport cStringUsingEncoding:[NSString defaultCStringEncoding]]);
|
||||
}
|
||||
if (linphone_core_set_sip_transports(theLinphoneCore, &transportValue)) {
|
||||
ms_error("cannot set transport");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Set audio assets
|
||||
const char* lRing = [[myBundle pathForResource:@"oldphone-mono"ofType:@"wav"] cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
linphone_core_set_ring(theLinphoneCore, lRing );
|
||||
const char* lRingBack = [[myBundle pathForResource:@"ringback"ofType:@"wav"] cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
linphone_core_set_ringback(theLinphoneCore, lRingBack);
|
||||
|
||||
|
||||
|
||||
//configure sip account
|
||||
|
||||
//madatory parameters
|
||||
|
||||
NSString* username = [[NSUserDefaults standardUserDefaults] stringForKey:@"username_preference"];
|
||||
NSString* domain = [[NSUserDefaults standardUserDefaults] stringForKey:@"domain_preference"];
|
||||
NSString* accountPassword = [[NSUserDefaults standardUserDefaults] stringForKey:@"password_preference"];
|
||||
bool configCheckDisable = [[NSUserDefaults standardUserDefaults] boolForKey:@"check_config_disable_preference"];
|
||||
bool isOutboundProxy= [[NSUserDefaults standardUserDefaults] boolForKey:@"outbound_proxy_preference"];
|
||||
|
||||
|
||||
//clear auth info list
|
||||
linphone_core_clear_all_auth_info(theLinphoneCore);
|
||||
//clear existing proxy config
|
||||
linphone_core_clear_proxy_config(theLinphoneCore);
|
||||
if (username && [username length] >0 && domain && [domain length]>0) {
|
||||
const char* identity = [[NSString stringWithFormat:@"sip:%@@%@",username,domain] cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
const char* password = [accountPassword cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
|
||||
NSString* proxyAddress = [[NSUserDefaults standardUserDefaults] stringForKey:@"proxy_preference"];
|
||||
if ((!proxyAddress || [proxyAddress length] <1 ) && domain) {
|
||||
proxyAddress = [NSString stringWithFormat:@"sip:%@",domain] ;
|
||||
} else {
|
||||
proxyAddress = [NSString stringWithFormat:@"sip:%@",proxyAddress] ;
|
||||
}
|
||||
|
||||
const char* proxy = [proxyAddress cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
|
||||
NSString* prefix = [[NSUserDefaults standardUserDefaults] stringForKey:@"prefix_preference"];
|
||||
bool substitute_plus_by_00 = [[NSUserDefaults standardUserDefaults] boolForKey:@"substitute_+_by_00_preference"];
|
||||
//possible valid config detected
|
||||
LinphoneProxyConfig* proxyCfg;
|
||||
proxyCfg = linphone_proxy_config_new();
|
||||
|
||||
// add username password
|
||||
LinphoneAddress *from = linphone_address_new(identity);
|
||||
LinphoneAuthInfo *info;
|
||||
if (from !=0){
|
||||
info=linphone_auth_info_new(linphone_address_get_username(from),NULL,password,NULL,NULL);
|
||||
linphone_core_add_auth_info(theLinphoneCore,info);
|
||||
}
|
||||
linphone_address_destroy(from);
|
||||
|
||||
// configure proxy entries
|
||||
linphone_proxy_config_set_identity(proxyCfg,identity);
|
||||
linphone_proxy_config_set_server_addr(proxyCfg,proxy);
|
||||
linphone_proxy_config_enable_register(proxyCfg,true);
|
||||
BOOL isWifiOnly = [[NSUserDefaults standardUserDefaults] boolForKey:@"wifi_only_preference"];
|
||||
LinphoneManager* lLinphoneMgr = [LinphoneManager instance];
|
||||
if (isWifiOnly && lLinphoneMgr.connectivity == wwan) {
|
||||
linphone_proxy_config_expires(proxyCfg, 0);
|
||||
} else {
|
||||
linphone_proxy_config_expires(proxyCfg, DEFAULT_EXPIRES);
|
||||
}
|
||||
|
||||
if (isOutboundProxy)
|
||||
linphone_proxy_config_set_route(proxyCfg,proxy);
|
||||
|
||||
if ([prefix length]>0) {
|
||||
linphone_proxy_config_set_dial_prefix(proxyCfg, [prefix cStringUsingEncoding:[NSString defaultCStringEncoding]]);
|
||||
}
|
||||
linphone_proxy_config_set_dial_escape_plus(proxyCfg,substitute_plus_by_00);
|
||||
|
||||
linphone_core_add_proxy_config(theLinphoneCore,proxyCfg);
|
||||
//set to default proxy
|
||||
linphone_core_set_default_proxy(theLinphoneCore,proxyCfg);
|
||||
|
||||
} else {
|
||||
if (configCheckDisable == false ) {
|
||||
UIAlertView* error = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Warning",nil)
|
||||
message:NSLocalizedString(@"It seems you have not configured any proxy server from settings",nil)
|
||||
delegate:self
|
||||
cancelButtonTitle:NSLocalizedString(@"Continue",nil)
|
||||
otherButtonTitles:NSLocalizedString(@"Never remind",nil),nil];
|
||||
[error show];
|
||||
[error release];
|
||||
}
|
||||
}
|
||||
|
||||
//Configure Codecs
|
||||
|
||||
PayloadType *pt;
|
||||
//get codecs from linphonerc
|
||||
const MSList *audioCodecs=linphone_core_get_audio_codecs(theLinphoneCore);
|
||||
const MSList *elem;
|
||||
//disable all codecs
|
||||
for (elem=audioCodecs;elem!=NULL;elem=elem->next){
|
||||
pt=(PayloadType*)elem->data;
|
||||
linphone_core_enable_payload_type(theLinphoneCore,pt,FALSE);
|
||||
}
|
||||
|
||||
//read codecs from setting bundle and enable them one by one
|
||||
if ([self isNotIphone3G]) {
|
||||
[self configurePayloadType:"SILK" fromPrefKey:@"silk_24k_preference" withRate:24000];
|
||||
}
|
||||
else {
|
||||
ms_message("SILK 24khz codec deactivated");
|
||||
}
|
||||
[self configurePayloadType:"speex" fromPrefKey:@"speex_16k_preference" withRate:16000];
|
||||
[self configurePayloadType:"speex" fromPrefKey:@"speex_8k_preference" withRate:8000];
|
||||
[self configurePayloadType:"SILK" fromPrefKey:@"silk_16k_preference" withRate:16000];
|
||||
[self configurePayloadType:"AMR" fromPrefKey:@"amr_8k_preference" withRate:8000];
|
||||
[self configurePayloadType:"GSM" fromPrefKey:@"gsm_8k_preference" withRate:8000];
|
||||
[self configurePayloadType:"iLBC" fromPrefKey:@"ilbc_preference" withRate:8000];
|
||||
[self configurePayloadType:"PCMU" fromPrefKey:@"pcmu_preference" withRate:8000];
|
||||
[self configurePayloadType:"PCMA" fromPrefKey:@"pcma_preference" withRate:8000];
|
||||
[self configurePayloadType:"G722" fromPrefKey:@"g722_preference" withRate:8000];
|
||||
[self configurePayloadType:"G729" fromPrefKey:@"g729_preference" withRate:8000];
|
||||
|
||||
//get video codecs from linphonerc
|
||||
const MSList *videoCodecs=linphone_core_get_video_codecs(theLinphoneCore);
|
||||
//disable video all codecs
|
||||
for (elem=videoCodecs;elem!=NULL;elem=elem->next){
|
||||
pt=(PayloadType*)elem->data;
|
||||
linphone_core_enable_payload_type(theLinphoneCore,pt,FALSE);
|
||||
}
|
||||
[self configurePayloadType:"MP4V-ES" fromPrefKey:@"mp4v-es_preference" withRate:90000];
|
||||
[self configurePayloadType:"H264" fromPrefKey:@"h264_preference" withRate:90000];
|
||||
[self configurePayloadType:"VP8" fromPrefKey:@"vp8_preference" withRate:90000];
|
||||
|
||||
if ([self isNotIphone3G]) {
|
||||
bool enableVideo = [[NSUserDefaults standardUserDefaults] boolForKey:@"enable_video_preference"];
|
||||
linphone_core_enable_video(theLinphoneCore, enableVideo, enableVideo);
|
||||
} else {
|
||||
linphone_core_enable_video(theLinphoneCore, FALSE, FALSE);
|
||||
ms_warning("Disable video for phones prior to iPhone 3GS");
|
||||
}
|
||||
bool enableSrtp = [[NSUserDefaults standardUserDefaults] boolForKey:@"enable_srtp_preference"];
|
||||
linphone_core_set_media_encryption(theLinphoneCore, enableSrtp?LinphoneMediaEncryptionSRTP:LinphoneMediaEncryptionZRTP);
|
||||
|
||||
NSString* stun_server = [[NSUserDefaults standardUserDefaults] stringForKey:@"stun_preference"];
|
||||
if ([stun_server length]>0){
|
||||
linphone_core_set_stun_server(theLinphoneCore,[stun_server cStringUsingEncoding:[NSString defaultCStringEncoding]]);
|
||||
linphone_core_set_firewall_policy(theLinphoneCore, LinphonePolicyUseStun);
|
||||
}else{
|
||||
linphone_core_set_stun_server(theLinphoneCore, NULL);
|
||||
linphone_core_set_firewall_policy(theLinphoneCore, LinphonePolicyNoFirewall);
|
||||
}
|
||||
|
||||
LinphoneVideoPolicy policy;
|
||||
policy.automatically_accept = [[NSUserDefaults standardUserDefaults] boolForKey:@"start_video_preference"];;
|
||||
policy.automatically_initiate = [[NSUserDefaults standardUserDefaults] boolForKey:@"start_video_preference"];
|
||||
linphone_core_set_video_policy(theLinphoneCore, &policy);
|
||||
|
||||
UIDevice* device = [UIDevice currentDevice];
|
||||
bool backgroundSupported = false;
|
||||
if ([device respondsToSelector:@selector(isMultitaskingSupported)])
|
||||
backgroundSupported = [device isMultitaskingSupported];
|
||||
|
||||
if (backgroundSupported) {
|
||||
isbackgroundModeEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"backgroundmode_preference"];
|
||||
} else {
|
||||
isbackgroundModeEnabled=false;
|
||||
}
|
||||
|
||||
[currentSettings release];
|
||||
currentSettings = newSettings;
|
||||
[currentSettings retain];
|
||||
|
||||
return YES;
|
||||
}
|
||||
- (BOOL)isNotIphone3G
|
||||
{
|
||||
size_t size;
|
||||
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
|
||||
char *machine = malloc(size);
|
||||
sysctlbyname("hw.machine", machine, &size, NULL, 0);
|
||||
NSString *platform = [[NSString alloc ] initWithUTF8String:machine];
|
||||
free(machine);
|
||||
static BOOL done=FALSE;
|
||||
static BOOL result;
|
||||
if (!done){
|
||||
size_t size;
|
||||
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
|
||||
char *machine = malloc(size);
|
||||
sysctlbyname("hw.machine", machine, &size, NULL, 0);
|
||||
NSString *platform = [[NSString alloc ] initWithUTF8String:machine];
|
||||
free(machine);
|
||||
|
||||
BOOL result = ![platform isEqualToString:@"iPhone1,2"];
|
||||
result = ![platform isEqualToString:@"iPhone1,2"];
|
||||
|
||||
[platform release];
|
||||
[platform release];
|
||||
done=TRUE;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
@ -730,7 +525,7 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
linphone_core_get_default_proxy(theLinphoneCore, &proxyCfg);
|
||||
linphone_core_stop_dtmf_stream(theLinphoneCore);
|
||||
|
||||
if (isbackgroundModeEnabled && proxyCfg) {
|
||||
if (proxyCfg && lp_config_get_int(linphone_core_get_config(theLinphoneCore),"app","backgroundmode_preference",0)) {
|
||||
//For registration register
|
||||
linphone_core_refresh_registers(theLinphoneCore);
|
||||
|
||||
|
|
@ -823,18 +618,11 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
|
||||
NSString *confiFileName = [[paths objectAtIndex:0] stringByAppendingString:@"/.linphonerc"];
|
||||
NSString *zrtpSecretsFileName = [[paths objectAtIndex:0] stringByAppendingString:@"/zrtp_secrets"];
|
||||
const char* lRootCa = [[myBundle pathForResource:@"rootca"ofType:@"pem"] cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
connectivity=none;
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
//log management
|
||||
|
||||
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"debugenable_preference"]) {
|
||||
//redirect all traces to the iphone log framework
|
||||
linphone_core_enable_logs_with_cb((OrtpLogFunc)linphone_iphone_log_handler);
|
||||
}
|
||||
else {
|
||||
linphone_core_disable_logs();
|
||||
}
|
||||
|
||||
libmsilbc_init();
|
||||
#if defined (HAVE_SILK)
|
||||
libmssilk_init();
|
||||
|
|
@ -857,13 +645,17 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
, [factoryConfig cStringUsingEncoding:[NSString defaultCStringEncoding]]
|
||||
,self);
|
||||
|
||||
[[NSUserDefaults standardUserDefaults] synchronize];//sync before loading config
|
||||
linphone_core_set_root_ca(theLinphoneCore, lRootCa);
|
||||
// Set audio assets
|
||||
const char* lRing = [[myBundle pathForResource:@"oldphone-mono"ofType:@"wav"] cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
linphone_core_set_ring(theLinphoneCore, lRing );
|
||||
const char* lRingBack = [[myBundle pathForResource:@"ringback"ofType:@"wav"] cStringUsingEncoding:[NSString defaultCStringEncoding]];
|
||||
linphone_core_set_ringback(theLinphoneCore, lRingBack);
|
||||
|
||||
|
||||
linphone_core_set_zrtp_secrets_file(theLinphoneCore, [zrtpSecretsFileName cStringUsingEncoding:[NSString defaultCStringEncoding]]);
|
||||
|
||||
[self setupNetworkReachabilityCallback];
|
||||
|
||||
[self reconfigureLinphoneIfNeeded:nil];
|
||||
|
||||
// start scheduler
|
||||
mIterateTimer = [NSTimer scheduledTimerWithTimeInterval:0.1
|
||||
|
|
@ -915,12 +707,25 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
//go directly to bg mode
|
||||
[self enterBackgroundMode];
|
||||
}
|
||||
NSUInteger cpucount = [[NSProcessInfo processInfo] processorCount];
|
||||
ms_set_cpu_count(cpucount);
|
||||
|
||||
if (![self isNotIphone3G]){
|
||||
PayloadType *pt=linphone_core_find_payload_type(theLinphoneCore,"SILK",24000);
|
||||
if (pt) {
|
||||
linphone_core_enable_payload_type(theLinphoneCore,pt,FALSE);
|
||||
ms_warning("SILK/24000 and video disabled on old iPhone 3G");
|
||||
}
|
||||
linphone_core_enable_video(theLinphoneCore, FALSE, FALSE);
|
||||
}
|
||||
|
||||
if ([LinphoneManager runningOnIpad])
|
||||
ms_set_cpu_count(2);
|
||||
else
|
||||
ms_set_cpu_count(1);
|
||||
|
||||
settingsStore = [[LinphoneCoreSettingsStore alloc] init];
|
||||
|
||||
ms_warning("Linphone [%s] started on [%s]"
|
||||
,linphone_core_get_version()
|
||||
,[[UIDevice currentDevice].model cStringUsingEncoding:[NSString defaultCStringEncoding]] );
|
||||
|
|
@ -949,13 +754,10 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
- (void)becomeActive {
|
||||
if (theLinphoneCore == nil) {
|
||||
//back from standby and background mode is disabled
|
||||
[self startLibLinphone];
|
||||
[self startLibLinphone];
|
||||
} else {
|
||||
if (![self reconfigureLinphoneIfNeeded:currentSettings]) {
|
||||
ms_message("becoming active with no config modification, make sure we are registered");
|
||||
[self refreshRegisters];
|
||||
}
|
||||
}
|
||||
[self refreshRegisters];
|
||||
}
|
||||
/*IOS specific*/
|
||||
linphone_core_start_dtmf_stream(theLinphoneCore);
|
||||
|
||||
|
|
@ -1024,4 +826,57 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
}
|
||||
}
|
||||
|
||||
- (void)settingsViewControllerDidEnd:(IASKAppSettingsViewController *)sender {
|
||||
ms_message("Synchronize settings");
|
||||
[[self settingsStore] synchronize];
|
||||
}
|
||||
|
||||
- (BOOL)codecSupported:(NSString *) prefName{
|
||||
int i;
|
||||
for(i=0;codec_pref_table[i].name!=NULL;++i){
|
||||
if ([prefName compare:codec_pref_table[i].prefname]==0){
|
||||
return linphone_core_find_payload_type(theLinphoneCore,codec_pref_table[i].name, codec_pref_table[i].rate)!=NULL;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
- (NSDictionary*)filterPreferenceSpecifier:(NSDictionary *)specifier {
|
||||
if (!theLinphoneCore) {
|
||||
// LinphoneCore not ready: do not filter
|
||||
return specifier;
|
||||
}
|
||||
NSString* identifier = [specifier objectForKey:@"Identifier"];
|
||||
if (identifier == nil) {
|
||||
identifier = [specifier objectForKey:@"Key"];
|
||||
}
|
||||
if (!identifier) {
|
||||
// child pane maybe
|
||||
NSString* title = [specifier objectForKey:@"Title"];
|
||||
if ([title isEqualToString:@"Video"]) {
|
||||
if (!linphone_core_video_supported(theLinphoneCore))
|
||||
return nil;
|
||||
}
|
||||
return specifier;
|
||||
}
|
||||
// NSLog(@"Specifier received: %@", identifier);
|
||||
if ([identifier isEqualToString:@"silk_24k_preference"]) {
|
||||
if (![self isNotIphone3G])
|
||||
return nil;
|
||||
}
|
||||
if ([identifier isEqualToString:@"backgroundmode_preference"]) {
|
||||
UIDevice* device = [UIDevice currentDevice];
|
||||
if ([device respondsToSelector:@selector(isMultitaskingSupported)]) {
|
||||
if ([device isMultitaskingSupported]) {
|
||||
return specifier;
|
||||
}
|
||||
}
|
||||
// hide setting if bg mode not supported
|
||||
return nil;
|
||||
}
|
||||
if (![self codecSupported:identifier])
|
||||
return Nil;
|
||||
return specifier;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
|||
|
|
@ -132,7 +132,11 @@
|
|||
if([LinphoneManager isLcReady])
|
||||
lc = [LinphoneManager getLc];
|
||||
|
||||
bool enableVideo = [[NSUserDefaults standardUserDefaults] boolForKey:@"enable_video_preference"];
|
||||
lc = [LinphoneManager getLc];
|
||||
|
||||
if (lc==NULL) return;
|
||||
|
||||
bool enableVideo = linphone_core_video_enabled(lc);
|
||||
|
||||
if (enableVideo) {
|
||||
LinphoneCall* call = linphone_core_get_current_call(lc);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
#import "MoreViewController.h"
|
||||
#include "ConsoleViewController.h"
|
||||
#import "LinphoneManager.h"
|
||||
#include "lpconfig.h"
|
||||
|
||||
@implementation MoreViewController
|
||||
@synthesize web;
|
||||
|
|
@ -34,7 +35,7 @@
|
|||
[creditText setText: [NSString stringWithFormat:creditText.text,[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]]];
|
||||
consoleViewController = [[ConsoleViewController alloc] initWithNibName:@"ConsoleViewController" bundle:[NSBundle mainBundle]];
|
||||
[[LinphoneManager instance] registerLogView:consoleViewController];
|
||||
isDebug = [[NSUserDefaults standardUserDefaults] boolForKey:@"debugenable_preference"];
|
||||
isDebug = lp_config_get_int(linphone_core_get_config([LinphoneManager getLc]),"app","debugenable_preference",0);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -282,7 +282,7 @@
|
|||
InCallViewController* myInCallController = [[InCallViewController alloc]
|
||||
initWithNibName:@"InCallViewController"
|
||||
bundle:[NSBundle mainBundle]];
|
||||
//[myHistoryController loadView];
|
||||
//[myInCallController loadView];
|
||||
ViewsDescription *inCallDescription = [ViewsDescription alloc];
|
||||
inCallDescription->content = myInCallController;
|
||||
inCallDescription->tabBar = callTabBarController;
|
||||
|
|
@ -298,7 +298,7 @@
|
|||
SettingsViewController* mySettingsViewController = [[SettingsViewController alloc]
|
||||
initWithNibName:@"SettingsViewController"
|
||||
bundle:[NSBundle mainBundle]];
|
||||
//[myHistoryController loadView];
|
||||
//[mySettingsViewController loadView];
|
||||
ViewsDescription *settingsDescription = [ViewsDescription alloc];
|
||||
settingsDescription->content = mySettingsViewController;
|
||||
settingsDescription->tabBar = mainTabBarController;
|
||||
|
|
@ -313,7 +313,7 @@
|
|||
ChatViewController* myChatViewController = [[ChatViewController alloc]
|
||||
initWithNibName:@"ChatViewController"
|
||||
bundle:[NSBundle mainBundle]];
|
||||
//[myHistoryController loadView];
|
||||
//[myChatViewController loadView];
|
||||
ViewsDescription *chatDescription = [ViewsDescription alloc];
|
||||
chatDescription->content = myChatViewController;
|
||||
chatDescription->tabBar = mainTabBarController;
|
||||
|
|
|
|||
|
|
@ -19,8 +19,14 @@
|
|||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface SettingsViewController : UIViewController {
|
||||
|
||||
#import "IASKAppSettingsViewController.h"
|
||||
|
||||
@interface SettingsViewController: UIViewController {
|
||||
IASKAppSettingsViewController *settingsController;
|
||||
UINavigationController *navigationController;
|
||||
}
|
||||
|
||||
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
|
||||
@property (nonatomic, retain) IBOutlet IASKAppSettingsViewController *settingsController;
|
||||
|
||||
@end
|
||||
|
|
|
|||
|
|
@ -18,7 +18,21 @@
|
|||
*/
|
||||
|
||||
#import "SettingsViewController.h"
|
||||
#import "LinphoneManager.h"
|
||||
|
||||
@implementation SettingsViewController
|
||||
|
||||
@synthesize settingsController;
|
||||
@synthesize navigationController;
|
||||
|
||||
- (void)viewDidLoad {
|
||||
settingsController.delegate = [LinphoneManager instance];
|
||||
settingsController.settingsReaderDelegate = [LinphoneManager instance];
|
||||
settingsController.settingsStore=[[LinphoneManager instance] settingsStore];
|
||||
settingsController.showCreditsFooter = FALSE;
|
||||
|
||||
navigationController.view.frame = self.view.frame;
|
||||
[self.view addSubview: navigationController.view];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
|||
|
|
@ -11,8 +11,12 @@
|
|||
<string key="NS.object.0">1181</string>
|
||||
</object>
|
||||
<array key="IBDocument.IntegratedClassDependencies">
|
||||
<string>IBProxyObject</string>
|
||||
<string>IBUINavigationBar</string>
|
||||
<string>IBUINavigationItem</string>
|
||||
<string>IBUIViewController</string>
|
||||
<string>IBUIView</string>
|
||||
<string>IBUINavigationController</string>
|
||||
<string>IBProxyObject</string>
|
||||
</array>
|
||||
<array key="IBDocument.PluginDependencies">
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
|
|
@ -30,23 +34,54 @@
|
|||
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBUIView" id="191373211">
|
||||
<object class="IBUIView" id="802564442">
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">274</int>
|
||||
<string key="NSFrame">{{0, 20}, {320, 460}}</string>
|
||||
<string key="NSFrameSize">{320, 460}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView"/>
|
||||
<object class="NSColor" key="IBUIBackgroundColor">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MQA</bytes>
|
||||
<object class="NSColorSpace" key="NSCustomColorSpace">
|
||||
<int key="NSID">2</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBUINavigationController" id="983459891">
|
||||
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
|
||||
<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
|
||||
<int key="IBUIInterfaceOrientation">1</int>
|
||||
<int key="interfaceOrientation">1</int>
|
||||
</object>
|
||||
<bool key="IBUIDefinesPresentationContext">YES</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<bool key="IBUIHorizontal">NO</bool>
|
||||
<object class="IBUINavigationBar" key="IBUINavigationBar" id="890495851">
|
||||
<nil key="NSNextResponder"/>
|
||||
<int key="NSvFlags">256</int>
|
||||
<string key="NSFrameSize">{0, 0}</string>
|
||||
<string key="NSReuseIdentifierKey">_NS:15</string>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
<bool key="IBUIMultipleTouchEnabled">YES</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<array key="IBUIViewControllers">
|
||||
<object class="IBUIViewController" id="73380722">
|
||||
<bool key="IBUIAutoresizesArchivedViewToFullSize">NO</bool>
|
||||
<object class="IBUINavigationItem" key="IBUINavigationItem" id="1014852814">
|
||||
<reference key="IBUINavigationBar"/>
|
||||
<string key="IBUITitle">Item</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<reference key="IBUIParentViewController" ref="983459891"/>
|
||||
<string key="IBUINibName">IASKAppSettingsView</string>
|
||||
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
|
||||
<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
|
||||
<int key="IBUIInterfaceOrientation">1</int>
|
||||
<int key="interfaceOrientation">1</int>
|
||||
</object>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<bool key="IBUIHorizontal">NO</bool>
|
||||
</object>
|
||||
</array>
|
||||
</object>
|
||||
</array>
|
||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||
<array class="NSMutableArray" key="connectionRecords">
|
||||
|
|
@ -54,9 +89,25 @@
|
|||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">view</string>
|
||||
<reference key="source" ref="372490531"/>
|
||||
<reference key="destination" ref="191373211"/>
|
||||
<reference key="destination" ref="802564442"/>
|
||||
</object>
|
||||
<int key="connectionID">3</int>
|
||||
<int key="connectionID">9</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">settingsController</string>
|
||||
<reference key="source" ref="372490531"/>
|
||||
<reference key="destination" ref="73380722"/>
|
||||
</object>
|
||||
<int key="connectionID">8</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">navigationController</string>
|
||||
<reference key="source" ref="372490531"/>
|
||||
<reference key="destination" ref="983459891"/>
|
||||
</object>
|
||||
<int key="connectionID">15</int>
|
||||
</object>
|
||||
</array>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
|
|
@ -67,11 +118,6 @@
|
|||
<reference key="children" ref="1000"/>
|
||||
<nil key="parent"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">1</int>
|
||||
<reference key="object" ref="191373211"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-1</int>
|
||||
<reference key="object" ref="372490531"/>
|
||||
|
|
@ -83,6 +129,42 @@
|
|||
<reference key="object" ref="975951072"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">4</int>
|
||||
<reference key="object" ref="802564442"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">10</int>
|
||||
<reference key="object" ref="983459891"/>
|
||||
<array class="NSMutableArray" key="children">
|
||||
<reference ref="890495851"/>
|
||||
<reference ref="73380722"/>
|
||||
</array>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">navigationController</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">11</int>
|
||||
<reference key="object" ref="890495851"/>
|
||||
<reference key="parent" ref="983459891"/>
|
||||
<string key="objectName">navigationBar</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">6</int>
|
||||
<reference key="object" ref="73380722"/>
|
||||
<array class="NSMutableArray" key="children">
|
||||
<reference ref="1014852814"/>
|
||||
</array>
|
||||
<reference key="parent" ref="983459891"/>
|
||||
<string key="objectName">settingsController</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">14</int>
|
||||
<reference key="object" ref="1014852814"/>
|
||||
<reference key="parent" ref="73380722"/>
|
||||
<string key="objectName">settingsItem</string>
|
||||
</object>
|
||||
</array>
|
||||
</object>
|
||||
<dictionary class="NSMutableDictionary" key="flattenedProperties">
|
||||
|
|
@ -90,19 +172,68 @@
|
|||
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="-2.CustomClassName">UIResponder</string>
|
||||
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="6.CustomClassName">IASKAppSettingsViewController</string>
|
||||
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</dictionary>
|
||||
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
||||
<nil key="activeLocalization"/>
|
||||
<dictionary class="NSMutableDictionary" key="localizations"/>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">3</int>
|
||||
<int key="maxID">15</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">IASKAppSettingsViewController</string>
|
||||
<string key="superclassName">UITableViewController</string>
|
||||
<object class="NSMutableDictionary" key="actions">
|
||||
<string key="NS.key.0">dismiss:</string>
|
||||
<string key="NS.object.0">id</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="actionInfosByName">
|
||||
<string key="NS.key.0">dismiss:</string>
|
||||
<object class="IBActionInfo" key="NS.object.0">
|
||||
<string key="name">dismiss:</string>
|
||||
<string key="candidateClassName">id</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="outlets">
|
||||
<string key="NS.key.0">delegate</string>
|
||||
<string key="NS.object.0">id</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
|
||||
<string key="NS.key.0">delegate</string>
|
||||
<object class="IBToOneOutletInfo" key="NS.object.0">
|
||||
<string key="name">delegate</string>
|
||||
<string key="candidateClassName">id</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">./Classes/IASKAppSettingsViewController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">SettingsViewController</string>
|
||||
<string key="superclassName">UIViewController</string>
|
||||
<dictionary class="NSMutableDictionary" key="outlets">
|
||||
<string key="navigationController">UINavigationController</string>
|
||||
<string key="settingsController">IASKAppSettingsViewController</string>
|
||||
</dictionary>
|
||||
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
|
||||
<object class="IBToOneOutletInfo" key="navigationController">
|
||||
<string key="name">navigationController</string>
|
||||
<string key="candidateClassName">UINavigationController</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo" key="settingsController">
|
||||
<string key="name">settingsController</string>
|
||||
<string key="candidateClassName">IASKAppSettingsViewController</string>
|
||||
</object>
|
||||
</dictionary>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">./Classes/SettingsViewController.h</string>
|
||||
|
|
|
|||
87
InAppSettingsKit/Controllers/IASKAppSettingsViewController.h
Normal file
87
InAppSettingsKit/Controllers/IASKAppSettingsViewController.h
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
//
|
||||
// IASKAppSettingsViewController.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <MessageUI/MessageUI.h>
|
||||
|
||||
#import "IASKSettingsReader.h"
|
||||
#import "IASKSettingsStore.h"
|
||||
#import "IASKViewController.h"
|
||||
|
||||
@class IASKSettingsReader;
|
||||
@class IASKAppSettingsViewController;
|
||||
@class IASKSpecifier;
|
||||
|
||||
@protocol IASKSettingsDelegate
|
||||
- (void)settingsViewControllerDidEnd:(IASKAppSettingsViewController*)sender;
|
||||
|
||||
@optional
|
||||
#pragma mark - UITableView header customization
|
||||
- (CGFloat) settingsViewController:(id<IASKViewController>)settingsViewController
|
||||
tableView:(UITableView *)tableView
|
||||
heightForHeaderForSection:(NSInteger)section;
|
||||
- (UIView *) settingsViewController:(id<IASKViewController>)settingsViewController
|
||||
tableView:(UITableView *)tableView
|
||||
viewForHeaderForSection:(NSInteger)section;
|
||||
|
||||
#pragma mark - UITableView cell customization
|
||||
- (CGFloat)tableView:(UITableView*)tableView heightForSpecifier:(IASKSpecifier*)specifier;
|
||||
- (UITableViewCell*)tableView:(UITableView*)tableView cellForSpecifier:(IASKSpecifier*)specifier;
|
||||
|
||||
#pragma mark - mail composing customization
|
||||
- (NSString*) settingsViewController:(id<IASKViewController>)settingsViewController
|
||||
mailComposeBodyForSpecifier:(IASKSpecifier*) specifier;
|
||||
|
||||
- (UIViewController<MFMailComposeViewControllerDelegate>*) settingsViewController:(id<IASKViewController>)settingsViewController
|
||||
viewControllerForMailComposeViewForSpecifier:(IASKSpecifier*) specifier;
|
||||
|
||||
- (void) settingsViewController:(id<IASKViewController>) settingsViewController
|
||||
mailComposeController:(MFMailComposeViewController*)controller
|
||||
didFinishWithResult:(MFMailComposeResult)result
|
||||
error:(NSError*)error;
|
||||
|
||||
#pragma mark - respond to button taps
|
||||
- (void)settingsViewController:(IASKAppSettingsViewController*)sender buttonTappedForKey:(NSString*)key;
|
||||
- (void)settingsViewController:(IASKAppSettingsViewController*)sender tableView:(UITableView *)tableView didSelectCustomViewSpecifier:(IASKSpecifier*)specifier;
|
||||
@end
|
||||
|
||||
|
||||
@interface IASKAppSettingsViewController : UITableViewController <IASKViewController, UITextFieldDelegate, UINavigationControllerDelegate, MFMailComposeViewControllerDelegate> {
|
||||
id<IASKSettingsDelegate> _delegate;
|
||||
|
||||
NSMutableArray *_viewList;
|
||||
|
||||
IASKSettingsReader *_settingsReader;
|
||||
id<IASKSettingsReaderFilterDelegate> _settingsReaderDelegate;
|
||||
id<IASKSettingsStore> _settingsStore;
|
||||
NSString *_file;
|
||||
|
||||
id _currentFirstResponder;
|
||||
|
||||
BOOL _showCreditsFooter;
|
||||
BOOL _showDoneButton;
|
||||
}
|
||||
|
||||
@property (nonatomic, assign) IBOutlet id delegate;
|
||||
@property (nonatomic, copy) NSString *file;
|
||||
@property (nonatomic, assign) id<IASKSettingsReaderFilterDelegate> settingsReaderDelegate;
|
||||
@property (nonatomic, assign) BOOL showCreditsFooter;
|
||||
@property (nonatomic, assign) BOOL showDoneButton;
|
||||
|
||||
- (void)synchronizeSettings;
|
||||
- (IBAction)dismiss:(id)sender;
|
||||
|
||||
@end
|
||||
799
InAppSettingsKit/Controllers/IASKAppSettingsViewController.m
Normal file
799
InAppSettingsKit/Controllers/IASKAppSettingsViewController.m
Normal file
|
|
@ -0,0 +1,799 @@
|
|||
//
|
||||
// IASKAppSettingsViewController.m
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009-2010:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
|
||||
#import "IASKAppSettingsViewController.h"
|
||||
#import "IASKSettingsReader.h"
|
||||
#import "IASKSettingsStoreUserDefaults.h"
|
||||
#import "IASKPSToggleSwitchSpecifierViewCell.h"
|
||||
#import "IASKPSSliderSpecifierViewCell.h"
|
||||
#import "IASKPSTextFieldSpecifierViewCell.h"
|
||||
#import "IASKPSTitleValueSpecifierViewCell.h"
|
||||
#import "IASKSwitch.h"
|
||||
#import "IASKSlider.h"
|
||||
#import "IASKSpecifier.h"
|
||||
#import "IASKSpecifierValuesViewController.h"
|
||||
#import "IASKTextField.h"
|
||||
|
||||
static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
|
||||
static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2;
|
||||
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8;
|
||||
|
||||
static NSString *kIASKCredits = @"Powered by InAppSettingsKit"; // Leave this as-is!!!
|
||||
|
||||
#define kIASKSpecifierValuesViewControllerIndex 0
|
||||
#define kIASKSpecifierChildViewControllerIndex 1
|
||||
|
||||
#define kIASKCreditsViewWidth 285
|
||||
|
||||
CGRect IASKCGRectSwap(CGRect rect);
|
||||
|
||||
@interface IASKAppSettingsViewController ()
|
||||
@property (nonatomic, retain) NSMutableArray *viewList;
|
||||
@property (nonatomic, retain) id currentFirstResponder;
|
||||
|
||||
- (void) setup;
|
||||
|
||||
- (void)_textChanged:(id)sender;
|
||||
- (void)synchronizeSettings;
|
||||
- (void)userDefaultsDidChange;
|
||||
- (void)reload;
|
||||
@end
|
||||
|
||||
@implementation IASKAppSettingsViewController
|
||||
|
||||
@synthesize delegate = _delegate;
|
||||
@synthesize viewList = _viewList;
|
||||
@synthesize settingsReader = _settingsReader;
|
||||
@synthesize file = _file;
|
||||
@synthesize currentFirstResponder = _currentFirstResponder;
|
||||
@synthesize showCreditsFooter = _showCreditsFooter;
|
||||
@synthesize showDoneButton = _showDoneButton;
|
||||
@synthesize settingsStore = _settingsStore;
|
||||
@synthesize settingsReaderDelegate = _settingsReaderDelegate;
|
||||
|
||||
#pragma mark accessors
|
||||
- (IASKSettingsReader*)settingsReader {
|
||||
if (!_settingsReader) {
|
||||
_settingsReader = [[IASKSettingsReader alloc] initWithFile:self.file andDelegate:self.settingsReaderDelegate];
|
||||
}
|
||||
return _settingsReader;
|
||||
}
|
||||
|
||||
- (id<IASKSettingsStore>)settingsStore {
|
||||
if (!_settingsStore) {
|
||||
_settingsStore = [[IASKSettingsStoreUserDefaults alloc] init];
|
||||
}
|
||||
return _settingsStore;
|
||||
}
|
||||
|
||||
- (NSString*)file {
|
||||
if (!_file) {
|
||||
return @"Root";
|
||||
}
|
||||
return [[_file retain] autorelease];
|
||||
}
|
||||
|
||||
- (void)setFile:(NSString *)file {
|
||||
if (file != _file) {
|
||||
|
||||
[_file release];
|
||||
_file = [file copy];
|
||||
}
|
||||
|
||||
self.tableView.contentOffset = CGPointMake(0, 0);
|
||||
self.settingsReader = nil; // automatically initializes itself
|
||||
[self.tableView reloadData];
|
||||
}
|
||||
|
||||
- (BOOL)isPad {
|
||||
BOOL isPad = NO;
|
||||
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 30200)
|
||||
isPad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad;
|
||||
#endif
|
||||
return isPad;
|
||||
}
|
||||
|
||||
#pragma mark standard view controller methods
|
||||
- (id)init {
|
||||
return [self initWithNibName:@"IASKAppSettingsView" bundle:nil];
|
||||
}
|
||||
|
||||
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
|
||||
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
|
||||
// If set to YES, will add a DONE button at the right of the navigation bar
|
||||
_showDoneButton = YES;
|
||||
|
||||
[self setup];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)awakeFromNib {
|
||||
// If set to YES, will add a DONE button at the right of the navigation bar
|
||||
// if loaded via NIB, it's likely we sit in a TabBar- or NavigationController
|
||||
// and thus don't need the Done button
|
||||
_showDoneButton = NO;
|
||||
|
||||
[self setup];
|
||||
}
|
||||
|
||||
//common (NIB & code based) initialization
|
||||
- (void) setup {
|
||||
// If set to YES, will display credits for InAppSettingsKit creators
|
||||
_showCreditsFooter = YES;
|
||||
}
|
||||
|
||||
- (NSMutableArray *)viewList {
|
||||
if (!_viewList) {
|
||||
_viewList = [[NSMutableArray alloc] init];
|
||||
[_viewList addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"IASKSpecifierValuesView", @"ViewName",nil]];
|
||||
[_viewList addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"IASKAppSettingsView", @"ViewName",nil]];
|
||||
}
|
||||
return _viewList;
|
||||
}
|
||||
|
||||
- (void) viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
if ([self isPad]) {
|
||||
self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLineEtched;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)viewDidUnload {
|
||||
[super viewDidUnload];
|
||||
|
||||
// Release any retained subviews of the main view.
|
||||
// e.g. self.myOutlet = nil;
|
||||
self.view = nil;
|
||||
self.viewList = nil;
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
// if there's something selected, the value might have changed
|
||||
// so reload that row
|
||||
NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
|
||||
if(selectedIndexPath) {
|
||||
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:selectedIndexPath]
|
||||
withRowAnimation:UITableViewRowAnimationNone];
|
||||
// and reselect it, so we get the nice default deselect animation from UITableViewController
|
||||
[self.tableView selectRowAtIndexPath:selectedIndexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
|
||||
}
|
||||
|
||||
self.navigationItem.rightBarButtonItem = nil;
|
||||
self.navigationController.delegate = self;
|
||||
if (_showDoneButton) {
|
||||
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
|
||||
target:self
|
||||
action:@selector(dismiss:)];
|
||||
self.navigationItem.rightBarButtonItem = buttonItem;
|
||||
[buttonItem release];
|
||||
}
|
||||
if (!self.title) {
|
||||
self.title = NSLocalizedString(@"Settings", @"");
|
||||
}
|
||||
|
||||
if ([self.settingsStore isKindOfClass:[IASKSettingsStoreUserDefaults class]]) {
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(userDefaultsDidChange)
|
||||
name:NSUserDefaultsDidChangeNotification
|
||||
object:[NSUserDefaults standardUserDefaults]];
|
||||
[self userDefaultsDidChange]; // force update in case of changes while we were hidden
|
||||
}
|
||||
[super viewWillAppear:animated];
|
||||
}
|
||||
|
||||
- (CGSize)contentSizeForViewInPopover {
|
||||
return [[self view] sizeThatFits:CGSizeMake(320, 2000)];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated {
|
||||
[super viewDidAppear:animated];
|
||||
|
||||
NSNotificationCenter *dc = [NSNotificationCenter defaultCenter];
|
||||
IASK_IF_IOS4_OR_GREATER([dc addObserver:self selector:@selector(synchronizeSettings) name:UIApplicationDidEnterBackgroundNotification object:[UIApplication sharedApplication]];);
|
||||
IASK_IF_IOS4_OR_GREATER([dc addObserver:self selector:@selector(reload) name:UIApplicationWillEnterForegroundNotification object:[UIApplication sharedApplication]];);
|
||||
[dc addObserver:self selector:@selector(synchronizeSettings) name:UIApplicationWillTerminateNotification object:[UIApplication sharedApplication]];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated {
|
||||
[NSObject cancelPreviousPerformRequestsWithTarget:self];
|
||||
[super viewWillDisappear:animated];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated {
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
|
||||
if (!self.navigationController.delegate) {
|
||||
// hide the keyboard when we're popping from the navigation controller
|
||||
[self.currentFirstResponder resignFirstResponder];
|
||||
}
|
||||
[self dismiss:nil];
|
||||
[super viewDidDisappear:animated];
|
||||
}
|
||||
|
||||
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)didReceiveMemoryWarning {
|
||||
// Releases the view if it doesn't have a superview.
|
||||
[super didReceiveMemoryWarning];
|
||||
|
||||
// Release any cached data, images, etc that aren't in use.
|
||||
}
|
||||
|
||||
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
|
||||
if (![viewController isKindOfClass:[IASKAppSettingsViewController class]] && ![viewController isKindOfClass:[IASKSpecifierValuesViewController class]]) {
|
||||
[self dismiss:nil];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
|
||||
[_viewList release], _viewList = nil;
|
||||
[_file release], _file = nil;
|
||||
[_currentFirstResponder release], _currentFirstResponder = nil;
|
||||
[_settingsReader release], _settingsReader = nil;
|
||||
[_settingsStore release], _settingsStore = nil;
|
||||
|
||||
_delegate = nil;
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Actions
|
||||
|
||||
- (IBAction)dismiss:(id)sender {
|
||||
[self.settingsStore synchronize];
|
||||
self.navigationController.delegate = nil;
|
||||
|
||||
if (self.delegate && [self.delegate conformsToProtocol:@protocol(IASKSettingsDelegate)]) {
|
||||
[self.delegate settingsViewControllerDidEnd:self];
|
||||
}
|
||||
// reload
|
||||
[self.settingsReader initWithFile:self.file andDelegate:self.settingsReaderDelegate];
|
||||
[self.tableView reloadData];
|
||||
}
|
||||
|
||||
- (void)toggledValue:(id)sender {
|
||||
IASKSwitch *toggle = (IASKSwitch*)sender;
|
||||
IASKSpecifier *spec = [_settingsReader specifierForKey:[toggle key]];
|
||||
|
||||
if ([toggle isOn]) {
|
||||
if ([spec trueValue] != nil) {
|
||||
[self.settingsStore setObject:[spec trueValue] forKey:[toggle key]];
|
||||
}
|
||||
else {
|
||||
[self.settingsStore setBool:YES forKey:[toggle key]];
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ([spec falseValue] != nil) {
|
||||
[self.settingsStore setObject:[spec falseValue] forKey:[toggle key]];
|
||||
}
|
||||
else {
|
||||
[self.settingsStore setBool:NO forKey:[toggle key]];
|
||||
}
|
||||
}
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kIASKAppSettingChanged
|
||||
object:[toggle key]
|
||||
userInfo:[NSDictionary dictionaryWithObject:[self.settingsStore objectForKey:[toggle key]]
|
||||
forKey:[toggle key]]];
|
||||
}
|
||||
|
||||
- (void)sliderChangedValue:(id)sender {
|
||||
IASKSlider *slider = (IASKSlider*)sender;
|
||||
[self.settingsStore setFloat:[slider value] forKey:[slider key]];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kIASKAppSettingChanged
|
||||
object:[slider key]
|
||||
userInfo:[NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:[slider value]]
|
||||
forKey:[slider key]]];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark UITableView Functions
|
||||
|
||||
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
|
||||
return [self.settingsReader numberOfSections];
|
||||
}
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||
return [self.settingsReader numberOfRowsForSection:section];
|
||||
}
|
||||
|
||||
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
IASKSpecifier *specifier = [self.settingsReader specifierForIndexPath:indexPath];
|
||||
if ([[specifier type] isEqualToString:kIASKCustomViewSpecifier]) {
|
||||
if ([self.delegate respondsToSelector:@selector(tableView:heightForSpecifier:)]) {
|
||||
return [self.delegate tableView:tableView heightForSpecifier:specifier];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return tableView.rowHeight;
|
||||
}
|
||||
|
||||
- (NSString *)tableView:(UITableView*)tableView titleForHeaderInSection:(NSInteger)section {
|
||||
NSString *header = [self.settingsReader titleForSection:section];
|
||||
if (0 == header.length) {
|
||||
return nil;
|
||||
}
|
||||
return header;
|
||||
}
|
||||
|
||||
- (UIView *)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section {
|
||||
if ([self.delegate respondsToSelector:@selector(settingsViewController:tableView:viewForHeaderForSection:)]) {
|
||||
return [self.delegate settingsViewController:self tableView:tableView viewForHeaderForSection:section];
|
||||
} else {
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
- (CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section {
|
||||
if ([self tableView:tableView viewForHeaderInSection:section] && [self.delegate respondsToSelector:@selector(settingsViewController:tableView:heightForHeaderForSection:)]) {
|
||||
CGFloat result;
|
||||
if ((result = [self.delegate settingsViewController:self tableView:tableView heightForHeaderForSection:section])) {
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
NSString *title;
|
||||
if ((title = [self tableView:tableView titleForHeaderInSection:section])) {
|
||||
CGSize size = [title sizeWithFont:[UIFont boldSystemFontOfSize:[UIFont labelFontSize]]
|
||||
constrainedToSize:CGSizeMake(tableView.frame.size.width - 2*kIASKHorizontalPaddingGroupTitles, INFINITY)
|
||||
lineBreakMode:UILineBreakModeWordWrap];
|
||||
return size.height+kIASKVerticalPaddingGroupTitles;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
|
||||
{
|
||||
NSString *footerText = [self.settingsReader footerTextForSection:section];
|
||||
if (_showCreditsFooter && (section == [self.settingsReader numberOfSections]-1)) {
|
||||
// show credits since this is the last section
|
||||
if ((footerText == nil) || ([footerText length] == 0)) {
|
||||
// show the credits on their own
|
||||
return kIASKCredits;
|
||||
} else {
|
||||
// show the credits below the app's FooterText
|
||||
return [NSString stringWithFormat:@"%@\n\n%@", footerText, kIASKCredits];
|
||||
}
|
||||
} else {
|
||||
if ([footerText length] == 0) {
|
||||
return nil;
|
||||
}
|
||||
return [self.settingsReader footerTextForSection:section];
|
||||
}
|
||||
}
|
||||
|
||||
- (UITableViewCell*)dequeueReusableCellWithIdentifier:(NSString*)identifier {
|
||||
UITableViewCell *cell = nil;
|
||||
if ([identifier isEqualToString:kIASKPSToggleSwitchSpecifier]) {
|
||||
cell = [[[NSBundle mainBundle] loadNibNamed:@"IASKPSToggleSwitchSpecifierViewCell"
|
||||
owner:self
|
||||
options:nil] objectAtIndex:0];
|
||||
}
|
||||
else if ([identifier isEqualToString:kIASKPSMultiValueSpecifier] || [identifier isEqualToString:kIASKPSTitleValueSpecifier]) {
|
||||
cell = [[[IASKPSTitleValueSpecifierViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier] autorelease];
|
||||
cell.accessoryType = [identifier isEqualToString:kIASKPSMultiValueSpecifier] ? UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone;
|
||||
}
|
||||
else if ([identifier isEqualToString:kIASKPSTextFieldSpecifier]) {
|
||||
cell = (IASKPSTextFieldSpecifierViewCell*) [[[NSBundle mainBundle] loadNibNamed:@"IASKPSTextFieldSpecifierViewCell"
|
||||
owner:self
|
||||
options:nil] objectAtIndex:0];
|
||||
}
|
||||
else if ([identifier isEqualToString:kIASKPSSliderSpecifier]) {
|
||||
cell = (IASKPSSliderSpecifierViewCell*) [[[NSBundle mainBundle] loadNibNamed:@"IASKPSSliderSpecifierViewCell"
|
||||
owner:self
|
||||
options:nil] objectAtIndex:0];
|
||||
} else if ([identifier isEqualToString:kIASKPSChildPaneSpecifier]) {
|
||||
cell = [[[IASKPSTitleValueSpecifierViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier] autorelease];
|
||||
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
|
||||
} else if ([identifier isEqualToString:kIASKButtonSpecifier]) {
|
||||
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];
|
||||
} else if ([identifier isEqualToString:kIASKMailComposeSpecifier]) {
|
||||
cell = [[[IASKPSTitleValueSpecifierViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier] autorelease];
|
||||
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
|
||||
} else {
|
||||
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];
|
||||
}
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
IASKSpecifier *specifier = [self.settingsReader specifierForIndexPath:indexPath];
|
||||
if ([specifier.type isEqualToString:kIASKCustomViewSpecifier] && [self.delegate respondsToSelector:@selector(tableView:cellForSpecifier:)]) {
|
||||
UITableViewCell* cell = [self.delegate tableView:tableView cellForSpecifier:specifier];
|
||||
assert(nil != cell && "delegate must return a UITableViewCell for custom cell types");
|
||||
return cell;
|
||||
}
|
||||
|
||||
UITableViewCell *cell = [self dequeueReusableCellWithIdentifier:specifier.type];
|
||||
|
||||
if ([specifier.type isEqualToString:kIASKPSToggleSwitchSpecifier]) {
|
||||
((IASKPSToggleSwitchSpecifierViewCell*)cell).label.text = specifier.title;
|
||||
|
||||
id currentValue = [self.settingsStore objectForKey:specifier.key];
|
||||
BOOL toggleState;
|
||||
if (currentValue) {
|
||||
if ([currentValue isEqual:specifier.trueValue]) {
|
||||
toggleState = YES;
|
||||
} else if ([currentValue isEqual:specifier.falseValue]) {
|
||||
toggleState = NO;
|
||||
} else {
|
||||
toggleState = [currentValue boolValue];
|
||||
}
|
||||
} else {
|
||||
toggleState = specifier.defaultBoolValue;
|
||||
}
|
||||
((IASKPSToggleSwitchSpecifierViewCell*)cell).toggle.on = toggleState;
|
||||
|
||||
[((IASKPSToggleSwitchSpecifierViewCell*)cell).toggle addTarget:self action:@selector(toggledValue:) forControlEvents:UIControlEventValueChanged];
|
||||
((IASKPSToggleSwitchSpecifierViewCell*)cell).toggle.key = specifier.key;
|
||||
}
|
||||
else if ([specifier.type isEqualToString:kIASKPSMultiValueSpecifier]) {
|
||||
cell.textLabel.text = specifier.title;
|
||||
cell.detailTextLabel.text = [[specifier titleForCurrentValue:[self.settingsStore objectForKey:specifier.key] != nil ?
|
||||
[self.settingsStore objectForKey:specifier.key] : specifier.defaultValue] description];
|
||||
}
|
||||
else if ([specifier.type isEqualToString:kIASKPSTitleValueSpecifier]) {
|
||||
cell.textLabel.text = specifier.title;
|
||||
id value = [self.settingsStore objectForKey:specifier.key] ? : specifier.defaultValue;
|
||||
|
||||
NSString *stringValue;
|
||||
if (specifier.multipleValues || specifier.multipleTitles) {
|
||||
stringValue = [specifier titleForCurrentValue:value];
|
||||
} else {
|
||||
stringValue = [value description];
|
||||
}
|
||||
|
||||
cell.detailTextLabel.text = stringValue;
|
||||
cell.userInteractionEnabled = NO;
|
||||
}
|
||||
else if ([specifier.type isEqualToString:kIASKPSTextFieldSpecifier]) {
|
||||
((IASKPSTextFieldSpecifierViewCell*)cell).label.text = specifier.title;
|
||||
|
||||
NSString *textValue = [self.settingsStore objectForKey:specifier.key] != nil ? [self.settingsStore objectForKey:specifier.key] : specifier.defaultStringValue;
|
||||
if (textValue && ![textValue isMemberOfClass:[NSString class]]) {
|
||||
textValue = [NSString stringWithFormat:@"%@", textValue];
|
||||
}
|
||||
IASKTextField *textField = ((IASKPSTextFieldSpecifierViewCell*)cell).textField;
|
||||
textField.text = textValue;
|
||||
textField.key = specifier.key;
|
||||
textField.delegate = self;
|
||||
textField.secureTextEntry = [specifier isSecure];
|
||||
textField.keyboardType = specifier.keyboardType;
|
||||
textField.autocapitalizationType = specifier.autocapitalizationType;
|
||||
[textField addTarget:self action:@selector(_textChanged:) forControlEvents:UIControlEventEditingChanged];
|
||||
if([specifier isSecure]){
|
||||
textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
} else {
|
||||
textField.autocorrectionType = specifier.autoCorrectionType;
|
||||
}
|
||||
[cell setNeedsLayout];
|
||||
}
|
||||
else if ([specifier.type isEqualToString:kIASKPSSliderSpecifier]) {
|
||||
if (specifier.minimumValueImage.length > 0) {
|
||||
((IASKPSSliderSpecifierViewCell*)cell).minImage.image = [UIImage imageWithContentsOfFile:[_settingsReader pathForImageNamed:specifier.minimumValueImage]];
|
||||
}
|
||||
|
||||
if (specifier.maximumValueImage.length > 0) {
|
||||
((IASKPSSliderSpecifierViewCell*)cell).maxImage.image = [UIImage imageWithContentsOfFile:[_settingsReader pathForImageNamed:specifier.maximumValueImage]];
|
||||
}
|
||||
|
||||
IASKSlider *slider = ((IASKPSSliderSpecifierViewCell*)cell).slider;
|
||||
slider.minimumValue = specifier.minimumValue;
|
||||
slider.maximumValue = specifier.maximumValue;
|
||||
slider.value = [self.settingsStore objectForKey:specifier.key] != nil ? [[self.settingsStore objectForKey:specifier.key] floatValue] : [specifier.defaultValue floatValue];
|
||||
[slider addTarget:self action:@selector(sliderChangedValue:) forControlEvents:UIControlEventValueChanged];
|
||||
slider.key = specifier.key;
|
||||
[cell setNeedsLayout];
|
||||
}
|
||||
else if ([specifier.type isEqualToString:kIASKPSChildPaneSpecifier]) {
|
||||
cell.textLabel.text = specifier.title;
|
||||
} else if ([specifier.type isEqualToString:kIASKOpenURLSpecifier] || [specifier.type isEqualToString:kIASKMailComposeSpecifier]) {
|
||||
cell.textLabel.text = specifier.title;
|
||||
cell.detailTextLabel.text = [specifier.defaultValue description];
|
||||
} else if ([specifier.type isEqualToString:kIASKButtonSpecifier]) {
|
||||
NSString *value = [self.settingsStore objectForKey:specifier.key];
|
||||
cell.textLabel.text = [value isKindOfClass:[NSString class]] ? [self.settingsReader titleForStringId:value] : specifier.title;
|
||||
cell.textLabel.textAlignment = UITextAlignmentCenter;
|
||||
} else {
|
||||
cell.textLabel.text = specifier.title;
|
||||
}
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
//create a set of specifier types that can't be selected
|
||||
static NSSet* noSelectionTypes = nil;
|
||||
if(nil == noSelectionTypes) {
|
||||
noSelectionTypes = [[NSSet setWithObjects:kIASKPSToggleSwitchSpecifier, kIASKPSSliderSpecifier, nil] retain];
|
||||
}
|
||||
|
||||
IASKSpecifier *specifier = [self.settingsReader specifierForIndexPath:indexPath];
|
||||
if([noSelectionTypes containsObject:specifier.type]) {
|
||||
return nil;
|
||||
} else {
|
||||
return indexPath;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
IASKSpecifier *specifier = [self.settingsReader specifierForIndexPath:indexPath];
|
||||
|
||||
//switches and sliders can't be selected (should be captured by tableView:willSelectRowAtIndexPath: delegate method)
|
||||
assert(![[specifier type] isEqualToString:kIASKPSToggleSwitchSpecifier]);
|
||||
assert(![[specifier type] isEqualToString:kIASKPSSliderSpecifier]);
|
||||
|
||||
if ([[specifier type] isEqualToString:kIASKPSMultiValueSpecifier]) {
|
||||
IASKSpecifierValuesViewController *targetViewController = [[self.viewList objectAtIndex:kIASKSpecifierValuesViewControllerIndex] objectForKey:@"viewController"];
|
||||
|
||||
if (targetViewController == nil) {
|
||||
// the view controller has not been created yet, create it and set it to our viewList array
|
||||
// create a new dictionary with the new view controller
|
||||
NSMutableDictionary *newItemDict = [NSMutableDictionary dictionaryWithCapacity:3];
|
||||
[newItemDict addEntriesFromDictionary: [self.viewList objectAtIndex:kIASKSpecifierValuesViewControllerIndex]]; // copy the title and explain strings
|
||||
|
||||
targetViewController = [[IASKSpecifierValuesViewController alloc] initWithNibName:@"IASKSpecifierValuesView" bundle:nil];
|
||||
// add the new view controller to the dictionary and then to the 'viewList' array
|
||||
[newItemDict setObject:targetViewController forKey:@"viewController"];
|
||||
[self.viewList replaceObjectAtIndex:kIASKSpecifierValuesViewControllerIndex withObject:newItemDict];
|
||||
[targetViewController release];
|
||||
|
||||
// load the view controll back in to push it
|
||||
targetViewController = [[self.viewList objectAtIndex:kIASKSpecifierValuesViewControllerIndex] objectForKey:@"viewController"];
|
||||
}
|
||||
[targetViewController setCurrentSpecifier:specifier];
|
||||
targetViewController.settingsReader = self.settingsReader;
|
||||
targetViewController.settingsStore = self.settingsStore;
|
||||
[[self navigationController] pushViewController:targetViewController animated:YES];
|
||||
}
|
||||
else if ([[specifier type] isEqualToString:kIASKPSTextFieldSpecifier]) {
|
||||
IASKPSTextFieldSpecifierViewCell *textFieldCell = (id)[tableView cellForRowAtIndexPath:indexPath];
|
||||
[textFieldCell.textField becomeFirstResponder];
|
||||
}
|
||||
else if ([[specifier type] isEqualToString:kIASKPSChildPaneSpecifier]) {
|
||||
|
||||
|
||||
Class vcClass = [specifier viewControllerClass];
|
||||
if (vcClass) {
|
||||
SEL initSelector = [specifier viewControllerSelector];
|
||||
if (!initSelector) {
|
||||
initSelector = @selector(init);
|
||||
}
|
||||
UIViewController * vc = [vcClass performSelector:@selector(alloc)];
|
||||
[vc performSelector:initSelector withObject:[specifier file] withObject:[specifier key]];
|
||||
if ([vc respondsToSelector:@selector(setDelegate:)]) {
|
||||
[vc performSelector:@selector(setDelegate:) withObject:self.delegate];
|
||||
}
|
||||
if ([vc respondsToSelector:@selector(setSettingsStore:)]) {
|
||||
[vc performSelector:@selector(setSettingsStore:) withObject:self.settingsStore];
|
||||
}
|
||||
self.navigationController.delegate = nil;
|
||||
[self.navigationController pushViewController:vc animated:YES];
|
||||
[vc performSelector:@selector(release)];
|
||||
return;
|
||||
}
|
||||
|
||||
if (nil == [specifier file]) {
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||
return;
|
||||
}
|
||||
|
||||
IASKAppSettingsViewController *targetViewController = [[self.viewList objectAtIndex:kIASKSpecifierChildViewControllerIndex] objectForKey:@"viewController"];
|
||||
|
||||
if (targetViewController == nil) {
|
||||
// the view controller has not been created yet, create it and set it to our viewList array
|
||||
// create a new dictionary with the new view controller
|
||||
NSMutableDictionary *newItemDict = [NSMutableDictionary dictionaryWithCapacity:3];
|
||||
[newItemDict addEntriesFromDictionary: [self.viewList objectAtIndex:kIASKSpecifierChildViewControllerIndex]]; // copy the title and explain strings
|
||||
|
||||
targetViewController = [[[self class] alloc] initWithNibName:@"IASKAppSettingsView" bundle:nil];
|
||||
targetViewController.showDoneButton = NO;
|
||||
targetViewController.settingsStore = self.settingsStore;
|
||||
targetViewController.delegate = self.delegate;
|
||||
|
||||
// add the new view controller to the dictionary and then to the 'viewList' array
|
||||
[newItemDict setObject:targetViewController forKey:@"viewController"];
|
||||
[self.viewList replaceObjectAtIndex:kIASKSpecifierChildViewControllerIndex withObject:newItemDict];
|
||||
[targetViewController release];
|
||||
|
||||
// load the view controll back in to push it
|
||||
targetViewController = [[self.viewList objectAtIndex:kIASKSpecifierChildViewControllerIndex] objectForKey:@"viewController"];
|
||||
}
|
||||
targetViewController.settingsReaderDelegate = self.settingsReaderDelegate;
|
||||
targetViewController.file = specifier.file; // changes settingsReader
|
||||
|
||||
targetViewController.title = specifier.title;
|
||||
targetViewController.showCreditsFooter = NO;
|
||||
[[self navigationController] pushViewController:targetViewController animated:YES];
|
||||
} else if ([[specifier type] isEqualToString:kIASKOpenURLSpecifier]) {
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:specifier.file]];
|
||||
} else if ([[specifier type] isEqualToString:kIASKButtonSpecifier]) {
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||
if ([self.delegate respondsToSelector:@selector(settingsViewController:buttonTappedForKey:)]) {
|
||||
[self.delegate settingsViewController:self buttonTappedForKey:[specifier key]];
|
||||
} else {
|
||||
// legacy code, provided for backward compatibility
|
||||
// the delegate mechanism above is much cleaner and doesn't leak
|
||||
Class buttonClass = [specifier buttonClass];
|
||||
SEL buttonAction = [specifier buttonAction];
|
||||
if ([buttonClass respondsToSelector:buttonAction]) {
|
||||
[buttonClass performSelector:buttonAction withObject:self withObject:[specifier key]];
|
||||
NSLog(@"InAppSettingsKit Warning: Using IASKButtonSpecifier without implementing the delegate method is deprecated");
|
||||
}
|
||||
}
|
||||
} else if ([[specifier type] isEqualToString:kIASKMailComposeSpecifier]) {
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||
if ([MFMailComposeViewController canSendMail]) {
|
||||
MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
|
||||
mailViewController.navigationBar.barStyle = self.navigationController.navigationBar.barStyle;
|
||||
mailViewController.navigationBar.tintColor = self.navigationController.navigationBar.tintColor;
|
||||
|
||||
if ([specifier localizedObjectForKey:kIASKMailComposeSubject]) {
|
||||
[mailViewController setSubject:[specifier localizedObjectForKey:kIASKMailComposeSubject]];
|
||||
}
|
||||
if ([[specifier specifierDict] objectForKey:kIASKMailComposeToRecipents]) {
|
||||
[mailViewController setToRecipients:[[specifier specifierDict] objectForKey:kIASKMailComposeToRecipents]];
|
||||
}
|
||||
if ([[specifier specifierDict] objectForKey:kIASKMailComposeCcRecipents]) {
|
||||
[mailViewController setCcRecipients:[[specifier specifierDict] objectForKey:kIASKMailComposeCcRecipents]];
|
||||
}
|
||||
if ([[specifier specifierDict] objectForKey:kIASKMailComposeBccRecipents]) {
|
||||
[mailViewController setBccRecipients:[[specifier specifierDict] objectForKey:kIASKMailComposeBccRecipents]];
|
||||
}
|
||||
if ([specifier localizedObjectForKey:kIASKMailComposeBody]) {
|
||||
BOOL isHTML = NO;
|
||||
if ([[specifier specifierDict] objectForKey:kIASKMailComposeBodyIsHTML]) {
|
||||
isHTML = [[[specifier specifierDict] objectForKey:kIASKMailComposeBodyIsHTML] boolValue];
|
||||
}
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(settingsViewController:mailComposeBodyForSpecifier:)]) {
|
||||
[mailViewController setMessageBody:[self.delegate settingsViewController:self
|
||||
mailComposeBodyForSpecifier:specifier] isHTML:isHTML];
|
||||
}
|
||||
else {
|
||||
[mailViewController setMessageBody:[specifier localizedObjectForKey:kIASKMailComposeBody] isHTML:isHTML];
|
||||
}
|
||||
}
|
||||
|
||||
UIViewController<MFMailComposeViewControllerDelegate> *vc = nil;
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(settingsViewController:viewControllerForMailComposeViewForSpecifier:)]) {
|
||||
vc = [self.delegate settingsViewController:self viewControllerForMailComposeViewForSpecifier:specifier];
|
||||
}
|
||||
|
||||
if (vc == nil) {
|
||||
vc = self;
|
||||
}
|
||||
|
||||
mailViewController.mailComposeDelegate = vc;
|
||||
[vc presentModalViewController:mailViewController animated:YES];
|
||||
[mailViewController release];
|
||||
} else {
|
||||
UIAlertView *alert = [[UIAlertView alloc]
|
||||
initWithTitle:NSLocalizedString(@"Mail not configured", @"InAppSettingsKit")
|
||||
message:NSLocalizedString(@"This device is not configured for sending Email. Please configure the Mail settings in the Settings app.", @"InAppSettingsKit")
|
||||
delegate: nil
|
||||
cancelButtonTitle:NSLocalizedString(@"OK", @"InAppSettingsKit")
|
||||
otherButtonTitles:nil];
|
||||
[alert show];
|
||||
[alert release];
|
||||
}
|
||||
|
||||
} else if ([[specifier type] isEqualToString:kIASKCustomViewSpecifier] && [self.delegate respondsToSelector:@selector(settingsViewController:tableView:didSelectCustomViewSpecifier:)]) {
|
||||
[self.delegate settingsViewController:self tableView:tableView didSelectCustomViewSpecifier:specifier];
|
||||
} else {
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:NO];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark MFMailComposeViewControllerDelegate Function
|
||||
|
||||
-(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
|
||||
|
||||
// Forward the mail compose delegate
|
||||
if ([self.delegate respondsToSelector:@selector(settingsViewController:mailComposeController:didFinishWithResult:error:)]) {
|
||||
[self.delegate settingsViewController:self
|
||||
mailComposeController:controller
|
||||
didFinishWithResult:result
|
||||
error:error];
|
||||
}
|
||||
|
||||
// NOTE: No error handling is done here
|
||||
[self dismissModalViewControllerAnimated:YES];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark UITextFieldDelegate Functions
|
||||
|
||||
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
|
||||
self.currentFirstResponder = textField;
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)_textChanged:(id)sender {
|
||||
IASKTextField *text = (IASKTextField*)sender;
|
||||
[_settingsStore setObject:[text text] forKey:[text key]];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kIASKAppSettingChanged
|
||||
object:[text key]
|
||||
userInfo:[NSDictionary dictionaryWithObject:[text text]
|
||||
forKey:[text key]]];
|
||||
}
|
||||
|
||||
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
|
||||
[textField resignFirstResponder];
|
||||
self.currentFirstResponder = nil;
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark Notifications
|
||||
|
||||
- (void)synchronizeSettings {
|
||||
[_settingsStore synchronize];
|
||||
}
|
||||
|
||||
static NSDictionary *oldUserDefaults = nil;
|
||||
- (void)userDefaultsDidChange {
|
||||
NSDictionary *currentDict = [NSUserDefaults standardUserDefaults].dictionaryRepresentation;
|
||||
NSMutableArray *indexPathsToUpdate = [NSMutableArray array];
|
||||
for (NSString *key in currentDict.allKeys) {
|
||||
if (![[oldUserDefaults valueForKey:key] isEqual:[currentDict valueForKey:key]]) {
|
||||
NSIndexPath *path = [self.settingsReader indexPathForKey:key];
|
||||
if (path && ![[self.settingsReader specifierForKey:key].type isEqualToString:kIASKCustomViewSpecifier]) {
|
||||
[indexPathsToUpdate addObject:path];
|
||||
}
|
||||
}
|
||||
}
|
||||
[oldUserDefaults release], oldUserDefaults = [currentDict retain];
|
||||
|
||||
|
||||
for (UITableViewCell *cell in self.tableView.visibleCells) {
|
||||
if ([cell isKindOfClass:[IASKPSTextFieldSpecifierViewCell class]] && [((IASKPSTextFieldSpecifierViewCell*)cell).textField isFirstResponder]) {
|
||||
[indexPathsToUpdate removeObject:[self.tableView indexPathForCell:cell]];
|
||||
}
|
||||
}
|
||||
if (indexPathsToUpdate.count) {
|
||||
[self.tableView reloadRowsAtIndexPaths:indexPathsToUpdate withRowAnimation:UITableViewRowAnimationNone];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)reload {
|
||||
// wait 0.5 sec until UI is available after applicationWillEnterForeground
|
||||
[self.tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.5];
|
||||
}
|
||||
|
||||
#pragma mark CGRect Utility function
|
||||
CGRect IASKCGRectSwap(CGRect rect) {
|
||||
CGRect newRect;
|
||||
newRect.origin.x = rect.origin.y;
|
||||
newRect.origin.y = rect.origin.x;
|
||||
newRect.size.width = rect.size.height;
|
||||
newRect.size.height = rect.size.width;
|
||||
return newRect;
|
||||
}
|
||||
@end
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
//
|
||||
// IASKAppSettingsWebViewController.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <MessageUI/MessageUI.h>
|
||||
|
||||
@interface IASKAppSettingsWebViewController : UIViewController <UIWebViewDelegate, MFMailComposeViewControllerDelegate> {
|
||||
UIWebView *webView;
|
||||
NSURL *url;
|
||||
}
|
||||
|
||||
- (id)initWithFile:(NSString*)htmlFileName key:(NSString*)key;
|
||||
|
||||
@property (nonatomic, retain) IBOutlet UIWebView *webView;
|
||||
@property (nonatomic, retain) NSURL *url;
|
||||
|
||||
@end
|
||||
148
InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.m
Normal file
148
InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.m
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
//
|
||||
// IASKAppSettingsWebViewController.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2010:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import "IASKAppSettingsWebViewController.h"
|
||||
|
||||
@implementation IASKAppSettingsWebViewController
|
||||
|
||||
@synthesize url;
|
||||
@synthesize webView;
|
||||
|
||||
- (id)initWithFile:(NSString*)urlString key:(NSString*)key {
|
||||
if (!(self = [super initWithNibName:nil bundle:nil])) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
self.url = [NSURL URLWithString:urlString];
|
||||
if (!self.url || ![self.url scheme]) {
|
||||
NSString *path = [[NSBundle mainBundle] pathForResource:[urlString stringByDeletingPathExtension] ofType:[urlString pathExtension]];
|
||||
if(path)
|
||||
self.url = [NSURL fileURLWithPath:path];
|
||||
else
|
||||
self.url = nil;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
- (void)dealloc {
|
||||
[webView release], webView = nil;
|
||||
[url release], url = nil;
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
[webView loadRequest:[NSURLRequest requestWithURL:self.url]];
|
||||
}
|
||||
|
||||
- (void)viewDidUnload {
|
||||
[super viewDidUnload];
|
||||
self.webView = nil;
|
||||
}
|
||||
|
||||
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)webViewDidFinishLoad:(UIWebView *)webView {
|
||||
self.navigationItem.title = [self.webView stringByEvaluatingJavaScriptFromString:@"document.title"];
|
||||
}
|
||||
|
||||
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
|
||||
NSURL *newURL = [request URL];
|
||||
|
||||
// intercept mailto URL and send it to an in-app Mail compose view instead
|
||||
if ([[newURL scheme] isEqualToString:@"mailto"]) {
|
||||
|
||||
NSArray *rawURLparts = [[newURL resourceSpecifier] componentsSeparatedByString:@"?"];
|
||||
if (rawURLparts.count > 2) {
|
||||
return NO; // invalid URL
|
||||
}
|
||||
|
||||
MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
|
||||
mailViewController.mailComposeDelegate = self;
|
||||
|
||||
NSMutableArray *toRecipients = [NSMutableArray array];
|
||||
NSString *defaultRecipient = [rawURLparts objectAtIndex:0];
|
||||
if (defaultRecipient.length) {
|
||||
[toRecipients addObject:defaultRecipient];
|
||||
}
|
||||
|
||||
if (rawURLparts.count == 2) {
|
||||
NSString *queryString = [rawURLparts objectAtIndex:1];
|
||||
|
||||
NSArray *params = [queryString componentsSeparatedByString:@"&"];
|
||||
for (NSString *param in params) {
|
||||
NSArray *keyValue = [param componentsSeparatedByString:@"="];
|
||||
if (keyValue.count != 2) {
|
||||
continue;
|
||||
}
|
||||
NSString *key = [[keyValue objectAtIndex:0] lowercaseString];
|
||||
NSString *value = [keyValue objectAtIndex:1];
|
||||
|
||||
value = (NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault,
|
||||
(CFStringRef)value,
|
||||
CFSTR(""),
|
||||
kCFStringEncodingUTF8);
|
||||
[value autorelease];
|
||||
|
||||
if ([key isEqualToString:@"subject"]) {
|
||||
[mailViewController setSubject:value];
|
||||
}
|
||||
|
||||
if ([key isEqualToString:@"body"]) {
|
||||
[mailViewController setMessageBody:value isHTML:NO];
|
||||
}
|
||||
|
||||
if ([key isEqualToString:@"to"]) {
|
||||
[toRecipients addObjectsFromArray:[value componentsSeparatedByString:@","]];
|
||||
}
|
||||
|
||||
if ([key isEqualToString:@"cc"]) {
|
||||
NSArray *recipients = [value componentsSeparatedByString:@","];
|
||||
[mailViewController setCcRecipients:recipients];
|
||||
}
|
||||
|
||||
if ([key isEqualToString:@"bcc"]) {
|
||||
NSArray *recipients = [value componentsSeparatedByString:@","];
|
||||
[mailViewController setBccRecipients:recipients];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[mailViewController setToRecipients:toRecipients];
|
||||
|
||||
[self presentModalViewController:mailViewController animated:YES];
|
||||
[mailViewController release];
|
||||
return NO;
|
||||
}
|
||||
|
||||
// open inline if host is the same, otherwise, pass to the system
|
||||
if (![newURL host] || [[newURL host] isEqualToString:[self.url host]]) {
|
||||
return YES;
|
||||
}
|
||||
[[UIApplication sharedApplication] openURL:newURL];
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
|
||||
[self dismissModalViewControllerAnimated:YES];
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
//
|
||||
// IASKSpecifierValuesViewController.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "IASKSettingsStore.h"
|
||||
#import "IASKViewController.h"
|
||||
@class IASKSpecifier;
|
||||
@class IASKSettingsReader;
|
||||
|
||||
@interface IASKSpecifierValuesViewController : UIViewController<IASKViewController> {
|
||||
UITableView *_tableView;
|
||||
|
||||
IASKSpecifier *_currentSpecifier;
|
||||
NSIndexPath *_checkedItem;
|
||||
IASKSettingsReader *_settingsReader;
|
||||
id<IASKSettingsStore> _settingsStore;
|
||||
}
|
||||
|
||||
@property (nonatomic, retain) IBOutlet UITableView *tableView;
|
||||
@property (nonatomic, retain) NSIndexPath *checkedItem;
|
||||
@property (nonatomic, retain) IASKSpecifier *currentSpecifier;
|
||||
|
||||
@end
|
||||
195
InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.m
Normal file
195
InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.m
Normal file
|
|
@ -0,0 +1,195 @@
|
|||
//
|
||||
// IASKSpecifierValuesViewController.m
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import "IASKSpecifierValuesViewController.h"
|
||||
#import "IASKSpecifier.h"
|
||||
#import "IASKSettingsReader.h"
|
||||
#import "IASKSettingsStoreUserDefaults.h"
|
||||
|
||||
#define kCellValue @"kCellValue"
|
||||
|
||||
@interface IASKSpecifierValuesViewController()
|
||||
- (void)userDefaultsDidChange;
|
||||
@end
|
||||
|
||||
@implementation IASKSpecifierValuesViewController
|
||||
|
||||
@synthesize tableView=_tableView;
|
||||
@synthesize currentSpecifier=_currentSpecifier;
|
||||
@synthesize checkedItem=_checkedItem;
|
||||
@synthesize settingsReader = _settingsReader;
|
||||
@synthesize settingsStore = _settingsStore;
|
||||
|
||||
- (void) updateCheckedItem {
|
||||
NSInteger index;
|
||||
|
||||
// Find the currently checked item
|
||||
if([self.settingsStore objectForKey:[_currentSpecifier key]]) {
|
||||
index = [[_currentSpecifier multipleValues] indexOfObject:[self.settingsStore objectForKey:[_currentSpecifier key]]];
|
||||
} else {
|
||||
index = [[_currentSpecifier multipleValues] indexOfObject:[_currentSpecifier defaultValue]];
|
||||
}
|
||||
[self setCheckedItem:[NSIndexPath indexPathForRow:index inSection:0]];
|
||||
}
|
||||
|
||||
- (id<IASKSettingsStore>)settingsStore {
|
||||
if(_settingsStore == nil) {
|
||||
_settingsStore = [[IASKSettingsStoreUserDefaults alloc] init];
|
||||
}
|
||||
return _settingsStore;
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
if (_currentSpecifier) {
|
||||
[self setTitle:[_currentSpecifier title]];
|
||||
[self updateCheckedItem];
|
||||
}
|
||||
|
||||
if (_tableView) {
|
||||
[_tableView reloadData];
|
||||
|
||||
// Make sure the currently checked item is visible
|
||||
[_tableView scrollToRowAtIndexPath:[self checkedItem] atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
|
||||
}
|
||||
[super viewWillAppear:animated];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated {
|
||||
[_tableView flashScrollIndicators];
|
||||
[super viewDidAppear:animated];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(userDefaultsDidChange)
|
||||
name:NSUserDefaultsDidChangeNotification
|
||||
object:[NSUserDefaults standardUserDefaults]];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated {
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSUserDefaultsDidChangeNotification object:nil];
|
||||
[super viewDidDisappear:animated];
|
||||
}
|
||||
|
||||
|
||||
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)didReceiveMemoryWarning {
|
||||
// Releases the view if it doesn't have a superview.
|
||||
[super didReceiveMemoryWarning];
|
||||
|
||||
// Release any cached data, images, etc that aren't in use.
|
||||
}
|
||||
|
||||
- (void)viewDidUnload {
|
||||
// Release any retained subviews of the main view.
|
||||
// e.g. self.myOutlet = nil;
|
||||
self.tableView = nil;
|
||||
}
|
||||
|
||||
|
||||
- (void)dealloc {
|
||||
[_currentSpecifier release], _currentSpecifier = nil;
|
||||
[_checkedItem release], _checkedItem = nil;
|
||||
[_settingsReader release], _settingsReader = nil;
|
||||
[_settingsStore release], _settingsStore = nil;
|
||||
[_tableView release], _tableView = nil;
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark UITableView delegates
|
||||
|
||||
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
|
||||
return 1;
|
||||
}
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||
return [_currentSpecifier multipleValuesCount];
|
||||
}
|
||||
|
||||
- (void)selectCell:(UITableViewCell *)cell {
|
||||
[cell setAccessoryType:UITableViewCellAccessoryCheckmark];
|
||||
[[cell textLabel] setTextColor:kIASKgrayBlueColor];
|
||||
}
|
||||
|
||||
- (void)deselectCell:(UITableViewCell *)cell {
|
||||
[cell setAccessoryType:UITableViewCellAccessoryNone];
|
||||
[[cell textLabel] setTextColor:[UIColor darkTextColor]];
|
||||
}
|
||||
|
||||
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {
|
||||
return [_currentSpecifier footerText];
|
||||
}
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellValue];
|
||||
NSArray *titles = [_currentSpecifier multipleTitles];
|
||||
|
||||
if (!cell) {
|
||||
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellValue] autorelease];
|
||||
}
|
||||
|
||||
if ([indexPath isEqual:[self checkedItem]]) {
|
||||
[self selectCell:cell];
|
||||
} else {
|
||||
[self deselectCell:cell];
|
||||
}
|
||||
|
||||
@try {
|
||||
[[cell textLabel] setText:[self.settingsReader titleForStringId:[titles objectAtIndex:indexPath.row]]];
|
||||
}
|
||||
@catch (NSException * e) {}
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
|
||||
if (indexPath == [self checkedItem]) {
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||
return;
|
||||
}
|
||||
|
||||
NSArray *values = [_currentSpecifier multipleValues];
|
||||
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||
[self deselectCell:[tableView cellForRowAtIndexPath:[self checkedItem]]];
|
||||
[self selectCell:[tableView cellForRowAtIndexPath:indexPath]];
|
||||
[self setCheckedItem:indexPath];
|
||||
|
||||
[self.settingsStore setObject:[values objectAtIndex:indexPath.row] forKey:[_currentSpecifier key]];
|
||||
[self.settingsStore synchronize];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kIASKAppSettingChanged
|
||||
object:[_currentSpecifier key]
|
||||
userInfo:[NSDictionary dictionaryWithObject:[values objectAtIndex:indexPath.row]
|
||||
forKey:[_currentSpecifier key]]];
|
||||
}
|
||||
|
||||
#pragma mark Notifications
|
||||
|
||||
- (void)userDefaultsDidChange {
|
||||
NSIndexPath *oldCheckedItem = [[self.checkedItem retain] autorelease];
|
||||
if(_currentSpecifier) {
|
||||
[self updateCheckedItem];
|
||||
}
|
||||
|
||||
// only reload the table if it had changed; prevents animation cancellation
|
||||
if (![self.checkedItem isEqual:oldCheckedItem]) {
|
||||
[_tableView reloadData];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
26
InAppSettingsKit/Controllers/IASKViewController.h
Normal file
26
InAppSettingsKit/Controllers/IASKViewController.h
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
//
|
||||
// IASKAppSettingsViewController.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
@class IASKSettingsReader;
|
||||
@protocol IASKSettingsStore;
|
||||
|
||||
// protocol all IASK view controllers implement
|
||||
@protocol IASKViewController <NSObject>
|
||||
|
||||
@property (nonatomic, retain) IASKSettingsReader* settingsReader;
|
||||
@property (nonatomic, retain) id<IASKSettingsStore> settingsStore;
|
||||
|
||||
@end
|
||||
149
InAppSettingsKit/Models/IASKSettingsReader.h
Normal file
149
InAppSettingsKit/Models/IASKSettingsReader.h
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
//
|
||||
// IASKSettingsReader.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#define kIASKPreferenceSpecifiers @"PreferenceSpecifiers"
|
||||
#define kIASKType @"Type"
|
||||
#define kIASKTitle @"Title"
|
||||
#define kIASKFooterText @"FooterText"
|
||||
#define kIASKKey @"Key"
|
||||
#define kIASKFile @"File"
|
||||
#define kIASKDefaultValue @"DefaultValue"
|
||||
#define kIASKMinimumValue @"MinimumValue"
|
||||
#define kIASKMaximumValue @"MaximumValue"
|
||||
#define kIASKTrueValue @"TrueValue"
|
||||
#define kIASKFalseValue @"FalseValue"
|
||||
#define kIASKIsSecure @"IsSecure"
|
||||
#define KIASKKeyboardType @"KeyboardType"
|
||||
#define kIASKAutocapitalizationType @"AutocapitalizationType"
|
||||
#define kIASKAutoCorrectionType @"AutocorrectionType"
|
||||
#define kIASKValues @"Values"
|
||||
#define kIASKTitles @"Titles"
|
||||
#define kIASKViewControllerClass @"IASKViewControllerClass"
|
||||
#define kIASKViewControllerSelector @"IASKViewControllerSelector"
|
||||
#define kIASKButtonClass @"IASKButtonClass"
|
||||
#define kIASKButtonAction @"IASKButtonAction"
|
||||
#define kIASKMailComposeToRecipents @"IASKMailComposeToRecipents"
|
||||
#define kIASKMailComposeCcRecipents @"IASKMailComposeCcRecipents"
|
||||
#define kIASKMailComposeBccRecipents @"IASKMailComposeBccRecipents"
|
||||
#define kIASKMailComposeSubject @"IASKMailComposeSubject"
|
||||
#define kIASKMailComposeBody @"IASKMailComposeBody"
|
||||
#define kIASKMailComposeBodyIsHTML @"IASKMailComposeBodyIsHTML"
|
||||
#define kIASKKeyboardAlphabet @"Alphabet"
|
||||
#define kIASKKeyboardNumbersAndPunctuation @"NumbersAndPunctuation"
|
||||
#define kIASKKeyboardNumberPad @"NumberPad"
|
||||
#define kIASKKeyboardDecimalPad @"DecimalPad"
|
||||
|
||||
#define KIASKKeyboardURL @"URL"
|
||||
#define kIASKKeyboardEmailAddress @"EmailAddress"
|
||||
#define kIASKAutoCapNone @"None"
|
||||
#define kIASKAutoCapSentences @"Sentences"
|
||||
#define kIASKAutoCapWords @"Words"
|
||||
#define kIASKAutoCapAllCharacters @"AllCharacters"
|
||||
#define kIASKAutoCorrDefault @"Default"
|
||||
#define kIASKAutoCorrNo @"No"
|
||||
#define kIASKAutoCorrYes @"Yes"
|
||||
#define kIASKMinimumValueImage @"MinimumValueImage"
|
||||
#define kIASKMaximumValueImage @"MaximumValueImage"
|
||||
|
||||
#define kIASKPSGroupSpecifier @"PSGroupSpecifier"
|
||||
#define kIASKPSToggleSwitchSpecifier @"PSToggleSwitchSpecifier"
|
||||
#define kIASKPSMultiValueSpecifier @"PSMultiValueSpecifier"
|
||||
#define kIASKPSSliderSpecifier @"PSSliderSpecifier"
|
||||
#define kIASKPSTitleValueSpecifier @"PSTitleValueSpecifier"
|
||||
#define kIASKPSTextFieldSpecifier @"PSTextFieldSpecifier"
|
||||
#define kIASKPSChildPaneSpecifier @"PSChildPaneSpecifier"
|
||||
#define kIASKOpenURLSpecifier @"IASKOpenURLSpecifier"
|
||||
#define kIASKButtonSpecifier @"IASKButtonSpecifier"
|
||||
#define kIASKMailComposeSpecifier @"IASKMailComposeSpecifier"
|
||||
#define kIASKCustomViewSpecifier @"IASKCustomViewSpecifier"
|
||||
|
||||
#define kIASKBundleFolder @"Settings.bundle"
|
||||
#define kIASKBundleFolderAlt @"InAppSettings.bundle"
|
||||
#define kIASKBundleFilename @"Root.plist"
|
||||
#define KIASKBundleLocaleFolderExtension @".lproj"
|
||||
|
||||
#define kIASKAppSettingChanged @"kAppSettingChanged"
|
||||
|
||||
#define kIASKSectionHeaderIndex 0
|
||||
|
||||
#define kIASKSliderNoImagesPadding 11
|
||||
#define kIASKSliderImagesPadding 43
|
||||
|
||||
|
||||
#define kIASKTableWidth 320
|
||||
#define kIASKSpacing 5
|
||||
#define kIASKMinLabelWidth 97
|
||||
#define kIASKMinValueWidth 35
|
||||
#define kIASKPaddingLeft 9
|
||||
#define kIASKPaddingRight 10
|
||||
#define kIASKHorizontalPaddingGroupTitles 19
|
||||
#define kIASKVerticalPaddingGroupTitles 15
|
||||
|
||||
#define kIASKLabelFontSize 17
|
||||
#define kIASKgrayBlueColor [UIColor colorWithRed:0.318 green:0.4 blue:0.569 alpha:1.0]
|
||||
|
||||
#ifndef kCFCoreFoundationVersionNumber_iPhoneOS_4_0
|
||||
#define kCFCoreFoundationVersionNumber_iPhoneOS_4_0 550.32
|
||||
#endif
|
||||
|
||||
#ifndef kCFCoreFoundationVersionNumber_iPhoneOS_4_1
|
||||
#define kCFCoreFoundationVersionNumber_iPhoneOS_4_1 550.38
|
||||
#endif
|
||||
|
||||
|
||||
#define IASK_IF_IOS4_OR_GREATER(...) \
|
||||
if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iPhoneOS_4_0) \
|
||||
{ \
|
||||
__VA_ARGS__ \
|
||||
}
|
||||
|
||||
@class IASKSpecifier;
|
||||
|
||||
@protocol IASKSettingsReaderFilterDelegate <NSObject>
|
||||
- (NSDictionary*) filterPreferenceSpecifier:(NSDictionary*)specifier;
|
||||
@end
|
||||
|
||||
@interface IASKSettingsReader : NSObject {
|
||||
NSString *_path;
|
||||
NSString *_localizationTable;
|
||||
NSString *_bundlePath;
|
||||
NSDictionary *_settingsBundle;
|
||||
NSArray *_dataSource;
|
||||
NSBundle *_bundle;
|
||||
id<IASKSettingsReaderFilterDelegate> _delegate;
|
||||
}
|
||||
|
||||
- (id)initWithFile:(NSString*)file andDelegate:(id<IASKSettingsReaderFilterDelegate>)delegate;
|
||||
- (NSInteger)numberOfSections;
|
||||
- (NSInteger)numberOfRowsForSection:(NSInteger)section;
|
||||
- (IASKSpecifier*)specifierForIndexPath:(NSIndexPath*)indexPath;
|
||||
- (NSIndexPath*)indexPathForKey:(NSString*)key;
|
||||
- (IASKSpecifier*)specifierForKey:(NSString*)key;
|
||||
- (NSString*)titleForSection:(NSInteger)section;
|
||||
- (NSString*)keyForSection:(NSInteger)section;
|
||||
- (NSString*)footerTextForSection:(NSInteger)section;
|
||||
- (NSString*)titleForStringId:(NSString*)stringId;
|
||||
- (NSString*)pathForImageNamed:(NSString*)image;
|
||||
|
||||
@property (nonatomic, retain) NSString *path;
|
||||
@property (nonatomic, retain) NSString *localizationTable;
|
||||
@property (nonatomic, retain) NSString *bundlePath;
|
||||
@property (nonatomic, retain) NSDictionary *settingsBundle;
|
||||
@property (nonatomic, retain) NSArray *dataSource;
|
||||
|
||||
@end
|
||||
279
InAppSettingsKit/Models/IASKSettingsReader.m
Normal file
279
InAppSettingsKit/Models/IASKSettingsReader.m
Normal file
|
|
@ -0,0 +1,279 @@
|
|||
//
|
||||
// IASKSettingsReader.m
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import "IASKSettingsReader.h"
|
||||
#import "IASKSpecifier.h"
|
||||
|
||||
@interface IASKSettingsReader (private)
|
||||
- (void)_reinterpretBundle:(NSDictionary*)settingsBundle;
|
||||
- (BOOL)_sectionHasHeading:(NSInteger)section;
|
||||
- (NSString *)platformSuffix;
|
||||
- (NSString *)locateSettingsFile:(NSString *)file;
|
||||
|
||||
@end
|
||||
|
||||
@implementation IASKSettingsReader
|
||||
|
||||
@synthesize path=_path,
|
||||
localizationTable=_localizationTable,
|
||||
bundlePath=_bundlePath,
|
||||
settingsBundle=_settingsBundle,
|
||||
dataSource=_dataSource;
|
||||
|
||||
|
||||
- (id)init {
|
||||
return [self initWithFile:@"Root" andDelegate:nil];
|
||||
}
|
||||
|
||||
- (id)initWithFile:(NSString*)file andDelegate:(id<IASKSettingsReaderFilterDelegate>)delegate{
|
||||
if ((self=[super init])) {
|
||||
|
||||
|
||||
self.path = [self locateSettingsFile: file];
|
||||
[self setSettingsBundle:[NSDictionary dictionaryWithContentsOfFile:self.path]];
|
||||
self.bundlePath = [self.path stringByDeletingLastPathComponent];
|
||||
_bundle = [[NSBundle bundleWithPath:[self bundlePath]] retain];
|
||||
|
||||
// Look for localization file
|
||||
self.localizationTable = [self.settingsBundle objectForKey:@"StringsTable"];
|
||||
if (!self.localizationTable)
|
||||
{
|
||||
// Look for localization file using filename
|
||||
self.localizationTable = [[[[self.path stringByDeletingPathExtension] // removes '.plist'
|
||||
stringByDeletingPathExtension] // removes potential '.inApp'
|
||||
lastPathComponent] // strip absolute path
|
||||
stringByReplacingOccurrencesOfString:[self platformSuffix] withString:@""]; // removes potential '~device' (~ipad, ~iphone)
|
||||
if([_bundle pathForResource:self.localizationTable ofType:@"strings"] == nil){
|
||||
// Could not find the specified localization: use default
|
||||
self.localizationTable = @"Root";
|
||||
}
|
||||
}
|
||||
_delegate=delegate;
|
||||
if (_settingsBundle) {
|
||||
[self _reinterpretBundle:_settingsBundle];
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
[_path release], _path = nil;
|
||||
[_localizationTable release], _localizationTable = nil;
|
||||
[_bundlePath release], _bundlePath = nil;
|
||||
[_settingsBundle release], _settingsBundle = nil;
|
||||
[_dataSource release], _dataSource = nil;
|
||||
[_bundle release], _bundle = nil;
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void)_reinterpretBundle:(NSDictionary*)settingsBundle {
|
||||
NSArray *preferenceSpecifiers = [settingsBundle objectForKey:kIASKPreferenceSpecifiers];
|
||||
NSInteger sectionCount = -1;
|
||||
NSMutableArray *dataSource = [[[NSMutableArray alloc] init] autorelease];
|
||||
|
||||
for (NSDictionary *specifier in preferenceSpecifiers) {
|
||||
if (_delegate != nil) {
|
||||
specifier = [_delegate filterPreferenceSpecifier:specifier];
|
||||
if (specifier == nil) {
|
||||
// skip
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if ([(NSString*)[specifier objectForKey:kIASKType] isEqualToString:kIASKPSGroupSpecifier]) {
|
||||
NSMutableArray *newArray = [[NSMutableArray alloc] init];
|
||||
|
||||
[newArray addObject:specifier];
|
||||
[dataSource addObject:newArray];
|
||||
[newArray release];
|
||||
sectionCount++;
|
||||
}
|
||||
else {
|
||||
if (sectionCount == -1) {
|
||||
NSMutableArray *newArray = [[NSMutableArray alloc] init];
|
||||
[dataSource addObject:newArray];
|
||||
[newArray release];
|
||||
sectionCount++;
|
||||
}
|
||||
|
||||
IASKSpecifier *newSpecifier = [[IASKSpecifier alloc] initWithSpecifier:specifier];
|
||||
[(NSMutableArray*)[dataSource objectAtIndex:sectionCount] addObject:newSpecifier];
|
||||
[newSpecifier release];
|
||||
}
|
||||
}
|
||||
[self setDataSource:dataSource];
|
||||
}
|
||||
|
||||
- (BOOL)_sectionHasHeading:(NSInteger)section {
|
||||
return [[[[self dataSource] objectAtIndex:section] objectAtIndex:0] isKindOfClass:[NSDictionary class]];
|
||||
}
|
||||
|
||||
- (NSInteger)numberOfSections {
|
||||
return [[self dataSource] count];
|
||||
}
|
||||
|
||||
- (NSInteger)numberOfRowsForSection:(NSInteger)section {
|
||||
int headingCorrection = [self _sectionHasHeading:section] ? 1 : 0;
|
||||
NSInteger ret= [(NSArray*)[[self dataSource] objectAtIndex:section] count] - headingCorrection;
|
||||
return ret;
|
||||
}
|
||||
|
||||
- (IASKSpecifier*)specifierForIndexPath:(NSIndexPath*)indexPath {
|
||||
int headingCorrection = [self _sectionHasHeading:indexPath.section] ? 1 : 0;
|
||||
|
||||
IASKSpecifier *specifier = [[[self dataSource] objectAtIndex:indexPath.section] objectAtIndex:(indexPath.row+headingCorrection)];
|
||||
specifier.settingsReader = self;
|
||||
return specifier;
|
||||
}
|
||||
|
||||
- (NSIndexPath*)indexPathForKey:(NSString *)key {
|
||||
for (NSUInteger sectionIndex = 0; sectionIndex < self.dataSource.count; sectionIndex++) {
|
||||
NSArray *section = [self.dataSource objectAtIndex:sectionIndex];
|
||||
for (NSUInteger rowIndex = 0; rowIndex < section.count; rowIndex++) {
|
||||
IASKSpecifier *specifier = (IASKSpecifier*)[section objectAtIndex:rowIndex];
|
||||
if ([specifier isKindOfClass:[IASKSpecifier class]] && [specifier.key isEqualToString:key]) {
|
||||
NSUInteger correctedRowIndex = rowIndex - [self _sectionHasHeading:sectionIndex];
|
||||
return [NSIndexPath indexPathForRow:correctedRowIndex inSection:sectionIndex];
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (IASKSpecifier*)specifierForKey:(NSString*)key {
|
||||
for (NSArray *specifiers in _dataSource) {
|
||||
for (id sp in specifiers) {
|
||||
if ([sp isKindOfClass:[IASKSpecifier class]]) {
|
||||
if ([[sp key] isEqualToString:key]) {
|
||||
return sp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSString*)titleForSection:(NSInteger)section {
|
||||
if ([self _sectionHasHeading:section]) {
|
||||
NSDictionary *dict = [[[self dataSource] objectAtIndex:section] objectAtIndex:kIASKSectionHeaderIndex];
|
||||
return [self titleForStringId:[dict objectForKey:kIASKTitle]];
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSString*)keyForSection:(NSInteger)section {
|
||||
if ([self _sectionHasHeading:section]) {
|
||||
return [[[[self dataSource] objectAtIndex:section] objectAtIndex:kIASKSectionHeaderIndex] objectForKey:kIASKKey];
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSString*)footerTextForSection:(NSInteger)section {
|
||||
if ([self _sectionHasHeading:section]) {
|
||||
NSDictionary *dict = [[[self dataSource] objectAtIndex:section] objectAtIndex:kIASKSectionHeaderIndex];
|
||||
return [self titleForStringId:[dict objectForKey:kIASKFooterText]];
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSString*)titleForStringId:(NSString*)stringId {
|
||||
return [_bundle localizedStringForKey:stringId value:stringId table:self.localizationTable];
|
||||
}
|
||||
|
||||
- (NSString*)pathForImageNamed:(NSString*)image {
|
||||
return [[self bundlePath] stringByAppendingPathComponent:image];
|
||||
}
|
||||
|
||||
- (NSString *)platformSuffix {
|
||||
BOOL isPad = NO;
|
||||
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 30200)
|
||||
isPad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad;
|
||||
#endif
|
||||
return isPad ? @"~ipad" : @"~iphone";
|
||||
}
|
||||
|
||||
- (NSString *)file:(NSString *)file
|
||||
withBundle:(NSString *)bundle
|
||||
suffix:(NSString *)suffix
|
||||
extension:(NSString *)extension {
|
||||
|
||||
NSString *appBundle = [[NSBundle mainBundle] bundlePath];
|
||||
bundle = [appBundle stringByAppendingPathComponent:bundle];
|
||||
file = [file stringByAppendingFormat:@"%@%@", suffix, extension];
|
||||
return [bundle stringByAppendingPathComponent:file];
|
||||
|
||||
}
|
||||
|
||||
- (NSString *)locateSettingsFile: (NSString *)file {
|
||||
|
||||
// The file is searched in the following order:
|
||||
//
|
||||
// InAppSettings.bundle/FILE~DEVICE.inApp.plist
|
||||
// InAppSettings.bundle/FILE.inApp.plist
|
||||
// InAppSettings.bundle/FILE~DEVICE.plist
|
||||
// InAppSettings.bundle/FILE.plist
|
||||
// Settings.bundle/FILE~DEVICE.inApp.plist
|
||||
// Settings.bundle/FILE.inApp.plist
|
||||
// Settings.bundle/FILE~DEVICE.plist
|
||||
// Settings.bundle/FILE.plist
|
||||
//
|
||||
// where DEVICE is either "iphone" or "ipad" depending on the current
|
||||
// interface idiom.
|
||||
//
|
||||
// Settings.app uses the ~DEVICE suffixes since iOS 4.0. There are some
|
||||
// differences from this implementation:
|
||||
// - For an iPhone-only app running on iPad, Settings.app will not use the
|
||||
// ~iphone suffix. There is no point in using these suffixes outside
|
||||
// of universal apps anyway.
|
||||
// - This implementation uses the device suffixes on iOS 3.x as well.
|
||||
// - also check current locale (short only)
|
||||
|
||||
NSArray *bundles =
|
||||
[NSArray arrayWithObjects:kIASKBundleFolderAlt, kIASKBundleFolder, nil];
|
||||
|
||||
NSArray *extensions =
|
||||
[NSArray arrayWithObjects:@".inApp.plist", @".plist", nil];
|
||||
|
||||
NSArray *suffixes =
|
||||
[NSArray arrayWithObjects:[self platformSuffix], @"", nil];
|
||||
|
||||
NSArray *languages =
|
||||
[NSArray arrayWithObjects:[[[NSLocale preferredLanguages] objectAtIndex:0] stringByAppendingString:KIASKBundleLocaleFolderExtension], @"", nil];
|
||||
|
||||
NSString *path = nil;
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
|
||||
for (NSString *bundle in bundles) {
|
||||
for (NSString *extension in extensions) {
|
||||
for (NSString *suffix in suffixes) {
|
||||
for (NSString *language in languages) {
|
||||
path = [self file:file
|
||||
withBundle:[bundle stringByAppendingPathComponent:language]
|
||||
suffix:suffix
|
||||
extension:extension];
|
||||
if ([fileManager fileExistsAtPath:path]) {
|
||||
goto exitFromNestedLoop;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
exitFromNestedLoop:
|
||||
return path;
|
||||
}
|
||||
|
||||
@end
|
||||
39
InAppSettingsKit/Models/IASKSettingsStore.h
Normal file
39
InAppSettingsKit/Models/IASKSettingsStore.h
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
//
|
||||
// IASKSettingsStore.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2010:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@protocol IASKSettingsStore <NSObject>
|
||||
@required
|
||||
- (void)setBool:(BOOL)value forKey:(NSString*)key;
|
||||
- (void)setFloat:(float)value forKey:(NSString*)key;
|
||||
- (void)setDouble:(double)value forKey:(NSString*)key;
|
||||
- (void)setInteger:(int)value forKey:(NSString*)key;
|
||||
- (void)setObject:(id)value forKey:(NSString*)key;
|
||||
- (BOOL)boolForKey:(NSString*)key;
|
||||
- (float)floatForKey:(NSString*)key;
|
||||
- (double)doubleForKey:(NSString*)key;
|
||||
- (int)integerForKey:(NSString*)key;
|
||||
- (id)objectForKey:(NSString*)key;
|
||||
- (BOOL)synchronize; // Write settings to a permanant storage. Returns YES on success, NO otherwise
|
||||
@end
|
||||
|
||||
|
||||
@interface IASKAbstractSettingsStore : NSObject <IASKSettingsStore> {
|
||||
}
|
||||
|
||||
@end
|
||||
68
InAppSettingsKit/Models/IASKSettingsStore.m
Normal file
68
InAppSettingsKit/Models/IASKSettingsStore.m
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
//
|
||||
// IASKSettingsStore.m
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2010:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import "IASKSettingsStore.h"
|
||||
|
||||
@implementation IASKAbstractSettingsStore
|
||||
|
||||
- (void)setObject:(id)value forKey:(NSString*)key {
|
||||
[NSException raise:@"Unimplemented"
|
||||
format:@"setObject:forKey: must be implemented in subclasses of IASKAbstractSettingsStore"];
|
||||
}
|
||||
|
||||
- (id)objectForKey:(NSString*)key {
|
||||
[NSException raise:@"Unimplemented"
|
||||
format:@"objectForKey: must be implemented in subclasses of IASKAbstractSettingsStore"];
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (void)setBool:(BOOL)value forKey:(NSString*)key {
|
||||
[self setObject:[NSNumber numberWithBool:value] forKey:key];
|
||||
}
|
||||
|
||||
- (void)setFloat:(float)value forKey:(NSString*)key {
|
||||
[self setObject:[NSNumber numberWithFloat:value] forKey:key];
|
||||
}
|
||||
|
||||
- (void)setInteger:(int)value forKey:(NSString*)key {
|
||||
[self setObject:[NSNumber numberWithInt:value] forKey:key];
|
||||
}
|
||||
|
||||
- (void)setDouble:(double)value forKey:(NSString*)key {
|
||||
[self setObject:[NSNumber numberWithDouble:value] forKey:key];
|
||||
}
|
||||
|
||||
- (BOOL)boolForKey:(NSString*)key {
|
||||
return [[self objectForKey:key] boolValue];
|
||||
}
|
||||
|
||||
- (float)floatForKey:(NSString*)key {
|
||||
return [[self objectForKey:key] floatValue];
|
||||
}
|
||||
- (int)integerForKey:(NSString*)key {
|
||||
return [[self objectForKey:key] intValue];
|
||||
}
|
||||
|
||||
- (double)doubleForKey:(NSString*)key {
|
||||
return [[self objectForKey:key] doubleValue];
|
||||
}
|
||||
|
||||
- (BOOL)synchronize {
|
||||
return NO;
|
||||
}
|
||||
|
||||
@end
|
||||
28
InAppSettingsKit/Models/IASKSettingsStoreFile.h
Normal file
28
InAppSettingsKit/Models/IASKSettingsStoreFile.h
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
//
|
||||
// IASKSettingsStoreFile.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2010:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "IASKSettingsStore.h"
|
||||
|
||||
@interface IASKSettingsStoreFile : IASKAbstractSettingsStore {
|
||||
NSString * _filePath;
|
||||
NSMutableDictionary * _dict;
|
||||
}
|
||||
|
||||
- (id)initWithPath:(NSString*)path;
|
||||
|
||||
@end
|
||||
54
InAppSettingsKit/Models/IASKSettingsStoreFile.m
Normal file
54
InAppSettingsKit/Models/IASKSettingsStoreFile.m
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
//
|
||||
// IASKSettingsStoreFile.m
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2010:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import "IASKSettingsStoreFile.h"
|
||||
|
||||
|
||||
@implementation IASKSettingsStoreFile
|
||||
|
||||
- (id)initWithPath:(NSString*)path {
|
||||
if((self = [super init])) {
|
||||
_filePath = [path retain];
|
||||
_dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
|
||||
if(_dict == nil) {
|
||||
_dict = [[NSMutableDictionary alloc] init];
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
[_dict release], _dict = nil;
|
||||
[_filePath release], _filePath = nil;
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
|
||||
- (void)setObject:(id)value forKey:(NSString *)key {
|
||||
[_dict setObject:value forKey:key];
|
||||
}
|
||||
|
||||
- (id)objectForKey:(NSString *)key {
|
||||
return [_dict objectForKey:key];
|
||||
}
|
||||
|
||||
- (BOOL)synchronize {
|
||||
return [_dict writeToFile:_filePath atomically:YES];
|
||||
}
|
||||
|
||||
@end
|
||||
25
InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.h
Normal file
25
InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.h
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
//
|
||||
// IASKSettingsStoreUserDefaults.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2010:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "IASKSettingsStore.h"
|
||||
|
||||
@interface IASKSettingsStoreUserDefaults : IASKAbstractSettingsStore {
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
67
InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.m
Normal file
67
InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.m
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
//
|
||||
// IASKSettingsStoreUserDefaults.m
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2010:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import "IASKSettingsStoreUserDefaults.h"
|
||||
|
||||
|
||||
@implementation IASKSettingsStoreUserDefaults
|
||||
|
||||
- (void)setBool:(BOOL)value forKey:(NSString*)key {
|
||||
[[NSUserDefaults standardUserDefaults] setBool:value forKey:key];
|
||||
}
|
||||
|
||||
- (void)setFloat:(float)value forKey:(NSString*)key {
|
||||
[[NSUserDefaults standardUserDefaults] setFloat:value forKey:key];
|
||||
}
|
||||
|
||||
- (void)setDouble:(double)value forKey:(NSString*)key {
|
||||
[[NSUserDefaults standardUserDefaults] setDouble:value forKey:key];
|
||||
}
|
||||
|
||||
- (void)setInteger:(int)value forKey:(NSString*)key {
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:value forKey:key];
|
||||
}
|
||||
|
||||
- (void)setObject:(id)value forKey:(NSString*)key {
|
||||
[[NSUserDefaults standardUserDefaults] setObject:value forKey:key];
|
||||
}
|
||||
|
||||
- (BOOL)boolForKey:(NSString*)key {
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:key];
|
||||
}
|
||||
|
||||
- (float)floatForKey:(NSString*)key {
|
||||
return [[NSUserDefaults standardUserDefaults] floatForKey:key];
|
||||
}
|
||||
|
||||
- (double)doubleForKey:(NSString*)key {
|
||||
return [[NSUserDefaults standardUserDefaults] doubleForKey:key];
|
||||
}
|
||||
|
||||
- (int)integerForKey:(NSString*)key {
|
||||
return [[NSUserDefaults standardUserDefaults] integerForKey:key];
|
||||
}
|
||||
|
||||
- (id)objectForKey:(NSString*)key {
|
||||
return [[NSUserDefaults standardUserDefaults] objectForKey:key];
|
||||
}
|
||||
|
||||
- (BOOL)synchronize {
|
||||
return [[NSUserDefaults standardUserDefaults] synchronize];
|
||||
}
|
||||
|
||||
@end
|
||||
59
InAppSettingsKit/Models/IASKSpecifier.h
Normal file
59
InAppSettingsKit/Models/IASKSpecifier.h
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
//
|
||||
// IASKSpecifier.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@class IASKSettingsReader;
|
||||
|
||||
@interface IASKSpecifier : NSObject {
|
||||
NSDictionary *_specifierDict;
|
||||
NSDictionary *_multipleValuesDict;
|
||||
IASKSettingsReader *_settingsReader;
|
||||
}
|
||||
@property (nonatomic, retain) NSDictionary *specifierDict;
|
||||
@property (nonatomic, assign) IASKSettingsReader *settingsReader;
|
||||
|
||||
- (id)initWithSpecifier:(NSDictionary*)specifier;
|
||||
- (NSString*)localizedObjectForKey:(NSString*)key;
|
||||
- (NSString*)title;
|
||||
- (NSString*)key;
|
||||
- (NSString*)type;
|
||||
- (NSString*)titleForCurrentValue:(id)currentValue;
|
||||
- (NSInteger)multipleValuesCount;
|
||||
- (NSArray*)multipleValues;
|
||||
- (NSArray*)multipleTitles;
|
||||
- (NSString*)file;
|
||||
- (id)defaultValue;
|
||||
- (id)defaultStringValue;
|
||||
- (BOOL)defaultBoolValue;
|
||||
- (id)trueValue;
|
||||
- (id)falseValue;
|
||||
- (float)minimumValue;
|
||||
- (float)maximumValue;
|
||||
- (NSString*)minimumValueImage;
|
||||
- (NSString*)maximumValueImage;
|
||||
- (BOOL)isSecure;
|
||||
- (UIKeyboardType)keyboardType;
|
||||
- (UITextAutocapitalizationType)autocapitalizationType;
|
||||
- (UITextAutocorrectionType)autoCorrectionType;
|
||||
- (NSString*)footerText;
|
||||
- (Class)viewControllerClass;
|
||||
- (SEL)viewControllerSelector;
|
||||
-(Class)buttonClass;
|
||||
-(SEL)buttonAction;
|
||||
|
||||
@end
|
||||
240
InAppSettingsKit/Models/IASKSpecifier.m
Normal file
240
InAppSettingsKit/Models/IASKSpecifier.m
Normal file
|
|
@ -0,0 +1,240 @@
|
|||
//
|
||||
// IASKSpecifier.m
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import "IASKSpecifier.h"
|
||||
#import "IASKSettingsReader.h"
|
||||
|
||||
@interface IASKSpecifier ()
|
||||
@property (nonatomic, retain) NSDictionary *multipleValuesDict;
|
||||
- (void)_reinterpretValues:(NSDictionary*)specifierDict;
|
||||
@end
|
||||
|
||||
@implementation IASKSpecifier
|
||||
|
||||
@synthesize specifierDict=_specifierDict;
|
||||
@synthesize multipleValuesDict=_multipleValuesDict;
|
||||
@synthesize settingsReader = _settingsReader;
|
||||
|
||||
- (id)initWithSpecifier:(NSDictionary*)specifier {
|
||||
if ((self = [super init])) {
|
||||
[self setSpecifierDict:specifier];
|
||||
|
||||
if ([[self type] isEqualToString:kIASKPSMultiValueSpecifier] ||
|
||||
[[self type] isEqualToString:kIASKPSTitleValueSpecifier]) {
|
||||
[self _reinterpretValues:[self specifierDict]];
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
[_specifierDict release], _specifierDict = nil;
|
||||
[_multipleValuesDict release], _multipleValuesDict = nil;
|
||||
|
||||
_settingsReader = nil;
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void)_reinterpretValues:(NSDictionary*)specifierDict {
|
||||
NSArray *values = [_specifierDict objectForKey:kIASKValues];
|
||||
NSArray *titles = [_specifierDict objectForKey:kIASKTitles];
|
||||
|
||||
NSMutableDictionary *multipleValuesDict = [[[NSMutableDictionary alloc] init] autorelease];
|
||||
|
||||
if (values) {
|
||||
[multipleValuesDict setObject:values forKey:kIASKValues];
|
||||
}
|
||||
|
||||
if (titles) {
|
||||
[multipleValuesDict setObject:titles forKey:kIASKTitles];
|
||||
}
|
||||
|
||||
[self setMultipleValuesDict:multipleValuesDict];
|
||||
}
|
||||
- (NSString*)localizedObjectForKey:(NSString*)key {
|
||||
return [self.settingsReader titleForStringId:[_specifierDict objectForKey:key]];
|
||||
}
|
||||
|
||||
- (NSString*)title {
|
||||
return [self localizedObjectForKey:kIASKTitle];
|
||||
}
|
||||
|
||||
- (NSString*)footerText {
|
||||
return [self localizedObjectForKey:kIASKFooterText];
|
||||
}
|
||||
|
||||
-(Class) viewControllerClass {
|
||||
return NSClassFromString([_specifierDict objectForKey:kIASKViewControllerClass]);
|
||||
}
|
||||
|
||||
-(SEL) viewControllerSelector {
|
||||
return NSSelectorFromString([_specifierDict objectForKey:kIASKViewControllerSelector]);
|
||||
}
|
||||
|
||||
-(Class)buttonClass {
|
||||
return NSClassFromString([_specifierDict objectForKey:kIASKButtonClass]);
|
||||
}
|
||||
|
||||
-(SEL)buttonAction {
|
||||
return NSSelectorFromString([_specifierDict objectForKey:kIASKButtonAction]);
|
||||
}
|
||||
|
||||
- (NSString*)key {
|
||||
return [_specifierDict objectForKey:kIASKKey];
|
||||
}
|
||||
|
||||
- (NSString*)type {
|
||||
return [_specifierDict objectForKey:kIASKType];
|
||||
}
|
||||
|
||||
- (NSString*)titleForCurrentValue:(id)currentValue {
|
||||
NSArray *values = [self multipleValues];
|
||||
NSArray *titles = [self multipleTitles];
|
||||
if (values.count != titles.count) {
|
||||
return nil;
|
||||
}
|
||||
NSInteger keyIndex = [values indexOfObject:currentValue];
|
||||
if (keyIndex == NSNotFound) {
|
||||
return nil;
|
||||
}
|
||||
@try {
|
||||
return [self.settingsReader titleForStringId:[titles objectAtIndex:keyIndex]];
|
||||
}
|
||||
@catch (NSException * e) {}
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSInteger)multipleValuesCount {
|
||||
return [[_multipleValuesDict objectForKey:kIASKValues] count];
|
||||
}
|
||||
|
||||
- (NSArray*)multipleValues {
|
||||
return [_multipleValuesDict objectForKey:kIASKValues];
|
||||
}
|
||||
|
||||
- (NSArray*)multipleTitles {
|
||||
return [_multipleValuesDict objectForKey:kIASKTitles];
|
||||
}
|
||||
|
||||
- (NSString*)file {
|
||||
return [_specifierDict objectForKey:kIASKFile];
|
||||
}
|
||||
|
||||
- (id)defaultValue {
|
||||
return [_specifierDict objectForKey:kIASKDefaultValue];
|
||||
}
|
||||
|
||||
- (id)defaultStringValue {
|
||||
return [[_specifierDict objectForKey:kIASKDefaultValue] description];
|
||||
}
|
||||
|
||||
- (BOOL)defaultBoolValue {
|
||||
id defaultValue = [self defaultValue];
|
||||
if ([defaultValue isEqual:[self trueValue]]) {
|
||||
return YES;
|
||||
}
|
||||
if ([defaultValue isEqual:[self falseValue]]) {
|
||||
return NO;
|
||||
}
|
||||
return [defaultValue boolValue];
|
||||
}
|
||||
|
||||
- (id)trueValue {
|
||||
return [_specifierDict objectForKey:kIASKTrueValue];
|
||||
}
|
||||
|
||||
- (id)falseValue {
|
||||
return [_specifierDict objectForKey:kIASKFalseValue];
|
||||
}
|
||||
|
||||
- (float)minimumValue {
|
||||
return [[_specifierDict objectForKey:kIASKMinimumValue] floatValue];
|
||||
}
|
||||
|
||||
- (float)maximumValue {
|
||||
return [[_specifierDict objectForKey:kIASKMaximumValue] floatValue];
|
||||
}
|
||||
|
||||
- (NSString*)minimumValueImage {
|
||||
return [_specifierDict objectForKey:kIASKMinimumValueImage];
|
||||
}
|
||||
|
||||
- (NSString*)maximumValueImage {
|
||||
return [_specifierDict objectForKey:kIASKMaximumValueImage];
|
||||
}
|
||||
|
||||
- (BOOL)isSecure {
|
||||
return [[_specifierDict objectForKey:kIASKIsSecure] boolValue];
|
||||
}
|
||||
|
||||
- (UIKeyboardType)keyboardType {
|
||||
if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardAlphabet]) {
|
||||
return UIKeyboardTypeDefault;
|
||||
}
|
||||
else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardNumbersAndPunctuation]) {
|
||||
return UIKeyboardTypeNumbersAndPunctuation;
|
||||
}
|
||||
else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardNumberPad]) {
|
||||
return UIKeyboardTypeNumberPad;
|
||||
}
|
||||
else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardDecimalPad]) {
|
||||
if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iPhoneOS_4_1) {
|
||||
return UIKeyboardTypeDecimalPad;
|
||||
}
|
||||
else {
|
||||
return UIKeyboardTypeNumbersAndPunctuation;
|
||||
}
|
||||
}
|
||||
else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:KIASKKeyboardURL]) {
|
||||
return UIKeyboardTypeURL;
|
||||
}
|
||||
else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardEmailAddress]) {
|
||||
return UIKeyboardTypeEmailAddress;
|
||||
}
|
||||
return UIKeyboardTypeDefault;
|
||||
}
|
||||
|
||||
- (UITextAutocapitalizationType)autocapitalizationType {
|
||||
if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapNone]) {
|
||||
return UITextAutocapitalizationTypeNone;
|
||||
}
|
||||
else if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapSentences]) {
|
||||
return UITextAutocapitalizationTypeSentences;
|
||||
}
|
||||
else if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapWords]) {
|
||||
return UITextAutocapitalizationTypeWords;
|
||||
}
|
||||
else if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapAllCharacters]) {
|
||||
return UITextAutocapitalizationTypeAllCharacters;
|
||||
}
|
||||
return UITextAutocapitalizationTypeNone;
|
||||
}
|
||||
|
||||
- (UITextAutocorrectionType)autoCorrectionType {
|
||||
if ([[_specifierDict objectForKey:kIASKAutoCorrectionType] isEqualToString:kIASKAutoCorrDefault]) {
|
||||
return UITextAutocorrectionTypeDefault;
|
||||
}
|
||||
else if ([[_specifierDict objectForKey:kIASKAutoCorrectionType] isEqualToString:kIASKAutoCorrNo]) {
|
||||
return UITextAutocorrectionTypeNo;
|
||||
}
|
||||
else if ([[_specifierDict objectForKey:kIASKAutoCorrectionType] isEqualToString:kIASKAutoCorrYes]) {
|
||||
return UITextAutocorrectionTypeYes;
|
||||
}
|
||||
return UITextAutocorrectionTypeDefault;
|
||||
}
|
||||
|
||||
@end
|
||||
31
InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.h
Normal file
31
InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.h
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
//
|
||||
// IASKPSSliderSpecifierViewCell.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@class IASKSlider;
|
||||
|
||||
@interface IASKPSSliderSpecifierViewCell : UITableViewCell {
|
||||
IASKSlider *_slider;
|
||||
UIImageView *_minImage;
|
||||
UIImageView *_maxImage;
|
||||
}
|
||||
|
||||
@property (nonatomic, assign) IBOutlet IASKSlider *slider;
|
||||
@property (nonatomic, assign) IBOutlet UIImageView *minImage;
|
||||
@property (nonatomic, assign) IBOutlet UIImageView *maxImage;
|
||||
|
||||
@end
|
||||
72
InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.m
Normal file
72
InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.m
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
//
|
||||
// IASKPSSliderSpecifierViewCell.m
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009-2010:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import "IASKPSSliderSpecifierViewCell.h"
|
||||
#import "IASKSlider.h"
|
||||
#import "IASKSettingsReader.h"
|
||||
|
||||
@implementation IASKPSSliderSpecifierViewCell
|
||||
|
||||
@synthesize slider=_slider,
|
||||
minImage=_minImage,
|
||||
maxImage=_maxImage;
|
||||
|
||||
- (void)layoutSubviews {
|
||||
[super layoutSubviews];
|
||||
CGRect sliderBounds = _slider.bounds;
|
||||
CGPoint sliderCenter = _slider.center;
|
||||
const double superViewWidth = _slider.superview.frame.size.width;
|
||||
|
||||
sliderCenter.x = superViewWidth / 2;
|
||||
sliderBounds.size.width = superViewWidth - kIASKSliderNoImagesPadding * 2;
|
||||
_minImage.hidden = YES;
|
||||
_maxImage.hidden = YES;
|
||||
|
||||
// Check if there are min and max images. If so, change the layout accordingly.
|
||||
if (_minImage.image && _maxImage.image) {
|
||||
// Both images
|
||||
_minImage.hidden = NO;
|
||||
_maxImage.hidden = NO;
|
||||
sliderBounds.size.width = superViewWidth - kIASKSliderImagesPadding * 2;
|
||||
}
|
||||
else if (_minImage.image) {
|
||||
// Min image
|
||||
_minImage.hidden = NO;
|
||||
sliderCenter.x += (kIASKSliderImagesPadding - kIASKSliderNoImagesPadding) / 2;
|
||||
sliderBounds.size.width = superViewWidth - kIASKSliderNoImagesPadding - kIASKSliderImagesPadding;
|
||||
}
|
||||
else if (_maxImage.image) {
|
||||
// Max image
|
||||
_maxImage.hidden = NO;
|
||||
sliderCenter.x -= (kIASKSliderImagesPadding - kIASKSliderNoImagesPadding) / 2;
|
||||
sliderBounds.size.width = superViewWidth - kIASKSliderNoImagesPadding - kIASKSliderImagesPadding;
|
||||
}
|
||||
|
||||
_slider.bounds = sliderBounds;
|
||||
_slider.center = sliderCenter;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
_minImage.image = nil;
|
||||
_maxImage.image = nil;
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void)prepareForReuse {
|
||||
_minImage.image = nil;
|
||||
_maxImage.image = nil;
|
||||
}
|
||||
@end
|
||||
29
InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.h
Normal file
29
InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.h
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
//
|
||||
// IASKPSTextFieldSpecifierViewCell.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@class IASKTextField;
|
||||
|
||||
@interface IASKPSTextFieldSpecifierViewCell : UITableViewCell {
|
||||
UILabel *_label;
|
||||
IASKTextField *_textField;
|
||||
}
|
||||
|
||||
@property (nonatomic, assign) IBOutlet UILabel *label;
|
||||
@property (nonatomic, assign) IBOutlet IASKTextField *textField;
|
||||
|
||||
@end
|
||||
52
InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.m
Normal file
52
InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.m
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
//
|
||||
// IASKPSTextFieldSpecifierViewCell.m
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009-2010:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import "IASKPSTextFieldSpecifierViewCell.h"
|
||||
#import "IASKTextField.h"
|
||||
#import "IASKSettingsReader.h"
|
||||
|
||||
@implementation IASKPSTextFieldSpecifierViewCell
|
||||
|
||||
@synthesize label=_label,
|
||||
textField=_textField;
|
||||
|
||||
- (void)layoutSubviews {
|
||||
[super layoutSubviews];
|
||||
CGSize labelSize = [_label sizeThatFits:CGSizeZero];
|
||||
labelSize.width = MIN(labelSize.width, _label.bounds.size.width);
|
||||
|
||||
CGRect textFieldFrame = _textField.frame;
|
||||
textFieldFrame.origin.x = _label.frame.origin.x + MAX(kIASKMinLabelWidth, labelSize.width) + kIASKSpacing;
|
||||
if (!_label.text.length)
|
||||
textFieldFrame.origin.x = _label.frame.origin.x;
|
||||
textFieldFrame.size.width = _textField.superview.frame.size.width - textFieldFrame.origin.x - _label.frame.origin.x;
|
||||
_textField.frame = textFieldFrame;
|
||||
}
|
||||
|
||||
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
|
||||
|
||||
[super setSelected:selected animated:animated];
|
||||
|
||||
// Configure the view for the selected state
|
||||
}
|
||||
|
||||
|
||||
- (void)dealloc {
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
22
InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.h
Normal file
22
InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.h
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
//
|
||||
// IASKPSTitleValueSpecifierViewCell.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2010:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
|
||||
@interface IASKPSTitleValueSpecifierViewCell : UITableViewCell
|
||||
|
||||
@end
|
||||
57
InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.m
Normal file
57
InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.m
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
//
|
||||
// IASKPSTitleValueSpecifierViewCell.m
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2010:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import "IASKPSTitleValueSpecifierViewCell.h"
|
||||
#import "IASKSettingsReader.h"
|
||||
|
||||
|
||||
@implementation IASKPSTitleValueSpecifierViewCell
|
||||
|
||||
- (void)layoutSubviews {
|
||||
// left align the value if the title is empty
|
||||
if (!self.textLabel.text.length) {
|
||||
self.textLabel.text = self.detailTextLabel.text;
|
||||
self.detailTextLabel.text = nil;
|
||||
if ([self.reuseIdentifier isEqualToString:kIASKPSMultiValueSpecifier]) {
|
||||
self.textLabel.font = [UIFont systemFontOfSize:[UIFont labelFontSize]];
|
||||
self.textLabel.textColor = self.detailTextLabel.textColor;
|
||||
}
|
||||
}
|
||||
[super layoutSubviews];
|
||||
|
||||
CGSize viewSize = [self.textLabel superview].frame.size;
|
||||
|
||||
//if there's an image, make room for it
|
||||
CGFloat imageOffset = self.imageView.image ? self.imageView.bounds.size.width + self.imageView.frame.origin.x : 0;
|
||||
|
||||
// set the left title label frame
|
||||
CGFloat labelWidth = [self.textLabel sizeThatFits:CGSizeZero].width;
|
||||
CGFloat minValueWidth = (self.detailTextLabel.text.length) ? kIASKMinValueWidth + kIASKSpacing : 0;
|
||||
labelWidth = MIN(labelWidth, viewSize.width - minValueWidth - kIASKPaddingLeft -kIASKPaddingRight - imageOffset);
|
||||
CGRect labelFrame = CGRectMake(kIASKPaddingLeft + imageOffset, 0, labelWidth, viewSize.height -2);
|
||||
self.textLabel.frame = labelFrame;
|
||||
|
||||
// set the right value label frame
|
||||
if (self.detailTextLabel.text.length) {
|
||||
CGRect valueFrame = CGRectMake(kIASKPaddingLeft + labelWidth + kIASKSpacing + imageOffset,
|
||||
0,
|
||||
viewSize.width - (kIASKPaddingLeft + labelWidth + kIASKSpacing + imageOffset) - kIASKPaddingRight,
|
||||
viewSize.height -2);
|
||||
self.detailTextLabel.frame = valueFrame;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
29
InAppSettingsKit/Views/IASKPSToggleSwitchSpecifierViewCell.h
Normal file
29
InAppSettingsKit/Views/IASKPSToggleSwitchSpecifierViewCell.h
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
//
|
||||
// IASKPSToggleSwitchSpecifierViewCell.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@class IASKSwitch;
|
||||
|
||||
@interface IASKPSToggleSwitchSpecifierViewCell : UITableViewCell {
|
||||
UILabel *_label;
|
||||
IASKSwitch *_toggle;
|
||||
}
|
||||
|
||||
@property (nonatomic, assign) IBOutlet UILabel *label;
|
||||
@property (nonatomic, assign) IBOutlet IASKSwitch *toggle;
|
||||
|
||||
@end
|
||||
62
InAppSettingsKit/Views/IASKPSToggleSwitchSpecifierViewCell.m
Normal file
62
InAppSettingsKit/Views/IASKPSToggleSwitchSpecifierViewCell.m
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
//
|
||||
// IASKPSToggleSwitchSpecifierViewCell.m
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import "IASKPSToggleSwitchSpecifierViewCell.h"
|
||||
#import "IASKSwitch.h"
|
||||
#import "IASKSettingsReader.h"
|
||||
|
||||
@implementation IASKPSToggleSwitchSpecifierViewCell
|
||||
|
||||
@synthesize label=_label,
|
||||
toggle=_toggle;
|
||||
|
||||
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
||||
if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
|
||||
// Initialization code
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
|
||||
|
||||
[super setSelected:selected animated:animated];
|
||||
|
||||
// Configure the view for the selected state
|
||||
}
|
||||
|
||||
|
||||
- (void)dealloc {
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void)layoutSubviews {
|
||||
[super layoutSubviews];
|
||||
if(self.imageView.image) {
|
||||
//resize the label to make room for the image
|
||||
self.label.frame = CGRectMake(CGRectGetWidth(self.imageView.bounds) + self.imageView.frame.origin.x + kIASKSpacing,
|
||||
self.label.frame.origin.y,
|
||||
self.toggle.frame.origin.x - CGRectGetWidth(self.imageView.bounds) - 2.f * kIASKSpacing,
|
||||
self.label.frame.size.height);
|
||||
} else {
|
||||
self.label.frame = CGRectMake(kIASKPaddingLeft,
|
||||
self.label.frame.origin.y,
|
||||
self.toggle.frame.origin.x - kIASKSpacing - kIASKPaddingLeft,
|
||||
self.label.frame.size.height);
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
26
InAppSettingsKit/Views/IASKSlider.h
Normal file
26
InAppSettingsKit/Views/IASKSlider.h
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
//
|
||||
// IASKSlider.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
|
||||
@interface IASKSlider : UISlider {
|
||||
NSString *_key;
|
||||
}
|
||||
|
||||
@property (nonatomic, retain) NSString *key;
|
||||
|
||||
@end
|
||||
30
InAppSettingsKit/Views/IASKSlider.m
Normal file
30
InAppSettingsKit/Views/IASKSlider.m
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
//
|
||||
// IASKSlider.m
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import "IASKSlider.h"
|
||||
|
||||
|
||||
@implementation IASKSlider
|
||||
|
||||
@synthesize key=_key;
|
||||
|
||||
- (void)dealloc {
|
||||
[_key release], _key = nil;
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
@end
|
||||
26
InAppSettingsKit/Views/IASKSwitch.h
Normal file
26
InAppSettingsKit/Views/IASKSwitch.h
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
//
|
||||
// IASKSwitch.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
|
||||
@interface IASKSwitch : UISwitch {
|
||||
NSString *_key;
|
||||
}
|
||||
|
||||
@property (nonatomic, retain) NSString *key;
|
||||
|
||||
@end
|
||||
31
InAppSettingsKit/Views/IASKSwitch.m
Normal file
31
InAppSettingsKit/Views/IASKSwitch.m
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
//
|
||||
// IASKSwitch.m
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import "IASKSwitch.h"
|
||||
|
||||
|
||||
@implementation IASKSwitch
|
||||
|
||||
@synthesize key=_key;
|
||||
|
||||
- (void)dealloc {
|
||||
[_key release], _key = nil;
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
26
InAppSettingsKit/Views/IASKTextField.h
Normal file
26
InAppSettingsKit/Views/IASKTextField.h
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
//
|
||||
// IASKTextField.h
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
|
||||
@interface IASKTextField : UITextField {
|
||||
NSString *_key;
|
||||
}
|
||||
|
||||
@property (nonatomic, retain) NSString *key;
|
||||
|
||||
@end
|
||||
30
InAppSettingsKit/Views/IASKTextField.m
Normal file
30
InAppSettingsKit/Views/IASKTextField.m
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
//
|
||||
// IASKTextField.m
|
||||
// http://www.inappsettingskit.com
|
||||
//
|
||||
// Copyright (c) 2009:
|
||||
// Luc Vandal, Edovia Inc., http://www.edovia.com
|
||||
// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
|
||||
// All rights reserved.
|
||||
//
|
||||
// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
|
||||
// as the original authors of this code. You can give credit in a blog post, a tweet or on
|
||||
// a info page of your app. Also, the original authors appreciate letting them know if you use this code.
|
||||
//
|
||||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#import "IASKTextField.h"
|
||||
|
||||
|
||||
@implementation IASKTextField
|
||||
|
||||
@synthesize key=_key;
|
||||
|
||||
- (void)dealloc {
|
||||
[_key release], _key = nil;
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
@end
|
||||
222
InAppSettingsKit/Xibs/IASKAppSettingsView.xib
Normal file
222
InAppSettingsKit/Xibs/IASKAppSettingsView.xib
Normal file
|
|
@ -0,0 +1,222 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
|
||||
<data>
|
||||
<int key="IBDocument.SystemTarget">1280</int>
|
||||
<string key="IBDocument.SystemVersion">11B26</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">1934</string>
|
||||
<string key="IBDocument.AppKitVersion">1138</string>
|
||||
<string key="IBDocument.HIToolboxVersion">566.00</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="NS.object.0">931</string>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>IBProxyObject</string>
|
||||
<string>IBUITableView</string>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
||||
<integer value="1" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBProxyObject" id="372490531">
|
||||
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBProxyObject" id="975951072">
|
||||
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBUITableView" id="1838945">
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">274</int>
|
||||
<string key="NSFrameSize">{320, 460}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<reference key="NSNextKeyView"/>
|
||||
<object class="NSColor" key="IBUIBackgroundColor">
|
||||
<int key="NSColorSpace">10</int>
|
||||
<object class="NSImage" key="NSImage">
|
||||
<int key="NSImageFlags">549453824</int>
|
||||
<string key="NSSize">{512, 1}</string>
|
||||
<object class="NSMutableArray" key="NSReps">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<integer value="0"/>
|
||||
<object class="NSBitmapImageRep">
|
||||
<object class="NSData" key="NSTIFFRepresentation">
|
||||
<bytes key="NS.bytes">TU0AKgAACAjFzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/
|
||||
y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/
|
||||
xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/
|
||||
xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/
|
||||
xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/
|
||||
xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/
|
||||
xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/
|
||||
y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/
|
||||
y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/
|
||||
xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/
|
||||
xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/
|
||||
xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/
|
||||
xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/
|
||||
xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/
|
||||
y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/
|
||||
y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/
|
||||
xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/
|
||||
xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/
|
||||
xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/
|
||||
xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/
|
||||
xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/
|
||||
y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/
|
||||
y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/
|
||||
xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/
|
||||
xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/
|
||||
xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/
|
||||
xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/
|
||||
xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/
|
||||
y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/
|
||||
y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/
|
||||
xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/
|
||||
xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/
|
||||
xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/
|
||||
xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/
|
||||
xczS/8vS2P/L0tj/xczU/wANAQAAAwAAAAECAAAAAQEAAwAAAAEAAQAAAQIAAwAAAAQAAAiqAQMAAwAA
|
||||
AAEAAQAAAQYAAwAAAAEAAgAAAREABAAAAAEAAAAIARIAAwAAAAEAAQAAARUAAwAAAAEABAAAARYAAwAA
|
||||
AAEAAQAAARcABAAAAAEAAAgAARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAQAAAiyAAAAAAAI
|
||||
AAgACAAIAAEAAQABAAE</bytes>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSColor" key="NSColor">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MCAwAA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
<string key="IBUIColorCocoaTouchKeyPath">groupTableViewBackgroundColor</string>
|
||||
</object>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<bool key="IBUIBouncesZoom">NO</bool>
|
||||
<int key="IBUIStyle">1</int>
|
||||
<int key="IBUISeparatorStyle">1</int>
|
||||
<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
|
||||
<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
|
||||
<float key="IBUIRowHeight">44</float>
|
||||
<float key="IBUISectionHeaderHeight">10</float>
|
||||
<float key="IBUISectionFooterHeight">10</float>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||
<object class="NSMutableArray" key="connectionRecords">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">view</string>
|
||||
<reference key="source" ref="372490531"/>
|
||||
<reference key="destination" ref="1838945"/>
|
||||
</object>
|
||||
<int key="connectionID">10</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">dataSource</string>
|
||||
<reference key="source" ref="1838945"/>
|
||||
<reference key="destination" ref="372490531"/>
|
||||
</object>
|
||||
<int key="connectionID">6</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">delegate</string>
|
||||
<reference key="source" ref="1838945"/>
|
||||
<reference key="destination" ref="372490531"/>
|
||||
</object>
|
||||
<int key="connectionID">7</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
<object class="NSArray" key="orderedObjects">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">0</int>
|
||||
<object class="NSArray" key="object" id="0">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
<reference key="children" ref="1000"/>
|
||||
<nil key="parent"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-1</int>
|
||||
<reference key="object" ref="372490531"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">File's Owner</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-2</int>
|
||||
<reference key="object" ref="975951072"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">4</int>
|
||||
<reference key="object" ref="1838945"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="flattenedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>-1.CustomClassName</string>
|
||||
<string>-1.IBPluginDependency</string>
|
||||
<string>-2.CustomClassName</string>
|
||||
<string>-2.IBPluginDependency</string>
|
||||
<string>4.IBPluginDependency</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>IASKAppSettingsViewController</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>UIResponder</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="unlocalizedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<reference key="dict.values" ref="0"/>
|
||||
</object>
|
||||
<nil key="activeLocalization"/>
|
||||
<object class="NSMutableDictionary" key="localizations">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<reference key="dict.values" ref="0"/>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">10</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes"/>
|
||||
<int key="IBDocument.localizationMode">0</int>
|
||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
|
||||
<real value="1280" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
|
||||
<integer value="3000" key="NS.object.0"/>
|
||||
</object>
|
||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||
<string key="IBCocoaTouchPluginVersion">931</string>
|
||||
</data>
|
||||
</archive>
|
||||
378
InAppSettingsKit/Xibs/IASKAppSettingsWebView.xib
Normal file
378
InAppSettingsKit/Xibs/IASKAppSettingsWebView.xib
Normal file
|
|
@ -0,0 +1,378 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
|
||||
<data>
|
||||
<int key="IBDocument.SystemTarget">1024</int>
|
||||
<string key="IBDocument.SystemVersion">10F569</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">804</string>
|
||||
<string key="IBDocument.AppKitVersion">1038.29</string>
|
||||
<string key="IBDocument.HIToolboxVersion">461.00</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="NS.object.0">123</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<integer value="1"/>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys" id="0">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBProxyObject" id="372490531">
|
||||
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBProxyObject" id="975951072">
|
||||
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBUIView" id="191373211">
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">274</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBUIWebView" id="197045155">
|
||||
<reference key="NSNextResponder" ref="191373211"/>
|
||||
<int key="NSvFlags">274</int>
|
||||
<string key="NSFrameSize">{320, 460}</string>
|
||||
<reference key="NSSuperview" ref="191373211"/>
|
||||
<object class="NSColor" key="IBUIBackgroundColor" id="697334121">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MQA</bytes>
|
||||
</object>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{320, 460}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<reference key="IBUIBackgroundColor" ref="697334121"/>
|
||||
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||
<object class="NSMutableArray" key="connectionRecords">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">view</string>
|
||||
<reference key="source" ref="372490531"/>
|
||||
<reference key="destination" ref="191373211"/>
|
||||
</object>
|
||||
<int key="connectionID">3</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">webView</string>
|
||||
<reference key="source" ref="372490531"/>
|
||||
<reference key="destination" ref="197045155"/>
|
||||
</object>
|
||||
<int key="connectionID">5</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">delegate</string>
|
||||
<reference key="source" ref="197045155"/>
|
||||
<reference key="destination" ref="372490531"/>
|
||||
</object>
|
||||
<int key="connectionID">6</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
<object class="NSArray" key="orderedObjects">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">0</int>
|
||||
<reference key="object" ref="0"/>
|
||||
<reference key="children" ref="1000"/>
|
||||
<nil key="parent"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">1</int>
|
||||
<reference key="object" ref="191373211"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="197045155"/>
|
||||
</object>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-1</int>
|
||||
<reference key="object" ref="372490531"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">File's Owner</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-2</int>
|
||||
<reference key="object" ref="975951072"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">4</int>
|
||||
<reference key="object" ref="197045155"/>
|
||||
<reference key="parent" ref="191373211"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="flattenedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>-1.CustomClassName</string>
|
||||
<string>-2.CustomClassName</string>
|
||||
<string>1.IBEditorWindowLastContentRect</string>
|
||||
<string>1.IBPluginDependency</string>
|
||||
<string>4.IBPluginDependency</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>IASKAppSettingsWebViewController</string>
|
||||
<string>UIResponder</string>
|
||||
<string>{{354, 412}, {320, 480}}</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="unlocalizedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<nil key="activeLocalization"/>
|
||||
<object class="NSMutableDictionary" key="localizations">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">6</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">IASKAppSettingsWebViewController</string>
|
||||
<string key="superclassName">UIViewController</string>
|
||||
<object class="NSMutableDictionary" key="outlets">
|
||||
<string key="NS.key.0">webView</string>
|
||||
<string key="NS.object.0">UIWebView</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
|
||||
<string key="NS.key.0">webView</string>
|
||||
<object class="IBToOneOutletInfo" key="NS.object.0">
|
||||
<string key="name">webView</string>
|
||||
<string key="candidateClassName">UIWebView</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">../InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="842439622">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">UIResponder</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="842439622"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">UISearchBar</string>
|
||||
<string key="superclassName">UIView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">UISearchDisplayController</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">UIView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">UIView</string>
|
||||
<string key="superclassName">UIResponder</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">UIKit.framework/Headers/UIView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">UIViewController</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">UIViewController</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">UIViewController</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">UIViewController</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">UIViewController</string>
|
||||
<string key="superclassName">UIResponder</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">UIWebView</string>
|
||||
<string key="superclassName">UIView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">UIKit.framework/Headers/UIWebView.h</string>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<int key="IBDocument.localizationMode">0</int>
|
||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
|
||||
<integer value="1024" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
|
||||
<integer value="3100" key="NS.object.0"/>
|
||||
</object>
|
||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||
<string key="IBDocument.LastKnownRelativeProjectPath">../InAppSettingsKitSampleApp.xcodeproj</string>
|
||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||
<string key="IBCocoaTouchPluginVersion">123</string>
|
||||
</data>
|
||||
</archive>
|
||||
251
InAppSettingsKit/Xibs/IASKPSSliderSpecifierViewCell.xib
Normal file
251
InAppSettingsKit/Xibs/IASKPSSliderSpecifierViewCell.xib
Normal file
|
|
@ -0,0 +1,251 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
|
||||
<data>
|
||||
<int key="IBDocument.SystemTarget">1296</int>
|
||||
<string key="IBDocument.SystemVersion">11D50</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">2182</string>
|
||||
<string key="IBDocument.AppKitVersion">1138.32</string>
|
||||
<string key="IBDocument.HIToolboxVersion">568.00</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="NS.object.0">1179</string>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>IBUISlider</string>
|
||||
<string>IBUITableViewCell</string>
|
||||
<string>IBUIImageView</string>
|
||||
<string>IBProxyObject</string>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
||||
<integer value="1" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBProxyObject" id="841351856">
|
||||
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBProxyObject" id="371349661">
|
||||
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBUITableViewCell" id="699910302">
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">290</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBUIView" id="833157797">
|
||||
<reference key="NSNextResponder" ref="699910302"/>
|
||||
<int key="NSvFlags">256</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBUISlider" id="213296969">
|
||||
<reference key="NSNextResponder" ref="833157797"/>
|
||||
<int key="NSvFlags">290</int>
|
||||
<string key="NSFrame">{{52, 12}, {216, 23}}</string>
|
||||
<reference key="NSSuperview" ref="833157797"/>
|
||||
<reference key="NSNextKeyView" ref="343121076"/>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
<bool key="IBUIMultipleTouchEnabled">YES</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<int key="IBUIContentHorizontalAlignment">0</int>
|
||||
<int key="IBUIContentVerticalAlignment">0</int>
|
||||
<float key="IBUIValue">0.5</float>
|
||||
<bool key="IBUIContinuous">NO</bool>
|
||||
</object>
|
||||
<object class="IBUIImageView" id="343121076">
|
||||
<reference key="NSNextResponder" ref="833157797"/>
|
||||
<int key="NSvFlags">289</int>
|
||||
<string key="NSFrame">{{289, 13}, {21, 21}}</string>
|
||||
<reference key="NSSuperview" ref="833157797"/>
|
||||
<reference key="NSNextKeyView"/>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
|
||||
<int key="IBUIContentMode">8</int>
|
||||
<bool key="IBUIUserInteractionEnabled">NO</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBUIImageView" id="408162837">
|
||||
<reference key="NSNextResponder" ref="833157797"/>
|
||||
<int key="NSvFlags">292</int>
|
||||
<string key="NSFrame">{{10, 13}, {21, 21}}</string>
|
||||
<reference key="NSSuperview" ref="833157797"/>
|
||||
<reference key="NSNextKeyView" ref="213296969"/>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
|
||||
<int key="IBUIContentMode">7</int>
|
||||
<bool key="IBUIUserInteractionEnabled">NO</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{320, 43}</string>
|
||||
<reference key="NSSuperview" ref="699910302"/>
|
||||
<reference key="NSNextKeyView" ref="408162837"/>
|
||||
<object class="NSColor" key="IBUIBackgroundColor">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MCAwAA</bytes>
|
||||
</object>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
<int key="IBUIContentMode">4</int>
|
||||
<bool key="IBUIMultipleTouchEnabled">YES</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{320, 44}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<reference key="NSNextKeyView" ref="833157797"/>
|
||||
<object class="NSColor" key="IBUIBackgroundColor">
|
||||
<int key="NSColorSpace">1</int>
|
||||
<bytes key="NSRGB">MC45Njg2Mjc0NTEgMC45Njg2Mjc0NTEgMC45Njg2Mjc0NTEAA</bytes>
|
||||
</object>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<int key="IBUISelectionStyle">0</int>
|
||||
<reference key="IBUIContentView" ref="833157797"/>
|
||||
<string key="IBUIReuseIdentifier">PSSliderSpecifier</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||
<object class="NSMutableArray" key="connectionRecords">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">slider</string>
|
||||
<reference key="source" ref="699910302"/>
|
||||
<reference key="destination" ref="213296969"/>
|
||||
</object>
|
||||
<int key="connectionID">12</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">maxImage</string>
|
||||
<reference key="source" ref="699910302"/>
|
||||
<reference key="destination" ref="343121076"/>
|
||||
</object>
|
||||
<int key="connectionID">13</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">minImage</string>
|
||||
<reference key="source" ref="699910302"/>
|
||||
<reference key="destination" ref="408162837"/>
|
||||
</object>
|
||||
<int key="connectionID">14</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
<object class="NSArray" key="orderedObjects">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">0</int>
|
||||
<object class="NSArray" key="object" id="0">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
<reference key="children" ref="1000"/>
|
||||
<nil key="parent"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-1</int>
|
||||
<reference key="object" ref="841351856"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">File's Owner</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-2</int>
|
||||
<reference key="object" ref="371349661"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">2</int>
|
||||
<reference key="object" ref="699910302"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="408162837"/>
|
||||
<reference ref="343121076"/>
|
||||
<reference ref="213296969"/>
|
||||
</object>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">3</int>
|
||||
<reference key="object" ref="213296969"/>
|
||||
<reference key="parent" ref="699910302"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">6</int>
|
||||
<reference key="object" ref="343121076"/>
|
||||
<reference key="parent" ref="699910302"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">9</int>
|
||||
<reference key="object" ref="408162837"/>
|
||||
<reference key="parent" ref="699910302"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="flattenedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>-1.IBPluginDependency</string>
|
||||
<string>-2.CustomClassName</string>
|
||||
<string>-2.IBPluginDependency</string>
|
||||
<string>2.CustomClassName</string>
|
||||
<string>2.IBPluginDependency</string>
|
||||
<string>3.CustomClassName</string>
|
||||
<string>3.IBPluginDependency</string>
|
||||
<string>6.IBPluginDependency</string>
|
||||
<string>9.IBPluginDependency</string>
|
||||
</object>
|
||||
<object class="NSArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>UIResponder</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>IASKPSSliderSpecifierViewCell</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>IASKSlider</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="unlocalizedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<reference key="dict.values" ref="0"/>
|
||||
</object>
|
||||
<nil key="activeLocalization"/>
|
||||
<object class="NSMutableDictionary" key="localizations">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<reference key="dict.values" ref="0"/>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">14</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes"/>
|
||||
<int key="IBDocument.localizationMode">0</int>
|
||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
|
||||
<real value="1296" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
|
||||
<integer value="3100" key="NS.object.0"/>
|
||||
</object>
|
||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||
<string key="IBCocoaTouchPluginVersion">1179</string>
|
||||
</data>
|
||||
</archive>
|
||||
254
InAppSettingsKit/Xibs/IASKPSTextFieldSpecifierViewCell.xib
Normal file
254
InAppSettingsKit/Xibs/IASKPSTextFieldSpecifierViewCell.xib
Normal file
|
|
@ -0,0 +1,254 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
|
||||
<data>
|
||||
<int key="IBDocument.SystemTarget">1296</int>
|
||||
<string key="IBDocument.SystemVersion">11D50</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">2182</string>
|
||||
<string key="IBDocument.AppKitVersion">1138.32</string>
|
||||
<string key="IBDocument.HIToolboxVersion">568.00</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="NS.object.0">1179</string>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>IBUITableViewCell</string>
|
||||
<string>IBUILabel</string>
|
||||
<string>IBUITextField</string>
|
||||
<string>IBProxyObject</string>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
||||
<integer value="1" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBProxyObject" id="841351856">
|
||||
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBProxyObject" id="371349661">
|
||||
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBUITableViewCell" id="639928991">
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">290</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBUIView" id="642554623">
|
||||
<reference key="NSNextResponder" ref="639928991"/>
|
||||
<int key="NSvFlags">256</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBUILabel" id="68117349">
|
||||
<reference key="NSNextResponder" ref="642554623"/>
|
||||
<int key="NSvFlags">294</int>
|
||||
<string key="NSFrame">{{9, 11}, {240, 21}}</string>
|
||||
<reference key="NSSuperview" ref="642554623"/>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
<bool key="IBUIUserInteractionEnabled">NO</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<string key="IBUIText">Label</string>
|
||||
<object class="NSColor" key="IBUITextColor">
|
||||
<int key="NSColorSpace">1</int>
|
||||
<bytes key="NSRGB">MCAwIDAAA</bytes>
|
||||
</object>
|
||||
<nil key="IBUIHighlightedColor"/>
|
||||
<int key="IBUIBaselineAdjustment">1</int>
|
||||
<float key="IBUIMinimumFontSize">10</float>
|
||||
<object class="IBUIFontDescription" key="IBUIFontDescription">
|
||||
<string key="name">Helvetica-Bold</string>
|
||||
<string key="family">Helvetica</string>
|
||||
<int key="traits">2</int>
|
||||
<double key="pointSize">17</double>
|
||||
</object>
|
||||
<object class="NSFont" key="IBUIFont">
|
||||
<string key="NSName">Helvetica-Bold</string>
|
||||
<double key="NSSize">17</double>
|
||||
<int key="NSfFlags">16</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBUITextField" id="239084550">
|
||||
<reference key="NSNextResponder" ref="642554623"/>
|
||||
<int key="NSvFlags">291</int>
|
||||
<string key="NSFrame">{{100, 11}, {201, 21}}</string>
|
||||
<reference key="NSSuperview" ref="642554623"/>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<string key="IBUIText">hello</string>
|
||||
<object class="NSColor" key="IBUITextColor">
|
||||
<int key="NSColorSpace">1</int>
|
||||
<bytes key="NSRGB">MC4yNzQ1MDk4MiAwLjM3NjQ3MDYgMC41MjE1Njg2NgA</bytes>
|
||||
</object>
|
||||
<bool key="IBUIAdjustsFontSizeToFit">YES</bool>
|
||||
<float key="IBUIMinimumFontSize">10</float>
|
||||
<object class="IBUITextInputTraits" key="IBUITextInputTraits">
|
||||
<int key="IBUIReturnKeyType">9</int>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBUIFontDescription" key="IBUIFontDescription">
|
||||
<string key="name">Helvetica</string>
|
||||
<string key="family">Helvetica</string>
|
||||
<int key="traits">0</int>
|
||||
<double key="pointSize">17</double>
|
||||
</object>
|
||||
<object class="NSFont" key="IBUIFont">
|
||||
<string key="NSName">Helvetica</string>
|
||||
<double key="NSSize">17</double>
|
||||
<int key="NSfFlags">16</int>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{320, 43}</string>
|
||||
<reference key="NSSuperview" ref="639928991"/>
|
||||
<object class="NSColor" key="IBUIBackgroundColor">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MCAwAA</bytes>
|
||||
</object>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
<int key="IBUIContentMode">4</int>
|
||||
<bool key="IBUIMultipleTouchEnabled">YES</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{320, 44}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<object class="NSColor" key="IBUIBackgroundColor">
|
||||
<int key="NSColorSpace">1</int>
|
||||
<bytes key="NSRGB">MC45Njg2Mjc0NTEgMC45Njg2Mjc0NTEgMC45Njg2Mjc0NTEAA</bytes>
|
||||
</object>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<int key="IBUISelectionStyle">0</int>
|
||||
<reference key="IBUIContentView" ref="642554623"/>
|
||||
<string key="IBUIReuseIdentifier">PSTextFieldSpecifier</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||
<object class="NSMutableArray" key="connectionRecords">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">label</string>
|
||||
<reference key="source" ref="639928991"/>
|
||||
<reference key="destination" ref="68117349"/>
|
||||
</object>
|
||||
<int key="connectionID">8</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">textField</string>
|
||||
<reference key="source" ref="639928991"/>
|
||||
<reference key="destination" ref="239084550"/>
|
||||
</object>
|
||||
<int key="connectionID">9</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
<object class="NSArray" key="orderedObjects">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">0</int>
|
||||
<object class="NSArray" key="object" id="0">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
<reference key="children" ref="1000"/>
|
||||
<nil key="parent"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-1</int>
|
||||
<reference key="object" ref="841351856"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">File's Owner</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-2</int>
|
||||
<reference key="object" ref="371349661"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">2</int>
|
||||
<reference key="object" ref="639928991"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="239084550"/>
|
||||
<reference ref="68117349"/>
|
||||
</object>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">3</int>
|
||||
<reference key="object" ref="68117349"/>
|
||||
<reference key="parent" ref="639928991"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">4</int>
|
||||
<reference key="object" ref="239084550"/>
|
||||
<reference key="parent" ref="639928991"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="flattenedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>-1.IBPluginDependency</string>
|
||||
<string>-2.CustomClassName</string>
|
||||
<string>-2.IBPluginDependency</string>
|
||||
<string>2.CustomClassName</string>
|
||||
<string>2.IBPluginDependency</string>
|
||||
<string>3.IBPluginDependency</string>
|
||||
<string>4.CustomClassName</string>
|
||||
<string>4.IBPluginDependency</string>
|
||||
</object>
|
||||
<object class="NSArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>UIResponder</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>IASKPSTextFieldSpecifierViewCell</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>IASKTextField</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="unlocalizedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<reference key="dict.values" ref="0"/>
|
||||
</object>
|
||||
<nil key="activeLocalization"/>
|
||||
<object class="NSMutableDictionary" key="localizations">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<reference key="dict.values" ref="0"/>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">9</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes"/>
|
||||
<int key="IBDocument.localizationMode">0</int>
|
||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
|
||||
<real value="1296" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
|
||||
<integer value="3100" key="NS.object.0"/>
|
||||
</object>
|
||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||
<string key="IBCocoaTouchPluginVersion">1179</string>
|
||||
</data>
|
||||
</archive>
|
||||
237
InAppSettingsKit/Xibs/IASKPSToggleSwitchSpecifierViewCell.xib
Normal file
237
InAppSettingsKit/Xibs/IASKPSToggleSwitchSpecifierViewCell.xib
Normal file
|
|
@ -0,0 +1,237 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
|
||||
<data>
|
||||
<int key="IBDocument.SystemTarget">1296</int>
|
||||
<string key="IBDocument.SystemVersion">11D50</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">2182</string>
|
||||
<string key="IBDocument.AppKitVersion">1138.32</string>
|
||||
<string key="IBDocument.HIToolboxVersion">568.00</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="NS.object.0">1179</string>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>IBUITableViewCell</string>
|
||||
<string>IBUISwitch</string>
|
||||
<string>IBUILabel</string>
|
||||
<string>IBProxyObject</string>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
||||
<integer value="1" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBProxyObject" id="841351856">
|
||||
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBProxyObject" id="371349661">
|
||||
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBUITableViewCell" id="507262743">
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">290</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBUIView" id="659685403">
|
||||
<reference key="NSNextResponder" ref="507262743"/>
|
||||
<int key="NSvFlags">256</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBUILabel" id="697203718">
|
||||
<reference key="NSNextResponder" ref="659685403"/>
|
||||
<int key="NSvFlags">294</int>
|
||||
<string key="NSFrame">{{9, 10}, {200, 21}}</string>
|
||||
<reference key="NSSuperview" ref="659685403"/>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
<bool key="IBUIUserInteractionEnabled">NO</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<string key="IBUIText">Label</string>
|
||||
<object class="NSColor" key="IBUITextColor">
|
||||
<int key="NSColorSpace">1</int>
|
||||
<bytes key="NSRGB">MCAwIDAAA</bytes>
|
||||
</object>
|
||||
<nil key="IBUIHighlightedColor"/>
|
||||
<int key="IBUIBaselineAdjustment">1</int>
|
||||
<float key="IBUIMinimumFontSize">10</float>
|
||||
<object class="IBUIFontDescription" key="IBUIFontDescription">
|
||||
<string key="name">Helvetica-Bold</string>
|
||||
<string key="family">Helvetica</string>
|
||||
<int key="traits">2</int>
|
||||
<double key="pointSize">17</double>
|
||||
</object>
|
||||
<object class="NSFont" key="IBUIFont">
|
||||
<string key="NSName">Helvetica-Bold</string>
|
||||
<double key="NSSize">17</double>
|
||||
<int key="NSfFlags">16</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBUISwitch" id="297989004">
|
||||
<reference key="NSNextResponder" ref="659685403"/>
|
||||
<int key="NSvFlags">289</int>
|
||||
<string key="NSFrame">{{218, 8}, {94, 27}}</string>
|
||||
<reference key="NSSuperview" ref="659685403"/>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
<bool key="IBUIMultipleTouchEnabled">YES</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<int key="IBUIContentHorizontalAlignment">0</int>
|
||||
<int key="IBUIContentVerticalAlignment">0</int>
|
||||
<bool key="IBUIOn">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{320, 43}</string>
|
||||
<reference key="NSSuperview" ref="507262743"/>
|
||||
<object class="NSColor" key="IBUIBackgroundColor">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MCAwAA</bytes>
|
||||
</object>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
<int key="IBUIContentMode">4</int>
|
||||
<bool key="IBUIMultipleTouchEnabled">YES</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{320, 44}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<object class="NSColor" key="IBUIBackgroundColor">
|
||||
<int key="NSColorSpace">1</int>
|
||||
<bytes key="NSRGB">MC45Njg2Mjc0NTEgMC45Njg2Mjc0NTEgMC45Njg2Mjc0NTEAA</bytes>
|
||||
</object>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<int key="IBUISelectionStyle">0</int>
|
||||
<reference key="IBUIContentView" ref="659685403"/>
|
||||
<string key="IBUIReuseIdentifier">PSToggleSwitchSpecifier</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||
<object class="NSMutableArray" key="connectionRecords">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">toggle</string>
|
||||
<reference key="source" ref="507262743"/>
|
||||
<reference key="destination" ref="297989004"/>
|
||||
</object>
|
||||
<int key="connectionID">8</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">label</string>
|
||||
<reference key="source" ref="507262743"/>
|
||||
<reference key="destination" ref="697203718"/>
|
||||
</object>
|
||||
<int key="connectionID">9</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
<object class="NSArray" key="orderedObjects">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">0</int>
|
||||
<object class="NSArray" key="object" id="0">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
<reference key="children" ref="1000"/>
|
||||
<nil key="parent"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-1</int>
|
||||
<reference key="object" ref="841351856"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">File's Owner</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-2</int>
|
||||
<reference key="object" ref="371349661"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">2</int>
|
||||
<reference key="object" ref="507262743"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="697203718"/>
|
||||
<reference ref="297989004"/>
|
||||
</object>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">Toggle Switch Specifier View Cell - PSToggleSwitchSpecifier</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">3</int>
|
||||
<reference key="object" ref="697203718"/>
|
||||
<reference key="parent" ref="507262743"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">4</int>
|
||||
<reference key="object" ref="297989004"/>
|
||||
<reference key="parent" ref="507262743"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="flattenedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>-1.IBPluginDependency</string>
|
||||
<string>-2.CustomClassName</string>
|
||||
<string>-2.IBPluginDependency</string>
|
||||
<string>2.CustomClassName</string>
|
||||
<string>2.IBPluginDependency</string>
|
||||
<string>3.IBPluginDependency</string>
|
||||
<string>4.CustomClassName</string>
|
||||
<string>4.IBPluginDependency</string>
|
||||
</object>
|
||||
<object class="NSArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>UIResponder</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>IASKPSToggleSwitchSpecifierViewCell</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>IASKSwitch</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="unlocalizedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<reference key="dict.values" ref="0"/>
|
||||
</object>
|
||||
<nil key="activeLocalization"/>
|
||||
<object class="NSMutableDictionary" key="localizations">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<reference key="dict.values" ref="0"/>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">9</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes"/>
|
||||
<int key="IBDocument.localizationMode">0</int>
|
||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
|
||||
<real value="1296" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
|
||||
<integer value="3100" key="NS.object.0"/>
|
||||
</object>
|
||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||
<string key="IBCocoaTouchPluginVersion">1179</string>
|
||||
</data>
|
||||
</archive>
|
||||
255
InAppSettingsKit/Xibs/IASKSpecifierValuesView.xib
Normal file
255
InAppSettingsKit/Xibs/IASKSpecifierValuesView.xib
Normal file
|
|
@ -0,0 +1,255 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
|
||||
<data>
|
||||
<int key="IBDocument.SystemTarget">768</int>
|
||||
<string key="IBDocument.SystemVersion">10J567</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">1294</string>
|
||||
<string key="IBDocument.AppKitVersion">1038.35</string>
|
||||
<string key="IBDocument.HIToolboxVersion">462.00</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="NS.object.0">294</string>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>IBProxyObject</string>
|
||||
<string>IBUIView</string>
|
||||
<string>IBUITableView</string>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys" id="0">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
<reference key="dict.values" ref="0"/>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBProxyObject" id="372490531">
|
||||
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBProxyObject" id="975951072">
|
||||
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBUIView" id="191373211">
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">292</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBUITableView" id="575792171">
|
||||
<reference key="NSNextResponder" ref="191373211"/>
|
||||
<int key="NSvFlags">274</int>
|
||||
<string key="NSFrameSize">{320, 460}</string>
|
||||
<reference key="NSSuperview" ref="191373211"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView"/>
|
||||
<object class="NSColor" key="IBUIBackgroundColor">
|
||||
<int key="NSColorSpace">10</int>
|
||||
<object class="NSImage" key="NSImage">
|
||||
<int key="NSImageFlags">549453824</int>
|
||||
<string key="NSSize">{84, 1}</string>
|
||||
<object class="NSMutableArray" key="NSReps">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<integer value="0"/>
|
||||
<object class="NSBitmapImageRep">
|
||||
<object class="NSData" key="NSTIFFRepresentation">
|
||||
<bytes key="NS.bytes">TU0AKgAAAVjFzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/
|
||||
y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/
|
||||
xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/
|
||||
xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/
|
||||
xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/
|
||||
xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P8ADQEAAAMAAAABAFQAAAEB
|
||||
AAMAAAABAAEAAAECAAMAAAAEAAAB+gEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES
|
||||
AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABAAEAAAEXAAQAAAABAAABUAEcAAMAAAABAAEAAAFS
|
||||
AAMAAAABAAEAAAFTAAMAAAAEAAACAgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSColor" key="NSColor">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MCAwAA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
<string key="IBUIColorCocoaTouchKeyPath">groupTableViewBackgroundColor</string>
|
||||
</object>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<bool key="IBUIBouncesZoom">NO</bool>
|
||||
<int key="IBUIStyle">1</int>
|
||||
<int key="IBUISeparatorStyle">1</int>
|
||||
<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
|
||||
<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
|
||||
<float key="IBUIRowHeight">44</float>
|
||||
<float key="IBUISectionHeaderHeight">10</float>
|
||||
<float key="IBUISectionFooterHeight">10</float>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{320, 460}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="575792171"/>
|
||||
<object class="NSColor" key="IBUIBackgroundColor">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MQA</bytes>
|
||||
<object class="NSColorSpace" key="NSCustomColorSpace">
|
||||
<int key="NSID">2</int>
|
||||
</object>
|
||||
</object>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||
<object class="NSMutableArray" key="connectionRecords">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">view</string>
|
||||
<reference key="source" ref="372490531"/>
|
||||
<reference key="destination" ref="191373211"/>
|
||||
</object>
|
||||
<int key="connectionID">3</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">dataSource</string>
|
||||
<reference key="source" ref="575792171"/>
|
||||
<reference key="destination" ref="372490531"/>
|
||||
</object>
|
||||
<int key="connectionID">5</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">delegate</string>
|
||||
<reference key="source" ref="575792171"/>
|
||||
<reference key="destination" ref="372490531"/>
|
||||
</object>
|
||||
<int key="connectionID">6</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">_tableView</string>
|
||||
<reference key="source" ref="372490531"/>
|
||||
<reference key="destination" ref="575792171"/>
|
||||
</object>
|
||||
<int key="connectionID">7</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
<object class="NSArray" key="orderedObjects">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">0</int>
|
||||
<reference key="object" ref="0"/>
|
||||
<reference key="children" ref="1000"/>
|
||||
<nil key="parent"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">1</int>
|
||||
<reference key="object" ref="191373211"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="575792171"/>
|
||||
</object>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-1</int>
|
||||
<reference key="object" ref="372490531"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">File's Owner</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-2</int>
|
||||
<reference key="object" ref="975951072"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">4</int>
|
||||
<reference key="object" ref="575792171"/>
|
||||
<reference key="parent" ref="191373211"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="flattenedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>-1.CustomClassName</string>
|
||||
<string>-2.CustomClassName</string>
|
||||
<string>1.IBEditorWindowLastContentRect</string>
|
||||
<string>1.IBPluginDependency</string>
|
||||
<string>4.IBPluginDependency</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>IASKSpecifierValuesViewController</string>
|
||||
<string>UIResponder</string>
|
||||
<string>{{556, 432}, {320, 460}}</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="unlocalizedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<reference key="dict.values" ref="0"/>
|
||||
</object>
|
||||
<nil key="activeLocalization"/>
|
||||
<object class="NSMutableDictionary" key="localizations">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<reference key="dict.values" ref="0"/>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">7</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">IASKSpecifierValuesViewController</string>
|
||||
<string key="superclassName">UIViewController</string>
|
||||
<object class="NSMutableDictionary" key="outlets">
|
||||
<string key="NS.key.0">_tableView</string>
|
||||
<string key="NS.object.0">UITableView</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
|
||||
<string key="NS.key.0">_tableView</string>
|
||||
<object class="IBToOneOutletInfo" key="NS.object.0">
|
||||
<string key="name">_tableView</string>
|
||||
<string key="candidateClassName">UITableView</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">./Classes/IASKSpecifierValuesViewController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<int key="IBDocument.localizationMode">0</int>
|
||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
|
||||
<integer value="768" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
|
||||
<integer value="3000" key="NS.object.0"/>
|
||||
</object>
|
||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||
<string key="IBCocoaTouchPluginVersion">294</string>
|
||||
</data>
|
||||
</archive>
|
||||
BIN
Resources/20-gear2.png
Normal file
BIN
Resources/20-gear2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 375 B |
|
|
@ -58,13 +58,13 @@
|
|||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<false/>
|
||||
<key>Key</key>
|
||||
<string>wifi_only_preference</string>
|
||||
<key>Title</key>
|
||||
<string>Wifi only</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
<false/>
|
||||
<key>Key</key>
|
||||
<string>wifi_only_preference</string>
|
||||
<key>Title</key>
|
||||
<string>Wifi only</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
|
|
@ -90,21 +90,33 @@
|
|||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<false/>
|
||||
<string>None</string>
|
||||
<key>Key</key>
|
||||
<string>enable_srtp_preference</string>
|
||||
<string>media_encryption_preference</string>
|
||||
<key>Title</key>
|
||||
<string>Secure rtp</string>
|
||||
<string>Media Encryption</string>
|
||||
<key>Titles</key>
|
||||
<array>
|
||||
<string>None</string>
|
||||
<string>SRTP</string>
|
||||
<string>ZRTP</string>
|
||||
</array>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
<string>PSMultiValueSpecifier</string>
|
||||
<key>Values</key>
|
||||
<array>
|
||||
<string>None</string>
|
||||
<string>SRTP</string>
|
||||
<string>ZRTP</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<false/>
|
||||
<true/>
|
||||
<key>Key</key>
|
||||
<string>disable_autoboot_preference</string>
|
||||
<string>start_at_boot_preference</string>
|
||||
<key>Title</key>
|
||||
<string>Disable application autostart</string>
|
||||
<string>Start at boot</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
|
|
@ -9,8 +9,6 @@
|
|||
<string>SIP account</string>
|
||||
<key>Type</key>
|
||||
<string>PSGroupSpecifier</string>
|
||||
<key>FooterText</key>
|
||||
<string>Linphone must be restarted for changes to take effect</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>AutocapitalizationType</key>
|
||||
|
|
@ -94,6 +92,16 @@
|
|||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
<key>Title</key>
|
||||
<string>Enable video</string>
|
||||
<key>Key</key>
|
||||
<string>enable_video_preference</string>
|
||||
<key>DefaultValue</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Title</key>
|
||||
<string></string>
|
||||
|
|
@ -4,16 +4,6 @@
|
|||
<dict>
|
||||
<key>PreferenceSpecifiers</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
<key>Title</key>
|
||||
<string>Enable video</string>
|
||||
<key>Key</key>
|
||||
<string>enable_video_preference</string>
|
||||
<key>DefaultValue</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
|
|
@ -39,7 +39,6 @@
|
|||
2237D4091084D7A9001383EE /* oldphone-mono.wav in Resources */ = {isa = PBXBuildFile; fileRef = 2237D4081084D7A9001383EE /* oldphone-mono.wav */; };
|
||||
223963171393CFAF001DE689 /* FastAddressBook.m in Sources */ = {isa = PBXBuildFile; fileRef = 223963161393CFAF001DE689 /* FastAddressBook.m */; };
|
||||
2242E313125235120061DDCE /* oldphone-mono-30s.caf in Resources */ = {isa = PBXBuildFile; fileRef = 2242E312125235120061DDCE /* oldphone-mono-30s.caf */; };
|
||||
2245671D107699F700F10948 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2245671C107699F700F10948 /* Settings.bundle */; };
|
||||
224567C2107B968500F10948 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 224567C1107B968500F10948 /* AVFoundation.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
|
||||
2245F78A1201D38000C4179D /* MoreViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 22E0A81B111C44E100B04932 /* MoreViewController.xib */; };
|
||||
2248E90E12F7E4CF00220D9C /* UIDigitButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 2248E90D12F7E4CF00220D9C /* UIDigitButton.m */; };
|
||||
|
|
@ -49,7 +48,6 @@
|
|||
226183AE1472527D0037138E /* libsrtp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 226183AB1472527D0037138E /* libsrtp.a */; };
|
||||
226183B0147259670037138E /* libmssilk.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 226183AF147259670037138E /* libmssilk.a */; };
|
||||
2264B6D211200342002C2C53 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2264B6D111200342002C2C53 /* SystemConfiguration.framework */; };
|
||||
226B563F13CAF1CD00921595 /* audio.plist in Resources */ = {isa = PBXBuildFile; fileRef = 226B563E13CAF1CD00921595 /* audio.plist */; };
|
||||
226CDADF14E2D0B800513B67 /* libbcg729.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 226CDADD14E2D0B800513B67 /* libbcg729.a */; };
|
||||
226CDAE014E2D0B800513B67 /* libmsbcg729.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 226CDADE14E2D0B800513B67 /* libmsbcg729.a */; };
|
||||
226F2ED61344B0EF00F6EF27 /* libopencore-amrwb.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 226F2ED31344B0EF00F6EF27 /* libopencore-amrwb.a */; };
|
||||
|
|
@ -86,8 +84,6 @@
|
|||
22D8F13B147548E2008C97DB /* FirstLoginViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2218A92412FBE1340088A667 /* FirstLoginViewController.xib */; };
|
||||
22D8F13C147548E2008C97DB /* iTunesArtwork in Resources */ = {isa = PBXBuildFile; fileRef = 228B19AE130290C500F154D3 /* iTunesArtwork */; };
|
||||
22D8F13D147548E2008C97DB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 2214783B1386A2030020F8B8 /* Localizable.strings */; };
|
||||
22D8F140147548E2008C97DB /* audio.plist in Resources */ = {isa = PBXBuildFile; fileRef = 226B563E13CAF1CD00921595 /* audio.plist */; };
|
||||
22D8F141147548E2008C97DB /* video.plist in Resources */ = {isa = PBXBuildFile; fileRef = 22E1A9E713CAF4AA00219531 /* video.plist */; };
|
||||
22D8F142147548E2008C97DB /* rootca.pem in Resources */ = {isa = PBXBuildFile; fileRef = 70571E1913FABCB000CDD3C2 /* rootca.pem */; };
|
||||
22D8F144147548E2008C97DB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
|
||||
22D8F145147548E2008C97DB /* LinphoneAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* LinphoneAppDelegate.m */; };
|
||||
|
|
@ -142,7 +138,6 @@
|
|||
22E0A822111C44E100B04932 /* MoreViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 22E0A81C111C44E100B04932 /* MoreViewController.m */; };
|
||||
22E0A823111C44E100B04932 /* ConsoleViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 22E0A81E111C44E100B04932 /* ConsoleViewController.xib */; };
|
||||
22E0A824111C44E100B04932 /* ConsoleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 22E0A81F111C44E100B04932 /* ConsoleViewController.m */; };
|
||||
22E1A9E813CAF4AA00219531 /* video.plist in Resources */ = {isa = PBXBuildFile; fileRef = 22E1A9E713CAF4AA00219531 /* video.plist */; };
|
||||
22E5B0AF133B5EA20044EA25 /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22E5B0AD133B5EA20044EA25 /* libssl.a */; };
|
||||
22E5B0B0133B5EA20044EA25 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22E5B0AE133B5EA20044EA25 /* libcrypto.a */; };
|
||||
22F2508E107141E100AC9B3F /* DialerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 22F2508C107141E100AC9B3F /* DialerViewController.m */; };
|
||||
|
|
@ -210,6 +205,8 @@
|
|||
D32648411588950F00930C67 /* UICallBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = D326483D1588950F00930C67 /* UICallBar.xib */; };
|
||||
D32648441588F6FC00930C67 /* UIToggleButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D32648431588F6FB00930C67 /* UIToggleButton.m */; };
|
||||
D32648451588F6FC00930C67 /* UIToggleButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D32648431588F6FB00930C67 /* UIToggleButton.m */; };
|
||||
D32942A41594C94300556A1C /* SettingsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D32942A31594C94200556A1C /* SettingsViewController.xib */; };
|
||||
D32942A51594C94300556A1C /* SettingsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D32942A31594C94200556A1C /* SettingsViewController.xib */; };
|
||||
D3432A62158A4446001C6B0B /* status_connected.png in Resources */ = {isa = PBXBuildFile; fileRef = D3432A5C158A4446001C6B0B /* status_connected.png */; };
|
||||
D3432A63158A4446001C6B0B /* status_connected.png in Resources */ = {isa = PBXBuildFile; fileRef = D3432A5C158A4446001C6B0B /* status_connected.png */; };
|
||||
D3432A64158A4446001C6B0B /* status_error.png in Resources */ = {isa = PBXBuildFile; fileRef = D3432A5D158A4446001C6B0B /* status_error.png */; };
|
||||
|
|
@ -229,6 +226,8 @@
|
|||
D347347A1580DDF1003C7B8C /* PhoneMainView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D34734791580DDF1003C7B8C /* PhoneMainView.xib */; };
|
||||
D347347E1580E5F8003C7B8C /* history-actif.png in Resources */ = {isa = PBXBuildFile; fileRef = D347347C1580E5F8003C7B8C /* history-actif.png */; };
|
||||
D347347F1580E5F8003C7B8C /* history-selectionne.png in Resources */ = {isa = PBXBuildFile; fileRef = D347347D1580E5F8003C7B8C /* history-selectionne.png */; };
|
||||
D34F6F9E1594D3FB0095705B /* InAppSettings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D34F6F9D1594D3FB0095705B /* InAppSettings.bundle */; };
|
||||
D34F6F9F1594D3FB0095705B /* InAppSettings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D34F6F9D1594D3FB0095705B /* InAppSettings.bundle */; };
|
||||
D35497FE15875372000081D8 /* ContactsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D35497FC15875372000081D8 /* ContactsViewController.m */; };
|
||||
D35497FF15875372000081D8 /* ContactsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D35497FC15875372000081D8 /* ContactsViewController.m */; };
|
||||
D354980015875372000081D8 /* ContactsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D35497FD15875372000081D8 /* ContactsViewController.xib */; };
|
||||
|
|
@ -271,8 +270,6 @@
|
|||
D35E759A159460580066B1C1 /* ChatViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D35E7596159460570066B1C1 /* ChatViewController.xib */; };
|
||||
D35E759F159460B70066B1C1 /* SettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D35E759D159460B50066B1C1 /* SettingsViewController.m */; };
|
||||
D35E75A0159460B70066B1C1 /* SettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D35E759D159460B50066B1C1 /* SettingsViewController.m */; };
|
||||
D35E75A1159460B70066B1C1 /* SettingsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D35E759E159460B60066B1C1 /* SettingsViewController.xib */; };
|
||||
D35E75A2159460B70066B1C1 /* SettingsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D35E759E159460B60066B1C1 /* SettingsViewController.xib */; };
|
||||
D36C43C6158F2E5A0048BA40 /* UICallCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D36C43C5158F2E5A0048BA40 /* UICallCell.m */; };
|
||||
D36C43C7158F2E5A0048BA40 /* UICallCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D36C43C5158F2E5A0048BA40 /* UICallCell.m */; };
|
||||
D36C43CA158F2EE50048BA40 /* UICallCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D36C43C9158F2EE50048BA40 /* UICallCell.xib */; };
|
||||
|
|
@ -305,6 +302,52 @@
|
|||
D37295CB158B1E2D00D2C0C7 /* registration_inprogress.png in Resources */ = {isa = PBXBuildFile; fileRef = D37295C9158B1E2D00D2C0C7 /* registration_inprogress.png */; };
|
||||
D37295DB158B3C9600D2C0C7 /* video-OFF-disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = D37295DA158B3C9600D2C0C7 /* video-OFF-disabled.png */; };
|
||||
D37295DC158B3C9600D2C0C7 /* video-OFF-disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = D37295DA158B3C9600D2C0C7 /* video-OFF-disabled.png */; };
|
||||
D37DC6C11594AE1800B2A5EB /* LinphoneCoreSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C01594AE1800B2A5EB /* LinphoneCoreSettingsStore.m */; };
|
||||
D37DC6C21594AE1800B2A5EB /* LinphoneCoreSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C01594AE1800B2A5EB /* LinphoneCoreSettingsStore.m */; };
|
||||
D37DC6ED1594AE6F00B2A5EB /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */; };
|
||||
D37DC6EE1594AE6F00B2A5EB /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */; };
|
||||
D37DC6EF1594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */; };
|
||||
D37DC6F01594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */; };
|
||||
D37DC6F11594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6CA1594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m */; };
|
||||
D37DC6F21594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6CA1594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m */; };
|
||||
D37DC6F31594AE6F00B2A5EB /* IASKSettingsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */; };
|
||||
D37DC6F41594AE6F00B2A5EB /* IASKSettingsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */; };
|
||||
D37DC6F51594AE6F00B2A5EB /* IASKSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D01594AE6F00B2A5EB /* IASKSettingsStore.m */; };
|
||||
D37DC6F61594AE6F00B2A5EB /* IASKSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D01594AE6F00B2A5EB /* IASKSettingsStore.m */; };
|
||||
D37DC6F71594AE6F00B2A5EB /* IASKSettingsStoreFile.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */; };
|
||||
D37DC6F81594AE6F00B2A5EB /* IASKSettingsStoreFile.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */; };
|
||||
D37DC6F91594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D41594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m */; };
|
||||
D37DC6FA1594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D41594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m */; };
|
||||
D37DC6FB1594AE6F00B2A5EB /* IASKSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D61594AE6F00B2A5EB /* IASKSpecifier.m */; };
|
||||
D37DC6FC1594AE6F00B2A5EB /* IASKSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D61594AE6F00B2A5EB /* IASKSpecifier.m */; };
|
||||
D37DC6FD1594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m */; };
|
||||
D37DC6FE1594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m */; };
|
||||
D37DC6FF1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6DB1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m */; };
|
||||
D37DC7001594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6DB1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m */; };
|
||||
D37DC7011594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6DD1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m */; };
|
||||
D37DC7021594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6DD1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m */; };
|
||||
D37DC7031594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6DF1594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.m */; };
|
||||
D37DC7041594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6DF1594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.m */; };
|
||||
D37DC7051594AE6F00B2A5EB /* IASKSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E11594AE6F00B2A5EB /* IASKSlider.m */; };
|
||||
D37DC7061594AE6F00B2A5EB /* IASKSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E11594AE6F00B2A5EB /* IASKSlider.m */; };
|
||||
D37DC7071594AE6F00B2A5EB /* IASKSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E31594AE6F00B2A5EB /* IASKSwitch.m */; };
|
||||
D37DC7081594AE6F00B2A5EB /* IASKSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E31594AE6F00B2A5EB /* IASKSwitch.m */; };
|
||||
D37DC7091594AE6F00B2A5EB /* IASKTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E51594AE6F00B2A5EB /* IASKTextField.m */; };
|
||||
D37DC70A1594AE6F00B2A5EB /* IASKTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E51594AE6F00B2A5EB /* IASKTextField.m */; };
|
||||
D37DC70B1594AE6F00B2A5EB /* IASKAppSettingsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D37DC6E71594AE6F00B2A5EB /* IASKAppSettingsView.xib */; };
|
||||
D37DC70C1594AE6F00B2A5EB /* IASKAppSettingsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D37DC6E71594AE6F00B2A5EB /* IASKAppSettingsView.xib */; };
|
||||
D37DC70D1594AE6F00B2A5EB /* IASKAppSettingsWebView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D37DC6E81594AE6F00B2A5EB /* IASKAppSettingsWebView.xib */; };
|
||||
D37DC70E1594AE6F00B2A5EB /* IASKAppSettingsWebView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D37DC6E81594AE6F00B2A5EB /* IASKAppSettingsWebView.xib */; };
|
||||
D37DC70F1594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D37DC6E91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.xib */; };
|
||||
D37DC7101594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D37DC6E91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.xib */; };
|
||||
D37DC7111594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D37DC6EA1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.xib */; };
|
||||
D37DC7121594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D37DC6EA1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.xib */; };
|
||||
D37DC7131594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D37DC6EB1594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.xib */; };
|
||||
D37DC7141594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D37DC6EB1594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.xib */; };
|
||||
D37DC7151594AE6F00B2A5EB /* IASKSpecifierValuesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D37DC6EC1594AE6F00B2A5EB /* IASKSpecifierValuesView.xib */; };
|
||||
D37DC7161594AE6F00B2A5EB /* IASKSpecifierValuesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D37DC6EC1594AE6F00B2A5EB /* IASKSpecifierValuesView.xib */; };
|
||||
D37DC7181594AF3400B2A5EB /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D37DC7171594AF3400B2A5EB /* MessageUI.framework */; };
|
||||
D37DC7191594AF3F00B2A5EB /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D37DC7171594AF3400B2A5EB /* MessageUI.framework */; };
|
||||
D38327F31580FE3A00FA0D23 /* contacts-actif.png in Resources */ = {isa = PBXBuildFile; fileRef = D38327EB1580FE3A00FA0D23 /* contacts-actif.png */; };
|
||||
D38327F41580FE3A00FA0D23 /* contacts-selectionne.png in Resources */ = {isa = PBXBuildFile; fileRef = D38327EC1580FE3A00FA0D23 /* contacts-selectionne.png */; };
|
||||
D38327F51580FE3A00FA0D23 /* dialer-actif.png in Resources */ = {isa = PBXBuildFile; fileRef = D38327ED1580FE3A00FA0D23 /* dialer-actif.png */; };
|
||||
|
|
@ -650,7 +693,6 @@
|
|||
223963151393CFAE001DE689 /* FastAddressBook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FastAddressBook.h; sourceTree = "<group>"; };
|
||||
223963161393CFAF001DE689 /* FastAddressBook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FastAddressBook.m; sourceTree = "<group>"; };
|
||||
2242E312125235120061DDCE /* oldphone-mono-30s.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "oldphone-mono-30s.caf"; path = "liblinphone-sdk/apple-darwin/share/sounds/linphone/rings/oldphone-mono-30s.caf"; sourceTree = "<group>"; };
|
||||
2245671C107699F700F10948 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
|
||||
224567C1107B968500F10948 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
|
||||
2248E90C12F7E4CF00220D9C /* UIDigitButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIDigitButton.h; sourceTree = "<group>"; };
|
||||
2248E90D12F7E4CF00220D9C /* UIDigitButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIDigitButton.m; sourceTree = "<group>"; };
|
||||
|
|
@ -662,7 +704,6 @@
|
|||
226183AB1472527D0037138E /* libsrtp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libsrtp.a; path = "liblinphone-sdk/apple-darwin/lib/libsrtp.a"; sourceTree = "<group>"; };
|
||||
226183AF147259670037138E /* libmssilk.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmssilk.a; path = "liblinphone-sdk/apple-darwin/lib/mediastreamer/plugins/libmssilk.a"; sourceTree = "<group>"; };
|
||||
2264B6D111200342002C2C53 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
|
||||
226B563E13CAF1CD00921595 /* audio.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = audio.plist; path = Settings.bundle/audio.plist; sourceTree = "<group>"; };
|
||||
226CDADD14E2D0B800513B67 /* libbcg729.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libbcg729.a; path = "liblinphone-sdk/apple-darwin/lib/libbcg729.a"; sourceTree = "<group>"; };
|
||||
226CDADE14E2D0B800513B67 /* libmsbcg729.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmsbcg729.a; path = "liblinphone-sdk/apple-darwin/lib/mediastreamer/plugins/libmsbcg729.a"; sourceTree = "<group>"; };
|
||||
226F2ED31344B0EF00F6EF27 /* libopencore-amrwb.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libopencore-amrwb.a"; path = "liblinphone-sdk/apple-darwin/lib/libopencore-amrwb.a"; sourceTree = "<group>"; };
|
||||
|
|
@ -768,7 +809,6 @@
|
|||
22E0A81E111C44E100B04932 /* ConsoleViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ConsoleViewController.xib; sourceTree = "<group>"; };
|
||||
22E0A81F111C44E100B04932 /* ConsoleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConsoleViewController.m; sourceTree = "<group>"; };
|
||||
22E0A820111C44E100B04932 /* ConsoleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConsoleViewController.h; sourceTree = "<group>"; };
|
||||
22E1A9E713CAF4AA00219531 /* video.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = video.plist; path = Settings.bundle/video.plist; sourceTree = "<group>"; };
|
||||
22E5B0AD133B5EA20044EA25 /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libssl.a; path = "liblinphone-sdk/apple-darwin/lib/libssl.a"; sourceTree = "<group>"; };
|
||||
22E5B0AE133B5EA20044EA25 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = "liblinphone-sdk/apple-darwin/lib/libcrypto.a"; sourceTree = "<group>"; };
|
||||
22F2508B107141E100AC9B3F /* DialerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DialerViewController.h; sourceTree = "<group>"; };
|
||||
|
|
@ -824,6 +864,7 @@
|
|||
D326483D1588950F00930C67 /* UICallBar.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UICallBar.xib; sourceTree = "<group>"; };
|
||||
D32648421588F6FA00930C67 /* UIToggleButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIToggleButton.h; sourceTree = "<group>"; };
|
||||
D32648431588F6FB00930C67 /* UIToggleButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIToggleButton.m; sourceTree = "<group>"; };
|
||||
D32942A31594C94200556A1C /* SettingsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SettingsViewController.xib; sourceTree = "<group>"; };
|
||||
D3432A5C158A4446001C6B0B /* status_connected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = status_connected.png; path = Resources/status_connected.png; sourceTree = "<group>"; };
|
||||
D3432A5D158A4446001C6B0B /* status_error.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = status_error.png; path = Resources/status_error.png; sourceTree = "<group>"; };
|
||||
D3432A5E158A4446001C6B0B /* quality-call-0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "quality-call-0.png"; path = "Resources/quality-call-0.png"; sourceTree = "<group>"; };
|
||||
|
|
@ -835,6 +876,7 @@
|
|||
D34734791580DDF1003C7B8C /* PhoneMainView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PhoneMainView.xib; sourceTree = "<group>"; };
|
||||
D347347C1580E5F8003C7B8C /* history-actif.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "history-actif.png"; path = "Resources/history-actif.png"; sourceTree = "<group>"; };
|
||||
D347347D1580E5F8003C7B8C /* history-selectionne.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "history-selectionne.png"; path = "Resources/history-selectionne.png"; sourceTree = "<group>"; };
|
||||
D34F6F9D1594D3FB0095705B /* InAppSettings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = InAppSettings.bundle; sourceTree = "<group>"; };
|
||||
D35497FB15875372000081D8 /* ContactsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactsViewController.h; sourceTree = "<group>"; };
|
||||
D35497FC15875372000081D8 /* ContactsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactsViewController.m; sourceTree = "<group>"; };
|
||||
D35497FD15875372000081D8 /* ContactsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ContactsViewController.xib; sourceTree = "<group>"; };
|
||||
|
|
@ -862,7 +904,6 @@
|
|||
D35E7596159460570066B1C1 /* ChatViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ChatViewController.xib; sourceTree = "<group>"; };
|
||||
D35E759C159460B50066B1C1 /* SettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsViewController.h; sourceTree = "<group>"; };
|
||||
D35E759D159460B50066B1C1 /* SettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingsViewController.m; sourceTree = "<group>"; };
|
||||
D35E759E159460B60066B1C1 /* SettingsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SettingsViewController.xib; sourceTree = "<group>"; };
|
||||
D36C43C4158F2E5A0048BA40 /* UICallCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICallCell.h; sourceTree = "<group>"; };
|
||||
D36C43C5158F2E5A0048BA40 /* UICallCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICallCell.m; sourceTree = "<group>"; };
|
||||
D36C43C9158F2EE50048BA40 /* UICallCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UICallCell.xib; sourceTree = "<group>"; };
|
||||
|
|
@ -881,6 +922,46 @@
|
|||
D36FB2D41589EF7C0036F6F2 /* UIPauseButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIPauseButton.m; sourceTree = "<group>"; };
|
||||
D37295C9158B1E2D00D2C0C7 /* registration_inprogress.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = registration_inprogress.png; path = Resources/registration_inprogress.png; sourceTree = "<group>"; };
|
||||
D37295DA158B3C9600D2C0C7 /* video-OFF-disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "video-OFF-disabled.png"; path = "Resources/video-OFF-disabled.png"; sourceTree = "<group>"; };
|
||||
D37DC6BF1594AE1800B2A5EB /* LinphoneCoreSettingsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinphoneCoreSettingsStore.h; sourceTree = "<group>"; };
|
||||
D37DC6C01594AE1800B2A5EB /* LinphoneCoreSettingsStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LinphoneCoreSettingsStore.m; sourceTree = "<group>"; };
|
||||
D37DC6C51594AE6F00B2A5EB /* IASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsViewController.h; sourceTree = "<group>"; };
|
||||
D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKAppSettingsViewController.m; sourceTree = "<group>"; };
|
||||
D37DC6C71594AE6F00B2A5EB /* IASKAppSettingsWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsWebViewController.h; sourceTree = "<group>"; };
|
||||
D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKAppSettingsWebViewController.m; sourceTree = "<group>"; };
|
||||
D37DC6C91594AE6F00B2A5EB /* IASKSpecifierValuesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifierValuesViewController.h; sourceTree = "<group>"; };
|
||||
D37DC6CA1594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifierValuesViewController.m; sourceTree = "<group>"; };
|
||||
D37DC6CB1594AE6F00B2A5EB /* IASKViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKViewController.h; sourceTree = "<group>"; };
|
||||
D37DC6CD1594AE6F00B2A5EB /* IASKSettingsReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsReader.h; sourceTree = "<group>"; };
|
||||
D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsReader.m; sourceTree = "<group>"; };
|
||||
D37DC6CF1594AE6F00B2A5EB /* IASKSettingsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStore.h; sourceTree = "<group>"; };
|
||||
D37DC6D01594AE6F00B2A5EB /* IASKSettingsStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStore.m; sourceTree = "<group>"; };
|
||||
D37DC6D11594AE6F00B2A5EB /* IASKSettingsStoreFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreFile.h; sourceTree = "<group>"; };
|
||||
D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStoreFile.m; sourceTree = "<group>"; };
|
||||
D37DC6D31594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreUserDefaults.h; sourceTree = "<group>"; };
|
||||
D37DC6D41594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStoreUserDefaults.m; sourceTree = "<group>"; };
|
||||
D37DC6D51594AE6F00B2A5EB /* IASKSpecifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifier.h; sourceTree = "<group>"; };
|
||||
D37DC6D61594AE6F00B2A5EB /* IASKSpecifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifier.m; sourceTree = "<group>"; };
|
||||
D37DC6D81594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSSliderSpecifierViewCell.h; sourceTree = "<group>"; };
|
||||
D37DC6D91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSSliderSpecifierViewCell.m; sourceTree = "<group>"; };
|
||||
D37DC6DA1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTextFieldSpecifierViewCell.h; sourceTree = "<group>"; };
|
||||
D37DC6DB1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTextFieldSpecifierViewCell.m; sourceTree = "<group>"; };
|
||||
D37DC6DC1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTitleValueSpecifierViewCell.h; sourceTree = "<group>"; };
|
||||
D37DC6DD1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTitleValueSpecifierViewCell.m; sourceTree = "<group>"; };
|
||||
D37DC6DE1594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSToggleSwitchSpecifierViewCell.h; sourceTree = "<group>"; };
|
||||
D37DC6DF1594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSToggleSwitchSpecifierViewCell.m; sourceTree = "<group>"; };
|
||||
D37DC6E01594AE6F00B2A5EB /* IASKSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSlider.h; sourceTree = "<group>"; };
|
||||
D37DC6E11594AE6F00B2A5EB /* IASKSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSlider.m; sourceTree = "<group>"; };
|
||||
D37DC6E21594AE6F00B2A5EB /* IASKSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSwitch.h; sourceTree = "<group>"; };
|
||||
D37DC6E31594AE6F00B2A5EB /* IASKSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSwitch.m; sourceTree = "<group>"; };
|
||||
D37DC6E41594AE6F00B2A5EB /* IASKTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKTextField.h; sourceTree = "<group>"; };
|
||||
D37DC6E51594AE6F00B2A5EB /* IASKTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKTextField.m; sourceTree = "<group>"; };
|
||||
D37DC6E71594AE6F00B2A5EB /* IASKAppSettingsView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKAppSettingsView.xib; sourceTree = "<group>"; };
|
||||
D37DC6E81594AE6F00B2A5EB /* IASKAppSettingsWebView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKAppSettingsWebView.xib; sourceTree = "<group>"; };
|
||||
D37DC6E91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKPSSliderSpecifierViewCell.xib; sourceTree = "<group>"; };
|
||||
D37DC6EA1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKPSTextFieldSpecifierViewCell.xib; sourceTree = "<group>"; };
|
||||
D37DC6EB1594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKPSToggleSwitchSpecifierViewCell.xib; sourceTree = "<group>"; };
|
||||
D37DC6EC1594AE6F00B2A5EB /* IASKSpecifierValuesView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKSpecifierValuesView.xib; sourceTree = "<group>"; };
|
||||
D37DC7171594AF3400B2A5EB /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
|
||||
D38327EB1580FE3A00FA0D23 /* contacts-actif.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "contacts-actif.png"; path = "Resources/contacts-actif.png"; sourceTree = "<group>"; };
|
||||
D38327EC1580FE3A00FA0D23 /* contacts-selectionne.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "contacts-selectionne.png"; path = "Resources/contacts-selectionne.png"; sourceTree = "<group>"; };
|
||||
D38327ED1580FE3A00FA0D23 /* dialer-actif.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dialer-actif.png"; path = "Resources/dialer-actif.png"; sourceTree = "<group>"; };
|
||||
|
|
@ -985,6 +1066,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
D37DC7181594AF3400B2A5EB /* MessageUI.framework in Frameworks */,
|
||||
340751971506459A00B89C47 /* CoreTelephony.framework in Frameworks */,
|
||||
226CDADF14E2D0B800513B67 /* libbcg729.a in Frameworks */,
|
||||
226CDAE014E2D0B800513B67 /* libmsbcg729.a in Frameworks */,
|
||||
|
|
@ -1038,6 +1120,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
D37DC7191594AF3F00B2A5EB /* MessageUI.framework in Frameworks */,
|
||||
34075199150645A300B89C47 /* CoreTelephony.framework in Frameworks */,
|
||||
22D8F15B147548E2008C97DB /* libvpx.a in Frameworks */,
|
||||
22D8F15C147548E2008C97DB /* QuartzCore.framework in Frameworks */,
|
||||
|
|
@ -1117,6 +1200,8 @@
|
|||
D3F83F9115824D3500336684 /* LinphoneApp.xib */,
|
||||
1D3623240D0F684500981E51 /* LinphoneAppDelegate.h */,
|
||||
1D3623250D0F684500981E51 /* LinphoneAppDelegate.m */,
|
||||
D37DC6BF1594AE1800B2A5EB /* LinphoneCoreSettingsStore.h */,
|
||||
D37DC6C01594AE1800B2A5EB /* LinphoneCoreSettingsStore.m */,
|
||||
2214EB7012F84668002A5394 /* LinphoneUI */,
|
||||
34CA8537148F692A00503C01 /* MainScreenWithVideoPreview.h */,
|
||||
34CA8538148F692A00503C01 /* MainScreenWithVideoPreview.m */,
|
||||
|
|
@ -1130,7 +1215,7 @@
|
|||
3422AA5214978352000D4E8A /* PhoneViewController-ipad.xib */,
|
||||
D35E759C159460B50066B1C1 /* SettingsViewController.h */,
|
||||
D35E759D159460B50066B1C1 /* SettingsViewController.m */,
|
||||
D35E759E159460B60066B1C1 /* SettingsViewController.xib */,
|
||||
D32942A31594C94200556A1C /* SettingsViewController.xib */,
|
||||
D326483415887D4400930C67 /* Utils */,
|
||||
34216F3E1547EBCD00EA9777 /* VideoZoomHandler.h */,
|
||||
34216F3F1547EBCD00EA9777 /* VideoZoomHandler.m */,
|
||||
|
|
@ -1483,64 +1568,64 @@
|
|||
29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
340751961506459A00B89C47 /* CoreTelephony.framework */,
|
||||
226CDADD14E2D0B800513B67 /* libbcg729.a */,
|
||||
226CDADE14E2D0B800513B67 /* libmsbcg729.a */,
|
||||
344ABDEF14850AE9007420B6 /* libc++.1.dylib */,
|
||||
344ABDF014850AE9007420B6 /* libstdc++.6.dylib */,
|
||||
344ABDE71484E723007420B6 /* libzrtpcpp.a */,
|
||||
2211DB9614764F6B00DEE054 /* nogpl-thirdparties */,
|
||||
2211DB911475562600DEE054 /* liblinphone.a */,
|
||||
2211DB8F147555C800DEE054 /* libmediastreamer.a */,
|
||||
226183AF147259670037138E /* libmssilk.a */,
|
||||
226183AA1472527D0037138E /* libSKP_SILK_SDK.a */,
|
||||
226183AB1472527D0037138E /* libsrtp.a */,
|
||||
7066FC0B13E830E400EFC6DC /* libvpx.a */,
|
||||
70E542F413E147EB002BA2C0 /* QuartzCore.framework */,
|
||||
70E542F213E147E3002BA2C0 /* OpenGLES.framework */,
|
||||
22AA8AFB13D7125500B30535 /* libx264.a */,
|
||||
22AA8AFC13D7125500B30535 /* libmsx264.a */,
|
||||
22E1A9E713CAF4AA00219531 /* video.plist */,
|
||||
226B563E13CAF1CD00921595 /* audio.plist */,
|
||||
22276E8813C73DC000210156 /* CoreMedia.framework */,
|
||||
22276E8613C73D8A00210156 /* CoreVideo.framework */,
|
||||
2258633C11410BAC00C5A737 /* README */,
|
||||
22276E8013C73D3100210156 /* libavcodec.a */,
|
||||
22276E8113C73D3100210156 /* libavutil.a */,
|
||||
22276E8213C73D3100210156 /* libswscale.a */,
|
||||
2214783B1386A2030020F8B8 /* Localizable.strings */,
|
||||
223148E51178A09900637D6A /* libmsilbc.a */,
|
||||
223148E31178A08200637D6A /* libilbc.a */,
|
||||
226CDADD14E2D0B800513B67 /* libbcg729.a */,
|
||||
22E5B0AE133B5EA20044EA25 /* libcrypto.a */,
|
||||
220FAD2810765B400068D98F /* libeXosip2.a */,
|
||||
220FAD2910765B400068D98F /* libgsm.a */,
|
||||
223148E31178A08200637D6A /* libilbc.a */,
|
||||
2211DB911475562600DEE054 /* liblinphone.a */,
|
||||
2211DB8F147555C800DEE054 /* libmediastreamer.a */,
|
||||
226F2ED51344B0EF00F6EF27 /* libmsamr.a */,
|
||||
226CDADE14E2D0B800513B67 /* libmsbcg729.a */,
|
||||
223148E51178A09900637D6A /* libmsilbc.a */,
|
||||
226183AF147259670037138E /* libmssilk.a */,
|
||||
22AA8AFC13D7125500B30535 /* libmsx264.a */,
|
||||
226F2ED41344B0EF00F6EF27 /* libopencore-amrnb.a */,
|
||||
226F2ED31344B0EF00F6EF27 /* libopencore-amrwb.a */,
|
||||
220FAD2C10765B400068D98F /* libortp.a */,
|
||||
220FAD2D10765B400068D98F /* libosip2.a */,
|
||||
220FAD2E10765B400068D98F /* libosipparser2.a */,
|
||||
226183AA1472527D0037138E /* libSKP_SILK_SDK.a */,
|
||||
220FAD2F10765B400068D98F /* libspeex.a */,
|
||||
220FAD3010765B400068D98F /* libspeexdsp.a */,
|
||||
226F2ED31344B0EF00F6EF27 /* libopencore-amrwb.a */,
|
||||
226F2ED41344B0EF00F6EF27 /* libopencore-amrnb.a */,
|
||||
226F2ED51344B0EF00F6EF27 /* libmsamr.a */,
|
||||
220FAC77107654FC0068D98F /* include */,
|
||||
080E96DDFE201D6D7F000001 /* Classes */,
|
||||
29B97315FDCFA39411CA2CEA /* Other Sources */,
|
||||
29B97317FDCFA39411CA2CEA /* Resources */,
|
||||
29B97323FDCFA39411CA2CEA /* Frameworks */,
|
||||
19C28FACFE9D520D11CA2CBB /* Products */,
|
||||
22744019106F31BD006EC466 /* CoreAudio.framework */,
|
||||
2274402E106F335E006EC466 /* AudioToolbox.framework */,
|
||||
22744043106F33FC006EC466 /* Security.framework */,
|
||||
22744056106F9BC9006EC466 /* CoreFoundation.framework */,
|
||||
2245671C107699F700F10948 /* Settings.bundle */,
|
||||
224567C1107B968500F10948 /* AVFoundation.framework */,
|
||||
22F51EF5107FA66500F98953 /* untitled.plist */,
|
||||
22B5EFA210CE50BD00777D97 /* AddressBookUI.framework */,
|
||||
22B5F03410CE6B2F00777D97 /* AddressBook.framework */,
|
||||
2264B6D111200342002C2C53 /* SystemConfiguration.framework */,
|
||||
2258633C11410BAC00C5A737 /* README */,
|
||||
228697C311AC29B800E9E0CA /* CFNetwork.framework */,
|
||||
22D1B68012A3E0BE001AE361 /* libresolv.dylib */,
|
||||
226183AB1472527D0037138E /* libsrtp.a */,
|
||||
22E5B0AD133B5EA20044EA25 /* libssl.a */,
|
||||
22E5B0AE133B5EA20044EA25 /* libcrypto.a */,
|
||||
22276E8213C73D3100210156 /* libswscale.a */,
|
||||
7066FC0B13E830E400EFC6DC /* libvpx.a */,
|
||||
22AA8AFB13D7125500B30535 /* libx264.a */,
|
||||
344ABDE71484E723007420B6 /* libzrtpcpp.a */,
|
||||
344ABDEF14850AE9007420B6 /* libc++.1.dylib */,
|
||||
22D1B68012A3E0BE001AE361 /* libresolv.dylib */,
|
||||
344ABDF014850AE9007420B6 /* libstdc++.6.dylib */,
|
||||
22B5F03410CE6B2F00777D97 /* AddressBook.framework */,
|
||||
22B5EFA210CE50BD00777D97 /* AddressBookUI.framework */,
|
||||
2274402E106F335E006EC466 /* AudioToolbox.framework */,
|
||||
224567C1107B968500F10948 /* AVFoundation.framework */,
|
||||
228697C311AC29B800E9E0CA /* CFNetwork.framework */,
|
||||
22744019106F31BD006EC466 /* CoreAudio.framework */,
|
||||
22744056106F9BC9006EC466 /* CoreFoundation.framework */,
|
||||
22276E8813C73DC000210156 /* CoreMedia.framework */,
|
||||
340751961506459A00B89C47 /* CoreTelephony.framework */,
|
||||
22276E8613C73D8A00210156 /* CoreVideo.framework */,
|
||||
D37DC7171594AF3400B2A5EB /* MessageUI.framework */,
|
||||
70E542F213E147E3002BA2C0 /* OpenGLES.framework */,
|
||||
70E542F413E147EB002BA2C0 /* QuartzCore.framework */,
|
||||
22744043106F33FC006EC466 /* Security.framework */,
|
||||
2264B6D111200342002C2C53 /* SystemConfiguration.framework */,
|
||||
22F51EF5107FA66500F98953 /* untitled.plist */,
|
||||
080E96DDFE201D6D7F000001 /* Classes */,
|
||||
29B97323FDCFA39411CA2CEA /* Frameworks */,
|
||||
D37DC6C31594AE5600B2A5EB /* InAppSettingsKit */,
|
||||
220FAC77107654FC0068D98F /* include */,
|
||||
2214783B1386A2030020F8B8 /* Localizable.strings */,
|
||||
2211DB9614764F6B00DEE054 /* nogpl-thirdparties */,
|
||||
29B97315FDCFA39411CA2CEA /* Other Sources */,
|
||||
19C28FACFE9D520D11CA2CBB /* Products */,
|
||||
29B97317FDCFA39411CA2CEA /* Resources */,
|
||||
D398D3031594B0FB00FD553C /* Settings */,
|
||||
);
|
||||
name = CustomTemplate;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -1715,6 +1800,94 @@
|
|||
name = Utils;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D37DC6C31594AE5600B2A5EB /* InAppSettingsKit */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D37DC6C41594AE6F00B2A5EB /* Controllers */,
|
||||
D37DC6CC1594AE6F00B2A5EB /* Models */,
|
||||
D37DC6D71594AE6F00B2A5EB /* Views */,
|
||||
D37DC6E61594AE6F00B2A5EB /* Xibs */,
|
||||
);
|
||||
name = InAppSettingsKit;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D37DC6C41594AE6F00B2A5EB /* Controllers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D37DC6C51594AE6F00B2A5EB /* IASKAppSettingsViewController.h */,
|
||||
D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */,
|
||||
D37DC6C71594AE6F00B2A5EB /* IASKAppSettingsWebViewController.h */,
|
||||
D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */,
|
||||
D37DC6C91594AE6F00B2A5EB /* IASKSpecifierValuesViewController.h */,
|
||||
D37DC6CA1594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m */,
|
||||
D37DC6CB1594AE6F00B2A5EB /* IASKViewController.h */,
|
||||
);
|
||||
name = Controllers;
|
||||
path = InAppSettingsKit/Controllers;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D37DC6CC1594AE6F00B2A5EB /* Models */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D37DC6CD1594AE6F00B2A5EB /* IASKSettingsReader.h */,
|
||||
D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */,
|
||||
D37DC6CF1594AE6F00B2A5EB /* IASKSettingsStore.h */,
|
||||
D37DC6D01594AE6F00B2A5EB /* IASKSettingsStore.m */,
|
||||
D37DC6D11594AE6F00B2A5EB /* IASKSettingsStoreFile.h */,
|
||||
D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */,
|
||||
D37DC6D31594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.h */,
|
||||
D37DC6D41594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m */,
|
||||
D37DC6D51594AE6F00B2A5EB /* IASKSpecifier.h */,
|
||||
D37DC6D61594AE6F00B2A5EB /* IASKSpecifier.m */,
|
||||
);
|
||||
name = Models;
|
||||
path = InAppSettingsKit/Models;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D37DC6D71594AE6F00B2A5EB /* Views */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D37DC6D81594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.h */,
|
||||
D37DC6D91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m */,
|
||||
D37DC6DA1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.h */,
|
||||
D37DC6DB1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m */,
|
||||
D37DC6DC1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.h */,
|
||||
D37DC6DD1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m */,
|
||||
D37DC6DE1594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.h */,
|
||||
D37DC6DF1594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.m */,
|
||||
D37DC6E01594AE6F00B2A5EB /* IASKSlider.h */,
|
||||
D37DC6E11594AE6F00B2A5EB /* IASKSlider.m */,
|
||||
D37DC6E21594AE6F00B2A5EB /* IASKSwitch.h */,
|
||||
D37DC6E31594AE6F00B2A5EB /* IASKSwitch.m */,
|
||||
D37DC6E41594AE6F00B2A5EB /* IASKTextField.h */,
|
||||
D37DC6E51594AE6F00B2A5EB /* IASKTextField.m */,
|
||||
);
|
||||
name = Views;
|
||||
path = InAppSettingsKit/Views;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D37DC6E61594AE6F00B2A5EB /* Xibs */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D37DC6E71594AE6F00B2A5EB /* IASKAppSettingsView.xib */,
|
||||
D37DC6E81594AE6F00B2A5EB /* IASKAppSettingsWebView.xib */,
|
||||
D37DC6E91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.xib */,
|
||||
D37DC6EA1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.xib */,
|
||||
D37DC6EB1594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.xib */,
|
||||
D37DC6EC1594AE6F00B2A5EB /* IASKSpecifierValuesView.xib */,
|
||||
);
|
||||
name = Xibs;
|
||||
path = InAppSettingsKit/Xibs;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D398D3031594B0FB00FD553C /* Settings */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D34F6F9D1594D3FB0095705B /* InAppSettings.bundle */,
|
||||
);
|
||||
path = Settings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
|
|
@ -1791,7 +1964,6 @@
|
|||
2274550810700509006EC466 /* linphonerc in Resources */,
|
||||
22F2508F107141E100AC9B3F /* DialerViewController.xib in Resources */,
|
||||
22F254811073D99800AC9B3F /* ringback.wav in Resources */,
|
||||
2245671D107699F700F10948 /* Settings.bundle in Resources */,
|
||||
22F51EF6107FA66500F98953 /* untitled.plist in Resources */,
|
||||
2237D4091084D7A9001383EE /* oldphone-mono.wav in Resources */,
|
||||
22E0A823111C44E100B04932 /* ConsoleViewController.xib in Resources */,
|
||||
|
|
@ -1804,8 +1976,6 @@
|
|||
2218A92612FBE1340088A667 /* FirstLoginViewController.xib in Resources */,
|
||||
228B19AF130290C500F154D3 /* iTunesArtwork in Resources */,
|
||||
2214783D1386A2030020F8B8 /* Localizable.strings in Resources */,
|
||||
226B563F13CAF1CD00921595 /* audio.plist in Resources */,
|
||||
22E1A9E813CAF4AA00219531 /* video.plist in Resources */,
|
||||
70571E1A13FABCB000CDD3C2 /* rootca.pem in Resources */,
|
||||
344ABD72147FC438007420B6 /* ConferenceCallDetailView.xib in Resources */,
|
||||
344ABD7A147FD32B007420B6 /* ConferenceCallDetailCell.xib in Resources */,
|
||||
|
|
@ -1949,7 +2119,14 @@
|
|||
D35E758915932DE60066B1C1 /* backspace-disabled.png in Resources */,
|
||||
D35E758D15934F360066B1C1 /* appeler-disabled.png in Resources */,
|
||||
D35E7599159460580066B1C1 /* ChatViewController.xib in Resources */,
|
||||
D35E75A1159460B70066B1C1 /* SettingsViewController.xib in Resources */,
|
||||
D37DC70B1594AE6F00B2A5EB /* IASKAppSettingsView.xib in Resources */,
|
||||
D37DC70D1594AE6F00B2A5EB /* IASKAppSettingsWebView.xib in Resources */,
|
||||
D37DC70F1594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.xib in Resources */,
|
||||
D37DC7111594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.xib in Resources */,
|
||||
D37DC7131594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */,
|
||||
D37DC7151594AE6F00B2A5EB /* IASKSpecifierValuesView.xib in Resources */,
|
||||
D32942A41594C94300556A1C /* SettingsViewController.xib in Resources */,
|
||||
D34F6F9E1594D3FB0095705B /* InAppSettings.bundle in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -1972,8 +2149,6 @@
|
|||
22D8F13B147548E2008C97DB /* FirstLoginViewController.xib in Resources */,
|
||||
22D8F13C147548E2008C97DB /* iTunesArtwork in Resources */,
|
||||
22D8F13D147548E2008C97DB /* Localizable.strings in Resources */,
|
||||
22D8F140147548E2008C97DB /* audio.plist in Resources */,
|
||||
22D8F141147548E2008C97DB /* video.plist in Resources */,
|
||||
22D8F142147548E2008C97DB /* rootca.pem in Resources */,
|
||||
2211DB95147564B400DEE054 /* Settings.bundle in Resources */,
|
||||
344ABD73147FC438007420B6 /* ConferenceCallDetailView.xib in Resources */,
|
||||
|
|
@ -2102,7 +2277,14 @@
|
|||
D35E758A15932DE60066B1C1 /* backspace-disabled.png in Resources */,
|
||||
D35E758E15934F360066B1C1 /* appeler-disabled.png in Resources */,
|
||||
D35E759A159460580066B1C1 /* ChatViewController.xib in Resources */,
|
||||
D35E75A2159460B70066B1C1 /* SettingsViewController.xib in Resources */,
|
||||
D37DC70C1594AE6F00B2A5EB /* IASKAppSettingsView.xib in Resources */,
|
||||
D37DC70E1594AE6F00B2A5EB /* IASKAppSettingsWebView.xib in Resources */,
|
||||
D37DC7101594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.xib in Resources */,
|
||||
D37DC7121594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.xib in Resources */,
|
||||
D37DC7141594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */,
|
||||
D37DC7161594AE6F00B2A5EB /* IASKSpecifierValuesView.xib in Resources */,
|
||||
D32942A51594C94300556A1C /* SettingsViewController.xib in Resources */,
|
||||
D34F6F9F1594D3FB0095705B /* InAppSettings.bundle in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -2154,6 +2336,22 @@
|
|||
D35E7581159328EB0066B1C1 /* UIAddressTextField.m in Sources */,
|
||||
D35E7597159460580066B1C1 /* ChatViewController.m in Sources */,
|
||||
D35E759F159460B70066B1C1 /* SettingsViewController.m in Sources */,
|
||||
D37DC6C11594AE1800B2A5EB /* LinphoneCoreSettingsStore.m in Sources */,
|
||||
D37DC6ED1594AE6F00B2A5EB /* IASKAppSettingsViewController.m in Sources */,
|
||||
D37DC6EF1594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m in Sources */,
|
||||
D37DC6F11594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m in Sources */,
|
||||
D37DC6F31594AE6F00B2A5EB /* IASKSettingsReader.m in Sources */,
|
||||
D37DC6F51594AE6F00B2A5EB /* IASKSettingsStore.m in Sources */,
|
||||
D37DC6F71594AE6F00B2A5EB /* IASKSettingsStoreFile.m in Sources */,
|
||||
D37DC6F91594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m in Sources */,
|
||||
D37DC6FB1594AE6F00B2A5EB /* IASKSpecifier.m in Sources */,
|
||||
D37DC6FD1594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m in Sources */,
|
||||
D37DC6FF1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
|
||||
D37DC7011594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
|
||||
D37DC7031594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */,
|
||||
D37DC7051594AE6F00B2A5EB /* IASKSlider.m in Sources */,
|
||||
D37DC7071594AE6F00B2A5EB /* IASKSwitch.m in Sources */,
|
||||
D37DC7091594AE6F00B2A5EB /* IASKTextField.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -2202,6 +2400,22 @@
|
|||
D35E7582159328EB0066B1C1 /* UIAddressTextField.m in Sources */,
|
||||
D35E7598159460580066B1C1 /* ChatViewController.m in Sources */,
|
||||
D35E75A0159460B70066B1C1 /* SettingsViewController.m in Sources */,
|
||||
D37DC6C21594AE1800B2A5EB /* LinphoneCoreSettingsStore.m in Sources */,
|
||||
D37DC6EE1594AE6F00B2A5EB /* IASKAppSettingsViewController.m in Sources */,
|
||||
D37DC6F01594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m in Sources */,
|
||||
D37DC6F21594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m in Sources */,
|
||||
D37DC6F41594AE6F00B2A5EB /* IASKSettingsReader.m in Sources */,
|
||||
D37DC6F61594AE6F00B2A5EB /* IASKSettingsStore.m in Sources */,
|
||||
D37DC6F81594AE6F00B2A5EB /* IASKSettingsStoreFile.m in Sources */,
|
||||
D37DC6FA1594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m in Sources */,
|
||||
D37DC6FC1594AE6F00B2A5EB /* IASKSpecifier.m in Sources */,
|
||||
D37DC6FE1594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m in Sources */,
|
||||
D37DC7001594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
|
||||
D37DC7021594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
|
||||
D37DC7041594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */,
|
||||
D37DC7061594AE6F00B2A5EB /* IASKSlider.m in Sources */,
|
||||
D37DC7081594AE6F00B2A5EB /* IASKSwitch.m in Sources */,
|
||||
D37DC70A1594AE6F00B2A5EB /* IASKTextField.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -6,21 +6,17 @@ mtu=1300
|
|||
|
||||
[sip]
|
||||
sip_random_port=1
|
||||
sip_port=5060
|
||||
sip_tcp_random_port=1
|
||||
sip_tcp_port=0
|
||||
sip_tls_random_port=1
|
||||
sip_tls_port=0
|
||||
guess_hostname=1
|
||||
contact=sip:toto@unknown-host
|
||||
inc_timeout=15
|
||||
use_info=0
|
||||
use_ipv6=0
|
||||
default_proxy=-1
|
||||
register_only_when_network_is_up=1
|
||||
auto_net_state_mon=0
|
||||
keepalive_period=30000
|
||||
media_encryption=zrtp
|
||||
|
||||
|
||||
[rtp]
|
||||
audio_rtp_port=7076
|
||||
|
|
|
|||
|
|
@ -6,17 +6,13 @@ mtu=1300
|
|||
|
||||
[sip]
|
||||
sip_random_port=1
|
||||
sip_port=5060
|
||||
sip_tcp_random_port=1
|
||||
sip_tcp_port=0
|
||||
sip_tls_random_port=1
|
||||
sip_tls_port=0
|
||||
guess_hostname=1
|
||||
contact=sip:toto@unknown-host
|
||||
inc_timeout=15
|
||||
use_info=0
|
||||
use_ipv6=0
|
||||
default_proxy=-1
|
||||
register_only_when_network_is_up=1
|
||||
auto_net_state_mon=0
|
||||
keepalive_period=30000
|
||||
|
|
|
|||
|
|
@ -1,103 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>PreferenceSpecifiers</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Key</key>
|
||||
<string>stun_preference</string>
|
||||
<key>Title</key>
|
||||
<string>Stun server</string>
|
||||
<key>Type</key>
|
||||
<string>PSTextFieldSpecifier</string>
|
||||
<key>AutocapitalizationType</key>
|
||||
<string>None</string>
|
||||
<key>AutocorrectionType</key>
|
||||
<string>No</string>
|
||||
<key>DefaultValue</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<false/>
|
||||
<key>Key</key>
|
||||
<string>debugenable_preference</string>
|
||||
<key>Title</key>
|
||||
<string>Debug</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>AutocapitalizationType</key>
|
||||
<string>None</string>
|
||||
<key>AutocorrectionType</key>
|
||||
<string>No</string>
|
||||
<key>DefaultValue</key>
|
||||
<string></string>
|
||||
<key>IsSecure</key>
|
||||
<false/>
|
||||
<key>Key</key>
|
||||
<string>prefix_preference</string>
|
||||
<key>KeyboardType</key>
|
||||
<string>NumberPad</string>
|
||||
<key>Title</key>
|
||||
<string>Prefix</string>
|
||||
<key>Type</key>
|
||||
<string>PSTextFieldSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<false/>
|
||||
<key>Key</key>
|
||||
<string>substitute_+_by_00_preference</string>
|
||||
<key>Title</key>
|
||||
<string>Substitue + by 00</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<string>udp</string>
|
||||
<key>Key</key>
|
||||
<string>transport_preference</string>
|
||||
<key>Title</key>
|
||||
<string>Transport</string>
|
||||
<key>Titles</key>
|
||||
<array>
|
||||
<string>udp</string>
|
||||
<string>tcp</string>
|
||||
<string>tls</string>
|
||||
</array>
|
||||
<key>Type</key>
|
||||
<string>PSMultiValueSpecifier</string>
|
||||
<key>Values</key>
|
||||
<array>
|
||||
<string>udp</string>
|
||||
<string>tcp</string>
|
||||
<string>tls</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<false/>
|
||||
<key>Key</key>
|
||||
<string>enable_srtp_preference</string>
|
||||
<key>Title</key>
|
||||
<string>Secure rtp</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<true/>
|
||||
<key>Key</key>
|
||||
<string>backgroundmode_preference</string>
|
||||
<key>Title</key>
|
||||
<string>Background mode</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -1,131 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>PreferenceSpecifiers</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Title</key>
|
||||
<string>SIP account</string>
|
||||
<key>Type</key>
|
||||
<string>PSGroupSpecifier</string>
|
||||
<key>FooterText</key>
|
||||
<string>Linphone must be restarted for changes to take effect</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>AutocapitalizationType</key>
|
||||
<string>None</string>
|
||||
<key>AutocorrectionType</key>
|
||||
<string>No</string>
|
||||
<key>DefaultValue</key>
|
||||
<string></string>
|
||||
<key>IsSecure</key>
|
||||
<false/>
|
||||
<key>Key</key>
|
||||
<string>username_preference</string>
|
||||
<key>KeyboardType</key>
|
||||
<string>Alphabet</string>
|
||||
<key>Title</key>
|
||||
<string>User name</string>
|
||||
<key>Type</key>
|
||||
<string>PSTextFieldSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>AutocapitalizationType</key>
|
||||
<string>None</string>
|
||||
<key>AutocorrectionType</key>
|
||||
<string>No</string>
|
||||
<key>DefaultValue</key>
|
||||
<string></string>
|
||||
<key>IsSecure</key>
|
||||
<true/>
|
||||
<key>Key</key>
|
||||
<string>password_preference</string>
|
||||
<key>KeyboardType</key>
|
||||
<string>Alphabet</string>
|
||||
<key>Title</key>
|
||||
<string>Password</string>
|
||||
<key>Type</key>
|
||||
<string>PSTextFieldSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>AutocapitalizationType</key>
|
||||
<string>None</string>
|
||||
<key>AutocorrectionType</key>
|
||||
<string>No</string>
|
||||
<key>DefaultValue</key>
|
||||
<string></string>
|
||||
<key>IsSecure</key>
|
||||
<false/>
|
||||
<key>Key</key>
|
||||
<string>domain_preference</string>
|
||||
<key>KeyboardType</key>
|
||||
<string>URL</string>
|
||||
<key>Title</key>
|
||||
<string>Domain</string>
|
||||
<key>Type</key>
|
||||
<string>PSTextFieldSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>AutocapitalizationType</key>
|
||||
<string>None</string>
|
||||
<key>AutocorrectionType</key>
|
||||
<string>No</string>
|
||||
<key>DefaultValue</key>
|
||||
<string></string>
|
||||
<key>IsSecure</key>
|
||||
<false/>
|
||||
<key>Key</key>
|
||||
<string>proxy_preference</string>
|
||||
<key>KeyboardType</key>
|
||||
<string>URL</string>
|
||||
<key>Title</key>
|
||||
<string>Proxy</string>
|
||||
<key>Type</key>
|
||||
<string>PSTextFieldSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<false/>
|
||||
<key>Key</key>
|
||||
<string>outbound_proxy_preference</string>
|
||||
<key>Title</key>
|
||||
<string>Outbound proxy</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Title</key>
|
||||
<string></string>
|
||||
<key>Type</key>
|
||||
<string>PSGroupSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>File</key>
|
||||
<string>audio</string>
|
||||
<key>Title</key>
|
||||
<string>Audio Codecs</string>
|
||||
<key>Type</key>
|
||||
<string>PSChildPaneSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>File</key>
|
||||
<string>video</string>
|
||||
<key>Title</key>
|
||||
<string>Video</string>
|
||||
<key>Type</key>
|
||||
<string>PSChildPaneSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>File</key>
|
||||
<string>Advanced</string>
|
||||
<key>Title</key>
|
||||
<string>Advanced</string>
|
||||
<key>Type</key>
|
||||
<string>PSChildPaneSpecifier</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>StringsTable</key>
|
||||
<string>Root</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>PreferenceSpecifiers</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Title</key>
|
||||
<string>Codecs</string>
|
||||
<key>Type</key>
|
||||
<string>PSGroupSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<true/>
|
||||
<key>Key</key>
|
||||
<string>speex_16k_preference</string>
|
||||
<key>Title</key>
|
||||
<string>Speex 16Khz</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<true/>
|
||||
<key>Key</key>
|
||||
<string>speex_8k_preference</string>
|
||||
<key>Title</key>
|
||||
<string>Speex 8Khz</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<false/>
|
||||
<key>Key</key>
|
||||
<string>g722_preference</string>
|
||||
<key>Title</key>
|
||||
<string>G722</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<false/>
|
||||
<key>Key</key>
|
||||
<string>gsm_8k_preference</string>
|
||||
<key>Title</key>
|
||||
<string>GSM</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<false/>
|
||||
<key>Key</key>
|
||||
<string>ilbc_preference</string>
|
||||
<key>Title</key>
|
||||
<string>ILBC</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<true/>
|
||||
<key>Key</key>
|
||||
<string>pcmu_preference</string>
|
||||
<key>Title</key>
|
||||
<string>PCMU</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<false/>
|
||||
<key>Key</key>
|
||||
<string>pcma_preference</string>
|
||||
<key>Title</key>
|
||||
<string>PCMA</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
Binary file not shown.
|
|
@ -1,45 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>PreferenceSpecifiers</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
<key>Title</key>
|
||||
<string>Enable video</string>
|
||||
<key>Key</key>
|
||||
<string>enable_video_preference</string>
|
||||
<key>DefaultValue</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
<key>Title</key>
|
||||
<string>Automatically start video</string>
|
||||
<key>Key</key>
|
||||
<string>start_video_preference</string>
|
||||
<key>DefaultValue</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Title</key>
|
||||
<string>Codecs</string>
|
||||
<key>Type</key>
|
||||
<string>PSGroupSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>DefaultValue</key>
|
||||
<true/>
|
||||
<key>Key</key>
|
||||
<string>vp8_preference</string>
|
||||
<key>Title</key>
|
||||
<string>VP8</string>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit af32518af41f97caee07070234a3475409b9a27d
|
||||
Subproject commit a70714c2e8a1f6f9958450cb612e3dc9895981e7
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 2d669353c3eda22e63023fde2f3cde7b437d2c81
|
||||
Subproject commit 630e26944dd6e5cca53787452b162ec6baf7ba48
|
||||
Loading…
Add table
Reference in a new issue