Существует модельное свойство устройства, но он не различает iPhone и iPhone 3G. Есть ли лучший способ?
Как вы обнаруживаете iPhone против iPhone 3G с помощью Obj C
Ответ 1
Особо интересными частями проекта Stephan являются следующие:
Строковые значения, которые вы, вероятно, увидите:
/*
Platforms
iPhone1,1 -> iPhone 1G
iPhone1,2 -> iPhone 3G
iPod1,1 -> iPod touch 1G
iPod2,1 -> iPod touch 2G
*/
Как получить одно из этих значений:
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: NSUTF8StringEncoding];
free(machine);
Затем вы можете проверить начало платформы для @"iPhone"
или @"iPod"
и указать, есть ли у вас устройство с GPS или нет. Я бы не рекомендовал сопоставлять всю строку за то, что вы хотите, потому что в следующий раз, когда устройство выйдет (например, этим летом, скорее всего), вы не сможете сопоставить его без изменения кода.
Кроме того, если вы их не видели, у Эрики Садун (автор проекта) есть отличные статьи на iPhone dev на ArsTechnica.com и по крайней мере одну книгу об этом.
Ответ 2
Смотрите здесь:
Ответ 3
Кажется, вы, возможно, пытаетесь решить неправильную проблему здесь. Вы действительно не хотите знать, работаете ли вы на iPhone 3G или на оригинальном iPhone. Если вы пишете код, который пытается определить, имеет ли устройство оборудование GPS на основе его модели, вам придется изменить его, когда выйдет новая модель (например, iPod Touch с GPS или новый продукт нетбука с GPS, или iPhone 3G Nano, у которого нет GPS).
Из вашего описания не ясно, почему вы думаете, что вам нужно заботиться о том, имеет ли устройство GPS-оборудование или нет. Вы можете получить информацию о местоположении из CoreLocation и включить измерение точности. Просто используйте это, и если точность недостаточно высока, сообщите об этом пользователю.
Ответ 4
на самом деле они могут использовать код только для того, чтобы обнаружить модель, которая этого не делает, и предположить, что у всех других моделей есть она
таким образом им не нужно менять код в будущем, если они не появятся с iPhone, у которого нет GPS снова...
также --- в ответ на Oregon Ghost --- есть много особенностей (bluetooth - это другое, что я могу думать о моей голове), что SDK не предоставляет никакого способа обнаружить....