导出添加在苹果的iOS Provision门户中的设备

22

我的苹果开发者账号即将在5天后到期。续订后,我想将设备数量恢复到100,同时我想将所有当前添加的设备导出备份以备将来使用,这些设备共有87个。

在新的苹果开发者区域,我没有看到任何导出所有设备的选项,我也不想复制粘贴所有87个设备 :(

注意: 我希望按照苹果要求的格式导出设备以便插入多个设备。

14个回答

32
如果您正在寻找一个不需要额外软件、录音或修改正则表达式的选项,这里有一段 JavaScript 代码片段可在 Chrome(或我认为是任何其他浏览器的)JavaScript 控制台中运行,以获得格式正确的设备列表:
var ids = ["Device ID"];
var names = ["Device Name"];
$("td[aria-describedby=grid-table_name]").each(function(){
    names.push($(this).html());
});
$("td[aria-describedby=grid-table_deviceNumber]").each(function(){
    ids.push($(this).html());
});

var output = "";
for (var index = 0; index < ids.length; index++) {
    //output += names[index] + "\t" + ids[index] + "\n";    //original
    output += ids[index] + "\t" + names[index] + "\n";      //post September 2016
}
console.log(output);

完整的导出将被记录在控制台中,此时你只需将其简单地复制/粘贴到空白文本文件中,随后可随时重新导入到苹果公司。
截至2015年4月,此方法适用于苹果当前的开发者网站布局。显然,如果他们更改了相关内容,则此方法可能会失效。

这是jQuery代码,你认为我们需要包含jQuery库然后执行上面的代码吗? - Irfan DANISH
@IrfanDANISH - 不,假设您在JavaScript控制台上运行此代码以提取设备ID列表,则jQuery已经被Apple包含。我真的想不出其他任何有用的片段上下文。 - aroth
1
截至2016年9月,您需要在输出+=行上切换名称和ID。先是ID,然后是名称。否则它将无法正常工作。顺便说一句,答案很棒! - Jan

28
截至2021年3月,我创建的这个片段(混合了T.Nhan上面的回答和苹果上传格式指南)可直接通过将输出保存在.txt文件中并上传即可使用。

var data = document.querySelectorAll(".infinite-scroll-component .row");

var deviceListString = "Device ID\tDevice Name\tDevice Platform\n"
for (var i = 1; i < data.length; i++) {
  deviceListString += (data[i].childNodes[1].innerText + "\t" + data[i].childNodes[0].innerText + "\t" + (data[i].childNodes[2].innerText == "iPhone" || data[i].childNodes[2].innerText == "iPad" || data[i].childNodes[2].innerText == "Apple Watch" ? "ios" : "mac") + "\n");
}

console.log(deviceListString);


2
这对我来说没有任何问题。这里的其他解决方案已经过时了。 - Ariel Bogdziewicz
它可以工作。谢谢! - Lebron
这对我也起作用了。但是需要删除非英文字符。 - Hassan

9

打开Safari、Chrome或Firefox&Firebug,进入设备列表。在网页检查器中(Safari中为opt-cmd-i),切换到“仪表盘”选项卡(ctrl+3),点击“开始记录”按钮并刷新页面。

在出现的列表底部找到“listDevices.action”,选择它。在网页检查器的右侧栏中复制并粘贴完整URL,并下载设备列表的JSON文件。然后,使用简单的正则表达式(例如 /\"name\": \"([^\"]+)\",\n\s*\"deviceNumber\": \"([^\"]+)\"/ )即可获取设备名称和编号。

上传时苹果所接受的格式为:

Device ID   Device Name
A123456789012345678901234567890123456789    NAME1
B123456789012345678901234567890123456789    NAME2

更新:
啊!苹果现在在“iOS设备”页面上提供了完整的设备编号,这使得整个过程更加容易。将列表复制粘贴到Sublime文本中,并按正确顺序放置设备名称和编号:

查找:/^(.*) +([^\n]+)\n/
替换:\2\t\1\n


谢谢,你的解决方案很好并且有效。难道你不认为苹果应该给开发者提供简单的导出功能吗 :) - Irfan DANISH
不客气 : )。关于你的问题,说实话,我认为这个功能并不是非常必要的 - 你只有在账户迁移的情况下才可能需要它,而这并不是一个常见的情况。 - kovpas
2
那个正则表达式对我没用。最终想出了(.*\s)(\w+)$并替换为:\2\t\1 - Hjalmar

6
你可以使用一个叫做Spaceship的命令工具,它暴露了Apple Developer Center和iTunes Connect API。以下是我用来将所有设备从我的Apple Developer账户迁移到第二个账户的步骤。
spaceship1 = Spaceship::Launcher.new("account1@email.com", "password")
spaceship2 = Spaceship::Launcher.new("account2@email.com", "password")

#Get all devices from the Apple Developer account 1.
devices = spaceship1.device.all

