Eu queria saber se é possível determinar que tipo de iPhone (por exemplo) é o dispositivo atual? Eu sei que é possível obter o modelo através do
NSString *deviceType = [[UIDevice currentDevice] model];
qual apenas retornarei se eu tenho um "iPhone" ou um "iPod", mas eu queria saber se é possível detectar / saber se eu tenho um iPhone 3GS vs. e iPhone 4 vs. um iPhone 4S (na verdade, tudo o que realmente quero é determinar se tenho 3G ou não, porque estou fazendo coisas bastante intensivas em gráficos) .
Então, sim, deixe-me saber, obrigado!
ios
objective-c
iphone
ipad
Nathan Fraenkel
fonte
fonte
Respostas:
Experimente esta biblioteca: http://github.com/erica/uidevice-extension/ (de Erica Sadun). (A biblioteca tem 7-8 anos e, portanto, é obsoleta)
(Código de amostra):
OU Você pode usar este método:
Você pode obter o número do modelo do dispositivo usando uname em sys / utsname.h. Por exemplo:
Objetivo-C
Swift 3
O resultado deve ser:
fonte
Expandindo a resposta de OhhMee acima, adicionei alguns antivírus para oferecer suporte a dispositivos futuros ainda não incluídos na lista:
Também omiti as informações detalhadas (por exemplo, "modelo A1507, A1516, A1526 (China), A1529 | Global") e as coloquei nos comentários, caso você queira usá-las como strings voltadas para o usuário e não as assuste.
Editar: Esta resposta fornece uma implementação semelhante usando o Swift 2.
Edição 2: Acabei de adicionar os modelos do iPad Pro (ambos os tamanhos). Para referência futura, os números do modelo / etc. pode ser encontrado no iPhone Wiki .
Edição 3: adicione suporte para iPhone XS, iPhone XS Max e iPhone XR.
Edição 4: adicione suporte para iPhone 11, iPhone 11 Pro e iPhone 11 Pro Max.
fonte
deviceName
, quando pretendia pesquisarcode
. Alguém sugeriu uma edição, mas eu não pude aprová-la antes que outras pessoas a rejeitassem, então eu mesmo corrigi a resposta. Obrigado a quem sugeriu.Criei o arquivo plist para ajudá-lo a obter o nome completo de cada dispositivo (código-fonte no final da minha resposta)
Com base na resposta de OhhMee , você pode usá-lo assim:
Swift 4.0
Não se esqueça de adicionar
#import <sys/utsname.h>
seu cabeçalho de ponte.Objetivo C
O arquivo plist:
fonte
[[UIDevice currentDevice] model]
apenas retornaiPhone
ouiPod
, você não obtém os números do modelo que permitem diferenciar as diferentes gerações de dispositivos.Codifique este método:
E chame o método
[self getModel]
sempre que precisar do modelo e você obterá, por exemplo: "iPhone5,1" para o iPhone 5 ridiculamente fino e veloz.Uma boa prática é criar uma classe chamada
Utils.h/Utils.m
e colocar métodos comogetModel
esse para que você possa obter essas informações de qualquer lugar do seu aplicativo simplesmente importando a classe e chamando[Utils getModel];
fonte
Otimizei a implementação de NicolasMiari e adicionei
Simulator
, aqui:`` ``
fonte
Abaixo está o código para isso (o código pode não conter todas as strings do dispositivo, estou com outras pessoas mantendo o mesmo código no GitHub, portanto, pegue o código mais recente a partir daí )
Objetivo-C : GitHub / DeviceUtil
Swift : GitHub / DeviceGuru
fonte
Uma categoria para fugir da descrição do NSString
Em geral, é desejável evitar comparações arbitrárias de strings em todo o código. É melhor atualizar as strings em um só lugar e ocultar a string mágica do seu aplicativo. Eu forneço uma categoria
UIDevice
para esse fim.Para minhas necessidades específicas, preciso saber qual dispositivo estou usando, sem a necessidade de conhecer detalhes sobre o recurso de rede que podem ser facilmente recuperados de outras maneiras. Portanto, você encontrará uma granulação mais grossa do
enum
que a lista cada vez maior de dispositivos.A atualização é uma questão de adicionar o dispositivo à enumeração e à tabela de pesquisa.
UIDevice + NTNUExtensions.h
UIDevice + NTNUExtensions.m
fonte
Nome do dispositivo e nomes da máquina, com base no hardware real do dispositivo iOS
Minha solução para esse problema é basicamente relacionada à resposta @NicolasMiari neste tópico. A classe de utilitário separada possui um conjunto predefinido de nomes de dispositivos e máquinas e, dependendo do nome real da máquina, recupere o nome do dispositivo.
Nota: Esta resposta e o projeto GitHub vinculado foram atualizados para identificar os iPhones mais recentes (iPhone 8, 8+, X) atuais a partir de outubro de 2017. E isso também funciona no iOS11 . Visite o repositório do GitHub e veja, e envie-me um feedback se algo estiver errado.
Adicionei essa implementação e alguns outros métodos de utilidade convenientes em uma classe e os coloquei no repositório do GitHub . E também você pode encontrar a lista atualizada de informações do dispositivo nesta página da Wiki .
Por favor, visite-o e faça uso dele.
Atualizar:
Você pode precisar importar a estrutura do sistema,
fonte
Compatível com Swift 3
fonte
Esta solução funciona tanto para dispositivos físicos quanto para o simulador iOS, de maneira que o simulador retorne o mesmo modelo que o dispositivo físico retornaria para um modelo, por exemplo, "iPhone10,6" para iPhone X (GSM) em vez de "x86_64".
Definição - Swift 4:
Uso:
fonte
fonte
Função abaixo Funcionamento perfeito na versão iOS7 ou posterior no Swift
fonte
Adicione um novo arquivo com o seguinte código e simplesmente chame
UIDevice.modelName
Isso consiste em todos os modelos lançados até a data, incluindo o iPhone 11 series e no Swift 5.0fonte
Para economizar tempo de outras pessoas. Como aceito, a resposta votada propõe a biblioteca que usa API privada e meu aplicativo foi rejeitado por causa da extensão uidevice-ontem. Estou mudando para a biblioteca GBDeviceInfo, instalada também como pod, por enquanto parece boa, mantida e atualizada para os dispositivos mais recentes.
fonte
Swift 4 ou posterior
fonte
ProcessInfo.processInfo.environment["SIMULATOR_DEVICE_NAME"]
basta.Por que não criar uma categoria. Não use o problema de vazamento de segurança do método malloc. Use funções seguras.
Veja as implicações
fonte
Se você possui vários dispositivos (por exemplo, mantidos por @Tib acima em https://stackoverflow.com/a/17655825/849616 ) para lidar com isso, se o Swift 3 você usar:
Mais tarde, você pode chamá-lo usando
UIDevice.modelName()
.Créditos adicionais vão para @Tib (para plist), @Aniruddh Joshi (para
deviceSystemCode()
função).fonte
Que tal usar ideviceinfo para obter esses valores? Deve poder instalá-lo usando
brew install ideviceinfo
Então corra:
fonte