自iOS 7发布以来,有没有一种不使用PC/Mac上的iTunes获取UDID的方法?

82
我正在为我的公司开发一个应用程序,我们正在逐步让人们进入“beta”测试阶段,通过将他们的iPad添加到公司的iOS Dev Center账户中实现。然后,我们会进行本地Intranet分发的Ad hoc版本构建。
在上一个工作中,我会引导人们使用“寻找我的UDID”应用程序之一,然后让他们将它发给我。
iOS 7已经切断了这个功能-这些应用程序现在全部都消失了,如果你仍然有一个,它会返回一些与UDID无关的GUID。
因此,我现在需要连接每个设备到我的Mac电脑,然后从iTunes中获取UDID,这有点麻烦(但比尝试向他们解释如何从iTunes中获取UDID(假设他们甚至安装了它)要简单得多)。有时候它会尝试与我的Mac同步,但似乎除了在设备上安装我不想要的配置文件之外没有任何影响。而且至少有一次,我曾经让iPad自己决定将iOS 6升级到iOS 7,我不确定这是否与连接到电脑有关(在这种情况下,用户不希望进行升级)。
那么,有没有其他方法可以从iPad中获取UDID,而不是将其连接到电脑上?
明确说明:我并不是要在应用程序中获取UDID,我只是在想获取UDID以便将其添加到我们的开发者分发配置文件中的设备列表中的最快方式。

http://whatsmyudid.com/ :D 你可以下载一个UDID应用程序并将邮件发送给我。你别无选择。 - Jordan Montel
1
@JordanMontel 这是一个很酷的网站,尽管它使用的是一个旧版本的iTunes,不再与外观/感觉相匹配,而复制命令假定您正在运行Mac。而UDID应用程序不再给出有效的UDID,因为iOS 7。 - Tom Kidd
2
哦,是的,我记得在iOS 7中......应用程序发送的UDID以FFFF开头。 因此,唯一的解决方案是将设备插入iTunes:s - Jordan Montel
2
TestFlight通过使用配置文件在iOS 7设备上实现了这一点。可以研究一下它是如何工作的。 - Jesse Rusak
关于TestFlight - 这是从他们的错误页面https://testflightapp.com/sdk/ios/known_issues/中获取的:“当前问题在iOS 7中,uniqueIdentifier不再返回设备的UDID,因此即使您使用setDeviceIdentifier:,iOS 7用户也将匿名显示在TestFlight上。应用内更新也将无法工作。 当使用ARC构建时,Xcode 5将不允许您调用uniqueIdentifier,因为它已从UIDevice的标头中在iOS 7中删除。删除该行将导致用户显示为匿名,并停止应用内更新的工作。” - software evolved
显示剩余4条评论
18个回答

106

在您的iOS设备上,从Safari浏览器导航至http://get.udid.io/。该方法简便易行,无需使用iTunes或任何其他电脑,也不需要安装任何应用程序。

编辑:

如果您(可以理解地)希望将.mobileconfig证书托管在您自己的服务器上,请查看从.mobileconfig文件获取设备UDID

自制:

将.mobileconfig示例存储在您的服务器上,并使用您喜欢的语言编写2-3个小脚本以处理以下流程:

  1. 在Safari中导航到重定向到下面的enroll.mobileconfig的URL。这将使iOS打开设置应用并显示配置文件。
  2. 接受配置文件后,iOS将切换回Safari并将DeviceAttributes数组发布到指定的enroll.mobileconfig URL。
  3. POST数据将包含一个带有所请求属性的.plist文件(请参见以下示例)。其中之一将是神圣的UDID。

备注:您可能需要一些用户友好的消息。具体而言,我们甚至有第0步。在此步骤中,要求用户提供其姓名和电子邮件,我们将其暂时存储在HTTP会话中,然后将请求重定向到mobileconfig配置文件。最终,我们将此信息与iPhone数据进行匹配,并发送友好的确认电子邮件。希望对您有所帮助。

enroll.mobileconfig

