導航:首頁 > 源碼編譯 > udid代理系統源碼

udid代理系統源碼

發布時間:2022-10-29 10:09:30

㈠ 如何在 iOS 真機運行 Appium 社區 TesterHome

首先 Appium 支持 iOS 真機

以下條件必須滿足:

蘋果開發者賬號和開發者證書
蘋果設備,確保這個設備已經被配置為開發機器。怎麼配置?
簽名過的 .ipa 文件或者源代碼
A Mac with Xcode and the Xcode Command Line Developer Tools,有 xcode和xcode command line 的 蘋果系統。別來問我,windows 怎麼測試 iOS 應用。
Provisioning Profile

再次強調真機需要有效的開發分發證書和開發的 Provisioning Profile。
你的應用需要簽名。Appium 會參試使用 Fruitstrap 安裝應用。
但是使用 xcode 安裝到真機會方便很多。

拓展: 什麼是 Provisioning Profile?

運行

要指定真機運行有兩種方式:

appium 啟動的時候,指定 udid 和 app bundle appium -U <udid> --app <path or bundle>
或者在腳本里指定兩個 desired capability

desired_capabilities={
'app':'com.xxx.iphone',
'udid':'',
'platformName': 'iOS',
'deviceName': 'iPhone'
})
注意: 如果設備中未安裝 app 可以指定 ipa 地址,如果安裝了,
則指定 bundle ID。

㈡ 明明就是iOS系統的,結果微信要安裝蘋果定製版的居然提示這個,求助怎麼回事,有誰知道的求告知

您好!很高興能為您解答, 拒絕 iOS 應用獲取設備的 UDID的原因
UDID本來是為了方便一個應用來統計用戶行為的,但是因為是一個唯一ID,而且直接看不到跟用戶隱私的關系,所以是開放出來的。但是,當有大量的App在市場中,而UDID對於每個App都是一樣的時候,用戶的隱私其實受到了一定程度的侵犯。假設有很多App聯合在一起,因為UDID是統一的,那麼他們就可以拼湊出用戶的隱私出來。所以從這個角度蘋果去掉了UDID的支持,而每個應用可以自行生成自己的UUID,所以,單一app的統計仍舊不會發生問題。所以主要的原因是隱私問題。
、必須使用UDID時建議的UUID替代方案

-(NSString*) uuid {
CFUUIDRef puuid = CFUUIDCreate( nil );
CFStringRef uuidString = CFUUIDCreateString( nil, puuid );
NSString * result = (NSString *)CFStringCreateCopy( NULL, uuidString);
CFRelease(puuid);
CFRelease(uuidString);
return [result autorelease];
}

蘋果公司建議採用上述代碼為應用生成唯一標識字元串。開發者可以在應用第一次啟動時調用一次,然後將該串存儲起來,以便以後替代UDID來使用。顯而易見,這種方法問題很多。如果用戶刪除該應用再次安裝時,又會生成新的字元串,所以不能保證唯一識別該設備;如果你從一台舊設備中備份文件到新設備中,兩台設備就擁有相同的CFUUID;如果你從臨時文件中備份操作系統,就會出現一個設備里存在不同CFUUID的情況。
2、使用開源方案OpenUDID
貢獻者在readme文檔中說:

OpenUDID is a drop-in replacement for the deprecated [UIDevice uniqueIdentifier] a.k.a. UDID on iOS, and otherwise is an instry-friendly equivalent for iOS and Android.
The agenda for this community driven project is to: – Provide a reliable proxy and replacement for a universal unique device identifier. That is, persistent and sufficiently unique, on a per device basis. – NOT use an obvious other sensitive unique identifier (like the MAC address) to avoid further deprecation and to protect device-level privacy concerns – Enable the same OpenUDID to be accessed by any app on the same device – Supply open-source code to generate and access the OpenUDID, for iOS and Android – Incorporate, from the beginning, a system that will enable user opt-out to match Apple』s initial intent.
願景很好,也確實沒有用到MAC地址,同時能保證同一台設備上的不同應用使用同一個OpenUDID。但是仔細分析,還是能發現問題。

