Saya bertanya-tanya apakah mungkin untuk menentukan iPhone seperti apa (misalnya) layanan saat ini? Saya tahu itu mungkin untuk mendapatkan model
NSString *deviceType = [[UIDevice currentDevice] model];
yang hanya akan kembali apakah saya memiliki "iPhone" atau "iPod", TETAPI saya bertanya-tanya apakah mungkin untuk mendeteksi / tahu apakah saya memiliki iPhone 3GS vs. dan iPhone 4 vs. iPhone 4S (sebenarnya, yang benar-benar ingin saya lakukan adalah menentukan apakah saya memiliki 3G atau tidak, karena saya melakukan hal-hal yang cukup intensif grafis) .
Jadi ya, beri tahu saya, terima kasih!
ios
objective-c
iphone
ipad
Nathan Fraenkel
sumber
sumber
Jawaban:
BAIK coba perpustakaan ini: http://github.com/erica/uidevice-extension/ (oleh Erica Sadun). (Perpustakaan berusia 7-8 tahun, dan karenanya sudah usang)
(Kode sampel):
ATAU Anda dapat menggunakan metode ini:
Anda bisa mendapatkan nomor model perangkat menggunakan uname dari sys / utsname.h. Sebagai contoh:
Objektif-C
Cepat 3
Hasilnya harus:
sumber
Memperluas jawaban OhhMee di atas, saya menambahkan beberapa failafe untuk mendukung perangkat di masa depan yang belum termasuk dalam daftar:
Saya juga menghilangkan informasi terperinci (misalnya "model A1507, A1516, A1526 (China), A1529 | Global") dan meletakkannya di komentar, jika Anda ingin menggunakan ini sebagai string yang menghadap pengguna dan tidak membuat mereka panik.
Sunting: Jawaban ini memberikan implementasi yang serupa menggunakan Swift 2.
Sunting 2: Saya baru saja menambahkan model iPad Pro (kedua ukuran). Untuk referensi di masa mendatang, nomor model / dll. dapat ditemukan di The iPhone Wiki .
Sunting 3: Tambahkan dukungan untuk iPhone XS, iPhone XS Max dan iPhone XR.
Sunting 4: Tambahkan dukungan untuk iPhone 11, iPhone 11 Pro dan iPhone 11 Pro Max.
sumber
deviceName
, ketika saya bermaksud mencaricode
. Seseorang menyarankan suntingan tetapi saya tidak bisa menyetujuinya sebelum beberapa orang lain menolaknya, jadi saya mengoreksi jawabannya sendiri. Terima kasih kepada siapa pun yang menyarankannya.Saya telah membuat file plist untuk membantu Anda mendapatkan nama lengkap untuk setiap perangkat (kode sumber tepat di akhir jawaban saya)
Berdasarkan jawaban OhhMee , Anda dapat menggunakannya seperti ini:
Cepat 4.0
Jangan lupa menambahkan
#import <sys/utsname.h>
Bridging Header Anda.Tujuan C
File plist:
sumber
[[UIDevice currentDevice] model]
hanya mengembalikaniPhone
atauiPod
, Anda tidak mendapatkan nomor model yang akan memungkinkan Anda membedakan antara generasi perangkat yang berbeda.Kode metode ini:
Dan panggil metode ini
[self getModel]
setiap kali Anda membutuhkan model dan Anda akan mendapatkan yaitu: "iPhone5,1" untuk iPhone 5 yang sangat tipis dan cepat.Salah satu praktik yang baik adalah membuat kelas yang disebut
Utils.h/Utils.m
dan memasukkan metode seperti digetModel
sana sehingga Anda bisa mendapatkan info ini dari mana saja di Aplikasi Anda hanya dengan mengimpor kelas dan memanggil[Utils getModel];
sumber
Saya telah mengoptimalkan implementasi NicolasMiari, dan menambahkan
Simulator
, di sini:`` `
sumber
Di bawah ini adalah kode untuk itu ( kode mungkin tidak mengandung semua string perangkat, saya dengan orang lain mempertahankan kode yang sama di GitHub jadi tolong ambil kode terbaru dari sana )
Objective-C : GitHub / DeviceUtil
Swift : GitHub / DeviceGuru
sumber
Kategori untuk menjauh dari deskripsi NSString
Secara umum, diinginkan untuk menghindari perbandingan string arbitrer di seluruh kode Anda. Lebih baik memperbarui string di satu tempat dan menyembunyikan string sihir dari aplikasi Anda. Saya memberikan kategori pada
UIDevice
untuk tujuan itu.Untuk kebutuhan spesifik saya, saya perlu tahu perangkat mana yang saya gunakan tanpa perlu tahu secara spesifik tentang kemampuan jaringan yang dapat dengan mudah diambil dengan cara lain. Jadi, Anda akan menemukan butiran yang lebih kasar
enum
daripada daftar perangkat yang terus berkembang.Memperbarui adalah masalah menambahkan perangkat ke enum dan tabel pencarian.
UIDevice + NTNUExtensions.h
UIDevice + NTNUExtensions.m
sumber
Nama perangkat dan Nama Mesin, berdasarkan Perangkat Keras Nyata Perangkat iOS
Solusi saya untuk masalah ini pada dasarnya terlihat terkait dengan jawaban @NicolasMiari dalam utas ini. Kelas utilitas terpisah memiliki seperangkat Nama Perangkat dan Mesin yang telah ditentukan dan kemudian tergantung pada nama mesin asli, ambil Nama Perangkat.
Catatan: Jawaban ini dan terkait dengan proyek GitHub telah diperbarui untuk mengidentifikasi iPhone terbaru saat ini (iPhone 8, 8+, X) pada Oktober 2017. Dan ini juga berfungsi di iOS11 . Kunjungi repo GitHub dan lihat, dan beri saya umpan balik jika ada sesuatu yang salah.
Saya telah menambahkan implementasi ini dan beberapa metode utilitas lain yang mudah digunakan di kelas dan menaruhnya di Repositori GitHub ini . Dan juga Anda dapat menemukan daftar informasi perangkat terbaru dalam halaman Wiki ini .
Silakan kunjungi dan gunakan itu.
Memperbarui:
Anda mungkin perlu mengimpor kerangka sistem,
sumber
Kompatibel dengan Swift 3
sumber
Solusi ini berfungsi untuk perangkat fisik dan simulator iOS dengan cara agar simulator mengembalikan model yang sama dengan perangkat fisik akan kembali untuk model misalnya "iPhone10,6" untuk iPhone X (GSM) daripada "x86_64".
Definisi - Swift 4:
Pemakaian:
sumber
sumber
Di bawah Fungsi Sempurna Bekerja pada iOS7 atau versi yang lebih baru di Swift
sumber
Tambahkan file baru dengan kode berikut dan cukup panggil
UIDevice.modelName
Ini terdiri dari semua model yang dirilis hingga saat ini termasuk seri iPhone 11 dan di Swift 5.0sumber
Untuk menghemat waktu orang lain. Karena diterima, harus memilih jawaban mengusulkan perpustakaan yang menggunakan API pribadi dan aplikasi saya ditolak karena ekstensi uidevice baru kemarin! Saya beralih ke perpustakaan GBDeviceInfo, diinstal sebagai pod juga, untuk saat ini terlihat bagus, dipelihara, dan diperbarui ke perangkat terbaru.
sumber
Cepat 4 atau lebih baru
sumber
ProcessInfo.processInfo.environment["SIMULATOR_DEVICE_NAME"]
sudah cukup.Mengapa tidak membuat kategori. Jangan gunakan masalah kebocoran keamanan metode malloc. Gunakan fungsi yang aman.
Lihat implentasinya
sumber
Jika Anda memiliki daftar perangkat (mis. Dikelola oleh @Tib di atas di https://stackoverflow.com/a/17655825/849616 ) untuk menanganinya jika Swift 3 Anda akan menggunakan:
Nanti Anda bisa menyebutnya menggunakan
UIDevice.modelName()
.Kredit tambahan pergi ke @Tib (untuk plist), @Aniruddh Joshi (untuk
deviceSystemCode()
fungsi).sumber
Bagaimana dengan menggunakan ideviceinfo untuk mendapatkan nilai-nilai ini? Harus dapat menginstalnya menggunakan
brew install ideviceinfo
Lalu lari:
sumber