2012-09-01 2 views
7

내 앱이 실행중인 기기를 검색하는 방법을 찾고 있습니다. 나는 소프트웨어 버전에 관심이 없다. 나는 많은 질문을 검색하지만 그들 중 누구도 (놀랍게도) 다음과 같은 이유로 내 요구를 충족하지 :내 사용자가 사용하는 iOS 장치는 어떻게 검색합니까?

해결 방법 1 :

NSString *deviceType = [UIDevice currentDevice].model; 

그냥 "아이 패드"저를 제공하기 때문에이 작동하지 않습니다. 나는 아이 패드, 아이 패드 2, 뉴 아이 패드, 아이폰 3GS, 아이폰 4 등인지 알고 싶어

해결 방법 2 :이 내가 있기 때문에 적용되지 않습니다 개별 기능

검사, 장치 유형을 테스트하지 않음 이 데이터가 사용자 통계를 수집하고 장치 특정 작업을 수행하지 않도록합니다.

해결 방법 3 : UIDeviceHardware 사용은 here

이 코드는 꽤 오래된 모양과 장치에 개인 데이터에 액세스 할 것으로 보인다 발견했다. 이 앱을 사용하는 앱이 승인을 받을지 여부는 논란의 여지가 있습니다. 더 중요한 것은, 어떻게 작동하는지 전혀 모르겠다. 대안이 또한 발견된다. here

내가 마지막으로 언급 한 두 가지 중 안전한 것이 있습니까? 그들은 미래를 준수합니까? Apple 승인 규칙을 준수합니까?

아니면이 문제를 해결할 수있는 다른 방법이 있습니까?

미리 감사드립니다.

답변

6

Apple은 샘플 코드에서 그러한 API를 사용합니다. 라인 83로 시작하는 파일 LargeImageDownsizingViewController.m에서 LargeImageDownsizing 예제 프로젝트를 인용 :

을 적절한 이미지 크기와 타일 크기, 을 수행 할 수 있습니다 지지만 개발자에게 연습으로 남아있는 선택. 장치 유형/버전 문자열 (예 :"iPhone2,1"는 sysctlbyname 기능의 사용을 통해 런타임 에서 확인할 수 있습니다 : 내 경우에는

size_t size; 
sysctlbyname("hw.machine", NULL, &size, NULL, 0); 
char *machine = malloc(size); 
sysctlbyname("hw.machine", machine, &size, NULL, 0); 
NSString* _platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding]; 
free(machine); 

_platform는 아이팟 4 세대 터치에 대한 iPod4,1 될 것이다.

이 코드는 게시 한 Github 예제의 루트에있는 코드입니다.

+0

감사합니다. 이제는 안전하다는 것을 알았으므로 프로젝트에 포함시키고 문제를 해결했습니다. –

1

기술적으로 [UIDeviceHardware platform]은 정상적으로 작동하므로 서버에 그대로 보내야합니다. 플랫폼 ID가 향후 OS에서 변경 될 경우 문제를 방지하기 위해 iOS 버전을 플랫폼 ID와 함께 보내야합니다.

여기에 함수 sysctlbyname이 사용 되었기 때문에 Apple이 규칙 번호 2.5를 사용할 수 있다고 생각하지 않습니다. 그러나, 여전히 규칙 번호 17.1 :

사용자의 사전 허가를 취득하고 대한 정보에 대한 액세스를 사용자에게 제공하지 않고 사용자에 대한 데이터를 전송할 수 없습니다 17.1 앱 어떻게 데이터가 사용되는 경우

장치 플랫폼이 사용자에 관한 것인지 아닌지는 논쟁의 여지가 있습니다. 내 충고는 당신이 17.1을 위반하지 않는다고 가정 할 때 앱을 제출해야한다는 것입니다. 리뷰어가 당신이 현장에서 무엇을하고 있는지 알지 못할 가능성이 큽니다.

+0

감사합니다. 수집하는 데이터를 집계하고 사용자에게 바인딩하지 않기 때문에 17.1 규칙에도 위배되는 것으로 생각하지 않습니다. 나는 또한 그들이주의하지 않을 것이라는 점을 확신한다. –

0

당신이 언급 한 UIDeviceHardware는 충분하지만 약간 구식입니다. 시범 사용 가능 this 사과 스타일을 더 많이 만들어 주므로 더 좋아할 것입니다.

관련 문제