Updated Branches: refs/heads/master ffdc81be5 -> 237f42e25
Fixes CB-1617 update CDVGlobalization for ARC Also updated to use CDVPluginResult updated apis Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/commit/237f42e2 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/tree/237f42e2 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/diff/237f42e2 Branch: refs/heads/master Commit: 237f42e25514258c4c2b5ae4e23cb2338f2a16e7 Parents: ffdc81b Author: Becky Gibson <becka...@apache.org> Authored: Thu Oct 11 10:49:45 2012 -0400 Committer: Becky Gibson <becka...@apache.org> Committed: Thu Oct 11 10:49:45 2012 -0400 ---------------------------------------------------------------------- CordovaLib/Classes/CDVGlobalization.m | 722 ++++++++---------- CordovaLib/CordovaLib.xcodeproj/project.pbxproj | 2 +- 2 files changed, 323 insertions(+), 401 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/237f42e2/CordovaLib/Classes/CDVGlobalization.m ---------------------------------------------------------------------- diff --git a/CordovaLib/Classes/CDVGlobalization.m b/CordovaLib/Classes/CDVGlobalization.m index 720c5bc..f811898 100644 --- a/CordovaLib/Classes/CDVGlobalization.m +++ b/CordovaLib/Classes/CDVGlobalization.m @@ -6,9 +6,9 @@ to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -21,128 +21,113 @@ @implementation CDVGlobalization --(id)initWithWebView:(UIWebView *)theWebView +- (id)initWithWebView:(UIWebView*)theWebView { self = (CDVGlobalization*)[super initWithWebView:theWebView]; - if(self) - { + if (self) { currentLocale = CFLocaleCopyCurrent(); } return self; } -- (void) getPreferredLanguage:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +- (void)getPreferredLanguage:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { NSString* callbackId = [arguments objectAtIndex:0]; - - NSString* jsString = nil; // result string + CDVPluginResult* result = nil; + NSLog(@"log1"); // Source: http://stackoverflow.com/questions/3910244/getting-current-device-language-in-ios // (should be OK) - NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0]; - - if(language) { - NSDictionary * dictionary = [NSDictionary dictionaryWithObject: language forKey:@"value"]; - - CDVPluginResult * result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK - messageAsDictionary: dictionary]; - - jsString = [result toSuccessCallbackString:callbackId]; - } - else { + NSString* language = [[NSLocale preferredLanguages] objectAtIndex:0]; + + if (language) { + NSDictionary* dictionary = [NSDictionary dictionaryWithObject:language forKey:@"value"]; + + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK + messageAsDictionary:dictionary]; + } else { // TBD is this ever expected to happen? NSMutableDictionary* dictionary = [NSMutableDictionary dictionaryWithCapacity:2]; [dictionary setValue:[NSNumber numberWithInt:CDV_UNKNOWN_ERROR] forKey:@"code"]; [dictionary setValue:@"Unknown error" forKey:@"message"]; - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; - jsString = [result toErrorCallbackString:callbackId]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; } - - [self writeJavascript:jsString]; + + [self.commandDelegate sendPluginResult:result callbackId:callbackId]; } -- (void) getLocaleName:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +- (void)getLocaleName:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { CDVPluginResult* result = nil; - NSString* jsString = nil; NSString* callbackId = [arguments objectAtIndex:0]; NSDictionary* dictionary = nil; - + NSLocale* locale = [NSLocale currentLocale]; - - if(locale) { + + if (locale) { dictionary = [NSDictionary dictionaryWithObject:[locale localeIdentifier] forKey:@"value"]; - - result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsDictionary: dictionary]; - jsString = [result toSuccessCallbackString:callbackId]; - } - else { + + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dictionary]; + } else { NSMutableDictionary* dictionary = [NSMutableDictionary dictionaryWithCapacity:2]; [dictionary setValue:[NSNumber numberWithInt:CDV_UNKNOWN_ERROR] forKey:@"code"]; [dictionary setValue:@"Unknown error" forKey:@"message"]; - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; - jsString = [result toErrorCallbackString:callbackId]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; } - - [self writeJavascript:jsString]; + + [self.commandDelegate sendPluginResult:result callbackId:callbackId]; } -- (void) dateToString:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +- (void)dateToString:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { CFDateFormatterStyle style = kCFDateFormatterShortStyle; CFDateFormatterStyle dateStyle = kCFDateFormatterShortStyle; CFDateFormatterStyle timeStyle = kCFDateFormatterShortStyle; NSDate* date = nil; - NSString *dateString = nil; + NSString* dateString = nil; CDVPluginResult* result = nil; - NSString* jsString = nil; NSString* callBackId = [arguments objectAtIndex:0]; - + id milliseconds = [options valueForKey:@"date"]; - if (milliseconds && [milliseconds isKindOfClass:[NSNumber class]]){ + + if (milliseconds && [milliseconds isKindOfClass:[NSNumber class]]) { // get the number of seconds since 1970 and create the date object - date = [NSDate dateWithTimeIntervalSince1970:[milliseconds doubleValue]/1000]; + date = [NSDate dateWithTimeIntervalSince1970:[milliseconds doubleValue] / 1000]; } - + // see if any options have been specified id items = [options valueForKey:@"options"]; - if(items && [items isKindOfClass:[NSMutableDictionary class]]) { - + if (items && [items isKindOfClass:[NSMutableDictionary class]]) { NSEnumerator* enumerator = [items keyEnumerator]; id key; - + // iterate through all the options - while((key = [enumerator nextObject])) { + while ((key = [enumerator nextObject])) { id item = [items valueForKey:key]; - + // make sure that only string values are present if ([item isKindOfClass:[NSString class]]) { // get the desired format length - if([key isEqualToString:@"formatLength"]) { - if([item isEqualToString:@"short"]) { + if ([key isEqualToString:@"formatLength"]) { + if ([item isEqualToString:@"short"]) { style = kCFDateFormatterShortStyle; - } - else if ([item isEqualToString:@"medium"]) { + } else if ([item isEqualToString:@"medium"]) { style = kCFDateFormatterMediumStyle; - } - else if ([item isEqualToString:@"long"]) { + } else if ([item isEqualToString:@"long"]) { style = kCFDateFormatterLongStyle; - } - else if ([item isEqualToString:@"full"]) { + } else if ([item isEqualToString:@"full"]) { style = kCFDateFormatterFullStyle; } } // get the type of date and time to generate else if ([key isEqualToString:@"selector"]) { - if([item isEqualToString:@"date"]) { + if ([item isEqualToString:@"date"]) { dateStyle = style; timeStyle = kCFDateFormatterNoStyle; - } - else if ([item isEqualToString:@"time"]) { + } else if ([item isEqualToString:@"time"]) { dateStyle = kCFDateFormatterNoStyle; timeStyle = style; - } - else if ([item isEqualToString:@"date and time"]) { + } else if ([item isEqualToString:@"date and time"]) { dateStyle = style; timeStyle = style; } @@ -150,25 +135,23 @@ } } } - + // create the formatter using the user's current default locale and formats for dates and times CFDateFormatterRef formatter = CFDateFormatterCreate(kCFAllocatorDefault, - currentLocale, - dateStyle, - timeStyle); + currentLocale, + dateStyle, + timeStyle); // if we have a valid date object then call the formatter - if(date) { - dateString = (NSString *) CFDateFormatterCreateStringWithDate(kCFAllocatorDefault, - formatter, - (CFDateRef) date); + if (date) { + dateString = (NSString*)CFBridgingRelease(CFDateFormatterCreateStringWithDate(kCFAllocatorDefault, + formatter, + (__bridge CFDateRef)date)); } - + // if the date was converted to a string successfully then return the result - if(dateString) { + if (dateString) { NSDictionary* dictionary = [NSDictionary dictionaryWithObject:dateString forKey:@"value"]; - result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsDictionary: dictionary]; - jsString = [result toSuccessCallbackString:callBackId]; - [dateString release]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dictionary]; } // error else { @@ -177,125 +160,115 @@ [dictionary setValue:[NSNumber numberWithInt:CDV_FORMATTING_ERROR] forKey:@"code"]; [dictionary setValue:@"Formatting error" forKey:@"message"]; result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; - jsString = [result toErrorCallbackString:callBackId]; } - - [self writeJavascript:jsString]; - + + [self.commandDelegate sendPluginResult:result callbackId:callBackId]; + CFRelease(formatter); } -- (void) stringToDate:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +- (void)stringToDate:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { CFDateFormatterStyle style = kCFDateFormatterShortStyle; CFDateFormatterStyle dateStyle = kCFDateFormatterShortStyle; CFDateFormatterStyle timeStyle = kCFDateFormatterShortStyle; CDVPluginResult* result = nil; - NSString* jsString = nil; NSString* callBackId = [arguments objectAtIndex:0]; NSString* dateString = nil; NSDateComponents* comps = nil; - - + // get the string that is to be parsed for a date id ms = [options valueForKey:@"dateString"]; - if (ms && [ms isKindOfClass:[NSString class]]){ + + if (ms && [ms isKindOfClass:[NSString class]]) { dateString = ms; } - + // see if any options have been specified id items = [options valueForKey:@"options"]; - if(items && [items isKindOfClass:[NSMutableDictionary class]]) { - + if (items && [items isKindOfClass:[NSMutableDictionary class]]) { NSEnumerator* enumerator = [items keyEnumerator]; id key; - + // iterate through all the options - while((key = [enumerator nextObject])) { + while ((key = [enumerator nextObject])) { id item = [items valueForKey:key]; - + // make sure that only string values are present if ([item isKindOfClass:[NSString class]]) { // get the desired format length - if([key isEqualToString:@"formatLength"]) { - if([item isEqualToString:@"short"]) { + if ([key isEqualToString:@"formatLength"]) { + if ([item isEqualToString:@"short"]) { style = kCFDateFormatterShortStyle; - } - else if ([item isEqualToString:@"medium"]) { + } else if ([item isEqualToString:@"medium"]) { style = kCFDateFormatterMediumStyle; - } - else if ([item isEqualToString:@"long"]) { + } else if ([item isEqualToString:@"long"]) { style = kCFDateFormatterLongStyle; - } - else if ([item isEqualToString:@"full"]) { + } else if ([item isEqualToString:@"full"]) { style = kCFDateFormatterFullStyle; } } // get the type of date and time to generate else if ([key isEqualToString:@"selector"]) { - if([item isEqualToString:@"date"]) { + if ([item isEqualToString:@"date"]) { dateStyle = style; timeStyle = kCFDateFormatterNoStyle; - } - else if ([item isEqualToString:@"time"]) { + } else if ([item isEqualToString:@"time"]) { dateStyle = kCFDateFormatterNoStyle; timeStyle = style; - } - else if ([item isEqualToString:@"date and time"]) { + } else if ([item isEqualToString:@"date and time"]) { dateStyle = style; timeStyle = style; } } } } - } - + // get the user's default settings for date and time formats CFDateFormatterRef formatter = CFDateFormatterCreate(kCFAllocatorDefault, - currentLocale, - dateStyle, - timeStyle); - + currentLocale, + dateStyle, + timeStyle); + // set the parsing to be more lenient CFDateFormatterSetProperty(formatter, kCFDateFormatterIsLenient, kCFBooleanTrue); - + // parse tha date and time string CFDateRef date = CFDateFormatterCreateDateFromString(kCFAllocatorDefault, - formatter, - (CFStringRef)dateString, - NULL); - + formatter, + (__bridge CFStringRef)dateString, + NULL); + // if we were able to parse the date then get the date and time components - if(date != NULL) { - NSCalendar *calendar = [NSCalendar currentCalendar]; - + if (date != NULL) { + NSCalendar* calendar = [NSCalendar currentCalendar]; + unsigned unitFlags = NSYearCalendarUnit | - NSMonthCalendarUnit | - NSDayCalendarUnit | - NSHourCalendarUnit | - NSMinuteCalendarUnit | - NSSecondCalendarUnit; - - comps = [calendar components:unitFlags fromDate:(NSDate *)date]; + NSMonthCalendarUnit | + NSDayCalendarUnit | + NSHourCalendarUnit | + NSMinuteCalendarUnit | + NSSecondCalendarUnit; + + comps = [calendar components:unitFlags fromDate:(__bridge NSDate*)date]; CFRelease(date); } - + // put the various elements of the date and time into a dictionary - if(comps != nil) { - NSArray* keys = [NSArray arrayWithObjects:@"year",@"month",@"day",@"hour",@"minute",@"second",@"millisecond", nil]; + if (comps != nil) { + NSArray* keys = [NSArray arrayWithObjects:@"year", @"month", @"day", @"hour", @"minute", @"second", @"millisecond", nil]; NSArray* values = [NSArray arrayWithObjects:[NSNumber numberWithInt:[comps year]], - [NSNumber numberWithInt:[comps month]-1], - [NSNumber numberWithInt:[comps day]], - [NSNumber numberWithInt:[comps hour]], - [NSNumber numberWithInt:[comps minute]], - [NSNumber numberWithInt:[comps second]], - [NSNumber numberWithInt:0], /* iOS does not provide milliseconds */ - nil]; - + [NSNumber numberWithInt:[comps month] - 1], + [NSNumber numberWithInt:[comps day]], + [NSNumber numberWithInt:[comps hour]], + [NSNumber numberWithInt:[comps minute]], + [NSNumber numberWithInt:[comps second]], + [NSNumber numberWithInt:0], /* iOS does not provide milliseconds */ + nil]; + NSDictionary* dictionary = [NSDictionary dictionaryWithObjects:values forKeys:keys]; - result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsDictionary: dictionary]; - jsString = [result toSuccessCallbackString:callBackId]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dictionary]; } // error else { @@ -304,62 +277,55 @@ [dictionary setValue:[NSNumber numberWithInt:CDV_PARSING_ERROR] forKey:@"code"]; [dictionary setValue:@"unable to parse" forKey:@"message"]; result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; - jsString = [result toErrorCallbackString:callBackId]; } - - [self writeJavascript:jsString]; - + + [self.commandDelegate sendPluginResult:result callbackId:callBackId]; + CFRelease(formatter); } -- (void) getDatePattern:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +- (void)getDatePattern:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { CFDateFormatterStyle style = kCFDateFormatterShortStyle; CFDateFormatterStyle dateStyle = kCFDateFormatterShortStyle; CFDateFormatterStyle timeStyle = kCFDateFormatterShortStyle; CDVPluginResult* result = nil; - NSString* jsString = nil; NSString* callBackId = [arguments objectAtIndex:0]; - + // see if any options have been specified id items = [options valueForKey:@"options"]; - if(items && [items isKindOfClass:[NSMutableDictionary class]]) { - + + if (items && [items isKindOfClass:[NSMutableDictionary class]]) { NSEnumerator* enumerator = [items keyEnumerator]; id key; - + // iterate through all the options - while((key = [enumerator nextObject])) { + while ((key = [enumerator nextObject])) { id item = [items valueForKey:key]; - + // make sure that only string values are present if ([item isKindOfClass:[NSString class]]) { // get the desired format length - if([key isEqualToString:@"formatLength"]) { - if([item isEqualToString:@"short"]) { + if ([key isEqualToString:@"formatLength"]) { + if ([item isEqualToString:@"short"]) { style = kCFDateFormatterShortStyle; - } - else if ([item isEqualToString:@"medium"]) { + } else if ([item isEqualToString:@"medium"]) { style = kCFDateFormatterMediumStyle; - } - else if ([item isEqualToString:@"long"]) { + } else if ([item isEqualToString:@"long"]) { style = kCFDateFormatterLongStyle; - } - else if ([item isEqualToString:@"full"]) { + } else if ([item isEqualToString:@"full"]) { style = kCFDateFormatterFullStyle; } } // get the type of date and time to generate else if ([key isEqualToString:@"selector"]) { - if([item isEqualToString:@"date"]) { + if ([item isEqualToString:@"date"]) { dateStyle = style; timeStyle = kCFDateFormatterNoStyle; - } - else if ([item isEqualToString:@"time"]) { + } else if ([item isEqualToString:@"time"]) { dateStyle = kCFDateFormatterNoStyle; timeStyle = style; - } - else if ([item isEqualToString:@"date and time"]) { + } else if ([item isEqualToString:@"date and time"]) { dateStyle = style; timeStyle = style; } @@ -367,31 +333,29 @@ } } } - + // get the user's default settings for date and time formats CFDateFormatterRef formatter = CFDateFormatterCreate(kCFAllocatorDefault, - currentLocale, - dateStyle, - timeStyle); - + currentLocale, + dateStyle, + timeStyle); + // get the date pattern to apply when formatting and parsing CFStringRef datePattern = CFDateFormatterGetFormat(formatter); // get the user's current time zone information - CFTimeZoneRef timezone = (CFTimeZoneRef) CFDateFormatterCopyProperty(formatter, kCFDateFormatterTimeZone); - + CFTimeZoneRef timezone = (CFTimeZoneRef)CFDateFormatterCopyProperty(formatter, kCFDateFormatterTimeZone); + // put the pattern and time zone information into the dictionary - if(datePattern != nil && timezone != nil) { - NSArray* keys = [NSArray arrayWithObjects:@"pattern",@"timezone",@"utc_offset",@"dst_offset",nil]; - NSArray* values = [NSArray arrayWithObjects:((NSString*)datePattern), - [((NSTimeZone*) timezone)abbreviation], - [NSNumber numberWithLong:[((NSTimeZone*) timezone)secondsFromGMT]], - [NSNumber numberWithDouble:[((NSTimeZone*) timezone)daylightSavingTimeOffset]], - nil]; - + if ((datePattern != nil) && (timezone != nil)) { + NSArray* keys = [NSArray arrayWithObjects:@"pattern", @"timezone", @"utc_offset", @"dst_offset", nil]; + NSArray* values = [NSArray arrayWithObjects:((__bridge NSString*)datePattern), + [((__bridge NSTimeZone*)timezone)abbreviation], + [NSNumber numberWithLong:[((__bridge NSTimeZone*)timezone)secondsFromGMT]], + [NSNumber numberWithDouble:[((__bridge NSTimeZone*)timezone)daylightSavingTimeOffset]], + nil]; + NSDictionary* dictionary = [NSDictionary dictionaryWithObjects:values forKeys:keys]; - result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsDictionary: dictionary]; - jsString = [result toSuccessCallbackString:callBackId]; - + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dictionary]; } // error else { @@ -399,85 +363,77 @@ [dictionary setValue:[NSNumber numberWithInt:CDV_PATTERN_ERROR] forKey:@"code"]; [dictionary setValue:@"Pattern error" forKey:@"message"]; result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; - jsString = [result toErrorCallbackString:callBackId]; } - - [self writeJavascript:jsString]; - + + [self.commandDelegate sendPluginResult:result callbackId:callBackId]; + if (timezone) { CFRelease(timezone); } CFRelease(formatter); } -- (void) getDateNames:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +- (void)getDateNames:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { int style = CDV_FORMAT_LONG; int selector = CDV_SELECTOR_MONTHS; CFStringRef dataStyle = kCFDateFormatterMonthSymbols; CDVPluginResult* result = nil; - NSString* jsString = nil; NSString* callBackId = [arguments objectAtIndex:0]; - + // see if any options have been specified id items = [options valueForKey:@"options"]; - if(items && [items isKindOfClass:[NSMutableDictionary class]]) { - + + if (items && [items isKindOfClass:[NSMutableDictionary class]]) { NSEnumerator* enumerator = [items keyEnumerator]; id key; - + // iterate through all the options - while((key = [enumerator nextObject])) { + while ((key = [enumerator nextObject])) { id item = [items valueForKey:key]; - + // make sure that only string values are present if ([item isKindOfClass:[NSString class]]) { // get the desired type of name - if([key isEqualToString:@"type"]) { - if([item isEqualToString:@"narrow"]) { + if ([key isEqualToString:@"type"]) { + if ([item isEqualToString:@"narrow"]) { style = CDV_FORMAT_SHORT; - } - else if ([item isEqualToString:@"wide"]) { + } else if ([item isEqualToString:@"wide"]) { style = CDV_FORMAT_LONG; } } // determine if months or days are needed else if ([key isEqualToString:@"item"]) { - if([item isEqualToString:@"months"]) { + if ([item isEqualToString:@"months"]) { selector = CDV_SELECTOR_MONTHS; - } - else if ([item isEqualToString:@"days"]) { + } else if ([item isEqualToString:@"days"]) { selector = CDV_SELECTOR_DAYS; } } } } } - + CFDateFormatterRef formatter = CFDateFormatterCreate(kCFAllocatorDefault, - currentLocale, - kCFDateFormatterFullStyle, - kCFDateFormatterFullStyle); - - if(selector == CDV_SELECTOR_MONTHS && style == CDV_FORMAT_LONG) { + currentLocale, + kCFDateFormatterFullStyle, + kCFDateFormatterFullStyle); + + if ((selector == CDV_SELECTOR_MONTHS) && (style == CDV_FORMAT_LONG)) { dataStyle = kCFDateFormatterMonthSymbols; - } - else if(selector == CDV_SELECTOR_MONTHS && style == CDV_FORMAT_SHORT) { + } else if ((selector == CDV_SELECTOR_MONTHS) && (style == CDV_FORMAT_SHORT)) { dataStyle = kCFDateFormatterShortMonthSymbols; - } - else if(selector == CDV_SELECTOR_DAYS && style == CDV_FORMAT_LONG) { + } else if ((selector == CDV_SELECTOR_DAYS) && (style == CDV_FORMAT_LONG)) { dataStyle = kCFDateFormatterWeekdaySymbols; - } - else if(selector == CDV_SELECTOR_DAYS && style == CDV_FORMAT_SHORT) { + } else if ((selector == CDV_SELECTOR_DAYS) && (style == CDV_FORMAT_SHORT)) { dataStyle = kCFDateFormatterShortWeekdaySymbols; } - - CFArrayRef names = (CFArrayRef) CFDateFormatterCopyProperty(formatter, dataStyle); - - if(names) { - NSDictionary* dictionary = [NSDictionary dictionaryWithObject:((NSArray*)names) forKey:@"value"]; - result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsDictionary: dictionary]; - jsString = [result toSuccessCallbackString:callBackId]; + + CFArrayRef names = (CFArrayRef)CFDateFormatterCopyProperty(formatter, dataStyle); + + if (names) { + NSDictionary* dictionary = [NSDictionary dictionaryWithObject:((__bridge NSArray*)names) forKey:@"value"]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dictionary]; CFRelease(names); } // error @@ -486,37 +442,34 @@ [dictionary setValue:[NSNumber numberWithInt:CDV_UNKNOWN_ERROR] forKey:@"code"]; [dictionary setValue:@"Unknown error" forKey:@"message"]; result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; - jsString = [result toErrorCallbackString:callBackId]; } - - [self writeJavascript:jsString]; - + + [self.commandDelegate sendPluginResult:result callbackId:callBackId]; + CFRelease(formatter); - } -- (void) isDayLightSavingsTime:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +- (void)isDayLightSavingsTime:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { NSDate* date = nil; CDVPluginResult* result = nil; - NSString* jsString = nil; NSString* callBackId = [arguments objectAtIndex:0]; - + id milliseconds = [options valueForKey:@"date"]; - if (milliseconds && [milliseconds isKindOfClass:[NSNumber class]]){ + + if (milliseconds && [milliseconds isKindOfClass:[NSNumber class]]) { // get the number of seconds since 1970 and create the date object - date = [NSDate dateWithTimeIntervalSince1970:[milliseconds doubleValue]/1000]; + date = [NSDate dateWithTimeIntervalSince1970:[milliseconds doubleValue] / 1000]; } - - if(date) { + + if (date) { // get the current calendar for the user and check if the date is using DST - NSCalendar *calendar = [NSCalendar currentCalendar]; + NSCalendar* calendar = [NSCalendar currentCalendar]; NSTimeZone* timezone = [calendar timeZone]; NSNumber* dst = [NSNumber numberWithBool:[timezone isDaylightSavingTimeForDate:date]]; - + NSDictionary* dictionary = [NSDictionary dictionaryWithObject:dst forKey:@"dst"]; - result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsDictionary: dictionary]; - jsString = [result toSuccessCallbackString:callBackId]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dictionary]; } // error else { @@ -524,26 +477,22 @@ [dictionary setValue:[NSNumber numberWithInt:CDV_UNKNOWN_ERROR] forKey:@"code"]; [dictionary setValue:@"Unknown error" forKey:@"message"]; result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; - jsString = [result toErrorCallbackString:callBackId]; } - [self writeJavascript:jsString]; + [self.commandDelegate sendPluginResult:result callbackId:callBackId]; } -- (void) getFirstDayOfWeek:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +- (void)getFirstDayOfWeek:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { CDVPluginResult* result = nil; - NSString* jsString = nil; NSString* callBackId = [arguments objectAtIndex:0]; - - NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; - + + NSCalendar* calendar = [NSCalendar autoupdatingCurrentCalendar]; + NSNumber* day = [NSNumber numberWithInt:[calendar firstWeekday]]; - - - if(day) { + + if (day) { NSDictionary* dictionary = [NSDictionary dictionaryWithObject:day forKey:@"value"]; - result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsDictionary: dictionary]; - jsString = [result toSuccessCallbackString:callBackId]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dictionary]; } // error else { @@ -551,66 +500,62 @@ [dictionary setValue:[NSNumber numberWithInt:CDV_UNKNOWN_ERROR] forKey:@"code"]; [dictionary setValue:@"Unknown error" forKey:@"message"]; result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; - jsString = [result toErrorCallbackString:callBackId]; } - - [self writeJavascript:jsString]; + + [self.commandDelegate sendPluginResult:result callbackId:callBackId]; } -- (void) numberToString:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +- (void)numberToString:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { CDVPluginResult* result = nil; - NSString* jsString = nil; NSString* callBackId = [arguments objectAtIndex:0]; CFNumberFormatterStyle style = kCFNumberFormatterDecimalStyle; NSNumber* number = nil; - + id value = [options valueForKey:@"number"]; - if (value && [value isKindOfClass:[NSNumber class]]){ + + if (value && [value isKindOfClass:[NSNumber class]]) { number = (NSNumber*)value; } - + // see if any options have been specified id items = [options valueForKey:@"options"]; - if(items && [items isKindOfClass:[NSMutableDictionary class]]) { + if (items && [items isKindOfClass:[NSMutableDictionary class]]) { NSEnumerator* enumerator = [items keyEnumerator]; id key; - + // iterate through all the options - while((key = [enumerator nextObject])) { + while ((key = [enumerator nextObject])) { id item = [items valueForKey:key]; - + // make sure that only string values are present if ([item isKindOfClass:[NSString class]]) { // get the desired style of formatting - if([key isEqualToString:@"type"]) { - if([item isEqualToString:@"percent"]) { + if ([key isEqualToString:@"type"]) { + if ([item isEqualToString:@"percent"]) { style = kCFNumberFormatterPercentStyle; - } - else if ([item isEqualToString:@"currency"]) { + } else if ([item isEqualToString:@"currency"]) { style = kCFNumberFormatterCurrencyStyle; - } - else if ([item isEqualToString:@"decimal"]) { + } else if ([item isEqualToString:@"decimal"]) { style = kCFNumberFormatterDecimalStyle; } } } } } - + CFNumberFormatterRef formatter = CFNumberFormatterCreate(kCFAllocatorDefault, - currentLocale, - style); - + currentLocale, + style); + // get the localized string based upon the locale and user preferences - NSString *numberString = (NSString *) CFNumberFormatterCreateStringWithNumber(kCFAllocatorDefault, - formatter, - (CFNumberRef)number); - - if(numberString) { + NSString* numberString = (__bridge_transfer NSString*)CFNumberFormatterCreateStringWithNumber(kCFAllocatorDefault, + formatter, + (__bridge CFNumberRef)number); + + if (numberString) { NSDictionary* dictionary = [NSDictionary dictionaryWithObject:numberString forKey:@"value"]; - result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsDictionary: dictionary]; - jsString = [result toSuccessCallbackString:callBackId]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dictionary]; } // error else { @@ -619,77 +564,72 @@ [dictionary setValue:[NSNumber numberWithInt:CDV_FORMATTING_ERROR] forKey:@"code"]; [dictionary setValue:@"Unable to format" forKey:@"message"]; result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; - jsString = [result toErrorCallbackString:callBackId]; } - - [self writeJavascript:jsString]; - - [numberString release]; + + [self.commandDelegate sendPluginResult:result callbackId:callBackId]; + CFRelease(formatter); } -- (void) stringToNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +- (void)stringToNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { CDVPluginResult* result = nil; - NSString* jsString = nil; NSString* callBackId = [arguments objectAtIndex:0]; CFNumberFormatterStyle style = kCFNumberFormatterDecimalStyle; NSString* numberString = nil; double doubleValue; - + id value = [options valueForKey:@"numberString"]; - if (value && [value isKindOfClass:[NSString class]]){ + + if (value && [value isKindOfClass:[NSString class]]) { numberString = (NSString*)value; } - + // see if any options have been specified id items = [options valueForKey:@"options"]; - if(items && [items isKindOfClass:[NSMutableDictionary class]]) { + if (items && [items isKindOfClass:[NSMutableDictionary class]]) { NSEnumerator* enumerator = [items keyEnumerator]; id key; - + // iterate through all the options - while((key = [enumerator nextObject])) { + while ((key = [enumerator nextObject])) { id item = [items valueForKey:key]; - + // make sure that only string values are present if ([item isKindOfClass:[NSString class]]) { // get the desired style of formatting - if([key isEqualToString:@"type"]) { - if([item isEqualToString:@"percent"]) { + if ([key isEqualToString:@"type"]) { + if ([item isEqualToString:@"percent"]) { style = kCFNumberFormatterPercentStyle; - } - else if ([item isEqualToString:@"currency"]) { + } else if ([item isEqualToString:@"currency"]) { style = kCFNumberFormatterCurrencyStyle; - } - else if ([item isEqualToString:@"decimal"]) { + } else if ([item isEqualToString:@"decimal"]) { style = kCFNumberFormatterDecimalStyle; } } } } } - + CFNumberFormatterRef formatter = CFNumberFormatterCreate(kCFAllocatorDefault, - currentLocale, - style); - + currentLocale, + style); + // we need to make this lenient so as to avoid problems with parsing currencies that have non-breaking space characters - if(style == kCFNumberFormatterCurrencyStyle) { + if (style == kCFNumberFormatterCurrencyStyle) { CFNumberFormatterSetProperty(formatter, kCFNumberFormatterIsLenient, kCFBooleanTrue); } - + // parse againist the largest type to avoid data loss Boolean rc = CFNumberFormatterGetValueFromString(formatter, - (CFStringRef)numberString, - NULL, - kCFNumberDoubleType, - &doubleValue); - - if(rc) { + (__bridge CFStringRef)numberString, + NULL, + kCFNumberDoubleType, + &doubleValue); + + if (rc) { NSDictionary* dictionary = [NSDictionary dictionaryWithObject:[NSNumber numberWithDouble:doubleValue] forKey:@"value"]; - result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsDictionary: dictionary]; - jsString = [result toSuccessCallbackString:callBackId]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dictionary]; } // error else { @@ -698,84 +638,79 @@ [dictionary setValue:[NSNumber numberWithInt:CDV_PARSING_ERROR] forKey:@"code"]; [dictionary setValue:@"Unable to parse" forKey:@"message"]; result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; - jsString = [result toErrorCallbackString:callBackId]; } - - [self writeJavascript:jsString]; - + + [self.commandDelegate sendPluginResult:result callbackId:callBackId]; + CFRelease(formatter); } -- (void) getNumberPattern:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +- (void)getNumberPattern:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { CDVPluginResult* result = nil; - NSString* jsString = nil; NSString* callBackId = [arguments objectAtIndex:0]; CFNumberFormatterStyle style = kCFNumberFormatterDecimalStyle; CFStringRef symbolType = NULL; NSString* symbol = @""; - + // see if any options have been specified id items = [options valueForKey:@"options"]; - if(items && [items isKindOfClass:[NSMutableDictionary class]]) { + + if (items && [items isKindOfClass:[NSMutableDictionary class]]) { NSEnumerator* enumerator = [items keyEnumerator]; id key; - + // iterate through all the options - while((key = [enumerator nextObject])) { + while ((key = [enumerator nextObject])) { id item = [items valueForKey:key]; - + // make sure that only string values are present if ([item isKindOfClass:[NSString class]]) { // get the desired style of formatting - if([key isEqualToString:@"type"]) { - if([item isEqualToString:@"percent"]) { + if ([key isEqualToString:@"type"]) { + if ([item isEqualToString:@"percent"]) { style = kCFNumberFormatterPercentStyle; - } - else if ([item isEqualToString:@"currency"]) { + } else if ([item isEqualToString:@"currency"]) { style = kCFNumberFormatterCurrencyStyle; - } - else if ([item isEqualToString:@"decimal"]) { + } else if ([item isEqualToString:@"decimal"]) { style = kCFNumberFormatterDecimalStyle; } } } } } - + CFNumberFormatterRef formatter = CFNumberFormatterCreate(kCFAllocatorDefault, - currentLocale, - style); - - NSString* numberPattern = (NSString*)CFNumberFormatterGetFormat(formatter); - - if(style == kCFNumberFormatterCurrencyStyle) { + currentLocale, + style); + + NSString* numberPattern = (__bridge NSString*)CFNumberFormatterGetFormat(formatter); + + if (style == kCFNumberFormatterCurrencyStyle) { symbolType = kCFNumberFormatterCurrencySymbol; - } - else if (style == kCFNumberFormatterPercentStyle) { + } else if (style == kCFNumberFormatterPercentStyle) { symbolType = kCFNumberFormatterPercentSymbol; } - - if(symbolType) { - symbol = (NSString*) CFNumberFormatterCopyProperty(formatter, symbolType); - } - - NSString* decimal = (NSString*) CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterDecimalSeparator); - NSString* grouping = (NSString*) CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterGroupingSeparator); - NSString* posSign = (NSString*) CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterPlusSign); - NSString* negSign = (NSString*) CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterMinusSign); - NSNumber* fracDigits = (NSNumber*) CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterMinFractionDigits); - NSNumber* roundingDigits = (NSNumber*) CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterRoundingIncrement); - + + if (symbolType) { + symbol = (__bridge_transfer NSString*)CFNumberFormatterCopyProperty(formatter, symbolType); + } + + NSString* decimal = (__bridge_transfer NSString*)CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterDecimalSeparator); + NSString* grouping = (__bridge_transfer NSString*)CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterGroupingSeparator); + NSString* posSign = (__bridge_transfer NSString*)CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterPlusSign); + NSString* negSign = (__bridge_transfer NSString*)CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterMinusSign); + NSNumber* fracDigits = (__bridge_transfer NSNumber*)CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterMinFractionDigits); + NSNumber* roundingDigits = (__bridge_transfer NSNumber*)CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterRoundingIncrement); + // put the pattern information into the dictionary - if(numberPattern != nil) { - NSArray* keys = [NSArray arrayWithObjects:@"pattern",@"symbol",@"fraction",@"rounding", - @"positive",@"negative", @"decimal",@"grouping",nil]; - NSArray* values = [NSArray arrayWithObjects:numberPattern,symbol,fracDigits,roundingDigits, - posSign,negSign,decimal,grouping,nil]; + if (numberPattern != nil) { + NSArray* keys = [NSArray arrayWithObjects:@"pattern", @"symbol", @"fraction", @"rounding", + @"positive", @"negative", @"decimal", @"grouping", nil]; + NSArray* values = [NSArray arrayWithObjects:numberPattern, symbol, fracDigits, roundingDigits, + posSign, negSign, decimal, grouping, nil]; NSDictionary* dictionary = [NSDictionary dictionaryWithObjects:values forKeys:keys]; - result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsDictionary: dictionary]; - jsString = [result toSuccessCallbackString:callBackId]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dictionary]; } // error else { @@ -783,25 +718,16 @@ [dictionary setValue:[NSNumber numberWithInt:CDV_PATTERN_ERROR] forKey:@"code"]; [dictionary setValue:@"Pattern error" forKey:@"message"]; result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; - jsString = [result toErrorCallbackString:callBackId]; - } - - [self writeJavascript:jsString]; - - [decimal release]; - [grouping release]; - [posSign release]; - [negSign release]; - [fracDigits release]; - [roundingDigits release]; - [symbol release]; + } + + [self.commandDelegate sendPluginResult:result callbackId:callBackId]; + CFRelease(formatter); } -- (void) getCurrencyPattern:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +- (void)getCurrencyPattern:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { CDVPluginResult* result = nil; - NSString* jsString = nil; NSString* callBackId = [arguments objectAtIndex:0]; NSString* currencyCode = nil; NSString* numberPattern = nil; @@ -810,35 +736,35 @@ int32_t defaultFractionDigits; double roundingIncrement; Boolean rc; - + id value = [options valueForKey:@"currencyCode"]; - if (value && [value isKindOfClass:[NSString class]]){ + + if (value && [value isKindOfClass:[NSString class]]) { currencyCode = (NSString*)value; } - + // first see if there is base currency info available and fill in the currency_info structure - rc = CFNumberFormatterGetDecimalInfoForCurrencyCode((CFStringRef)currencyCode, &defaultFractionDigits, &roundingIncrement); - + rc = CFNumberFormatterGetDecimalInfoForCurrencyCode((__bridge CFStringRef)currencyCode, &defaultFractionDigits, &roundingIncrement); + // now set the currency code in the formatter - if(rc) { + if (rc) { CFNumberFormatterRef formatter = CFNumberFormatterCreate(kCFAllocatorDefault, - currentLocale, - kCFNumberFormatterCurrencyStyle); - - CFNumberFormatterSetProperty(formatter, kCFNumberFormatterCurrencyCode, (CFStringRef)currencyCode); - CFNumberFormatterSetProperty(formatter, kCFNumberFormatterInternationalCurrencySymbol, (CFStringRef)currencyCode); - - numberPattern = (NSString*)CFNumberFormatterGetFormat(formatter); - decimal = (NSString*) CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterCurrencyDecimalSeparator); - grouping = (NSString*) CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterCurrencyGroupingSeparator); - - NSArray* keys = [NSArray arrayWithObjects:@"pattern",@"code",@"fraction",@"rounding", - @"decimal",@"grouping",nil]; - NSArray* values = [NSArray arrayWithObjects:numberPattern,currencyCode,[NSNumber numberWithInt:defaultFractionDigits], - [NSNumber numberWithDouble:roundingIncrement],decimal,grouping,nil]; + currentLocale, + kCFNumberFormatterCurrencyStyle); + + CFNumberFormatterSetProperty(formatter, kCFNumberFormatterCurrencyCode, (__bridge CFStringRef)currencyCode); + CFNumberFormatterSetProperty(formatter, kCFNumberFormatterInternationalCurrencySymbol, (__bridge CFStringRef)currencyCode); + + numberPattern = (__bridge NSString*)CFNumberFormatterGetFormat(formatter); + decimal = (__bridge_transfer NSString*)CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterCurrencyDecimalSeparator); + grouping = (__bridge_transfer NSString*)CFNumberFormatterCopyProperty(formatter, kCFNumberFormatterCurrencyGroupingSeparator); + + NSArray* keys = [NSArray arrayWithObjects:@"pattern", @"code", @"fraction", @"rounding", + @"decimal", @"grouping", nil]; + NSArray* values = [NSArray arrayWithObjects:numberPattern, currencyCode, [NSNumber numberWithInt:defaultFractionDigits], + [NSNumber numberWithDouble:roundingIncrement], decimal, grouping, nil]; NSDictionary* dictionary = [NSDictionary dictionaryWithObjects:values forKeys:keys]; - result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsDictionary: dictionary]; - jsString = [result toSuccessCallbackString:callBackId]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dictionary]; CFRelease(formatter); } // error @@ -848,21 +774,17 @@ [dictionary setValue:[NSNumber numberWithInt:CDV_PATTERN_ERROR] forKey:@"code"]; [dictionary setValue:@"Unable to get pattern" forKey:@"message"]; result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dictionary]; - jsString = [result toErrorCallbackString:callBackId]; } - - [self writeJavascript:jsString]; - - [decimal release]; - [grouping release]; + + [self.commandDelegate sendPluginResult:result callbackId:callBackId]; } -- (void) dealloc { + +- (void)dealloc +{ if (currentLocale) { CFRelease(currentLocale); currentLocale = nil; } - [super dealloc]; - } -@end \ No newline at end of file +@end http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/237f42e2/CordovaLib/CordovaLib.xcodeproj/project.pbxproj ---------------------------------------------------------------------- diff --git a/CordovaLib/CordovaLib.xcodeproj/project.pbxproj b/CordovaLib/CordovaLib.xcodeproj/project.pbxproj index 22da1a7..5d0d461 100644 --- a/CordovaLib/CordovaLib.xcodeproj/project.pbxproj +++ b/CordovaLib/CordovaLib.xcodeproj/project.pbxproj @@ -70,7 +70,7 @@ 88BA573D109BB46F00FB5E78 /* CDVAccelerometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 88BA573B109BB46F00FB5E78 /* CDVAccelerometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 88BA573E109BB46F00FB5E78 /* CDVAccelerometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 88BA573C109BB46F00FB5E78 /* CDVAccelerometer.m */; }; 9D76CF3C1625A4C50008A0F6 /* CDVGlobalization.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D76CF3A1625A4C50008A0F6 /* CDVGlobalization.h */; }; - 9D76CF3D1625A4C50008A0F6 /* CDVGlobalization.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D76CF3B1625A4C50008A0F6 /* CDVGlobalization.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 9D76CF3D1625A4C50008A0F6 /* CDVGlobalization.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D76CF3B1625A4C50008A0F6 /* CDVGlobalization.m */; }; C937A4561337599E002C4C79 /* CDVFileTransfer.h in Headers */ = {isa = PBXBuildFile; fileRef = C937A4541337599E002C4C79 /* CDVFileTransfer.h */; settings = {ATTRIBUTES = (Public, ); }; }; C937A4571337599E002C4C79 /* CDVFileTransfer.m in Sources */ = {isa = PBXBuildFile; fileRef = C937A4551337599E002C4C79 /* CDVFileTransfer.m */; }; EB3B3547161CB44D003DBE7D /* CDVCommandQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = EB3B3545161CB44D003DBE7D /* CDVCommandQueue.h */; };