Ben Copsey

Fix using one too many boundary strings in post data. Some servers (like PHP) co…

…uld handle this, which is why I didn't catch it before. Others (like Rails) would fail. Now compatible with Rails, anyway.
Split username and password setter into two
Added domain for NTLM authentication, will be applied if server asks for it (untested!)
Fix wrong url in tests
  1 +build
@@ -60,6 +60,9 @@ @@ -60,6 +60,9 @@
60 //Username and password used for authentication 60 //Username and password used for authentication
61 NSString *username; 61 NSString *username;
62 NSString *password; 62 NSString *password;
  63 +
  64 + //Domain used for NTLM authentication
  65 + NSString *domain;
63 66
64 //Delegate for displaying upload progress (usually an NSProgressIndicator, but you can supply a different object and handle this yourself) 67 //Delegate for displaying upload progress (usually an NSProgressIndicator, but you can supply a different object and handle this yourself)
65 NSObject <ASIProgressDelegate> *uploadProgressDelegate; 68 NSObject <ASIProgressDelegate> *uploadProgressDelegate;
@@ -129,9 +132,6 @@ @@ -129,9 +132,6 @@
129 //Add the contents of a local file as a POST variable to the request 132 //Add the contents of a local file as a POST variable to the request
130 - (void)setFile:(NSString *)filePath forKey:(NSString *)key; 133 - (void)setFile:(NSString *)filePath forKey:(NSString *)key;
131 134
132 -// When set, username and password will be presented for HTTP authentication  
133 -- (void)setUsername:(NSString *)newUsername andPassword:(NSString *)newPassword;  
134 -  
135 #pragma mark get information about this request 135 #pragma mark get information about this request
136 136
137 - (BOOL)isFinished; //Same thing, for NSOperationQueues to read 137 - (BOOL)isFinished; //Same thing, for NSOperationQueues to read
@@ -215,6 +215,9 @@ @@ -215,6 +215,9 @@
215 // Remove credentials from the keychain 215 // Remove credentials from the keychain
216 + (void)removeCredentialsForHost:(NSString *)host port:(int)port protocol:(NSString *)protocol realm:(NSString *)realm; 216 + (void)removeCredentialsForHost:(NSString *)host port:(int)port protocol:(NSString *)protocol realm:(NSString *)realm;
217 217
  218 +@property (retain) NSString *username;
  219 +@property (retain) NSString *password;
  220 +@property (retain) NSString *domain;
218 221
219 @property (retain,readonly) NSURL *url; 222 @property (retain,readonly) NSURL *url;
220 @property (assign) id delegate; 223 @property (assign) id delegate;
@@ -110,15 +110,6 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -110,15 +110,6 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
110 [fileData setValue:filePath forKey:key]; 110 [fileData setValue:filePath forKey:key];
111 } 111 }
112 112
113 -- (void)setUsername:(NSString *)newUsername andPassword:(NSString *)newPassword  
114 -{  
115 - [username release];  
116 - username = [newUsername retain];  
117 - [password release];  
118 - password = [newPassword retain];  
119 -}  
120 -  
121 -  
122 113
123 #pragma mark get information about this request 114 #pragma mark get information about this request
124 115
@@ -190,25 +181,35 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -190,25 +181,35 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
190 NSData *endItemBoundary = [[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]; 181 NSData *endItemBoundary = [[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding];
191 NSEnumerator *e = [postData keyEnumerator]; 182 NSEnumerator *e = [postData keyEnumerator];
192 NSString *key; 183 NSString *key;
  184 + int i=0;
193 while (key = [e nextObject]) { 185 while (key = [e nextObject]) {
194 [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key] dataUsingEncoding:NSUTF8StringEncoding]]; 186 [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key] dataUsingEncoding:NSUTF8StringEncoding]];
195 [postBody appendData:[[postData objectForKey:key] dataUsingEncoding:NSUTF8StringEncoding]]; 187 [postBody appendData:[[postData objectForKey:key] dataUsingEncoding:NSUTF8StringEncoding]];
196 - [postBody appendData:endItemBoundary]; 188 + i++;
  189 + if (i != [postData count] || [fileData count] > 0) { //Only add the boundary if this is not the last item in the post body
  190 + [postBody appendData:endItemBoundary];
  191 + }
