1. 程式人生 > >iOS7獲取裝置UDID、IMEI、ICCID、序列號、Mac地址等資訊

iOS7獲取裝置UDID、IMEI、ICCID、序列號、Mac地址等資訊

在iOS7之前, 可以方便的使用 [[UIDevice currentDevice] uniqueIdentifier] 來獲取裝置的UDID,但是在iOS7之後這個方法不再適用。

你可以用[[UIDevicecurrentDevice]valueForKey:@"uniqueIdentifier"];來獲取到一個值,但這個值在iOS7中已經變成了FFFFFF+IDFV的值,顯然,這個值並不能唯一標識裝置。

再談一談IMEI,這個值好像在5.0的sdk中就不見了,私有庫Message.framework的MFNetworkController.h中去掉了這個方法。

本以為iOS7及以上系統無法再獲取到這些值,但看看別人Cydia,不是取得好好的嗎?參考了一下Cydia的原始碼:

可以看到它使用了libMobileGestalt.dylib這個動態庫,下面說一說具體如何操作。

1、匯入libMobileGestalt.dylib庫

2、加入宣告

OBJC_EXTERNCFStringRef MGCopyAnswer(CFStringRef key) WEAK_IMPORT_ATTRIBUTE;

3、使用如下方法獲取

CFStringRef UDID = MGCopyAnswer(CFSTR("UniqueDeviceID"));
CFStringRef IMEI =MGCopyAnswer(CFSTR("InternationalMobileEquipmentIdentity"));
CFStringRefserialNumber = MGCopyAnswer(CFSTR("SerialNumber"));
CFArrayRef ICCIDArray =MGCopyAnswer(CFSTR("CarrierBundleInfoArray"));
CFDictionaryRef ICCIDDic =CFArrayGetValueAtIndex(ICCIDArray, 0);
CFStringRef ICCID  =CFDictionaryGetValue(ICCIDDic, CFSTR("IntegratedCircuitCardIdentity"));
CFStringRefwifiAddress = MGCopyAnswer(CFSTR("WifiAddress"));
CFStringRefbluetoothAddress = MGCopyAnswer(CFSTR("BluetoothAddress"));
CFStringRefCPUArchitecture = MGCopyAnswer(CFSTR("CPUArchitecture"));
CFStringRefproductType = MGCopyAnswer(CFSTR("ProductType"));
CFTypeRefairplaneMode = MGCopyAnswer(CFSTR("AirplaneMode"));
if (airplaneMode ==kCFBooleanTrue) { ... }

4、經過測試發現這些方法在iOS7以下不用越獄就能取到、在iOS7中需要越獄並建立xxx.entitlements檔案,新增如下許可權

5、在BuildSettings的Code SigningEntitlements中新增剛才建立的檔案xxx.entitlements

6、編譯執行

7、附上demo工程

8、我的環境

Xcode 6.1

iOS 8.1 SDK

OS X 10.9.5

******************************************************************

後話:第一次在csdn上寫部落格,希望能養成寫部落格的這個好習慣。

******************************************************************

相關推薦

iOS7獲取裝置UDIDIMEIICCID序列Mac地址資訊

