2011-03-23 6 views
2

iPhone에서 서버로 PLIST 파일을 업로드하는 Objective C로 iPhone 앱이 만들어졌습니다. 대부분의 시간을 완벽하게 작동하지만, 때로는 파일 내가이 분명히 바이너리 PLIST 것을 발견이iPhone PLIST 파일 업로드 나오기 이진

bplist00Ú ..... 

처럼 보이는,하지만 난 그런 일이 왜 알아낼 수 없습니다.

의견이 있으십니까?

NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:fileName]; 
NSData *data = [[NSData alloc] initWithContentsOfFile:path]; 

// Location ID doesn't seem to be correct here - always 0? 
NSMutableString *urlString = [NSMutableString string]; 
[urlString appendString:[NSString stringWithFormat:@"http://www.website.com/app/iphone/submitjob/upload?jid=%i&mid=%@&lid=%i", delegate.jobInProgress.jobID, delegate.memberID, [[delegate.jobInProgress.plist objectForKey:@"locationID"] intValue]]]; 

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSString *boundary = @"---------------------------14737809831466499882746641449"; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 

[request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

NSMutableData *postbody = [NSMutableData data]; 
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n", fileName] dataUsingEncoding:NSUTF8StringEncoding]]; 
[postbody appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[postbody appendData:[NSData dataWithData:data]]; 
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[request setHTTPBody:postbody]; 

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
returnString = [returnString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
+1

이진 코드를 작성하십시오. 그것은 우리에게 뭔가를 계속 줄 것이다 – MCannon

+0

글쎄 그 이상한 부분은 PLIST는 XML로 애플 리케이션에 제공됩니다. 나는 PLIST를 업로드하는 코드를 게시 할 수 있습니다. –

답변

2

에서 PHP를보기를위한 https://github.com/farcaller/bplist-python

에서 파이썬보기를위한

당신은 번들에있는 기존 .plist을 업로드하고 있습니까? 왜냐하면 프로젝트의 모든 .plist는 바이너리 형식으로 변환되기 때문입니다. CFPropertyListWrite을 사용하여 서버에 처음 업로드하는 모든 .plist를 만들고 형식을 kCFPropertyListXMLFormat_v1_0으로 설정합니다. 그런 다음 결과 파일을 서버에 업로드하십시오. 그렇게하면 묶음에있는 형식에 의존하지 않게됩니다.

+0

AHHH 그게 그것이라고 생각합니다. 나는 번들에 PLIST를 이미 가지고 있지만, 내가 이해할 수없는 것은 XML이 일반적으로 XML 형식으로 전달되는 이유이다. –

+0

질문을 편집하고 .plist를로드하여 서버에 보낸 코드의 일부를 추가해야한다고 생각합니다. 따라서 더 많은 눈으로 코드를 살펴보면 더 나은 답변을 얻을 수 있습니다. –

+0

코드를 게시했습니다. 내 현상금은 오늘 사라질 것이고, 나는 당신이 옳은 대답을 제공했다고 믿지만 코드에 대한 통찰력은 좋을 것이다. –

1

Xcode는 종종 Info.plist 파일을 바이너리 형식으로 변환합니다. 그것은 당신이하고있는 빌드의 종류에 달려 있습니다. 나는 서명 된 빌드가 XML 대신에 바이너리 PLIST를 필요로한다는 모호한 기억을 가지고있다. 확실하지는 않다.

참고로, 당신은에 이진/XML 포맷에서 PLIST를 변환 plutil를 사용할 수 있습니다 또한 PlistBuddy을 사용할 수 있습니다

plutil -convert xml1 <binary plist file> 
plutil -convert binary1 <XML plist file> 

PLIST 파일을 조작하기 위해 XML로를 작성하는 -x 옵션을 사용하여. 여기 PlistBuddy man 페이지의 :
http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man8/PlistBuddy.8.html

+0

재미있는 점은 대부분의 plist 파일은 이미 XML로 제공되지만 일부는 Binary로 제공된다는 것입니다. 나는 그 일이 어떻게 될지 알 수 없다. –

0

이 "재산 목록 출력 인코딩"을 설정 프로젝트/목표는 대부분의 속성 목록에 대한 출력 형식을 제어하는 ​​설정 구축에있어 : ​​이진, XML, 동일로 입력합니다.

특정 파일의 유형을 수정할 수도 있습니다. 컨텍스트 메뉴에서 정보 입수 아래의 XCode 3.x. XCode 4 - 왼쪽 패널 "유틸리티"- 파일 검사기 - ID 및 유형 - 파일 유형 순수 XML 형식은 모든 상황에서 그대로 파일을 보존해야합니다.

코드에서 plists를 생성하는 경우 xml 출력에 NSPropertyListBinaryFormat_v1_0 대신 NSPropertyListXMLFormat_v1_0 형식을 사용할 수 있습니다.

+0

나는 이것을 조사 할 것이다. –

+0

게시 된 코드는 응용 프로그램 문서 디렉토리에서 서버로 plist를 업로드하기위한 것입니다. plist 파일을 그 디렉토리에 저장하는 방법은 아직 불분명합니다. –

0

plist는 3 가지 형식, 일반 텍스트, xml 또는 바이너리 형식을 가질 수 있습니다.

이진 형식은 아이폰을로드하거나 저장할 때 훨씬 빠르게 처리 할 수 ​​있다는 이점이 있습니다.

필자는 어떤 함수를 쓰느냐에 따라 사용하는 형식을 제어 할 수 없다고 생각하지만 바이너리 plists를 구문 분석 할 수있는 perl, python 또는 php에 스크립트가 있습니다. https://github.com/rodneyrehm/CFPropertyList