Fixed typo in about. Added the label to the phone number completion for multiple SMS. Rewrote Login code to get the action from the HTML and read every input existing so if Google updates the login again, I have it covered for the most part. Updated the documentation to exclude information about Gizmo5 as they are no longer in business and Google brought it down.

This commit is contained in:
GRMrGecko 2011-09-16 17:04:03 -05:00
parent 2679510ca0
commit 60262c01cc
6 changed files with 182 additions and 88 deletions

View File

@ -1,8 +1,8 @@
{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350 {\rtf1\ansi\ansicpg1252\cocoartf1138
{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;} {\colortbl;\red255\green255\blue255;}
\margl1440\margr1440\vieww9000\viewh8400\viewkind0 \margl1440\margr1440\vieww9000\viewh8400\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc\pardirnatural \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\qc
\f0\b\fs36 \cf0 By Mr. Gecko \f0\b\fs36 \cf0 By Mr. Gecko
\b0\fs32 \ \b0\fs32 \
@ -10,16 +10,16 @@
\fs34 At {\field{\*\fldinst{HYPERLINK "http://mrgeckosmedia.com/"}}{\fldrslt mrgeckosmedia.com}} \fs34 At {\field{\*\fldinst{HYPERLINK "http://mrgeckosmedia.com/"}}{\fldrslt mrgeckosmedia.com}}
\fs32 \ \fs32 \
Special Thanks To\ Special Thanks To\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc\pardirnatural \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\qc
\fs24 \cf0 MegaEduX ({\field{\*\fldinst{HYPERLINK "http://megaedux.com"}}{\fldrslt megaedux.com}})\ \fs24 \cf0 MegaEduX ({\field{\*\fldinst{HYPERLINK "http://megaedux.com"}}{\fldrslt megaedux.com}})\
RockStar ({\field{\*\fldinst{HYPERLINK "http://rocknthesweater.com"}}{\fldrslt rocknthesweater.com}})\ RockStar ({\field{\*\fldinst{HYPERLINK "http://rocknthesweater.com"}}{\fldrslt rocknthesweater.com}})\
PowerOfCheese ({\field{\*\fldinst{HYPERLINK "http://xtrememachinez.com"}}{\fldrslt xtrememachinez.com}})\ PowerOfCheese ({\field{\*\fldinst{HYPERLINK "http://xtrememachinez.com"}}{\fldrslt xtrememachinez.com}})\
\ \
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural
\cf0 VoiceMac uses {\field{\*\fldinst{HYPERLINK "http://mrgeckosmedia.com"}}{\fldrslt MGMSIP}} as a wrapper for {\field{\*\fldinst{HYPERLINK "http://www.pjsip.org/"}}{\fldrslt PJSIP}} which is a VOIP library, {\field{\*\fldinst{HYPERLINK "http://ffmpeg.org/"}}{\fldrslt FFmpeg}} for audio conversion, {\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}} for software update, {\field{\*\fldinst{HYPERLINK "http://growl.info/"}}{\fldrslt Growl}} for notifications, and {\field{\*\fldinst{HYPERLINK "http://opensource.mrgeckosmedia.com/GeckoReporter"}}{\fldrslt GeckoReporter}} for crash and reporting.\ \cf0 VoiceMac uses {\field{\*\fldinst{HYPERLINK "http://mrgeckosmedia.com"}}{\fldrslt MGMSIP}} as a wrapper for {\field{\*\fldinst{HYPERLINK "http://www.pjsip.org/"}}{\fldrslt PJSIP}} which is a VOIP library, {\field{\*\fldinst{HYPERLINK "http://ffmpeg.org/"}}{\fldrslt FFmpeg}} for audio conversion, {\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}} for software update, {\field{\*\fldinst{HYPERLINK "http://growl.info/"}}{\fldrslt Growl}} for notifications, and {\field{\*\fldinst{HYPERLINK "http://opensource.mrgeckosmedia.com/GeckoReporter"}}{\fldrslt GeckoReporter}} for crash and reporting.\
\ \
VoiceMac is the first Google Voice client for the Mac. Send multiple SMS Messages, send SMS Messages, receive SMS Messages, place calls, look at your call history, receive voicemail, reverse lookup a phone number, and search your contact list in one easy interface. When you receive a SMS Message or Voicemail, you get notifications view Growl and hear sounds that is customizable.\ VoiceMac is the first Google Voice client for the Mac. Send multiple SMS Messages, send SMS Messages, receive SMS Messages, place calls, look at your call history, receive voicemail, reverse lookup a phone number, and search your contact list in one easy interface. When you receive a SMS Message or Voicemail, you get notifications via Growl and hear sounds that is customizable.\
\ \
With SIP support you can place calls from your computer using your favorite SIP service and if you link your Google Voice Number with the SIP service, you can place calls with your Google Voice Number from your computer. With the reverse lookup data, you can see who is calling you, even if their number isn't in your contacts list.\ With SIP support you can place calls from your computer using your favorite SIP service and if you link your Google Voice Number with the SIP service, you can place calls with your Google Voice Number from your computer. With the reverse lookup data, you can see who is calling you, even if their number isn't in your contacts list.\
\ \