在iOS7之前, 可以方便的使用 [[UIDevice currentDevice] uniqueIdentifier] 來獲取裝置的UDID,但是在iOS7之後這個方法不再適用。 你可以用[[UIDevicecurrentDevice]valueForKey:@"un

獲得Unix/Linux系統中的IPMAC地址資訊

實際環境和特殊需求往往會將簡單問題複雜化,比如計算機IP地址,對於一個連線中socket,可以直接獲得本端和對端的IP、埠資訊。但在一些特殊場合我們可能需要更多的資訊,比如系統中有幾塊網絡卡,他們的Mac地址是多少,每塊網絡卡分配了幾個IP(一個網絡卡對應多個IP)等等。 這些資訊往往需要通過ifconfi

Ubuntu獲取CPU序列以及MAC地址

Ubuntu獲取CPU序列號或者主機板序列號CPU ID程式碼:sudo dmidecode -t 4 | grep ID主機板序列號程式碼:sudo dmidecode -t 2 | grep SerialMAC地址程式碼:sudo lshw -c network | grep serial | head

C#/VB.NET 獲取電腦屬性(硬盤ID硬盤容量Cpu序列MAC地址系統類型)

mic class network pcm .cn bbb alt OS -h 原文:C#/VB.NET 獲取電腦屬性(硬盤ID、硬盤容量、Cpu序列號、MAC地址、系統類型)在開發過程中,經常需要獲取電腦的一些屬性,如獲取硬盤ID/CPU序列號/MAC地址作為來加密字符串

C#獲取硬碟CPU主機板網絡卡的序列

轉自:http://blog.sina.com.cn/s/blog_557d25460101hq9t.html 在很多情況下,你可能都需要得到微機的硬體資訊。比如:你想給你的軟體加鎖,不讓別人隨便訪問。 首先,你必須知道這個應用程式的功能是使用System.Mana

android UDID獲取:android 裝置SN的獲取 續 android 裝置唯一碼的獲取,CpuMac地址

http://blog.csdn.net/hpccn/article/details/7872141 這個方法使用中發現一些不完美的地方. -------------------------------------- 新的方法: 在使用命令列, adb device  a

VC獲取本機IP子網掩碼閘道器計算廣播地址資訊程式碼(通過讀登錄檔)

// code by xiujie , bbs.xiujie.cn#pragma comment(lib, "ws2_32.lib")#include <iostream>#include <cstdlib>#include <string&g

獲取裝置UDID裝置資訊

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> &

VC獲取本機IP子網掩碼閘道器計算廣播地址資訊

重在思路#pragma comment(lib, "ws2_32.lib")#include <iostream>#include <cstdlib>#include <string>#include <vector>#include <windows.

獲取裝置UDID

我們用Ad Hoc 打包應用之後,上傳到應用託管平臺,如果想讓別人安裝測試,那麼則需要將使用者的UDID新增到蘋果開發者賬戶裡面。 最近發現了一種簡單的方法,可以在手機不連線電腦的情況下獲取裝置的UDID。 用裝置掃描以上二維碼,在safir中開啟

iOS 獲取app版本序列名稱

NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; CFShow(infoDictionary); // app名稱 NSString *app_Name = [infoDict

JAVA獲取CPUID主機板序列硬碟序列MAC地址

最近在修改公司licence程式,需要獲取到更多的硬體唯一標識,以便加密使用。網上看了很多大神的部落格,思路大概整理了一下,根據系統型別分為兩種方式:一、windows通過建立vbs指令碼,然後使用Runtime.getRuntime().exec()執行指令碼,獲取序列號等

讀取光驅序列型號分位

clas align include call tap download 內容 iter model 本代碼僅僅是通過DeviceIoControl 發送指令能獲得Identity Data。 當中,獲取型號等部分內容沒有根據。僅僅是根據dump 的內容來確定大概

動態規劃(三)最長遞增子序列LIS最大連續子序列最大連續子序列乘積

最長遞增子序列LIS 問題 給定一個長度為N的陣列,找出一個最長的單調自增子序列(不一定連續,但是順序不能亂)。例如:給定一個長度為6的陣列A{5, 6, 7, 1, 2, 8},則其最長的單調遞增子序列為{5,6,7,8},長度為4. 最長遞增子序列

oracle序列

建立即將使用的表 create table supplier (s_codde number(6), sname varchar2(25), contact varchar2(15), phone varchar2(15), fax varchar2(15)); 序列號

linux命令檢視伺服器的型號序列記憶體插槽數

1,檢視伺服器型號、序列號: [[email protected] ~]#dmidecode|grep "System Information" -A9|egrep  "Manufacturer|Product|Serial"          Manufac

linux伺服器如何檢查遠端使用者登陸狀態時間ip地址資訊

問題:因為某專案組在同一個伺服器上都是用的同一個登入名和密碼,所以專案管理上無法做到具體誰對伺服器進行了某些操作,現在的需求是能具體到某個研發人員在這個伺服器上的操作。公司用的內網,IP地址是動態的,也無法從IP地址確定到某個人。所以能否在研發人員登入伺服器時,伺服器根據登入者的IP地址直接獲取到他電腦的名

在VMware虛擬機器上使用網路測試命令找出虛擬機器的MAC地址IP地址資訊

一、工具 VMware虛擬機器 Win7作業系統 二、步驟及實驗結果 首先開啟虛擬機器—->開啟裡面的Win7系統—->配置環境變數(點選檢視如何進行環境變數配置)—->以管理

udidMac地址一系列唯一標識無效後,如何用KeyChain來實現裝置唯一性

蘋果本著為使用者安全考慮的初衷導致UDID和Mac地址相繼陣亡,IMEI也不例外,為了裝置的唯一性,一代代開發者絞盡腦汁,後來KeyChain被他們瞄上了,終於可以繼續判別社別的唯一性。 原理是利用UUID,有人說,UUID是非唯一的,很容易變化,對,沒錯,但

spring boot 坑:請求頭不匹配 Post請求體多了=GET請求引數多了,逗號

由於spring boot(Spring MVC)請求校驗比較嚴格,從老版本的jetty微服務servlet 請求改造過程中發現引數處理莫名多出一些符號。經過排查作如下總結: 1、如果請求方的請求頭是text/plain等時,spring boot服務介面沒有