<?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">
<plist version="1.0">
    <dict>
        <key>PayloadContent</key>
        <dict>
            <key>URL</key>
            <string>http://support.devcorp.com/uuid/returnurl/</string>
            <key>DeviceAttributes</key>
            <array>
            <string>DEVICE_NAME</string>
            <string>UDID</string>
            <string>PRODUCT</string>
            <string>VERSION</string>
            <string>SERIAL</string>
            </array>
        </dict>
        <key>PayloadOrganization</key>
        <string>DevCorp Inc.</string>
        <key>PayloadDisplayName</key>
        <string>Profile Service</string>
        <key>PayloadVersion</key>
        <integer>1</integer>
        <key>PayloadUUID</key>
        <string>C5FB9D0D-0BE7-4F98-82CC-5D0EA74F8CF8</string> <!-- any random UUID -->
        <key>PayloadIdentifier</key>
        <string>com.devcorp.profile-service</string>
        <key>PayloadDescription</key>
        <string>This is a temporary profile to enroll your device for ad-hoc app distribution</string>
        <key>PayloadType</key>
        <string>Profile Service</string>
    </dict>
</plist>

iPhone POST到指定URL的示例.plist文件

<?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">
<plist version="1.0">
<dict>
    <key>PRODUCT</key>
    <string>iPhone4,1</string>
    <key>SERIAL</key>
    <string>DNPGWR2VCTC0</string>
    <key>UDID</key>
    <string>b01ea7bc2237fed21bfe403c6d2b942ddb3c12c3</string>
    <key>VERSION</key>
    <string>11A465</string>
</dict>

