<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: DataStack</title>
    <description>The latest articles on DEV Community by DataStack (@datastack).</description>
    <link>https://dev.to/datastack</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3561605%2F18c2b1ef-7b1b-4443-9772-f2ed06028474.png</url>
      <title>DEV Community: DataStack</title>
      <link>https://dev.to/datastack</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/datastack"/>
    <language>en</language>
    <item>
      <title>How iOS Projects Compile: A Full Breakdown of the Build Pipeline and Common Build Approaches</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Wed, 23 Sep 2026 10:31:32 +0000</pubDate>
      <link>https://dev.to/datastack/how-ios-projects-compile-a-full-breakdown-of-the-build-pipeline-and-common-build-approaches-250e</link>
      <guid>https://dev.to/datastack/how-ios-projects-compile-a-full-breakdown-of-the-build-pipeline-and-common-build-approaches-250e</guid>
      <description>&lt;p&gt;A while back I was mentoring a newcomer who asked a pretty basic question: after you hit Run in Xcode, what actually happens? How does an iOS project go from a folder to that app on your phone? The question looks simple, but unpacked it's a multi-stage pipeline, and each stage has its own job. Once you understand how iOS projects are compiled, you can troubleshoot many build errors yourself. This article breaks down the whole process and then looks at which build entry points exist besides Xcode.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Complete Build Pipeline
&lt;/h2&gt;

&lt;p&gt;An iOS project isn't compiled in one step. The source code is first processed file by file: Swift code goes through swiftc, Objective-C and C/C++ go through clang, and each source file is compiled into a machine-code object file. Syntax errors and type errors surface at this stage. Next comes linking: the linker merges the scattered object files into an executable and resolves references to system frameworks (UIKit, Foundation, and so on). The most common error at this stage is Undefined symbols. Then comes resource processing: images, xibs, and storyboards are compiled into the corresponding resource formats and packaged into the bundle. Finally, signing: the executable is signed with a certificate and provisioning profile, and an unsigned app can't be installed on a real device.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Gets Produced
&lt;/h2&gt;

&lt;p&gt;Once these steps finish, you get a .app directory containing the executable, the resources, and Info.plist. Installing on a real device or shipping to the store requires an .ipa: an installation package that arranges the .app according to signing requirements. For development and debugging, a .app is enough; .ipa is only needed for distribution and app review submission.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building in Xcode
&lt;/h2&gt;

&lt;p&gt;Hitting Run in Xcode is the one-click version of this pipeline: compile, link, sign, install to the simulator or a real device, and launch, all at once. Hitting Build only compiles and links—no installation, no launch—which is handy when you just want to verify that the code compiles. Xcode wraps these steps in its build system and hides the details from developers, which is good enough for day-to-day work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Command-Line Builds
&lt;/h2&gt;

&lt;p&gt;The command line is another entry point. xcodebuild is the standard tool: specify the workspace, scheme, and configuration, and it compiles in the terminal. Most iOS builds on CI rely on it; combined with fastlane, it can handle automatic signing, packaging, and uploading. This route is well suited to automation, but the drawback is that the environment requirements don't change—xcodebuild depends on the toolchain installed by Xcode, so it's unusable on a machine without Xcode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Without Xcode
&lt;/h2&gt;

&lt;p&gt;If your scenario is that you don't want to install Xcode—doing cross-platform development on Windows, say, or a Mac whose disk can't spare those ten-plus GB—there are also solutions with a built-in toolchain. &lt;strong&gt;KXApp&lt;/strong&gt; (快蝎) ships with a complete build toolset, so you can compile iOS projects without installing or updating Xcode. It supports Swift, Objective-C, and Flutter project types; connect an iPhone and build-and-install to the real device in one click; when development is done, generate an installation package in one click, covering both test distribution and store submission scenarios. In &lt;strong&gt;KXApp&lt;/strong&gt;, everything from creating a project to compiling and installing is a closed loop, so teams that don't want to maintain a full Xcode environment can skip the time spent fighting with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Diagnose Common Build Errors
&lt;/h2&gt;

&lt;p&gt;The most common categories of build errors: signing errors, where the certificate and provisioning profile don't match—check whether the certificate type and the provisioning profile in your developer account correspond to the same App ID; deployment target issues, where the project's OS version requirement is higher than the current toolchain supports—lower the target or switch to a newer toolchain; linking errors, where Undefined symbols indicates a missing framework—add the corresponding library under Build Phases &amp;gt; Link Binary With Libraries.&lt;/p&gt;

&lt;p&gt;Under the hood, compiling is the toolchain doing the work; Xcode, xcodebuild, and KXApp's built-in toolchain are just different entry points. Understand each stage of the pipeline and you won't panic no matter which entry point you use.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
      <category>development</category>
      <category>flutter</category>
    </item>
    <item>
      <title>TraceEagle Code Generation and API Doc Export, One-Click Request Code: cURL to Python Export and OpenAPI API Doc Generation</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Tue, 22 Sep 2026 10:01:24 +0000</pubDate>
      <link>https://dev.to/datastack/traceeagle-code-generation-and-api-doc-export-one-click-request-code-curl-to-python-export-and-5nl</link>
      <guid>https://dev.to/datastack/traceeagle-code-generation-and-api-doc-export-one-click-request-code-curl-to-python-export-and-5nl</guid>
      <description>&lt;h1&gt;
  
  
  Generate Code and Export API Documentation
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;This article shows how to turn captured requests into &lt;strong&gt;artifacts&lt;/strong&gt;: convert a single request into runnable &lt;strong&gt;code&lt;/strong&gt; with one click (cURL / Python / JavaScript / Go / OkHttp), automatically merge an entire session into standard &lt;strong&gt;API documentation (OpenAPI)&lt;/strong&gt;, or export it to the universal &lt;strong&gt;HAR&lt;/strong&gt; format; session files captured elsewhere can also be &lt;strong&gt;imported&lt;/strong&gt; for further analysis. No manual copying or writing—everything comes directly from real packet captures.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1. When to Use It
&lt;/h2&gt;

