Apple personal developer automatic contracting (super signing) tutorial - UDID acquisition

Recently, ios15 was updated, and the enterprise signed and upgraded, resulting in being blocked   I think of the 100 binding places of Apple's personal development account. Due to the nature of some app s, I can't use the super signing function of a third party, so I look around and piece it up.

Summarize the process:

        Preparation materials: developer account renewal, developer account Certificate creation (Certificates) and identity authentication creation (Identifiers). Certificate creation and identity authentication creation can be implemented in the interface. In order to save effort, they are created in the background   Sign In - Apple

         1, Get user equipment information  

        2, The user equipment information is uploaded to apple in the background


Deficiencies, we need more guidance.

Get user equipment information

First, get the user installation description file of UDID   To get the user's device information

Operation step 1: the user downloads the description file     2. Set up a common installation description file     3. After installation, the required information will be sent to the server through the notification address in the description file   4. Server receiving message processing    

This is the process of obtaining udid. The following is the specific method

1. Description file preparation

The following is the content of the description file, which can be modified according to your own situation

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">
        <string></string>  <!-- Notification address -- >
        <string>UDID</string>			<!--Add the parameters you need to obtain-->
<string>brief introduction</string>
<string>brief introduction</string>
<string>Profile Service</string>

Copy the above code to local   Save it with the suffix demo.mobileconfig and put it on the server side  

Configure MIME in the server

Extension:. mobileconfig

Type: application / x-application-aspen-config

Create a new html     There is a link to the description file download just now

<a href="./demo.mobileconfig">Point me</a>

After opening in Apple's default browser, click to prompt   Is it installed   Click allow

In the settings common description file   Click the corresponding description file to view the configuration details

2. Server

After the user installs the description file, Apple will send the user device information to the address configured in the file

<string></string>  <!-- Notification address -- >

The sending content is as follows:

0?	*?H??
??0?10	  0?	*?H??
??$???<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">
	<string>35 ***** ******* 2</string>
 0Z10	UUS10U

The front and back parts are garbled     Just intercept the middle xml part

. net as an example

 int start = curTxt.IndexOf("<!DOCTYPE plist");        //Get xml start index
 int end = curTxt.IndexOf("</plist>");                //Gets the index at the end of the xml
 string xml = curTxt.Substring(start, end - start + "</plist>".Length);        //Get xml content

In the obtained xml content, we only use   Module of dict node   The data inside is a row of key s   A line of value, so you can loop the node object to get the udid

string udid = string.Empty;
int index = 0;
foreach (XmlElement item in q.ChildNodes)
      switch (item.InnerText.ToUpper())
            case "UDID":                
                udid = q.ChildNodes[index + 1].InnerText;            //After the corresponding key is obtained, the index is added with 1 to obtain the value

Here we are   The user UDID has been obtained

Finally, we need to do a 301 redirect here, otherwise Apple will think that the description file installation failed

string url = "https://*********/test.html?UDID=123*************23;

Response.StatusCode = 301;
Response.Status = "301 Moved Permanently";
Response.AppendHeader("Location", url);
Response.AppendHeader("Cache-Control", "no-cache");  

Here we are   Get user UDID processing completed

Tags: C# AppStore

Posted on Thu, 18 Nov 2021 03:20:54 -0500 by nickdd