View File

@ -398,7 +398,7 @@ const int MGMCMaxResults = 10;
[search appendFormat:MGMCWordSSA, word]; [search appendFormat:MGMCWordSSA, word];
} }
} }
MGMLiteResult *result = [contactsConnection query:@"SELECT name, company, number, offsets(contacts) AS offset FROM contacts WHERE contacts MATCH %@ ORDER BY offset LIMIT %d", search, maxResults]; MGMLiteResult *result = [contactsConnection query:@"SELECT name, company, label, number, offsets(contacts) AS offset FROM contacts WHERE contacts MATCH %@ ORDER BY offset LIMIT %d", search, maxResults];
NSDictionary *contact = nil; NSDictionary *contact = nil;
while ((contact=[result nextRow])!=nil) { while ((contact=[result nextRow])!=nil) {
@ -423,7 +423,10 @@ const int MGMCMaxResults = 10;
name = [name stringByAppendingFormat:MGMCWordS, [nameArray objectAtIndex:i]]; name = [name stringByAppendingFormat:MGMCWordS, [nameArray objectAtIndex:i]];
} }
} }
if ([[contact objectForKey:MGMCLabel] isEqual:@""])
completion = [NSString stringWithFormat:@"%@ <%@>", name, [[contact objectForKey:MGMCNumber] readableNumber]]; completion = [NSString stringWithFormat:@"%@ <%@>", name, [[contact objectForKey:MGMCNumber] readableNumber]];
else
completion = [NSString stringWithFormat:@"%@ <%@> (%@)", name, [[contact objectForKey:MGMCNumber] readableNumber], [contact objectForKey:MGMCLabel]];
} else { } else {
completion = [[contact objectForKey:MGMCNumber] readableNumber]; completion = [[contact objectForKey:MGMCNumber] readableNumber];
} }

View File

