1. 程式人生 > 實用技巧 >關於幾種獲取iOS裝置UDID典型方式的技術探討

關於幾種獲取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. $ brew install libimobiledevice
  4. $ 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方式都做了體驗和調研,知其然知其所以然,學技術,做學問,該當如此。