#Loop through all devices from account 1 and then add/create them in account2.
devices.each do |device| spaceship2.device.create!(name: device.name, udid: device.udid) end

注意:如果您想在终端快速测试太空船启动的 irb 并执行 require "spaceship"。

6

看起来自最新响应以来,网页结构已经进行了一些编辑。我的新代码片段还将输出格式化为CSV,因此您可以保存输出并使用Numbers/Excel打开并分享。

var data = document.querySelectorAll(".infinite-scroll-component .row");
var csvOutput = "Name, Identifier, Type\n"

for (var i = 1; i < data.length; i++) {
    let name = data[i].childNodes[0].childNodes[0].textContent;
    let identifier = data[i].childNodes[1].childNodes[0].textContent;
    let type = data[i].childNodes[2].childNodes[0].textContent;
    let device = [name, identifier, type].join(", ") + "\n";
    csvOutput += device;
}

console.log(csvOutput);


2022年可用。 - Glenn Posadas

5

以上方法均不适用于我,可能是因为苹果公司更改了格式。但最有效的方法是:

  • 复制/粘贴所有设备页面上的项目
  • 粘贴到Numbers中,设备ID和名称会被识别为两个不同的列
  • 拖动列顺序,使设备排在名称之前
  • 将所有行复制/粘贴到文本文件中
  • 上传到苹果并完成

2

现在,苹果已经没有JQuery了。我们可以使用这个查询来获取最初的回答。

var data = document.querySelectorAll(".infinite-scroll-component .row");
for(var i = 0 ; i < dencho.length; i++){
  var name =  data[i].childNodes[0];
  var id =  data[i].childNodes[1]
  console.log(name.innerText + "\t" +  id.innerText  + "\n");
}


1

来看一下Mattt的命令行接口工具Cupertino

您可以运行ios devices:list来获取帐户上设备的列表。

这可能不是适用于苹果导入程序的确切格式,但它应该能让您达到一个良好的状态,还有一个ios devices:add可让您从命令行重新添加设备。


1
很棒的工具,但它不再起作用了 :(由于苹果在4月7日对Dev Center进行了更新,当前版本的Cupertino不起作用。由于缺乏公共API,Cupertino依赖屏幕抓取来获取信息,因此网站结构的更改破坏了CLI的功能。我们正在快速努力恢复与下一个版本的兼容性。感谢您的耐心等待。 - kovpas
我完全错过了那个 :( 希望他们能尽快修复它。 - Chris Wagner

1
// Does not parse iPod device ids properly
// Order of platform, identifier and name is important while creating file, do not change..
// Save file extension as ".deviceids"
// Use this JS script in browser in device id's page. This script is useful when device names has space characters..
// Make sure device name does not have multi-byte characters. Apple allows UTF-8 characters only.
// Based on https://dev59.com/AmQo5IYBdhLWcg3wbfDr#58072373


var data = document.querySelectorAll(".infinite-scroll-component .row");
var header = `<?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>Device UDIDs</key>
    <array>`;

var footer = `</array>
</dict>
</plist>`;

var deviceListString = "";
for (var i = 1; i < data.length; i++) {
  // deviceListString += (data[i].childNodes[1].innerText + "\t" + data[i].childNodes[0].innerText + "\t" + (data[i].childNodes[2].innerText == "iPhone" || data[i].childNodes[2].innerText == "iPad" || data[i].childNodes[2].innerText == "Apple Watch" ? "ios" : "mac") + "\n");
    deviceListString += `<dict>`
    deviceListString += `<key>devicePlatform</key><string>${(data[i].childNodes[2].innerText == "iPhone" || data[i].childNodes[2].innerText == "iPad" || data[i].childNodes[2].innerText == "Apple Watch" ? "ios" : "mac")}</string>`;
    deviceListString += `<key>deviceIdentifier</key><string>${data[i].childNodes[1].innerText}</string>`;
    deviceListString += `<key>deviceName</key><string>${data[i].childNodes[0].innerText}</string>`;
    deviceListString += `</dict>`
}

console.log(header + deviceListString + footer);

1

现在就可以使用,并且兼容所有设备,包括 iPhone、iPad 和 Mac:

var data = document.querySelectorAll(".infinite-scroll-component .row");
var csvOutput = "Device ID  Device Name Device Platform\n"

for (var i = 1; i < data.length; i++) {
    let name = data[i].childNodes[0].childNodes[0].textContent;
    let identifier = data[i].childNodes[1].childNodes[0].textContent;
    let type = data[i].childNodes[2].childNodes[0].textContent;
    switch(type) {
        case "iPhone":
        case "iPad":
            type = "ios";
            break;
        case "Mac":
            type = "mac";
            break;
    }
    let device = [identifier, name, type].join("    ") + "\n";
    csvOutput += device;
}

console.log(csvOutput);

如果导入失败,请检查您是否使用了特殊字符的设备名称。


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