197 } 192 }
198 193
199 //Adds files to upload 194 //Adds files to upload
200 - NSData *contentTypeHeader = [[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]; 195 + NSData *contentBlueprintHeader = [[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding];
201 e = [fileData keyEnumerator]; 196 e = [fileData keyEnumerator];
  197 + i=0;
202 while (key = [e nextObject]) { 198 while (key = [e nextObject]) {
203 NSString *filePath = [fileData objectForKey:key]; 199 NSString *filePath = [fileData objectForKey:key];
204 [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n",key,[filePath lastPathComponent]] dataUsingEncoding:NSUTF8StringEncoding]]; 200 [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n",key,[filePath lastPathComponent]] dataUsingEncoding:NSUTF8StringEncoding]];
205 - [postBody appendData:contentTypeHeader]; 201 + [postBody appendData:contentBlueprintHeader];
206 [postBody appendData:[NSData dataWithContentsOfMappedFile:filePath]]; 202 [postBody appendData:[NSData dataWithContentsOfMappedFile:filePath]];
207 - [postBody appendData:endItemBoundary]; 203 + i++;
  204 + if (i != [fileData count]) { //Only add the boundary if this is not the last item in the post body
  205 + [postBody appendData:endItemBoundary];
  206 + }
208 } 207 }
209 208
210 [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 209 [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
211 210
  211 + NSString *foo = [[[NSString alloc] initWithBytes:[postBody bytes] length:[postBody length] encoding:NSUTF8StringEncoding] autorelease];
  212 +
212 // Set the body. 213 // Set the body.
213 CFHTTPMessageSetBody(request, (CFDataRef)postBody); 214 CFHTTPMessageSetBody(request, (CFDataRef)postBody);
214 215
@@ -464,6 +465,11 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -464,6 +465,11 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
464 - (NSMutableDictionary *)findCredentials 465 - (NSMutableDictionary *)findCredentials
465 { 466 {
466 NSMutableDictionary *newCredentials = [[[NSMutableDictionary alloc] init] autorelease]; 467 NSMutableDictionary *newCredentials = [[[NSMutableDictionary alloc] init] autorelease];
  468 +
  469 + // Is an account domain needed? (used currently for NTLM only)
  470 + if (CFHTTPAuthenticationRequiresAccountDomain(requestAuthentication)) {
  471 + [newCredentials setObject:domain forKey:(NSString *)kCFHTTPAuthenticationAccountDomain];
  472 + }
467 473
468 // Get the authentication realm 474 // Get the authentication realm
469 [authenticationRealm release]; 475 [authenticationRealm release];
@@ -763,8 +769,9 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy @@ -763,8 +769,9 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
763 } 769 }
764 770
765 771
766 - 772 +@synthesize username;
767 - 773 +@synthesize password;
  774 +@synthesize domain;
768 @synthesize url; 775 @synthesize url;
769 @synthesize delegate; 776 @synthesize delegate;
770 @synthesize uploadProgressDelegate; 777 @synthesize uploadProgressDelegate;
@@ -62,7 +62,7 @@ More tests needed for: @@ -62,7 +62,7 @@ More tests needed for:
62 NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease]; 62 NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];
63 63
64 NSURL *url; 64 NSURL *url;
65 - url = [[[NSURL alloc] initWithString:@"http:/allseeing-i.com/asi-http-request/tests/first"] autorelease]; 65 + url = [[[NSURL alloc] initWithString:@"http://allseeing-i.com/asi-http-request/tests/first"] autorelease];
66 ASIHTTPRequest *request1 = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease]; 66 ASIHTTPRequest *request1 = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease];
67 [queue addOperation:request1]; 67 [queue addOperation:request1];
68 68
@@ -26,3 +26,7 @@ ASIHTTPRequest is partly based on code from Apple's ImageClient code samples, so @@ -26,3 +26,7 @@ ASIHTTPRequest is partly based on code from Apple's ImageClient code samples, so
26 26
27 ASIHTTPRequest is my first open source Objective-C code. I hope to expand the class and example application further (unit tests, maybe even iphone examples...) in the coming months. If you find it helpful, please do get in touch! 27 ASIHTTPRequest is my first open source Objective-C code. I hope to expand the class and example application further (unit tests, maybe even iphone examples...) in the coming months. If you find it helpful, please do get in touch!
28 28
  29 +To do:
  30 +NTLM Authentication?
  31 +Digest Authentication?
  32 +PUT / DELETE /GET?