unsigned char result[16];
const char *cStr = [[[NSProcessInfo processInfo] globallyUniqueString] UTF8String];
CC_MD5( cStr, strlen(cStr), result );
_openUDID = [NSStringstringWithFormat:
@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%08x",
result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15],
arc4random() % 4294967295];

這里使用了NSProcessInfo類。
當設備上第一個使用OpenUDID解決方案的應用第一次調用時,確實會生成一個唯一的識別碼。同時,為了與官方的UDID位數相同,還在MD5值後面追加了8位隨機碼。然後,該方案使用到了NSUserDefaults類(應用設置)。應用將獲取到的唯一識別碼保存到應用的UserDefaults中,如果程序以後需要使用唯一識別碼,就從UserDefaults中獲取,這樣就保證可以拿到同一個識別碼。但是,如果用戶刪除了應用,UserDefaults同樣會被清空,為了避免重新生成唯一識別碼,該方案還使用到了UIPasteboard類(設備剪切板)。應用在將唯一識別碼保存到UserDefaults的同時,也會將其保存到以特殊的key標識的UIPasteboard中。代碼如:
1
2
UIPasteboard* slotPB = [:availableSlotPBid create:YES];
[slotPB setData:[NSKeyedArchiver archivedDataWithRootObject:dict] forPasteboardType:kOpenUDIDDomain];

其中availableSlotPBid是一個字元串key,前綴是「org.OpenUDID.slot.」,點後面加上數字。這個數字默認是從0到99(當然你可以修改源代碼使它更大或者更小)。
如果設備上安裝了第二個使用OpenUDID解決方案的應用,當應用調用生成OpenUDID的方法時,將會從UIPasteboard中獲取唯一識別碼(遍歷key從0到99的UIPasteboard),這里取到的就是之前第一個應用保存到UIPasteboard中的。也就是說,只要用戶設備上有一個使用了OpenUDID的應用存在時,其他後續安裝的應用如果獲取OpenUDID,都將會獲得第一個應用生成的那個。
看起來似乎很好,很復雜。但是仔細想想,還是有問題,如果把使用了OpenUDID方案的應用全部都刪除,再重新獲取OpenUDID,此時的OpenUDID就跟以前的不一樣了(本人測了一下,確實如此)。可見,這種方法還是不保險。
3、開源方案SecureUDID
稍微看了下SecureUDID源碼,發現其與OpenUDID其實差不多,只是初始獲取的唯一識別碼稍有不同。同時,從作者的Readme文檔中可見,這個方案同樣存在很多問題。如原文:
Is this a true UDID replacement?
SecureUDID has two properties that you should know about before you use it. First, as indicated above, the identifier is not derived from hardware attributes. Second, the persistence of an identifier cannot be guaranteed in all situations. This means that, while unlikely, it is technically possible for two distinct devices to report the same identifier, and for the same device to report different identifiers. Consider this carefully in your application. Here is a list of situations where this identifier will not exhibit the uniqueness/persistence of a traditional UDID.
* The user has opted-out of the SecureUDID system, in which case you will receive a well-formed string of zeroes.
* Device A is backed up and then restored to Device B, which is an identical model. This is common when someone breaks their phone, for example, and is likely desirable: you will receive Device A』s SecureUDID.
* The SecureUDID data is removed, via user intervention, UIPasteboard data purge, or by a malicious application.
* The SecureUDID backing store becomes corrupt.
* All SecureUDID applications are uninstalled from a device, followed by a UIPasteboard data purge.
我發現,其實前面的OpenUDID也基本存在以上問題,只是作者沒寫出來。看來還是SecureUDID的貢獻者比較厚道。
4、與WIFI MAC地址相關
網上同樣有一些與WIFI MAC地址相關的替代方案,主要分三種:第一種直接使用「MAC Address」;第二種,使用「MD5(MAC Address)」;第三種,「MD5(MAC Address+CFBundleIdentifier)」。github上有個開源項目(UIDevice-with-UniqueIdentifier-for-iOS-5)實現了這幾種方法。
使用這種方法也存在問題:1、市面上有部分機器(雖然數量極少,但是本人在使用過程中確實發現過這種情況)無法獲得MAC地址,有人說這部分機器是聯通閹割無WIFI版的,具體不得而知了。2、MAC地址跟UDID一樣,存在隱私問題。蘋果現在禁用UDID,不能保證以後不會禁用MAC地址。
5、部分大公司私有的解決方案,但是他們怎麼會告訴你呢?
所以,如果你想以一種萬無一失的方法追蹤某台設備,現在還沒有比UDID更合適的選擇。但是,蘋果現在不讓用了,苦逼的開發者們,該怎麼辦呢?

