<?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>iOS App Development Requires More Than Just Tech Stack: Enhancing Toolchain for Efficiency</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Sat, 27 Jun 2026 09:06:12 +0000</pubDate>
      <link>https://dev.to/datastack/ios-app-development-requires-more-than-just-tech-stack-enhancing-toolchain-for-efficiency-14c6</link>
      <guid>https://dev.to/datastack/ios-app-development-requires-more-than-just-tech-stack-enhancing-toolchain-for-efficiency-14c6</guid>
      <description>&lt;p&gt;Many people, when organizing &lt;strong&gt;essential elements for iOS App development&lt;/strong&gt;, list a long series of technologies: Swift, network requests, databases, cloud services, testing frameworks... These are all valid, but in actual development, it's easy to overlook one thing—&lt;strong&gt;these technologies ultimately need to be integrated into an executable development workflow&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In other words, technologies are scattered, but development is continuous.&lt;/p&gt;

&lt;p&gt;If you push an App from an idea to running on a phone, it goes through several very specific stages. Rather than looking at each technology individually, it's better to follow the development process and connect these capabilities in sequence.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Interface and Interaction: Where Code is Written and How to Quickly Validate&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;UI is the first part where results can be seen.&lt;/p&gt;

&lt;p&gt;For example, whether writing native interfaces with Swift or building cross-platform UI with Flutter, developers face the same question: &lt;strong&gt;After making changes, how long does it take to see the effects?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If every UI adjustment requires a full build and run, the pace will noticeably slow down.&lt;/p&gt;

&lt;p&gt;Some tools optimize the "feedback path" here. For instance, supporting fast compilation and direct deployment to devices allows interface changes to be validated more quickly.&lt;/p&gt;

&lt;p&gt;In an IDE like Kuai Xie, code modifications can directly trigger builds and installation to the phone, making UI debugging more seamless.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Programming Language: Not Just Syntax, but Also Tool Support&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;iOS native development primarily uses Swift, and Objective-C projects may also be encountered.&lt;/p&gt;

&lt;p&gt;If the project involves cross-platform development, Dart (Flutter) or JavaScript (React Native) might be used.&lt;/p&gt;

&lt;p&gt;The languages themselves aren't complex; what truly impacts development efficiency is: &lt;strong&gt;Whether the tools support the project structures and build methods corresponding to these languages&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In some development environments, different languages mean different tools; whereas in IDEs that support multiple project types, different tech stacks can be handled in the same environment.&lt;/p&gt;

&lt;p&gt;Kuai Xie supports Swift, Objective-C, and Flutter projects in this regard, reducing interruptions caused by environment switching.&lt;br&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%2Fq7f015umh6qtgqms5qyn.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%2Fq7f015umh6qtgqms5qyn.png" alt="Create Project" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;IDE: The Core Tool That Determines Development Pace&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;IDE is the convergence point for all technologies.&lt;/p&gt;

&lt;p&gt;Common choices include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Xcode: Comprehensive but heavy&lt;/li&gt;
&lt;li&gt;VSCode: Lightweight but requires additional configuration&lt;/li&gt;
&lt;li&gt;Other IDEs: Each has its own focus&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;IDE is not just an editor; it also determines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How projects are organized&lt;/li&gt;
&lt;li&gt;How compilation is triggered&lt;/li&gt;
&lt;li&gt;How debugging is conducted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some new tools attempt to combine "editing experience" and "build capabilities." For example, based on the VSCode architecture while embedding compilation tools.&lt;/p&gt;

&lt;p&gt;Kuai Xie follows this approach: editing experience similar to VSCode, while providing full iOS build capabilities.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Version Control: The Foundation of Collaboration Beyond Code&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Git is almost standard in iOS development.&lt;/p&gt;

&lt;p&gt;Whether for personal projects or team collaboration, it involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code version management&lt;/li&gt;
&lt;li&gt;Branch merging&lt;/li&gt;
&lt;li&gt;History backtracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This part isn't closely related to specific IDEs, but whether an IDE supports good Git integration affects the smoothness of daily operations.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Data Storage: Coordination Between Local and Remote&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Apps need to handle data during runtime, typically divided into two categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local storage (e.g., SQLite, Realm)&lt;/li&gt;
&lt;li&gt;Cloud data (e.g., Firebase, backend APIs)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During development, changes in data structures often require repeated validation.&lt;/p&gt;

&lt;p&gt;If the debugging workflow is smooth, data read/write correctness can be confirmed more quickly. For example, after modifying data models, rerunning the app and directly viewing effects on the device.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Network Requests and Data Processing: One of the Most Frequently Debugged Parts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Communication between the App and servers is common.&lt;/p&gt;

&lt;p&gt;Developers need to handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP requests&lt;/li&gt;
&lt;li&gt;Data parsing (JSON / XML)&lt;/li&gt;
&lt;li&gt;Exception handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The characteristic of this part is "frequent validation required."&lt;/p&gt;

&lt;p&gt;If every modification to request logic takes a long time to see results, it will significantly impact development efficiency.&lt;/p&gt;

&lt;p&gt;Therefore, the convenience of debugging tools directly affects the experience in this stage.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Backend and Cloud Services: Reducing Self-Built Complexity&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In some projects, cloud services are used to handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data storage&lt;/li&gt;
&lt;li&gt;User management&lt;/li&gt;
&lt;li&gt;File uploads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, AWS, Google Cloud, Firebase, etc.&lt;/p&gt;

&lt;p&gt;This is more about architectural choices, but during the development phase, interfaces and data need to be continuously validated through the App.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Security and Authentication: A Must-Complete Step After Features&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;User authentication, data security, and other issues are generally added gradually after features are completed.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OAuth login&lt;/li&gt;
&lt;li&gt;Token validation&lt;/li&gt;
&lt;li&gt;Data encryption&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These functionalities need to be tested in real environments, thus still relying on complete running and debugging workflows.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Testing and Debugging: Exposing Issues&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Testing isn't just about writing test code; it also includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manual debugging&lt;/li&gt;
&lt;li&gt;Log viewing&lt;/li&gt;
&lt;li&gt;Behavior validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In iOS development, these operations often depend on device runtime environments.&lt;/p&gt;

&lt;p&gt;If the debugging process can be completed within one tool, it reduces distractions from switching back and forth.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Build and Release: The Endpoint of the Development Workflow&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When features are completed, installation packages need to be generated.&lt;/p&gt;

&lt;p&gt;This stage involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building release versions&lt;/li&gt;
&lt;li&gt;Generating installation files&lt;/li&gt;
&lt;li&gt;Distributing to testers or submitting for review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some tools make the build process simpler, such as providing one-click build capabilities, making the transition between development and release smoother.&lt;/p&gt;

&lt;p&gt;Kuai Xie also offers application build functionality in this regard, allowing direct generation of installation packages.&lt;br&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%2Fwnv2p7natzyd0b2lhn2k.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%2Fwnv2p7natzyd0b2lhn2k.png" alt="Build" width="799" height="403"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;For the question of &lt;strong&gt;essential elements for iOS App development&lt;/strong&gt;, if you only look at the technology list, it appears fragmented.&lt;/p&gt;

&lt;p&gt;From another perspective, starting from the development workflow makes it easier to understand the role of each capability.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>2026 iOS Certificate Management: Say Goodbye to Keychain Dependencies and Build a Reproducible Signing Environment</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Mon, 15 Jun 2026 09:47:22 +0000</pubDate>
      <link>https://dev.to/datastack/2026-ios-certificate-management-say-goodbye-to-keychain-dependencies-and-build-a-reproducible-48h</link>
      <guid>https://dev.to/datastack/2026-ios-certificate-management-say-goodbye-to-keychain-dependencies-and-build-a-reproducible-48h</guid>
      <description>&lt;p&gt;In some projects, certificate issues do not surface during early development but suddenly appear during team collaboration, switching computers, or integrating CI.&lt;/p&gt;

&lt;p&gt;For example, new colleagues cannot build after pulling code, CI builds fail but work locally, or signatures become invalid after provisioning profile updates. The common point of these problems is that certificates are not managed but remain on a specific device.&lt;/p&gt;

&lt;p&gt;This article explains how to make the iOS signing environment reproducible, migratable, and reusable.&lt;/p&gt;




&lt;h1&gt;
  
  
  First, Clarify That a Certificate Is Not a Single File
&lt;/h1&gt;

&lt;p&gt;iOS signing involves three types of files:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.cer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Public key certificate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private key&lt;/td&gt;
&lt;td&gt;Generated locally&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.p12&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Certificate + private key&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The key points are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.cer&lt;/code&gt; cannot be used alone&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.p12&lt;/code&gt; is the complete, migratable format&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If team members only share &lt;code&gt;.cer&lt;/code&gt;, the result is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The certificate exists&lt;/li&gt;
&lt;li&gt;But signing is impossible&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Avoid Each Person Generating Certificates Individually; Instead, Generate and Distribute Uniformly
&lt;/h1&gt;

&lt;p&gt;Follow these steps:&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 1: Generate a Certificate (Once)
&lt;/h3&gt;

&lt;p&gt;Create the certificate in a tool, not manually in the keychain.&lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;AppUploader (Happy Upload)&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open certificate management&lt;/li&gt;
&lt;li&gt;Click Add&lt;/li&gt;
&lt;li&gt;Select type (development or distribution)&lt;/li&gt;
&lt;li&gt;Enter certificate name&lt;/li&gt;
&lt;li&gt;Set P12 password&lt;/li&gt;
&lt;li&gt;Generate and download &lt;code&gt;.p12&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result of this step is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A complete P12 file&lt;/li&gt;
&lt;li&gt;No dependency on a specific Mac&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2F81dk3d65f7xkcyxpix1e.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.amazonaws.com%2Fuploads%2Farticles%2F81dk3d65f7xkcyxpix1e.png" alt="New Certificate" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 2: Save the Certificate
&lt;/h3&gt;

&lt;p&gt;Store &lt;code&gt;.p12&lt;/code&gt; in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Private Git repository (encrypted)&lt;/li&gt;
&lt;li&gt;CI Secret&lt;/li&gt;
&lt;li&gt;Internal file service&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2F4ahnbvpym6e0al7d151c.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.amazonaws.com%2Fuploads%2Farticles%2F4ahnbvpym6e0al7d151c.png" alt=".12" width="421" height="651"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: Use Uniformly
&lt;/h3&gt;

&lt;p&gt;Import in various environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;macOS → Keychain&lt;/li&gt;
&lt;li&gt;CI → Script import&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Synchronization Method for Provisioning Profiles
&lt;/h1&gt;

&lt;p&gt;Certificates are only part of signing; provisioning profiles are also needed.&lt;/p&gt;

&lt;p&gt;Provisioning profile binding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bundle ID&lt;/li&gt;
&lt;li&gt;Certificate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Generation process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open AppUploader&lt;/li&gt;
&lt;li&gt;Go to provisioning profile management&lt;/li&gt;
&lt;li&gt;Create new provisioning profile&lt;/li&gt;
&lt;li&gt;Select type (App Store / Development)&lt;/li&gt;
&lt;li&gt;Bind Bundle ID&lt;/li&gt;
&lt;li&gt;Select certificate&lt;/li&gt;
&lt;li&gt;Download &lt;code&gt;.mobileprovision&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Save the provisioning profile together with &lt;code&gt;.p12&lt;/code&gt;.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Foz7uct9hk3x8n9hu2e0y.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.amazonaws.com%2Fuploads%2Farticles%2Foz7uct9hk3x8n9hu2e0y.png" alt="Provisioning Profile" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  Load Certificates in CI
&lt;/h1&gt;

