<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://shiply.tds.qq.com/document/en-US/blog</id>
    <title>Shiply 专业版 Blog</title>
    <updated>2026-05-22T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://shiply.tds.qq.com/document/en-US/blog"/>
    <subtitle>Shiply 专业版 Blog</subtitle>
    <icon>https://shiply.tds.qq.com/document/en-US/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[How to Use Shiply for App Beta Testing Management]]></title>
        <id>https://shiply.tds.qq.com/document/en-US/blog/2026/05/22/app-enterprise-distribution</id>
        <link href="https://shiply.tds.qq.com/document/en-US/blog/2026/05/22/app-enterprise-distribution"/>
        <updated>2026-05-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Shiply (shiply.tds.qq.com) is a full-scenario release and operations platform for client-side apps and an important member of the Tencent Device Services Alliance (tds-union.qq.com), providing configuration and switch release, resource release, hotfix, in-app upgrade, store release, in-app testing, and other services to help businesses iterate and launch client features quickly and securely.]]></summary>
        <content type="html"><![CDATA[<blockquote><p>Shiply (shiply.tds.qq.com) is a full-scenario release and operations platform for client-side apps and an important member of the Tencent Device Services Alliance (tds-union.qq.com), providing configuration and switch release, resource release, hotfix, in-app upgrade, store release, in-app testing, and other services to help businesses iterate and launch client features quickly and securely.</p></blockquote><p>Want your product team to deeply experience your product like real users? Shiply app beta testing helps you launch efficient Dogfooding in minutes and break down beta distribution barriers!</p><p>"Eating your own dogfood" (also abbreviated as Dogfooding) is an English idiom commonly used to describe a company (especially a software company) using its own products.</p><p>The phrase may have first been used in 1988. Paul Maritz, a senior executive at Microsoft, wrote an email titled "Eating our own Dogfood" challenging the company to "increase the internal usage of our own products." The idiom has spread ever since.</p><p>Practicing Dogfooding is not simply "testing" a product—it is a practice that deeply integrates the user perspective into team culture and development process. Dogfooding goes beyond testing alone. It requires product owners, product managers, designers, developers, and colleagues from marketing, legal, admin, finance, and other roles representing "novice users" to become the main force of product trial.</p><p>It requires us to experience like real users and discover in real scenarios those bugs, awkward interactions, and unclear value propositions that are hard to reproduce in development and test environments.</p><p>Dogfooding has many successful industry cases—from computer software and mobile internet apps to today's AI applications, the Dogfooding philosophy remains enduring.</p><ul><li><p>Microsoft: As the company that coined "eating our own dogfood," nearly every Microsoft product goes through Dogfooding, and the process is embedded in their product release culture. For example, new versions of Microsoft Outlook are validated through Dogfooding.</p></li><li><p>Amazon: Its famous "API mandate" requires all team service interfaces to be designed for internal team use first. Many Amazon.com features are implemented by calling internal APIs—the company is its own biggest user.</p></li><li><p>Slack/Figma: All employees rely entirely on their own products for work communication and design collaboration—exemplary Dogfooding.</p></li><li><p>Lyft: Known for friendly service and deep user care, Lyft requires employees (including executives) to drive as Lyft drivers for at least 4 hours per month. This helps them understand the passenger experience, discover driver needs and pain points, and detect performance issues.</p></li><li><p>Facebook: In 2012, the Facebook Android app was slow and buggy, lacking many web features, while the iOS app was praised for performance and overall experience. Facebook encouraged employees (mostly iPhone users) to use Android phones to experience the app. They also blocked their own website internally, forcing employees to use the mobile version and truly feel user pain points. Eventually, the Facebook Android app underwent a dramatic transformation in performance and overall quality.</p></li></ul><h2 class="anchor anchorWithStickyNavbar_p97g" id="i-why-dogfooding-is-needed">I. Why Dogfooding Is Needed<a href="#i-why-dogfooding-is-needed" class="hash-link" aria-label="Direct link to I. Why Dogfooding Is Needed" title="Direct link to I. Why Dogfooding Is Needed">​</a></h2><p>Before taking action, it is critical for the entire team to understand its importance. The core value of Dogfooding lies in:</p><ol><li><p><strong>Discover real problems:</strong> Internal employees are the product's first users. They can discover in real work scenarios those bugs, poor user experiences, and counterintuitive designs that are hard to reproduce in test environments.</p></li><li><p><strong>Build empathy:</strong> When developers become users themselves, they understand user frustration and needs more deeply, naturally putting user experience first in design and development.</p></li><li><p><strong>Improve product quality and stability:</strong> Large-scale internal trial before feature launch effectively intercepts issues and improves final release quality.</p></li><li><p><strong>Validate product value:</strong> If your own employees won't use your product, how can you convince external users? Dogfooding is the most direct test of product value.</p></li><li><p><strong>Cultivate ownership:</strong> When employees use the product they build every day, they naturally develop pride and responsibility and actively think about how to make the product better.</p></li></ol><h2 class="anchor anchorWithStickyNavbar_p97g" id="ii-who-should-participate-in-dogfooding">II. Who Should Participate in Dogfooding<a href="#ii-who-should-participate-in-dogfooding" class="hash-link" aria-label="Direct link to II. Who Should Participate in Dogfooding" title="Direct link to II. Who Should Participate in Dogfooding">​</a></h2><ul><li><p>Developers: Focus on performance, stability, and technical details. They encounter very hidden bugs.</p></li><li><p>Designers: Focus on interaction flow, visual consistency, and usability. They keenly spot counterintuitive design.</p></li><li><p>Product managers: Focus on whether features solve target problems, whether workflows are smooth, and whether value propositions are clear.</p></li><li><p>Non-technical roles (such as marketing and finance): They are the best representatives of "novice users." Their confusion often best represents real new user confusion.</p></li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="dogfooding-scenarios">Dogfooding Scenarios<a href="#dogfooding-scenarios" class="hash-link" aria-label="Direct link to Dogfooding Scenarios" title="Direct link to Dogfooding Scenarios">​</a></h3><ul><li><p>Internal trial: Quickly trial new features within a small organization to validate stability and collect feedback</p></li><li><p>Cross-department review: Product, operations, marketing, and legal can all install and experience conveniently for more efficient collaboration</p></li><li><p>Outsourced collaboration: Controllable permissions and validity periods ensure delivery efficiency and enterprise security</p></li></ul><h2 class="anchor anchorWithStickyNavbar_p97g" id="iii-how-to-implement-dogfooding">III. How to Implement Dogfooding<a href="#iii-how-to-implement-dogfooding" class="hash-link" aria-label="Direct link to III. How to Implement Dogfooding" title="Direct link to III. How to Implement Dogfooding">​</a></h2><p>However, turning Dogfooding from concept into daily practice—especially for client apps—often faces technical and management "roadblocks":</p><ul><li><p><strong>Low distribution efficiency and cumbersome process:</strong> Sharing packages via IM? iOS and Harmony won't install! Enable iOA for intranet access, install Blue Shield, find build artifacts in pipeline lists to install? Cumbersome processes and permission requests are enough to deter non-technical staff!</p></li><li><p><strong>Chaotic version management:</strong> "Which version did you install?" Legacy solutions lack version control; testers install wrong packages; feedback cannot align; troubleshooting efficiency drops.</p></li><li><p><strong>UDID collection and signing nightmare:</strong> iOS and Harmony real-device testing requires collecting device UDIDs in advance, manually generating Profile files, and repeated packaging. Complex, time-consuming, error-prone processes are huge obstacles to expanding test scope.</p></li><li><p><strong>Insufficient permission and security control:</strong> Test packages leak casually; new features risk early exposure. Lack of effective access control and download tracking.</p></li><li><p><strong>Lack of data insights:</strong> "Who downloaded?" "Who actually tested?" "Which version has the most feedback?" Without data support, it is hard to measure Dogfooding effectiveness and drive improvement.</p></li><li><p><strong>High barrier for non-technical members:</strong> Product, operations, marketing, legal, and other non-technical colleagues are valuable "novice user" perspectives, but complex install processes often shut them out.</p></li></ul><p>These pain points directly block widespread, deep, and sustained Dogfooding, making "eating dogfood" difficult.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="iv-shiply-app-beta-testing-help-dogfooding-launch-in-minutes">IV. Shiply App Beta Testing: Help Dogfooding Launch in Minutes!<a href="#iv-shiply-app-beta-testing-help-dogfooding-launch-in-minutes" class="hash-link" aria-label="Direct link to IV. Shiply App Beta Testing: Help Dogfooding Launch in Minutes!" title="Direct link to IV. Shiply App Beta Testing: Help Dogfooding Launch in Minutes!">​</a></h2><p>Don't worry! The Shiply app beta testing platform transforms a manual, fragmented, error-prone, inefficient beta distribution process into a standardized, centralized, automated, highly collaborative process. Launch and run Dogfooding efficiently in minutes!</p><p><img loading="lazy" src="/document/en-US/assets/images/2026-05-22-17-53-02-image-ea42dedd29c28b5896730220e60b0c06.png" width="1486" height="1102" class="img_H1q8"></p><h3 class="anchor anchorWithStickyNavbar_p97g" id="41-why-choose-shiply">4.1 Why Choose Shiply<a href="#41-why-choose-shiply" class="hash-link" aria-label="Direct link to 4.1 Why Choose Shiply" title="Direct link to 4.1 Why Choose Shiply">​</a></h3><p>Shiply is a one-stop beta distribution platform built for development, testing, IT, product, and business teams</p><ul><li><p>Full platform coverage: Supports iOS, HarmonyOS, and Android simultaneously—one solution for all client-side beta needs</p></li><li><p>Minimal integration, launch in minutes:</p><ul><li><p>No SDK integration required! No pipeline plugin integration required (optional)!</p></li><li><p>Just upload install packages on the Shiply platform / select packages from pipelines directly; the system automatically generates download pages.</p></li><li><p>Testers scan QR codes to install—goodbye to cumbersome steps.</p></li></ul></li><li><p><strong>Enterprise-grade security, strict leak prevention:</strong></p><ul><li><p>Access control: Supports password-protected install, organization-based authorized access (whitelist + email domain).</p></li><li><p>Download validity: Links can be set permanently valid or for custom time periods—flexible security boundaries.</p></li><li><p>One-time short links: Click "Install Now" to generate one-time token links (default: 1 download within 5 minutes); auto-expire after timeout or over-limit.</p></li></ul></li><li><p>Beta records: Automatically records employee beta participation (current); supports ranking and incentives to sustain active Dogfooding culture (planned)</p></li><li><p>Version management, goodbye to chaos:</p><ul><li><p><strong>Unified version library:</strong> Clearly manage all historical versions.</p></li><li><p><strong>Automatic update reminders:</strong> Automatically notify testers when new versions are uploaded.</p></li></ul></li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="42-how-to-use-shiply-app-beta-testing">4.2 How to Use Shiply App Beta Testing<a href="#42-how-to-use-shiply-app-beta-testing" class="hash-link" aria-label="Direct link to 4.2 How to Use Shiply App Beta Testing" title="Direct link to 4.2 How to Use Shiply App Beta Testing">​</a></h3><h4 class="anchor anchorWithStickyNavbar_p97g" id="one-step-to-start-beta-distribution">One Step to Start Beta Distribution<a href="#one-step-to-start-beta-distribution" class="hash-link" aria-label="Direct link to One Step to Start Beta Distribution" title="Direct link to One Step to Start Beta Distribution">​</a></h4><p><img loading="lazy" src="/document/en-US/assets/images/2026-05-22-17-53-25-image-9871141b8c2c007110f31fd8191a2a44.png" width="1272" height="1176" class="img_H1q8"></p><p>No SDK integration, no pipeline plugin integration—just upload an install package to start beta distribution!</p><h4 class="anchor anchorWithStickyNavbar_p97g" id="invite-beta-testers">Invite Beta Testers<a href="#invite-beta-testers" class="hash-link" aria-label="Direct link to Invite Beta Testers" title="Direct link to Invite Beta Testers">​</a></h4><p>Through App Beta Testing list -&gt; Invite Testing -&gt; Add Test Users, you can invite users to download beta packages.</p><p><img loading="lazy" src="/document/en-US/assets/images/2026-05-22-17-55-29-image-530f5104b498d85ca80a95f639424bba.png" width="3014" height="1456" class="img_H1q8"></p><p>After inviting beta users (no user consent required), the platform pushes beta version links to users.</p><p><img loading="lazy" src="/document/en-US/assets/images/2026-05-22-17-55-37-image-02dff10c94f5f5a55b426428541d64e4.png" width="1364" height="250" class="img_H1q8"></p><p>When administrators release new beta versions, beta users receive version update notifications to quickly install new beta versions.</p><p><img loading="lazy" src="/document/en-US/assets/images/2026-05-22-17-55-55-image-d801e2a9d72b51facf87e2d4755e2fff.png" width="1408" height="442" class="img_H1q8"></p><h4 class="anchor anchorWithStickyNavbar_p97g" id="smart-download-page">Smart Download Page<a href="#smart-download-page" class="hash-link" aria-label="Direct link to Smart Download Page" title="Direct link to Smart Download Page">​</a></h4><ul><li>Multi-platform unified download page: Any platform download page auto-detects and displays the corresponding latest install package</li></ul><p><img loading="lazy" src="/document/en-US/assets/images/f081793d1728aabf6d4af484de5699af643581e6-b5577a04df7b035227f2187de3aeeea4.jpg" width="750" height="1634" class="img_H1q8"></p><ul><li><p>Install permission verification: Supports password-protected install and organization-authorized install—strictly controls in-company access.</p></li><li><p>Download validity: Permanently valid or custom time periods—flexible exposure and security boundaries.</p></li></ul><h4 class="anchor anchorWithStickyNavbar_p97g" id="data-visibility-and-control">Data Visibility and Control<a href="#data-visibility-and-control" class="hash-link" aria-label="Direct link to Data Visibility and Control" title="Direct link to Data Visibility and Control">​</a></h4><ul><li>Statistical analysis: View download growth trends by time range; supports province-level statistics</li></ul><p><img loading="lazy" src="/document/en-US/assets/images/2026-05-22-17-59-59-image-a5bb10fc47c5ed8d361d8c722e178b58.png" width="1216" height="2150" class="img_H1q8"></p><ul><li>Beta records: Distinguish "view only / downloaded" status; connect user behavior with version effectiveness</li></ul><p><img loading="lazy" src="/document/en-US/assets/images/2026-05-22-18-04-03-image-700191c1ed6294bdbe504e67f56a287f.png" width="1830" height="1276" class="img_H1q8"></p><ul><li>Certificate validity: Remind certificate status in version details to avoid expiration risk</li></ul><p><img loading="lazy" src="/document/en-US/assets/images/2026-05-22-18-04-19-image-d8303846f6eb7b08d5823dcd16761c25.png" width="1212" height="1700" class="img_H1q8"></p><h2 class="anchor anchorWithStickyNavbar_p97g" id="v-faq">V. FAQ<a href="#v-faq" class="hash-link" aria-label="Direct link to V. FAQ" title="Direct link to V. FAQ">​</a></h2><p>Q: Is SDK integration required?</p><p>A: No. Upload install packages to use beta distribution and download page capabilities. Which package types are supported?</p><p>Q: Does it support pipeline package upload?</p><p>A: Yes, pipeline upload is supported after completing pipeline authorization.</p><p>Q: Does it support feedback collection?</p><p>A: Shiply focuses on install package distribution; the company has multiple feedback collection platforms available for integration.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="vi-summary">VI. Summary<a href="#vi-summary" class="hash-link" aria-label="Direct link to VI. Summary" title="Direct link to VI. Summary">​</a></h2><p>Practicing Dogfooding is essentially building a deep "product empathy" culture. It requires the team—from leaders to every member—to sincerely place themselves in users' shoes and drive the product toward greater stability, usability, and value through firsthand experience. This is not just a testing step—it is a product philosophy and expression of team cohesion.</p><p>However, cultural adoption cannot succeed without efficient tool support. Pain points in traditional beta processes are the real barriers blocking widespread, deep Dogfooding. <strong>The Shiply app beta testing platform</strong> was built to break down these barriers. Through <strong>minimal distribution, strict security control, flexible version management, and clear data insights</strong>, it minimizes Dogfooding startup cost and maximizes execution efficiency.</p><p>Choosing Shiply means:</p><ul><li><p><strong>Lower participation barriers:</strong> Let all relevant parties, including non-technical colleagues, easily become "dogfood tasters" for richer user perspectives.</p></li><li><p><strong>Higher feedback efficiency:</strong> Ensure feedback is based on correct versions and accelerate issue identification and fix loops.</p></li><li><p><strong>Secure and controllable:</strong> Firmly guard enterprise assets and sensitive information boundaries while enabling open collaboration.</p></li><li><p><strong>Quantify practice effectiveness:</strong> Clearly understand Dogfooding coverage and participation through data and continuously optimize processes.</p></li></ul><p><strong>Visit Shiply (shiply.tds.qq.com) now, upload your install package, and start an efficient, secure Dogfooding journey!</strong> Make "eating your own dogfood" no longer a hassle—once successful, your product team will have unmatched insight and improvement momentum.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[A New Approach to Dynamic Unity App Delivery: In-Depth Analysis of the Shiply Plugin Solution]]></title>
        <id>https://shiply.tds.qq.com/document/en-US/blog/2026/02/02/shiply-unity-dynamic</id>
        <link href="https://shiply.tds.qq.com/document/en-US/blog/2026/02/02/shiply-unity-dynamic"/>
        <updated>2026-02-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Problems Unity Apps Face When Updating]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithStickyNavbar_p97g" id="problems-unity-apps-face-when-updating">Problems Unity Apps Face When Updating<a href="#problems-unity-apps-face-when-updating" class="hash-link" aria-label="Direct link to Problems Unity Apps Face When Updating" title="Direct link to Problems Unity Apps Face When Updating">​</a></h2><p>Teams using the Unity engine—whether game developers or teams building 3D interactive applications—commonly encounter the following challenges:</p><p><strong>Scenario 1: Emergency Bug Fixes</strong></p><p>Sudden crashes or rendering anomalies occur in production, operations is pushing hard, and R&amp;D finds it's just a small issue—but after fixing it, you still have to go through packaging, submission, review, and store listing. By the time it actually goes live, one or two weeks have often passed. For games, this means retention loss; for e-commerce 3D displays or industrial visualization apps, it directly affects conversion or production decisions.</p><p><strong>Scenario 2: Package Size Bloat</strong></p><p>As 3D asset precision and texture maps increase, package size keeps growing—500MB is not uncommon. But app store data is clear: once package size exceeds 100MB, download conversion drops significantly; beyond 200MB, many users simply won't download. This is a real loss for game user acquisition, e-commerce app acquisition, or enterprise internal distribution.</p><p><strong>Scenario 3: Version Fragmentation and Multi-Scenario Management</strong></p><p>Users are spread across different versions, increasing operations compatibility costs. More complex still, many teams need to host multiple 3D scenarios in one app (such as an e-commerce platform's "virtual shoe try-on + 3D showroom + AR placement"). Traditional approaches either pack everything into the initial package or guide users to external downloads—creating a fragmented experience.</p><p><strong>Scenario 4: Dynamic Content Operations</strong></p><p>Holiday marketing campaigns, quarterly new product 3D showcases, real-time data dashboards for industrial digital twins—these need frequent updates but are constrained by release cycles, often going live after the optimal window has passed.</p><p>The root cause of these problems is that in traditional mode, Unity content is tightly coupled with the install package—once content changes, you can only release a new version. <strong>The Shiply Android Unity plugin solution</strong> was built to decouple the "app framework" from "real-time content."</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="what-is-shiply-pluginization">What Is Shiply Pluginization?<a href="#what-is-shiply-pluginization" class="hash-link" aria-label="Direct link to What Is Shiply Pluginization?" title="Direct link to What Is Shiply Pluginization?">​</a></h2><p><strong>Core concept:</strong> Split Unity content into "dynamically deliverable plugin modules." The host app keeps only the base framework (30–50MB); real 3D content is downloaded on demand and replaced directly during hot updates, completely freeing you from app store release dependency.</p><p><strong>Core capabilities at a glance:</strong></p><p><img loading="lazy" alt="Core capabilities overview" src="/document/en-US/assets/images/core-capabilities-d8098394b473583148bb7601da051aac.png" width="665" height="413" class="img_H1q8"></p><p><strong>Real business value:</strong></p><p><strong>1. Extreme initial package slimming to lower acquisition barriers</strong></p><p>The host keeps only the base framework; 3D content downloads on demand. App stores show a lightweight app, significantly improving download willingness—applicable to game user acquisition, e-commerce app acquisition, and enterprise internal distribution.</p><p><strong>2. Real-time content delivery to capture operational windows</strong></p><p>Online issue fixes or marketing content updates take effect network-wide within 10 minutes after plugin delivery. No more waiting for review windows—holiday marketing and trending operations can go live instantly.</p><p><strong>3. Scientific gradual rollout and risk control</strong></p><p>Under the same version, deliver different content packages by region, user group, or device performance; roll back in seconds when data is unsatisfactory. Especially important for high-ticket 3D e-commerce displays or industrial visualization apps.</p><p><strong>4. One app hosting diverse 3D scenarios</strong></p><p>Main scenarios stay resident; event showrooms, new product previews, training modules, and data visualization panels load on demand and clear when done. Achieve "one app, unlimited 3D content."</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="how-to-pluginize-a-unity-app">How to "Pluginize" a Unity App<a href="#how-to-pluginize-a-unity-app" class="hash-link" aria-label="Direct link to How to &quot;Pluginize&quot; a Unity App" title="Direct link to How to &quot;Pluginize&quot; a Unity App">​</a></h2><p><strong>Overall architecture:</strong></p><p><img loading="lazy" alt="Overall architecture" src="/document/en-US/assets/images/architecture-ed498eb2cfde326dc84c31ad1bf999a5.png" width="884" height="798" class="img_H1q8"></p><p><strong>Key technical points:</strong></p><p><strong>1. Bytecode transformation (Transform)</strong></p><p>Android requires Activities and Services to be registered in the Manifest, but plugins are delivered dynamically and cannot be pre-registered. During compilation, Activities in plugins are automatically replaced with ShadowActivity, executed by proxy through the host shell Activity—so Unity projects require almost no changes.</p><p><strong>2. Component proxy (Proxy)</strong></p><p>UnityPlayerActivity must correctly receive touch, key, orientation, configuration change, and other events. The host provides proxy Activities that forward system events to Activities in plugins, ensuring Unity interaction logic is not broken.</p><p><strong>3. ClassLoader isolation</strong></p><p>Host and plugin SDK versions often differ, especially ad, payment, and analytics libraries—sharing them directly causes conflicts. Each plugin has an independent ClassLoader for mutual isolation, making multi-game coexistence safer.</p><p><strong>4. Unity adaptation layer</strong></p><p>Unity validates libunity.so integrity and path at startup; path changes after pluginization cause startup failure. Native-layer adaptation makes Unity believe it still runs in a normal environment, supporting Unity 2019–2022+, IL2CPP, without modifying Unity source code.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="comparison-with-lua-dynamic-delivery-solutions">Comparison with Lua Dynamic Delivery Solutions<a href="#comparison-with-lua-dynamic-delivery-solutions" class="hash-link" aria-label="Direct link to Comparison with Lua Dynamic Delivery Solutions" title="Direct link to Comparison with Lua Dynamic Delivery Solutions">​</a></h2><p>Lua hot update frameworks like xLua and ToLua can also achieve hot updates—why choose Shiply pluginization?</p><p>Lua focuses on script-layer dynamic delivery; Shiply focuses on entire Unity runtime dynamic delivery. These two approaches solve different problems and are not direct substitutes.</p><p><img loading="lazy" alt="Comparison table" src="/document/en-US/assets/images/comparison-06a0a870638c0503addb3741057b6bed.png" width="877" height="841" class="img_H1q8"></p><p><strong>Typical scenario comparison:</strong></p><p><strong>Scenario 1: Fixing core C# bugs</strong></p><ul><li><strong>Lua approach:</strong> Bug is in the C# layer; Lua cannot modify it—must release a new version. Wait 7–15 days for review.</li><li><strong>Shiply approach:</strong> Modify C# code directly, package a new plugin, hot update takes effect network-wide in 10 minutes.</li></ul><p><strong>Scenario 2: Adding new 3D content modules</strong></p><ul><li><strong>Lua approach:</strong> If level logic involves C# code, split into "C# framework + Lua scripts"—development complexity doubles.</li><li><strong>Shiply approach:</strong> Develop normally; pack the entire level as a plugin for delivery.</li></ul><p><strong>Scenario 3: Integrating a new SDK (e.g., new ad SDK)</strong></p><ul><li><strong>Lua approach:</strong> SDK is Native/Java code; requires Lua binding layer—significant effort.</li><li><strong>Shiply approach:</strong> Integrate SDK normally; deliver with the plugin.</li></ul><p><strong>Scenario 4: Initial package slimming</strong></p><ul><li><strong>Lua approach:</strong> Not achievable. Lua VM and C# core code remain in the initial package.</li><li><strong>Shiply approach:</strong> Initial package contains only host framework (30–50MB); games and 3D content download dynamically.</li></ul><h2 class="anchor anchorWithStickyNavbar_p97g" id="typical-shiply-pluginization-application-scenarios">Typical Shiply Pluginization Application Scenarios<a href="#typical-shiply-pluginization-application-scenarios" class="hash-link" aria-label="Direct link to Typical Shiply Pluginization Application Scenarios" title="Direct link to Typical Shiply Pluginization Application Scenarios">​</a></h2><p><strong>Scenario 1: Gaming</strong></p><p><strong>Dynamic event dungeon launch:</strong> Holiday event plugins delivered on demand, automatically cleaned up after events end; initial package stays under 100MB, significantly improving download conversion.</p><p><strong>Multi-game aggregation platform:</strong> Publishers integrate multiple Unity games into a single host app—tap to play with unified account, payment, and data management.</p><p><strong>Scenario 2: 3D E-commerce and Retail</strong></p><p><strong>Dynamic virtual try-on updates:</strong> Footwear e-commerce can launch new 3D shoe models weekly without app updates; apparel e-commerce can dynamically update virtual try-on asset packs at season changes—users experience new products without re-downloading the app.</p><p><strong>3D home showroom:</strong> Furniture apps can deliver by "living room/bedroom/study" scenarios or dynamically load style-specific showrooms based on browsing preferences—reducing initial package size while improving personalization.</p><p><strong>Scenario 3: Industrial Visualization and Digital Twins</strong></p><p><strong>Dynamic device digital twin loading:</strong> Factory management apps can dynamically load specific equipment 3D twin models and real-time data panels based on engineer permissions or current tasks—without packing entire factory data upfront.</p><p><strong>On-demand training simulation modules:</strong> Enterprise training apps can deliver different 3D simulation training modules by role (operator/maintenance/administrator)—reducing initial install size and supporting rapid training content iteration.</p><p><strong>Scenario 4: Education and Culture</strong></p><p><strong>Virtual laboratories:</strong> Education apps can dynamically load 3D experiment scenarios by subject (physics/chemistry/biology) or experiment unit—supporting continuous teaching content updates.</p><p><strong>Museum/exhibition digitization:</strong> Cultural apps can dynamically launch 3D showrooms during special exhibitions and auto-clean up after exhibitions end—enabling flexible "permanent + special exhibition" operations.</p><p><strong>Scenario 5: Tools and Finance</strong></p><p><strong>Operational mini-games:</strong> Finance or utility apps can launch Unity interactive games during holiday campaigns without app store redirects; quickly take down after events without affecting main app size.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="technical-highlights-recap">Technical Highlights Recap<a href="#technical-highlights-recap" class="hash-link" aria-label="Direct link to Technical Highlights Recap" title="Direct link to Technical Highlights Recap">​</a></h2><p><img loading="lazy" alt="Technical highlights recap" src="/document/en-US/assets/images/tech-highlights-87d806982d68bec545bc5fe0bd308aa3.png" width="845" height="563" class="img_H1q8"></p><h2 class="anchor anchorWithStickyNavbar_p97g" id="conclusion">Conclusion<a href="#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2><p>Shiply pluginization solves the fundamental problem of <strong>"how Unity real-time content is dynamically delivered"</strong>—not limited to script-layer hot updates. Whether for rapid game content iteration or flexible operations in 3D e-commerce, industrial visualization, education, and training, this solution provides:</p><ul><li><strong>Smaller acquisition package</strong> (improved download conversion)</li><li><strong>Faster delivery speed</strong> (capture operational windows)</li><li><strong>More flexible scenario management</strong> (one app, diverse content)</li><li><strong>Lower risk control cost</strong> (gradual rollout and second-level rollback)</li></ul><p>If you are looking for a Unity app hot update solution, or want to integrate multiple 3D scenarios into one app for unified operations, welcome to learn about and try <a href="https://shiply.tds.qq.com/document/android-plugin/overview/" target="_blank" rel="noopener noreferrer">Tencent Shiply Plugin Solution</a>, or scan WeChat to contact a technical consultant for tailored architecture advice. For more product information and solutions, visit <a href="https://tds.qq.com/" target="_blank" rel="noopener noreferrer">TDS Tencent Device Services</a>.</p><blockquote><p>Shiply (<a href="https://shiply.tds.qq.com/" target="_blank" rel="noopener noreferrer">https://shiply.tds.qq.com/</a>) is a one-stop client-side release platform and an important member of the Tencent Device Services Alliance (<a href="https://tds.qq.com/" target="_blank" rel="noopener noreferrer">https://tds.qq.com</a>), providing configuration and switch release, resource release, RN hot update, Flutter dynamic delivery, Android plugin framework, hotfix, in-app upgrade, store release, in-app testing, and other services to help businesses iterate and launch client features quickly and securely.</p></blockquote><p><img loading="lazy" alt="Shiply" src="/document/en-US/assets/images/shiply-footer-63a6d9f6224170da8b8be9a424043a96.png" width="1080" height="577" class="img_H1q8"></p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tencent Shiply: Solving React Native Dynamic Delivery Challenges for More Efficient, Secure, and Controllable Iteration]]></title>
        <id>https://shiply.tds.qq.com/document/en-US/blog/2025/10/15/shiply-react-native-dynamic</id>
        <link href="https://shiply.tds.qq.com/document/en-US/blog/2025/10/15/shiply-react-native-dynamic"/>
        <updated>2025-10-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Preface: The Potential and Real-World Challenges of RN Dynamic Delivery]]></summary>
        <content type="html"><![CDATA[<h1><img loading="lazy" src="/document/en-US/assets/images/c4f6cefecac05326437f4356fc3f7ac24f2e30d5-50b24dfe11597ab9ffafcc0096e49ca2.png" width="2025" height="861" class="img_H1q8"></h1><h2 class="anchor anchorWithStickyNavbar_p97g" id="preface-the-potential-and-real-world-challenges-of-rn-dynamic-delivery">Preface: The Potential and Real-World Challenges of RN Dynamic Delivery<a href="#preface-the-potential-and-real-world-challenges-of-rn-dynamic-delivery" class="hash-link" aria-label="Direct link to Preface: The Potential and Real-World Challenges of RN Dynamic Delivery" title="Direct link to Preface: The Potential and Real-World Challenges of RN Dynamic Delivery">​</a></h2><p>As a widely used cross-platform development framework, React Native (RN) significantly improves app iteration efficiency with its "write once, run everywhere" approach, making it a top choice for many teams accelerating business innovation. RN dynamic updates are a core advantage of the RN framework—in theory, teams can quickly publish compiled RN artifacts to iterate code and resources rapidly and respond more flexibly to market demand.</p><p>In practice, however, RN dynamic delivery faces multiple challenges:</p><ul><li><p>Release efficiency is limited by update package size and gradual rollout capability; emergency fixes may still lag due to slow transfer and difficult coverage;</p></li><li><p>Full package updates consume user data and enterprise bandwidth, affecting user experience and increasing operational costs;</p></li><li><p>Weak risk control makes rollback difficult when updates fail, easily triggering user complaints;</p></li><li><p>In global scenarios, cross-border data transfer must comply with GDPR, CCPA, and other regulations; public cloud services may pose compliance risks;</p></li><li><p>Dependence on third-party tools means service shutdowns (such as CodePush ceasing operations) can directly interrupt business iteration.</p></li></ul><p>To address these core issues, conventional mobile R&amp;D platforms (such as Firebase, mPaaS, and EMAS) typically provide only general basic release capabilities and struggle to meet complex business scenarios. Tencent Shiply, as a professional mobile R&amp;D platform, provides not only general configuration and resource release management but also dedicated release management services and one-stop solutions for dynamic artifacts across various frameworks—helping businesses iterate quickly with real-time updates.</p><p><strong>The Tencent Shiply React Native hot update solution is one such offering, providing a dynamic delivery management system that balances efficiency, risk, cost, and compliance.</strong></p><p>This article explains how Tencent Shiply helps teams achieve more efficient RN app iteration across four dimensions: <strong>reducing update costs, strengthening risk control, meeting compliance requirements, and ensuring service sustainability</strong>.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="i-reducing-update-costs-optimizing-traffic-and-user-experience">I. Reducing Update Costs: Optimizing Traffic and User Experience<a href="#i-reducing-update-costs-optimizing-traffic-and-user-experience" class="hash-link" aria-label="Direct link to I. Reducing Update Costs: Optimizing Traffic and User Experience" title="Direct link to I. Reducing Update Costs: Optimizing Traffic and User Experience">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="current-pain-points">Current Pain Points<a href="#current-pain-points" class="hash-link" aria-label="Direct link to Current Pain Points" title="Direct link to Current Pain Points">​</a></h3><p>Traditional RN dynamic updates often rely on full package push. Even when only a small amount of code or resources change, users must download multi-MB full update packages. This not only consumes user data (especially on mobile networks), reduces willingness to update, but also increases enterprise CDN bandwidth costs due to frequent large file transfers, limiting iteration frequency.</p><p>Shiply Optimization Approach</p><ul><li>Smart delta updates: Shiply uses intelligent delta algorithms to push only the changed portions of code or resources, significantly reducing update package size.</li></ul><p><img loading="lazy" alt="Image" src="/document/en-US/assets/images/f5c9d163be8285d8e85dc7c248f824867a3c687f-1ec877928fd575f37931ca408acd814c.png" width="2100" height="1290" class="img_H1q8"></p><p><img loading="lazy" alt="Image" src="/document/en-US/assets/images/98565e77cd969fc9d3ebc1dbbeefe693a9723729-6e66a66565c4b8e2b8c1c3d47d9df7d7.png" width="2102" height="1378" class="img_H1q8"></p><ul><li><p>Silent background updates: Shiply supports silent background download of delta update packages. Users complete updates without awareness or manual confirmation, avoiding update blocking due to data usage concerns.</p></li><li><p>Higher iteration frequency and impact: Thanks to low-cost updates, one business successfully increased weekly iterations to 3–4 times, and improved user experience also drove positive DAU growth.</p></li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="core-value">Core Value<a href="#core-value" class="hash-link" aria-label="Direct link to Core Value" title="Direct link to Core Value">​</a></h3><p>Shiply effectively controls update costs (user data and enterprise bandwidth) through delta technology, making high-frequency, fine-grained iteration possible and improving app iteration efficiency and user experience.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="ii-strengthening-risk-control-ensuring-secure-and-reliable-releases">II. Strengthening Risk Control: Ensuring Secure and Reliable Releases<a href="#ii-strengthening-risk-control-ensuring-secure-and-reliable-releases" class="hash-link" aria-label="Direct link to II. Strengthening Risk Control: Ensuring Secure and Reliable Releases" title="Direct link to II. Strengthening Risk Control: Ensuring Secure and Reliable Releases">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="common-issues">Common Issues<a href="#common-issues" class="hash-link" aria-label="Direct link to Common Issues" title="Direct link to Common Issues">​</a></h3><p>Under traditional update mechanisms, full updates are common. If an update package has issues, rollback typically requires repackaging, resubmitting for review, or manual intervention and notification—long processes with potentially broad user impact.</p><h3 class="anchor anchorWithStickyNavbar_p97g" id="shiply-security-measures">Shiply Security Measures<a href="#shiply-security-measures" class="hash-link" aria-label="Direct link to Shiply Security Measures" title="Direct link to Shiply Security Measures">​</a></h3><ul><li>Fine-grained targeting and gradual rollout strategies: Flexibly target gradual rollout audiences by user tags (region, device, OS version, etc.), supporting gradual rollout from a small user base (e.g., 5%) to 50% and full rollout, controlling impact scope.</li></ul><p><img loading="lazy" alt="Image" src="/document/en-US/assets/images/d6839b9bacf11c0e4262dce1712adeff621ebc2b-171edf3031122d59bebe8a9f6b7c3d1a.png" width="2700" height="1068" class="img_H1q8"></p><p><img loading="lazy" alt="Image" src="/document/en-US/assets/images/c9255d86a581c7b20d5aae616a6692127c7f64bb-9457ce65a433af113d143aa701b1261d.png" width="2734" height="1752" class="img_H1q8"></p><ul><li><p>Automated circuit breaker: With Bugly platform real-time monitoring of key post-update device metrics (exception rate, performance metrics), the system automatically pauses update push when exception rate exceeds preset thresholds (e.g., failure rate &gt; 3%) and sends alerts to responsible parties.</p></li><li><p>Rapid rollback: When issues occur, one-click rollback to a stable version ensures service continuity for most users. For example, one business successfully executed 3 rollbacks within 90 days without negative public sentiment.</p></li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="core-value-1">Core Value<a href="#core-value-1" class="hash-link" aria-label="Direct link to Core Value" title="Direct link to Core Value">​</a></h3><p>Shiply provides fine-grained gradual rollout strategies, automated risk monitoring and circuit breaking, and rapid rollback mechanisms, significantly reducing update risk and ensuring business stability.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="iii-meeting-compliance-requirements-securely-deploying-global-business">III. Meeting Compliance Requirements: Securely Deploying Global Business<a href="#iii-meeting-compliance-requirements-securely-deploying-global-business" class="hash-link" aria-label="Direct link to III. Meeting Compliance Requirements: Securely Deploying Global Business" title="Direct link to III. Meeting Compliance Requirements: Securely Deploying Global Business">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="compliance-challenges">Compliance Challenges<a href="#compliance-challenges" class="hash-link" aria-label="Direct link to Compliance Challenges" title="Direct link to Compliance Challenges">​</a></h3><p>GDPR, CCPA, and other regulations impose strict requirements on user data processing (especially cross-border transfer). When using public cloud hot update services, unclear data flows may trigger compliance risks, with potential impacts including fines and business restrictions.</p><p>Shiply Solution</p><ul><li><p>Strict security audits: The solution design follows security best practices; core services pass audits by Tencent's professional legal team and meet major data protection regulations (GDPR/CCPA).</p></li><li><p>Overseas independent deployment: Core components and data can be deployed overseas, ensuring user data stays within overseas regions and avoiding cross-border transfer risks.</p></li><li><p>Proven in practice: A leading consumer electronics customer successfully used Shiply's overseas deployment solution, running stably across multiple overseas regions for 12 months without compliance incidents.</p></li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="core-value-2">Core Value<a href="#core-value-2" class="hash-link" aria-label="Direct link to Core Value" title="Direct link to Core Value">​</a></h3><p>Shiply provides solutions that meet international security and compliance standards, especially through overseas independent deployment options, helping enterprises conduct hot updates securely while meeting data sovereignty requirements worldwide.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="iv-ensuring-service-sustainability-tencent-in-house-stable-assurance">IV. Ensuring Service Sustainability: Tencent In-House, Stable Assurance<a href="#iv-ensuring-service-sustainability-tencent-in-house-stable-assurance" class="hash-link" aria-label="Direct link to IV. Ensuring Service Sustainability: Tencent In-House, Stable Assurance" title="Direct link to IV. Ensuring Service Sustainability: Tencent In-House, Stable Assurance">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="background-considerations">Background Considerations<a href="#background-considerations" class="hash-link" aria-label="Direct link to Background Considerations" title="Direct link to Background Considerations">​</a></h3><p>Dependence on third-party technology stacks carries uncontrollable risks (for example, the CodePush shutdown in March 2025 affected user projects). Service stability and long-term support are important dimensions in enterprise technology selection.</p><h3 class="anchor anchorWithStickyNavbar_p97g" id="shiply-advantages">Shiply Advantages<a href="#shiply-advantages" class="hash-link" aria-label="Direct link to Shiply Advantages" title="Direct link to Shiply Advantages">​</a></h3><ul><li><p>Strong technical investment: Continuously developed and maintained by Tencent's professional team with years of technical accumulation.</p></li><li><p>Large-scale validation within Tencent: Shiply core technology is widely used for dynamic update needs across multiple Tencent apps with hundreds of millions of users (such as Mobile QQ, QQ Browser, Tencent News, Tencent Video), tested in complex scenarios and high-concurrency traffic.</p></li><li><p>Long-term support commitment: As Tencent's in-house core technology solution, Shiply commits to long-term stable support and technical iteration.</p></li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="core-value-3">Core Value<a href="#core-value-3" class="hash-link" aria-label="Direct link to Core Value" title="Direct link to Core Value">​</a></h3><p>Choosing Shiply means choosing Tencent's mature, stable, continuously iterated RN hot update solution with long-term support guarantees, reducing uncontrollable risk.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="v-side-by-side-comparison-why-shiply-is-a-strong-alternative-after-codepush-shutdown">V. Side-by-Side Comparison: Why Shiply Is a Strong Alternative After CodePush Shutdown?<a href="#v-side-by-side-comparison-why-shiply-is-a-strong-alternative-after-codepush-shutdown" class="hash-link" aria-label="Direct link to V. Side-by-Side Comparison: Why Shiply Is a Strong Alternative After CodePush Shutdown?" title="Direct link to V. Side-by-Side Comparison: Why Shiply Is a Strong Alternative After CodePush Shutdown?">​</a></h2><p>When Microsoft App Center terminated service and CodePush shut down, developers faced a dilemma: costly self-hosted operations or finding a reliable alternative.</p><p>The following compares Shiply with mainstream solutions across core enterprise concerns:</p><p><img loading="lazy" alt="Image" src="/document/en-US/assets/images/046a09ab6a42d0c3aac68e7cb530474040ccf0c9-7d01839051626b5c6d779d5a165864b2.webp" width="897" height="431" class="img_H1q8"></p><p>Shiply RN hot update not only supports CodePush's "minute-level hot update" capability but goes further through compliance closed-loop design and Tencent ecosystem integration (Bugly monitoring), with simple usage and low integration cost for businesses.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="vi-exploring-a-new-paradigm-finer-grained-feature-delivery-and-management">VI. Exploring a New Paradigm: Finer-Grained Feature Delivery and Management<a href="#vi-exploring-a-new-paradigm-finer-grained-feature-delivery-and-management" class="hash-link" aria-label="Direct link to VI. Exploring a New Paradigm: Finer-Grained Feature Delivery and Management" title="Direct link to VI. Exploring a New Paradigm: Finer-Grained Feature Delivery and Management">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="current-limitations">Current Limitations<a href="#current-limitations" class="hash-link" aria-label="Direct link to Current Limitations" title="Direct link to Current Limitations">​</a></h3><p>Traditional app version updates typically bundle multiple features or fixes with high coupling, high trial-and-error cost, and difficulty quickly adjusting individual features.</p><h3 class="anchor anchorWithStickyNavbar_p97g" id="exploration-direction-with-shiply">Exploration Direction with Shiply<a href="#exploration-direction-with-shiply" class="hash-link" aria-label="Direct link to Exploration Direction with Shiply" title="Direct link to Exploration Direction with Shiply">​</a></h3><ul><li><p>Feature-level gradual rollout and A/B testing: Shiply supports publishing and testing new features as independent modules. If results are poor, quickly roll back that feature without affecting the main app; if results are good, roll out fully without waiting for version review cycles.</p></li><li><p>On-demand precise updates: Combined with very small delta packages and user profiles, theoretically target specific user groups with specific feature updates or experiments.</p></li><li><p>Data-driven decision loop: Shiply integrates with Bugly to monitor Crash rate and other key data, supporting strategies (such as automatic circuit breaker or rollback when exception rate exceeds thresholds) to form a smarter release decision loop.</p></li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="core-value-4">Core Value<a href="#core-value-4" class="hash-link" aria-label="Direct link to Core Value" title="Direct link to Core Value">​</a></h3><p>Shiply goes beyond traditional fix updates, providing support for more flexible, fine-grained feature management and experiment release capabilities to improve app iteration efficiency and outcomes.</p><p>Conclusion</p><p>Efficient app iteration capability is key to enterprise competitiveness, and meeting compliance requirements is the foundation for business expansion. The Tencent Shiply RN hot update solution effectively combines efficiency with security and compliance through innovative delta technology, intelligent risk control, compliant data deployment options, and Tencent ecosystem technical and resource guarantees—providing strong support for enterprises facing rapidly changing market challenges.</p><p>If your business uses React Native and faces app release efficiency bottlenecks, hot update compliance requirements, update cost concerns, or service sustainability worries, welcome to learn about and try <a href="https://shiply.tds.qq.com/document/react-native-hot-reload/overview/" target="_blank" rel="noopener noreferrer">Tencent Shiply RN Hot Update Service</a>, or contact a <a href="https://work.weixin.qq.com/ca/cawcdeff905682b988?vid=1688856527611091&amp;deviceid=3b8a8c8a-255e-472c-aaf0-109b2c8b59df&amp;version=5.0.0.8002&amp;platform=win" target="_blank" rel="noopener noreferrer">Shiply Account Manager</a> for consultation. You can also visit <a href="https://tds.qq.com/" target="_blank" rel="noopener noreferrer">TDS Tencent Device Services</a> for more product information and solutions.</p><blockquote><p>Shiply (<a href="https://shiply.tds.qq.com/" target="_blank" rel="noopener noreferrer">https://shiply.tds.qq.com/</a>) is a one-stop client-side release platform and an important member of the Tencent Device Services Alliance (<a href="https://tds.qq.com/" target="_blank" rel="noopener noreferrer">https://tds.qq.com</a>), providing configuration and switch release, resource release, RN hot update, Flutter dynamic delivery, hotfix, in-app upgrade, store release, in-app testing, and other services to help businesses iterate and launch client features quickly and securely.</p></blockquote><p><img loading="lazy" alt="Image" src="/document/en-US/assets/images/c4b69d769a0ea2f2945ff2477cb88c2faeb7db30-0ae8c4f79e723928727935802c5168a7.png" width="1528" height="816" class="img_H1q8"></p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Shiply × Bugly | Building a Client-Side Secure Release Monitoring and Rollback System]]></title>
        <id>https://shiply.tds.qq.com/document/en-US/blog/2025/09/16/shiply-bugly-security-release-monitoring-system​</id>
        <link href="https://shiply.tds.qq.com/document/en-US/blog/2025/09/16/shiply-bugly-security-release-monitoring-system​"/>
        <updated>2025-09-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Introduction: Shiply is a one-stop client-side release platform under Tencent Device-oriented Service (TDS), supporting configuration switches, dynamic resources, hotfixes, app upgrades, app store distribution, and more. Drawing on years of release experience and evolving business needs, the platform has gradually shifted release standardization from ad hoc, surface-level, issue-driven approaches to tool-based, systematic implementation and practice. Shiply and Bugly continue to explore a comprehensive monitoring and rollback system in product and technology, building a secure line of defense for online releases and safeguarding every safe release for the business.]]></summary>
        <content type="html"><![CDATA[<blockquote><p>Introduction: Shiply is a one-stop client-side release platform under Tencent Device-oriented Service (TDS), supporting configuration switches, dynamic resources, hotfixes, app upgrades, app store distribution, and more. Drawing on years of release experience and evolving business needs, the platform has gradually shifted release standardization from ad hoc, surface-level, issue-driven approaches to tool-based, systematic implementation and practice. Shiply and Bugly continue to explore a comprehensive monitoring and rollback system in product and technology, building a secure line of defense for online releases and safeguarding every safe release for the business.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_p97g" id="i-background">I. Background<a href="#i-background" class="hash-link" aria-label="Direct link to I. Background" title="Direct link to I. Background">​</a></h2><p>As continuous delivery paradigms such as DevOps continue to evolve, hot releases (including remote configuration delivery, offline resource delivery, and similar capabilities) have become a key tool in continuous delivery. In e-commerce, short video, local services, information feeds, and many other business scenarios, hot releases play a critical operational role.</p><p>Traditional application releases (cold releases) typically involve collaboration across multiple teams and are high-pressure, high-risk activities because each release includes a large volume of changes. To reduce the risk of such large-scale changes, more and more teams are turning to DevOps for more agile continuous delivery. DevOps also blurs the boundary between developers and operations, increasing developers' need to control production environments. On the client side, this is mainly achieved through release management systems such as remote configuration and offline resources (hot releases).</p><p>For example, developers can use feature flags for gradual rollout (phased release) and observe results based on A/B testing and other metrics to decide whether to fully roll out new features. If results fall short, they can turn off the feature and optimize or retire it in subsequent iterations.</p><p>However, the widespread use of hot releases in software systems can also lead to release mistakes and operational incidents. Examples are not hard to find:</p><table><thead><tr><th>Date</th><th>Case</th></tr></thead><tbody><tr><td>July 2023</td><td>A content platform's configuration delivery caused the app to crash at startup; the official notice required users to uninstall and reinstall to fix the issue.</td></tr><tr><td>June 2024</td><td>A utility product encountered a bug while configuring an operational campaign, causing client crashes for some users. A new version had to be released to fix the problem; users could only recover after upgrading.</td></tr></tbody></table><p>From these cases, we can see that hot release mistakes not only affect software stability but can also damage product reputation and cause invisible user churn.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="ii-what-risks-exist-in-releases">II. What Risks Exist in Releases?<a href="#ii-what-risks-exist-in-releases" class="hash-link" aria-label="Direct link to II. What Risks Exist in Releases?" title="Direct link to II. What Risks Exist in Releases?">​</a></h2><p>Cold releases (package releases) carry risks such as privacy compliance, stability, and performance. The corresponding detection, review, and monitoring mechanisms are relatively mature, with dedicated owners at each stage, so impact is controllable and the probability of causing a real incident is low.</p><p>Hot releases, by contrast, often lack experience in risk identification and corresponding processes and standards, which sometimes leads to incidents. Common risks include:</p><table><thead><tr><th>Risk Type</th><th>Risk Points</th></tr></thead><tbody><tr><td>Human risk</td><td>● Improper use: misconfiguration, missing configuration, abuse (using configuration when it is not needed)<br> ● Improper release: ad hoc release, release without validation, release without gradual rollout<br> ● Using configuration or resources without fallback handling<br> ● Unreasonable priority causing configuration or resources to overwrite each other<br> ● Dependence on reviewers' level of risk awareness</td></tr><tr><td>System risk</td><td>● Lack of parameter validation when configuration changes <br>● Inability to quickly roll back incorrect configuration or resources<br> ● Lack of anomaly detection for configuration and resources</td></tr><tr><td>Public opinion and compliance risk</td><td>● Operational content containing ethnic discrimination, regional bias, religious conflict, folk custom differences, cultural conflict, and similar issues</td></tr></tbody></table><p>We can learn about secure release practices from post-incident improvement measures:</p><ul><li><p>Improvement measures</p><p><em>1. Add validation and alert interception for XX service whitelist generation results;</em></p><p><em>2. Add gradual rollout validation logic for XX service whitelist updates to detect anomalies early;</em></p><p><em>3. Add rapid recovery capability for XX service whitelists;</em></p><p><em>4. Strengthen coordinated recovery capability on the product side.</em></p></li></ul><p>Among these, the key improvements are adding content validation, alert interception, gradual rollout validation, rapid rollback, and damage control recovery. These are essential for a standardized release process. In addition, basic capabilities such as version management and change log review should also be in place.</p><p>Every online release carries risk, and the release process depends heavily on human experience and risk identification ability. After incidents, most teams improve through post-mortems and experience summaries, then constrain release behavior with standards and mandatory processes to avoid recurrence. Most software engineering implementations go through these four stages:</p><ol><li><p>Wild West stage: Rely on the experience and judgment of individual executors.</p></li><li><p>Standardization stage: Form center- or department-level standards with mandatory approval processes.</p></li><li><p>Standardization stage (organization-wide): Form business group (BG) or company-wide standards.</p></li><li><p>Automation stage: Codify experience into standards, turn standards into tools, systemize processes, and automate execution.</p></li></ol><p>Each team needs considerable time to evolve from the Wild West stage toward automation—from relying on executors' risk awareness to relying on systematic release risk controls. Shiply is the solution built for this goal.</p><p><img loading="lazy" alt="Image" src="/document/en-US/assets/images/1ad07e5310eeb3855818429a6f9655bafe7aaa68-dc940e37c529a241194b7f7bc53a8298.png" width="1339" height="321" class="img_H1q8"></p><p><a href="https://shiply.tds.qq.com/" target="_blank" rel="noopener noreferrer">Shiply</a> adds defense and rollback mechanisms at every node of the release process as a one-stop release platform. It implements three levels of risk control:</p><ul><li><p><strong>Prevention</strong>: Prevent human-factor risks during release through standardized, automated secure release processes.</p></li><li><p><strong>In-flight monitoring / automatic rollback</strong>: Detect issues accurately and roll back automatically through gradual rollout strategies, A/B comparison, and metric monitoring.</p></li><li><p><strong>Post-release rollback / hotfix</strong>: Degrade with minimal loss through rollback capability, or fix live issues without a new release through hotfix capability.</p></li></ul><p>This fundamentally shifts release security from "human assurance" to "platform assurance," turning human experience into automatically executed standards.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="iii-shiply-secure-release">III. Shiply Secure Release<a href="#iii-shiply-secure-release" class="hash-link" aria-label="Direct link to III. Shiply Secure Release" title="Direct link to III. Shiply Secure Release">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="31-pre-release--end-to-end-secure-release">3.1 Pre-release — End-to-End Secure Release<a href="#31-pre-release--end-to-end-secure-release" class="hash-link" aria-label="Direct link to 3.1 Pre-release — End-to-End Secure Release" title="Direct link to 3.1 Pre-release — End-to-End Secure Release">​</a></h3><table><thead><tr><th>Feature</th><th>Description</th><th>Screenshot</th></tr></thead><tbody><tr><td>Content validation</td><td>The platform creates validation scripts for each configuration. Portable validation scripts allow custom validation of configuration content. Configuration values are validated whenever a release task is created or modified</td><td><img loading="lazy" src="/document/en-US/assets/images/0c126871e261bdc54a06b08edb0d509d3e243220-b75f59fcbbf3d57d7c6eefb0cd95ec42.png" width="580" height="189" class="img_H1q8"></td></tr><tr><td>Change comparison</td><td>After editing delivery content, use diff comparison to review modifications</td><td><img loading="lazy" src="/document/en-US/assets/images/05c61f53f96cea9127fa4f2077b88458ce37186e-d9aa187f7be0a28383014cb2a4b6a13f.png" width="712" height="628" class="img_H1q8"></td></tr><tr><td>Versioned change history</td><td>Release management provides two fundamental capabilities: traceability and reproducibility, improving security across the software lifecycle and team collaboration efficiency. Traceability means that, with proper authorization, anyone can find any change history for the software—for any software change, you can accurately answer the 5W1H: who, when, what, why, and how. This is an important safeguard in software organization information security management.</td><td><img loading="lazy" src="/document/en-US/assets/images/00b5517f1197fc3ee06f184075df06f7daa209c8-a542dd05b7c8d1c71dfd0cb010837229.png" width="1983" height="641" class="img_H1q8"></td></tr><tr><td>Gradual rollout validation</td><td>The platform supports rich gradual rollout strategies to meet various business scenarios<br> ● Gradual rollout by custom duration + custom batches <br>● Gradual rollout by custom duration + custom cumulative user count <br>● Whether to schedule release after gradual rollout <br>● Whether to pause release after gradual rollout</td><td><img loading="lazy" src="/document/en-US/assets/images/4e2056ce28a567f13e464a80733e2bd6cc7776c1-5ff44dcd234fd1b983476dd6f5bdaef0.png" width="2058" height="1284" class="img_H1q8"></td></tr><tr><td>Release review</td><td>Reviewers can clearly see the owner's modifications to the release task to assess the impact on production.</td><td><img loading="lazy" src="/document/en-US/assets/images/50ed109d6ca0203b0344bab77f3e31167ec77bc7-b4ca4023aacc0898982deb0d67965fa1.png" width="1707" height="1214" class="img_H1q8"></td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_p97g" id="32-in-flight--monitoring-and-rollback">3.2 In-flight — Monitoring and Rollback<a href="#32-in-flight--monitoring-and-rollback" class="hash-link" aria-label="Direct link to 3.2 In-flight — Monitoring and Rollback" title="Direct link to 3.2 In-flight — Monitoring and Rollback">​</a></h3><p>When a release enters the gradual rollout phase, we want to detect problems early while only a small number of users are affected. In practice, metrics fluctuate significantly when the gradual rollout audience is small, which can cause false positives. Conventional monitoring often relies on dashboard Crash rate metrics, but this makes it hard to detect newly introduced individual issues. By the time problems move the dashboard, impact is already large and monitoring loses its early-warning value.</p><p>Shiply secure release can accurately detect issues from a small gradual rollout sample through the following approach:</p><ol><li>Build multi-dimensional monitoring capability</li></ol><p>We support monitoring of multiple metrics and observation across the full issue lifecycle:</p><ul><li><p>Support monitoring of Crash, ANR, FOOM, ERROR, privacy compliance, and custom business metrics.</p></li><li><p>Detect new gradual rollout issues, worsening existing issues, and worsening issues in the gradual rollout cohort.</p></li></ul><ol start="2"><li>A/B comparison during gradual rollout</li></ol><p>We scientifically evaluate each release quality through A/B comparison:</p><ul><li><p>A/B control: Set control and experiment groups to ensure fairness and comparable results.</p></li><li><p>Traffic allocation: Allocate traffic appropriately based on experiment needs to ensure representative data.</p></li><li><p>Experiment metric monitoring: During gradual rollout, monitor metric changes for experiment and control groups in real time.</p></li><li><p>Alert confidence: Based on the normal distribution relationship between gradual rollout device volume and Crash rate fluctuation, algorithms compute alert confidence to reduce false positives with small samples and improve alert reliability.</p></li></ul><ol start="3"><li>Improve alert accuracy</li></ol><p>We reduce false positives through alert confidence and dynamic alert thresholds:</p><ul><li><p>Set alert thresholds based on gradual rollout audience size: In early gradual rollout, set higher thresholds to reduce false positives. As rollout expands, gradually lower thresholds to increase sensitivity.</p></li><li><p>Set alert thresholds based on historical data: Reference historical data and combine with current business conditions to set reasonable thresholds.</p></li><li><p>Improve alert actionability: When alert information is received, the responder should be able to take corresponding actions.</p></li></ul><ol start="4"><li>Automatic rollback</li></ol><p>We support automatic issue correlation analysis and automatic rollback:</p><ul><li><p>Automatic issue attribution: Through A/B comparison, the platform automatically analyzes the correlation between issues and release tasks, avoiding long manual analysis and attribution delays that cause rollback timing to be too late and impact to expand.</p></li><li><p>Automatic rollback: When issue metrics reach circuit-breaker thresholds, the platform automatically stops the release task and triggers circuit-breaker rollback.</p></li></ul><h4 class="anchor anchorWithStickyNavbar_p97g" id="321-shiply--bugly-monitoring-integration">3.2.1 Shiply × Bugly Monitoring Integration<a href="#321-shiply--bugly-monitoring-integration" class="hash-link" aria-label="Direct link to 3.2.1 Shiply × Bugly Monitoring Integration" title="Direct link to 3.2.1 Shiply × Bugly Monitoring Integration">​</a></h4><p><a href="https://shiply.tds.qq.com/" target="_blank" rel="noopener noreferrer">Shiply</a> and <a href="https://bugly.tds.qq.com/" target="_blank" rel="noopener noreferrer">Bugly</a> continue to explore a comprehensive monitoring and rollback system in product and technology, building a secure line of defense for online releases and safeguarding every safe release for the business.</p><table><thead><tr><th>Product</th><th>Advantages</th></tr></thead><tbody><tr><td><a href="https://bugly.tds.qq.com/v2/index/main" target="_blank" rel="noopener noreferrer">Bugly Pro</a></td><td>Provides professional quality monitoring services to help developers detect and resolve issues promptly and build high-quality apps. Supports multi-dimensional quality and performance monitoring. Bugly provides technical support for Crash, ANR, FOOM, Error, and other multi-metric monitoring described in this article.</td></tr><tr><td><a href="https://shiply.tds.qq.com/" target="_blank" rel="noopener noreferrer">Shiply Pro</a></td><td>Provides professional client-side release capabilities to help developers release dynamically in a secure and efficient manner, supporting gradual app upgrades, remote configuration, dynamic resource packages, hotfixes, and more.</td></tr></tbody></table><p>The Shiply platform uses monitoring capabilities provided by Bugly to monitor Crash, ANR, FOOM, and other issues. Configuration switches, resources, package gradual rollout, and store releases all have monitoring and rollback capabilities.</p><ul><li><p>The platform monitors all gradual rollout tasks by default; businesses can configure alerts and circuit breakers themselves.</p></li><li><p>The platform enables new Issue alerts for all apps by default, covering most scenarios.</p></li><li><p>Users can enable Crash rate, spike Issue alerts, and circuit breakers.</p></li><li><p>The platform also supports monitoring, alerts, and rollback for ANR, FOOM, Error, and other metrics.</p></li><li><p>Tasks that go through the gradual rollout process automatically enter monitoring; the system fetches Crash and other metrics every 5 minutes and performs attribution diagnosis against release tasks.</p></li></ul><p><img loading="lazy" alt="Image" src="/document/en-US/assets/images/f370aa8ead52de46612c14882f8483983a6fe95c-dc940e37c529a241194b7f7bc53a8298.png" width="1339" height="321" class="img_H1q8"></p><ul><li>Support viewing trends of Crash rate and other metrics over time, including Crash rate, affected devices, and total connected devices at each time point.</li></ul><p><img loading="lazy" alt="Image" src="/document/en-US/assets/images/3650ca6281b5003b6c910ce4584122298c7cca40-6eed602e344280fba7e2242cd35641ee.png" width="1959" height="941" class="img_H1q8"></p><h4 class="anchor anchorWithStickyNavbar_p97g" id="322-shiply-secure-release-monitoring-and-rollback-results">3.2.2 Shiply Secure Release Monitoring and Rollback Results<a href="#322-shiply-secure-release-monitoring-and-rollback-results" class="hash-link" aria-label="Direct link to 3.2.2 Shiply Secure Release Monitoring and Rollback Results" title="Direct link to 3.2.2 Shiply Secure Release Monitoring and Rollback Results">​</a></h4><p>Through integration with the Bugly monitoring and release system, new issues caused by releases can usually be diagnosed for correlation with Crash, Error, and release tasks when affected devices are fewer than 100, with timely notification for the business to resolve through configuration changes or rollback—preventing issues before they expand and avoiding online incidents.</p><p><img loading="lazy" alt="Image" src="/document/en-US/assets/images/2025-10-15-10-41-40-image-bc6a4c05ce12c65986050e1e29cf377b.png" width="1322" height="1524" class="img_H1q8"></p><h3 class="anchor anchorWithStickyNavbar_p97g" id="33-post-release--rollback--hotfix">3.3 Post-release — Rollback / Hotfix<a href="#33-post-release--rollback--hotfix" class="hash-link" aria-label="Direct link to 3.3 Post-release — Rollback / Hotfix" title="Direct link to 3.3 Post-release — Rollback / Hotfix">​</a></h3><p>When a release issue is detected, you can stop the current task directly. The platform uses delivery task matching funnels to automatically match the previous release and achieve automatic downgrade. You can also manually downgrade to a target version. Shiply also provides hotfix solutions for convenient, user-invisible live issue fixes.</p><p><img loading="lazy" alt="Image" src="/document/en-US/assets/images/2025-10-15-10-41-11-image-99783d1220d6f5ba0b0dd5d278427df0.png" width="1318" height="1236" class="img_H1q8"></p><h2 class="anchor anchorWithStickyNavbar_p97g" id="iv-conclusion">IV. Conclusion<a href="#iv-conclusion" class="hash-link" aria-label="Direct link to IV. Conclusion" title="Direct link to IV. Conclusion">​</a></h2><p>Release is a process of risk management. Using configuration, resources, and other hot releases as examples, this article introduced the risks of online releases and the significant unreliability that human factors introduce during release.</p><p>The <a href="https://shiply.tds.qq.com/" target="_blank" rel="noopener noreferrer">Shiply</a> platform ensures stable, efficient, secure, and compliant end-to-end release through codifying experience, turning standards into tools, systemizing processes, and automating execution. Multiple Shiply delivery capabilities support a three-level risk control mechanism of "pre-release defense — in-flight monitoring and rollback — post-release rollback," greatly reducing the risk of online incidents.</p><p>In exploring online monitoring and rollback mechanisms, Shiply integrates with the Bugly platform to support monitoring, alerts, and rollback for Crash, ANR, FOOM, ERROR, privacy compliance, and custom business metrics. It also addresses the "alert ocean" problem to make alerts timely and precise—able to alert when affected device counts are still small, with automatic rollback support to enable unattended release!</p><p>We have invested significant effort in release risk control, but we know the fight against risk has no end. We continue to improve our understanding, insight, and defense against release risk to safeguard every safe release for the business!</p><blockquote><p>Shiply (<a href="https://shiply.tds.qq.com/" target="_blank" rel="noopener noreferrer">https://shiply.tds.qq.com/</a>) is a one-stop client-side release platform and an important member of the Tencent Device Services Alliance (<a href="https://tds.qq.com/" target="_blank" rel="noopener noreferrer">https://tds.qq.com</a>), providing configuration and switch release, resource release, RN hot update, Flutter dynamic delivery, hotfix, in-app upgrade, store release, in-app testing, and other services to help businesses iterate and launch client features quickly and securely.</p></blockquote><p><img loading="lazy" alt="Image" src="/document/en-US/assets/images/c4b69d769a0ea2f2945ff2477cb88c2faeb7db30-0ae8c4f79e723928727935802c5168a7.png" width="1528" height="816" class="img_H1q8"></p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenHarmony Third-Party Library Cross-Compilation Practice Summary]]></title>
        <id>https://shiply.tds.qq.com/document/en-US/blog/2025/08/12/OpenHarmony-Third-Party-Libraries-Cross-Compilation-Guide</id>
        <link href="https://shiply.tds.qq.com/document/en-US/blog/2025/08/12/OpenHarmony-Third-Party-Libraries-Cross-Compilation-Guide"/>
        <updated>2025-08-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Introduction: This article summarizes cross-compilation practices for dependent third-party libraries on the Harmony platform during Shiply platform C++ SDK Harmony adaptation under Tencent Device Services. Shiply supports powerful Harmony platform capabilities including remote configuration, remote switches, remote resources, in-app update prompts, app store submission, app preview submission, enterprise signed package internal distribution, and more. Welcome to contact a Shiply Account Manager for consultation.]]></summary>
        <content type="html"><![CDATA[<blockquote><p>Introduction: This article summarizes cross-compilation practices for dependent third-party libraries on the Harmony platform during Shiply platform C++ SDK Harmony adaptation under Tencent Device Services. Shiply supports powerful Harmony platform capabilities including remote configuration, remote switches, remote resources, in-app update prompts, app store submission, app preview submission, enterprise signed package internal distribution, and more. Welcome to contact a <a href="https://work.weixin.qq.com/ca/cawcdeff905682b988" target="_blank" rel="noopener noreferrer">Shiply Account Manager</a> for consultation.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_p97g" id="overview">Overview<a href="#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview">​</a></h2><p>Based on complete cross-compilation practice of bzip2 and OpenSSL libraries on the OpenHarmony platform, this document summarizes experience and methods for C/C++ third-party library cross-compilation using the lycium framework. Through this practice, we successfully compiled bzip2 and OpenSSL—two core libraries—for OpenHarmony 3.2 Release on macOS, covering three mainstream architectures: armeabi-v7a, arm64-v8a, and x86_64.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="project-background-and-technology-ecosystem">Project Background and Technology Ecosystem<a href="#project-background-and-technology-ecosystem" class="hash-link" aria-label="Direct link to Project Background and Technology Ecosystem" title="Direct link to Project Background and Technology Ecosystem">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="openharmony-third-party-library-adaptation-status">OpenHarmony Third-Party Library Adaptation Status<a href="#openharmony-third-party-library-adaptation-status" class="hash-link" aria-label="Direct link to OpenHarmony Third-Party Library Adaptation Status" title="Direct link to OpenHarmony Third-Party Library Adaptation Status">​</a></h3><p>OpenHarmony, as Huawei's open-source distributed operating system, faces unique challenges in C/C++ third-party library adaptation:</p><ol><li><strong>Diverse build methods</strong>: Open-source C/C++ libraries use cmake, configure, make, and other build approaches</li><li><strong>Architecture support requirements</strong>: Must support armeabi-v7a, arm64-v8a, x86_64, and other mainstream architectures simultaneously</li><li><strong>Toolchain differences</strong>: OpenHarmony uses LLVM toolchain, which differs from traditional GCC toolchain</li><li><strong>Runtime environment</strong>: OpenHarmony runtime environment differs from Linux, Android, and other systems</li></ol><h3 class="anchor anchorWithStickyNavbar_p97g" id="tpc_c_cplusplus-project-positioning">tpc_c_cplusplus Project Positioning<a href="#tpc_c_cplusplus-project-positioning" class="hash-link" aria-label="Direct link to tpc_c_cplusplus Project Positioning" title="Direct link to tpc_c_cplusplus Project Positioning">​</a></h3><p>tpc_c_cplusplus is an important repository for OpenHarmony third-party library adaptation, with main functions including:</p><ol><li><strong>Third-party library adaptation script management</strong>: Stores compilation configurations for C/C++ third-party libraries adapted to OpenHarmony</li><li><strong>Technical documentation</strong>: Provides third-party library adaptation guidance and best practices</li><li><strong>Toolchain support</strong>: Provides lycium cross-compilation framework and related tools</li></ol><h3 class="anchor anchorWithStickyNavbar_p97g" id="lycium-framework">lycium Framework<a href="#lycium-framework" class="hash-link" aria-label="Direct link to lycium Framework" title="Direct link to lycium Framework">​</a></h3><p>lycium is the core framework for OpenHarmony third-party library adaptation—a shell script-based automated cross-compilation toolchain. This document analyzes lycium framework architecture, working principles, and technical characteristics to help developers better understand and use this framework.</p><h4 class="anchor anchorWithStickyNavbar_p97g" id="problems-lycium-solves">Problems lycium Solves<a href="#problems-lycium-solves" class="hash-link" aria-label="Direct link to Problems lycium Solves" title="Direct link to Problems lycium Solves">​</a></h4><ol><li><strong>Diverse build methods</strong>: Open-source C/C++ libraries use different build systems (cmake, configure, make, etc.); lycium unifies these through HPKBUILD configuration files.</li><li><strong>Complex architecture support</strong>: Must support armeabi-v7a, arm64-v8a, x86_64, and other architectures simultaneously</li><li><strong>Toolchain differences</strong>: OpenHarmony uses LLVM toolchain, which differs from traditional GCC toolchain</li><li><strong>Complex dependency management</strong>: Complex dependency relationships exist between third-party libraries</li><li><strong>Automated builds</strong>: One-click source download, cross-compilation, and artifact packaging</li><li><strong>Test validation</strong>: HPKCHECK scripts support automated testing</li></ol><h4 class="anchor anchorWithStickyNavbar_p97g" id="lycium-directory-structure">lycium Directory Structure<a href="#lycium-directory-structure" class="hash-link" aria-label="Direct link to lycium Directory Structure" title="Direct link to lycium Directory Structure">​</a></h4><div class="codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-text codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">lycium/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── build.sh              # Main build script</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── test.sh               # Test script</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── script/               # Core script directory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│   ├── build_hpk.sh      # Single library build script</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│   └── envset.sh         # Environment variable setup script</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── template/             # Template files</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│   ├── HPKBUILD          # Build configuration template</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│   └── HPKCHECK          # Test configuration template</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── Buildtools/           # Build tools</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│   ├── toolchain.tar.gz  # Cross-compilation toolchain</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│   └── README.md         # Tool documentation</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── CItools/              # Continuous integration tools</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── doc/                  # Documentation directory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── usr/                  # Compilation output directory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└── docker/               # Docker support</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_p97g" id="lycium-architecture-layers">lycium Architecture Layers<a href="#lycium-architecture-layers" class="hash-link" aria-label="Direct link to lycium Architecture Layers" title="Direct link to lycium Architecture Layers">​</a></h4><div class="codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-text codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────────────────────────────────────────────────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│                    User Interface Layer                    │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│  build.sh (main build script)  test.sh (test script)      │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────────────────────────────────────────────────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────────────────────────────────────────────────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│                    Business Logic Layer                    │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│  Dependency Resolution │ Build Scheduling │ Environment   │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│  Management │ Error Handling                              │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────────────────────────────────────────────────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────────────────────────────────────────────────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│                    Build Execution Layer                   │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│  build_hpk.sh │ envset.sh │ HPKBUILD │ HPKCHECK           │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────────────────────────────────────────────────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────────────────────────────────────────────────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│                    Toolchain Layer                         │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│  LLVM Toolchain │ Cross-Compilation Tools │ Build System  │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│  Adaptation                                               │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────────────────────────────────────────────────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────────────────────────────────────────────────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│                    Platform Layer                          │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│  OpenHarmony SDK │ Operating System │ Hardware Architecture│</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────────────────────────────────────────────────────┘</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_p97g" id="technical-architecture-analysis">Technical Architecture Analysis<a href="#technical-architecture-analysis" class="hash-link" aria-label="Direct link to Technical Architecture Analysis" title="Direct link to Technical Architecture Analysis">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="cross-compilation-technology-stack">Cross-Compilation Technology Stack<a href="#cross-compilation-technology-stack" class="hash-link" aria-label="Direct link to Cross-Compilation Technology Stack" title="Direct link to Cross-Compilation Technology Stack">​</a></h3><div class="codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-text codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">macOS + DevEco Studio SDK</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ↓</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">OHOS_SDK Environment Configuration</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ↓</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">LLVM Cross-Compilation Toolchain</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ↓</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">lycium Framework Build</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ↓</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Multi-Architecture Binary Artifacts</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_p97g" id="key-technical-components">Key Technical Components<a href="#key-technical-components" class="hash-link" aria-label="Direct link to Key Technical Components" title="Direct link to Key Technical Components">​</a></h3><ol><li><strong>OpenHarmony SDK</strong>: Provides LLVM cross-compilation toolchain</li><li><strong>lycium Buildtools</strong>: Supplementary cross-compilation tool package</li><li><strong>HPKBUILD configuration</strong>: Defines compilation parameters and dependencies</li><li><strong>Automation scripts</strong>: Implements full compile, test, and package workflow</li></ol><h2 class="anchor anchorWithStickyNavbar_p97g" id="compilation-practice-summary">Compilation Practice Summary<a href="#compilation-practice-summary" class="hash-link" aria-label="Direct link to Compilation Practice Summary" title="Direct link to Compilation Practice Summary">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="1-compilation-environment-preparation">1. Compilation Environment Preparation<a href="#1-compilation-environment-preparation" class="hash-link" aria-label="Direct link to 1. Compilation Environment Preparation" title="Direct link to 1. Compilation Environment Preparation">​</a></h3><h4 class="anchor anchorWithStickyNavbar_p97g" id="11-basic-tool-check">1.1 Basic Tool Check<a href="#11-basic-tool-check" class="hash-link" aria-label="Direct link to 1.1 Basic Tool Check" title="Direct link to 1.1 Basic Tool Check">​</a></h4><p>First check whether required basic compilation tools are installed:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Check basic compilation tools</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">which</span><span class="token plain"> gcc </span><span class="token function" style="color:#d73a49">make</span><span class="token plain"> pkg-config autoconf autoreconf automake</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Check results</strong>:</p><ul><li>✅ gcc: <code>/usr/bin/gcc</code></li><li>✅ make: <code>/usr/bin/make</code></li><li>✅ pkg-config: <code>/opt/homebrew/bin/pkg-config</code></li><li>✅ autoconf: <code>/opt/homebrew/bin/autoconf</code></li><li>✅ autoreconf: <code>/opt/homebrew/bin/autoreconf</code></li><li>✅ automake: <code>/opt/homebrew/bin/automake</code></li></ul><p>Missing tools can be installed using Homebrew</p><h4 class="anchor anchorWithStickyNavbar_p97g" id="12-ohos-sdk-environment-configuration">1.2 OHOS SDK Environment Configuration<a href="#12-ohos-sdk-environment-configuration" class="hash-link" aria-label="Direct link to 1.2 OHOS SDK Environment Configuration" title="Direct link to 1.2 OHOS SDK Environment Configuration">​</a></h4><p>Check OHOS_SDK environment variable configuration:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token builtin class-name">echo</span><span class="token plain"> </span><span class="token variable" style="color:#36acaa">$OHOS_SDK</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Configuration result</strong>:</p><ul><li>✅ OHOS_SDK: <code>/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony</code></li></ul><h4 class="anchor anchorWithStickyNavbar_p97g" id="13-cross-compilation-toolchain-check">1.3 Cross-Compilation Toolchain Check<a href="#13-cross-compilation-toolchain-check" class="hash-link" aria-label="Direct link to 1.3 Cross-Compilation Toolchain Check" title="Direct link to 1.3 Cross-Compilation Toolchain Check">​</a></h4><p>Check cross-compilation toolchain in SDK:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">ls</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-la</span><span class="token plain"> </span><span class="token variable" style="color:#36acaa">$OHOS_SDK</span><span class="token plain">/native/llvm/bin/ </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">head</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-10</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Toolchain files</strong>:</p><ul><li>✅ aarch64-unknown-linux-ohos-clang</li><li>✅ aarch64-unknown-linux-ohos-clang++</li><li>✅ armv7-unknown-linux-ohos-clang</li><li>✅ armv7-unknown-linux-ohos-clang++</li><li>✅ clang, clang-15</li><li>✅ Other LLVM tools</li></ul><h4 class="anchor anchorWithStickyNavbar_p97g" id="14-cmake-version-check">1.4 cmake Version Check<a href="#14-cmake-version-check" class="hash-link" aria-label="Direct link to 1.4 cmake Version Check" title="Direct link to 1.4 cmake Version Check">​</a></h4><p>Check whether cmake version meets requirements (3.26+ required):</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">which</span><span class="token plain"> cmake </span><span class="token operator" style="color:#393A34">&amp;&amp;</span><span class="token plain"> cmake </span><span class="token parameter variable" style="color:#36acaa">--version</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Check results</strong>:</p><ul><li>✅ cmake path: <code>/opt/homebrew/bin/cmake</code></li><li>✅ cmake version: <code>3.31.6</code> (meets 3.26+ requirement)</li></ul><h4 class="anchor anchorWithStickyNavbar_p97g" id="15-compilation-tool-package-configuration">1.5 Compilation Tool Package Configuration<a href="#15-compilation-tool-package-configuration" class="hash-link" aria-label="Direct link to 1.5 Compilation Tool Package Configuration" title="Direct link to 1.5 Compilation Tool Package Configuration">​</a></h4><p>Extract and configure cross-compilation tool package provided by lycium:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Enter Buildtools directory</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">cd</span><span class="token plain"> lycium/Buildtools</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Check tool package files</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">ls</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-la</span><span class="token plain"> lycium/Buildtools/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Output:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># -rw-r--r--   1 mellow  staff  2323 Dec 19  2023 README.md</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># -rw-r--r--   1 mellow  staff   146 Dec 19  2023 SHA512SUM</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># drwxr-xr-x@  2 mellow  staff    64 Aug 12 10:38 toolchain</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># -rw-r--r--   1 mellow  staff   438 Aug 12 10:23 toolchain.tar.gz</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Extract tool package</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">tar</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-zxvf</span><span class="token plain"> toolchain.tar.gz</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Copy compilation tools to SDK directory</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">cp</span><span class="token plain"> toolchain/* </span><span class="token variable" style="color:#36acaa">$OHOS_SDK</span><span class="token plain">/native/llvm/bin/</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Extracted tool files</strong>:</p><ul><li>✅ arm-linux-ohos-clang++</li><li>✅ aarch64-linux-ohos-clang++</li><li>✅ x86_64-linux-ohos-clang</li><li>✅ aarch64-linux-ohos-clang</li><li>✅ x86_64-linux-ohos-clang++</li><li>✅ arm-linux-ohos-clang</li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="2-bzip2-library-configuration-check">2. bzip2 Library Configuration Check<a href="#2-bzip2-library-configuration-check" class="hash-link" aria-label="Direct link to 2. bzip2 Library Configuration Check" title="Direct link to 2. bzip2 Library Configuration Check">​</a></h3><h4 class="anchor anchorWithStickyNavbar_p97g" id="21-library-directory-structure">2.1 Library Directory Structure<a href="#21-library-directory-structure" class="hash-link" aria-label="Direct link to 2.1 Library Directory Structure" title="Direct link to 2.1 Library Directory Structure">​</a></h4><p>Check bzip2 library configuration files and directory structure:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">ls</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-la</span><span class="token plain"> thirdparty/bzip2/</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Directory structure</strong>:</p><div class="codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-text codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">thirdparty/bzip2/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── docs/                              # Documentation directory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── HPKBUILD                           # Build script</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── HPKCHECK                           # Test script</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── README_zh.md                       # Chinese documentation</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── README.OpenSource                  # Open source information</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── SHA512SUM                          # Checksum file</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└── build directories/                 # Directories generated by compilation</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_p97g" id="22-build-script-analysis">2.2 Build Script Analysis<a href="#22-build-script-analysis" class="hash-link" aria-label="Direct link to 2.2 Build Script Analysis" title="Direct link to 2.2 Build Script Analysis">​</a></h4><p>View key configuration in HPKBUILD build script:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">cat</span><span class="token plain"> thirdparty/bzip2/HPKBUILD</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Key configuration information</strong>:</p><ul><li><strong>Library name</strong>: bzip2</li><li><strong>Version</strong>: 1_0_6</li><li><strong>Supported architectures</strong>: armeabi-v7a, arm64-v8a, x86_64</li><li><strong>Build method</strong>: make</li><li><strong>Compilation tools</strong>: Uses cross-compilation toolchain from OHOS SDK</li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="3-bzip2-compilation-execution-process">3. bzip2 Compilation Execution Process<a href="#3-bzip2-compilation-execution-process" class="hash-link" aria-label="Direct link to 3. bzip2 Compilation Execution Process" title="Direct link to 3. bzip2 Compilation Execution Process">​</a></h3><h4 class="anchor anchorWithStickyNavbar_p97g" id="31-start-compilation">3.1 Start Compilation<a href="#31-start-compilation" class="hash-link" aria-label="Direct link to 3.1 Start Compilation" title="Direct link to 3.1 Start Compilation">​</a></h4><p>Execute compilation command in lycium directory:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token builtin class-name">cd</span><span class="token plain"> lycium</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">./build.sh </span><span class="token function" style="color:#d73a49">bzip2</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_p97g" id="32-compilation-output-log">3.2 Compilation Output Log<a href="#32-compilation-output-log" class="hash-link" aria-label="Direct link to 3.2 Compilation Output Log" title="Direct link to 3.2 Compilation Output Log">​</a></h4><div class="codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-text codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">Build OS Darwin</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">OHOS_SDK=/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">CLANG_VERSION=15.0.4</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">x toolchain/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">x toolchain/arm-linux-ohos-clang++</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">x toolchain/aarch64-linux-ohos-clang++</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">x toolchain/x86_64-linux-ohos-clang</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">x toolchain/aarch64-linux-ohos-clang</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">x toolchain/x86_64-linux-ohos-clang++</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">x toolchain/arm-linux-ohos-clang</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cp: the -R and -r options may not be specified together</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Start building bzip2 1_0_6!</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Downloading bzip2-bzip2-1_0_6.zip</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bzip2-bzip2-1_0_6.zip: OK</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Compileing OpenHarmony armeabi-v7a bzip2 1_0_6 libs...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Compileing OpenHarmony arm64-v8a bzip2 1_0_6 libs...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Compileing OpenHarmony x86_64 bzip2 1_0_6 libs...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Build bzip2 1_0_6 end!</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ALL JOBS DONE!!!</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Compilation status</strong>:</p><ul><li>✅ Source download successful</li><li>✅ Three architecture versions compiled successfully</li><li>✅ No errors during compilation</li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="4-bzip2-compilation-result-verification">4. bzip2 Compilation Result Verification<a href="#4-bzip2-compilation-result-verification" class="hash-link" aria-label="Direct link to 4. bzip2 Compilation Result Verification" title="Direct link to 4. bzip2 Compilation Result Verification">​</a></h3><h4 class="anchor anchorWithStickyNavbar_p97g" id="41-generated-file-structure-check">4.1 Generated File Structure Check<a href="#41-generated-file-structure-check" class="hash-link" aria-label="Direct link to 4.1 Generated File Structure Check" title="Direct link to 4.1 Generated File Structure Check">​</a></h4><p>Check generated library file structure:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">ls</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-la</span><span class="token plain"> usr/bzip2/</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Generated directory structure</strong>:</p><div class="codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-text codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">usr/bzip2/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── arm64-v8a/          # 64-bit ARM architecture</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── armeabi-v7a/        # 32-bit ARM architecture</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└── x86_64/             # x86_64 architecture</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_p97g" id="42-detailed-file-check">4.2 Detailed File Check<a href="#42-detailed-file-check" class="hash-link" aria-label="Direct link to 4.2 Detailed File Check" title="Direct link to 4.2 Detailed File Check">​</a></h4><p>Check generated files for arm64-v8a architecture:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">ls</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-la</span><span class="token plain"> usr/bzip2/arm64-v8a/</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>File structure</strong>:</p><div class="codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-text codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">arm64-v8a/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── bin/                # Executable directory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── include/            # Header file directory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── lib/                # Library file directory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└── man/                # Manual page directory</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_p97g" id="43-key-file-verification">4.3 Key File Verification<a href="#43-key-file-verification" class="hash-link" aria-label="Direct link to 4.3 Key File Verification" title="Direct link to 4.3 Key File Verification">​</a></h4><p><strong>Generated files</strong>:</p><ul><li>✅ <strong>Static library</strong>: <code>libbz2.a</code> (207,002 bytes)</li><li>✅ <strong>Header file</strong>: <code>bzlib.h</code> (6,245 bytes)</li></ul><p><strong>Executable files (can delete executables if only integrating static library)</strong>:</p><ul><li>✅ <code>bzip2</code> (218,176 bytes) - Main compression tool</li><li>✅ <code>bunzip2</code> (218,176 bytes) - Decompression tool</li><li>✅ <code>bzcat</code> (218,176 bytes) - View compressed file contents</li><li>✅ <code>bzip2recover</code> (32,800 bytes) - Recover corrupted compressed files</li><li>✅ Other tool scripts: <code>bzdiff</code>, <code>bzgrep</code>, <code>bzmore</code>, etc.</li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="5-openssl-library-compilation-record">5. OpenSSL Library Compilation Record<a href="#5-openssl-library-compilation-record" class="hash-link" aria-label="Direct link to 5. OpenSSL Library Compilation Record" title="Direct link to 5. OpenSSL Library Compilation Record">​</a></h3><h4 class="anchor anchorWithStickyNavbar_p97g" id="51-openssl-library-configuration-check">5.1 OpenSSL Library Configuration Check<a href="#51-openssl-library-configuration-check" class="hash-link" aria-label="Direct link to 5.1 OpenSSL Library Configuration Check" title="Direct link to 5.1 OpenSSL Library Configuration Check">​</a></h4><p>Check OpenSSL library configuration files and directory structure:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">ls</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-la</span><span class="token plain"> thirdparty/openssl/</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Directory structure</strong>:</p><div class="codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-text codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">thirdparty/openssl/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── docs/                              # Documentation directory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── HPKBUILD                           # Build script</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── HPKCHECK                           # Test script</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── README_zh.md                       # Chinese documentation</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── README.OpenSource                  # Open source information</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── SHA512SUM                          # Checksum file</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── openssl_oh_test.patch              # Test patch file</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└── openssl-OpenSSL_1_1_1u/           # Source directory</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h5 class="anchor anchorWithStickyNavbar_p97g" id="52-build-script-analysis">5.2 Build Script Analysis<a href="#52-build-script-analysis" class="hash-link" aria-label="Direct link to 5.2 Build Script Analysis" title="Direct link to 5.2 Build Script Analysis">​</a></h5><p>View key configuration in HPKBUILD build script:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">cat</span><span class="token plain"> thirdparty/openssl/HPKBUILD</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Key configuration information</strong>:</p><ul><li><strong>Library name</strong>: openssl</li><li><strong>Version</strong>: OpenSSL_1_1_1u</li><li><strong>Supported architectures</strong>: armeabi-v7a, arm64-v8a, x86_64</li><li><strong>Build method</strong>: configure (autotools)</li><li><strong>Special configuration</strong>: Uses patch file to fix test issues</li></ul><h4 class="anchor anchorWithStickyNavbar_p97g" id="53-openssl-compilation-execution-process">5.3 OpenSSL Compilation Execution Process<a href="#53-openssl-compilation-execution-process" class="hash-link" aria-label="Direct link to 5.3 OpenSSL Compilation Execution Process" title="Direct link to 5.3 OpenSSL Compilation Execution Process">​</a></h4><p>Execute compilation command in lycium directory:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token builtin class-name">cd</span><span class="token plain"> lycium</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">./build.sh openssl</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_p97g" id="54-compilation-output-log">5.4 Compilation Output Log<a href="#54-compilation-output-log" class="hash-link" aria-label="Direct link to 5.4 Compilation Output Log" title="Direct link to 5.4 Compilation Output Log">​</a></h4><div class="codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-text codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">Build OS Darwin</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">OHOS_SDK=/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">CLANG_VERSION=15.0.4</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">x toolchain/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">x toolchain/arm-linux-ohos-clang++</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">x toolchain/aarch64-linux-ohos-clang++</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">x toolchain/x86_64-linux-ohos-clang</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">x toolchain/aarch64-linux-ohos-clang</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">x toolchain/x86_64-linux-ohos-clang++</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">x toolchain/arm-linux-ohos-clang</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cp: the -R and -r options may not be specified together</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Start building openssl OpenSSL_1_1_1u!</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Downloading openssl-OpenSSL_1_1_1u.zip</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">openssl-OpenSSL_1_1_1u.zip: OK</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">openssl_oh_test.patch: OK</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Compileing OpenHarmony armeabi-v7a openssl OpenSSL_1_1_1u libs...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">patching file 'util/check-malloc-errs'</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">patching file 'util/find-doc-nits'</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">patching file 'util/find-unused-errs'</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">patching file 'util/openssl-format-source'</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Compileing OpenHarmony arm64-v8a openssl OpenSSL_1_1_1u libs...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Compileing OpenHarmony x86_64 openssl OpenSSL_1_1_1u libs...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Build openssl OpenSSL_1_1_1u end!</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ALL JOBS DONE!!!</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Compilation status</strong>:</p><ul><li>✅ Source download successful</li><li>✅ Test patch applied successfully</li><li>✅ Three architecture versions compiled successfully</li><li>✅ No errors during compilation</li></ul><h4 class="anchor anchorWithStickyNavbar_p97g" id="55-openssl-compilation-result-verification">5.5 OpenSSL Compilation Result Verification<a href="#55-openssl-compilation-result-verification" class="hash-link" aria-label="Direct link to 5.5 OpenSSL Compilation Result Verification" title="Direct link to 5.5 OpenSSL Compilation Result Verification">​</a></h4><p><strong>Generated directory structure</strong>:</p><div class="codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-text codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">usr/openssl/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── arm64-v8a/          # 64-bit ARM architecture</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── armeabi-v7a/        # 32-bit ARM architecture</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└── x86_64/             # x86_64 architecture</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>File structure</strong>:</p><div class="codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-text codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">arm64-v8a/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── bin/                # Executable directory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── include/            # Header file directory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── lib/                # Library file directory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── share/              # Shared file directory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└── ssl/                # SSL configuration directory</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_p97g" id="6-compilation-result-summary">6. Compilation Result Summary<a href="#6-compilation-result-summary" class="hash-link" aria-label="Direct link to 6. Compilation Result Summary" title="Direct link to 6. Compilation Result Summary">​</a></h3><h4 class="anchor anchorWithStickyNavbar_p97g" id="61-successfully-compiled-libraries">6.1 Successfully Compiled Libraries<a href="#61-successfully-compiled-libraries" class="hash-link" aria-label="Direct link to 6.1 Successfully Compiled Libraries" title="Direct link to 6.1 Successfully Compiled Libraries">​</a></h4><p>✅ <strong>bzip2 library</strong>:</p><ul><li>Version: 1_0_6</li><li>Architectures: armeabi-v7a, arm64-v8a, x86_64</li><li>Main files: libbz2.a, bzlib.h, bzip2 executable</li></ul><p>✅ <strong>OpenSSL library</strong>:</p><ul><li>Version: OpenSSL_1_1_1u</li><li>Architectures: armeabi-v7a, arm64-v8a, x86_64</li><li>Main files: libcrypto.a, libssl.a, openssl headers</li></ul><h2 class="anchor anchorWithStickyNavbar_p97g" id="technical-challenges-and-solutions">Technical Challenges and Solutions<a href="#technical-challenges-and-solutions" class="hash-link" aria-label="Direct link to Technical Challenges and Solutions" title="Direct link to Technical Challenges and Solutions">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="1-cross-compilation-toolchain-configuration">1. Cross-Compilation Toolchain Configuration<a href="#1-cross-compilation-toolchain-configuration" class="hash-link" aria-label="Direct link to 1. Cross-Compilation Toolchain Configuration" title="Direct link to 1. Cross-Compilation Toolchain Configuration">​</a></h3><p><strong>Problem</strong>: OpenHarmony uses LLVM toolchain; cross-compilation environment must be correctly configured</p><p><strong>Solution</strong>:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Set environment variables</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">OHOS_SDK</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Supplement compilation tools</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">cp</span><span class="token plain"> lycium/Buildtools/toolchain/* </span><span class="token variable" style="color:#36acaa">$OHOS_SDK</span><span class="token plain">/native/llvm/bin/</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_p97g" id="2-multi-architecture-compilation-support">2. Multi-Architecture Compilation Support<a href="#2-multi-architecture-compilation-support" class="hash-link" aria-label="Direct link to 2. Multi-Architecture Compilation Support" title="Direct link to 2. Multi-Architecture Compilation Support">​</a></h3><p><strong>Problem</strong>: Must support multiple CPU architectures simultaneously</p><p><strong>Solution</strong>:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Configure multiple architectures in HPKBUILD</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">archs</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"armeabi-v7a"</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"arm64-v8a"</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"x86_64"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Set compilation parameters for different architectures</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"> </span><span class="token variable" style="color:#36acaa">$ARCH</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"armeabi-v7a"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">then</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token assign-left variable" style="color:#36acaa">cc</span><span class="token operator" style="color:#393A34">=</span><span class="token variable" style="color:#36acaa">${OHOS_SDK}</span><span class="token plain">/native/llvm/bin/arm-linux-ohos-clang</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token assign-left variable" style="color:#36acaa">host</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">linux-generic32</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">elif</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"> </span><span class="token variable" style="color:#36acaa">$ARCH</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"arm64-v8a"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">then</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token assign-left variable" style="color:#36acaa">cc</span><span class="token operator" style="color:#393A34">=</span><span class="token variable" style="color:#36acaa">${OHOS_SDK}</span><span class="token plain">/native/llvm/bin/aarch64-linux-ohos-clang</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token assign-left variable" style="color:#36acaa">host</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">linux-aarch64</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">fi</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_p97g" id="3-test-validation-issues">3. Test Validation Issues<a href="#3-test-validation-issues" class="hash-link" aria-label="Direct link to 3. Test Validation Issues" title="Direct link to 3. Test Validation Issues">​</a></h3><p><strong>Problem</strong>: Test cases for libraries such as OpenSSL may fail in OpenHarmony environment</p><p><strong>Solution</strong>:</p><ul><li>Apply test patches to fix known issues</li><li>Distinguish false positives from real errors</li><li>Avoid using problematic features such as dlopen</li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="4-build-method-adaptation">4. Build Method Adaptation<a href="#4-build-method-adaptation" class="hash-link" aria-label="Direct link to 4. Build Method Adaptation" title="Direct link to 4. Build Method Adaptation">​</a></h3><p><strong>Problem</strong>: Different libraries use different build systems</p><p><strong>Solution</strong>:</p><ul><li><strong>make method</strong>: Use native Makefile directly</li><li><strong>configure method</strong>: Use autotools configuration</li><li><strong>cmake method</strong>: Use CMake build system</li></ul><h2 class="anchor anchorWithStickyNavbar_p97g" id="best-practices-summary">Best Practices Summary<a href="#best-practices-summary" class="hash-link" aria-label="Direct link to Best Practices Summary" title="Direct link to Best Practices Summary">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="1-environment-preparation-best-practices">1. Environment Preparation Best Practices<a href="#1-environment-preparation-best-practices" class="hash-link" aria-label="Direct link to 1. Environment Preparation Best Practices" title="Direct link to 1. Environment Preparation Best Practices">​</a></h3><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># 1. Check basic tools</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">which</span><span class="token plain"> gcc </span><span class="token function" style="color:#d73a49">make</span><span class="token plain"> pkg-config autoconf autoreconf automake</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># 2. Verify SDK configuration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">echo</span><span class="token plain"> </span><span class="token variable" style="color:#36acaa">$OHOS_SDK</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># 3. Check cmake version</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cmake </span><span class="token parameter variable" style="color:#36acaa">--version</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># Requires 3.26+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># 4. Configure toolchain</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">cd</span><span class="token plain"> lycium/Buildtools</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">tar</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-zxvf</span><span class="token plain"> toolchain.tar.gz</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">cp</span><span class="token plain"> toolchain/* </span><span class="token variable" style="color:#36acaa">$OHOS_SDK</span><span class="token plain">/native/llvm/bin/</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_p97g" id="2-hpkbuild-configuration-best-practices">2. HPKBUILD Configuration Best Practices<a href="#2-hpkbuild-configuration-best-practices" class="hash-link" aria-label="Direct link to 2. HPKBUILD Configuration Best Practices" title="Direct link to 2. HPKBUILD Configuration Best Practices">​</a></h3><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Basic information configuration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">pkgname</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">your_library</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">pkgver</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">1.0</span><span class="token plain">.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">pkgdesc</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Library description"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">url</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"https://example.com"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">archs</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"armeabi-v7a"</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"arm64-v8a"</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"x86_64"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">license</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"MIT"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">depends</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">makedepends</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Source configuration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">source</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"https://example.com/your_library-1.0.0.tar.gz"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">downloadpackage</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">true</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">autounpack</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">true</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">buildtools</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"make"</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># or "configure" or "cmake"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Build directory configuration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">builddir</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">your_library-1.0.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">packagename</span><span class="token operator" style="color:#393A34">=</span><span class="token variable" style="color:#36acaa">$builddir</span><span class="token plain">.tar.gz</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_p97g" id="3-compilation-process-best-practices">3. Compilation Process Best Practices<a href="#3-compilation-process-best-practices" class="hash-link" aria-label="Direct link to 3. Compilation Process Best Practices" title="Direct link to 3. Compilation Process Best Practices">​</a></h3><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># 1. Prepare phase</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function-name function" style="color:#d73a49">prepare</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">mkdir</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-p</span><span class="token plain"> </span><span class="token variable" style="color:#36acaa">$builddir</span><span class="token plain">/</span><span class="token variable" style="color:#36acaa">$ARCH</span><span class="token plain">-build</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic"># Set architecture-related environment variables</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"> </span><span class="token variable" style="color:#36acaa">$ARCH</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"arm64-v8a"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">then</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        setarm64ENV</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">fi</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># 2. Build phase</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function-name function" style="color:#d73a49">build</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token builtin class-name">cd</span><span class="token plain"> </span><span class="token variable" style="color:#36acaa">$builddir</span><span class="token plain">/</span><span class="token variable" style="color:#36acaa">$ARCH</span><span class="token plain">-build</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic"># Execute compilation commands</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token variable" style="color:#36acaa">$MAKE</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token builtin class-name">cd</span><span class="token plain"> </span><span class="token environment constant" style="color:#36acaa">$OLDPWD</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># 3. Package phase</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function-name function" style="color:#d73a49">package</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token builtin class-name">cd</span><span class="token plain"> </span><span class="token variable" style="color:#36acaa">$builddir</span><span class="token plain">/</span><span class="token variable" style="color:#36acaa">$ARCH</span><span class="token plain">-build</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token variable" style="color:#36acaa">$MAKE</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token builtin class-name">cd</span><span class="token plain"> </span><span class="token environment constant" style="color:#36acaa">$OLDPWD</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_p97g" id="4-test-validation-best-practices">4. Test Validation Best Practices<a href="#4-test-validation-best-practices" class="hash-link" aria-label="Direct link to 4. Test Validation Best Practices" title="Direct link to 4. Test Validation Best Practices">​</a></h3><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># 1. Write test script</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function-name function" style="color:#d73a49">check</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token builtin class-name">cd</span><span class="token plain"> </span><span class="token variable" style="color:#36acaa">$builddir</span><span class="token plain">/</span><span class="token variable" style="color:#36acaa">$ARCH</span><span class="token plain">-build</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic"># Run test cases</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token variable" style="color:#36acaa">$MAKE</span><span class="token plain"> </span><span class="token builtin class-name">test</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token builtin class-name">cd</span><span class="token plain"> </span><span class="token environment constant" style="color:#36acaa">$OLDPWD</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># 2. Verify on device</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">./test.sh your_library</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_p97g" id="application-integration-guide">Application Integration Guide<a href="#application-integration-guide" class="hash-link" aria-label="Direct link to Application Integration Guide" title="Direct link to Application Integration Guide">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="1-library-file-integration">1. Library File Integration<a href="#1-library-file-integration" class="hash-link" aria-label="Direct link to 1. Library File Integration" title="Direct link to 1. Library File Integration">​</a></h3><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Copy library files to project</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">cp</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-r</span><span class="token plain"> lycium/usr/your_library/ your_project/cpp/thirdparty/</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_p97g" id="2-cmakeliststxt-configuration">2. CMakeLists.txt Configuration<a href="#2-cmakeliststxt-configuration" class="hash-link" aria-label="Direct link to 2. CMakeLists.txt Configuration" title="Direct link to 2. CMakeLists.txt Configuration">​</a></h3><div class="language-cmake codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-cmake codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain"># Static library linking</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">target_link_libraries(entry PRIVATE </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/your_library/${OHOS_ARCH}/lib/libyour_library.a)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># Header file paths</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">target_include_directories(entry PRIVATE </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/your_library/${OHOS_ARCH}/include)</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_p97g" id="3-dynamic-library-integration">3. Dynamic Library Integration<a href="#3-dynamic-library-integration" class="hash-link" aria-label="Direct link to 3. Dynamic Library Integration" title="Direct link to 3. Dynamic Library Integration">​</a></h3><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Dynamic libraries need to be copied to libs directory</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">cp</span><span class="token plain"> your_library.so your_project/entry/libs/</span><span class="token variable" style="color:#36acaa">${OHOS_ARCH}</span><span class="token plain">/</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_p97g" id="common-issues-and-solutions">Common Issues and Solutions<a href="#common-issues-and-solutions" class="hash-link" aria-label="Direct link to Common Issues and Solutions" title="Direct link to Common Issues and Solutions">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="1-compilation-failure-issues">1. Compilation Failure Issues<a href="#1-compilation-failure-issues" class="hash-link" aria-label="Direct link to 1. Compilation Failure Issues" title="Direct link to 1. Compilation Failure Issues">​</a></h3><p><strong>Problem</strong>: Errors occur during compilation</p><p><strong>Solution</strong>:</p><ul><li>Check OHOS_SDK environment variable settings</li><li>Verify cross-compilation toolchain configuration</li><li>Confirm source download succeeded</li><li>Check sufficient disk space</li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="2-architecture-mismatch-issues">2. Architecture Mismatch Issues<a href="#2-architecture-mismatch-issues" class="hash-link" aria-label="Direct link to 2. Architecture Mismatch Issues" title="Direct link to 2. Architecture Mismatch Issues">​</a></h3><p><strong>Problem</strong>: Library file architecture does not match target platform</p><p><strong>Solution</strong>:</p><ul><li>Confirm correct architecture version (arm64-v8a or armeabi-v7a)</li><li>Check archs configuration in HPKBUILD</li><li>Verify compilation output architecture</li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="3-missing-dependency-issues">3. Missing Dependency Issues<a href="#3-missing-dependency-issues" class="hash-link" aria-label="Direct link to 3. Missing Dependency Issues" title="Direct link to 3. Missing Dependency Issues">​</a></h3><p><strong>Problem</strong>: Library depends on other third-party libraries</p><p><strong>Solution</strong>:</p><ul><li>Configure depends field in HPKBUILD</li><li>Ensure dependency libraries are compiled first</li><li>Check dependency library architecture support</li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="4-test-failure-issues">4. Test Failure Issues<a href="#4-test-failure-issues" class="hash-link" aria-label="Direct link to 4. Test Failure Issues" title="Direct link to 4. Test Failure Issues">​</a></h3><p><strong>Problem</strong>: Test cases fail in OpenHarmony environment</p><p><strong>Solution</strong>:</p><ul><li>Apply necessary test patches</li><li>Distinguish false positives from real errors</li><li>Avoid using incompatible features</li></ul><h2 class="anchor anchorWithStickyNavbar_p97g" id="summary">Summary<a href="#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary">​</a></h2><p>Through this bzip2 and OpenSSL library compilation practice, we successfully validated:</p><ol><li><strong>Technical feasibility</strong>: lycium framework effectively supports C/C++ third-party library cross-compilation</li><li><strong>Multi-architecture support</strong>: Successfully compiled library files supporting multiple architectures</li><li><strong>Quality assurance</strong>: Ensured library functional integrity through test validation</li><li><strong>Tool maturity</strong>: Compilation toolchain and framework are relatively mature</li></ol><h3></h3><h2 class="anchor anchorWithStickyNavbar_p97g" id="references">References<a href="#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References">​</a></h2><ul><li><p><a href="https://gitee.com/openharmony-sig/tpc_c_cplusplus/tree/master/lycium/README.md" target="_blank" rel="noopener noreferrer">lycium Framework README</a></p></li><li><p><a href="https://gitee.com/openharmony-sig/tpc_c_cplusplus/tree/master//docs/thirdparty_port.md" target="_blank" rel="noopener noreferrer">OpenHarmony Third-Party Library Adaptation Guide</a></p></li><li><p><a href="https://gitee.com/openharmony-sig/tpc_c_cplusplus/tree/master/thirdparty/bzip2/docs/hap_integrate.md" target="_blank" rel="noopener noreferrer">bzip2 Integration Guide</a></p></li><li><p><a href="https://gitee.com/openharmony-sig/tpc_c_cplusplus/tree/master/thirdparty/openssl/docs/hap_integrate.md" target="_blank" rel="noopener noreferrer">OpenSSL Integration Guide</a></p></li><li><p><a href="https://gitcode.com/openharmony-tpc" target="_blank" rel="noopener noreferrer">OpenHarmony Third-Party Library Repository</a></p></li><li><p><a href="https://gitcode.com/openharmony-sig/knowledge" target="_blank" rel="noopener noreferrer">OpenHarmony Knowledge Base</a></p></li></ul>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[How Does Tencent Enable Seamless Feature Upgrades and Invisible Issue Fixes in Apps?]]></title>
        <id>https://shiply.tds.qq.com/document/en-US/blog/shiply-app-seamless-upgrade-hotfix-solution</id>
        <link href="https://shiply.tds.qq.com/document/en-US/blog/shiply-app-seamless-upgrade-hotfix-solution"/>
        <updated>2025-06-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[An in-depth analysis of how Tencent's Shiply platform achieves seamless app feature upgrades and invisible issue fixes through cross-platform release, app hotfix, remote resource configuration, and other core technologies. Covers dynamic release solutions for cross-platform frameworks such as Flutter, React Native, and Hippy, plus hotfix SDK technical principles and implementation results. Provides mobile app developers with a complete dynamic release solution.]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-06-28-image-d525daf771ab6abd4acf53072fbd4b3b.png" width="1800" height="766" class="img_H1q8"></p><blockquote><p>Introduction: Shiply is Tencent's full-scenario release platform for apps, providing one-stop dynamic release solutions. Multiple client-cloud integrated services effectively lower technical barriers, reduce R&amp;D costs, and help businesses quickly build stable, high-quality mobile applications. It is also an important product member of the Tencent Device-oriented Service (TDS) alliance (tds.qq.com).</p></blockquote><p>Born from Tencent, Shiply distills years of mature release experience in mobile applications. It provides release management support for numerous Tencent apps with tens or hundreds of millions of users, supports agile development and rapid iteration for many internal innovative products, and is an indispensable release management platform for Tencent's internal client applications.</p><p>Over the past decade, the core evolution of client technology architecture has been improving <strong>dynamic delivery capability</strong>, placing unprecedented demands on app release infrastructure:</p><ul><li><p><strong>Native technology</strong>: Evolved from monolithic architecture to componentization and pluginization, with core goals of module hot-plugging and issue hotfixing—shortening fix paths and improving iteration flexibility.</p></li><li><p><strong>Cross-platform technology</strong>: From Hybrid through RN and Flutter to KMM (Kotlin Multiplatform Mobile), evolution focuses on hot reload in development and hot update at runtime—to accelerate development and achieve runtime seamless updates.</p></li></ul><p>Today, the scope of <strong>"release"</strong> has fundamentally changed: it is no longer limited to traditional install package release (store listing), but extends to dynamic release of offline packages, plugin packages, hotfix patches, cross-platform dynamic artifacts, and more—even real-time delivery of in-package resources and app configuration.</p><p>Shiply continuously explores release forms and expands release categories, building a unified release platform covering the full client lifecycle. This capability system aims to <strong>seamlessly support full-scenario release needs across different technology stacks</strong>—whether for <strong>technical optimization, new feature launches, or high-frequency operational campaigns</strong>, providing efficient, stable, and flexible release assurance.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="i-overview-of-shiply-full-scenario-release-capabilities">I. Overview of Shiply Full-Scenario Release Capabilities<a href="#i-overview-of-shiply-full-scenario-release-capabilities" class="hash-link" aria-label="Direct link to I. Overview of Shiply Full-Scenario Release Capabilities" title="Direct link to I. Overview of Shiply Full-Scenario Release Capabilities">​</a></h2><p>Shiply provides full-scenario, full-lifecycle software delivery management, including two major release modes: install package release and dynamic release.</p><p><img loading="lazy" src="/document/en-US/assets/images/64b85f32ddcc657baf8faaf7ecfe09a4c04d048a-50d1b4af6ed78559374efec19e80d048.png" width="1706" height="1072" class="img_H1q8"></p><p><strong>Traditional Install Package Release</strong></p><ul><li><p><strong>In-app beta distribution</strong>: Internal distribution of iOS/Harmony enterprise-signed packages and Android DailyBuild packages within the enterprise.</p></li><li><p><strong>In-app upgrade</strong>: Android APK in-app self-upgrade; iOS/Harmony update prompts.</p></li><li><p><strong>Invite and open testing</strong>: For example, iOS (TestFlight) and Harmony (AppGallery) invite testing and open testing.</p></li><li><p><strong>App store submission</strong>: Supports automatic package upload and submission for iOS (App Store), Android (major phone manufacturer app stores), and Harmony (AppGallery).</p></li></ul><p><strong>Dynamic Release</strong></p><p>Deconstruct install packages into code (executable binaries, library files), configuration, and resources for partial dynamic updates:</p><ul><li><p><strong>Cross-platform release (cross-platform code)</strong>: For build artifacts of various cross-platform frameworks (Kuikly, Hippy, Flutter, React Native, etc.), supports synchronized release across multiple platforms and products, greatly improving release efficiency.</p></li><li><p><strong>Hotfix release (native code)</strong>: Publish patches to urgently fix online issues without submitting a new install package to app stores.</p></li><li><p><strong>Remote resource release (resource files)</strong>: Supports on-demand loading and updates of any files such as on-device AI models, themes, fonts, skins, images, animations, and SO libraries.</p></li><li><p><strong>Remote configuration release (configuration files)</strong>: Supports dynamic updates for DSL dynamicization, routing and API dynamicization, dynamic tuning parameters, feature switches, and other scenario configurations.</p></li></ul><p>Shiply's dynamic release solution aims to achieve seamless updates of app features, data, configuration, and visual styles, freeing you from dependence on app store review processes.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="ii-core-value-of-dynamic-release">II. Core Value of Dynamic Release<a href="#ii-core-value-of-dynamic-release" class="hash-link" aria-label="Direct link to II. Core Value of Dynamic Release" title="Direct link to II. Core Value of Dynamic Release">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="21-meeting-agile-business-iteration-needs">2.1 Meeting Agile Business Iteration Needs<a href="#21-meeting-agile-business-iteration-needs" class="hash-link" aria-label="Direct link to 2.1 Meeting Agile Business Iteration Needs" title="Direct link to 2.1 Meeting Agile Business Iteration Needs">​</a></h3><ul><li><p><strong>Refined operations drive high-frequency release</strong>: Mobile internet has entered stock competition; slowing user growth requires enterprises to shift to refined operations. Businesses need frequent updates to optimize experience, run A/B test innovations, and conduct campaign operations. Traditional app store review processes (iOS takes 1–3 days) cannot meet demand; dynamic release enables "minute-level" hot updates, avoiding iteration delays that cause user churn.</p></li><li><p><strong>Hotspot scenarios drive rapid feature launch</strong>: Video, news, sports, and similar products must quickly respond to holiday campaigns, social hotspots, and live sports events. Sudden campaigns can cause traffic spikes requiring dynamic feature adjustments.</p></li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="22-solving-pain-points-of-lagging-install-package-updates">2.2 Solving Pain Points of Lagging Install Package Updates<a href="#22-solving-pain-points-of-lagging-install-package-updates" class="hash-link" aria-label="Direct link to 2.2 Solving Pain Points of Lagging Install Package Updates" title="Direct link to 2.2 Solving Pain Points of Lagging Install Package Updates">​</a></h3><ul><li><p><strong>Long user upgrade cycles</strong>: Traditional install package updates depend on user willingness to upgrade; version coverage improves slowly and version fragmentation is hard to eliminate. Dynamic release achieves user-invisible updates, ensuring all users immediately use the latest features.</p></li><li><p><strong>Cost of forced updates</strong>: Forced updates easily trigger user resistance; in stock competition, there is user churn risk. Dynamic release reduces risk through progressive updates.</p></li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="23-addressing-multi-platform-multi-product-technical-challenges">2.3 Addressing Multi-Platform, Multi-Product Technical Challenges<a href="#23-addressing-multi-platform-multi-product-technical-challenges" class="hash-link" aria-label="Direct link to 2.3 Addressing Multi-Platform, Multi-Product Technical Challenges" title="Direct link to 2.3 Addressing Multi-Platform, Multi-Product Technical Challenges">​</a></h3><ul><li><p><strong>Platform diversification</strong>: Domestic phone manufacturers' software capabilities continue improving; self-developed systems such as Harmony OS and Hyper OS keep emerging.</p></li><li><p><strong>Product diversification</strong>: To reach lower-tier markets, "Lite" and other multi-version apps are often needed.</p></li></ul><p>As platforms and products multiply, feature reuse becomes key to reducing development costs and improving iteration efficiency, driving cross-platform development frameworks and cross-platform dynamic release needs.</p><h3 class="anchor anchorWithStickyNavbar_p97g" id="24-value-for-users-and-developers">2.4 Value for Users and Developers<a href="#24-value-for-users-and-developers" class="hash-link" aria-label="Direct link to 2.4 Value for Users and Developers" title="Direct link to 2.4 Value for Users and Developers">​</a></h3><p>Seamless dynamic release can solve many pain points for users, developers, operations, and business teams:</p><ul><li><p><strong>For users</strong>: Annoying update popups, forced exits, update failures, new version bugs affecting usage.</p></li><li><p><strong>For developers/operations</strong>: Tight release windows, high launch risk, user churn, slow issue fixes, poor user experience, more negative reviews, business losses.</p></li></ul><h2 class="anchor anchorWithStickyNavbar_p97g" id="iii-dynamic-release-cross-platform-release">III. Dynamic Release: Cross-Platform Release<a href="#iii-dynamic-release-cross-platform-release" class="hash-link" aria-label="Direct link to III. Dynamic Release: Cross-Platform Release" title="Direct link to III. Dynamic Release: Cross-Platform Release">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="31-pain-points-of-cross-platform-release">3.1 Pain Points of Cross-Platform Release<a href="#31-pain-points-of-cross-platform-release" class="hash-link" aria-label="Direct link to 3.1 Pain Points of Cross-Platform Release" title="Direct link to 3.1 Pain Points of Cross-Platform Release">​</a></h3><p>Cross-platform development frameworks (Kuikly, Hippy, Flutter, React Native, etc.), with "write once, run everywhere" advantages, have become industry standards for efficiency and quality. But their release complexity far exceeds traditional release train mode:</p><ul><li><p><strong>Release efficiency bottleneck</strong>:</p><ul><li><p>Platform differences require separate builds for iOS, Android, Harmony, Web, and other platforms—multi-end release workload doubles;</p></li><li><p>Cross-platform development's flexibility of "page" as release unit means more pages lead to higher release frequency.</p></li></ul></li><li><p><strong>Cross-app reuse complexity</strong>: Modules (such as weather modules) often serve multiple host apps (such as QQ and TIM), further amplifying release scale.</p></li><li><p><strong>Dependency management challenges</strong>: Module versions and host app compatibility, upgrade/downgrade management are complex.</p></li></ul><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-06-45-image-c5c4811818ba24c7abc90ab667ac6844.png" width="1920" height="1920" class="img_H1q8"></p><h3 class="anchor anchorWithStickyNavbar_p97g" id="32-cross-platform-release-solution">3.2 Cross-Platform Release Solution<a href="#32-cross-platform-release-solution" class="hash-link" aria-label="Direct link to 3.2 Cross-Platform Release Solution" title="Direct link to 3.2 Cross-Platform Release Solution">​</a></h3><p>To address these complex release challenges, Shiply launched the "Cross-Platform Release" solution to deeply optimize the release process.</p><ul><li><strong>Bind different platform resource IDs per module</strong>: Modules support binding resource package IDs under different platforms and products, enabling unified release process management.</li></ul><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-06-51-image-05a448522d24e4acdc53a85b334e4953.png" width="2816" height="892" class="img_H1q8"></p><ul><li><strong>Cross-end module dependency issues</strong>:</li></ul><p>After splitting into finer modules, dependencies may form between modules. Updating a single module depends on updating underlying modules, creating dependency update dilemmas.</p><p>Shiply supports multi-module aggregated release. When the client pulls any module, the Shiply SDK updates associated modules locally together, solving potential issues from inconsistent dependency module release and download timing.</p><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-06-59-image-5390c261068831d63867916ddb14cb65.png" width="1772" height="796" class="img_H1q8"></p><ul><li><p><strong>Separately configurable release conditions</strong></p><ul><li><p><strong>Flexible release</strong>: Flexibly choose to release to one or more products.</p></li><li><p><strong>Powerful rules</strong>: Includes <strong>20+ built-in system conditions</strong> for audience, region, network, system version, device model, and more. <strong>Supports profile and A/B experiment audience targeting</strong>; <strong>supports ultra-large audience packages at tens of millions scale</strong>. Provides <strong>global conditions, condition templates, custom conditions</strong>, and other rule filling methods. Supports user-defined attributes as delivery conditions—<strong>release conditions can expand infinitely</strong>.<img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-07-07-image-5b2c1be371c4a7616d79e4de07c8bf49.png" width="2820" height="766" class="img_H1q8"></p></li></ul></li><li><p>Automatic delta: The platform automatically generates delta packages for the last N published tasks, <strong>saving up to 60–80% traffic with significant bandwidth savings</strong>.</p></li></ul><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-07-16-image-4c12dd0e274d42411b0bba24b4a5e1f2.png" width="1408" height="328" class="img_H1q8"></p><ul><li><strong>Unified gradual rollout strategy</strong></li></ul><p>Rich gradual rollout strategies: batch gradual rollout, proportional gradual rollout, smooth gradual rollout, scheduled release after gradual rollout, and more. Proportional gradual rollout addresses different product user scale differences.</p><p>Automated gradual rollout process: Gradual rollout batches flow automatically; gradual rollout runs unattended.</p><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-07-25-image-32456c645329af38ad0dc2af96b4a073.png" width="2236" height="1640" class="img_H1q8"></p><ul><li><p><strong>Unified release process control</strong></p><ul><li><p><strong>Full release lifecycle management</strong>: Standardized process (test, experience, approval, gradual rollout, full release, rollback, stop) provides complete release lifecycle management. Mechanisms at pre-release, during release, and post-release stages ensure release safety.</p></li><li><p><strong>Independent process control</strong>: Supports pause, stop, and rollback for any product in aggregated release—unified multi-end control with maximum flexibility. When a specific product's release has issues, targeted damage control is possible.</p></li></ul></li></ul><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-07-33-image-0bab475243c6d8210557207a4f1c8213.png" width="696" height="1726" class="img_H1q8"></p><h3 class="anchor anchorWithStickyNavbar_p97g" id="34-release-monitoring-and-rollback-mechanisms">3.4 Release Monitoring and Rollback Mechanisms<a href="#34-release-monitoring-and-rollback-mechanisms" class="hash-link" aria-label="Direct link to 3.4 Release Monitoring and Rollback Mechanisms" title="Direct link to 3.4 Release Monitoring and Rollback Mechanisms">​</a></h3><p>Cross-platform development improves feature reuse and development efficiency but also brings longer logic chains. From a temporal dimension, chains include: download chain, load chain, and usage chain.</p><p>For example, when using the Hippy framework (similar to RN), steps include bundle startup download or pre-warm download, bundle decompression, Hippy engine initialization, bundle loading, JS loading and execution, page rendering, and more—each step may have performance issues and quality risks. Therefore, we need to upgrade our measurement indicator system to address new challenges from cross-platform release.</p><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-07-44-image-41ff45b8ab753f08095ee78f2a434ff9.png" width="1500" height="938" class="img_H1q8"></p><p><strong>Full-chain release monitoring and rollback</strong>: Based on Tencent's Aegis frontend monitoring framework, Shiply developed monitoring SDKs for Hippy and Kuikly cross-platform frameworks. Through SDK integration with the Bugly monitoring platform, full-chain monitoring, alerting, and rollback for both cross-platform artifacts is achieved.</p><ul><li><p><strong>Download chain</strong>: Supports monitoring of configuration pull success rate, package download coverage, and load success rate</p></li><li><p><strong>Load chain</strong>: Supports page load time, second-open rate metrics, and drill-down analysis of detailed metrics.</p></li><li><p><strong>Execution chain (runtime)</strong>: Supports error logs, network request error codes and latency, various custom reports</p></li><li><p><strong>Native core metrics</strong>: Supports monitoring, alerting, and rollback for Crash, ANR, FOOM, ERROR, privacy compliance, and custom business metrics</p></li></ul><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-07-49-image-a4fd47831c519365f81cce670c6b6bf0.png" width="2504" height="1466" class="img_H1q8"></p><h3 class="anchor anchorWithStickyNavbar_p97g" id="35-cross-platform-release-support-status">3.5 Cross-Platform Release Support Status<a href="#35-cross-platform-release-support-status" class="hash-link" aria-label="Direct link to 3.5 Cross-Platform Release Support Status" title="Direct link to 3.5 Cross-Platform Release Support Status">​</a></h3><p>Shiply currently supports cross-platform aggregated release for H5, Hippy, and React Native framework artifacts, and also supports Flutter, Kuikly, and other framework dynamic SDK + release solutions:</p><ul><li><p>Flutter dynamic delivery: Supports hotfix and dynamic delivery at the Dart language layer in Flutter. Fully in-house solution focused on high performance and native development experience—performance and usability far exceed traditional JS and AST approaches.</p></li><li><p>Kuikly dynamic delivery: Supports multi-end dynamic delivery on Android, iOS, Harmony, and more. On Android, uses native-like Dex loading mode—20% faster first screen vs SO mode. On iOS, achieves native-indistinguishable first screen and smoothness.</p></li></ul><table><thead><tr><th>Framework</th><th>H5</th><th>Hippy/RN</th><th>Flutter</th><th>Kuikly</th></tr></thead><tbody><tr><td>Development Language</td><td>JavaScript</td><td>JavaScript</td><td>Dart</td><td>Kotlin</td></tr><tr><td>Development Experience</td><td>Web ecosystem</td><td>Web ecosystem</td><td>Dart ecosystem</td><td>Android ecosystem</td></tr><tr><td>User Experience</td><td>Non-native</td><td>Near-native</td><td>Near-native</td><td>Native</td></tr><tr><td>Rendering</td><td>WebView</td><td>Native</td><td>Self-drawn (Skia)</td><td>Native</td></tr><tr><td>Memory Usage</td><td>High</td><td>Medium</td><td>Medium</td><td>Low</td></tr><tr><td>Dynamic Capability</td><td>Supported</td><td>Supported</td><td>Supported</td><td>Supported</td></tr><tr><td>Hot Update Support</td><td>Supported</td><td>Supported</td><td>Supported</td><td>Supported</td></tr></tbody></table><p>In June 2025, we surveyed usage of popular cross-platform frameworks Flutter and RN in the market:</p><ul><li>Flutter overall penetration is about 13%, highest in travel apps (29.5%).</li></ul><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-07-56-image-93e232341e6eee44d766b74291d963e1.png" width="1334" height="708" class="img_H1q8"></p><ul><li>React Native overall penetration is about 9%, highest in travel products (18.2%).</li></ul><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-08-03-image-0b04d924a69cd136cec523ec70fc0dfa.png" width="1326" height="708" class="img_H1q8"></p><p>Cross-platform framework penetration in apps still has significant room to grow. Shiply Pro (external service) will gradually open related capabilities to help industry apps better leverage cross-platform development and push features to market faster and more securely through dynamic release.</p><h3 class="anchor anchorWithStickyNavbar_p97g" id="36-cross-platform-release-summary">3.6 Cross-Platform Release Summary<a href="#36-cross-platform-release-summary" class="hash-link" aria-label="Direct link to 3.6 Cross-Platform Release Summary" title="Direct link to 3.6 Cross-Platform Release Summary">​</a></h3><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-08-08-image-6b125a037120d0dd55584dff4de988fa.png" width="1500" height="899" class="img_H1q8"></p><p>Shiply's cross-platform release solution systematically solves high-frequency release challenges in cross-platform, cross-app scenarios. It can coordinate complex cross-platform, cross-app release tasks simultaneously. Its core lies in a flexible release rules engine and powerful client-side SDK capabilities that solve inter-module dependency issues, support automatic downgrade, one-click rollback, and other key operations—completely breaking cross-platform release barriers. Only by achieving high-frequency dynamic release can cross-platform frameworks deliver maximum value.</p><h2 class="anchor anchorWithStickyNavbar_p97g" id="iv-dynamic-release-app-hotfix">IV. Dynamic Release: App Hotfix<a href="#iv-dynamic-release-app-hotfix" class="hash-link" aria-label="Direct link to IV. Dynamic Release: App Hotfix" title="Direct link to IV. Dynamic Release: App Hotfix">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="41-hotfix-use-cases">4.1 Hotfix Use Cases<a href="#41-hotfix-use-cases" class="hash-link" aria-label="Direct link to 4.1 Hotfix Use Cases" title="Direct link to 4.1 Hotfix Use Cases">​</a></h3><p>Facing sudden online issues, traditional fix processes are slow and costly. Shiply hotfix technology provides real-time response capability:</p><p><strong>Emergency Bug Fixes</strong></p><p>Login failures, startup crashes, payment blockers, and other core experience issues are no longer helpless situations.</p><p><strong>Improve Online Fault Tolerance</strong></p><p>Strict version quality control means heavy process constraints and significant test resource investment. Finding 5% of issues requires 80% effort in full regression testing. Losing flexibility and agility also means losing market timing. Hotfix improves online fault tolerance, appropriately reducing ineffective test investment and getting products to market faster.</p><p><strong>Lightweight Version Rapid Upgrade</strong></p><p>New features from development launch through version coverage to data collection often need long cycles to close the loop. App hotfix provides lightweight update capability—for small feature changes, rapid user-invisible upgrades are possible.</p><h3 class="anchor anchorWithStickyNavbar_p97g" id="42-shiply-hotfix-sdk-solution">4.2 Shiply Hotfix SDK Solution<a href="#42-shiply-hotfix-sdk-solution" class="hash-link" aria-label="Direct link to 4.2 Shiply Hotfix SDK Solution" title="Direct link to 4.2 Shiply Hotfix SDK Solution">​</a></h3><p>Android hotfix solutions by fix granularity fall into three categories: function-level, class-level, and Dex-level.</p><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-08-16-image-dcd2e84a61432bef62a87de69974e719.png" width="1408" height="588" class="img_H1q8"></p><p>Comparison of these approaches:</p><table><thead><tr><th></th><th>Native Hook</th><th>Java Hook</th><th>MultiDex</th><th>Dex Replacement</th></tr></thead><tbody><tr><td>Principle</td><td>Replace function execution logic by modifying ArtMethod entry</td><td>Insert stubs before functions at compile time to replace execution logic at runtime</td><td>Use ClassLoader lookup to replace classes; must solve preloading and inlining issues</td><td>Also uses ClassLoader lookup but with larger replacement scope to avoid optimization issues—almost entire app can be replaced</td></tr><tr><td>Performance</td><td>1. No impact without patch 2. Small impact with patch</td><td>1. Pre-stubbing every function affects performance and optimization 2. Similar impact with/without patch</td><td>1. No impact without patch 2. Small impact with patch</td><td>1. Slight impact without patch 2. Larger impact with patch; cold start time increases significantly</td></tr><tr><td>Compatibility</td><td>Many vendor/system compatibility issues; high maintenance cost</td><td>Few compatibility issues</td><td>Many vendor/system compatibility issues; high maintenance cost</td><td>Few compatibility issues</td></tr><tr><td>Modification Limits</td><td>Function-level modification</td><td>Limited class-level modification</td><td>Limited class-level modification</td><td>Almost no modification limits</td></tr><tr><td>Activation Speed</td><td>Real-time</td><td>Real-time</td><td>Requires restart</td><td>Requires restart</td></tr><tr><td>Use Cases</td><td>Function-level bugfix</td><td>Function-level bugfix</td><td>Class-level bugfix</td><td>Bugfix, feature changes, version upgrade</td></tr></tbody></table><p>Overall, each approach has pros and cons in performance impact, compatibility, and usage limits.</p><p>Shiply Hotfix SDK uses a hybrid engine (Tinker, Redirect) combining multiple approaches. Based on massive business practice, it is deeply optimized for patch stability, compatibility, and activation speed. Businesses need not concern themselves with engine differences; optimal packaging can be flexibly chosen at release time.</p><p><strong>Fix capability</strong>: Except for system-managed resources such as AndroidManifest.xml and RemoteView, supports dex, res, and so fixes for feature-level updates.</p><ul><li><p><strong>Tinker engine</strong>: Supports Dex, SO library, and resource replacement (comprehensive), provides rollback capability (safety), active community (WeChat open source). Essentially application and optimization of Android class loading mechanism.</p></li><li><p><strong>Redirect engine</strong>: Function stubbing approach. Redirect does not use annotation-based diff marking but uses DexDiff to analyze differences and automatically extract fix code—lower usage barrier for developers and avoids annotation invalidation from compile-time inlining optimization. We also strengthened auto code generation (class inheritance and few other features cannot be supported at principle level), maximizing support for adding/removing variables, functions, classes, lambda, etc.—keeping stubbing modification limits minimal.</p></li></ul><h3 class="anchor anchorWithStickyNavbar_p97g" id="43-shiply-hotfix-end-to-end-management-solution">4.3 Shiply Hotfix End-to-End Management Solution<a href="#43-shiply-hotfix-end-to-end-management-solution" class="hash-link" aria-label="Direct link to 4.3 Shiply Hotfix End-to-End Management Solution" title="Direct link to 4.3 Shiply Hotfix End-to-End Management Solution">​</a></h3><p>Shiply app hotfix provides one-stop patch release management including: task management, branch management, pipeline plugins, gradual rollout management, approval and rollout, gradual rollout, real-time data statistics, and release quality monitoring integration.</p><p>Shiply ensures fast, secure, stable release through standard release processes and supporting tools, connecting multiple systems involved in release to make release simpler and more reliable.</p><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-08-23-image-3b6397f9f2d67494525149521e4aef21.png" width="2196" height="1256" class="img_H1q8"></p><h3 class="anchor anchorWithStickyNavbar_p97g" id="44-shiply-hotfix-implementation-results">4.4 Shiply Hotfix Implementation Results<a href="#44-shiply-hotfix-implementation-results" class="hash-link" aria-label="Direct link to 4.4 Shiply Hotfix Implementation Results" title="Direct link to 4.4 Shiply Hotfix Implementation Results">​</a></h3><p>Shiply has provided capability support for 30+ apps within the company, covering <strong>peak devices exceeding 1 billion/day</strong>, with <strong>patch load success rate up to 99.9%+</strong>. Over the past year, Shiply hotfix capability <strong>significantly improved stability and user experience in core scenarios for multiple company products</strong>:</p><ul><li><p><strong>Core module stability and performance optimization</strong>: Quickly fixed crashes and stutters in Business A files, photo albums, local documents, preloading, and cold start.</p></li><li><p><strong>Critical user experience fixes</strong>: Ensured Business B screen casting experience, core pages (such as Olympics carousel) UI consistency, and process stutters.</p></li><li><p><strong>Business-critical flow assurance</strong>: Resolved Business C ad and splash screen loading, live room core features, and underlying page navigation anomalies.</p></li><li><p><strong>Basic functionality and compatibility adaptation</strong>: Hotfix and compatibility adaptation for Business D kernel engine, skins, mall, push, voice, and other high-frequency modules.</p></li></ul><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-08-28-image-825cd3c595d28435207bd3bc8a8b2cb3.png" width="1860" height="1056" class="img_H1q8"></p><h2 class="anchor anchorWithStickyNavbar_p97g" id="v-conclusion-evolution-hidden-value-maximized">V. Conclusion: Evolution Hidden, Value Maximized<a href="#v-conclusion-evolution-hidden-value-maximized" class="hash-link" aria-label="Direct link to V. Conclusion: Evolution Hidden, Value Maximized" title="Direct link to V. Conclusion: Evolution Hidden, Value Maximized">​</a></h2><p>In today's intensely competitive app market, product competitiveness is <strong>"evolution speed × iteration cost × user experience"</strong>—dynamic release capability has become one of the core engines of rapid app evolution. Shiply is committed to hiding the complexity of technical iteration behind the scenes. Through full-scenario, one-stop release capabilities, it helps developers <strong>create the ultimate smooth experience of seamless feature upgrades and invisible issue fixes</strong> for users—when technical iteration is invisible, product value shines brightest.</p><p>In the past six months, Shiply has also begun offering commercial services externally. With high-reliability, large-scale validated technical solutions, it has landed in consumer electronics, automotive, healthcare, e-commerce, content, social, and other industries—continuously providing high-quality dynamic release services, cross-end dynamic frameworks, app hotfix, and other capability support.</p><p>Welcome to visit <a href="https://shiply.tds.qq.com/?utm_source=weixin" target="_blank" rel="noopener noreferrer">Tencent Shiply</a> to start a free trial and embrace a new paradigm of app release!</p><p>Or contact a <a href="https://work.weixin.qq.com/ca/cawcdeff905682b988" target="_blank" rel="noopener noreferrer">Shiply Account Manager</a> for consultation. You can also visit <a href="https://tds.qq.com/" target="_blank" rel="noopener noreferrer">TDS Tencent Device Services</a> for more product information and solutions.</p><p><img loading="lazy" src="/document/en-US/assets/images/2025-06-30-14-08-33-image-0fb4f91026b4257c5736a49b0efa12ce.png" width="1480" height="602" class="img_H1q8"></p>]]></content>
        <category label="Mobile App Development" term="Mobile App Development"/>
        <category label="Hotfix" term="Hotfix"/>
        <category label="Dynamic Release" term="Dynamic Release"/>
        <category label="Cross-Platform Development" term="Cross-Platform Development"/>
        <category label="Flutter" term="Flutter"/>
        <category label="React Native" term="React Native"/>
        <category label="App Updates" term="App Updates"/>
        <category label="Tencent Tech" term="Tencent Tech"/>
        <category label="Shiply" term="Shiply"/>
        <category label="Seamless Upgrade" term="Seamless Upgrade"/>
        <category label="Hot Update" term="Hot Update"/>
        <category label="App Release" term="App Release"/>
        <category label="Mobile Tech" term="Mobile Tech"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[iOS App Store Submission Rejected? Decode the Latest ITMS Error Codes and Solutions]]></title>
        <id>https://shiply.tds.qq.com/document/en-US/blog/ITMS-Errors-Guide</id>
        <link href="https://shiply.tds.qq.com/document/en-US/blog/ITMS-Errors-Guide"/>
        <updated>2025-05-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This article explains 25+ common ITMS error codes with proven solutions to help you pass App Store review quickly, including high-frequency issues such as Bitcode/architecture/privacy manifests. Includes Xcode debugging tips and automated fix scripts.]]></summary>
        <content type="html"><![CDATA[<p>Apple's <strong>ITMS (iTunes Store) errors</strong> are usually related to submitting apps or content to the App Store, especially issues when using tools such as <strong>Transporter</strong>, <strong>App Store Connect API</strong>, and <strong>altool</strong>. Apple defines and manages these errors mainly to ensure developers comply with technical specifications and review guidelines, while providing tools and documentation to help developers resolve issues.</p><ul><li>When submitting apps to App Store Connect, Apple's automated system runs pre-checks to detect common errors (such as signing and metadata format) and returns error codes and descriptions directly.</li><li>Developers must fix issues based on error prompts and resubmit.</li></ul><hr><h2 class="anchor anchorWithStickyNavbar_p97g" id="i-itms-error-types">I. ITMS Error Types<a href="#i-itms-error-types" class="hash-link" aria-label="Direct link to I. ITMS Error Types" title="Direct link to I. ITMS Error Types">​</a></h2><p>ITMS errors are typically numbered in <code>ITMS-XXXXX</code> format (e.g., <code>ITMS-9000</code>), covering the following common types:</p><ol><li><strong>Metadata errors</strong><ul><li>Issues related to app name, description, screenshots, keywords, and other metadata.</li></ul></li><li><strong>Binary file issues</strong><ul><li>Signing, architecture, or format errors in build versions (IPA files).</li></ul></li><li><strong>Compliance issues</strong><ul><li>Violations of App Store Review Guidelines (such as missing privacy policy, use of private APIs, non-compliant data collection).</li></ul></li><li><strong>Certificate and provisioning profile errors</strong><ul><li>Expired signing certificates, incorrect device permission configuration.</li></ul></li><li><strong>Server or network issues</strong><ul><li>Submission failures caused by Apple server outages or unstable developer networks.</li></ul></li></ol><h2 class="anchor anchorWithStickyNavbar_p97g" id="ii-how-to-handle-itms-errors">II. How to Handle ITMS Errors<a href="#ii-how-to-handle-itms-errors" class="hash-link" aria-label="Direct link to II. How to Handle ITMS Errors" title="Direct link to II. How to Handle ITMS Errors">​</a></h2><h4 class="anchor anchorWithStickyNavbar_p97g" id="1-developer-support-channels">1. Developer Support Channels<a href="#1-developer-support-channels" class="hash-link" aria-label="Direct link to 1. Developer Support Channels" title="Direct link to 1. Developer Support Channels">​</a></h4><ul><li><strong>Contact Apple Technical Support</strong>: Submit issues through "Contact Us" in App Store Connect.</li><li><strong>Developer Forums</strong>: Search for similar cases or ask questions in Apple Developer Forums.</li><li><strong>Xcode and Transporter logs</strong>: Use detailed logs generated by tools to locate root causes.</li></ul><h4 class="anchor anchorWithStickyNavbar_p97g" id="2-review-team-feedback">2. Review Team Feedback<a href="#2-review-team-feedback" class="hash-link" aria-label="Direct link to 2. Review Team Feedback" title="Direct link to 2. Review Team Feedback">​</a></h4><ul><li>If the app passes pre-check but is rejected by the review team, developers receive an email with specific guideline clauses (such as violations of Guidelines 4.3, 5.1.1, etc.) and must fix and resubmit based on feedback.</li></ul><h2 class="anchor anchorWithStickyNavbar_p97g" id="iii-itms-errors-compilation-and-binary-issues">III. ITMS Errors: Compilation and Binary Issues<a href="#iii-itms-errors-compilation-and-binary-issues" class="hash-link" aria-label="Direct link to III. ITMS Errors: Compilation and Binary Issues" title="Direct link to III. ITMS Errors: Compilation and Binary Issues">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90668">ITMS-90668<a href="#itms-90668" class="hash-link" aria-label="Direct link to ITMS-90668" title="Direct link to ITMS-90668">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ERROR ITMS-90668: </span><span class="token string" style="color:#e3116c">"Invalid Bundle Executable. The executable file contains incomplete bitcode."</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong><br>
<!-- -->Binary file does not correctly enable Bitcode or compilation parameters are incomplete.</p><p><strong>Solution</strong></p><ol><li><p>Option 1: <strong>Disable Bitcode</strong><br>
<!-- -->Check whether Bitcode is enabled in the binary file:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">otool </span><span class="token parameter variable" style="color:#36acaa">-arch</span><span class="token plain"> arm64 </span><span class="token parameter variable" style="color:#36acaa">-l</span><span class="token plain"> ./MXFFI </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">grep</span><span class="token plain"> __LLVM </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">wc</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-l</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Result <code>0</code> means <code>ENABLE_BITCODE = NO</code></li><li>Non-zero result means <code>ENABLE_BITCODE = YES</code></li></ul></li><li><p>Option 2: <strong>Force remove Bitcode and re-sign</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Remove Bitcode </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">xcrun bitcode_strip Flutter.framework/Flutter </span><span class="token parameter variable" style="color:#36acaa">-r</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-o</span><span class="token plain"> Flutter.framework/Flutter </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Re-sign Framework </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">codesign </span><span class="token parameter variable" style="color:#36acaa">-fs</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"certificate name"</span><span class="token plain"> Flutter.framework </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Re-sign entire App </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">codesign </span><span class="token parameter variable" style="color:#36acaa">-fs</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"certificate name"</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--entitlements</span><span class="token plain"> </span><span class="token variable" style="color:#36acaa">${appPath}</span><span class="token plain">/entitlements.plist </span><span class="token variable" style="color:#36acaa">${appPath}</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ol><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90087">ITMS-90087<a href="#itms-90087" class="hash-link" aria-label="Direct link to ITMS-90087" title="Direct link to ITMS-90087">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ERROR ITMS-90087: </span><span class="token string" style="color:#e3116c">"Unsupported Architectures. The executable contains unsupported architectures [x86_64,i386]."</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong><br>
<!-- -->Binary contains simulator architectures (x86_64/i386).</p><p><strong>Solution</strong><br>
<!-- -->Add a build script to remove invalid architectures:</p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token assign-left variable" style="color:#36acaa">APP_PATH</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"</span><span class="token string variable" style="color:#36acaa">${TARGET_BUILD_DIR}</span><span class="token string" style="color:#e3116c">/</span><span class="token string variable" style="color:#36acaa">${WRAPPER_NAME}</span><span class="token string" style="color:#e3116c">"</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">find</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"</span><span class="token string variable" style="color:#36acaa">$APP_PATH</span><span class="token string" style="color:#e3116c">"</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-name</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'*.framework'</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-exec</span><span class="token plain"> lipo </span><span class="token parameter variable" style="color:#36acaa">-remove</span><span class="token plain"> x86_64 </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-output</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90209">ITMS-90209<a href="#itms-90209" class="hash-link" aria-label="Direct link to ITMS-90209" title="Direct link to ITMS-90209">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ERROR ITMS-90209: </span><span class="token string" style="color:#e3116c">"Invalid Segment Alignment. The binary does not have proper segment alignment."</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong><br>
<!-- -->Binary file segment alignment is abnormal.</p><p><strong>Solution</strong></p><ol><li>Upgrade Xcode to the latest version.</li><li>Recompile third-party libraries using <code>lipo</code>.</li></ol><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90125">ITMS-90125<a href="#itms-90125" class="hash-link" aria-label="Direct link to ITMS-90125" title="Direct link to ITMS-90125">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ERROR ITMS-90125: </span><span class="token string" style="color:#e3116c">"The binary is invalid. The encryption info is missing or invalid."</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong><br>
<!-- -->Binary file encryption information is missing.</p><p><strong>Solution</strong><br>
<!-- -->Ensure binary encryption flags are not manually modified; use Xcode's default build process.</p><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="tms-90048">TMS-90048<a href="#tms-90048" class="hash-link" aria-label="Direct link to TMS-90048" title="Direct link to TMS-90048">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ITMS-90048: This bundle is invalid - Your archive contains paths that are not allowed: </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">._Symbols</span><span class="token punctuation" style="color:#393A34">]</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong><br>
<!-- -->The archive (.xcarchive) submitted to App Store Connect contains a hidden file <code>._Symbols</code> that is not allowed.</p><p>On macOS 15.4, the APFS file system may automatically generate hidden files starting with <code>._</code> during file operations (such as rsync) to store Finder metadata or resource forks. During iOS builds, when the Symbols directory is generated, system file operations may trigger creation of the metadata file <code>._Symbols</code>.</p><p><strong>Solution</strong><br>
<!-- -->Solution 1: After building, unzip the IPA and delete <code>._Symbols</code><br>
<!-- -->Solution 2: Submit through Product &gt; Archive in Xcode</p><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90426">ITMS-90426<a href="#itms-90426" class="hash-link" aria-label="Direct link to ITMS-90426" title="Direct link to ITMS-90426">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ITMS-90426: Invalid Swift Support - The SwiftSupport folder is missing. Rebuild your app using the current public </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">GM</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> version of Xcode and resubmit it.</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong>  </p><p>SwiftSupport folder is missing</p><p><strong>Solution</strong></p><ol><li>Set Build Settings -&gt; Always Embed Swift Standard Libraries to YES</li><li>Repackage, then unzip the IPA and verify the SwiftSupport folder is included</li></ol><hr><h2 class="anchor anchorWithStickyNavbar_p97g" id="iv-itms-errors-version-and-configuration-issues">IV. ITMS Errors: Version and Configuration Issues<a href="#iv-itms-errors-version-and-configuration-issues" class="hash-link" aria-label="Direct link to IV. ITMS Errors: Version and Configuration Issues" title="Direct link to IV. ITMS Errors: Version and Configuration Issues">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90060">ITMS-90060<a href="#itms-90060" class="hash-link" aria-label="Direct link to ITMS-90060" title="Direct link to ITMS-90060">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ERROR ITMS-90060: </span><span class="token string" style="color:#e3116c">"Invalid CFBundleShortVersionString '1.2.2.1'. Must be a period-separated list of three non-negative integers."</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong><br>
<!-- -->Version number format does not meet the three-segment requirement.</p><p><strong>Solution</strong><br>
<!-- -->Check <code>CFBundleShortVersionString</code> in all dependency libraries and change to three-segment format (e.g., <code>1.2.2</code>).</p><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90062">ITMS-90062<a href="#itms-90062" class="hash-link" aria-label="Direct link to ITMS-90062" title="Direct link to ITMS-90062">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">"This bundle is invalid. The value for key CFBundleShortVersionString [...] must contain a higher version"</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong><br>
<!-- -->Submitted version number is lower than the approved version.</p><p><strong>Solution</strong><br>
<!-- -->Ensure both <code>CFBundleShortVersionString</code> and <code>CFBundleVersion</code> are higher than the most recently approved version.</p><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90725">ITMS-90725<a href="#itms-90725" class="hash-link" aria-label="Direct link to ITMS-90725" title="Direct link to ITMS-90725">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ITMS-90725: SDK Version Issue - This app was built with the iOS </span><span class="token number" style="color:#36acaa">15.5</span><span class="token plain"> SDK. All iOS apps submitted to the App Store must be built with the iOS </span><span class="token number" style="color:#36acaa">16.1</span><span class="token plain"> SDK or later, included </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> Xcode </span><span class="token number" style="color:#36acaa">14.1</span><span class="token plain"> or later."</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Solution</strong><br>
<!-- -->Upgrade Xcode to 14.1 or later and recompile using iOS 16.1+ SDK.</p><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90098">ITMS-90098<a href="#itms-90098" class="hash-link" aria-label="Direct link to ITMS-90098" title="Direct link to ITMS-90098">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">The bundle identifier contains disallowed characters</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Solution</strong><br>
<!-- -->Check and modify Bundle Identifier to ensure it does not contain disallowed characters</p><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90186">ITMS-90186<a href="#itms-90186" class="hash-link" aria-label="Direct link to ITMS-90186" title="Direct link to ITMS-90186">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">Invalid Pre-Release Train. The train version is closed </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> new build submissions</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong>  </p><p>The pre-release train for this version is closed; new build submissions are not accepted</p><p><strong>Solution</strong><br>
<!-- -->Check version settings in App Store Connect and ensure the submitted version number is correct</p><hr><h2 class="anchor anchorWithStickyNavbar_p97g" id="v-itms-errors-privacy-and-permission-issues">V. ITMS Errors: Privacy and Permission Issues<a href="#v-itms-errors-privacy-and-permission-issues" class="hash-link" aria-label="Direct link to V. ITMS Errors: Privacy and Permission Issues" title="Direct link to V. ITMS Errors: Privacy and Permission Issues">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-91053-itms-91056-itms-91061">ITMS-91053, ITMS-91056, ITMS-91061<a href="#itms-91053-itms-91056-itms-91061" class="hash-link" aria-label="Direct link to ITMS-91053, ITMS-91056, ITMS-91061" title="Direct link to ITMS-91053, ITMS-91056, ITMS-91061">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ITMS-91053: Missing API declaration - Your app</span><span class="token string" style="color:#e3116c">'s code in the "Runner" file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategoryDiskSpace. While no action is required at this time, starting May 1, 2024, when you upload a new app or app update, you must include a NSPrivacyAccessedAPITypes array in your app'</span><span class="token plain">s privacy manifest to provide approved reasons </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> these APIs used by your app</span><span class="token string" style="color:#e3116c">'s code. For more details about this policy, including a list of required reason APIs and approved reasons for usage, visit: https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api.</span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="display:inline-block;color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">ITMS-91056: Invalid privacy manifest - The PrivacyInfo.xcprivacy file from the following path is invalid: "PrivacyInfo.xcprivacy". Keys and values in your app'</span><span class="token plain">s privacy manifests must be valid. For </span><span class="token function" style="color:#d73a49">more</span><span class="token plain"> details about privacy manifest files, visit: https://developer.apple.com/documentation/bundleresources/privacy_manifest_files.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ITMS-91061: Missing privacy manifest - Your app includes </span><span class="token string" style="color:#e3116c">"Frameworks/X.framework/X"</span><span class="token plain">, </span><span class="token function" style="color:#d73a49">which</span><span class="token plain"> includes X, an SDK that was identified </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> the documentation as a commonly used third-party SDK. If a new app includes a commonly used third-party SDK, or an app update adds a new commonly used third-party SDK, the SDK must include a privacy manifest file. Please contact the provider of the SDK that includes this </span><span class="token function" style="color:#d73a49">file</span><span class="token plain"> to get an updated SDK version with a privacy manifest. For </span><span class="token function" style="color:#d73a49">more</span><span class="token plain"> details about this policy, including a list of SDKs that are required to include signatures and manifests, visit: https://developer.apple.com/support/third-party-SDK-requirements.</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong><br>
<!-- -->On February 29, 2024, Apple released <a href="https://developer.apple.com/cn/news/?id=3d8a9yyh" target="_blank" rel="noopener noreferrer">Privacy Updates for App Store Submissions</a>, explicitly requiring new or updated apps to include a <code>PrivacyInfo.xcprivacy</code> privacy manifest file; otherwise review may be rejected. Some third-party SDKs integrated as binaries also require signatures.</p><p>Developers need to create a PrivacyInfo.xcprivacy privacy manifest file for the SDK.</p><ul><li>NSPrivacyAccessedAPICategoryFileTimestamp</li><li>NSPrivacyAccessedAPICategoryUserDefaults</li><li>NSPrivacyAccessedAPICategoryDiskSpace</li><li>NSPrivacyAccessedAPICategoryUserDefaults</li></ul><p><strong>Solution</strong></p><p>Manually create PrivacyInfo.xcprivacy (modify according to your situation)</p><div class="language-xml codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-xml codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token prolog" style="color:#999988;font-style:italic">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token doctype punctuation" style="color:#393A34;font-style:italic">&lt;!</span><span class="token doctype doctype-tag" style="color:#999988;font-style:italic">DOCTYPE</span><span class="token doctype" style="color:#999988;font-style:italic"> </span><span class="token doctype name" style="color:#999988;font-style:italic">plist</span><span class="token doctype" style="color:#999988;font-style:italic"> </span><span class="token doctype name" style="color:#999988;font-style:italic">PUBLIC</span><span class="token doctype" style="color:#999988;font-style:italic"> </span><span class="token doctype string" style="color:#e3116c;font-style:italic">"-//Apple//DTD PLIST 1.0//EN"</span><span class="token doctype" style="color:#999988;font-style:italic"> </span><span class="token doctype string" style="color:#e3116c;font-style:italic">"http://www.apple.com/DTDs/PropertyList-1.0.dtd"</span><span class="token doctype punctuation" style="color:#393A34;font-style:italic">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">plist</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dict</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">key</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">NSPrivacyTracking</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">key</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">false</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">key</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">NSPrivacyCollectedDataTypes</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">key</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">array</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">key</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">NSPrivacyAccessedAPITypes</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">key</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">array</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dict</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">key</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">NSPrivacyAccessedAPIType</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">key</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">string</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">NSPrivacyAccessedAPICategoryUserDefaults</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">string</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">key</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">NSPrivacyAccessedAPITypeReasons</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">key</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">array</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">string</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">CA92.1</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">string</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">array</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dict</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dict</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">key</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">NSPrivacyAccessedAPIType</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">key</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">string</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">NSPrivacyAccessedAPICategoryFileTimestamp</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">string</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">key</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">NSPrivacyAccessedAPITypeReasons</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">key</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">array</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">string</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">C617.1</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">string</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">array</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dict</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">array</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dict</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">plist</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If you have many third-party SDKs, consider using automated fix scripts:</p><ul><li><p><a href="https://github.com/crasowas/app_privacy_manifest_fixer" target="_blank" rel="noopener noreferrer">https://github.com/crasowas/app_privacy_manifest_fixer</a></p></li><li><p><a href="https://github.com/ymoyao/cocoapods-privacy" target="_blank" rel="noopener noreferrer">https://github.com/ymoyao/cocoapods-privacy</a></p></li></ul><p>App Store privacy manifest analyzer:</p><ul><li><a href="https://github.com/crasowas/app_store_required_privacy_manifest_analyser" target="_blank" rel="noopener noreferrer">https://github.com/crasowas/app_store_required_privacy_manifest_analyser</a></li></ul><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-91061">ITMS-91061<a href="#itms-91061" class="hash-link" aria-label="Direct link to ITMS-91061" title="Direct link to ITMS-91061">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ITMS-91061: </span><span class="token string" style="color:#e3116c">"Missing privacy manifest. Third-party SDK must include a privacy manifest."</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Solution</strong><br>
<!-- -->Contact third-party SDK providers to obtain updated versions that include privacy manifests.</p><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90683">ITMS-90683<a href="#itms-90683" class="hash-link" aria-label="Direct link to ITMS-90683" title="Direct link to ITMS-90683">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">"Missing Info.plist key. Your app's code references [...] but the Info.plist file does not contain [...]"</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong><br>
<!-- -->Accessing sensitive data (such as location, camera) without providing privacy descriptions.</p><p><strong>Solution</strong><br>
<!-- -->Add corresponding keys in <code>Info.plist</code>:</p><ul><li><code>NSLocationWhenInUseUsageDescription</code></li><li><code>NSCameraUsageDescription</code></li></ul><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90078">ITMS-90078<a href="#itms-90078" class="hash-link" aria-label="Direct link to ITMS-90078" title="Direct link to ITMS-90078">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token string" style="color:#e3116c">"Missing push notification entitlement [...] entitlements do not include the 'aps-environment' entitlement"</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong><br>
<!-- -->App contains APNs-related APIs but does not declare push notification entitlement</p><p><strong>Solution</strong>  </p><ol><li>Enable push notifications in project Capabilities</li><li>Check whether third-party libraries implicitly reference APNs APIs; use nm or otool to inspect symbol references in binaries</li></ol><hr><h2 class="anchor anchorWithStickyNavbar_p97g" id="vi-itms-errors-signing-and-provisioning-profile-issues">VI. ITMS Errors: Signing and Provisioning Profile Issues<a href="#vi-itms-errors-signing-and-provisioning-profile-issues" class="hash-link" aria-label="Direct link to VI. ITMS Errors: Signing and Provisioning Profile Issues" title="Direct link to VI. ITMS Errors: Signing and Provisioning Profile Issues">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-9000">ITMS-9000<a href="#itms-9000" class="hash-link" aria-label="Direct link to ITMS-9000" title="Direct link to ITMS-9000">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ERROR ITMS-9000: </span><span class="token string" style="color:#e3116c">"The binary you uploaded was invalid."</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong><br>
<!-- -->Provisioning profile expired or was deleted.</p><p><strong>Solution</strong><br>
<!-- -->Regenerate and download provisioning profile; repackage with valid profile.</p><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90165">ITMS-90165<a href="#itms-90165" class="hash-link" aria-label="Direct link to ITMS-90165" title="Direct link to ITMS-90165">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ERROR ITMS-90165: </span><span class="token string" style="color:#e3116c">"Invalid Provisioning Profile Signature. The provisioning profile [...] is not valid"</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong></p><p>Provisioning profile signature is invalid (caused by Apple updating signing mechanism)</p><p><strong>Solution</strong></p><ol><li>Re-edit and download provisioning profile.</li><li>Delete old files and repackage.</li></ol><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90046">ITMS-90046<a href="#itms-90046" class="hash-link" aria-label="Direct link to ITMS-90046" title="Direct link to ITMS-90046">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ERROR ITMS-90046: </span><span class="token string" style="color:#e3116c">"Invalid Code Signing Entitlements"</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong><br>
<!-- -->Code signing entitlements are invalid—possibly due to provisioning profile issues or non-standard Bundle Identifier naming</p><p><strong>Solution</strong><br>
<!-- -->Check provisioning profile configuration and ensure Bundle Identifier naming meets requirements</p><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90535">ITMS-90535<a href="#itms-90535" class="hash-link" aria-label="Direct link to ITMS-90535" title="Direct link to ITMS-90535">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">Invalid Code Signing Entitlements</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong><br>
<!-- -->Bundle Identifier, version number, or other information in third-party info.plist files is not correctly configured</p><p><strong>Solution</strong><br>
<!-- -->Modify third-party info.plist files and add correct Bundle Identifier, version number, and other information</p><hr><h2 class="anchor anchorWithStickyNavbar_p97g" id="vii-itms-errors-ui-and-icon-issues">VII. ITMS Errors: UI and Icon Issues<a href="#vii-itms-errors-ui-and-icon-issues" class="hash-link" aria-label="Direct link to VII. ITMS Errors: UI and Icon Issues" title="Direct link to VII. ITMS Errors: UI and Icon Issues">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90809">ITMS-90809<a href="#itms-90809" class="hash-link" aria-label="Direct link to ITMS-90809" title="Direct link to ITMS-90809">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ERROR ITMS-90809: </span><span class="token string" style="color:#e3116c">"Deprecated API Usage. UIWebView is no longer accepted."</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Solution</strong><br>
<!-- -->Replace <code>UIWebView</code> with <code>WKWebView</code> and recompile.</p><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90022-itms-90025">ITMS-90022, ITMS-90025<a href="#itms-90022-itms-90025" class="hash-link" aria-label="Direct link to ITMS-90022, ITMS-90025" title="Direct link to ITMS-90022, ITMS-90025">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># ITMS-90022</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Missing required icon file. The bundle does not contain an app icon </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> iPhone / iPod Touch of exactly </span><span class="token string" style="color:#e3116c">'57x57'</span><span class="token plain"> pixels, in.png </span><span class="token function" style="color:#d73a49">format</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> iOS versions </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7.0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># ITMS-90025</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Missing recommended icon file. The bundle does not contain an app icon </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> iPhone / iPod Touch of exactly </span><span class="token string" style="color:#e3116c">'120x120'</span><span class="token plain"> pixels, in.png </span><span class="token function" style="color:#d73a49">format</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> iOS versions </span><span class="token operator" style="color:#393A34">&gt;=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7.0</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Solution</strong><br>
<!-- -->Add icons of corresponding sizes in AppIcon.appiconset in images.xcassets and configure in Contents.json</p><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90705">ITMS-90705<a href="#itms-90705" class="hash-link" aria-label="Direct link to ITMS-90705" title="Direct link to ITMS-90705">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">Launch storyboard not found. Make sure you specify the launch storyboard filename without a filename extension </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> the key UILaunchStoryboardName </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> the Info.plist</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong></p><p>Launch storyboard not found; UILaunchStoryboardName value in Info.plist is incorrect</p><p><strong>Solution</strong><br>
<!-- -->Check UILaunchStoryboardName value in Info.plist and ensure it matches the launch storyboard filename without extension</p><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90096">ITMS-90096<a href="#itms-90096" class="hash-link" aria-label="Direct link to ITMS-90096" title="Direct link to ITMS-90096">​</a></h3><p><strong>Original Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">Missing recommended icon file. The bundle does not contain an app icon </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> iPhone / iPod Touch of exactly </span><span class="token string" style="color:#e3116c">'57x57'</span><span class="token plain"> pixels, in.png </span><span class="token function" style="color:#d73a49">format</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> iOS versions </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7.0</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong></p><p>App is missing LaunchImage or LaunchImage configuration has issues</p><p><strong>Solution</strong><br>
<!-- -->Add launch images of corresponding sizes to project root and modify info.plist, or check whether LaunchScreen.storyboard exists</p><hr><h2 class="anchor anchorWithStickyNavbar_p97g" id="viii-itms-errors-other-common-issues">VIII. ITMS Errors: Other Common Issues<a href="#viii-itms-errors-other-common-issues" class="hash-link" aria-label="Direct link to VIII. ITMS Errors: Other Common Issues" title="Direct link to VIII. ITMS Errors: Other Common Issues">​</a></h2><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90474--itms-90475">ITMS-90474 / ITMS-90475<a href="#itms-90474--itms-90475" class="hash-link" aria-label="Direct link to ITMS-90474 / ITMS-90475" title="Direct link to ITMS-90474 / ITMS-90475">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ERROR ITMS-90474: </span><span class="token string" style="color:#e3116c">"Invalid Bundle. iPad Multitasking support requires these orientations: 'UIInterfaceOrientationPortrait,UIInterfaceOrientationPortraitUpsideDown,UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight'. Found 'UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight' in bundle '...'."</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ERROR ITMS-90475: </span><span class="token string" style="color:#e3116c">"Invalid Bundle. iPad Multitasking support requires launch story board in bundle '..."</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong>
iPad split-screen adaptation requires full-screen declaration</p><p><strong>Solution</strong><br>
<!-- -->Add to <code>Info.plist</code>:</p><p><code>&lt;key&gt;UIRequiresFullScreen&lt;/key&gt; &lt;true/&gt;</code></p><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90529">ITMS-90529<a href="#itms-90529" class="hash-link" aria-label="Direct link to ITMS-90529" title="Direct link to ITMS-90529">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ERROR ITMS-90529: </span><span class="token string" style="color:#e3116c">"IInvalid package. Applications built with sdk 9.0 or later must be packaged as proper IPA files"</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong></p><p>Incorrect packaging method; not using .ipa file format</p><p><strong>Solution</strong><br>
<!-- -->Place compiled <code>.app</code> in <code>Payload</code> folder and compress as <code>.ipa</code> file.</p><hr><h3 class="anchor anchorWithStickyNavbar_p97g" id="itms-90983">ITMS-90983<a href="#itms-90983" class="hash-link" aria-label="Direct link to ITMS-90983" title="Direct link to ITMS-90983">​</a></h3><p><strong>Error Message</strong></p><div class="language-bash codeBlockContainer__Zh2 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_sKOG"><pre tabindex="0" class="prism-code language-bash codeBlock_fad9 thin-scrollbar"><code class="codeBlockLines_Ap1z"><span class="token-line" style="color:#393A34"><span class="token plain">ERROR ITMS-90983: </span><span class="token string" style="color:#e3116c">"Missing purpose string in Info.plist for media classification."</span><br></span></code></pre><div class="buttonGroup_SbU_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hjh5" aria-hidden="true"><svg class="copyButtonIcon_Q_XC" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_rIkS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Cause</strong></p><p>iOS 16 and above require purpose strings for media classification in Info.plist</p><p><strong>Solution</strong><br>
<!-- -->Add media classification descriptions in <code>Info.plist</code>:</p><ul><li><code>NSMediaLibraryUsageDescription</code></li><li><code>NSAppleMusicUsageDescription</code></li></ul><hr>]]></content>
        <category label="appstore" term="appstore"/>
        <category label="iOS Development" term="iOS Development"/>
        <category label="App Review" term="App Review"/>
        <category label="Xcode" term="Xcode"/>
        <category label="App Publishing" term="App Publishing"/>
    </entry>
</feed>