1
我知道,为自己/客户设置类似的服务只需要几个点击即可完成。 - VH-NZZ
9
不要使用此网站,因为它会要求你安装一个个人资料服务,从而使你的数据可以被该网站的所有者访问。 - checklist
1
@checklist: 我不同意。有两件事情,一条评论和一条备注:第一。请看我上面关于隐私问题的编辑。第二。如果没有你的iPhone,你的UUID有什么用处?备注个人资料 不会使你的`数据可供网站所有者访问',它甚至不会保留安装。你能详细说明一下吗?评论:如果你有更简单的方法来检索UUID,我会听取。如果你担心你的UUID被发送到你的电子邮件中,那么请在SSL上托管自己的服务。顺便说一句:将你的iPhone插入iTunes也会将你的数据发送给Apple(可能还会发送给N$@)。 - VH-NZZ
4
嗨。将您的数据发送到苹果和发送到未知网站之间存在差异。有很多警告说不要在设备上安装配置文件,因为它们允许拦截您的数据。我不会这样做。 - checklist
3
@checklist: 关于您在网络上发布的任何内容,都存在合理的担忧。如果您对使用该“便利”服务感到不适,请放心,这是可以接受的。答案中的“EDIT”部分告诉您如何制作自己的服务,从而消除您可能担心的问题,同时保持其简单性。希望有所帮助。 - VH-NZZ
显示剩余3条评论

73

这是我的研究结果:

从 iOS 7 开始,苹果已经将 UDID 从所有公共 API 中隐藏起来。任何以 FFFF 开头的 UDID 都是伪造的 ID。之前可以使用的“发送 UDID”应用程序现在无法用于收集测试设备的 UDID。(叹气!)

连接到 XCode(在组织者中)或连接到 iTunes(虽然您必须点击“序列号”才能显示标识符)时会显示 UDID。

如果您需要获取设备的 UDID,并且无法在 XCode 中自行完成,请引导用户按照步骤从 iTunes 中复制/粘贴它以添加到配置文件中。

更新--请参见下面 okiharaherbst 的答案,使用基于脚本的方法允许测试用户通过在服务器上托管 mobileconfig 文件来提供他们的设备 UDID。


202
苹果是否讨厌开发者? - ryan0
15
"你需要引导他们按步骤从iTunes复制/粘贴,这个网站可能会有所帮助:http://whatsmyudid.com。" - Guillaume Algis
我拥有UDID的用户中有一半是假的,而这些人无法安装我的开发应用程序。 - bentedder
如果您有关于这个问题的苹果文档链接,请添加。 - Praveenkumar
2
右键单击该值可复制该值(iTunes 的 Windows 版本 - 不确定 Mac 版本如何)。 - software evolved
显示剩余2条评论

18
希望这能帮到您:
  1. 将iPhone连接到您的 MAC 上(我没有在Windows上尝试过)
  2. 点击左上角的苹果标志 > 选择关于本机
  3. 概览选项卡中 > 系统报告
  4. 左列中的硬件 > USB >
  5. 然后在右侧窗格中选择iPhone
  6. 在底部区域 -> "序列号"

->该序列号即为UDID


现在我明白为什么我喜欢StackOverflow了 :) 感谢这个精彩的解决方案。 - Jean Le Moignan
1
点击序列号后,它会更改为UDID。 - Vishal

17

如果你的用户中有人在运行Linux,他们可以在终端中使用以下命令:

lsusb -v 2> /dev/null | grep -e "Apple Inc" -A 2

这会获取你连接的USB设备的所有信息,并打印包含“Apple Inc”及其下两行内容的行。

结果看起来像这样:

iManufacturer           1 Apple Inc.
iProduct                2 iPad
iSerial                 3 7ddf32e17a6ac5ce04a8ecbf782ca509...

这在我使用的iOS5 -> iOS7上有效,但我没有在任何iOS4设备上尝试过。

依我看,这比我找到的任何Win/Mac/浏览器解决方案都更快,并且不需要进行“软件”安装。


1
你能确认一下“iSerial”是否等于UDID吗? - software evolved
我一直在苹果的开发中心将其用作UDID来创建开发配置文件,效果很好。 - complistic
1
有没有在 Windows 上执行类似这样的操作的方法? - Nicolas Barbulesco
这个可以运行,但是iSerial需要以像这样的连字符格式化:00001111-000FFFFEEEE00011,换句话说,在第8个字符后插入一个连字符。 - willbradley

5

1
我赞同这个观点。目前来看,TestFlight是唯一可行的选择。 - Blazor
我们需要做什么?这个能在iOS 7.1上运行吗?我读到TestFlight不能再获取UDID了。 - Nicolas Barbulesco

4

我一直在使用iPhone配置实用程序来读取UDID并安装开发应用程序。在iOS7上仍然可以正常工作。


1
原问题提到不使用iTunes,但实际上他们想问的是“有没有一种方法可以在没有设备的情况下获取UDID,或者强制用户安装苹果软件?”而这个答案未能通过该测试。 - software evolved
我喜欢这个解决方案。它在Windows上需要管理员权限吗? - Nicolas Barbulesco
唉,我需要Windows管理员权限才能在Windows上安装iPhone配置实用程序3.6.2。不要问我为什么你必须是PC的管理员才能使用设置iPhone的工具... - Nicolas Barbulesco

3

将其插入到电源中,然后从命令行运行此命令:

system_profiler SPUSBDataType

查找:

Serial Number: xxxx

1
太棒了!我喜欢这个解决方案。谢谢你。我在末尾添加了一些awk以生成易于扫描的列表:system_profiler SPUSBDataType | awk '/:$/{sub(/^ */,"");name=$0}/Serial Number:/{id=$3;print name,id}' - Todd Lehman
不错。但这个答案需要更多的细节。在哪里插入它?我有一些想法... 😉 - Nicolas Barbulesco

2

不使用iTunes在iPhone和iPad上查找UDID的步骤:

  1. 在您的iPhone或iPad中打开以下链接:- http://get.udid.io/

  2. 点击绿色按钮 - 点击查找UDID

  3. 获取您的UDID,然后点击右上方的安装按钮

4. UDID将显示,复制该UDID即可。


2

发现了一种很好的处理方法: 将应用程序添加到testFlight.com,并向您想要获取其UDID的用户提供链接。 他将看到一个错误消息,指出“您的设备UDID:xxxxxx未注册”,而UDID将是正确的。


此网站已不存在。"此页面已不再活跃。您将很快被重定向到我们的企业页面 - Pearson" - Raphael Pinel
@RaphaelPinel - 是的,这已经不存在了。即使 https://betafamily.com/superudid 对我也不起作用。你找到获取UDID的任何方法了吗? - node_analyser

2
让他们创建一个testflightapp.com帐户。
这对于测试beta版本非常有用 - 我猜这就是您需要udid的原因。
您可以向他们发送应用程序的下载链接(在页面底部的权限选项卡中找到),它会告诉他们他们的udid尚未验证。然后它会告诉他们他们的udid!他们可以复制并将其粘贴到短信中发给您。

这个网站似乎已经不存在了。 - Raphael Pinel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接