&lt;p&gt;Use it if any of the following applies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want to &lt;strong&gt;reproduce a real captured request in a script / project&lt;/strong&gt;, or send it to a colleague (anyone can run a cURL command).&lt;/li&gt;
&lt;li&gt;You have a working request in the request builder and want to &lt;strong&gt;export it as code&lt;/strong&gt; to continue development.&lt;/li&gt;
&lt;li&gt;You have captured a segment of API traffic and need a deliverable, importable &lt;strong&gt;OpenAPI&lt;/strong&gt; API document—for third-party integration, supplementing backend docs, or generating test cases.&lt;/li&gt;
&lt;li&gt;You want to &lt;strong&gt;export this packet capture in a universal format&lt;/strong&gt; (HAR) for delivery, archiving, or handing off to another tool.&lt;/li&gt;
&lt;li&gt;You have session files captured by someone else / in production / by another tool and want to &lt;strong&gt;bring them in&lt;/strong&gt; to continue analysis using decoding, host profiles, and request diff here.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;TraceEagle is installed and running.&lt;/li&gt;
&lt;li&gt;To generate code / export OpenAPI / export HAR: first &lt;strong&gt;capture requests&lt;/strong&gt; (any capture method works; see Quick Start. As long as there is data in the request list, you can proceed.&lt;/li&gt;
&lt;li&gt;For 'Import External Session' only: no need to capture packets first; just have the corresponding session file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Step-by-Step Operations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  A. Generate Code for a Single Request and Copy It
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;In the request list, select a request you want to reproduce or share.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Right-click → 'Generate Code…'&lt;/strong&gt;. (You can also configure a request in Request Construction and Replay, then click 'Generate Code'; the export method is the same.)&lt;/li&gt;
&lt;li&gt;At the top, &lt;strong&gt;switch language&lt;/strong&gt; to regenerate instantly; there are 5 formats in total:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;cURL&lt;/strong&gt; (paste into a terminal and run)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JavaScript&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Go&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OkHttp&lt;/strong&gt; (Java / Kotlin)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Copy&lt;/strong&gt;, then paste it into a terminal / project / send it to a colleague.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The generated code is &lt;strong&gt;complete&lt;/strong&gt;: request method, URL, &lt;strong&gt;all request headers, and request body&lt;/strong&gt; are included; request headers also &lt;strong&gt;keep their original order and duplicates are allowed&lt;/strong&gt;, preserved exactly as-is, so the result matches the real request when run.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Common tools often &lt;strong&gt;reorder and deduplicate&lt;/strong&gt; request headers when generating code, which makes reproduction inaccurate; here they are preserved as-is for more faithful reproduction.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  B. Export an Entire Session to OpenAPI / HAR
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Export OpenAPI (API Documentation)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;After capturing a segment of API traffic, open &lt;strong&gt;Export API Documentation (OpenAPI)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;It &lt;strong&gt;analyzes first, then exports&lt;/strong&gt;: it automatically identifies APIs from the current session and lists them for you to select. The list directly shows each API's &lt;strong&gt;method, path, occurrence count, and observed status codes&lt;/strong&gt;, giving you a clear overview.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Select&lt;/strong&gt; the APIs you want (only selected ones are exported, avoiding noise). The tool automatically helps you:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Merge paths&lt;/strong&gt;: templatize paths containing specific IDs, e.g. &lt;code&gt;/users/123&lt;/code&gt; → &lt;code&gt;/users/{id}&lt;/code&gt;, merging multiple requests to the same API into one entry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infer structure&lt;/strong&gt;: merge request / response JSON structures, group responses by status code, and organize path variables into parameters.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;On the right, &lt;strong&gt;preview in real time&lt;/strong&gt; the generated standard &lt;strong&gt;OpenAPI 3.0&lt;/strong&gt; document. Once confirmed, click &lt;strong&gt;Copy&lt;/strong&gt; or &lt;strong&gt;Download&lt;/strong&gt; and import it into any OpenAPI-supported API tool to continue working.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Export HAR (Universal Exchange Format)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On the session, select &lt;strong&gt;Export HAR&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The entire packet capture is exported with one click as a standard &lt;strong&gt;HAR 1.2&lt;/strong&gt; file for delivery, archiving, or handing off to another tool for further analysis.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  C. Import External Sessions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Import Session&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the file to import—&lt;strong&gt;HAR 1.2&lt;/strong&gt;, &lt;code&gt;.pcap&lt;/code&gt; / &lt;code&gt;.pcapng&lt;/code&gt;, and session files exported by common packet capture tools are supported.&lt;/li&gt;
&lt;li&gt;After import, packets captured by others appear in the request list, and you can &lt;strong&gt;continue viewing, comparing, and exporting&lt;/strong&gt; as usual, as well as continue analysis with decoding and host profiles here.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  4. Verification: Confirm You Have the Artifacts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generate Code&lt;/strong&gt;: the preview refreshes instantly when switching languages; if the cURL command runs successfully in a terminal and returns the same result as captured, it means request headers / body were fully included.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export OpenAPI&lt;/strong&gt;: after selecting APIs, the right-side preview shows methods, paths (already templatized as &lt;code&gt;/{id}&lt;/code&gt;), parameters, and response structures; the copied / downloaded result is an OpenAPI 3.0 document that API tools can import.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export HAR / Import Session&lt;/strong&gt;: after export you get a &lt;code&gt;.har&lt;/code&gt; file; after importing an external file, corresponding request entries appear in the request list, and clicking one shows full details.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Tips and Troubleshooting
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;Likely Cause&lt;/th&gt;
&lt;th&gt;What to Do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Generated code does not match the real request when run&lt;/td&gt;
&lt;td&gt;Request header order was manually changed, or a header was missed&lt;/td&gt;
&lt;td&gt;Regenerate code from the original request; header order and duplicates are preserved by default, so no manual fixing is needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Desired language is not available&lt;/td&gt;
&lt;td&gt;Currently five formats are provided: cURL / Python / JavaScript / Go / OkHttp&lt;/td&gt;
&lt;td&gt;Export the closest one first (e.g. cURL), then convert as needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unrelated APIs appear in the OpenAPI list&lt;/td&gt;
&lt;td&gt;The session contains noise traffic&lt;/td&gt;
&lt;td&gt;In the 'analyze first, then export' list, &lt;strong&gt;check only&lt;/strong&gt; the APIs you want; unselected ones are not exported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The same API is split into multiple entries&lt;/td&gt;
&lt;td&gt;Paths contain specific IDs and were not merged&lt;/td&gt;
&lt;td&gt;Merging templatizes paths like &lt;code&gt;/users/123&lt;/code&gt; into &lt;code&gt;/users/{id}&lt;/code&gt;; if they are still separate, confirm their methods / path structures are consistent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Want to analyze packets captured in production / by a colleague&lt;/td&gt;
&lt;td&gt;Data is not in the local session&lt;/td&gt;
&lt;td&gt;Use 'Import Session' to bring in HAR 1.2 / &lt;code&gt;.pcap&lt;/code&gt; / &lt;code&gt;.pcapng&lt;/code&gt; files; after import, view, compare, and export as usual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Want to hand off to another tool that does not recognize this tool's format&lt;/td&gt;
&lt;td&gt;A universal exchange format is needed&lt;/td&gt;
&lt;td&gt;Export &lt;strong&gt;HAR 1.2&lt;/strong&gt; (for delivery, archiving, cross-tool use) or &lt;strong&gt;OpenAPI 3.0&lt;/strong&gt; (universal API documentation)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Before generating code, inspect the request clearly, switch views, and decode it: see Data Viewing and Decoding&lt;/li&gt;
&lt;li&gt;To fine-tune a request before exporting it as code, or modify and resend it: see Request Construction and Replay.&lt;/li&gt;
&lt;li&gt;To compare an imported session line by line with the local one: see Request Diff.&lt;/li&gt;
&lt;li&gt;For private / in-house protocols, if you want the tool to understand them before export: see Custom Protocol Decoding.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mobile</category>
      <category>software</category>
      <category>networking</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What Can a Free Apple ID Do Without Joining the Paid Developer Program?</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Sun, 20 Sep 2026 10:33:30 +0000</pubDate>
      <link>https://dev.to/datastack/what-can-a-free-apple-id-do-without-joining-the-paid-developer-program-3e4a</link>
      <guid>https://dev.to/datastack/what-can-a-free-apple-id-do-without-joining-the-paid-developer-program-3e4a</guid>
      <description>&lt;h1&gt;
  
  
  What Can a Free Apple ID Do Without Joining the Paid Developer Program?
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;A free Apple ID (without joining the $99/year Apple Developer Program) can use part of the development and testing features, but it has clear limitations and cannot officially publish to the App Store.&lt;/strong&gt; AppUploader has special support for free accounts, letting you get the development and testing workflow working before you decide to pay.&lt;/p&gt;

&lt;h2&gt;
  
  
  What can a free account use, and what are the limitations?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Free account&lt;/th&gt;
&lt;th&gt;Paid account (Apple Developer Program)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Login method&lt;/td&gt;
&lt;td&gt;App login only (no Xcode required)&lt;/td&gt;
&lt;td&gt;Web login / API key / App login all supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signing certificate validity&lt;/td&gt;
&lt;td&gt;7 days only&lt;/td&gt;
&lt;td&gt;Normal validity, renewable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Number of test devices that can be registered&lt;/td&gt;
&lt;td&gt;Up to 3&lt;/td&gt;
&lt;td&gt;Up to 100 per device type&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer portal features such as provisioning profiles and certificates&lt;/td&gt;
&lt;td&gt;Partially restricted&lt;/td&gt;
&lt;td&gt;Fully available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;App Store Connect app management, official publishing&lt;/td&gt;
&lt;td&gt;Unavailable&lt;/td&gt;
&lt;td&gt;Available&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How do free accounts log in?
&lt;/h2&gt;

&lt;p&gt;When adding an account, select &lt;strong&gt;"App Login"&lt;/strong&gt; (uses the App protocol, no Xcode required). This is a login method designed specifically for unpaid free Apple IDs. The other two methods, web login and API key, usually require the account to have joined the paid Apple Developer Program.&lt;/p&gt;

&lt;h2&gt;
  
  
  When must you upgrade to a paid membership?
&lt;/h2&gt;

&lt;p&gt;If you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Signing certificates valid long-term (not 7 days);&lt;/li&gt;
&lt;li&gt;To register more than 3 test devices;&lt;/li&gt;
&lt;li&gt;To create apps, submit for review, and officially release on App Store Connect;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;you need to go to developer.apple.com to purchase an Apple Developer Program membership. After purchase, return to the &lt;strong&gt;"Account Overview"&lt;/strong&gt; page in AppUploader. The account status will automatically update to show that the paid program has been joined. Your previous operations under the free account are unaffected, and you can directly switch to web login or generate an API key to use the full functionality.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
    </item>
    <item>
      <title>CaptureEagle Packet Capture Root Certificate Management and Installation</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Sun, 20 Sep 2026 10:01:43 +0000</pubDate>
      <link>https://dev.to/datastack/captureeagle-packet-capture-root-certificate-management-and-installation-3hj5</link>
      <guid>https://dev.to/datastack/captureeagle-packet-capture-root-certificate-management-and-installation-3hj5</guid>
      <description>&lt;h1&gt;
  
  
  Certificate Management and Installation
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;To capture HTTPS with a proxy, the first step is to make devices and applications &lt;strong&gt;trust this tool's root certificate&lt;/strong&gt;—otherwise you get TLS errors and cannot decrypt. Certificate management makes this one-click and comprehensive: local machine, mobile, and even apps that "still don't trust it despite system certificates installed" can all get the certificate installed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1. One-click installation on the local machine
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Check at any time whether &lt;strong&gt;the local machine already trusts&lt;/strong&gt; this tool's root certificate.&lt;/li&gt;
&lt;li&gt;One-click &lt;strong&gt;"Install to local machine and trust"&lt;/strong&gt;. Install once, and all subsequent sessions can decrypt HTTPS.&lt;/li&gt;
&lt;li&gt;When needed, &lt;strong&gt;download the root certificate&lt;/strong&gt; (multiple formats) for manual distribution.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Mobile QR-code installation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Generate a &lt;strong&gt;QR code&lt;/strong&gt; for every available LAN address. Scan it with the mobile camera, open the installation page, and install the certificate—&lt;strong&gt;both iOS and Android are supported&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;iOS also provides one-click &lt;strong&gt;configuration profile&lt;/strong&gt; installation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rooted Android devices&lt;/strong&gt; can install the root certificate directly into the &lt;strong&gt;system certificate store&lt;/strong&gt;, eliminating manual import.&lt;/li&gt;
&lt;li&gt;The root certificate is globally universal; each device only needs to &lt;strong&gt;trust it once&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Full certificate coverage: even apps that "don't trust system certificates" can be decrypted
&lt;/h2&gt;

&lt;p&gt;Some apps &lt;strong&gt;still cannot be decrypted even after system certificates are installed&lt;/strong&gt;—they only trust their own certificate list. Full certificate coverage can install the root certificate &lt;strong&gt;directly into these apps&lt;/strong&gt;, allowing them to be decrypted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Java applications&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Python applications&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;curl / wget / Ruby / PHP / git and other command-line and scripting tools&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Firefox / Thunderbird and other software&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tool automatically discovers these applications on the local machine (including running ones) and shows "installed / not installed" for each. If auto-discovery misses some, you can &lt;strong&gt;manually enter the path&lt;/strong&gt; to add them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is exactly the longstanding pain point of ordinary packet capture tools: the certificate is installed, but the application still cannot be decrypted. Full certificate coverage is designed specifically for this.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  4. Client certificates
&lt;/h2&gt;

&lt;p&gt;If the target site requires a &lt;strong&gt;client certificate&lt;/strong&gt; and you happen to have one, you can import it (including the password) on the "Client / Domain Certificate" page. Then you can decrypt these sites normally.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. When to use
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Before using the proxy to capture HTTPS for the first time, first make the local machine / mobile trust the root certificate.&lt;/li&gt;
&lt;li&gt;Mobile packet capture: scan the QR code to install the certificate.&lt;/li&gt;
&lt;li&gt;When the target is a Java / Python / curl / Firefox app and decryption fails: use full certificate coverage to install the certificate into them.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mobile</category>
      <category>software</category>
      <category>networking</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Xcode Programming Languages, Key Features, and Beginner Guide to Lightweight Alternatives</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Wed, 16 Sep 2026 10:11:15 +0000</pubDate>
      <link>https://dev.to/datastack/xcode-programming-languages-key-features-and-beginner-guide-to-lightweight-alternatives-40ef</link>
      <guid>https://dev.to/datastack/xcode-programming-languages-key-features-and-beginner-guide-to-lightweight-alternatives-40ef</guid>
      <description>&lt;p&gt;Two weeks ago, a friend who had just switched to iOS development asked me what languages Xcode actually supports and what its features are — opening the app and facing a wall of panels, they had no idea where to start. This is actually a very common problem for beginners. So here I'll go through the programming languages and core features Xcode supports, then talk about the common barriers and pain points for newcomers, and a lighter path to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Programming Languages Xcode Supports
&lt;/h2&gt;

&lt;p&gt;Xcode's official primary languages are Swift and Objective-C; these two are also the most commonly used languages for iOS app development, and the vast majority of iOS projects run on them. Beyond that, Xcode also natively supports C and C++, so you can write low-level modules and C-language interfaces, which comes in handy for performance-sensitive code. Metal Shading Language is used for GPU graphics programming, for high-performance rendering. For cross-platform projects, Xcode can also compile the native iOS part of Flutter and the iOS build output of Unity, though the editing experience is limited, and most of the time you still write code in the respective editors. Knowing the list of programming languages Xcode supports is the first lesson in iOS development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Code editor:&lt;/strong&gt; Smart completion, syntax highlighting, refactoring, code navigation, version comparison; Swift's completion and error reporting are both quite good.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debugger (LLDB):&lt;/strong&gt; Breakpoint debugging, variable inspection, memory view, and you can also run LLDB commands directly in the console.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interface Builder:&lt;/strong&gt; Visually build UIs by drag and drop; visual editing of storyboard and xib files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simulator:&lt;/strong&gt; A built-in iOS simulator; switch between device models at any time, and run apps quickly to verify UI and interactions without connecting a real device.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instruments:&lt;/strong&gt; A suite of performance analysis tools — Time Profiler for CPU, Allocations for memory, Energy Log for energy usage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Packaging and release:&lt;/strong&gt; Archive to export an IPA, plus the whole workflow with Organizer for managing certificates, signing, and uploading to the App Store.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Barriers for Beginners
&lt;/h2&gt;

&lt;p&gt;Xcode is feature-complete, but there are a few obvious hurdles for beginners: the installer is over a dozen GB, so downloading and updating both take a long time, and machines with smaller hard drives have little space left after installation; before debugging on a real device you have to configure certificates and provisioning profiles and register a developer account, which is a complicated process; and there are many panels — the editor, debug area, simulator, and inspector are all separate — so it's easy to fail to find the feature you're looking for the first time.&lt;/p&gt;

&lt;p&gt;Developers on cross-platform projects install Xcode but don't use most of its features, while it still occupies a dozen-plus GB of disk space. These barriers put off quite a few people who are just starting out, which is why many beginner tutorials recommend starting with lighter tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lightweight Alternative
&lt;/h2&gt;

&lt;p&gt;If you just want to learn Swift, write Flutter projects, or don't want to be held back by Xcode's complexity, a lightweight iOS development IDE like &lt;strong&gt;KXApp&lt;/strong&gt; is another path. It bundles a compilation toolchain — no need to install Xcode or the Command Line Tools — and its installer is much smaller. It supports Swift, Objective-C, and Flutter projects, and creates project structures with one click. For real-device debugging you don't have to configure certificates yourself; just connect your iPhone to the computer and click build-and-install to run it.&lt;/p&gt;

&lt;p&gt;Based on a VS Code editing interface, smart completion and an AI assistant work out of the box, so the learning curve is much lower. When a project is finished, you can build an IPA with one click for test distribution or App Store submission. For beginners who want to get up to speed with iOS development quickly, getting the first real-device app running to build confidence, and then deciding whether to dig deeper into Xcode, is a very practical approach.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
      <category>development</category>
      <category>flutter</category>
    </item>
    <item>
      <title>Tutorial: Register Test Devices by QR Code + Install IPA Wirelessly to iPhone</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Wed, 16 Sep 2026 10:10:35 +0000</pubDate>
      <link>https://dev.to/datastack/tutorial-register-test-devices-by-qr-code-install-ipa-wirelessly-to-iphone-547p</link>
      <guid>https://dev.to/datastack/tutorial-register-test-devices-by-qr-code-install-ipa-wirelessly-to-iphone-547p</guid>
      <description>&lt;h1&gt;
  
  
  Tutorial: Register Test Devices by QR Code + Install IPA Wirelessly to iPhone
&lt;/h1&gt;

&lt;p&gt;In iOS development and testing, two tasks often come up: registering test devices' UDIDs with a developer account and installing a test build on a phone. Traditionally, both require connecting to a Mac with a data cable. With AppUploader (Kaixin Shangjia), both steps can be done by scanning a QR code with a phone and operating wirelessly over the LAN.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Register Test Device UDIDs by QR Code
&lt;/h2&gt;

&lt;p&gt;Open the Devices page, click Register Device, and choose the QR code method:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make sure the phone and computer are on the &lt;strong&gt;same Wi-Fi network&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Use the phone camera to scan the QR code on the page.&lt;/li&gt;
&lt;li&gt;Tap Continue, then tap Allow to download a temporary provisioning profile.&lt;/li&gt;
&lt;li&gt;On the phone, go to Settings → Profile Downloaded and tap Install.&lt;/li&gt;
&lt;li&gt;After installation is complete, the UDID is automatically reported and filled into the registration form. Enter a device name, select the platform, and click Register.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you have a data cable on hand, you can also use USB Connection: connect the iPhone/iPad and tap Trust on the device. The system will automatically detect the connected device, and the UDID will be filled in automatically (on Windows, install the Apple device driver or iTunes first).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Each device type is limited to 100 registrations, and &lt;strong&gt;devices can only be added, not deleted&lt;/strong&gt; (accounts not enrolled in a paid developer program can register at most 3). If you need to register multiple devices at once, use Batch Import. Enter one device's UDID and name per line, with a maximum of 100 devices per import.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 2: Install an IPA Wirelessly to the Phone
&lt;/h2&gt;

&lt;p&gt;Open the Files &amp;amp; Submit page, upload or drag in the IPA file you want to install, select it, and click Install to Phone. The QR code method is also available:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connect the iPhone/iPad and the computer to the same Wi-Fi.&lt;/li&gt;
&lt;li&gt;Use the system camera to scan the QR code displayed on the page.&lt;/li&gt;
&lt;li&gt;Tap the installation prompt that appears at the top of the phone to confirm installation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Before installation, the system automatically detects the provisioning profile type (Development / Ad Hoc / Enterprise Distribution / App Store). If installation may fail—for example, if this device's UDID is not within the authorization scope of the provisioning profile embedded in the IPA—it will indicate the specific issue. You can choose to Install Anyway or Cancel Installation.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Two Steps Connect
&lt;/h2&gt;

&lt;p&gt;If installation fails with "device is not within the authorized range," it means the device UDID you registered in Step 1 has not yet been included in the provisioning profile corresponding to this IPA. Go back to the Provisioning Profiles page, find the corresponding profile, and click Rebuild so that it includes the newly registered device. Then export a new IPA and install it again. You do not need to go through the certificate process again.&lt;/p&gt;

&lt;p&gt;The entire process requires no data cable, Xcode, or TestFlight, making it suitable for frequently installing new builds on test devices.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
    </item>
    <item>
      <title>View and Automatically Decode Captured Data with TraceEagle: JSON Pretty, Hex View, Media Preview</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Tue, 15 Sep 2026 10:07:59 +0000</pubDate>
      <link>https://dev.to/datastack/view-and-automatically-decode-captured-data-with-traceeagle-json-pretty-hex-view-media-preview-36oi</link>
      <guid>https://dev.to/datastack/view-and-automatically-decode-captured-data-with-traceeagle-json-pretty-hex-view-media-preview-36oi</guid>
      <description>&lt;h1&gt;
  
  
  Data Viewing and Decoding
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Capturing is only the beginning; &lt;strong&gt;understanding&lt;/strong&gt; is what counts. This article shows you how to read a request after opening it: switch the viewing mode independently on both the request and response sides (Structured / Pretty Text / Hex / Auto Detect), automatically decompress compressed data, pretty-print JSON/XML/forms/protobuf, and preview images, videos, and audio directly in the details. Most of the time you &lt;strong&gt;don't need to configure anything&lt;/strong&gt;—just open it and you'll see the most readable form. If you run into garbled data, the end of this article tells you what to do next.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1. When to Use
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;After capturing traffic, you want to &lt;strong&gt;read each request clearly&lt;/strong&gt;—what the request headers, body, and response actually sent.&lt;/li&gt;
&lt;li&gt;The response opens as a bunch of compressed bytes or looks like garbled data, and you want to &lt;strong&gt;switch views&lt;/strong&gt; to see it clearly.&lt;/li&gt;
&lt;li&gt;You want to inspect a piece of data as JSON / hex / raw message side by side.&lt;/li&gt;
&lt;li&gt;You captured images, videos, audio, PDFs, etc., and want to &lt;strong&gt;preview directly&lt;/strong&gt; instead of saving and opening them separately.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're dealing with non-HTTP proprietary / binary protocols that standard views still can't parse, see Custom Protocol Decoding.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You have already captured at least one piece of traffic (if not, see Quick Start or Capture Traffic from a Specific Program).&lt;/li&gt;
&lt;li&gt;To see HTTPS plaintext, this connection must be decrypted (TLS in the details shows 'Decrypted'). Undecrypted connections can still be viewed, but only the raw sent/received bytes are visible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No&lt;/strong&gt; extra configuration is required. Viewing and decoding work right after you open them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Step-by-Step
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Open Details
&lt;/h3&gt;

&lt;p&gt;Click any item in the request list to open its details. The upper half is the &lt;strong&gt;request&lt;/strong&gt; and the lower half is the &lt;strong&gt;response&lt;/strong&gt;. The two sides are &lt;strong&gt;independent&lt;/strong&gt; and do not affect each other.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Choose a Viewing Mode ('View as')
&lt;/h3&gt;

&lt;p&gt;Each side has a row of viewing modes at the top; switch as needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structured&lt;/strong&gt;: start line + request header table + smart body. This is the default view; look at it first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text · Pretty&lt;/strong&gt;: automatically indent and format based on content type—JSON, XML, and forms (&lt;code&gt;x-www-form-urlencoded&lt;/code&gt;) are laid out readably with one click.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text · Raw&lt;/strong&gt;: show the complete message as raw text, without changing a single byte.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hex&lt;/strong&gt;: a hex viewer that shows offsets, highlights hex and ASCII side by side with linked highlighting, and can save to a binary file with one click; even very large data can be viewed smoothly without lag.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto Detect&lt;/strong&gt;: hands data to the engine for deep decoding and renders it as a layer-by-layer expandable decode tree—compression nested inside compression, frames nested inside frames, all can be drilled into layer by layer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want the request side in raw view and the response side in structured view, just click each side's button; the two sides can use different views.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tip: 'View as' only switches the &lt;strong&gt;presentation layer&lt;/strong&gt;. JSON, XML, and forms are not separate buttons; they are formats automatically handled by &lt;strong&gt;Text · Pretty&lt;/strong&gt;. Selecting &lt;strong&gt;Text · Pretty&lt;/strong&gt; will automatically recognize and format them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Let It Auto-Decompress and Auto-Pretty
&lt;/h3&gt;

&lt;p&gt;In most cases you &lt;strong&gt;don't need to do anything&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responses compressed with gzip / brotli(br) / deflate / zstd are &lt;strong&gt;automatically decompressed&lt;/strong&gt; before display; multiple stacked encodings (such as &lt;code&gt;gzip, br&lt;/code&gt;) are also decoded layer by layer from outer to inner.&lt;/li&gt;
&lt;li&gt;If the body is JSON / XML / forms / protobuf / gRPC, it is &lt;strong&gt;automatically recognized and pretty-printed&lt;/strong&gt;. protobuf/gRPC can be decoded into field numbers, types, and values without a &lt;code&gt;.proto&lt;/code&gt; file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Use Hex to View Raw Bytes
&lt;/h3&gt;

&lt;p&gt;When you want to verify raw bytes, or the data itself is binary, switch to &lt;strong&gt;Hex&lt;/strong&gt;. Click a byte, and hex and the ASCII on the right will highlight in a linked way; when you need to keep a record, click Save to export it as a binary file.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Preview Media
&lt;/h3&gt;

&lt;p&gt;When the body is an image, video, or audio, the details view &lt;strong&gt;previews / plays it inline directly&lt;/strong&gt; and marks the type and size, so you don't need to save and open it separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Verification: Confirm You're Reading Plaintext
&lt;/h2&gt;

&lt;p&gt;A correctly read entry should look like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the &lt;strong&gt;Structured&lt;/strong&gt; view, the request line, request headers, and body are all present, with fields clearly displayed.&lt;/li&gt;
&lt;li&gt;A compressed response opens as &lt;strong&gt;readable text&lt;/strong&gt; (such as well-indented JSON), not a bunch of compressed bytes.&lt;/li&gt;
&lt;li&gt;If it is an image / video or other media, it can be &lt;strong&gt;seen / played directly&lt;/strong&gt; in the details.&lt;/li&gt;
&lt;li&gt;Switch to &lt;strong&gt;Hex&lt;/strong&gt;: offset, hex, and ASCII columns are aligned, and clicking a byte highlights linked positions.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Troubleshooting and Tips
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;Likely Cause&lt;/th&gt;
&lt;th&gt;What to Do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Opens as a bunch of garbled data / unreadable bytes&lt;/td&gt;
&lt;td&gt;Not a standard HTTP body; may be a proprietary / binary protocol, or an undecrypted raw stream&lt;/td&gt;
&lt;td&gt;First switch to &lt;strong&gt;Auto Detect&lt;/strong&gt; and let the engine try to decode it; if it still can't be parsed, use custom decoding—see Custom Protocol Decoding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The response looks compressed and cannot be opened&lt;/td&gt;
&lt;td&gt;Rare multi-layer or non-standard encoding&lt;/td&gt;
&lt;td&gt;Switch to &lt;strong&gt;Auto Detect&lt;/strong&gt; and expand the decode tree layer by layer; or switch to &lt;strong&gt;Hex&lt;/strong&gt; to verify the raw bytes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JSON / XML is crammed into one line&lt;/td&gt;
&lt;td&gt;You are currently in &lt;strong&gt;Text · Raw&lt;/strong&gt; or &lt;strong&gt;Structured&lt;/strong&gt;, where no pretty-printing is applied&lt;/td&gt;
&lt;td&gt;Switch to &lt;strong&gt;Text · Pretty&lt;/strong&gt; for automatic indentation and formatting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You can only see raw sent/received bytes, with no request headers&lt;/td&gt;
&lt;td&gt;This connection is &lt;strong&gt;undecrypted&lt;/strong&gt; (non-HTTP or TLS not decrypted)&lt;/td&gt;
&lt;td&gt;Check whether TLS in the details shows 'Decrypted'; for decryption-related topics, see Application-Layer Capture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You want to verify the original text with not a single byte changed&lt;/td&gt;
&lt;td&gt;Pretty / Structured views reformat the content&lt;/td&gt;
&lt;td&gt;Use &lt;strong&gt;Text · Raw&lt;/strong&gt; or &lt;strong&gt;Hex&lt;/strong&gt;; neither modifies the original content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Large responses feel heavy to open&lt;/td&gt;
&lt;td&gt;The data volume is very large&lt;/td&gt;
&lt;td&gt;The hex viewer can smoothly browse even very large data; if you need to keep a record, save it as a binary file with one click&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Tip: The views on the request and response sides are &lt;strong&gt;independent&lt;/strong&gt;. When troubleshooting by comparison, you can keep Structured on one side and open Hex on the other and compare them on the same screen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;If proprietary / in-house protocols can't be parsed by standard views and you want to teach it how to read them: see Custom Protocol Decoding.&lt;/li&gt;
&lt;li&gt;To compare where two requests differ, line by line: see Request Diff.&lt;/li&gt;
&lt;li&gt;To modify this data and resend it, or intercept it midway and change it manually: see Request Construction and Replay, Rule Rewriting and Breakpoint Interception.&lt;/li&gt;
&lt;li&gt;To generate code or export documentation from this API: see Generate Code and Export API Docs.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mobile</category>
      <category>software</category>
      <category>networking</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>App Store Multi-Language Metadata and Screenshot Batch Management (with AI Translation) Tutorial</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Mon, 14 Sep 2026 10:37:14 +0000</pubDate>
      <link>https://dev.to/datastack/app-store-multi-language-metadata-and-screenshot-batch-management-with-ai-translation-tutorial-3o49</link>
      <guid>https://dev.to/datastack/app-store-multi-language-metadata-and-screenshot-batch-management-with-ai-translation-tutorial-3o49</guid>
      <description>&lt;h1&gt;
  
  
  App Store Multi-Language Copy and Screenshot Batch Management (with AI Translation) Tutorial
&lt;/h1&gt;

&lt;p&gt;App Store listing information must be maintained per language — name, description, keywords, screenshots, and so on. Once the number of languages grows, filling each one in by hand turns into repetitive busywork. In its "Apps" feature, AppUploader provides three capabilities built specifically to solve this problem: batch screenshot upload, AI translation, and store information export/import folders.&lt;/p&gt;

&lt;h2&gt;
  
  
  Batch Upload Screenshots, Auto-Categorized by Device Size
&lt;/h2&gt;

&lt;p&gt;Open an app's version detail page and go to the "Screenshot Management" tab:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check the languages you want to upload screenshots for (multiple selection allowed).&lt;/li&gt;
&lt;li&gt;Drag in or select screenshot images — there is no need to pre-sort them into folders by device size. The system automatically identifies and categorizes each image by its pixel dimensions into the corresponding device size, then uploads them in batch to all selected languages.&lt;/li&gt;
&lt;li&gt;Images whose dimensions don't match any App Store device are skipped automatically and won't interrupt the overall upload process.&lt;/li&gt;
&lt;li&gt;After uploading screenshots for one language, use "Copy screenshots to other languages" to copy that entire set to other languages in one go. You can optionally clear the existing screenshots of the same type under the target languages first, to avoid duplicating old and new.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Preview videos support similar per-device/per-language management. After upload, Apple transcodes them asynchronously and the status later becomes "Completed". You can set the poster frame time point; if left blank, Apple automatically picks the middle frame.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use AI Translation to Generate Multi-Language Copy at Once
&lt;/h2&gt;

&lt;p&gt;Under the "Metadata Editing" tab, first select a language you have already filled in as the source language, then click "Translate to other languages":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Description, keywords, what's new, and promotional text are translated automatically and written into the other languages you selected.&lt;/li&gt;
&lt;li&gt;Name and subtitle &lt;strong&gt;do not&lt;/strong&gt; participate in translation — they are app-level shared fields, so all languages share the same value; changes take effect only with the next version review.&lt;/li&gt;
&lt;li&gt;Promotional text is special: it can take effect at any time without review, making it suitable for quick adjustments to marketing copy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each field is annotated with whether it is required by App Store, so you won't miss required content after translation and fail the review submission.&lt;/p&gt;

&lt;h2&gt;
  
  
  Export to a Folder for Offline Editing, Then Batch Import Back
&lt;/h2&gt;

&lt;p&gt;If you prefer editing copy in bulk locally with a text editor or version control tool (such as Git), you can export a version's store information into a folder structure:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On the version detail page, click "Export to folder" and enter the export path (leave it blank to use the default directory). You can optionally export screenshots and preview videos as well (large and time-consuming — check as needed).&lt;/li&gt;
&lt;li&gt;Exported directory structure: the root &lt;code&gt;config.yaml&lt;/code&gt; stores categories/copyright/age rating, &lt;code&gt;review_information.yaml&lt;/code&gt; stores review information separately, &lt;code&gt;metadata/&amp;lt;language&amp;gt;/&lt;/code&gt; holds one &lt;code&gt;.txt&lt;/code&gt; file per field, and screenshots/videos go in the &lt;code&gt;screenshots/&lt;/code&gt; and &lt;code&gt;previews/&lt;/code&gt; directories respectively.&lt;/li&gt;
&lt;li&gt;After editing, click "Import from folder". Import is a &lt;strong&gt;partial update&lt;/strong&gt;: only the parts actually present in the folder are applied. For example, if the folder contains only &lt;code&gt;review_information.yaml&lt;/code&gt;, only the review information is updated; empty files are skipped and won't wipe out existing content on Apple; when &lt;code&gt;screenshots/&lt;/code&gt; or &lt;code&gt;previews/&lt;/code&gt; directories exist, the screenshots or videos for the corresponding language/size are replaced entirely.&lt;/li&gt;
&lt;li&gt;After the import completes, a summary is displayed: the number of updated, skipped, and failed items, plus detailed results for each item, making it easy to verify.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This export/import mechanism is particularly well suited to multi-person collaboration on reviewing copy, or to putting store information under version control history.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
    </item>
    <item>
      <title>Swift Development Tools: From Xcode to Lightweight IDEs</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Thu, 10 Sep 2026 10:08:22 +0000</pubDate>
      <link>https://dev.to/datastack/swift-development-tools-from-xcode-to-lightweight-ides-4nbo</link>
      <guid>https://dev.to/datastack/swift-development-tools-from-xcode-to-lightweight-ides-4nbo</guid>
      <description>&lt;p&gt;Swift has come a long way, and the choice of development tools is no longer limited to Xcode. Xcode is still the workhorse — SwiftUI previews, Instruments profiling, and Archive packaging all depend on it — but the open-sourcing of the Swift compiler and toolchain has made third-party tools like VS Code increasingly capable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scenarios Where Xcode Remains Irreplaceable
&lt;/h2&gt;

&lt;p&gt;Xcode holds a decisive advantage in several scenarios. Since Xcode 15, SwiftUI previews have become dramatically more responsive, updating the canvas instantly as you edit code. Instruments' profiling toolset offers more comprehensive support for Swift projects than third-party tools do. Features like Interface Builder and Storyboard visual editing, along with the Core Data model editor, are also exclusive to Xcode. If your project relies heavily on SwiftUI previews and Instruments, Xcode is the only choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  SwiftLint and Formatting Tools
&lt;/h2&gt;

&lt;p&gt;SwiftLint is the most widely used code style tool in the community. It defines rules through a .swiftlint.yml configuration file, letting teams enforce a consistent style. Add a Run Script phase to Build Phases to check code automatically — non-compliant code raises a warning or error at compile time, sparing code reviews from debates over formatting.&lt;/p&gt;

&lt;p&gt;SwiftFormat focuses on automatically formatting code and can be integrated into a Git pre-commit hook to format code before each commit. The two tools work together — SwiftLint checks the rules, SwiftFormat fixes the formatting.&lt;/p&gt;

&lt;p&gt;SourceKit-LSP provides Swift language services for editors — code completion, go-to-definition, and error diagnostics. VS Code, KXApp, and many third-party editors rely on SourceKit-LSP for these capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  VS Code + Swift Extension
&lt;/h2&gt;

&lt;p&gt;After installing the Swift extension, VS Code can handle basic Swift development. Syntax highlighting, code completion, go-to-definition, and error diagnostics are all supported. It suits writing Swift Package libraries or doing code reviews, and it starts up far faster than Xcode.&lt;/p&gt;

&lt;p&gt;The limitation is compilation and debugging — VS Code has no built-in iOS compiler and needs an external toolchain to work.&lt;/p&gt;

&lt;h2&gt;
  
  
  KXApp's Support for Swift Projects
&lt;/h2&gt;

&lt;p&gt;KXApp is built on VS Code, so its editor layer is identical to VS Code's. The key difference is a built-in iOS compilation toolchain, including the swiftc compiler. After creating a Swift project in KXApp, you can connect an iPhone and build and run the app directly, with no need for an Xcode environment.&lt;/p&gt;

&lt;p&gt;KXApp supports Swift Package Manager projects, so when writing a Swift library or framework you can compile and verify it inside the tool without opening Xcode. For projects using SwiftUI, KXApp's VS Code foundation provides a solid coding experience. KXApp also supports iOS development for OC and Flutter projects, covering multiple project types with a single tool. The Swift compilation pipeline matches native Xcode — the swiftc front end parses the code and generates SIL, the LLVM back end generates machine code, and the linker merges everything into an executable, which is then signed and packaged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other Tools
&lt;/h2&gt;

&lt;p&gt;SPM's Package.swift lets you manage dependencies in Swift code, and unlike CocoaPods it requires no extra Ruby environment. DocC is Apple's official documentation generation tool, producing documentation pages from Swift comments. Periphery detects unused code in a project, helping you clean up redundant class and function declarations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recommended Combinations
&lt;/h2&gt;

&lt;p&gt;Use Xcode for SwiftUI development and profiling. Use KXApp or VS Code for everyday coding and code review. Use SwiftLint for style checks. Use SwiftFormat for automatic formatting. Combining multiple tools by scenario improves overall development efficiency more than an Xcode-only approach.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
      <category>development</category>
      <category>flutter</category>
    </item>
    <item>
      <title>TraceEagle Targeted Program Capture Tutorial: One Command to Capture a Single Program's Traffic</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Wed, 09 Sep 2026 09:45:45 +0000</pubDate>
      <link>https://dev.to/datastack/traceeagle-targeted-program-capture-tutorial-one-command-to-capture-a-single-programs-traffic-l01</link>
      <guid>https://dev.to/datastack/traceeagle-targeted-program-capture-tutorial-one-command-to-capture-a-single-programs-traffic-l01</guid>
      <description>&lt;h1&gt;
  
  
  Targeted Program Packet Capture
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;This tutorial shows you how to use &lt;strong&gt;targeted program packet capture&lt;/strong&gt; to capture the traffic of &lt;strong&gt;one particular program&lt;/strong&gt;: give it a startup command, and the tool will launch the program for you, capturing only its traffic. You'll see plaintext as soon as it starts. &lt;strong&gt;No proxy configuration or certificate installation is required&lt;/strong&gt;, and there's no cleanup afterward—it's the fastest and cleanest way to capture traffic.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  When to Use This Approach
&lt;/h2&gt;

&lt;p&gt;Use this when any of the following applies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want to see what &lt;strong&gt;a program that can be launched from the command line&lt;/strong&gt; (browser, script, CLI tool) is sending.&lt;/li&gt;
&lt;li&gt;You don't want to modify the system-wide proxy, install a certificate, or affect other software on the machine.&lt;/li&gt;
&lt;li&gt;You just want to run a quick script or verify an API, and you want to &lt;strong&gt;start capturing right away with one command&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the program is &lt;strong&gt;already running&lt;/strong&gt;, does certificate pinning, uses proprietary encryption, or doesn't honor proxy settings, targeted program capture may fail to capture or decrypt it. Use &lt;strong&gt;Application-Layer Packet Capture&lt;/strong&gt; instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;TraceEagle is installed and running (grant system permissions on first launch).&lt;/li&gt;
&lt;li&gt;You know the &lt;strong&gt;startup command&lt;/strong&gt; of the target program (for example, &lt;code&gt;python3 app.py&lt;/code&gt;, a &lt;code&gt;curl&lt;/code&gt; command, or the executable path of a browser).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No&lt;/strong&gt; certificate installation or system proxy changes are required.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Start Capturing: Three Steps to Get Your First Capture
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create a new session and choose &lt;strong&gt;Local Targeted Program Packet Capture&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Startup Command&lt;/strong&gt; field, enter the command you want to run. If you prefer not to type it manually, click the built-in one-click examples—they will fill in the command for you and you can still edit it:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser example&lt;/strong&gt;: launches a &lt;strong&gt;separate and clean browser window&lt;/strong&gt; (without affecting the browser you use daily), and has already made HTTP/3 (QUIC) fall back to ordinary connections so the traffic can be easily captured and decrypted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python example&lt;/strong&gt;: sends a request with one command, giving you the most reliable way to see plaintext.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI example&lt;/strong&gt;: captures HTTPS requests issued from the command line.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Start&lt;/strong&gt;. The tool launches the program and captures only its traffic. &lt;strong&gt;Child processes&lt;/strong&gt; spawned by the program are also captured, so nothing is missed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqq0fzgso1o92jloo68y0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqq0fzgso1o92jloo68y0.png" alt="Targeted Program Packet Capture" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Let the program run and generate network requests (open a website in the browser or have the script send a request), and the traffic will appear in the request list in real time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Verify: Confirm That Traffic Is Captured and Decrypted
&lt;/h2&gt;

&lt;p&gt;Click any request in the list to inspect its details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The request is visible&lt;/strong&gt;: the request line, headers, and body are all present.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TLS shows Decrypted&lt;/strong&gt;: the response is readable plaintext (such as JSON), not garbled ciphertext.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For common programs—browsers, Electron desktop apps, Node, Python, desktop Java, and command-line tools that use general-purpose cryptographic libraries—&lt;strong&gt;plaintext is available immediately on startup&lt;/strong&gt;, with no extra steps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F66ylnetdjd0ew3ku5q3e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F66ylnetdjd0ew3ku5q3e.png" alt="Actual result" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Can't Capture or Can't Decrypt? Troubleshoot Line by Line
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phenomenon&lt;/th&gt;
&lt;th&gt;Most Likely Reason&lt;/th&gt;
&lt;th&gt;What to Do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Packets are captured, but only ciphertext&lt;/td&gt;
&lt;td&gt;The program uses a special cryptographic library (most typically the macOS built-in &lt;code&gt;curl&lt;/code&gt;, and some pure-Go programs)&lt;/td&gt;
&lt;td&gt;To see plaintext on the command line, the &lt;strong&gt;Python example&lt;/strong&gt; is the most reliable; switch to an OpenSSL build of &lt;code&gt;curl&lt;/code&gt;; if that doesn't work, use Application-Layer Packet Capture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No traffic at all&lt;/td&gt;
&lt;td&gt;The program completely ignores proxy settings&lt;/td&gt;
&lt;td&gt;Use Application-Layer Packet Capture (extract plaintext from inside the program) or NIC Packet Capture (the NIC layer captures everything)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Captured, but it uses HTTP/3 and is incomplete&lt;/td&gt;
&lt;td&gt;The target uses HTTP/3 (QUIC)&lt;/td&gt;
&lt;td&gt;Enable session-level &lt;strong&gt;Block HTTP/3&lt;/strong&gt; to force it back to ordinary connections, so it can be easily captured and decrypted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The target program is already running&lt;/td&gt;
&lt;td&gt;This method requires the tool to &lt;strong&gt;start&lt;/strong&gt; the program&lt;/td&gt;
&lt;td&gt;Close it first and restart it with the startup command; or use Application-Layer Packet Capture to attach to the running process&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  How to Choose Among the Four Local Capture Methods
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your Situation&lt;/th&gt;
&lt;th&gt;Which Method to Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A normal command-line-startable program (browser/script/CLI)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Targeted Program Packet Capture&lt;/strong&gt; (this article, the easiest)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You want to see all traffic on the machine, non-HTTP traffic, or all network behavior of a program&lt;/td&gt;
&lt;td&gt;NIC Packet Capture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The program is already running / does certificate pinning / doesn't honor proxy / uses proprietary encryption / system cryptographic libraries&lt;/td&gt;
&lt;td&gt;Application-Layer Packet Capture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;System built-in apps / stubborn applications on macOS&lt;/td&gt;
&lt;td&gt;System-Level Packet Capture&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;To learn how to read the captured data, switch views, and decode it: see Data Viewing and Decoding.&lt;/li&gt;
&lt;li&gt;For private/proprietary protocols, or to teach the tool how to read them: see Custom Protocol Decoding.&lt;/li&gt;
&lt;li&gt;To modify and resend requests, or intercept and edit them mid-flight: see Request Construction and Replay and Rule Rewriting &amp;amp; Breakpoint Interception.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Project address: &lt;a href="https://github.com/traceeagle/traceeagle" rel="noopener noreferrer"&gt;https://github.com/traceeagle/traceeagle&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
      <category>networking</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Test Device Registration and Management: Two Ways to Obtain UDID via USB Connection or QR Code Scan</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Tue, 08 Sep 2026 10:18:39 +0000</pubDate>
      <link>https://dev.to/datastack/test-device-registration-and-management-two-ways-to-obtain-udid-via-usb-connection-or-qr-code-scan-d63</link>
      <guid>https://dev.to/datastack/test-device-registration-and-management-two-ways-to-obtain-udid-via-usb-connection-or-qr-code-scan-d63</guid>
      <description>&lt;p&gt;Test devices are registered for development and Ad Hoc distribution. Use &lt;strong&gt;Appuploader&lt;/strong&gt; to view UDIDs and add test devices. Each device type is limited to 100 registered devices. &lt;strong&gt;Devices can only be added, not deleted&lt;/strong&gt;, and there is one reset opportunity after each annual renewal. &lt;strong&gt;Accounts not enrolled in the Apple Developer Program can register up to 3 devices.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Register a Device
&lt;/h2&gt;

&lt;p&gt;The registration dialog provides two methods:&lt;/p&gt;

&lt;h3&gt;
  
  
  Method 1: USB Connection
&lt;/h3&gt;

&lt;p&gt;Connect your iPhone or iPad with a data cable and tap &lt;strong&gt;Trust&lt;/strong&gt; on the device. The system automatically detects the list of connected devices (on Windows, you need to install the Apple Device Driver or iTunes first). Select the device from the detected results, and the UDID and other information will be filled in automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Method 2: QR Code Scanning (Over-the-Air Delivery)
&lt;/h3&gt;

&lt;p&gt;When no data cable is available, you can scan the QR code with your phone to obtain the UDID:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Put the phone and the current computer on the same Wi-Fi network.&lt;/li&gt;
&lt;li&gt;Open the camera and scan the QR code.&lt;/li&gt;
&lt;li&gt;Tap &lt;strong&gt;Continue&lt;/strong&gt;, then tap &lt;strong&gt;Allow&lt;/strong&gt; to download a temporary configuration profile.&lt;/li&gt;
&lt;li&gt;On the phone, go to &lt;strong&gt;Settings → Downloaded Profile&lt;/strong&gt; and tap &lt;strong&gt;Install&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The UDID will be automatically reported and filled into the registration form.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F71r3h0pysiahfidzxm6b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F71r3h0pysiahfidzxm6b.png" alt="uuid" width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then enter a name, select the platform, and tap &lt;strong&gt;Register&lt;/strong&gt; to complete the registration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bulk Import
&lt;/h2&gt;

&lt;p&gt;Tap &lt;strong&gt;Bulk Import&lt;/strong&gt; and enter one device per line: the UDID may be followed by a name separated by Tab, comma, or space. You can also &lt;strong&gt;Import from File&lt;/strong&gt;. Up to 100 devices can be imported per batch. Before importing, you need to select a platform that applies uniformly to all devices. After submission, the import result (success/failure) for each device will be displayed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Manage Devices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You can &lt;strong&gt;Enable&lt;/strong&gt; / &lt;strong&gt;Disable&lt;/strong&gt; a device, or &lt;strong&gt;Rename&lt;/strong&gt; it.&lt;/li&gt;
&lt;li&gt;Devices &lt;strong&gt;cannot be deleted&lt;/strong&gt;, only disabled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reset Devices&lt;/strong&gt;: This can only be performed once per membership year. After selecting the devices to reset and submitting, the registration slots occupied by these devices will be released and can be used for new devices. This action is irreversible, so please choose carefully.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Appuploader's device list can be searched by name / ID / UDID.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
    </item>
    <item>
      <title>iOS Development Environment Setup Guide: From Xcode to Lightweight Toolchain Options</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Tue, 08 Sep 2026 10:15:03 +0000</pubDate>
      <link>https://dev.to/datastack/ios-development-environment-setup-guide-from-xcode-to-lightweight-toolchain-options-244</link>
      <guid>https://dev.to/datastack/ios-development-environment-setup-guide-from-xcode-to-lightweight-toolchain-options-244</guid>
      <description>&lt;p&gt;When setting up an iOS development environment, the first thought is to install Xcode. Downloading the multi-gigabyte installer, waiting for it to unzip, installing the Simulator, and configuring your account—the whole process takes at least an hour. But Xcode isn't the only option for an iOS development environment; depending on your project type and development habits, you can flexibly combine different setup configurations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Xcode Standard Environment
&lt;/h2&gt;

&lt;p&gt;Xcode is the standard environment for iOS development. After downloading from the Mac App Store, open Preferences → Accounts and add your Apple ID; Xcode then automatically manages certificates and provisioning profiles. When you create a new project, you choose a template, configure the Bundle ID and Team, and you can run it on the Simulator or connect a physical device via USB for debugging.&lt;/p&gt;

&lt;p&gt;For debugging on a physical device, you need to trust the development certificate on your phone under Settings → General → VPN &amp;amp; Device Management. If Xcode reports certificate issues, click Download Manual Profiles on the Accounts page to refresh.&lt;/p&gt;

&lt;p&gt;The main issues with the standard environment are its size and startup speed. The Xcode installer is about 7–8 GB and takes up more than 15 GB after extraction; combined with cache files from various iOS SDK versions and the Simulator, a 256 GB Mac quickly runs out of storage. As your project's codebase grows, every launch requires waiting for indexing to load, during which code completion and navigation are affected.&lt;/p&gt;

&lt;h2&gt;
  
  
  VS Code + Plugin Environment
&lt;/h2&gt;

&lt;p&gt;If your day-to-day development doesn't involve Storyboard editing or Instruments performance analysis, VS Code with the Swift plugin is a lightweight option. After installing the Swift plugin and SourceKit-LSP, you get syntax highlighting, code completion, and definition jumps.&lt;/p&gt;

&lt;p&gt;But this environment has obvious limitations. Compiling for iOS and debugging on a real device still require Xcode's toolchain. The common approach is to write code in VS Code and, when you need to compile, switch to the terminal to run &lt;code&gt;xcodebuild&lt;/code&gt;, or use a remote Mac for compilation. While the code editing experience improves, the build-and-verify workflow becomes fragmented.&lt;/p&gt;

&lt;h2&gt;
  
  
  KXApp Built-in Environment
&lt;/h2&gt;

&lt;p&gt;KXApp takes this approach a step further by embedding the compilation toolchain directly into the IDE, allowing you to compile and sign without installing Xcode on the system. For everyday coding, debugging, and packaging, this reduces reliance on environment configuration.&lt;/p&gt;

&lt;p&gt;The process of setting up a development environment in KXApp is: download, unzip, launch → register and log in with your email → connect your phone to the computer via USB → enable Developer Mode → start coding. There's no need to configure Xcode's Build Settings, manage the Simulator, or manually set up certificate chains.&lt;/p&gt;

&lt;p&gt;If you typically use Flutter for cross-platform development, KXApp has built-in support for compiling Dart to iOS, eliminating the need to configure the Xcode toolchain within Flutter. When creating a project, simply select the Flutter template, connect an iPhone, and build to run on a physical device.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mixing and Matching Environments
&lt;/h2&gt;

&lt;p&gt;The standard environment, lightweight environments, and KXApp are not mutually exclusive; they can be used together. Use Xcode for complex project configuration and performance analysis, VS Code or KXApp for daily coding and quick verification, KXApp for validating iOS builds in Flutter projects, and KXApp for iOS development on Windows.&lt;/p&gt;

&lt;p&gt;Recommendations for setting up your environment: keep at least one Mac as a baseline for handling certificate configuration and App Store submissions. For daily development, choose tools based on project type and scenario; you don't need a full Xcode installation on every machine. The space and startup time you save are also part of efficiency.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
      <category>development</category>
      <category>flutter</category>
    </item>
  </channel>
</rss>