@ -293,44 +293,72 @@ const BOOL MGMInstanceInvisible = YES;
return; return;
} }
} else if ([returnedString containsString:@"onload=\"autoSubmit()\""]) { } else if ([returnedString containsString:@"onload=\"autoSubmit()\""]) {
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:MGMLoginURL]]; NSRange actionRange = [returnedString rangeOfString:@"<form"];
NSString *loginURL = [MGMLoginURL copy];
if (actionRange.location!=NSNotFound) {
NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSString *string = [returnedString substringFromIndex:actionRange.location+actionRange.length];
actionRange = [string rangeOfString:@"action="];
if (actionRange.location!=NSNotFound) {
NSString *end = [string substringWithRange:NSMakeRange(actionRange.location+actionRange.length, 1)];
actionRange.location += 1;
string = [string substringFromIndex:actionRange.location+actionRange.length];
actionRange = [string rangeOfString:end];
[loginURL release];
loginURL = [[string substringWithRange:NSMakeRange(0, actionRange.location)] copy];
}
[pool drain];
}
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:loginURL]];
[loginURL release];
[request setHTTPMethod:MGMPostMethod]; [request setHTTPMethod:MGMPostMethod];
[request setValue:MGMURLForm forHTTPHeaderField:MGMContentType]; [request setValue:MGMURLForm forHTTPHeaderField:MGMContentType];
NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
NSString *nameValue = @"name=\"%@\"";
NSString *valueStart = @"value=\""; NSRange range = NSMakeRange(0, [returnedString length]);
NSString *valueEnd = @"\""; while (range.length>1) {
NSString *valueStartQ = @"value='";
NSString *valueEndQ = @"'";
NSArray *names = [NSArray arrayWithObjects:@"dsh", @"smsToken", @"followup", @"continue", @"PersistentCookie", @"service", @"rmShown", @"GALX", @"ltmpl", nil];
for (int i=0; i<[names count]; i++) {
NSAutoreleasePool *pool = [NSAutoreleasePool new]; NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSString *nameString = [NSString stringWithFormat:nameValue, [names objectAtIndex:i]]; NSRange inputRange = [returnedString rangeOfString:@"<input " options:NSCaseInsensitiveSearch range:range];
NSRange range = [returnedString rangeOfString:nameString]; if (inputRange.location!=NSNotFound) {
if (range.location==NSNotFound) { range.location = inputRange.location+inputRange.length;
nameString = [nameString replace:@"\"" with:@"'"]; range.length = [returnedString length]-range.location;
range = [returnedString rangeOfString:nameString]; NSRange endInputRange = [returnedString rangeOfString:@">" options:NSCaseInsensitiveSearch range:range];
} if (endInputRange.location==NSNotFound)
if (range.location==NSNotFound) { endInputRange.length = range.length;
NSLog(@"Unable to find %@", [names objectAtIndex:i]); else
} else { endInputRange.length = endInputRange.location-range.location;
NSString *string = [returnedString substringFromIndex:range.location+range.length]; endInputRange.location = range.location;
range = [string rangeOfString:valueStart]; NSRange nameRange = [returnedString rangeOfString:@"name=" options:NSCaseInsensitiveSearch range:endInputRange];
if (range.location==NSNotFound) { if (nameRange.location==NSNotFound)
range = [string rangeOfString:valueStartQ];
if (range.location==NSNotFound) {
NSLog(@"Unable to find value for %@", [names objectAtIndex:i]);
[pool drain];
continue; continue;
} NSString *end = [returnedString substringWithRange:NSMakeRange(nameRange.location+nameRange.length, 1)];
string = [string substringFromIndex:range.location+range.length]; nameRange.location += 1;
range = [string rangeOfString:valueEndQ]; NSRange endRange = nameRange;
endRange.location = nameRange.location+nameRange.length;
endRange.length = [returnedString length]-endRange.location;
endRange = [returnedString rangeOfString:end options:NSCaseInsensitiveSearch range:endRange];
if (endRange.location==NSNotFound)
continue;
NSString *name = [returnedString substringWithRange:NSMakeRange(nameRange.location+nameRange.length, endRange.location-(nameRange.location+nameRange.length))];
range.location = inputRange.location+inputRange.length;
range.length = [returnedString length]-range.location;
NSRange valueRange = [returnedString rangeOfString:@"value=" options:NSCaseInsensitiveSearch range:endInputRange];
if (valueRange.location==NSNotFound)
continue;
end = [returnedString substringWithRange:NSMakeRange(valueRange.location+valueRange.length, 1)];
valueRange.location += 1;
endRange = valueRange;
endRange.location = valueRange.location+valueRange.length;
endRange.length = [returnedString length]-endRange.location;
endRange = [returnedString rangeOfString:end options:NSCaseInsensitiveSearch range:endRange];
if (endRange.location==NSNotFound)
continue;
NSString *value = [returnedString substringWithRange:NSMakeRange(valueRange.location+valueRange.length, endRange.location-(valueRange.location+valueRange.length))];
[parameters setObject:value forKey:name];
} else { } else {
string = [string substringFromIndex:range.location+range.length]; break;
range = [string rangeOfString:valueEnd];
}
if (range.location==NSNotFound) NSLog(@"failed 532");
[parameters setObject:[[[string substringWithRange:NSMakeRange(0, range.location)] copy] autorelease] forKey:[names objectAtIndex:i]];
} }
[pool drain]; [pool drain];
} }
@ -353,7 +381,7 @@ const BOOL MGMInstanceInvisible = YES;
[handler setFinish:@selector(indexDidFinish:)]; [handler setFinish:@selector(indexDidFinish:)];
[handler setInvisible:MGMInstanceInvisible]; [handler setInvisible:MGMInstanceInvisible];
[connectionManager addHandler:handler]; [connectionManager addHandler:handler];
} else if ([returnedString containsString:@"<div id=\"gaia_loginbox\">"]) { } else if ([returnedString containsString:@"<div class=\"sign-in\""]) {
if (webLoginTries>2) { if (webLoginTries>2) {
NSError *error = [NSError errorWithDomain:@"com.MrGeckosMedia.MGMInstance.Login" code:1 userInfo:[NSDictionary dictionaryWithObject:@"Unable to login. Please check your Credentials." forKey:NSLocalizedDescriptionKey]]; NSError *error = [NSError errorWithDomain:@"com.MrGeckosMedia.MGMInstance.Login" code:1 userInfo:[NSDictionary dictionaryWithObject:@"Unable to login. Please check your Credentials." forKey:NSLocalizedDescriptionKey]];
if (delegate!=nil && [delegate respondsToSelector:@selector(loginError:)]) { if (delegate!=nil && [delegate respondsToSelector:@selector(loginError:)]) {
@ -364,57 +392,88 @@ const BOOL MGMInstanceInvisible = YES;
return; return;
} }
webLoginTries++; webLoginTries++;
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:MGMLoginURL]]; NSRange actionRange = [returnedString rangeOfString:@"<form"];
NSString *loginURL = [MGMLoginURL copy];
if (actionRange.location!=NSNotFound) {
NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSString *string = [returnedString substringFromIndex:actionRange.location+actionRange.length];
actionRange = [string rangeOfString:@"action="];
if (actionRange.location!=NSNotFound) {
NSString *end = [string substringWithRange:NSMakeRange(actionRange.location+actionRange.length, 1)];
actionRange.location += 1;
string = [string substringFromIndex:actionRange.location+actionRange.length];
actionRange = [string rangeOfString:end];
[loginURL release];
loginURL = [[string substringWithRange:NSMakeRange(0, actionRange.location)] copy];
}
[pool drain];
}
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:loginURL]];
[loginURL release];
[request setHTTPMethod:MGMPostMethod]; [request setHTTPMethod:MGMPostMethod];
[request setValue:MGMURLForm forHTTPHeaderField:MGMContentType]; [request setValue:MGMURLForm forHTTPHeaderField:MGMContentType];
NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
[parameters setObject:(webLoginTries==2 ? [[user settingForKey:MGMUserName] stringByAppendingString:@"@gmail.com"] : [user settingForKey:MGMUserName]) forKey:@"Email"];
[parameters setObject:[user password] forKey:@"Passwd"]; NSRange range = NSMakeRange(0, [returnedString length]);
[parameters setObject:@"yes" forKey:@"PersistentCookie"]; while (range.length>1) {
NSString *nameValue = @"name=\"%@\"";
NSString *valueStart = @"value=\"";
NSString *valueEnd = @"\"";
NSString *valueStartQ = @"value='";
NSString *valueEndQ = @"'";
NSArray *names = [NSArray arrayWithObjects:@"ltmpl", @"pstMsg", @"dnConn", @"continue", @"followup", @"service", @"dsh", @"timeStmp", @"secTok", @"GALX", @"signIn", @"asts", @"rmShown", nil];
for (int i=0; i<[names count]; i++) {
NSAutoreleasePool *pool = [NSAutoreleasePool new]; NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSString *nameString = [NSString stringWithFormat:nameValue, [names objectAtIndex:i]]; NSRange inputRange = [returnedString rangeOfString:@"<input " options:NSCaseInsensitiveSearch range:range];
NSRange range = [returnedString rangeOfString:nameString]; if (inputRange.location!=NSNotFound) {
if (range.location==NSNotFound) { range.location = inputRange.location+inputRange.length;
nameString = [nameString replace:@"\"" with:@"'"]; range.length = [returnedString length]-range.location;
range = [returnedString rangeOfString:nameString]; NSRange endInputRange = [returnedString rangeOfString:@">" options:NSCaseInsensitiveSearch range:range];
} if (endInputRange.location==NSNotFound)
if (range.location==NSNotFound) { endInputRange.length = range.length;
NSLog(@"Unable to find %@", [names objectAtIndex:i]); else
} else { endInputRange.length = endInputRange.location-range.location;
NSString *string = [returnedString substringFromIndex:range.location+range.length]; endInputRange.location = range.location;
range = [string rangeOfString:valueStart]; NSRange nameRange = [returnedString rangeOfString:@"name=" options:NSCaseInsensitiveSearch range:endInputRange];
if (range.location==NSNotFound) { if (nameRange.location==NSNotFound)
range = [string rangeOfString:valueStartQ];
if (range.location==NSNotFound) {
NSLog(@"Unable to find value for %@", [names objectAtIndex:i]);
[pool drain];
continue; continue;
} NSString *end = [returnedString substringWithRange:NSMakeRange(nameRange.location+nameRange.length, 1)];
string = [string substringFromIndex:range.location+range.length]; nameRange.location += 1;
range = [string rangeOfString:valueEndQ]; NSRange endRange = nameRange;
endRange.location = nameRange.location+nameRange.length;
endRange.length = [returnedString length]-endRange.location;
endRange = [returnedString rangeOfString:end options:NSCaseInsensitiveSearch range:endRange];
if (endRange.location==NSNotFound)
continue;
NSString *name = [returnedString substringWithRange:NSMakeRange(nameRange.location+nameRange.length, endRange.location-(nameRange.location+nameRange.length))];
range.location = inputRange.location+inputRange.length;
range.length = [returnedString length]-range.location;
NSRange valueRange = [returnedString rangeOfString:@"value=" options:NSCaseInsensitiveSearch range:endInputRange];
if (valueRange.location==NSNotFound)
continue;
end = [returnedString substringWithRange:NSMakeRange(valueRange.location+valueRange.length, 1)];
valueRange.location += 1;
endRange = valueRange;
endRange.location = valueRange.location+valueRange.length;
endRange.length = [returnedString length]-endRange.location;
endRange = [returnedString rangeOfString:end options:NSCaseInsensitiveSearch range:endRange];
if (endRange.location==NSNotFound)
continue;
NSString *value = [returnedString substringWithRange:NSMakeRange(valueRange.location+valueRange.length, endRange.location-(valueRange.location+valueRange.length))];
[parameters setObject:value forKey:name];
} else { } else {
string = [string substringFromIndex:range.location+range.length]; break;
range = [string rangeOfString:valueEnd];
}
if (range.location==NSNotFound) NSLog(@"failed 532");
[parameters setObject:[[[string substringWithRange:NSMakeRange(0, range.location)] copy] autorelease] forKey:[names objectAtIndex:i]];
} }
[pool drain]; [pool drain];
} }
if ([parameters objectForKey:@"PersistentCookie"]!=nil)
[parameters setObject:@"yes" forKey:@"PersistentCookie"];
if ([[parameters objectForKey:@"Email"] isEqual:@""])
[parameters setObject:(webLoginTries==2 ? [[user settingForKey:MGMUserName] stringByAppendingString:@"@gmail.com"] : [user settingForKey:MGMUserName]) forKey:@"Email"];
#if MGMInstanceDebug #if MGMInstanceDebug
NSMutableDictionary *parametersDebug = [[parameters mutableCopy] autorelease]; NSLog(@"%@", parameters);
[parametersDebug removeObjectForKey:@"Passwd"];
NSLog(@"%@", parametersDebug);
#endif #endif
[parameters setObject:[user password] forKey:@"Passwd"];
NSArray *parametersKeys = [parameters allKeys]; NSArray *parametersKeys = [parameters allKeys];
NSMutableString *bodyString = [NSMutableString string]; NSMutableString *bodyString = [NSMutableString string];
for (int i=0; i<[parametersKeys count]; i++) { for (int i=0; i<[parametersKeys count]; i++) {

View File

@ -680,7 +680,11 @@
1DEB91B208733DA50010E9CD /* Debug */ = { 1DEB91B208733DA50010E9CD /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; ARCHS = (
ppc,
i386,
x86_64,
);
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
@ -699,7 +703,11 @@
1DEB91B308733DA50010E9CD /* Release */ = { 1DEB91B308733DA50010E9CD /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; ARCHS = (
ppc,
i386,
x86_64,
);
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
@ -716,7 +724,11 @@
2A1172E612456A6700D119B5 /* Debug SIP */ = { 2A1172E612456A6700D119B5 /* Debug SIP */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; ARCHS = (
ppc,
i386,
x86_64,
);
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
@ -794,7 +806,11 @@
2A1172E812456A6C00D119B5 /* Release SIP */ = { 2A1172E812456A6C00D119B5 /* Release SIP */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; ARCHS = (
ppc,
i386,
x86_64,
);
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;

Binary file not shown.

View File

@ -1027,7 +1027,11 @@
2A117648124570C300D119B5 /* Debug SIP */ = { 2A117648124570C300D119B5 /* Debug SIP */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; ARCHS = (
ppc,
i386,
x86_64,
);
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
@ -1086,7 +1090,11 @@
2A11764A124570C800D119B5 /* Release SIP */ = { 2A11764A124570C800D119B5 /* Release SIP */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; ARCHS = (
ppc,
i386,
x86_64,
);
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
@ -1207,7 +1215,11 @@
C01FCF4F08A954540054247B /* Debug */ = { C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; ARCHS = (
ppc,
i386,
x86_64,
);
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
@ -1225,7 +1237,11 @@
C01FCF5008A954540054247B /* Release */ = { C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; ARCHS = (
ppc,
i386,
x86_64,
);
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;