關於幾種獲取iOS設備UDID典型方式的技術探討


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

 

常見命令:

安裝

  1.  
    # 若mac沒有homebrew則執行此條命令,安裝
  2.  
    $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  3.  
     
  4.  
    $ brew install libimobiledevice
  5.  
    $ brew install ideviceinstaller # IPA安裝命令

安裝卸載IPA包

  1.  
    ideviceinstaller -i xxx.ipa
  2.  
    ideviceinstaller -u [udid] -i [xxx.ipa] # 給指定連接的設備安裝應用
  3.  
    ideviceinstaller -U [bundleID]

查看系統日志

idevicesyslog 

查看當前已連接的設備的UUID

idevice_id -l 

截圖

idevicescreenshot 

查看設備信息

  1.  
    ideviceinfo
  2.  
    ideviceinfo -u [udid] -k DeviceName # 指定設備,獲取設備名稱:iPhone6s
  3.  
    idevicename -u [udid] # 指定設備,獲取設備名稱:iPhone6s
  4.  
    ideviceinfo -u [udid] -k ProductVersion # 指定設備,獲取設備版本:10.3.1
  5.  
    ideviceinfo -u [udid] -k ProductType # 指定設備,獲取設備類型:iPhone8,1
  6.  
    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,如下圖:

 

      

探討:這種方式是怎么實現的呢,這里我們也來看下,首先是這個描述文件,模板如下:

  1.  
    <?xml version="1.0" encoding="UTF-8"?>
  2.  
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">;
  3.  
    <plist version="1.0">
  4.  
    <dict>
  5.  
    <key>PayloadContent</key>
  6.  
    <dict>
  7.  
    <key>URL</key>
  8.  
    <!--接收數據的接口地址-->
  9.  
    <string>https://xxx//udid.php</string>;
  10.  
    <key>DeviceAttributes</key>
  11.  
    <array>
  12.  
    <string>UDID</string>
  13.  
    <string>IMEI</string>
  14.  
    <string>ICCID</string>
  15.  
    <string>VERSION</string>
  16.  
    <string>PRODUCT</string>
  17.  
    </array>
  18.  
    </dict>
  19.  
    <key>PayloadOrganization</key>
  20.  
    <string>com.xxx</string> <!--組織名稱-->
  21.  
    <key>PayloadDisplayName</key>
  22.  
    <string>title</string> <!--安裝時顯示的標題-->
  23.  
    <key>PayloadVersion</key>
  24.  
    <integer>1</integer> <!--版本號-->
  25.  
    <key>PayloadUUID</key>
  26.  
    <string>60c078ae-6ab1-4e4a-935b-a328e9de8242</string>
  27.  
    <key>PayloadIdentifier</key>
  28.  
    <string>dev.xxx.profile-service</string>
  29.  
    <key>PayloadDescription</key>
  30.  
    <string>本文件將幫助您獲取當前設備的UDID,不會安裝到當前設備上</string> <!--描述-->
  31.  
    <key>PayloadType</key>
  32.  
    <string>Profile Service</string>
  33.  
    </dict>
  34.  
    </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方式都做了體驗和調研,知其然知其所以然,學技術,做學問,該當如此。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM