2009-03-27 3 views
22

Я пытаюсь определить, работает ли мой код на iPhone или iPhone3G. Моя первая попытка была использовать класс UIDevice в UIKit, но как iPhone и iPhone возвращают те же ответы:Как узнать, работает ли ваш код на iPhone или iPhone3G?

NSLog([[UIDevice currentDevice] name]); // Name of the phone as named by user 
NSLog([[UIDevice currentDevice] uniqueIdentifier]); // A GUID like string 
NSLog([[UIDevice currentDevice] systemName]); // "iPhone OS" 
NSLog([[UIDevice currentDevice] systemVersion]); // "2.2.1" 
NSLog([[UIDevice currentDevice] model]); // "iPhone" on both devices 
NSLog([[UIDevice currentDevice] localizedModel]); // "iPhone" on both devices 

Это единственные параметры, которые UIDevice позволяет запрашивать.

Я немного искал в Foundation Framework, но еще не нашел соответствующих вызовов.

Я уверен, что есть некоторые аппаратные средства, которые я мог бы запросить (например, что-то в службах определения местоположения), но это похоже на взлома. Кто-нибудь знает простой способ определить это?

ответ

21

iPhone работает под управлением ОС X. Here's как определить вашу аппаратную платформу на рабочем столе Macintosh. Here's как на iPhone. Это то же самое.

Одним словом, sysctlbyname("hw.machine", str, sz, 0, 0) напишет название платформы в str. Это, случается, «iPhone1,1» или «iPhone1,2» для iPhone и iPhone 3G соответственно.

+0

FYI, iPhone 4 появляется как iPhone3,1 для тех, кто любопытно с '09. – UltimateBrent

+0

Как насчет iPhone 3GS? – Jonny

+0

@ Jonny iPhone 3GS идентифицирует себя как «iPhone2,1», а iPhone 4 идентифицирует себя как «iPhone3,1». Вы должны найти эту информацию для себя в Google. – ephemient

6

Я не разработчик iPhone, но проверка базовой платформы вместо возможностей платформы почти всегда является неправильным выбором. Если iPhone получит необходимую функциональность, вы все равно не сработаете. Также есть вероятность, что вы примете неправильное решение на следующем iPhone 4.0 (или что бы там ни называлось).

+0

Это чисто для ведения журнала, в частности, для входа в систему, использующего наше приложение и на какой платформе они находятся. Таким образом, в этом случае на платформе не делается выбор или ветвь, а только журнал. Спасибо за совет, хотя Стив. – Aftermathew

+0

Хорошо. В этом случае проверка должна быть прекрасной. –

+1

Вы можете использовать его по соображениям производительности. Существует большая разница в мощности между iPhone 3G и iPhone 4. Вы можете упаковать намного больше эффектов там для пользователей iPhone 4. – Jonny

0

Я предполагаю, что на iPhone есть функциональность, которая не находится на iPhon3G, с которой связано ваше программное обеспечение. Мое предложение состоит в том, чтобы запросить об этом конкретном оборудовании вместо изменения поведения программного обеспечения на платформе.

Например. вместо того, чтобы проверять доступность GPS, спросив, это запрос iPhone или iPhone3G о доступности GPS и оттуда. Таким образом, ваш код будет работать на любой платформе (iphone/ipod touch/iphone 3G)

+0

Спасибо за совет hhafez. Как упоминалось в моем комментарии к Стиву Роу выше, это чисто для ведения журналов, поэтому я действительно хочу определить, что такое реальная платформа. – Aftermathew

Смежные вопросы