@@ -304,7 +304,7 @@ @@ -304,7 +304,7 @@
304 <real>312</real> 304 <real>312</real>
305 </array> 305 </array>
306 <key>RubberWindowFrame</key> 306 <key>RubberWindowFrame</key>
307 - <string>408 248 1342 819 0 0 1920 1178 </string> 307 + <string>409 250 1342 819 0 0 1920 1178 </string>
308 </dict> 308 </dict>
309 <key>Module</key> 309 <key>Module</key>
310 <string>PBXSmartGroupTreeModule</string> 310 <string>PBXSmartGroupTreeModule</string>
@@ -334,7 +334,7 @@ @@ -334,7 +334,7 @@
334 <key>_historyCapacity</key> 334 <key>_historyCapacity</key>
335 <integer>0</integer> 335 <integer>0</integer>
336 <key>bookmark</key> 336 <key>bookmark</key>
337 - <string>B5F3B7490E43698300E001FD</string> 337 + <string>B567EF2F0E4EDC06001E238F</string>
338 <key>history</key> 338 <key>history</key>
339 <array> 339 <array>
340 <string>B5731B8B0E4310180008024F</string> 340 <string>B5731B8B0E4310180008024F</string>
@@ -345,12 +345,12 @@ @@ -345,12 +345,12 @@
345 <string>B5731E180E43424A0008024F</string> 345 <string>B5731E180E43424A0008024F</string>
346 <string>B5731E330E4344F90008024F</string> 346 <string>B5731E330E4344F90008024F</string>
347 <string>B5731E550E435ADB0008024F</string> 347 <string>B5731E550E435ADB0008024F</string>
348 - <string>B5F3B71B0E4367CA00E001FD</string>  
349 - <string>B5F3B71C0E4367CA00E001FD</string>  
350 <string>B5F3B7370E43683600E001FD</string> 348 <string>B5F3B7370E43683600E001FD</string>
351 - <string>B5F3B7380E43683600E001FD</string> 349 + <string>B5F3B74C0E4378FA00E001FD</string>
352 - <string>B5F3B7440E43698300E001FD</string> 350 + <string>B567EEF10E4EDA85001E238F</string>
353 - <string>B5F3B7450E43698300E001FD</string> 351 + <string>B567EF2B0E4EDC06001E238F</string>
  352 + <string>B567EF2C0E4EDC06001E238F</string>
  353 + <string>B567EF140E4EDB3D001E238F</string>
354 </array> 354 </array>
355 <key>prevStack</key> 355 <key>prevStack</key>
356 <array> 356 <array>
@@ -367,21 +367,16 @@ @@ -367,21 +367,16 @@
367 <string>B5731BC00E4319180008024F</string> 367 <string>B5731BC00E4319180008024F</string>
368 <string>B5731BF60E431A050008024F</string> 368 <string>B5731BF60E431A050008024F</string>
369 <string>B5731D9B0E433A750008024F</string> 369 <string>B5731D9B0E433A750008024F</string>
370 - <string>B5F3B7200E4367CA00E001FD</string>  
371 - <string>B5F3B7210E4367CA00E001FD</string>  
372 - <string>B5F3B7220E4367CA00E001FD</string>  
373 - <string>B5F3B7230E4367CA00E001FD</string>  
374 - <string>B5F3B7240E4367CA00E001FD</string>  
375 - <string>B5F3B7250E4367CA00E001FD</string>  
376 - <string>B5F3B7260E4367CA00E001FD</string>  
377 - <string>B5F3B7270E4367CA00E001FD</string>  
378 - <string>B5F3B7280E4367CA00E001FD</string>  
379 - <string>B5F3B7290E4367CA00E001FD</string>  
380 <string>B5F3B7390E43683600E001FD</string> 370 <string>B5F3B7390E43683600E001FD</string>
381 - <string>B5F3B73A0E43683600E001FD</string> 371 + <string>B567EEF40E4EDA85001E238F</string>
382 - <string>B5F3B7460E43698300E001FD</string> 372 + <string>B567EEF50E4EDA85001E238F</string>
383 - <string>B5F3B7470E43698300E001FD</string> 373 + <string>B567EEF60E4EDA85001E238F</string>
384 - <string>B5F3B7480E43698300E001FD</string> 374 + <string>B567EEF70E4EDA85001E238F</string>
  375 + <string>B567EEF80E4EDA85001E238F</string>
  376 + <string>B567EEF90E4EDA85001E238F</string>
  377 + <string>B567EF160E4EDB3D001E238F</string>
  378 + <string>B567EF2D0E4EDC06001E238F</string>
  379 + <string>B567EF2E0E4EDC06001E238F</string>