㈢ 如何在 iOS 真機運行 Appium

首先 Appium 支持 iOS 真機
以下條件必須滿足:
蘋果開發者賬號和開發者證書
蘋果設備,確保這個設備已經被配置為開發機器。怎麼配置?
簽名過的 .ipa 文件或者源代碼
A Mac with Xcode and the Xcode Command Line Developer Tools,有 xcode和xcode command line 的 蘋果系統。別來問我,windows 怎麼測試 iOS 應用。
Provisioning Profile
再次強調真機需要有效的開發分發證書和開發的 Provisioning Profile。
你的應用需要簽名。Appium 會參試使用 Fruitstrap 安裝應用。
但是使用 xcode 安裝到真機會方便很多。
拓展: 什麼是 Provisioning Profile?
運行
要指定真機運行有兩種方式:
appium 啟動的時候,指定 udid 和 app bundle appium -U <udid> --app <path or bundle>
或者在腳本里指定兩個 desired capability
desired_capabilities={
'app':'com.xxx.iphone',
'udid':'',
'platformName': 'iOS',
'deviceName': 'iPhone'
})

注意: 如果設備中未安裝 app 可以指定 ipa 地址,如果安裝了,
則指定 bundle ID。
所以對於第一種情況,代碼可以這樣寫:
self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities={
'deviceName':'',
'platformName': 'iOS',
})

對於第二種情況,代碼可以這樣寫:
app = "io.appium.TestApp"
self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities={
'deviceName':'',
'platformName': 'iOS',
'app': app,
'udid': ''
})

調試的思路
確保 UDID 的正確,是真機的 UDID。(20+ 字元串)
確保在模擬器上已經能運行無誤了。
直接使用 Instruments 看看是否能在真機上運行。有些情況連 xcode 的 instruments 都不能在真機上調試,那更別談 appium 了
確保運行 appium 用例前, instruments 沒有啟動過。看看有沒有 instruments 的進程。

㈣ 如何在 iOS 真機運行 Appium

首先你啟動 appium 的時候 指定設備的 UUID 指定 APP 的 Bundle ID 比如 appium -U --app io.appium 然後再去運行腳本。
比如源碼的案例下面的 examples/python/simple_real_device.py

㈤ 如何在 iOS 真機運行 Appium 03 社區 03 TesterHome

首先 Appium 支持 iOS 真機

以下條件必須滿足:

蘋果開發者賬號和開發者證書
蘋果設備,確保這個設備已經被配置為開發機器。怎麼配置?
簽名過的 .ipa 文件或者源代碼
A Mac with Xcode and the Xcode Command Line Developer Tools,有 xcode和xcode command line 的 蘋果系統。別來問,windows 怎麼測試 iOS 應用。
Provisioning Profile

再次強調真機需要有效的開發分發證書和開發的 Provisioning Profile。
應用需要簽名。Appium 會參試使用 Fruitstrap 安裝應用。
但是使用 xcode 安裝到真機會方便很多。

拓展: 什麼是 Provisioning Profile?

運行

要指定真機運行有兩種方式:

appium 啟動的時候,指定 udid 和 app bundle appium -U <udid> --app <path or bundle>
或者在腳本里指定兩個 desired capability

desired_capabilities={
'app':'com.xxx.iphone',
'udid':'',
'platformName': 'iOS',
'deviceName': 'iPhone'
})
注意: 如果設備中未安裝 app 可以指定 ipa 地址,如果安裝了,
則指定 bundle ID。

所以對於第一種情況,代碼可以這樣寫:

self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities={
'deviceName':'',
'platformName': 'iOS',
})
對於第二種情況,代碼可以這樣寫:

app = "io.appium.TestApp"
self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities={
'deviceName':'',
'platformName': 'iOS',
'app': app,
'udid': ''
})
調試的思路

確保 UDID 的正確,是真機的 UDID。(20+ 字元串)
確保在模擬器上已經能運行無誤了。
直接使用 Instruments 看看是否能在真機上運行。有些情況連 xcode 的 instruments 都不能在真機上調試,那更別談 appium 了
確保運行 appium 用例前, instruments 沒有啟動過。看看有沒有 instruments 的進程。
目前 1.2.2 的坑

目前 appium 1.2.2 上運行 iOS 真機測試的話,可能會遇到如下的錯誤:

info: [debug] Starting iOS device log capture via deviceconsole
error: iOS log capture failed: spawn ENOENT
info: [debug] Cleaning up appium session
error: Failed to start an Appium session, err was: Error: spawn ENOENT
info: [debug] Error: spawn ENOENT
at errnoException (child_process.js:1000:11)
at Process.ChildProcess._handle.onexit (child_process.js:791:34)
info: [debug] Responding to client with error: {"status":33,"value":{"message":"A new session could not be created. (Original error: spawn ENOENT)","code":"ENOENT","errno":"ENOENT","syscall":"spawn","origValue":"spawn ENOENT"},"sessionId":null}
info: <-- POST /wd/hub/session 500 1780.745 ms - 197
這是因為在 /usr/local/lib/node_moles/appium/build/deviceconsole/ 下面缺失了 deviceconsole。已經有 bug 追蹤了。

解決方法如下:

到該目錄底下 cd /usr/local/lib/node_moles/appium/build/deviceconsole/
打開這個deviceconsole project。 open deviceconsole.xcodeproj
重新 build 一把。把 build 出來的 deviceconsole,復制到 /usr/local/lib/node_moles/appium/build/deviceconsole/去。
然後重新運行 Appium
注意: deviceName 就算為空也一定要,代碼寫死的。。。

㈥ 蘋果超級簽名源碼和蘋果企業簽名有什麼區別

首先來簡單介紹一下這兩種簽名方式的原理:

超級簽名是使用個人開發者賬號,自動化添加蘋果設備的udid,實現真機測試。

而企業簽名是使用企業開發者賬號,通過生成的p12證書,對應用進行簽名。

超級簽名與企業簽名的區別:

1、是否需要越獄?

這兩種簽名方式都無需越獄。

2、是否需要提供UDID?

對於用戶來說,這兩種簽名方式都不需要主動提供udid,超級簽名將獲取、注冊udid實現了全自動化,用戶直接安裝即可。

3、安裝之後是否需要信任

企業簽名的應用,用戶在安裝時需要先在【設置】-【描述文件】中信任證書。

而超級簽名無需信任證書,可以直接安裝。

4、穩定性如何,是否會掉簽?

超級簽名和企業簽名都有可能掉簽,不過企業簽名掉簽的頻率會多一點,尤其是共享企業簽名。

而超級簽名掉簽的幾率比較小,超級簽名更加穩定。

5、是否需要提供源碼?

兩種簽名方式都不要提供源碼。

6、能否在App Store上搜索到?

兩種簽名方式都不能在App Store上搜索到。

7、如何收費?

目前市面上的企業簽名一般按月收費,超級簽名是按照下載量收費。

8、兩種簽名方式分別適合什麼樣的APP?

超級簽名價格較貴,一般適合用戶數量不是很多的APP,而企業簽名一般對APP的類型和數量沒有限制。

超級簽名更加穩定,適合運營初期的APP,提高用戶體驗,提高用戶粘性,穩定忠實用戶。

微導流新版本正式上線,在線企業簽名



㈦ 如何在 iOS 真機運行 Appium 03 社區 03 TesterHome

首先 Appium 支持 iOS 真機

以下條件必須滿足:

