UDID 是由子母和數字組成的 若干個字符串的序號,用來區別每一個唯一的 iOS 設備,包括 iPhones, iPads, 以及 iPod Touches,這些編碼看起來是隨機的,實際上是跟硬件設備特點相聯系的,我們稱之為識別碼,也叫做UDID( Unique Device Identifier),比如典型的UDID 類似這樣:
37f2f993bae681636e30e74b04d6b8955ba36f29 或 00004103-001105363440002F
這樣一來,我們拿到UDID后在蘋果開發者后台添加測試設備,以便安裝測試APP,對於獲取UDID的方式,目前主要有如下幾種典型方式:
一、利用 IDE開發工具Xcode獲取,這種方式iOS開發者常用,將設備連接到Mac電腦,打開Xcode - Window - Devices and Simulators,如下圖:
探討:Xcode 是運行在操作系統Mac OS X上的集成開發工具(IDE),由Apple Inc開發,Xcode是開發 macOS 和 iOS 應用程序的專業IDE工具,99%的iOS從業者都采用它來開發APP,Xcode 與 iOS設備均是蘋果自家產品,自然內置了獲取iOS設備信息的能力,不僅能查看UDID,設備名稱等信息,更能對設備中APP的崩潰日志進行查看,可謂是集界面設計、編碼、測試、調試為一起的便捷開發工具,深受廣大開發者推崇。
二、利用第三方工具,如iTools、PP助手等來查看,這種方式普通用戶可以使用,畢竟為了查看UDID而安裝10+G大小的Xcode沒有必要,以iTools為例,連接手機到電腦,打開iTools,點擊more即可看到詳細信息,包含UDID,其他軟件類似,如下圖:
探討:iTools是創想天空第一個核心產品,是一款簡潔有着“無需越獄,即可同步”功能的蘋果設備同步管理軟件,也是繼iTunes后全球第二款支持對iOS管理的軟件。它可以讓你非常方便的完成對iOS設備的管理,包括信息查看、同步媒體文件、安裝軟件、備份SHSH等功能,那么iTools是如何獲取到iOS設備信息呢,什么原理呢,筆者猜猜是借鑒iTunes通信協議,或者說是破解USB通信協議來實現與iTunes類似的功能,或者說是直接使用了開源庫libimobiledevice - 一個跨平台的軟件協議庫和工具來與iOS設備進行本地通信。
深入探討:libimobiledevice 是一個跨平台的軟件庫,支持 iPhone®, iPod Touch®, iPad® and Apple TV® 等設備的通訊協議。不依賴任何已有的私有庫,不需要越獄。應用軟件可以通過這個開發包輕松訪問設備的文件系統、獲取設備信息,備份和恢復設備,管理 SpringBoard 圖標,管理已安裝應用,獲取通訊錄、日程、備注和書簽等信息,使用 libgpod 同步音樂和視頻。
官方網站:http://www.libimobiledevice.org
github地址:https://github.com/libimobiledevice
點擊Get Started,按照如下安裝方式即可體驗。
注意:安裝之前需要先安裝Homebrew - 這是一款Mac OS平台下的軟件包管理工具,擁有安裝、卸載、更新、查看、搜索等很多實用的功能,官網地址:https://brew.sh。
常見命令:
安裝
-
-
-
-
$ brew install libimobiledevice
-
安裝卸載IPA包
-
ideviceinstaller -i xxx.ipa
-
ideviceinstaller -u [udid] -i [xxx.ipa] # 給指定連接的設備安裝應用
-
ideviceinstaller -U [bundleID]
查看系統日志
idevicesyslog
查看當前已連接的設備的UUID
idevice_id -l
截圖
idevicescreenshot
查看設備信息
-
ideviceinfo
-
ideviceinfo -u [udid] -k DeviceName # 指定設備,獲取設備名稱:iPhone6s
-
idevicename -u [udid] # 指定設備,獲取設備名稱:iPhone6s
-
ideviceinfo -u [udid] -k ProductVersion # 指定設備,獲取設備版本:10.3.1
-
ideviceinfo -u [udid] -k ProductType # 指定設備,獲取設備類型:iPhone8,1
-
ideviceinfo -u [udid] -k ProductName # 指定設備,獲取設備系統名稱:iPhone OS
獲取app列表和信息
ideviceinstaller -l
獲取設備時間
idevicedate
重啟設備
idevicediagnostics restart
關機
idevicediagnostics shutdown
休眠
idevicediagnostics sleep
筆者安裝成功截圖如下:
測試命令:
1. 查看當前連接的手機設備UDID命令:idevice_id -l,即可看到同前面Xcode獲取的一致。
2. 查看當前設備的時間命令:idevicedate ,如下圖:
3. 安裝IPA文件到手機設備命令:ideviceinstaller -i xxx.ipa ,如下圖:
注意:筆者這里是用企業簽名的IPA,或者需要實現把設備UDID寫入到描述文件再安裝。
三、利用Safari安裝描述文件的方式來查看,典型的三方平台,如蒲公英工具:https://www.pgyer.com/tools/udid,直接通過Safari打開網頁或通過掃描二維碼打開,首先會提示安裝一個描述文件,待安裝成功后會返回Safari顯示UDID,如下圖:
探討:這種方式是怎么實現的呢,這里我們也來看下,首先是這個描述文件,模板如下:
-
-
-
<plist version="1.0">
-
<dict>
-
<key>PayloadContent</key>
-
<dict>
-
<key>URL</key>
-
<!--接收數據的接口地址-->
-
<string>https://xxx//udid.php</string>;
-
<key>DeviceAttributes</key>
-
<array>
-
<string>UDID</string>
-
<string>IMEI</string>
-
<string>ICCID</string>
-
<string>VERSION</string>
-
<string>PRODUCT</string>
-
</array>
-
</dict>
-
<key>PayloadOrganization</key>
-
<string>com.xxx</string> <!--組織名稱-->
-
<key>PayloadDisplayName</key>
-
<string>title</string> <!--安裝時顯示的標題-->
-
<key>PayloadVersion</key>
-
<integer>1</integer> <!--版本號-->
-
<key>PayloadUUID</key>
-
<string>60c078ae-6ab1-4e4a-935b-a328e9de8242</string>
-
<key>PayloadIdentifier</key>
-
<string>dev.xxx.profile-service</string>
-
<key>PayloadDescription</key>
-
<string>本文件將幫助您獲取當前設備的UDID,不會安裝到當前設備上</string> <!--描述-->
-
<key>PayloadType</key>
-
<string>Profile Service</string>
-
</dict>
-
</plist>
參數說明:
URL
:為用戶授權后,將設備信息返回的地址。DeviceAttributes
:設備屬性列表,需要獲取哪些屬性:UDID、IMEI、ICCID、VERSION、PRODUCT。
一旦用戶授權后,會重定向URL
,並將以上屬性帶在URL
上,然后就可以直接在URL
頁面獲取顯示出來,這就是蒲公英獲取UDID的原理所在,更詳細說明,大家可以參考這篇技術文章 - 獲取蘋果設備的UDID,筆者就不再贅述,感謝原作者的分享。
四、借助一款iOS簽名管理軟件 - 風車簽名 來獲取,只需點下鼠標即可,如下圖:
探討:這種方式只是對命令行工具的可視化調用,利用的是命令行工具:instruments,比如終端下我們執行如下:
instruments -s devices
如果只想獲取手機UDID,可以執行如下命令:
instruments -s devices | grep -v "Simulator" | grep ")"
至此,筆者針對市面上常見的幾種獲取設備UDID方式都做了體驗和調研,知其然知其所以然,學技術,做學問,該當如此。