385 </array> 380 </array>
386 </dict> 381 </dict>
387 <key>SplitCount</key> 382 <key>SplitCount</key>
@@ -395,7 +390,7 @@ @@ -395,7 +390,7 @@
395 <key>Frame</key> 390 <key>Frame</key>
396 <string>{{0, 0}, {1008, 679}}</string> 391 <string>{{0, 0}, {1008, 679}}</string>
397 <key>RubberWindowFrame</key> 392 <key>RubberWindowFrame</key>
398 - <string>408 248 1342 819 0 0 1920 1178 </string> 393 + <string>409 250 1342 819 0 0 1920 1178 </string>
399 </dict> 394 </dict>
400 <key>Module</key> 395 <key>Module</key>
401 <string>PBXNavigatorGroup</string> 396 <string>PBXNavigatorGroup</string>
@@ -415,7 +410,7 @@ @@ -415,7 +410,7 @@
415 <key>Frame</key> 410 <key>Frame</key>
416 <string>{{0, 684}, {1008, 94}}</string> 411 <string>{{0, 684}, {1008, 94}}</string>
417 <key>RubberWindowFrame</key> 412 <key>RubberWindowFrame</key>
418 - <string>408 248 1342 819 0 0 1920 1178 </string> 413 + <string>409 250 1342 819 0 0 1920 1178 </string>
419 </dict> 414 </dict>
420 <key>Module</key> 415 <key>Module</key>
421 <string>XCDetailModule</string> 416 <string>XCDetailModule</string>
@@ -439,9 +434,9 @@ @@ -439,9 +434,9 @@
439 </array> 434 </array>
440 <key>TableOfContents</key> 435 <key>TableOfContents</key>
441 <array> 436 <array>
442 - <string>B5F3B72C0E4367CA00E001FD</string> 437 + <string>B567EEE20E4ED8D2001E238F</string>
443 <string>1CE0B1FE06471DED0097A5F4</string> 438 <string>1CE0B1FE06471DED0097A5F4</string>
444 - <string>B5F3B72D0E4367CA00E001FD</string> 439 + <string>B567EEE30E4ED8D2001E238F</string>
445 <string>1CE0B20306471E060097A5F4</string> 440 <string>1CE0B20306471E060097A5F4</string>
446 <string>1CE0B20506471E060097A5F4</string> 441 <string>1CE0B20506471E060097A5F4</string>
447 </array> 442 </array>
@@ -575,16 +570,15 @@ @@ -575,16 +570,15 @@
575 <integer>5</integer> 570 <integer>5</integer>
576 <key>WindowOrderList</key> 571 <key>WindowOrderList</key>
577 <array> 572 <array>
578 - <string>B5F3B7100E4367C800E001FD</string> 573 + <string>B567EF0F0E4EDB31001E238F</string>
579 - <string>B5F3B72F0E4367CA00E001FD</string> 574 + <string>B567EF100E4EDB31001E238F</string>
580 - <string>B5F3B7300E4367CA00E001FD</string>  
581 <string>B5ABC8410E24CDE70072F422</string> 575 <string>B5ABC8410E24CDE70072F422</string>
582 - <string>1C78EAAD065D492600B07095</string>  
583 <string>1CD10A99069EF8BA00B06720</string> 576 <string>1CD10A99069EF8BA00B06720</string>
  577 + <string>1C78EAAD065D492600B07095</string>
584 <string>/Users/ben/asi-http-request/asi-http-request.xcodeproj</string> 578 <string>/Users/ben/asi-http-request/asi-http-request.xcodeproj</string>
585 </array> 579 </array>
586 <key>WindowString</key> 580 <key>WindowString</key>
587 - <string>408 248 1342 819 0 0 1920 1178 </string> 581 + <string>409 250 1342 819 0 0 1920 1178 </string>
588 <key>WindowToolsV3</key> 582 <key>WindowToolsV3</key>
589 <array> 583 <array>
590 <dict> 584 <dict>
@@ -600,12 +594,14 @@ @@ -600,12 +594,14 @@
600 <key>Dock</key> 594 <key>Dock</key>
601 <array> 595 <array>
602 <dict> 596 <dict>
  597 + <key>BecomeActive</key>
  598 + <true/>