蘋果開發者賬號和開發者證書
蘋果設備,確保這個設備已經被配置為開發機器。怎麼配置?
簽名過的 .ipa 文件或者源代碼
A Mac with Xcode and the Xcode Command Line Developer Tools,有 xcode和xcode command line 的 蘋果系統。別來問我,windows 怎麼測試 iOS 應用。
Provisioning Profile

再次強調真機需要有效的開發分發證書和開發的 Provisioning Profile。
你的應用需要簽名。Appium 會參試使用 Fruitstrap 安裝應用。
但是使用 xcode 安裝到真機會方便很多。

拓展: 什麼是 Provisioning Profile?

運行

要指定真機運行有兩種方式:

appium 啟動的時候,指定 udid 和 app bundle appium -U <udid> --app <path or bundle>
或者在腳本里指定兩個 desired capability

desired_capabilities={
'app':'com.xxx.iphone',
'udid':'',
'platformName': 'iOS',
'deviceName': 'iPhone'
})
注意: 如果設備中未安裝 app 可以指定 ipa 地址,如果安裝了,
則指定 bundle ID。

所以對於第一種情況,代碼可以這樣寫:

self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities={
'deviceName':'',
'platformName': 'iOS',
})
對於第二種情況,代碼可以這樣寫:

app = "io.appium.TestApp"
self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities={
'deviceName':'',
'platformName': 'iOS',
'app': app,
'udid': ''
})
調試的思路

確保 UDID 的正確,是真機的 UDID。(20+ 字元串)
確保在模擬器上已經能運行無誤了。
直接使用 Instruments 看看是否能在真機上運行。有些情況連 xcode 的 instruments 都不能在真機上調試,那更別談 appium 了
確保運行 appium 用例前, instruments 沒有啟動過。看看有沒有 instruments 的進程。
目前 1.2.2 的坑

目前 appium 1.2.2 上運行 iOS 真機測試的話,可能會遇到如下的錯誤:

info: [debug] Starting iOS device log capture via deviceconsole
error: iOS log capture failed: spawn ENOENT
info: [debug] Cleaning up appium session
error: Failed to start an Appium session, err was: Error: spawn ENOENT
info: [debug] Error: spawn ENOENT
at errnoException (child_process.js:1000:11)
at Process.ChildProcess._handle.onexit (child_process.js:791:34)
info: [debug] Responding to client with error: {"status":33,"value":{"message":"A new session could not be created. (Original error: spawn ENOENT)","code":"ENOENT","errno":"ENOENT","syscall":"spawn","origValue":"spawn ENOENT"},"sessionId":null}
info: <-- POST /wd/hub/session 500 1780.745 ms - 197
這是因為在 /usr/local/lib/node_moles/appium/build/deviceconsole/ 下面缺失了 deviceconsole。已經有 bug 追蹤了。

解決方法如下:

到該目錄底下 cd /usr/local/lib/node_moles/appium/build/deviceconsole/
打開這個deviceconsole project。 open deviceconsole.xcodeproj
重新 build 一把。把 build 出來的 deviceconsole,復制到 /usr/local/lib/node_moles/appium/build/deviceconsole/去。
然後重新運行 Appium
注意: deviceName 就算為空也一定要,代碼寫死的。。。

閱讀全文

與udid代理系統源碼相關的資料

熱點內容
mdr軟體解壓和別人不一樣 瀏覽:884
單片機串列通信有什麼好處 瀏覽:320
游戲開發程序員書籍 瀏覽:843
pdf中圖片修改 瀏覽:269
匯編編譯後 瀏覽:474
php和java整合 瀏覽:829
js中執行php代碼 瀏覽:440
國產單片機廠商 瀏覽:57
蘋果手機怎麼設置不更新app軟體 瀏覽:284
轉行當程序員如何 瀏覽:492
蘋果id怎麼驗證app 瀏覽:864
查看手機命令 瀏覽:953
抖音反編譯地址 瀏覽:226
如何加密軟體oppoa5 瀏覽:233
java從入門到精通明日科技 瀏覽:96
拆解汽車解壓視頻 瀏覽:598
新版百度雲解壓縮 瀏覽:593
android上下拉刷新 瀏覽:880
centos可執行文件反編譯 瀏覽:839
林清玄pdf 瀏覽:271