&lt;p&gt;When integrating CI into a project, the build environment needs to load certificates.&lt;/p&gt;

&lt;p&gt;Example (Fastlane):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import_certificate(
  certificate_path: "cert.p12",
  certificate_password: "password"
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Provisioning profiles can be handled via:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp profile.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows CI to complete signing directly.&lt;/p&gt;




&lt;h1&gt;
  
  
  A Detail to Avoid Certificate Invalidation
&lt;/h1&gt;

&lt;p&gt;Certificates themselves have an expiration date (usually one year).&lt;/p&gt;

&lt;p&gt;But in a team, what truly matters is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether provisioning profiles use old certificates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After updating a certificate, you need to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Regenerate provisioning profiles&lt;/li&gt;
&lt;li&gt;Replace files in CI&lt;/li&gt;
&lt;li&gt;Rebuild&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you only update the certificate without updating provisioning profiles, signing will fail.&lt;/p&gt;




&lt;h1&gt;
  
  
  Handling in Cross-Platform Development
&lt;/h1&gt;

&lt;p&gt;In Windows or Linux environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keychain cannot be used&lt;/li&gt;
&lt;li&gt;But &lt;code&gt;.p12&lt;/code&gt; can be used directly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HBuilderX packaging&lt;/li&gt;
&lt;li&gt;CI builds&lt;/li&gt;
&lt;li&gt;Command-line uploads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Certificates exist only as files, without dependency on system tools.&lt;/p&gt;




&lt;h1&gt;
  
  
  How to Determine If the Current Certificate Is Usable
&lt;/h1&gt;

&lt;p&gt;You can verify via:&lt;/p&gt;

&lt;h3&gt;
  
  
  Method 1: Xcode
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check if the certificate includes a private key&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Method 2: Command Line
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;security find-identity -v -p codesigning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Method 3: Build Verification
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Whether IPA can be successfully exported&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;The complexity of certificate issues is not in the creation steps but in how they are saved and used. If certificates are uniformly managed in &lt;code&gt;.p12&lt;/code&gt; format, many problems will be reduced.&lt;/p&gt;

&lt;p&gt;Reference link: &lt;a href="https://www.appuploader.net/blog/237" rel="noopener noreferrer"&gt;https://www.appuploader.net/blog/237&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
    </item>
    <item>
      <title>Can You Do iOS Development Without a Mac? Cross-Device Development Workflow</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Thu, 11 Jun 2026 09:47:00 +0000</pubDate>
      <link>https://dev.to/datastack/can-you-do-ios-development-without-a-mac-cross-device-development-workflow-1ad5</link>
      <guid>https://dev.to/datastack/can-you-do-ios-development-without-a-mac-cross-device-development-workflow-1ad5</guid>
      <description>&lt;p&gt;In the field of iOS development, needing a Mac is almost a default prerequisite. Project creation, code compilation, and device debugging all revolve around macOS and Xcode. However, in some practical scenarios, such as temporarily taking over a project or verifying functionality on non-Mac devices, this prerequisite can become a limitation.&lt;/p&gt;

&lt;p&gt;Recently, while helping a friend with a small project, I tried a different approach: completing the writing and running of an iOS application without using the traditional Mac development environment.&lt;/p&gt;

&lt;p&gt;The project wasn't complex, but the workflow was complete, making it suitable for verifying the feasibility of this development method.&lt;/p&gt;




&lt;h3&gt;
  
  
  Creating an iOS Project in a Non-Traditional Environment
&lt;/h3&gt;

&lt;p&gt;After opening the Kuai Xie IDE, you can directly access the project creation interface. The interface offers several project types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Swift&lt;/li&gt;
&lt;li&gt;Objective-C&lt;/li&gt;
&lt;li&gt;Flutter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Select a Swift project, enter a name, and click create; the IDE will generate the project directory.&lt;/p&gt;

&lt;p&gt;The project structure already includes basic code files and resource directories. Opening the entry file allows you to start writing code without additional initialization steps.&lt;/p&gt;

&lt;p&gt;At this stage, no environment-related issues were encountered. The IDE has prepared the necessary tools for compilation, so after project creation, you can directly proceed to the development phase.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fjvkub0h04su4mlbhi7w1.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.amazonaws.com%2Fuploads%2Farticles%2Fjvkub0h04su4mlbhi7w1.png" alt="Creating a Project" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Writing a Simple Feature to Validate the Project
&lt;/h3&gt;

&lt;p&gt;To test the development workflow, I wrote a simple page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A button&lt;/li&gt;
&lt;li&gt;A text area&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Upon clicking the button, local data is read and the result is displayed on the interface.&lt;/p&gt;

&lt;p&gt;During code editing, the IDE provides auto-completion and syntax hints. When entering class names or methods, a list of options pops up. After saving the file, the IDE checks the code structure and marks error locations.&lt;/p&gt;

&lt;p&gt;The editing experience is similar to common code editors, with relatively complete keyboard operations and plugin support.&lt;/p&gt;




&lt;h3&gt;
  
  
  Connecting an iPhone and Executing the Application Build
&lt;/h3&gt;

&lt;p&gt;After writing the code, it needs to be run on a real device.&lt;/p&gt;

&lt;p&gt;Connect the iPhone to the computer, and the IDE starts the build process.&lt;/p&gt;

&lt;p&gt;The build process involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compiling the source code&lt;/li&gt;
&lt;li&gt;Building the application&lt;/li&gt;
&lt;li&gt;Installing it on the phone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After the build completes, the app icon appears on the phone's home screen. Clicking to open the app shows the interface displaying normally.&lt;/p&gt;

&lt;p&gt;Clicking the button successfully updates the text area with the read data, indicating the code executed correctly.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fkoto3xnxpgbbk95oj74d.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.amazonaws.com%2Fuploads%2Farticles%2Fkoto3xnxpgbbk95oj74d.png" alt="Connecting the Phone" width="799" height="205"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Modifying Code and Running Again
&lt;/h3&gt;

&lt;p&gt;During development, code adjustments are constantly needed.&lt;/p&gt;

&lt;p&gt;I added some processing logic to the button click, then saved the file and clicked the run button again. The IDE recompiles the application and installs the new version.&lt;/p&gt;

&lt;p&gt;Opening the phone app shows the updated effect.&lt;/p&gt;

&lt;p&gt;The entire process remains consistent:&lt;/p&gt;

&lt;p&gt;Modify code → Click run → Compile application → Install on device → View results&lt;/p&gt;

&lt;p&gt;No additional export or manual installation steps were required.&lt;/p&gt;




&lt;h3&gt;
  
  
  Implementation of Compilation Capabilities
&lt;/h3&gt;

&lt;p&gt;In this workflow, Xcode on a Mac is not used.&lt;/p&gt;

&lt;p&gt;The Kuai Xie IDE has a built-in set of compilation tools. These tools are configured during IDE installation. When clicking run or build, the IDE calls internal tools to complete code compilation and application building.&lt;/p&gt;

&lt;p&gt;Developers in this environment can directly write iOS applications and complete compilation and execution.&lt;/p&gt;

&lt;p&gt;For scenarios requiring code verification in non-Mac environments, this method provides a feasible path.&lt;/p&gt;




&lt;h3&gt;
  
  
  Development Testing Across Multiple Project Types
&lt;/h3&gt;

&lt;p&gt;To further validate the IDE's capabilities, I created a Flutter project.&lt;/p&gt;

&lt;p&gt;After writing the Flutter page, connecting the device and clicking run allows the IDE to complete compilation and install the application.&lt;/p&gt;

&lt;p&gt;Subsequently, an Objective-C project was tested and also ran normally.&lt;/p&gt;

&lt;p&gt;In the same development environment, it can handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Swift projects&lt;/li&gt;
&lt;li&gt;Objective-C projects&lt;/li&gt;
&lt;li&gt;Flutter projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is convenient for cross-project development needs.&lt;/p&gt;




&lt;h3&gt;
  
  
  Building Installation Packages for Distribution
&lt;/h3&gt;

&lt;p&gt;After application development is complete, an installation package needs to be generated.&lt;/p&gt;

&lt;p&gt;In the Kuai Xie IDE, you can generate application installation files through the build function. The IDE executes compilation and outputs the installation package.&lt;/p&gt;

&lt;p&gt;Build logs are displayed in the output panel; if compilation issues arise, detailed information can be viewed.&lt;/p&gt;

&lt;p&gt;The generated installation files can be used for testing or distribution.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Ft9gnincp5qofoe15hkq1.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.amazonaws.com%2Fuploads%2Farticles%2Ft9gnincp5qofoe15hkq1.png" alt="Building" width="799" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For developers, this method can be used in specific scenarios, such as temporary development, feature verification, or when environments are limited.&lt;br&gt;
Reference link: &lt;a href="https://www.kxapp.com/blog/15" rel="noopener noreferrer"&gt;https://www.kxapp.com/blog/15&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What are the iOS Developer Tools? How to Use Xcode, AppUploader (Happy Upload), and Fastlane</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Sat, 06 Jun 2026 09:52:59 +0000</pubDate>
      <link>https://dev.to/datastack/what-are-the-ios-developer-tools-how-to-use-xcode-appuploader-happy-upload-and-fastlane-4h9j</link>
      <guid>https://dev.to/datastack/what-are-the-ios-developer-tools-how-to-use-xcode-appuploader-happy-upload-and-fastlane-4h9j</guid>
      <description>&lt;p&gt;When discussing &lt;strong&gt;iOS developer tools&lt;/strong&gt;, many people immediately think of Xcode. However, in a project, development, signing, packaging, and publishing can be accomplished by a variety of tools working together.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Code Development Phase: Xcode and Dependency Management Tools
&lt;/h2&gt;

&lt;p&gt;iOS project development is typically done in &lt;strong&gt;Xcode&lt;/strong&gt;.&lt;br&gt;
After creating a project, the first thing to handle is often dependency libraries.&lt;/p&gt;

&lt;p&gt;If the project relies on third-party libraries, you can use the following tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Swift Package Manager (SPM)&lt;/strong&gt;: Built-in dependency management in Xcode&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CocoaPods&lt;/strong&gt;: Suitable for projects already using the Pods ecosystem&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, using CocoaPods:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pod init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After editing the &lt;code&gt;Podfile&lt;/code&gt;, execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pod install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This generates an &lt;code&gt;.xcworkspace&lt;/code&gt; file, and then open the project through this workspace.&lt;/p&gt;

&lt;p&gt;Once this step is complete, development work is mostly done in Xcode, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI development&lt;/li&gt;
&lt;li&gt;API interface calls&lt;/li&gt;
&lt;li&gt;Debugging and running&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Creating an App Identifier (Bundle ID)
&lt;/h2&gt;

&lt;p&gt;When the app is ready for the testing phase, you need to create an app identifier in Apple Developer.&lt;/p&gt;

&lt;p&gt;Operation steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in to Apple Developer&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Identifiers&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click Add&lt;/li&gt;
&lt;li&gt;Enter the Bundle ID&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This ID will be used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Certificates&lt;/li&gt;
&lt;li&gt;Provisioning profiles&lt;/li&gt;
&lt;li&gt;App Store Connect app records&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the project's Bundle ID differs from the backend configuration, the build will not be recognized after upload.&lt;br&gt;
You can also create it in AppUploader:&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fg3u4al7itait845bl4yl.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.amazonaws.com%2Fuploads%2Farticles%2Fg3u4al7itait845bl4yl.png" alt="bid" width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  3. Generating Signing Certificates
&lt;/h2&gt;

&lt;p&gt;iOS apps need to be signed for installation or publishing.&lt;/p&gt;

&lt;p&gt;Certificate types include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Development (for debugging)&lt;/li&gt;
&lt;li&gt;Distribution (for App Store publishing)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Certificates can be generated via the Apple Developer website or managed with tools.&lt;/p&gt;

&lt;p&gt;For example, using &lt;strong&gt;AppUploader (Happy Upload)&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open AppUploader&lt;/li&gt;
&lt;li&gt;Log in with your Apple Developer account&lt;/li&gt;
&lt;li&gt;Go to "Certificate Management"&lt;/li&gt;
&lt;li&gt;Click Add Certificate&lt;/li&gt;
&lt;li&gt;Select the certificate type (development or distribution)&lt;/li&gt;
&lt;li&gt;Set the certificate name and P12 password&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After completion, download the &lt;code&gt;.p12&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;This file can be imported into Xcode or a CI build environment.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fo4wcoh01bkqm0kp2e49o.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.amazonaws.com%2Fuploads%2Farticles%2Fo4wcoh01bkqm0kp2e49o.png" alt="Add Certificate" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  4. Creating Provisioning Profiles
&lt;/h2&gt;

&lt;p&gt;After generating certificates, you need to create a &lt;strong&gt;Provisioning Profile&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A provisioning profile includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bundle ID&lt;/li&gt;
&lt;li&gt;The certificate used&lt;/li&gt;
&lt;li&gt;Device permissions (for development versions)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In AppUploader, you can perform the following operations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to "Provisioning Profile Management"&lt;/li&gt;
&lt;li&gt;Create a new provisioning profile&lt;/li&gt;
&lt;li&gt;Select the type

&lt;ul&gt;
&lt;li&gt;Development&lt;/li&gt;
&lt;li&gt;App Store&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Select the Bundle ID&lt;/li&gt;
&lt;li&gt;Bind the certificate&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This generates a &lt;code&gt;.mobileprovision&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;This file will be used during the packaging phase.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2F5qcm8gkfpyvns1yoes4a.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.amazonaws.com%2Fuploads%2Farticles%2F5qcm8gkfpyvns1yoes4a.png" alt="Provisioning Profile" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  5. Building the IPA Installation Package
&lt;/h2&gt;

&lt;p&gt;When app development is complete, you need to generate an IPA.&lt;/p&gt;
&lt;h3&gt;
  
  
  Building with Xcode
&lt;/h3&gt;

&lt;p&gt;In Xcode, execute:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Any iOS Device&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Archive&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Wait for the build to complete&lt;/li&gt;
&lt;li&gt;Export the IPA as App Store type&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This generates a &lt;code&gt;.ipa&lt;/code&gt; file.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fvkm5ckiqorwutt5hv54j.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.amazonaws.com%2Fuploads%2Farticles%2Fvkm5ckiqorwutt5hv54j.png" alt="xcode" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  Automated Building with Fastlane
&lt;/h3&gt;

&lt;p&gt;If the project is integrated with CI, you can use Fastlane:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lane :build do
  build_app(
    scheme: "AppScheme",
    export_method: "app-store"
  )
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fastlane build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the build completes, the IPA is generated.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Device Installation Testing
&lt;/h2&gt;

&lt;p&gt;Before uploading, you can install the IPA on a real device for testing.&lt;/p&gt;

&lt;p&gt;Installation methods include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Xcode Devices&lt;/li&gt;
&lt;li&gt;Apple Configurator&lt;/li&gt;
&lt;li&gt;AppUploader installation testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In AppUploader:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open "Installation Testing"&lt;/li&gt;
&lt;li&gt;Select the IPA file&lt;/li&gt;
&lt;li&gt;Connect the device&lt;/li&gt;
&lt;li&gt;Click Install&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the app launches normally, it indicates that the signing and provisioning profile configurations are correct.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Uploading the IPA to the App Store
&lt;/h2&gt;

&lt;p&gt;After the IPA is built, it needs to be uploaded to App Store Connect.&lt;/p&gt;

&lt;p&gt;Common upload methods include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Xcode Organizer&lt;/li&gt;
&lt;li&gt;Apple Transporter&lt;/li&gt;
&lt;li&gt;Fastlane deliver&lt;/li&gt;
&lt;li&gt;AppUploader upload tool&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To upload the IPA in AppUploader:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open "Submit Upload"&lt;/li&gt;
&lt;li&gt;Enter your Apple account&lt;/li&gt;
&lt;li&gt;Set the App-specific password&lt;/li&gt;
&lt;li&gt;Select the IPA file&lt;/li&gt;
&lt;li&gt;Click Upload&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After a successful upload, you can see the new build version in App Store Connect.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2F7ygaichnkdbgi9gb4hdc.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.amazonaws.com%2Fuploads%2Farticles%2F7ygaichnkdbgi9gb4hdc.png" alt="Upload IPA" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  iOS Developer Tools
&lt;/h2&gt;

&lt;p&gt;Common tool usage:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project Development&lt;/td&gt;
&lt;td&gt;Xcode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependency Management&lt;/td&gt;
&lt;td&gt;CocoaPods / SPM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Certificate Generation&lt;/td&gt;
&lt;td&gt;AppUploader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Provisioning Profile Management&lt;/td&gt;
&lt;td&gt;AppUploader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automated Building&lt;/td&gt;
&lt;td&gt;Fastlane&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IPA Upload&lt;/td&gt;
&lt;td&gt;AppUploader / Transporter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review Submission&lt;/td&gt;
&lt;td&gt;App Store Connect&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;iOS development is not just about writing code; it also involves signing, packaging, and publishing processes.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
    </item>
    <item>
      <title>HTTPS Packet Capture Process: Proxy Capture, Direct Device Connection via Cable, and TCP Data Analysis</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Tue, 14 Apr 2026 08:41:03 +0000</pubDate>
      <link>https://dev.to/datastack/https-packet-capture-process-proxy-capture-direct-device-connection-via-cable-and-tcp-data-4ehi</link>
      <guid>https://dev.to/datastack/https-packet-capture-process-proxy-capture-direct-device-connection-via-cable-and-tcp-data-4ehi</guid>
      <description>&lt;p&gt;In interface debugging, you may encounter the following issue:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The login interface in the app returns an exception&lt;/li&gt;
&lt;li&gt;The server logs show no obvious errors&lt;/li&gt;
&lt;li&gt;The client logs are incomplete, making it difficult to identify the problem&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In such cases, one approach is to capture HTTPS requests to inspect the data.&lt;/p&gt;

&lt;p&gt;However, another problem often arises:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;HTTPS from browsers can be captured normally&lt;/li&gt;
&lt;li&gt;HTTPS requests from the app fail directly&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The issue lies in whether the packet capture direction is correct.&lt;/p&gt;




&lt;h1&gt;
  
  
  1. First, Use Proxy Capture to Verify the HTTPS Environment
&lt;/h1&gt;

&lt;p&gt;The first step is to use a proxy capture tool, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Charles&lt;/li&gt;
&lt;li&gt;Proxyman&lt;/li&gt;
&lt;li&gt;SniffMaster&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to confirm whether HTTPS can be decrypted.&lt;/p&gt;




&lt;h2&gt;
  
  
  Set Up the Proxy Environment
&lt;/h2&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start SniffMaster&lt;/li&gt;
&lt;li&gt;Check the listening port, e.g., 8888&lt;/li&gt;
&lt;li&gt;Connect the iPhone and computer to the same Wi-Fi network&lt;/li&gt;
&lt;li&gt;Configure the proxy address and port in the iPhone's Wi-Fi settings&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After saving, return to the home screen.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2F71fd8tv5n0ri8mftewmj.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.amazonaws.com%2Fuploads%2Farticles%2F71fd8tv5n0ri8mftewmj.png" alt="Port" width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Install the HTTPS Certificate
&lt;/h2&gt;

&lt;p&gt;On the iPhone, perform the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use Safari to open the certificate address provided by the proxy tool&lt;/li&gt;
&lt;li&gt;Download the profile file&lt;/li&gt;
&lt;li&gt;Install the certificate&lt;/li&gt;
&lt;li&gt;Enable certificate trust in the system settings&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once completed, the proxy tool can decrypt HTTPS.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fxr5ccjis0m295seku86s.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.amazonaws.com%2Fuploads%2Farticles%2Fxr5ccjis0m295seku86s.png" alt="Install Certificate" width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Verify Successful HTTPS Capture
&lt;/h2&gt;

&lt;p&gt;Open Safari and visit an HTTPS website.&lt;/p&gt;

&lt;p&gt;If SniffMaster displays:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request URL&lt;/li&gt;
&lt;li&gt;Headers&lt;/li&gt;
&lt;li&gt;Response content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It indicates that the HTTPS capture environment is established.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fzhajzp95tcll2l7v3u5n.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.amazonaws.com%2Fuploads%2Farticles%2Fzhajzp95tcll2l7v3u5n.png" alt="Proxy Capture" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  2. Capture App HTTPS Requests
&lt;/h1&gt;

&lt;p&gt;In the same proxy environment, open the target app.&lt;/p&gt;

&lt;p&gt;Trigger login or data loading operations.&lt;/p&gt;

&lt;p&gt;Observe SniffMaster:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If request records appear → you can view the complete HTTPS data&lt;/li&gt;
&lt;li&gt;If no requests are recorded → further troubleshooting is needed&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;
  
  
  3. Common Symptoms of HTTPS Capture Failure
&lt;/h1&gt;

&lt;p&gt;In this case, the following occurred:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Safari requests could be captured&lt;/li&gt;
&lt;li&gt;App requests had no records at all&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This indicates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The proxy is functioning normally&lt;/li&gt;
&lt;li&gt;The app's network requests are not using the system proxy&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;
  
  
  4. Switch HTTPS Capture Modes
&lt;/h1&gt;

&lt;p&gt;When the proxy cannot capture HTTPS requests, switch to a different capture method.&lt;/p&gt;

&lt;p&gt;Here, use SniffMaster's HTTPS brute-force capture.&lt;/p&gt;

&lt;p&gt;This method does not rely on proxy certificates.&lt;/p&gt;


&lt;h2&gt;
  
  
  Use SniffMaster to Capture HTTPS
&lt;/h2&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connect the iPhone to the computer via USB&lt;/li&gt;
&lt;li&gt;Keep the device unlocked&lt;/li&gt;
&lt;li&gt;Tap "Trust This Computer" on the phone&lt;/li&gt;
&lt;li&gt;Start SniffMaster&lt;/li&gt;
&lt;li&gt;Select the iPhone from the device list&lt;/li&gt;
&lt;li&gt;Follow prompts to install iOS drivers&lt;/li&gt;
&lt;li&gt;Install the profile file&lt;/li&gt;
&lt;li&gt;Enter &lt;strong&gt;HTTPS Brute-Force Capture Mode&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click Start&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then trigger app requests on the phone.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fr1je6p57k48mt5j8p5gs.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.amazonaws.com%2Fuploads%2Farticles%2Fr1je6p57k48mt5j8p5gs.png" alt="Enter Brute-Force Capture" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Observe Capture Results
&lt;/h2&gt;

&lt;p&gt;In SniffMaster, you can see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request domain&lt;/li&gt;
&lt;li&gt;Request path&lt;/li&gt;
&lt;li&gt;Request headers&lt;/li&gt;
&lt;li&gt;Response data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even if the app does not use the proxy, HTTPS requests are still visible.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fy0fhdouitjsbzzoezhe2.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.amazonaws.com%2Fuploads%2Farticles%2Fy0fhdouitjsbzzoezhe2.png" alt="Brute-Force Capture" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  5. When HTTPS Data Is Incomplete
&lt;/h1&gt;

&lt;p&gt;During capture, you might encounter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL visible&lt;/li&gt;
&lt;li&gt;Headers visible&lt;/li&gt;
&lt;li&gt;Request body empty&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This indicates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTPS has been captured&lt;/li&gt;
&lt;li&gt;But the app is not signed with a development certificate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solution:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Obtain the app's IPA file&lt;/li&gt;
&lt;li&gt;Re-sign it using an iOS development certificate&lt;/li&gt;
&lt;li&gt;Reinstall the app&lt;/li&gt;
&lt;li&gt;Capture again&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After completion, the request body and response body will display normally.&lt;/p&gt;


&lt;h1&gt;
  
  
  6. Aspects of HTTPS Capture Unrelated to Ports
&lt;/h1&gt;

&lt;p&gt;During capture, you may observe:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;api.example.com:443
api.example.com:8443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Whether it's port 443 or a custom port:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As long as the TLS handshake succeeds&lt;/li&gt;
&lt;li&gt;The capture tool can parse HTTPS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ports do not affect decryption capability.&lt;/p&gt;




&lt;h1&gt;
  
  
  7. Limitations of Modifying HTTPS Requests
&lt;/h1&gt;

&lt;p&gt;If you need to modify request parameters, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rewriting interface data&lt;/li&gt;
&lt;li&gt;Simulating different return results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You must use a proxy capture tool.&lt;/p&gt;

&lt;p&gt;In Charles or Proxyman, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Rewrite&lt;/li&gt;
&lt;li&gt;Use Breakpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SniffMaster also supports interceptors, but &lt;strong&gt;only available in HTTPS proxy mode&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Device-level capture modes do not modify data.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fh6x19gqbxzlmg5cfkm0x.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.amazonaws.com%2Fuploads%2Farticles%2Fh6x19gqbxzlmg5cfkm0x.png" alt="Interceptor" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  8. Analyze HTTPS Issues with TCP Layer Analysis
&lt;/h1&gt;

&lt;p&gt;If HTTPS requests experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Timeouts&lt;/li&gt;
&lt;li&gt;Connection drops&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can export the data to Wireshark.&lt;/p&gt;

&lt;p&gt;In Wireshark, you can view:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TCP connection establishment process&lt;/li&gt;
&lt;li&gt;Data retransmissions&lt;/li&gt;
&lt;li&gt;Reasons for connection closure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This layer does not involve certificate issues.&lt;/p&gt;




&lt;p&gt;In practical debugging, follow this sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use proxy capture to verify HTTPS&lt;/li&gt;
&lt;li&gt;If the proxy cannot capture app requests, switch to device-level capture&lt;/li&gt;
&lt;li&gt;If data is incomplete, handle signature issues&lt;/li&gt;
&lt;li&gt;If connection issues are involved, analyze TCP data&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Reference link: &lt;a href="https://www.sniffmaster.net/tutorial/zh/1/1.html" rel="noopener noreferrer"&gt;https://www.sniffmaster.net/tutorial/zh/1/1.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
    </item>
    <item>
      <title>Viewing iPhone Hardware Component Energy Consumption History and Energy Usage</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Fri, 20 Mar 2026 11:10:49 +0000</pubDate>
      <link>https://dev.to/datastack/viewing-iphone-hardware-component-energy-consumption-history-and-energy-usage-53i1</link>
      <guid>https://dev.to/datastack/viewing-iphone-hardware-component-energy-consumption-history-and-energy-usage-53i1</guid>
      <description>&lt;p&gt;In mobile app development, rapid battery drain is a challenging issue to troubleshoot.&lt;br&gt;
Testers often provide vague descriptions, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Significant drop in phone battery level&lt;/li&gt;
&lt;li&gt;Device heating up after using a feature for a while&lt;/li&gt;
&lt;li&gt;Abnormal power consumption during background operation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without detailed device data, such problems are difficult to pinpoint. Battery level itself is just an outcome; the actual energy consumption comes from device hardware components like CPU, display, audio, network, etc.&lt;/p&gt;

&lt;p&gt;This article introduces several &lt;strong&gt;methods to view iPhone hardware energy consumption&lt;/strong&gt; and how to combine various tools for analysis in different scenarios.&lt;/p&gt;




&lt;h1&gt;
  
  
  Which Hardware Typically Causes iPhone Energy Issues
&lt;/h1&gt;

&lt;p&gt;In iOS devices, power consumption mainly comes from several hardware components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU&lt;/li&gt;
&lt;li&gt;Screen (display)&lt;/li&gt;
&lt;li&gt;Audio components (speaker, microphone)&lt;/li&gt;
&lt;li&gt;Network module&lt;/li&gt;
&lt;li&gt;Bluetooth and location services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When an app frequently uses these hardware components, energy consumption increases noticeably.&lt;/p&gt;

&lt;p&gt;Therefore, when troubleshooting issues, it's more important to observe &lt;strong&gt;which hardware is consuming power&lt;/strong&gt; rather than just checking battery percentage.&lt;/p&gt;




&lt;h1&gt;
  
  
  First Level: System Battery Statistics
&lt;/h1&gt;

&lt;p&gt;The simplest method is to check system battery statistics.&lt;/p&gt;

&lt;p&gt;Navigate to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Settings → Battery&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here you can see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Power consumption percentages for each app&lt;/li&gt;
&lt;li&gt;Data from the last 24 hours and 10 days&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helps confirm:&lt;/p&gt;

&lt;p&gt;Whether a specific app has abnormal power consumption.&lt;/p&gt;

&lt;p&gt;However, system statistics only show &lt;strong&gt;app-level power consumption&lt;/strong&gt; and cannot analyze specific hardware usage.&lt;/p&gt;




&lt;h1&gt;
  
  
  Second Level: Developer Tool Analysis
&lt;/h1&gt;

&lt;p&gt;In a development environment, you can use Xcode Instruments.&lt;/p&gt;

&lt;p&gt;Instruments' Energy Log can display:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU activity&lt;/li&gt;
&lt;li&gt;GPU usage&lt;/li&gt;
&lt;li&gt;Network activity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This method is suitable for development phases but has two limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires connection to a Mac&lt;/li&gt;
&lt;li&gt;Not convenient for long-term historical data observation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Therefore, during testing phases, many teams use device monitoring tools for supplementary analysis.&lt;/p&gt;




&lt;h1&gt;
  
  
  Using Keymob Assistant to View Hardware Energy Consumption History
&lt;/h1&gt;

&lt;p&gt;In project testing, I typically use &lt;strong&gt;Keymob Assistant&lt;/strong&gt; to view historical hardware usage on devices.&lt;/p&gt;

&lt;p&gt;This feature allows direct viewing of energy consumption records for various hardware components and enables time-based analysis.&lt;/p&gt;




&lt;h2&gt;
  
  
  Preparation
&lt;/h2&gt;

&lt;p&gt;Before viewing hardware energy consumption, you need to obtain device data.&lt;/p&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connect iPhone using a data cable&lt;/li&gt;
&lt;li&gt;Open Keymob Assistant&lt;/li&gt;
&lt;li&gt;Wait for device recognition&lt;/li&gt;
&lt;li&gt;Follow prompts to retrieve device usage records&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Initial data setup is required on first use.&lt;/p&gt;




&lt;h2&gt;
  
  
  Viewing Hardware Energy Consumption Ranking
&lt;/h2&gt;

&lt;p&gt;Navigation path:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Left navigation → Usage Records → Hardware Energy Consumption&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this interface, you can see energy consumption for various hardware components, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU&lt;/li&gt;
&lt;li&gt;Display&lt;/li&gt;
&lt;li&gt;Bluetooth&lt;/li&gt;
&lt;li&gt;Speaker&lt;/li&gt;
&lt;li&gt;Microphone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data is sorted by energy consumption.&lt;/p&gt;

&lt;p&gt;This allows quick identification of which hardware consumes the most.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fq1y510w1s0v1krj56pqz.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.amazonaws.com%2Fuploads%2Farticles%2Fq1y510w1s0v1krj56pqz.png" alt="Hardware Energy Consumption" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Viewing Detailed Hardware Usage
&lt;/h2&gt;

&lt;p&gt;To further analyze a specific hardware component, click &lt;strong&gt;Details&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, select:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audio Speaker&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After entering, you can see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily energy consumption bar chart&lt;/li&gt;
&lt;li&gt;Usage patterns across different time periods&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clicking on a specific day shows energy consumption data for different time periods that day.&lt;/p&gt;

&lt;p&gt;This helps analyze:&lt;/p&gt;

&lt;p&gt;Whether abnormal usage occurred during a specific time period.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2F29563r1olxtymtv1y66y.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.amazonaws.com%2Fuploads%2Farticles%2F29563r1olxtymtv1y66y.png" alt="Details" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Practical Case
&lt;/h1&gt;

&lt;p&gt;During a test, testers reported:&lt;/p&gt;

&lt;p&gt;"Battery drains quickly during background operation."&lt;/p&gt;

&lt;p&gt;Troubleshooting process:&lt;/p&gt;

&lt;p&gt;First step: Check system battery statistics.&lt;/p&gt;

&lt;p&gt;Found target app had high power consumption percentage.&lt;/p&gt;




&lt;p&gt;Second step: Use Keymob Assistant to view hardware energy consumption ranking.&lt;/p&gt;

&lt;p&gt;Found &lt;strong&gt;abnormal energy consumption in audio components&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;Third step: View detailed audio records.&lt;/p&gt;

&lt;p&gt;Found audio activity persisted during background periods.&lt;/p&gt;




&lt;p&gt;Final confirmation of cause:&lt;/p&gt;

&lt;p&gt;The app did not properly stop audio playback in the background.&lt;/p&gt;

&lt;p&gt;After fixing and retesting, energy consumption returned to normal.&lt;/p&gt;




&lt;h1&gt;
  
  
  Multi-Tool Combination Process
&lt;/h1&gt;

&lt;p&gt;In actual projects, I typically troubleshoot power consumption issues in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check system battery statistics&lt;/li&gt;
&lt;li&gt;Use device tools to view hardware energy consumption&lt;/li&gt;
&lt;li&gt;Analyze code logic with development tools&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach allows gradual narrowing down of the problem scope.&lt;/p&gt;




&lt;h1&gt;
  
  
  Hardware Energy Consumption Records Are Valuable
&lt;/h1&gt;

&lt;p&gt;Compared to instantaneous performance data, hardware energy consumption history has two advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can view usage over past days or even months&lt;/li&gt;
&lt;li&gt;Can precisely pinpoint time periods when issues occurred&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This enables correlation between &lt;strong&gt;user-reported time points&lt;/strong&gt; and &lt;strong&gt;device behavior&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;iPhone battery drain issues are typically related to specific hardware components rather than just battery problems. By combining system statistics, development tools, and device monitoring tools, you can progressively analyze how apps use hardware resources during operation.&lt;/p&gt;

&lt;p&gt;Reference link: &lt;a href="https://keymob.com/tutorial/zh/27/27.html" rel="noopener noreferrer"&gt;https://keymob.com/tutorial/zh/27/27.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
    </item>
    <item>
      <title>How to Perform Proxy Packet Capture and Data Flow Analysis on Mac</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Fri, 20 Mar 2026 10:11:27 +0000</pubDate>
      <link>https://dev.to/datastack/how-to-perform-proxy-packet-capture-and-data-flow-analysis-on-mac-1bb5</link>
      <guid>https://dev.to/datastack/how-to-perform-proxy-packet-capture-and-data-flow-analysis-on-mac-1bb5</guid>
      <description>&lt;p&gt;When debugging networks on macOS, packet capture is usually the first step.&lt;br&gt;
For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App fails to request an API&lt;/li&gt;
&lt;li&gt;An API returns abnormal data&lt;/li&gt;
&lt;li&gt;Need to confirm parameters sent by the client&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For these issues, relying solely on code logs makes it difficult to judge network behavior; packet capture allows direct viewing of requests and responses.&lt;/p&gt;

&lt;p&gt;Below, through a debugging process, several common methods for packet capture on Mac are introduced.&lt;/p&gt;




&lt;h1&gt;
  
  
  1. First, Capture Network Requests from the Mac Itself
&lt;/h1&gt;

&lt;p&gt;If you need to view network requests from programs on the Mac itself, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browser accessing APIs&lt;/li&gt;
&lt;li&gt;Desktop applications calling interfaces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The simplest method is to use proxy packet capture tools, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Charles&lt;/li&gt;
&lt;li&gt;Proxyman&lt;/li&gt;
&lt;li&gt;SniffMaster&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools run locally and intercept requests via proxy.&lt;/p&gt;




&lt;h2&gt;
  
  
  Configuring Proxy Packet Capture
&lt;/h2&gt;

&lt;p&gt;Steps are as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start Charles or SniffMaster on Mac&lt;/li&gt;
&lt;li&gt;Check the proxy listening port, e.g., &lt;strong&gt;8888&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enable system proxy in macOS network settings&lt;/li&gt;
&lt;li&gt;Set HTTP and HTTPS proxy to the local address&lt;/li&gt;
&lt;li&gt;Save settings&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once done, local network requests will first pass through the proxy tool.&lt;/p&gt;




&lt;h2&gt;
  
  
  Installing HTTPS Certificates
&lt;/h2&gt;

&lt;p&gt;If requests use HTTPS, you need to install proxy certificates.&lt;/p&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Access the certificate address provided by the proxy tool in a browser&lt;/li&gt;
&lt;li&gt;Download the certificate&lt;/li&gt;
&lt;li&gt;Install the certificate in macOS Keychain&lt;/li&gt;
&lt;li&gt;Set the certificate to &lt;strong&gt;Always Trust&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once done, the proxy tool can decrypt HTTPS requests.&lt;/p&gt;




&lt;h2&gt;
  
  
  Verifying Successful Packet Capture
&lt;/h2&gt;

&lt;p&gt;Open a browser and visit an HTTPS website.&lt;/p&gt;

&lt;p&gt;If request records appear in the proxy tool and response content can be viewed, the packet capture environment is established.&lt;/p&gt;




&lt;h1&gt;
  
  
  2. Capturing iPhone Network Requests on Mac
&lt;/h1&gt;

&lt;p&gt;If you need to debug network behavior of an iOS App, you can route iPhone traffic through the Mac.&lt;/p&gt;

&lt;p&gt;The common method is still proxy packet capture.&lt;/p&gt;




&lt;h2&gt;
  
  
  Setting Up iPhone Proxy
&lt;/h2&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connect iPhone and Mac to the same Wi-Fi&lt;/li&gt;
&lt;li&gt;Open iPhone Settings → Wi-Fi&lt;/li&gt;
&lt;li&gt;Tap the current network&lt;/li&gt;
&lt;li&gt;Under HTTP Proxy, select &lt;strong&gt;Manual&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enter the Mac's IP address&lt;/li&gt;
&lt;li&gt;Enter the proxy port (e.g., 8888)
&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.amazonaws.com%2Fuploads%2Farticles%2Fh9sjkdaci9nx9sykqrmk.png" alt="Port Configuration" width="800" height="578"&gt;
Save and return to the home screen.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Installing iOS HTTPS Certificates
&lt;/h2&gt;

&lt;p&gt;In iPhone Safari, access the certificate address provided by the proxy tool:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the profile&lt;/li&gt;
&lt;li&gt;Install the certificate&lt;/li&gt;
&lt;li&gt;Enable certificate trust in iOS Settings&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once done, the proxy tool can decrypt iOS HTTPS requests.&lt;/p&gt;




&lt;h2&gt;
  
  
  Testing App Network Requests
&lt;/h2&gt;

&lt;p&gt;Open the App and trigger network operations, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Login&lt;/li&gt;
&lt;li&gt;Loading a list&lt;/li&gt;
&lt;li&gt;Submitting a form&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the proxy tool, you can see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request URL&lt;/li&gt;
&lt;li&gt;Headers&lt;/li&gt;
&lt;li&gt;Request body&lt;/li&gt;
&lt;li&gt;Response content&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  3. When Proxy Fails to Capture App Requests
&lt;/h1&gt;

&lt;p&gt;Sometimes, this situation occurs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Safari requests can be captured&lt;/li&gt;
&lt;li&gt;App requests have no records&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This indicates the App is not using the system proxy.&lt;/p&gt;

&lt;p&gt;In this case, further adjusting proxy settings won't change the outcome.&lt;/p&gt;

&lt;p&gt;Device-level packet capture is needed.&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Using Device-Level Packet Capture Tools on Mac
&lt;/h1&gt;

&lt;p&gt;Device-level packet capture directly reads network data from the device side.&lt;/p&gt;

&lt;p&gt;In this scenario, you can use &lt;strong&gt;SniffMaster&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Using SniffMaster to Capture iOS Traffic
&lt;/h2&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connect iPhone to Mac via USB&lt;/li&gt;
&lt;li&gt;Keep the device unlocked&lt;/li&gt;
&lt;li&gt;Tap &lt;strong&gt;Trust This Computer&lt;/strong&gt; on the phone&lt;/li&gt;
&lt;li&gt;Launch SniffMaster&lt;/li&gt;
&lt;li&gt;Select iPhone from the device list&lt;/li&gt;
&lt;li&gt;Follow prompts to install the profile&lt;/li&gt;
&lt;li&gt;Enter &lt;strong&gt;HTTPS Brute Force Capture Mode&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click Start&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then trigger network requests on the phone.&lt;/p&gt;

&lt;p&gt;Corresponding HTTPS requests will appear in the capture interface.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fwbxp29mpi6n9lqt0fifl.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.amazonaws.com%2Fuploads%2Farticles%2Fwbxp29mpi6n9lqt0fifl.png" alt="Brute Force Capture" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Viewing Only a Specific App's Traffic
&lt;/h2&gt;

&lt;p&gt;Device-level capture includes system network traffic, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DNS requests&lt;/li&gt;
&lt;li&gt;Apple service connections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To more easily locate target requests, you can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Select App&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Check the target application&lt;/li&gt;
&lt;li&gt;Trigger network operations again&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The capture list will only show that App's requests.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fgo8vo86evyzf5whdthur.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.amazonaws.com%2Fuploads%2Farticles%2Fgo8vo86evyzf5whdthur.png" alt="App" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Analyzing TCP or UDP Network Issues
&lt;/h1&gt;

&lt;p&gt;If debugging involves network connection issues, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request latency&lt;/li&gt;
&lt;li&gt;Connection drops&lt;/li&gt;
&lt;li&gt;Packet loss&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data flow packet capture can be used.&lt;/p&gt;

&lt;p&gt;SniffMaster supports capturing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TCP data streams&lt;/li&gt;
&lt;li&gt;UDP data streams&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fmt8mhhnqrorwiqp9dniv.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.amazonaws.com%2Fuploads%2Farticles%2Fmt8mhhnqrorwiqp9dniv.png" alt="Data Flow Capture" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After capture, data can be exported to &lt;strong&gt;Wireshark&lt;/strong&gt; for analysis.&lt;/p&gt;

&lt;p&gt;In Wireshark, you can view:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TCP three-way handshake&lt;/li&gt;
&lt;li&gt;Data retransmissions&lt;/li&gt;
&lt;li&gt;Connection closure reasons&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  6. Use Cases for Different Packet Capture Tools
&lt;/h1&gt;

&lt;p&gt;In network packet capture, different tools serve different purposes:&lt;br&gt;
| Tool         | Capture Method   | Main Use Case          |&lt;br&gt;
| ------------ | ---------------- | ---------------------- |&lt;br&gt;
| Charles      | Proxy Capture    | HTTP / HTTPS Debugging |&lt;br&gt;
| Proxyman     | Proxy Capture    | HTTPS Debugging        |&lt;br&gt;
| SniffMaster  | Device-Level Capture | iOS Network Data       |&lt;br&gt;
| Wireshark    | Network Layer Capture | TCP / UDP Analysis     |&lt;/p&gt;




&lt;p&gt;When debugging networks on Mac, you can follow this sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use proxy capture tools to view HTTP / HTTPS requests&lt;/li&gt;
&lt;li&gt;If proxy fails to capture requests, use SniffMaster for device-level capture&lt;/li&gt;
&lt;li&gt;If network connection analysis is needed, export data to Wireshark&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach covers most packet capture scenarios.&lt;/p&gt;

&lt;p&gt;Reference link: &lt;a href="https://www.sniffmaster.net/" rel="noopener noreferrer"&gt;https://www.sniffmaster.net/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
    </item>
    <item>
      <title>Complete Guide to H5 Mobile Debugging: Full Practice from Browser Simulation to Real-Device WebView Debugging</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Fri, 05 Dec 2025 10:19:29 +0000</pubDate>
      <link>https://dev.to/datastack/complete-guide-to-h5-mobile-debugging-full-practice-from-browser-simulation-to-real-device-webview-57gi</link>
      <guid>https://dev.to/datastack/complete-guide-to-h5-mobile-debugging-full-practice-from-browser-simulation-to-real-device-webview-57gi</guid>
      <description>&lt;p&gt;In the world of frontend development, "perfect on desktop, broken on mobile" is a classic scenario almost every engineer has experienced.&lt;/p&gt;

&lt;p&gt;A page works fine in Chrome, but on mobile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Elements are misaligned, animations drop frames;&lt;/li&gt;
&lt;li&gt;It works on iPhone but shows a white screen on Android;&lt;/li&gt;
&lt;li&gt;Network requests hang, the console is silent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The difficulty of H5 mobile debugging isn't that there are many bugs, but that the problems are invisible.&lt;/p&gt;

&lt;p&gt;In this article, we'll systematically explain how to build an &lt;strong&gt;efficient, reproducible H5 mobile debugging system&lt;/strong&gt; from a frontend practical perspective, covering browser simulation, real-device debugging, WebView analysis, network monitoring, and performance optimization.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Why is H5 Mobile Debugging More Complex Than Desktop?
&lt;/h2&gt;

&lt;p&gt;The essence of debugging is "visually understanding system behavior," and on mobile, the biggest challenge is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;H5 pages run not in a browser, but in a WebView.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Desktop Browser&lt;/th&gt;
&lt;th&gt;Mobile WebView&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kernel&lt;/td&gt;
&lt;td&gt;Unified (Chromium)&lt;/td&gt;
&lt;td&gt;Varies by vendor (WebKit / Blink / X5 / UC)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debug Interface&lt;/td&gt;
&lt;td&gt;Fully open&lt;/td&gt;
&lt;td&gt;Closed or restricted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Log Output&lt;/td&gt;
&lt;td&gt;Visible in console&lt;/td&gt;
&lt;td&gt;Invisible within container&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network Requests&lt;/td&gt;
&lt;td&gt;Easy to monitor&lt;/td&gt;
&lt;td&gt;Affected by proxies, SDKs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Stable hardware&lt;/td&gt;
&lt;td&gt;Limited by device performance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Thus, the same page may behave completely differently across different phones, apps, and OS versions.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Desktop Simulation Debugging: The First Step in Initial Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1️⃣ Chrome DevTools: Essential Basics&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Chrome's device simulation mode is the starting point for mobile debugging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simulate device dimensions and DPR;&lt;/li&gt;
&lt;li&gt;Simulate touch events;&lt;/li&gt;
&lt;li&gt;Switch network speeds (3G, Slow 4G);&lt;/li&gt;
&lt;li&gt;Simulate user agent (UA).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Applicable Scenarios:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responsive layout validation;&lt;/li&gt;
&lt;li&gt;Media query breakpoint testing;&lt;/li&gt;
&lt;li&gt;First-load and lazy-load logic checks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only visual simulation;&lt;/li&gt;
&lt;li&gt;Cannot reflect actual WebView behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Desktop simulation debugging = "pre-debugging phase," not the end goal.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;2️⃣ Firefox / Edge Debugging&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Firefox offers more intuitive visual debugging for CSS Grid and Flex layouts;&lt;/li&gt;
&lt;li&gt;Edge inherits the Chromium ecosystem, providing a synchronized DevTools debugging experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Chrome simulation + Firefox layout analysis is a classic combination.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. Real-Device Remote Debugging: Entering the "Real Environment"
&lt;/h2&gt;

&lt;p&gt;When issues occur on real devices, simulators are no help.&lt;br&gt;
At this point, real-device remote debugging tools are needed.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;1️⃣ iOS Platform: Safari Remote Debug&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Setup Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Mac's Safari → Preferences → Advanced → Check "Show Develop menu";&lt;/li&gt;
&lt;li&gt;Connect iPhone to computer;&lt;/li&gt;
&lt;li&gt;Open H5 page → Safari → "Develop" → Device → Page;&lt;/li&gt;
&lt;li&gt;Real-time debugging is available.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Viewable Content:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DOM, CSS, JS debugging;&lt;/li&gt;
&lt;li&gt;Network requests;&lt;/li&gt;
&lt;li&gt;Console logs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;macOS only;&lt;/li&gt;
&lt;li&gt;Supports only Safari / WKWebView.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;2️⃣ Android Platform: Chrome Inspect&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Operation Method:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Enable Android Developer Options → USB debugging;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Connect to computer → Enter in Chrome address bar:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   chrome://inspect/#devices
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Click "Inspect" to open the remote debugging panel.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;View page DOM, JS, network requests;&lt;/li&gt;
&lt;li&gt;Synchronous debugging in real environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only works with Chrome WebView;&lt;/li&gt;
&lt;li&gt;Cannot detect custom kernels like WeChat, Alipay, UC.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. WebView Scenarios: The Biggest "Blind Spot" in Mobile Debugging
&lt;/h2&gt;

&lt;p&gt;Most mobile H5 pages don't run directly in a browser,&lt;br&gt;
but are embedded in &lt;strong&gt;WebViews within various Apps&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Issues in these environments typically include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;White screen with no console output;&lt;/li&gt;
&lt;li&gt;Requests intercepted by SDKs or proxies;&lt;/li&gt;
&lt;li&gt;JS errors without accessible logs;&lt;/li&gt;
&lt;li&gt;Inconsistent behavior between iOS and Android.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Traditional DevTools "can't see inside" in such scenarios.&lt;br&gt;
Here, more specialized WebView debugging tools are needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. WebDebugX: Making WebView Debugging "Visible"
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;WebDebugX&lt;/strong&gt; is a cross-platform WebView remote debugging tool that can debug &lt;strong&gt;iOS and Android&lt;/strong&gt; WebView pages on &lt;strong&gt;Windows / macOS / Linux&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Its goal is simple: make debugging H5 pages in Apps as seamless as in Chrome.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Core Features&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature Module&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DOM Debugging&lt;/td&gt;
&lt;td&gt;Real-time view / modify page structure and styles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JS Debugging&lt;/td&gt;
&lt;td&gt;Supports breakpoints, variable inspection, stack traces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network Monitoring&lt;/td&gt;
&lt;td&gt;Packet capture, interception, replay, response simulation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance Analysis&lt;/td&gt;
&lt;td&gt;View FPS, memory usage, CPU time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Log Capture&lt;/td&gt;
&lt;td&gt;Collect console.log and error info in WebView&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-Platform Support&lt;/td&gt;
&lt;td&gt;One tool for all platforms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Real Project Case&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A WeChat-embedded H5 activity page randomly showed a white screen on Android phones.&lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;WebDebugX&lt;/strong&gt;, debugging revealed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JS executed too early during WebView initialization;&lt;/li&gt;
&lt;li&gt;Some scripts were blocked by CSP policies;&lt;/li&gt;
&lt;li&gt;After adjusting load order, the issue disappeared completely.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Traditional DevTools couldn't see this information at all.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Integration with Other Tools&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chrome DevTools&lt;/td&gt;
&lt;td&gt;Desktop simulation&lt;/td&gt;
&lt;td&gt;Initial development&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Charles / Fiddler&lt;/td&gt;
&lt;td&gt;Network capture&lt;/td&gt;
&lt;td&gt;Integration phase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vConsole / Eruda&lt;/td&gt;
&lt;td&gt;Log output&lt;/td&gt;
&lt;td&gt;WeChat-embedded pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebDebugX&lt;/td&gt;
&lt;td&gt;Real-device WebView&lt;/td&gt;
&lt;td&gt;Terminal testing &amp;amp; performance optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  6. Performance Debugging: Making H5 Pages "Fast and Smooth"
&lt;/h2&gt;

&lt;p&gt;Performance issues on mobile often hide in JS and the rendering layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Lighthouse (Desktop)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Analyze first-load, interaction delays;&lt;/li&gt;
&lt;li&gt;Automatically generate performance scores and optimization suggestions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;WebDebugX Performance Module (Real Device)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;View FPS curves, rendering block points;&lt;/li&gt;
&lt;li&gt;Detect memory leaks and long tasks;&lt;/li&gt;
&lt;li&gt;Identify bottlenecks in image, font resource loading.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Desktop performance ≠ real-device performance. WebDebugX makes performance optimization data more realistic.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. Building a Complete Mobile Debugging System
&lt;/h2&gt;

&lt;p&gt;A mature frontend team should integrate debugging into the engineering system, not treat it as "emergency firefighting."&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Tool Combination&lt;/th&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Development&lt;/td&gt;
&lt;td&gt;Chrome DevTools + vConsole&lt;/td&gt;
&lt;td&gt;Logic and style validation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integration&lt;/td&gt;
&lt;td&gt;Charles / Postman&lt;/td&gt;
&lt;td&gt;Interface and network troubleshooting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real Device&lt;/td&gt;
&lt;td&gt;Safari / Chrome Inspect / WebDebugX&lt;/td&gt;
&lt;td&gt;Mobile debugging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Lighthouse / WebDebugX&lt;/td&gt;
&lt;td&gt;Load and render optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Treat debugging as a process, not a temporary action.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. Debugging Mindset: Hypothesize First, Then Verify
&lt;/h2&gt;

&lt;p&gt;Frontend debugging isn't "by feeling," but "hypothesis-driven verification."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thought Process:&lt;/strong&gt;&lt;br&gt;
 Reproduce issue →&lt;br&gt;
 Hypothesize cause →&lt;br&gt;
 Locate level (logic / network / WebView) →&lt;br&gt;
 Choose right tool to verify →&lt;br&gt;
 Quantify results and document.&lt;/p&gt;

&lt;p&gt;The biggest benefit: even after a bug is fixed, you retain traceable debugging knowledge.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>software</category>
      <category>mobile</category>
    </item>
    <item>
      <title>iOS Performance Tools Review: Comparison and recommended mixes of six common solutions (2025).</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Thu, 04 Dec 2025 03:37:09 +0000</pubDate>
      <link>https://dev.to/datastack/ios-performance-tools-review-comparison-and-recommended-mixes-of-six-common-solutions-2025-3nnm</link>
      <guid>https://dev.to/datastack/ios-performance-tools-review-comparison-and-recommended-mixes-of-six-common-solutions-2025-3nnm</guid>
      <description>&lt;p&gt;In the era of mobile applications, competition has shifted from feature wars to &lt;strong&gt;performance wars&lt;/strong&gt;. Whether it's gaming apps, social applications, or financial tools, performance smoothness and resource consumption directly determine user retention. For iOS developers, finding a suitable performance monitoring tool often means debugging and optimization efficiency can be improved several times.&lt;/p&gt;

&lt;p&gt;This article is based on the latest iOS 26 system and selects six widely used performance monitoring tools in the developer community for in-depth evaluation: &lt;strong&gt;Xcode Instruments, Firebase Performance, New Relic, KeyMob, TestFlight Metrics, PerfDog&lt;/strong&gt;. Through comparisons in dimensions such as functionality, accuracy, ease of use, and platform support, it helps developers choose the performance monitoring solution that suits their team.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. Evaluation Standards and Test Environment
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Test Platform:&lt;/strong&gt; iPhone 15 Pro (iOS 26.0)&lt;br&gt;
&lt;strong&gt;Test Application:&lt;/strong&gt; A social app with complex animations and network requests&lt;br&gt;
&lt;strong&gt;Evaluation Dimensions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;CPU / Memory / GPU / Network / Energy consumption monitoring capabilities&lt;/li&gt;
&lt;li&gt;Monitoring accuracy and real-time performance&lt;/li&gt;
&lt;li&gt;Cross-platform compatibility&lt;/li&gt;
&lt;li&gt;Log analysis and export capabilities&lt;/li&gt;
&lt;li&gt;Long-term operation stability&lt;/li&gt;
&lt;li&gt;Support for development processes (CI/CD)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All tools were tested under the same environment to ensure data consistency.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Xcode Instruments — The Official Benchmark Tool
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Type:&lt;/strong&gt; Official development tool&lt;br&gt;
&lt;strong&gt;Applicable Stage:&lt;/strong&gt; Development and local debugging&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Functions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU and call stack analysis (Time Profiler)&lt;/li&gt;
&lt;li&gt;Memory allocation and leak detection (Allocations, Leaks)&lt;/li&gt;
&lt;li&gt;GPU rendering efficiency (Core Animation)&lt;/li&gt;
&lt;li&gt;Battery and energy consumption analysis (Energy Log)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;br&gt;
 Extremely high sampling accuracy, suitable for low-level performance analysis&lt;br&gt;
 Perfect integration with Xcode, smooth debugging experience&lt;br&gt;
 Can directly view symbolized call stacks&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages:&lt;/strong&gt;&lt;br&gt;
 Cannot cross-platform&lt;br&gt;
 Affects performance during runtime, cannot sample for long periods&lt;br&gt;
 Does not support online or non-development signed applications&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Applicable Scenarios:&lt;/strong&gt; Code-level performance debugging, short-term sampling analysis&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Firebase Performance — The Preferred Cloud Performance Monitoring Tool
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Type:&lt;/strong&gt; Cloud monitoring tool&lt;br&gt;
&lt;strong&gt;Applicable Stage:&lt;/strong&gt; Beta testing and official release stages&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Functions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Startup time and network latency monitoring&lt;/li&gt;
&lt;li&gt;Page rendering and interaction performance analysis&lt;/li&gt;
&lt;li&gt;Regional distribution and device difference reports&lt;/li&gt;
&lt;li&gt;Automatic collection of user-side performance data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;br&gt;
 Can continuously collect real user data&lt;br&gt;
 No additional operations required, automatic reporting&lt;br&gt;
 Perfect integration with Crashlytics&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages:&lt;/strong&gt;&lt;br&gt;
 Limited sampling frequency, cannot obtain frame rate and GPU metrics&lt;br&gt;
 Cannot view detailed CPU usage inside the app&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Applicable Scenarios:&lt;/strong&gt; Online performance trend analysis, performance regression verification after release&lt;/p&gt;




&lt;h3&gt;
  
  
  4. New Relic Mobile — Enterprise-Level Performance Visualization Platform
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Type:&lt;/strong&gt; Commercial monitoring solution&lt;br&gt;
&lt;strong&gt;Applicable Stage:&lt;/strong&gt; Enterprise versions and long-term operation analysis&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Functions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time performance dashboard&lt;/li&gt;
&lt;li&gt;User interaction and error path visualization&lt;/li&gt;
&lt;li&gt;Network request performance tracking&lt;/li&gt;
&lt;li&gt;Multi-version comparative analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;br&gt;
 Supports centralized monitoring of multiple apps&lt;br&gt;
 Intuitive dashboard, suitable for large team collaboration&lt;br&gt;
 Can integrate with CI/CD, Jenkins&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages:&lt;/strong&gt;&lt;br&gt;
 Complex installation and configuration&lt;br&gt;
 Higher cost for individual developers&lt;br&gt;
 Cannot monitor GPU/frame rate and other visual performance metrics&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Applicable Scenarios:&lt;/strong&gt; Large teams, continuous performance analysis of online versions&lt;/p&gt;




&lt;h3&gt;
  
  
  5. KeyMob — All-in-One Performance Monitoring Tool from a Developer's Perspective
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Type:&lt;/strong&gt; Cross-platform performance and file analysis tool&lt;br&gt;
&lt;strong&gt;Applicable Stage:&lt;/strong&gt; Development, debugging, testing&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Functions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time CPU, GPU, memory, network, FPS monitoring&lt;/li&gt;
&lt;li&gt;Lag detection, energy consumption analysis, log export&lt;/li&gt;
&lt;li&gt;Supports app file decryption and historical performance records&lt;/li&gt;
&lt;li&gt;Supports multiple frameworks such as Swift, Flutter, Unity, Cocos2d&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;br&gt;
 Can run on non-jailbroken devices&lt;br&gt;
 Supports Windows, macOS, Linux&lt;br&gt;
 Intuitive data visualization, clear historical curve comparison&lt;br&gt;
 Can cross-app monitor mini-programs and container performance&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages:&lt;/strong&gt;&lt;br&gt;
 Cannot directly integrate with cloud statistical systems (requires data export)&lt;br&gt;
 Requires manual integration for analysis reports&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Applicable Scenarios:&lt;/strong&gt; Performance debugging, file analysis, performance verification during development&lt;/p&gt;




&lt;h3&gt;
  
  
  6. TestFlight Metrics — Performance Metric Collection in Beta Stage
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Type:&lt;/strong&gt; Apple's official beta data collection service&lt;br&gt;
&lt;strong&gt;Applicable Stage:&lt;/strong&gt; Test distribution and user experience tracking&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Functions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crash rate and stability statistics&lt;/li&gt;
&lt;li&gt;Startup time and response speed&lt;/li&gt;
&lt;li&gt;Installation retention and device information statistics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;br&gt;
 No additional configuration required, automatic data collection&lt;br&gt;
 Integrated with Xcode Connect&lt;br&gt;
 Secure, reliable, and privacy-compliant&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages:&lt;/strong&gt;&lt;br&gt;
 Limited metric dimensions (no CPU/GPU monitoring)&lt;br&gt;
 Cannot export detailed logs or time-series data&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Applicable Scenarios:&lt;/strong&gt; Performance verification before app release and gray-scale testing&lt;/p&gt;




&lt;h3&gt;
  
  
  7. PerfDog — Performance Tool for Gaming and Multimedia Apps
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Type:&lt;/strong&gt; Third-party real-time performance testing platform&lt;br&gt;
&lt;strong&gt;Applicable Stage:&lt;/strong&gt; Performance analysis for gaming and high-frame-rate applications&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Functions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPU rendering time analysis&lt;/li&gt;
&lt;li&gt;Network jitter and latency detection&lt;/li&gt;
&lt;li&gt;CPU/GPU temperature monitoring&lt;/li&gt;
&lt;li&gt;Cross-platform performance data collection (iOS/Android)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;br&gt;
 Clear performance charts, high testing accuracy&lt;br&gt;
 Supports long-term operation and comparative reports&lt;br&gt;
 Especially suitable for performance tuning of gaming apps&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages:&lt;/strong&gt;&lt;br&gt;
 Installation depends on a computer-side client&lt;br&gt;
 Not suitable for fine-grained debugging of conventional apps&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Applicable Scenarios:&lt;/strong&gt; Gaming performance testing, cross-platform performance comparison&lt;/p&gt;




&lt;h3&gt;
  
  
  8. Horizontal Comparison of Six Tools
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool Name&lt;/th&gt;
&lt;th&gt;Monitoring Dimensions&lt;/th&gt;
&lt;th&gt;Real-time&lt;/th&gt;
&lt;th&gt;Cloud Support&lt;/th&gt;
&lt;th&gt;Cross-platform&lt;/th&gt;
&lt;th&gt;Difficulty&lt;/th&gt;
&lt;th&gt;Recommended Stage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Xcode Instruments&lt;/td&gt;
&lt;td&gt;CPU/Memory/GPU/Energy&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Development Debugging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firebase Performance&lt;/td&gt;
&lt;td&gt;Startup/Network/Rendering&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;Online Monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New Relic Mobile&lt;/td&gt;
&lt;td&gt;CPU/Network/Crash&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Enterprise Monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KeyMob&lt;/td&gt;
&lt;td&gt;CPU/GPU/Memory/Logs&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;All Stages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TestFlight Metrics&lt;/td&gt;
&lt;td&gt;Startup/Stability&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;Beta Testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PerfDog&lt;/td&gt;
&lt;td&gt;FPS/Temperature/Network&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Gaming Testing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Comprehensive Evaluation Results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Development Stage Tools:&lt;/strong&gt; KeyMob + Instruments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Release Stage Tools:&lt;/strong&gt; Firebase + New Relic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Testing Combination:&lt;/strong&gt; PerfDog + KeyMob (suitable for high-frame-rate applications)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  9. Multi-Tool Combination Strategy Recommendations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;(1) Development Stage: Precise Sampling + System Log Analysis&lt;/strong&gt;&lt;br&gt;
 Use &lt;strong&gt;Xcode Instruments + KeyMob&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Instruments locates function performance bottlenecks, KeyMob supplements system-level CPU, memory, network trends.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;(2) Testing Stage: Beta Users and Real Device Verification&lt;/strong&gt;&lt;br&gt;
 Use &lt;strong&gt;TestFlight Metrics + KeyMob&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Collect performance metrics from test devices, while monitoring real-time data and crash logs with KeyMob.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;(3) Release Stage: Real-time Performance Regression&lt;/strong&gt;&lt;br&gt;
 Use &lt;strong&gt;Firebase Performance + New Relic&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Continuously collect performance trends in the cloud, enabling comparative analysis between versions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;(4) Gaming/High-Performance Scenarios&lt;/strong&gt;&lt;br&gt;
 Use &lt;strong&gt;PerfDog + KeyMob&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Simultaneously capture frame rate fluctuations and device temperature to identify performance bottlenecks.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  10. Conclusion: Best Practices for Performance Monitoring
&lt;/h3&gt;

&lt;p&gt;iOS performance optimization is no longer a matter of single-point tuning but a systematic engineering effort. From Xcode's low-level sampling to KeyMob's real-time monitoring, and Firebase's online trend analysis, a multi-tool collaborative combination is necessary to build a truly reliable performance assurance system.&lt;/p&gt;

&lt;p&gt;Performance data is not just "monitoring results"; it is the &lt;strong&gt;basis for development decisions&lt;/strong&gt;. Mastering performance means mastering the initiative in user experience.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>software</category>
    </item>
    <item>
      <title>Complete Analysis of iOS Submission Process for uni-app: Full Practice from Packaging to Release</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Sat, 08 Nov 2025 08:02:22 +0000</pubDate>
      <link>https://dev.to/datastack/complete-analysis-of-ios-submission-process-for-uni-app-full-practice-from-packaging-to-release-4cg4</link>
      <guid>https://dev.to/datastack/complete-analysis-of-ios-submission-process-for-uni-app-full-practice-from-packaging-to-release-4cg4</guid>
      <description>&lt;p&gt;uni-app, as a cross-platform development framework, has become the first choice for many teams and individual developers due to its "write once, run everywhere" feature.&lt;/p&gt;

&lt;p&gt;However, many developers often encounter complex processes, scattered tools, and tedious reviews during the &lt;strong&gt;iOS app submission phase&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This article will focus on the &lt;strong&gt;iOS submission process for uni-app&lt;/strong&gt;, combining practical experience to detail the entire process from certificate preparation to TestFlight distribution and App Store release, and provide tool combination solutions for different stages.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Preparation Phase: iOS Certificates and Provisioning Profiles
&lt;/h2&gt;

&lt;p&gt;In a uni-app project, to successfully package and submit an iOS app, you must first apply for &lt;strong&gt;iOS development certificates&lt;/strong&gt; and &lt;strong&gt;distribution certificates&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mac users&lt;/strong&gt;: Can generate a CSR file via Xcode or Keychain Access, then apply for certificates in the Apple Developer Center.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-platform users (Windows/Linux)&lt;/strong&gt;: Can use &lt;strong&gt;Appuploader&lt;/strong&gt; to directly generate p12 certificates and provisioning profiles without a Mac.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Team practical experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is recommended to uniformly export as &lt;code&gt;.p12&lt;/code&gt; files and set certificate naming conventions (e.g., &lt;code&gt;UniApp_Project_Dist_2025.p12&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Store certificates and provisioning profiles centrally in a team repository to avoid packaging failures due to loss of personal computers.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Packaging Phase: Generating ipa from HBuilderX
&lt;/h2&gt;

&lt;p&gt;uni-app packaging has two main methods:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Cloud Packaging (Recommended for small teams/without Mac environment)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In &lt;strong&gt;HBuilderX → Distribution → Native App - Cloud Packaging&lt;/strong&gt;, upload certificates and provisioning profiles.&lt;/li&gt;
&lt;li&gt;The cloud directly generates the ipa file.&lt;/li&gt;
&lt;li&gt;Suitable for teams without Macs to quickly deliver.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Local Packaging (Requires Mac environment)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use HBuilderX to export the Xcode project.&lt;/li&gt;
&lt;li&gt;Open the project in Xcode on a Mac, perform &lt;strong&gt;Archive&lt;/strong&gt; packaging, and export the ipa file.&lt;/li&gt;
&lt;li&gt;More flexible, suitable for teams requiring customized configurations.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Upload Phase: Choices for Multi-Tool Combinations
&lt;/h2&gt;

&lt;p&gt;After generating the ipa, it needs to be uploaded to Apple's servers to enter TestFlight or the App Store.&lt;/p&gt;

&lt;p&gt;Common solutions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Xcode upload&lt;/strong&gt;: Intuitive, but limited to Mac users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transporter&lt;/strong&gt;: Apple's official standalone upload tool, suitable for stable scenarios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Appuploader&lt;/strong&gt;: Supports Windows/Linux/Mac, cross-platform upload without Mac.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fastlane&lt;/strong&gt;: Command-line tool, suitable for CI/CD automated workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small teams tend to use Appuploader for convenient cross-platform uploads.&lt;/li&gt;
&lt;li&gt;Medium to large teams often use Fastlane + Jenkins for automation.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Distribution Phase: Internal and External Testing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Internal Testing (TestFlight Internal Testing)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Supports up to 25 accounts, with immediate installation.&lt;/li&gt;
&lt;li&gt;Suitable for internal team validation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. External Testing (TestFlight External Testing)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Supports up to 10,000 users.&lt;/li&gt;
&lt;li&gt;Requires Apple review after upload (approximately 24 hours).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Alternative Solutions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;For small-scale testing, Ad Hoc packages can be used for direct distribution.&lt;/li&gt;
&lt;li&gt;Appuploader supports generating QR codes for installation, facilitating temporary experiences.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. App Store Review and Release
&lt;/h2&gt;

&lt;p&gt;Review is the final step in iOS submission and a common challenge for many uni-app developers.&lt;/p&gt;

&lt;p&gt;Preparation required:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App name, subtitle, keywords.&lt;/li&gt;
&lt;li&gt;Screenshots and videos (can be batch uploaded via Appuploader).&lt;/li&gt;
&lt;li&gt;Privacy policy and permission descriptions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Important notes&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;uni-app projects are easily misjudged as "shell apps"; ensure complete functionality and reasonable interactions.&lt;/li&gt;
&lt;li&gt;Avoid scenarios where only H5 web pages are loaded, as this may lead to rejection.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Team Practical Case: Submission Process for a uni-app E-commerce App
&lt;/h2&gt;

&lt;p&gt;We once assisted a 5-person team in submitting a uni-app-based e-commerce app, with the process as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Operations (Windows)&lt;/strong&gt;: Used Appuploader to apply for certificates and manage them uniformly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development (Windows + Mac)&lt;/strong&gt;: Used HBuilderX cloud packaging to generate the ipa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing (Windows)&lt;/strong&gt;: Used Appuploader to upload the ipa to TestFlight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product Manager (Mac)&lt;/strong&gt;: Configured information and screenshots in App Store Connect.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Final Step&lt;/strong&gt;: After collecting feedback via TestFlight external testing, submitted for App Store review.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ultimately, the team completed the entire process relying on only one Mac.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Experience Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Centralized certificate management&lt;/strong&gt;: Avoid packaging failures due to certificate expiration or loss.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible packaging method selection&lt;/strong&gt;: Cloud packaging suits small teams, local packaging suits customization needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-tool upload combinations&lt;/strong&gt;: Appuploader, Xcode, Transporter, Fastlane each have their scenarios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliant review&lt;/strong&gt;: uni-app projects must avoid being misjudged as shell apps.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;The process of submitting a uni-app app to iOS, though complex, can be significantly simplified by rationally utilizing tools.&lt;br&gt;
Through the combination of &lt;strong&gt;HBuilderX, Appuploader, Xcode, Fastlane, TestFlight&lt;/strong&gt;, both independent developers and cross-platform teams can successfully complete the entire process from development to App Store release.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>software</category>
    </item>
    <item>
      <title>What Are the iOS Packet Capture Tools? Comprehensive Overview and Functional Comparison of Mainstream Tools</title>
      <dc:creator>DataStack</dc:creator>
      <pubDate>Tue, 28 Oct 2025 09:56:44 +0000</pubDate>
      <link>https://dev.to/datastack/what-are-the-ios-packet-capture-tools-comprehensive-overview-and-functional-comparison-of-3lcc</link>
      <guid>https://dev.to/datastack/what-are-the-ios-packet-capture-tools-comprehensive-overview-and-functional-comparison-of-3lcc</guid>
      <description>&lt;p&gt;In mobile app development and testing, packet capture is one of the most commonly used debugging methods. Whether troubleshooting interface issues, monitoring network performance, or conducting security analysis, developers and testers need an efficient packet capture tool. Especially on the &lt;strong&gt;iOS platform&lt;/strong&gt;, due to its relatively closed system, choosing the right tool is particularly important.&lt;/p&gt;

&lt;p&gt;So, what are the common iOS packet capture tools on the market? What are their advantages, disadvantages, and applicable scenarios? This article will provide a systematic overview.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Charles
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Advantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User-friendly interface, cross-platform support (Windows / macOS)&lt;/li&gt;
&lt;li&gt;Intuitive operation, simple configuration&lt;/li&gt;
&lt;li&gt;Supports HTTPS decryption and proxy packet capture&lt;/li&gt;
&lt;li&gt;Supports rule filtering and request/response modification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires manual Wi-Fi proxy configuration&lt;/li&gt;
&lt;li&gt;Certificate installation and trust steps are cumbersome&lt;/li&gt;
&lt;li&gt;Cannot bypass SSL pinning or mutual authentication&lt;/li&gt;
&lt;li&gt;Beginners may easily get stuck on certificate trust issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Applicable Scenarios&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily development debugging&lt;/li&gt;
&lt;li&gt;Quick validation of web interfaces&lt;/li&gt;
&lt;li&gt;Simple network testing and analysis&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;&lt;strong&gt;Advantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Classic packet capture tool for Windows&lt;/li&gt;
&lt;li&gt;Supports HTTP/HTTPS traffic analysis&lt;/li&gt;
&lt;li&gt;Can modify and replay requests&lt;/li&gt;
&lt;li&gt;Rich community documentation, low learning curve&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iOS configuration process is relatively complex&lt;/li&gt;
&lt;li&gt;HTTPS decryption is not enabled by default&lt;/li&gt;
&lt;li&gt;Cannot bypass SSL pinning&lt;/li&gt;
&lt;li&gt;Mac user experience is average&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Applicable Scenarios&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows users debugging interfaces&lt;/li&gt;
&lt;li&gt;Simple network troubleshooting&lt;/li&gt;
&lt;li&gt;Web service testing&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Sniffmaster
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Advantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;USB direct connection to iOS devices&lt;/strong&gt;, no Wi-Fi proxy or certificate installation required&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatically decrypts HTTPS&lt;/strong&gt;, can bypass SSL pinning and mutual authentication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supports capturing only specified apps&lt;/strong&gt;, avoiding interference from system requests&lt;/li&gt;
&lt;li&gt;Built-in interceptor, can modify requests/responses using JavaScript&lt;/li&gt;
&lt;li&gt;Can export data streams for deep analysis with Wireshark&lt;/li&gt;
&lt;li&gt;Cross-platform support for Windows / macOS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires additional client installation compared to traditional tools&lt;/li&gt;
&lt;li&gt;Initial use requires familiarity with direct connection mode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Applicable Scenarios&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debugging high-security apps with SSL pinning&lt;/li&gt;
&lt;li&gt;Mobile network security analysis&lt;/li&gt;
&lt;li&gt;Scenarios requiring precise analysis of single-app traffic&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Proxyman
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Advantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modern packet capture tool built specifically for macOS&lt;/li&gt;
&lt;li&gt;Clean and intuitive interface, experience similar to Charles&lt;/li&gt;
&lt;li&gt;Supports HTTPS decryption and rule filtering&lt;/li&gt;
&lt;li&gt;Active updates, fast feature iteration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only supports macOS&lt;/li&gt;
&lt;li&gt;Cannot resolve SSL pinning&lt;/li&gt;
&lt;li&gt;Overlaps in functionality with Charles, lacks breakthrough advantages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Applicable Scenarios&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;macOS developers replacing Charles&lt;/li&gt;
&lt;li&gt;Interface debugging and quick troubleshooting&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Wireshark
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Advantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Network protocol analysis powerhouse&lt;/li&gt;
&lt;li&gt;Can capture underlying data like TCP/UDP/TLS handshakes, DNS, etc.&lt;/li&gt;
&lt;li&gt;Completely free, extremely powerful features&lt;/li&gt;
&lt;li&gt;Suitable for performance analysis and security research&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cannot directly decrypt HTTPS&lt;/li&gt;
&lt;li&gt;Interface is not user-friendly for beginners&lt;/li&gt;
&lt;li&gt;High analysis difficulty, steep learning curve&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Applicable Scenarios&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Network layer troubleshooting&lt;/li&gt;
&lt;li&gt;Performance analysis and packet loss detection&lt;/li&gt;
&lt;li&gt;Security research and protocol learning&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. mitmproxy
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Advantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Command-line tool, lightweight and flexible&lt;/li&gt;
&lt;li&gt;Extensible with Python scripts&lt;/li&gt;
&lt;li&gt;Supports custom request/response, suitable for automated testing&lt;/li&gt;
&lt;li&gt;Very convenient for simulating interface anomalies (delays, error codes)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No GUI, steep learning curve&lt;/li&gt;
&lt;li&gt;Not suitable for temporary debugging&lt;/li&gt;
&lt;li&gt;Also cannot bypass pinning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Applicable Scenarios&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automated interface testing&lt;/li&gt;
&lt;li&gt;Constructing anomaly scenarios&lt;/li&gt;
&lt;li&gt;Network debugging in continuous integration environments&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Tool Comparison Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Key Scenarios&lt;/th&gt;
&lt;th&gt;Limitations&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Charles&lt;/td&gt;
&lt;td&gt;Cross-platform, user-friendly, quick debugging&lt;/td&gt;
&lt;td&gt;Cannot bypass pinning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fiddler&lt;/td&gt;
&lt;td&gt;Commonly used by Windows users, mature community&lt;/td&gt;
&lt;td&gt;Complex iOS configuration, limited by pinning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sniffmaster&lt;/td&gt;
&lt;td&gt;USB direct connection, bypasses pinning, precise app capture&lt;/td&gt;
&lt;td&gt;Requires additional installation, learning needed initially&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Proxyman&lt;/td&gt;
&lt;td&gt;Native macOS experience, modern UI&lt;/td&gt;
&lt;td&gt;Limited to macOS, overlaps with Charles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wireshark&lt;/td&gt;
&lt;td&gt;Network protocol analysis, suitable for performance and security research&lt;/td&gt;
&lt;td&gt;Cannot directly decrypt HTTPS, high learning threshold&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mitmproxy&lt;/td&gt;
&lt;td&gt;Scriptable, automated testing, suitable for anomaly simulation&lt;/td&gt;
&lt;td&gt;No GUI, steep learning curve&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Daily Debugging&lt;/strong&gt;: Charles and Fiddler are sufficient for most development needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Testing&lt;/strong&gt;: mitmproxy is more suitable for constructing anomalies and scripted validation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deep Analysis&lt;/strong&gt;: Wireshark is a powerful tool for protocol research and performance troubleshooting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-Security Scenarios&lt;/strong&gt;: Sniffmaster is a reliable choice for bypassing SSL pinning and mutual authentication.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For iOS developers, the optimal solution is typically: &lt;strong&gt;Charles/Fiddler + Sniffmaster + Wireshark&lt;/strong&gt;, which enables quick debugging and addresses packet capture challenges in high-security applications.&lt;/p&gt;

</description>
      <category>ios</category>
      <category>networking</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