603 <key>ContentConfiguration</key> 599 <key>ContentConfiguration</key>
604 <dict> 600 <dict>
605 <key>PBXProjectModuleGUID</key> 601 <key>PBXProjectModuleGUID</key>
606 <string>1CD0528F0623707200166675</string> 602 <string>1CD0528F0623707200166675</string>
607 <key>PBXProjectModuleLabel</key> 603 <key>PBXProjectModuleLabel</key>
608 - <string></string> 604 + <string>ASIHTTPRequestTests.m</string>
609 <key>StatusBarVisibility</key> 605 <key>StatusBarVisibility</key>
610 <true/> 606 <true/>
611 </dict> 607 </dict>
@@ -614,7 +610,7 @@ @@ -614,7 +610,7 @@
614 <key>Frame</key> 610 <key>Frame</key>
615 <string>{{0, 0}, {1440, 536}}</string> 611 <string>{{0, 0}, {1440, 536}}</string>
616 <key>RubberWindowFrame</key> 612 <key>RubberWindowFrame</key>
617 - <string>241 -125 1440 818 0 0 1920 1178 </string> 613 + <string>287 118 1440 818 0 0 1920 1178 </string>
618 </dict> 614 </dict>
619 <key>Module</key> 615 <key>Module</key>
620 <string>PBXNavigatorGroup</string> 616 <string>PBXNavigatorGroup</string>
@@ -638,7 +634,7 @@ @@ -638,7 +634,7 @@
638 <key>Frame</key> 634 <key>Frame</key>
639 <string>{{0, 541}, {1440, 236}}</string> 635 <string>{{0, 541}, {1440, 236}}</string>
640 <key>RubberWindowFrame</key> 636 <key>RubberWindowFrame</key>
641 - <string>241 -125 1440 818 0 0 1920 1178 </string> 637 + <string>287 118 1440 818 0 0 1920 1178 </string>
642 </dict> 638 </dict>
643 <key>Module</key> 639 <key>Module</key>
644 <string>PBXBuildResultsModule</string> 640 <string>PBXBuildResultsModule</string>
@@ -661,18 +657,18 @@ @@ -661,18 +657,18 @@
661 <key>TableOfContents</key> 657 <key>TableOfContents</key>
662 <array> 658 <array>
663 <string>B5ABC8410E24CDE70072F422</string> 659 <string>B5ABC8410E24CDE70072F422</string>
664 - <string>B5F3B7080E4367C800E001FD</string> 660 + <string>B567EEE40E4ED8D2001E238F</string>
665 <string>1CD0528F0623707200166675</string> 661 <string>1CD0528F0623707200166675</string>
666 <string>XCMainBuildResultsModuleGUID</string> 662 <string>XCMainBuildResultsModuleGUID</string>
667 </array> 663 </array>
668 <key>ToolbarConfiguration</key> 664 <key>ToolbarConfiguration</key>
669 <string>xcode.toolbar.config.buildV3</string> 665 <string>xcode.toolbar.config.buildV3</string>
670 <key>WindowString</key> 666 <key>WindowString</key>
671 - <string>241 -125 1440 818 0 0 1920 1178 </string> 667 + <string>287 118 1440 818 0 0 1920 1178 </string>
672 <key>WindowToolGUID</key> 668 <key>WindowToolGUID</key>
673 <string>B5ABC8410E24CDE70072F422</string> 669 <string>B5ABC8410E24CDE70072F422</string>
674 <key>WindowToolIsVisible</key> 670 <key>WindowToolIsVisible</key>
675 - <false/> 671 + <true/>
676 </dict> 672 </dict>
677 <dict> 673 <dict>
678 <key>FirstTimeWindowDisplayed</key> 674 <key>FirstTimeWindowDisplayed</key>
@@ -746,21 +742,19 @@ @@ -746,21 +742,19 @@
746 <key>DebugVariablesTableConfiguration</key> 742 <key>DebugVariablesTableConfiguration</key>
747 <array> 743 <array>
748 <string>Name</string> 744 <string>Name</string>
749 - <real>348</real> 745 + <real>420</real>
750 - <string>Type</string>  
751 - <real>216</real>  
752 <string>Value</string> 746 <string>Value</string>
753 - <real>184</real> 747 + <real>255</real>
754 <string>Summary</string> 748 <string>Summary</string>
755 - <real>80</real> 749 + <real>151</real>
756 </array> 750 </array>
757 <key>Frame</key> 751 <key>Frame</key>
758 <string>{{713, 0}, {851, 339}}</string> 752 <string>{{713, 0}, {851, 339}}</string>
759 <key>RubberWindowFrame</key> 753 <key>RubberWindowFrame</key>
760 - <string>238 283 1564 676 0 0 1920 1178 </string> 754 + <string>158 131 1564 676 0 0 1920 1178 </string>
761 </dict> 755 </dict>
762 <key>RubberWindowFrame</key> 756 <key>RubberWindowFrame</key>
763 - <string>238 283 1564 676 0 0 1920 1178 </string> 757 + <string>158 131 1564 676 0 0 1920 1178 </string>
764 </dict> 758 </dict>
765 <key>Module</key> 759 <key>Module</key>
766 <string>PBXDebugSessionModule</string> 760 <string>PBXDebugSessionModule</string>
@@ -783,18 +777,18 @@ @@ -783,18 +777,18 @@
783 <key>TableOfContents</key> 777 <key>TableOfContents</key>
784 <array> 778 <array>
785 <string>1CD10A99069EF8BA00B06720</string> 779 <string>1CD10A99069EF8BA00B06720</string>
786 - <string>B5F3B7090E4367C800E001FD</string> 780 + <string>B567EEE50E4ED8D2001E238F</string>
787 <string>1C162984064C10D400B95A72</string> 781 <string>1C162984064C10D400B95A72</string>
788 - <string>B5F3B70A0E4367C800E001FD</string> 782 + <string>B567EEE60E4ED8D2001E238F</string>
789 - <string>B5F3B70B0E4367C800E001FD</string> 783 + <string>B567EEE70E4ED8D2001E238F</string>
790 - <string>B5F3B70C0E4367C800E001FD</string> 784 + <string>B567EEE80E4ED8D2001E238F</string>
791 - <string>B5F3B70D0E4367C800E001FD</string> 785 + <string>B567EEE90E4ED8D2001E238F</string>
792 - <string>B5F3B70E0E4367C800E001FD</string> 786 + <string>B567EEEA0E4ED8D2001E238F</string>
793 </array> 787 </array>
794 <key>ToolbarConfiguration</key> 788 <key>ToolbarConfiguration</key>
795 <string>xcode.toolbar.config.debugV3</string> 789 <string>xcode.toolbar.config.debugV3</string>
796 <key>WindowString</key> 790 <key>WindowString</key>
797 - <string>238 283 1564 676 0 0 1920 1178 </string> 791 + <string>158 131 1564 676 0 0 1920 1178 </string>
798 <key>WindowToolGUID</key> 792 <key>WindowToolGUID</key>
799 <string>1CD10A99069EF8BA00B06720</string> 793 <string>1CD10A99069EF8BA00B06720</string>
800 <key>WindowToolIsVisible</key> 794 <key>WindowToolIsVisible</key>
@@ -922,7 +916,7 @@ @@ -922,7 +916,7 @@
922 <key>Frame</key> 916 <key>Frame</key>
923 <string>{{0, 0}, {636, 839}}</string> 917 <string>{{0, 0}, {636, 839}}</string>
924 <key>RubberWindowFrame</key> 918 <key>RubberWindowFrame</key>
925 - <string>121 12 636 880 0 0 1920 1178 </string> 919 + <string>138 298 636 880 0 0 1920 1178 </string>
926 </dict> 920 </dict>
927 <key>Module</key> 921 <key>Module</key>
928 <string>PBXDebugCLIModule</string> 922 <string>PBXDebugCLIModule</string>
@@ -945,13 +939,13 @@ @@ -945,13 +939,13 @@
945 <key>TableOfContents</key> 939 <key>TableOfContents</key>
946 <array> 940 <array>
947 <string>1C78EAAD065D492600B07095</string> 941 <string>1C78EAAD065D492600B07095</string>
948 - <string>B5F3B70F0E4367C800E001FD</string> 942 + <string>B567EEEB0E4ED8D2001E238F</string>
949 <string>1C78EAAC065D492600B07095</string> 943 <string>1C78EAAC065D492600B07095</string>
950 </array> 944 </array>
951 <key>ToolbarConfiguration</key> 945 <key>ToolbarConfiguration</key>
952 <string>xcode.toolbar.config.consoleV3</string> 946 <string>xcode.toolbar.config.consoleV3</string>
953 <key>WindowString</key> 947 <key>WindowString</key>
954 - <string>121 12 636 880 0 0 1920 1178 </string> 948 + <string>138 298 636 880 0 0 1920 1178 </string>
955 <key>WindowToolGUID</key> 949 <key>WindowToolGUID</key>
956 <string>1C78EAAD065D492600B07095</string> 950 <string>1C78EAAD065D492600B07095</string>
957 <key>WindowToolIsVisible</key> 951 <key>WindowToolIsVisible</key>
This diff is collapsed. Click to expand it.