<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="https://www.w3.org/2005/Atom">
<link rel="hub" href="https://pubsubhubbub.appspot.com" />

  <title type="text" xml:lang="en"></title>
    <link type="application/atom+xml" href="https://www.70apps.com/atom.xml" rel="self"/>
    <link href="https://www.70apps.com/"/>
  <updated>2026-04-03T20:16:00Z</updated>
  <id>https://www.70apps.com/</id>
  <author>
    <name></name>
    <email></email>
  </author>
  <rights type="text">Copyright © 2026 . All rights reserved.</rights>
  
  <entry>
    <title>手机动态壁纸常用AI提示词</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/ai/2026/02/20/live-wallpaper-ai-prompt.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=手机动态壁纸常用AI提示词" />
    <published>2026-02-20T00:00:00Z</published>
    <updated>2026-02-20T00:00:00+08:00</updated>
    <id>https://www.70apps.com/ai/2026/02/20/live-wallpaper-ai-prompt</id>
    <content type="html"><![CDATA[ <h1 id="生成静态图片">生成静态图片</h1>

<h2 id="撕漫感真人化提示词">撕漫感真人化提示词</h2>

<p>需要上传垫图</p>

<blockquote>
  <p>Hyper-realistic cinematic mobile photography, “tear-manga” aesthetic, East Asian model restores anime character’s iconic hairstyle/expression, NO bokeh, f/16 ultra-deep depth of field, sharp details from subject’s face to background, dramatic warm-cold light collision (tungsten lamp/warm sunset vs blue hour/neon cold light), 4K physical texture (skin pores, fabric fibers, background wear marks), lifelike daily scene, documentary snapshot style, 9:16 ratio, no cosplay feel, ultra-clear HD</p>
</blockquote>

<h2 id="真人转夸张漫画感提示词">真人转夸张漫画感提示词</h2>

<p>需要上传垫图</p>

<blockquote>
  <p>Generate a high-end 3D character portrait without changing facial features featuring stylized, intentional exaggerations.
Base the character strictly on the ATTACHED REFERENCE PHOTO, keeping the identity and key features recognizable but morphing them into a caricature aesthetic. Key deformations should include normal neck, a large head relative to the body, heavy lips, and a relaxed, sleepy eyelid look.￼
The skin texture must be flawless and smooth, resembling a premium vinyl toy or digital art collectible, without any noise, grain, or realistic skin pores.
Outfit the character in luxury streetwear with bold accessories: large hoop earrings, thick gold chains, and headwear like bandanas (ensure NO GLASSES are present). Lighting should be soft, neutral studio illumination with no harsh shadows, set against a clean grey or off-white background.￼
The vibe is eccentric, edgy, and high-fashion, avoiding a “cute” or generic cartoon look. 4k resolution, cinematic render quality, ultra-clean finish. Aspect ratio 9:16.￼</p>
</blockquote>

<h1 id="生成动态视频">生成动态视频</h1>

<h2 id="固定镜头基础款">固定镜头基础款</h2>

<blockquote>
  <p>固定镜头，慢动作，请为人物注入轻微的呼吸感或生命感，例如发丝、衣角微风拂动，眼神或姿态的细微变化。</p>
</blockquote>

<blockquote>
  <p>固定镜头，静止镜头，根据画面生成精美的酷炫风格动态壁纸，炫酷的魔法氛围特效，人物表情自然生动，不添加画面没有的元素，呈现头发飘动和眼睛眨眼效果和背景的炫酷特效，同时确保人物角色特征和风格保持不变。</p>
</blockquote>

<blockquote>
  <p>固定镜头，静止镜头，根据画面生成精美的酷炫风格动态壁纸，慢动作，人物表情自然生动，不添加画面没有的元素，狐狸和兔子可爱地左看右看，小女孩开心地微笑保持姿势不变，重点呈现头发飘动和眼睛眨眼效果，同时确保人物角色姿势和视角保持基本不变。</p>
</blockquote>

<blockquote>
  <p>固定镜头，静止镜头，根据画面生成精美的酷炫风格动态壁纸，动漫人物双手执刀高高举起，然后从中间劈下，带出炫酷的雷电系魔法氛围特效，将画面中部的电影票根劈开，票根边缘灼烧雷电效果后消散，人物表情自然生动，不添加画面没有的元素，呈现头发飘动和眼睛眨眼效果，同时确保人物角色特征和风格保持不变。</p>
</blockquote>

<blockquote>
  <p>固定镜头，静止镜头，根据画面生成精美的酷炫风格动态壁纸，慢动作，人物表情自然生动，不添加画面没有的元素，重点呈现头发飘动和眼睛眨眼效果，背景实现类似时空隧道动效，确保下部空白区域绝对静止，同时确保人物角色姿势和视角保持基本不变。</p>
</blockquote>

<blockquote>
  <p>固定镜头，慢动作，游戏启动界面，角色人物微动画，循环视频，保持角色人物面部细节、身体姿势、衣服配饰一致性，整体画面细腻流畅，为人物注入自然真实的呼吸感与生命感：胸腔伴随极轻微呼吸缓慢起伏，眼神柔和微动，面部神态松弛自然，肢体姿态带有细微生活化动态，无僵硬感。</p>
</blockquote>

<h2 id="全自动化">全自动化</h2>

<blockquote>
  <p>请将这张静态照片转化为一段生动、自然的动态视频。核心要求是高度保持原图的人物、场景、风格与氛围。
请根据图像内容智能选择最合适的动态效果：
如果主体是人物或动物，请为其注入轻微的呼吸感或生命感，例如发丝、衣角微风拂动，眼神或姿态的细微变化。
如果主体是风景或建筑，请让画面中的自然元素流动起来，例如云层飘移、水面波光、树叶摇曳。
如果主体是静物或特写，请营造精致的光影流动或镜头缓慢的探索运动</p>
</blockquote>
 ]]></content>
  </entry>
  
  <entry>
    <title>二次元转三次元（撕漫感 · 全焦段纪实摄影师)</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/ai/2026/01/20/Hyper-Realist-Mobile-Cinematographer-ai-gem.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=二次元转三次元（撕漫感·全焦段纪实摄影师)" />
    <published>2026-01-20T00:00:00Z</published>
    <updated>2026-01-20T00:00:00+08:00</updated>
    <id>https://www.70apps.com/ai/2026/01/20/Hyper-Realist-Mobile-Cinematographer-ai-gem</id>
    <content type="html"><![CDATA[ <h1 id="二次元转三次元gem风格指令-v20">二次元转三次元Gem风格指令 v2.0</h1>

<p>整理了一份“撕漫感”真人化摄影提示词，这是完整的Gem风格指令，你可以直接复制使用。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># Role: Hyper-Realist Mobile Cinematographer (撕漫感 · 全焦段纪实摄影师) v2.0

## Core Directive (最高指令)
你现在的身份不是文字助理，而是一台顶级人工智能摄影机。
你的唯一任务是接收用户的描述或参考图，并在后台默默运用以下所有摄影哲学和美学标准进行构思，然后直接调用绘图功能生成最终照片。严禁输出任何文字、思考过程或Prompt代码。你的输出只能是一张符合要求的照片。

## Profile &amp; Philosophy
- **Style**: Cinematic Mobile Photography, Hyper-Realism, "Tear-Manga" Aesthetic (撕漫感)
- **Motto**: Clarity is King. Reject bokeh. Embrace contrast.
- **Output Requirement**: ONLY IMAGES. NO TEXT.

## 核心美学标准 (Aesthetic Standards)
1.  **角色重塑：1:1 撕漫感**
    - 目标：让二次元角色以最真实且不违和的方式出现在三次元世界。
    - 执行：模特必须是精致立体的东亚面孔，足以驾驭夸张的发色或造型而不显突兀。严格还原角色的标志性表情、发型细节和面部特征。要像“真人在街拍”，而不是“漫展Cosplay”。

2.  **摄影光学：全焦段极度深景深**
    - 铁律：拒绝任何背景虚化（NO Bokeh）。
    - 执行：模拟 f/16 极小光圈。从模特鼻尖到最远处的背景建筑，所有元素必须如刀锋般锐利清晰。营造一种信息量爆炸的“手机主摄级”纪实感。

3.  **光影美学：戏剧性冷暖对撞**
    - 执行：必须在画面中构建强烈的双色温冲突：
      - 暖光源：室内钨丝灯、路灯、金色夕阳。
      - 冷光源：蓝调时刻天光（Blue Hour）、阴冷的霓虹灯。
    - 让冷暖光在人物面部和环境中交织，形成电影级的叙事张力。

4.  **材质与环境**
    - 执行：强调4K级的物理质感。皮肤的纹理、衣服的织物纤维、背景物体的磨损痕迹必须真实可触。环境必须是充满生活气息的复杂场景，绝非简单布景。

## 内在构思框架 (Internal Processing Protocol)
当用户输入指令后，请立即在后台按此框架构建画面：
1.  **锁定主体**：确定角色的东亚真人形象，提取其核心“撕漫”特征（发型、瞳色、标志性神态）。
2.  **严格保持环境**：确定人物场景和用户上传图像完全一致。
3.  **布置光线**：确定画面中的冷光源和暖光源分别从哪里射入，如何在人物脸上形成硬朗的对撞。
4.  **设定机位**：模拟旗舰手机主摄视角，采用纪实抓拍构图。
5.  **执行绘图**：调用绘图工具，应用负面提示词（拒绝虚化、拒绝影楼风、拒绝塑料感），生成最终图像。

## 交互示例
**User**: [上传一张《EVA》明日香穿着便服在房间里的图，要求还原]
**You**: [直接输出生成的高清图片，画幅比例默认 9:16]
</code></pre></div></div>

<hr />

<h2 id="精简版">精简版</h2>

<p>这里是适配AI绘画工具的<strong>精简版撕漫感真人化提示词</strong>，保留核心美学要求，可直接复制使用：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hyper-realistic cinematic mobile photography, "tear-manga" aesthetic, East Asian model restores anime character's iconic hairstyle/expression, NO bokeh, f/16 ultra-deep depth of field, sharp details from subject's face to background, dramatic warm-cold light collision (tungsten lamp/warm sunset vs blue hour/neon cold light), 4K physical texture (skin pores, fabric fibers, background wear marks), lifelike daily scene, documentary snapshot style, 9:16 ratio, no cosplay feel, ultra-clear HD
</code></pre></div></div>

<hr />

<h2 id="定制专属版本">定制专属版本</h2>

<p>整理好了10个《火影忍者》人气角色的专属撕漫感真人化提示词，每个都包含了角色的标志性特征和适配的场景，你可以直接复制使用。</p>

<h3 id="1-漩涡鸣人">1. 漩涡鸣人</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hyper-realistic cinematic mobile photography, "tear-manga" aesthetic, East Asian male model, spiky blond hair, bright blue eyes, distinct cheek whisker marks, wearing Konoha forehead protector and orange ninja jumpsuit, NO bokeh, f/16 ultra-deep depth of field, dramatic warm-cold light collision (tungsten lamp vs blue hour sky), 4K physical texture (fabric fibers, headband metal luster, skin pores), background: Konoha village street at dusk, documentary snapshot style, 9:16 ratio, no cosplay feel, ultra-clear HD
</code></pre></div></div>

<h3 id="2-宇智波佐助">2. 宇智波佐助</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hyper-realistic cinematic mobile photography, "tear-manga" aesthetic, East Asian male model, sleek black Uchiha clan hair, Sharingan eyes, wearing Konoha forehead protector and black ninja uniform, NO bokeh, f/16 ultra-deep depth of field, dramatic warm-cold light collision (neon sign vs warm sunset), 4K physical texture (fabric folds, headband scratch marks, skin pores), background: Konoha rooftop at sunset, documentary snapshot style, 9:16 ratio, no cosplay feel, ultra-clear HD
</code></pre></div></div>

<h3 id="3-春野樱">3. 春野樱</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hyper-realistic cinematic mobile photography, "tear-manga" aesthetic, East Asian female model, short pink hair, Konoha forehead protector, medical ninjutsu pouch, wearing pink ninja outfit, NO bokeh, f/16 ultra-deep depth of field, dramatic warm-cold light collision (hospital lamp vs blue hour window light), 4K physical texture (fabric fibers, pouch strap details, skin pores), background: Konoha hospital ward, documentary snapshot style, 9:16 ratio, no cosplay feel, ultra-clear HD
</code></pre></div></div>

<h3 id="4-旗木卡卡西">4. 旗木卡卡西</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hyper-realistic cinematic mobile photography, "tear-manga" aesthetic, East Asian male model, silver spiky hair, face covered by black mask, Konoha forehead protector, wearing flak jacket and black undershirt, NO bokeh, f/16 ultra-deep depth of field, dramatic warm-cold light collision (library lamp vs blue hour rain outside), 4K physical texture (mask fabric, flak jacket stitching, skin pores on exposed neck), background: Konoha library reading nook, documentary snapshot style, 9:16 ratio, no cosplay feel, ultra-clear HD
</code></pre></div></div>

<h3 id="5-我爱罗">5. 我爱罗</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hyper-realistic cinematic mobile photography, "tear-manga" aesthetic, East Asian male model, short red hair, distinctive black eye markings, Sunagakure forehead protector, wearing black and tan ninja cloak, NO bokeh, f/16 ultra-deep depth of field, dramatic warm-cold light collision (desert campfire vs blue hour night sky), 4K physical texture (cloak fabric, sand grain details on clothes, skin pores), background: Wind Country desert camp, documentary snapshot style, 9:16 ratio, no cosplay feel, ultra-clear HD
</code></pre></div></div>

<h3 id="6-宇智波鼬">6. 宇智波鼬</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hyper-realistic cinematic mobile photography, "tear-manga" aesthetic, East Asian male model, sleek black Uchiha hair, Sharingan eyes, wearing Akatsuki black cloak with red clouds, NO bokeh, f/16 ultra-deep depth of field, dramatic warm-cold light collision (street lamp vs neon sign), 4K physical texture (cloak fabric, red cloud embroidery, skin pores), background: rainy urban alley, documentary snapshot style, 9:16 ratio, no cosplay feel, ultra-clear HD
</code></pre></div></div>

<h3 id="7-波风水门">7. 波风水门</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hyper-realistic cinematic mobile photography, "tear-manga" aesthetic, East Asian male model, spiky yellow hair, Hokage cloak with red flames, Konoha forehead protector, wearing black ninja outfit, NO bokeh, f/16 ultra-deep depth of field, dramatic warm-cold light collision (Hokage office lamp vs blue hour window), 4K physical texture (cloak fabric, flame embroidery, skin pores), background: Hokage office desk, documentary snapshot style, 9:16 ratio, no cosplay feel, ultra-clear HD
</code></pre></div></div>

<h3 id="8-纲手">8. 纲手</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hyper-realistic cinematic mobile photography, "tear-manga" aesthetic, East Asian female model, blonde hair in a ponytail, Hokage forehead protector, wearing red kimono and white haori, NO bokeh, f/16 ultra-deep depth of field, dramatic warm-cold light collision (tavern lamp vs blue hour street), 4K physical texture (kimono silk, haori fabric, skin pores), background: Konoha tavern booth, documentary snapshot style, 9:16 ratio, no cosplay feel, ultra-clear HD
</code></pre></div></div>

<h3 id="9-自来也">9. 自来也</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hyper-realistic cinematic mobile photography, "tear-manga" aesthetic, East Asian male model, white spiky hair, face markings, wearing white cloak and black outfit, NO bokeh, f/16 ultra-deep depth of field, dramatic warm-cold light collision (inn room lamp vs blue hour ocean view), 4K physical texture (cloak fabric, scroll details, skin pores), background: coastal inn room, documentary snapshot style, 9:16 ratio, no cosplay feel, ultra-clear HD
</code></pre></div></div>

<h3 id="10-日向雏田">10. 日向雏田</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hyper-realistic cinematic mobile photography, "tear-manga" aesthetic, East Asian female model, long dark blue hair, Byakugan eyes, Konoha forehead protector, wearing white and navy ninja outfit, NO bokeh, f/16 ultra-deep depth of field, dramatic warm-cold light collision (training ground lamp vs blue hour dusk), 4K physical texture (fabric fibers, headband details, skin pores), background: Konoha training ground, documentary snapshot style, 9:16 ratio, no cosplay feel, ultra-clear HD
</code></pre></div></div>
 ]]></content>
  </entry>
  
  <entry>
    <title>研究一下用AI开发一个App推广工具</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/ai/2026/01/09/reddit-marketing-ai-tool.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=研究一下用AI开发一个App推广工具" />
    <published>2026-01-09T00:00:00Z</published>
    <updated>2026-01-09T00:00:00+08:00</updated>
    <id>https://www.70apps.com/ai/2026/01/09/reddit-marketing-ai-tool</id>
    <content type="html"><![CDATA[ <h1 id="reddit-的app推广很活跃">Reddit 的App推广很活跃</h1>

<p>这是一个标准的案例</p>

<p>https://www.reddit.com/r/AppGiveaway/s/lfdzhzbcRg</p>

<h2 id="标题">标题</h2>

<p>[iOS][$49.99 → Free Lifetime] GetFreeApp - Discover Free Apps</p>

<h2 id="正文">正文</h2>
<p><img src="../../../../images/2026/74.jpg" alt="appstore" /></p>

<p>Hey everybody 👋</p>

<p>I just released my new app for <a href="http://GetFree.app">GetFree.app</a></p>

<p><strong>App Store Link</strong></p>

<p>👉 <a href="https://apps.apple.com/us/app/getfree-discover-free-apps/id6756911709">https://apps.apple.com/us/app/getfree-discover-free-apps/id6756911709</a></p>

<p>We’re giving lifetime access to everyone who wants it.</p>

<p>Pro users can claim unlimited free apps, no ads, exclusive apps. The app will always have a free tier, pro users just have unlimited access. Since we just launched, we’re giving early users lifetime pro memberships.</p>

<p>To get the code:</p>

<ol>
  <li>Upvote this post</li>
  <li>Comment “i want this” below</li>
  <li>Send me a DM</li>
  <li>I’ll reply with a lifetime redeem code</li>
</ol>

<p>For Developers of apps:</p>

<p>You can submit your app for free on our website <a href="http://GetFree.app">GetFree.app</a> if you have claim codes for your apps! This is the perfect way to get more downloads/reviews for your apps. Please make sure that your claim codes work work submitting. Once we get enough users, we will charge for this.</p>

<p>Full app description:</p>

<p><strong>Get Free App</strong> is the ultimate app discovery platform where you claim free promo codes for premium apps and games. Discover thousands of apps, get exclusive deals, and save money on apps you love.</p>

<p><strong>DISCOVER PREMIUM APPS FOR FREE</strong></p>

<p>From productivity tools to games, photo editors to fitness apps, find premium apps and get them free with exclusive codes.</p>

<p><strong>FRESH DEALS EVERY DAY</strong></p>

<p>New promo codes added daily from top developers and indie creators</p>

<p>Exclusive lifetime deals you will not find anywhere else</p>

<p>Limited time giveaways from verified app developers</p>

<p>Early access to new app launches before anyone else</p>

<p><strong>HOW GET FREE APP WORKS</strong></p>

<p>Browse trending apps or search by category to find apps you love</p>

<p>Look for apps with available promo codes shown on each listing</p>

<p>Tap Claim Code to receive your unique redemption code</p>

<p>Redeem your code in the App Store to unlock the app</p>

<p><strong>Enjoy premium app completely free</strong></p>
 ]]></content>
  </entry>
  
  <entry>
    <title>学习Google AI Edge Gallery ✨</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/ai/2026/01/08/Google-Edge-Gallery-Test.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=学习GoogleAIEdgeGallery✨" />
    <published>2026-01-08T00:00:00Z</published>
    <updated>2026-01-08T00:00:00+08:00</updated>
    <id>https://www.70apps.com/ai/2026/01/08/Google-Edge-Gallery-Test</id>
    <content type="html"><![CDATA[ <h1 id="学习谷歌开源的本地ai项目google-ai-edge-gallery-">学习谷歌开源的本地AI项目Google AI Edge Gallery ✨</h1>

<p>https://github.com/google-ai-edge/gallery</p>

<h2 id="安卓apk">安卓Apk</h2>

<p>可以在这里下载 https://github.com/google-ai-edge/gallery/releases/latest/</p>

<h2 id="苹果设备">苹果设备</h2>

<p>We’re excited to announce that the app is now available for testing on iOS through TestFlight! We invite you to be among the first to try it out and share your feedback.</p>

<p>How to Join:</p>

<p>Follow this public <a href="https://testflight.apple.com/join/nAtSQKTF">invitation link</a> to get access.</p>

<p>Availability: Access is on a first-come, first-served basis. TestFlight currently limits the number of testers to 10,000.</p>

<p>Supported device models: iOS devices with at least 6GB of RAM.</p>

<p>We appreciate your help with this early testing phase. Your feedback is invaluable as we work to improve the app. Once we’ve gathered and addressed all the feedback, we aim to officially launch on the App Store early 2026.</p>

<h1 id="实战体验">实战体验</h1>

<h2 id="提示词">提示词</h2>

<p>分析图片，输出用于AIGC的JSON格式提示词</p>

<h2 id="输出json">输出JSON</h2>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"prompt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"A vibrant, retro-futuristic illustration of an astronaut floating in space, playfully lounging on a swirling, colorful crescent moon. The astronaut is wearing a stylized, cartoonish spacesuit with neon accents. The background is a deep, starry expanse.  Synthwave color palette, bold lines, high contrast.  Art style inspired by 1980s sci-fi posters and vaporwave.  Detailed, dynamic composition, playful and whimsical.  Focus on color and texture."</span><span class="p">,</span><span class="w">
  </span><span class="nl">"negative_prompt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"photorealistic, realistic, dull colors, muted tones, desaturated, monochrome, plain background, blurry, low resolution, human, realistic astronaut"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"style"</span><span class="p">:</span><span class="w"> </span><span class="s2">"cartoon, illustration, synthwave, vaporwave"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"artist_inspiration"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Greg Rutkowski, Syd Mead"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"aspect_ratio"</span><span class="p">:</span><span class="w"> </span><span class="s2">"16:9"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"additional_details"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"lighting"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Neon accents, glowing"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"mood"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Playful, whimsical, dreamy, nostalgic"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"colors"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Neon pink, cyan, purple, orange, teal, white, black"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<h2 id="提示词-1">提示词：</h2>

<p>生成一周手机壁纸自媒体运营计划，包括策划每天两篇图文内容</p>

<h2 id="输出文档">输出文档：</h2>

<p>好的，这里为您准备了一份一周的手机壁纸自媒体运营计划，包含每天两篇图文内容策划方案。这个计划涵盖了不同主题，希望能帮助您吸引更多粉丝并提高互动率。</p>

<p><strong>目标受众：</strong> 追求个性、喜欢新鲜事物、对视觉体验有较高要求的手机用户。</p>

<p><strong>平台：</strong> 主要面向微信朋友圈、微博、小红书、抖音等平台。</p>

<p><strong>主题方向：</strong> （以下建议您可以根据自身擅长和目标受众喜好调整）</p>
<ul>
  <li><strong>简约风：</strong> 留白、几何图案、莫兰迪色系等。</li>
  <li><strong>自然风：</strong> 风景、植物、动物等。</li>
  <li><strong>艺术风：</strong> 插画、抽象艺术、复古风等。</li>
  <li><strong>文字风：</strong> 励志语录、文艺句子、个性标语等。</li>
  <li><strong>潮流风：</strong> 时尚元素、动漫、表情包等。</li>
</ul>

<hr />

<p><strong>周一： 新鲜感与活力</strong></p>

<ul>
  <li><strong>图文1（早晨）：</strong>  <strong>主题：</strong> 阳光活力。 <strong>内容：</strong>  一张阳光照射下的鲜花/植物图片，配文：“开启美好的一天，让阳光洒满你的手机桌面！☀️ 你今天的心情是什么样的呢？快来评论区分享！”  （鼓励互动）
    <ul>
      <li><strong>图片建议：</strong> 清晰、色彩鲜艳的阳光照，构图简洁。</li>
    </ul>
  </li>
  <li><strong>图文2（晚上）：</strong>  <strong>主题：</strong> 周一加油。 <strong>内容：</strong> 一张励志的简约文字壁纸（比如：“今天也要努力呀！” 或 “一切都会好起来的！”），配文：“周一就是要充满力量！💪 今天有什么计划？一起加油！” （提问互动）
    <ul>
      <li><strong>图片建议：</strong> 文字排版简洁美观，配色和谐。</li>
    </ul>
  </li>
</ul>

<p><strong>周二：文艺与治愈</strong></p>

<ul>
  <li><strong>图文1（中午）：</strong> <strong>主题：</strong> 文艺意境。 <strong>内容：</strong> 一张带有朦胧感、意境深远的风景图片（比如雨后的城市、落叶等），配文：“愿你眼里的星星，永远闪亮 ✨  周末愉快！”
    <ul>
      <li><strong>图片建议：</strong> 氛围感强，色彩柔和。</li>
    </ul>
  </li>
  <li><strong>图文2（晚上）：</strong>  <strong>主题：</strong>  温暖治愈。 <strong>内容：</strong> 一张可爱的小动物图片（比如小猫咪、小狗狗），配文：“愿你被世界温柔以待。❤️ 小小暖心时刻。” （引发共鸣）
    <ul>
      <li><strong>图片建议：</strong> 可爱、萌态十足。</li>
    </ul>
  </li>
</ul>

<p><strong>周三：个性与潮流</strong></p>

<ul>
  <li><strong>图文1（上午）：</strong> <strong>主题：</strong> 潮流元素。 <strong>内容：</strong> 一张结合当下流行元素的简约壁纸（比如几何图案+撞色配色），配文：“解锁你的个性！😎 这款壁纸让你与众不同！” （吸引眼球）
    <ul>
      <li><strong>图片建议：</strong> 颜色大胆，图案简洁时尚。</li>
    </ul>
  </li>
  <li><strong>图文2（晚上）：</strong> <strong>主题：</strong> 表情包分享。 <strong>内容：</strong>  几个有趣的表情包配上一段文字，配文：“用表情包表达你的心情！😂 你最喜欢哪个表情包？” （互动性强）
    <ul>
      <li><strong>图片建议：</strong>  选取当下流行的表情包，配文幽默有趣。</li>
    </ul>
  </li>
</ul>

<p><strong>周四：简约与实用</strong></p>

<ul>
  <li><strong>图文1（中午）：</strong>  <strong>主题：</strong> 极简风。 <strong>内容：</strong> 一张纯色背景配上简约线条的壁纸，配文：“简约不等于简单。🖤 干净的桌面，带来舒适的视觉体验。”
    <ul>
      <li><strong>图片建议：</strong> 色彩单一，线条流畅。</li>
    </ul>
  </li>
  <li><strong>图文2（晚上）：</strong>  <strong>主题：</strong> 文字壁纸（实用）。 <strong>内容：</strong> 一张包含实用信息的壁纸（比如日程提醒、待办事项），配文：“告别凌乱，让生活更有条理！📝 今日份的提醒。”
    <ul>
      <li><strong>图片建议：</strong> 文字清晰易读，排版整洁。</li>
    </ul>
  </li>
</ul>

<p><strong>周五：放松与度假</strong></p>

<ul>
  <li><strong>图文1（下午）：</strong> <strong>主题：</strong>  旅行灵感。 <strong>内容：</strong>  一张风景优美的旅行照片（比如海滩、山脉），配文：“周末去哪里度假？✈️ 想象一下阳光、沙滩和大海…”
    <ul>
      <li><strong>图片建议：</strong> 风景开阔，色彩鲜明。</li>
    </ul>
  </li>
  <li><strong>图文2（晚上）：</strong>  <strong>主题：</strong>  放松心情。 <strong>内容：</strong>  一张带有度假氛围的壁纸（比如棕榈树、椰子），配文：“下班后就是要放松！🌴  享受周末的悠闲时光。”
    <ul>
      <li><strong>图片建议：</strong> 营造轻松惬意的氛围。</li>
    </ul>
  </li>
</ul>

<p><strong>周六：艺术与创意</strong></p>

<ul>
  <li><strong>图文1（上午）：</strong> <strong>主题：</strong> 插画艺术。 <strong>内容：</strong>  一张手绘插画风格的壁纸，配文：“用艺术点亮你的手机桌面！🎨 今天你喜欢哪种风格？”
    <ul>
      <li><strong>图片建议：</strong>  插画风格独特，色彩丰富。</li>
    </ul>
  </li>
  <li><strong>图文2（晚上）：</strong>  <strong>主题：</strong>   复古风格。 <strong>内容：</strong> 一张复古风格的壁纸（比如老照片、胶片质感），配文：“怀旧时光，感受复古的魅力。🕰️ 你还记得小时候的快乐吗？”
    <ul>
      <li><strong>图片建议：</strong>  复古质感明显，色彩偏暗淡。</li>
    </ul>
  </li>
</ul>

<p><strong>周日：感恩与祝福</strong></p>

<ul>
  <li><strong>图文1（中午）：</strong> <strong>主题：</strong>感恩的心。 <strong>内容：</strong> 一张充满温暖的图片（比如手牵手的人、温馨的场景），配文：“感谢每一份陪伴，感恩生命中的美好。💖愿你被世界温柔以待。”
    <ul>
      <li><strong>图片建议：</strong> 温馨、感人。</li>
    </ul>
  </li>
  <li><strong>图文2（晚上）：</strong>  <strong>主题：</strong>  周末祝福。 <strong>内容：</strong> 一张简单的祝福语壁纸（比如“祝你周末愉快！”），配文：“愿你度过一个充实而快乐的周末！😊”
    <ul>
      <li><strong>图片建议：</strong> 文字排版简洁美观。</li>
    </ul>
  </li>
</ul>

<hr />

<p><strong>注意事项：</strong></p>

<ul>
  <li><strong>图片来源：</strong> 您可以从免费图库（如Unsplash, Pexels, Pixabay）获取图片，也可以自己创作。</li>
  <li><strong>文案风格：</strong> 文案风格要与目标受众相符，可以幽默、文艺、励志等。</li>
  <li><strong>互动性：</strong> 积极回复评论，鼓励用户参与互动。</li>
  <li><strong>排版：</strong> 注重图片和文字的排版，让内容更美观易读。</li>
  <li><strong>发布时间：</strong>  选择用户活跃的时间段发布，如中午休息时间、晚上等。</li>
  <li><strong>持续性：</strong>  坚持更新，保持一定的频率。</li>
  <li><strong>分析数据：</strong>  定期分析数据，了解哪些内容更受欢迎，并进行调整。</li>
  <li><strong>原创性：</strong>  尽量避免抄袭，创作原创内容。</li>
</ul>

<p>希望这份详细的计划对您有所帮助！您可以根据自身情况灵活调整，并不断尝试新的内容形式。 祝您运营顺利！</p>
 ]]></content>
  </entry>
  
  <entry>
    <title>学习开源项目红墨</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/ai/2025/12/15/RedInk_Prompt.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=学习开源项目红墨" />
    <published>2025-12-15T00:00:00Z</published>
    <updated>2025-12-15T00:00:00+08:00</updated>
    <id>https://www.70apps.com/ai/2025/12/15/RedInk_Prompt</id>
    <content type="html"><![CDATA[ <h1 id="学习开源项目红墨">学习开源项目红墨</h1>

<p>一款基于 Nano Banana Pro 平台打造的小红书图文生成器。项目通过 AI 技术实现一句话生成图文内容，大幅提升创作效率。最新更新优化了 API 配置，支持多种图片返回格式，增强日志报错提示，并推出 Docker 部署版本，便于开发者快速部署。项目利用 Gemini 和 ChatGPT 等先进模型生成高质量图像和文本，作者默子在 Linux.do 社区分享了技术细节，强调其实用性和深度。红墨 RedInk 不仅适用于小红书平台，还可扩展至其他内容创作场景。开源地址已在 GitHub 发布，社区反响积极，已有数百位参与者。该工具为 AI 驱动的内容创作提供了创新解决方案。</p>

<p>https://github.com/HisMax/RedInk/</p>

<h2 id="promptsoutline_prompttxt">prompts/outline_prompt.txt</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>你是一个小红书内容创作专家。用户会给你一个要求以及说明，你需要生成一个适合小红书的图文内容大纲。

用户的要求以及说明：
{topic}

要求：
1. 第一页必须是吸引人的封面/标题页，包含标题和副标题
2. 内容控制在 6-12 页（包括封面）（如果用户特别要求页数，以用户的要求为准，页数可以适当放宽到2-18页的范围）
特别的. 如果用户在要求了某种特定语言风格的喜好，或者是否使用emoji等，则以客户的要求为准
3. 每页内容简洁有力，适合配图展示
4. 使用小红书风格的语言（亲切、有趣、实用）
5. 可以适当使用 emoji 增加趣味性
6. 内容要有实用价值，能解决用户问题或提供有用信息
7. 最后一页可以是总结或行动呼吁

输出格式（严格遵守）：
- 用 &lt;page&gt; 标签分割每一页（重要：这是强制分隔符）
- 每页第一行是页面类型标记：[封面]、[内容]、[总结]
- 后面是该页的具体内容描述
- 内容要具体、详细，方便后续生成图片
- 避免在内容中使用 | 竖线符号（会与 markdown 表格冲突）

## 示例输出：

[封面]
标题：5分钟学会手冲咖啡☕
副标题：新手也能做出咖啡店的味道
背景：温馨的咖啡场景，一个家庭布局的咖啡角

&lt;page&gt;
[内容]
第一步：准备器具

必备工具：
• 手冲壶（细嘴壶）
• 滤杯和滤纸
• 咖啡豆 15g
• 热水 250ml（92-96℃）
• 磨豆机
• 电子秤

配图建议：整齐摆放的咖啡器具

&lt;page&gt;

[内容]
第二步：研磨咖啡豆

研磨粗细度：中细研磨（像细砂糖）
重量：15克
新鲜度：建议现磨现冲

小贴士💡：
咖啡豆最好是烘焙后2周内的
研磨后要在15分钟内冲泡完成

配图建议：研磨咖啡豆的特写

&lt;page&gt;

[内容]
第三步：闷蒸

注水量：30ml（2倍咖啡粉重量）
时间：30秒
手法：从中心向外螺旋注水

关键点⚠️：
让所有咖啡粉都湿润
不要注水太快

配图建议：手冲壶注水的过程

&lt;page&gt;

[内容]
第四步：分段萃取

第二次注水：到120ml，用时1分钟
第三次注水：到250ml，用时1分30秒
总时间：2-2.5分钟

配图建议：完整的冲泡过程

&lt;page&gt;

[总结]
完成！享受你的手冲咖啡✨

记住三个关键：
✅ 水温 92-96℃
✅ 粉水比 1:15
✅ 总时间 2-2.5分钟

新手提示：
前几次可能不完美
多练习就会越来越好
享受过程最重要！

配图建议：一杯完成的手冲咖啡，温暖的场景

### 最后
现在，请根据用户的主题生成大纲。记住：
1. 严格使用 &lt;page&gt; 标签分割每一页
2. 每页开头标注类型：[封面]、[内容]、[总结]
3. 内容要详细、具体、专业、有价值。
4. 适合制作成小红书图文
5. 避免使用竖线符号 | （会与 markdown 表格冲突）

【特别的！！注意】直接给出大纲内容（不要有任何多余的说明，也就是你直接从[封面]开始，不要有针对用户的回应对话），请输出：
</code></pre></div></div>

<h2 id="宝玉老师加强版">宝玉老师加强版</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>--- 提示词 ---

# 角色定义
你是一位专业的小红书视觉内容策划师，擅长将复杂内容拆解为吸引眼球的卡通风格系列信息图。

# 任务
请分析以下输入内容，将其拆解为 1-10 张小红书风格的系列信息图，并为每张图片输出独立的生成提示词。

# 拆解原则
1. **封面图（第1张）**：必须有强烈视觉冲击力，包含核心标题和吸引点
2. **内容图（中间）**：每张聚焦1个核心观点，信息密度适中
3. **结尾图（最后1张）**：总结/行动号召/金句收尾

# 图片数量判断标准
- 简单观点/单一主题：2-3 张
- 中等复杂度/教程类：4-6 张
- 深度干货/多维度分析：7-10 张

# 视觉风格规范（重要）
## 基础设定
- **图片类型**：信息图（Infographic）
- **方向比例**：竖版，3:4 或 9:16
- **整体风格**：卡通风格、手绘风格

## 背景与配色
- 背景色：莫兰迪色系 / 奶油色 / 米白色 / 浅粉 / 薄荷绿等温柔色调
- 配色柔和统一，符合小红书审美

## 文字风格
- **必须使用手绘风格文字**
- 大标题突出醒目，重点文字加粗放大
- 可使用荧光笔划线效果强调关键词
- 禁止使用写实风格字体

## 装饰元素
- 加入少量简洁的**卡通元素、图标或名人画像**，增强趣味性和视觉记忆
- 可使用：emoji 风格图标、手绘贴纸、便签纸质感、对话气泡等
- 如涉及敏感人物或版权内容，画一个风格相似的卡通替代形象，不要拒绝生成
- **所有图像元素必须是手绘/卡通风格，禁止写实风格图画**

## 排版原则
- 信息精简，突出关键词与核心概念
- 多留白，易于一眼抓住重点
- 要点分条呈现，层次清晰

# 输出格式
对于每张图片，请按以下结构输出：

---
### 第 X 张 / 共 N 张
**图片定位**：[封面图 / 内容图 / 结尾图]
**核心信息**：[这张图要传达的1句话核心]

**文字内容**：
- 主标题：xxx
- 副标题/要点：xxx
- 补充说明（如有）：xxx

**视觉提示词**：


小红书风格信息图，竖版（3:4），卡通风格，手绘风格文字，[具体背景色]背景。

[具体内容布局描述]

加入简洁的卡通元素和图标增强趣味性和视觉记忆：[具体元素描述]

整体风格：手绘、可爱、清新，信息精简，多留白，重点突出。所有图像和文字均为手绘风格，无写实元素。
右下角水印：“宝玉”

---

# 语言规则
- 除非特别要求，输出语言与输入内容语言保持一致
- 中文内容使用全角标点符号（“”，。！）
</code></pre></div></div>
 ]]></content>
  </entry>
  
  <entry>
    <title>疯狂动物城2电影合拍留念AI制作提示词</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/ai/2025/11/27/ZOOTOPIA_Moive_Stub_AI_Prompt.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=疯狂动物城2电影合拍留念AI制作提示词" />
    <published>2025-11-27T00:00:00Z</published>
    <updated>2025-11-27T00:00:00+08:00</updated>
    <id>https://www.70apps.com/ai/2025/11/27/ZOOTOPIA_Moive_Stub_AI_Prompt</id>
    <content type="html"><![CDATA[ <h1 id="通过ai软件制作动态票根">通过AI软件制作动态票根</h1>

<h2 id="自制ai票根">自制AI票根</h2>

<p>电影的火爆引发用户在社媒晒AI影院合拍票根的热潮，AI软件的普及让用户在动态票根上找到应用场景。</p>

<p>网上流传的P图提示词，使用下载的主角图片、电影海报，再上传一张自己的自拍照，生成合成图片。</p>

<h2 id="screen">screen</h2>

<p><img src="../../../../images/2025/7101.jpg" alt="应用截图1" />
<img src="../../../../images/2025/7102.jpg" alt="应用截图2" />
<img src="../../../../images/2025/7103.png" alt="应用截图3" />
<img src="../../../../images/2025/7104.jpg" alt="应用截图1" />
<img src="../../../../images/2025/7105.jpg" alt="应用截图2" />
<img src="../../../../images/2025/7106.jpg" alt="应用截图3" /></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>生成图像：
画面是 3:4 的竖版构图，像 iPhone 前置直接拍出的自拍：
图1是真人，中间的真人站得稍微靠前一点，身体轻轻向内收，脸部状态完全保留，眼神笑着看向镜头。
图2的朱迪在左边，灰色的脑袋轻轻蹭着真人的左肩，紫色眼睛亮晶晶直视镜头；
图3的尼克狐狸在右边，脑袋靠在真人右肩，嘴角带着标志性的笑，眼睛也直视镜头。
三人的头部比例都被稍微放大，显得更贴近镜头，视觉冲击力很明显。
身后是坐满观众的电影院，所有观众的背影都虚化，只有前方大银幕清晰亮着 —— 上面正是参考图4 中那张《疯狂动物城 2》的海报，色彩明亮又清晰。
整体光线均匀柔和，没有多余的杂乱元素，卡通角色和真人的光影、色调完全贴合，看起来就像真的一起在影院自拍一样。
</code></pre></div></div>

<h2 id="升级版本">升级版本</h2>

<p>我整理了最新版本的素材，可以生成更适合疯狂动物城2观影氛围的合拍</p>

<h2 id="screenshots">screenshots</h2>

<p><img src="../../../../images/2025/7111.jpg" alt="应用截图1" />
<img src="../../../../images/2025/7112.jpg" alt="应用截图2" />
<img src="../../../../images/2025/7113.jpg" alt="应用截图3" />
<img src="../../../../images/2025/7114.jpg" alt="应用截图4" /></p>

<p>下面是升级版本的Prompt：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>✅ 构图: 3:4竖版比例,模拟iPhone前置镜头拍摄效果
✅ 真人角色: 保持了原图的表情和眼神,身体略微靠前并内收
✅ 朱迪: 灰色脑袋轻轻蹭在真人左肩,紫色眼睛亮晶晶直视镜头
✅ 尼克: 头靠在真人右肩,标志性的笑容,眼睛直视镜头
✅ 头部比例: 三人的头部都放大,更贴近镜头,视觉冲击力强
✅ 背景: 电影院场景,观众背影虚化,前方大银幕清晰显示《疯狂动物城2》海报
✅ 光影: 均匀柔和的光线,卡通角色和真人完美融合,看起来就像真实的影院自拍
</code></pre></div></div>
 ]]></content>
  </entry>
  
  <entry>
    <title>ImageMerge - 极客拼图</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/project/2025/11/26/ImageMerge.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=ImageMerge-极客拼图" />
    <published>2025-11-26T00:00:00Z</published>
    <updated>2025-11-26T00:00:00+08:00</updated>
    <id>https://www.70apps.com/project/2025/11/26/ImageMerge</id>
    <content type="html"><![CDATA[ <h1 id="devshots---极客晒图">DevShots - 极客晒图</h1>
<h1 id="design-document---image-merge">Design Document - Image Merge</h1>

<h2 id="overview">Overview</h2>

<p>Image Merge 是一个纯前端的单页面网页应用，使用 HTML5 Canvas API 实现图片的加载、处理和合并。应用采用原生 JavaScript 开发，无需外部依赖，确保轻量和快速加载。</p>

<p>核心工作流程：</p>
<ol>
  <li>用户通过文件输入上传两张图片</li>
  <li>系统验证图片格式和尺寸匹配</li>
  <li>在 Canvas 上渲染两张图片的合并预览</li>
  <li>用户拖动垂直辅助线调整合并位置</li>
  <li>实时更新预览显示</li>
  <li>用户点击下载按钮导出合并后的图片</li>
</ol>

<h2 id="architecture">Architecture</h2>

<p>应用采用模块化的客户端架构：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>┌─────────────────────────────────────┐
│         User Interface              │
│  (Upload, Preview, Controls)        │
└──────────────┬──────────────────────┘
               │
┌──────────────┴──────────────────────┐
│      Event Handlers Layer           │
│  (Upload, Drag, Download, Reset)    │
└──────────────┬──────────────────────┘
               │
┌──────────────┴──────────────────────┐
│     Image Processing Core           │
│  - Image Loader                     │
│  - Dimension Validator              │
│  - Canvas Renderer                  │
│  - Merge Engine                     │
└──────────────┬──────────────────────┘
               │
┌──────────────┴──────────────────────┐
│       Browser APIs                  │
│  (Canvas, File, Blob, Download)     │
└─────────────────────────────────────┘
</code></pre></div></div>

<h3 id="关键设计决策">关键设计决策</h3>

<ol>
  <li><strong>纯客户端处理</strong>: 所有图片处理在浏览器中完成，无需服务器，保护用户隐私</li>
  <li><strong>Canvas 渲染</strong>: 使用 Canvas API 进行高性能的图片合并和渲染</li>
  <li><strong>实时预览</strong>: 拖动辅助线时立即更新预览，提供即时反馈</li>
  <li><strong>响应式设计</strong>: 适配不同屏幕尺寸，但保持图片原始尺寸</li>
</ol>

<h2 id="error-handling">Error Handling</h2>

<h3 id="image-loading-errors">Image Loading Errors</h3>

<ul>
  <li><strong>Invalid file format</strong>: Display error message “请上传有效的图片文件 (PNG, JPEG, GIF, WebP)”</li>
  <li><strong>Image load failure</strong>: Display error message “图片加载失败，请重试”</li>
  <li><strong>File read error</strong>: Display error message “无法读取文件，请检查文件是否损坏”</li>
</ul>

<h3 id="dimension-validation-errors">Dimension Validation Errors</h3>

<ul>
  <li><strong>Dimension mismatch</strong>: Display error message “两张图片的尺寸不匹配。第一张图片: {width1}×{height1}, 第二张图片: {width2}×{height2}”</li>
  <li><strong>Zero dimension</strong>: Display error message “图片尺寸无效”</li>
</ul>

<h3 id="export-errors">Export Errors</h3>

<ul>
  <li><strong>Canvas export failure</strong>: Display error message “导出图片失败，请重试”</li>
  <li><strong>Download trigger failure</strong>: Log error to console and display message “下载失败，请重试”</li>
</ul>

<h3 id="general-error-handling-strategy">General Error Handling Strategy</h3>

<ol>
  <li><strong>Graceful degradation</strong>: 错误不应导致应用崩溃</li>
  <li><strong>User-friendly messages</strong>: 所有错误消息使用中文，清晰描述问题</li>
  <li><strong>Error recovery</strong>: 提供重置按钮让用户可以从错误状态恢复</li>
  <li><strong>Console logging</strong>: 所有错误同时记录到控制台便于调试</li>
</ol>

<h2 id="testing-strategy">Testing Strategy</h2>

<h3 id="unit-testing">Unit Testing</h3>

<p>使用 Vitest 作为测试框架，针对核心功能模块编写单元测试：</p>

<p><strong>ImageLoader 测试</strong>:</p>
<ul>
  <li>测试有效图片格式的识别</li>
  <li>测试无效格式的拒绝</li>
  <li>测试图片加载成功和失败场景</li>
</ul>

<p><strong>DimensionValidator 测试</strong>:</p>
<ul>
  <li>测试相同尺寸图片的验证</li>
  <li>测试不同尺寸图片的拒绝</li>
  <li>测试边界情况（零尺寸、极大尺寸）</li>
</ul>

<p><strong>MergeEngine 测试</strong>:</p>
<ul>
  <li>测试基本的图片合并功能</li>
  <li>测试不同分割位置的合并结果</li>
  <li>测试边界位置（0, 0.5, 1）</li>
</ul>

<p><strong>MergeLineController 测试</strong>:</p>
<ul>
  <li>测试拖动事件处理</li>
  <li>测试位置约束逻辑</li>
  <li>测试位置更新回调</li>
</ul>

<p><strong>ImageExporter 测试</strong>:</p>
<ul>
  <li>测试 Canvas 到 Blob 的转换</li>
  <li>测试文件名生成</li>
  <li>测试下载触发机制</li>
</ul>

<h3 id="property-based-testing">Property-Based Testing</h3>

<p>使用 fast-check 库进行基于属性的测试，验证系统在各种随机输入下的正确性：</p>

<p><strong>配置要求</strong>:</p>
<ul>
  <li>每个属性测试至少运行 100 次迭代</li>
  <li>每个测试必须使用注释标记对应的设计文档中的正确性属性</li>
  <li>标记格式: <code class="language-plaintext highlighter-rouge">// Feature: image-merge, Property {number}: {property_text}</code></li>
</ul>

<p><strong>测试生成器</strong>:</p>
<ul>
  <li><code class="language-plaintext highlighter-rouge">arbitraryImageDimensions()</code>: 生成随机但合理的图片尺寸 (10-4000 像素)</li>
  <li><code class="language-plaintext highlighter-rouge">arbitrarySplitPosition()</code>: 生成 0-1 之间的随机分割位置</li>
  <li><code class="language-plaintext highlighter-rouge">arbitraryImageFormat()</code>: 生成随机的图片格式字符串</li>
  <li><code class="language-plaintext highlighter-rouge">arbitraryCoordinate()</code>: 生成随机坐标（包括越界值）</li>
</ul>

<p><strong>属性测试覆盖</strong>:</p>
<ul>
  <li>格式验证属性（Property 1）</li>
  <li>尺寸匹配属性（Property 2）</li>
  <li>边界约束属性（Property 4）</li>
  <li>分割正确性属性（Property 5）</li>
  <li>尺寸保持属性（Property 8）</li>
  <li>格式一致性属性（Property 9）</li>
  <li>状态重置属性（Property 11）</li>
</ul>

<h3 id="integration-testing">Integration Testing</h3>

<p>测试组件间的集成：</p>
<ul>
  <li>完整的上传-合并-下载流程</li>
  <li>UI 控制器与核心引擎的交互</li>
  <li>错误处理流程的端到端测试</li>
</ul>

<h3 id="manual-testing-checklist">Manual Testing Checklist</h3>

<p>需要手动验证的 UI/UX 方面：</p>
<ul>
  <li>界面布局和视觉设计（Requirements 6.1-6.4）</li>
  <li>拖动交互的流畅性</li>
  <li>不同浏览器的兼容性</li>
  <li>不同屏幕尺寸的响应式表现</li>
  <li>大尺寸图片的性能表现</li>
</ul>

<h2 id="implementation-notes">Implementation Notes</h2>

<h3 id="browser-compatibility">Browser Compatibility</h3>

<p>目标浏览器：</p>
<ul>
  <li>Chrome/Edge 90+</li>
  <li>Firefox 88+</li>
  <li>Safari 14+</li>
</ul>

<p>关键 API 支持：</p>
<ul>
  <li>Canvas API (广泛支持)</li>
  <li>File API (广泛支持)</li>
  <li>Blob API (广泛支持)</li>
  <li>Drag events (广泛支持)</li>
</ul>

<h3 id="performance-considerations">Performance Considerations</h3>

<ol>
  <li><strong>大图片处理</strong>: 对于超过 4000×4000 像素的图片，考虑显示警告</li>
  <li><strong>Canvas 渲染优化</strong>: 使用 <code class="language-plaintext highlighter-rouge">requestAnimationFrame</code> 进行拖动时的重绘</li>
  <li><strong>内存管理</strong>: 在重置或加载新图片时，清理旧的图片对象引用</li>
  <li><strong>防抖处理</strong>: 拖动事件可能需要节流以提高性能</li>
</ol>

<h3 id="accessibility">Accessibility</h3>

<p>虽然这是一个视觉为主的应用，仍需考虑：</p>
<ul>
  <li>为所有按钮提供清晰的文本标签</li>
  <li>使用 <code class="language-plaintext highlighter-rouge">aria-label</code> 为图片上传区域提供描述</li>
  <li>确保键盘可以访问所有交互元素</li>
  <li>为错误消息使用适当的 ARIA 角色</li>
</ul>

<h3 id="future-enhancements">Future Enhancements</h3>

<p>可能的功能扩展：</p>
<ul>
  <li>支持水平方向的合并线</li>
  <li>支持多种合并模式（渐变过渡、羽化边缘）</li>
  <li>支持调整输出图片质量</li>
  <li>支持批量处理多对图片</li>
  <li>添加撤销/重做功能</li>
  <li>保存和加载合并配置</li>
</ul>

<h2 id="马上使用">马上使用</h2>

<ul>
  <li><a href="https://70apps.com/imagemerge/">马上访问 ImageMerge</a></li>
</ul>

<h1 id="全部项目">全部项目</h1>

<ul>
  <li><a href="/blog/project/2024/10/01/DevShots.html"><img src="/blog/images/project/devshots.png" alt="appicon" /></a><br />
DevShots</li>
</ul>

 ]]></content>
  </entry>
  
  <entry>
    <title>鬼灭之刃电影动态票根AI制作提示词</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/ai/2025/11/14/Live_Demon_Slayer_Movie_Stub_AI_Prompt.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=鬼灭之刃电影动态票根AI制作提示词" />
    <published>2025-11-14T00:00:00Z</published>
    <updated>2025-11-14T00:00:00+08:00</updated>
    <id>https://www.70apps.com/ai/2025/11/14/Live_Demon_Slayer_Movie_Stub_AI_Prompt</id>
    <content type="html"><![CDATA[ <h1 id="通过ai软件制作动态票根">通过AI软件制作动态票根</h1>

<h2 id="自制ai票根">自制AI票根</h2>

<p>电影的火爆引发用户在社媒晒票根的热潮，AI软件的普及让用户在动态票根上找到应用场景。</p>

<p>网上流传的P图提示词，使用下载的票根底图（上面是人物，下面留白）和票务App上的票根截图，生成合成图片。</p>

<blockquote>
  <p>1.角色部分：图一的角色整体动作姿势不变，只露出上半身（从胸口以上），原本的手指自然弯曲，指尖刚好轻搭在电影票的顶部边框上，手指的位置大约覆盖电影票标题“鬼灭之刃：无限城篇〞的上方区域，既不会遮挡电影票的文字，又能体现互动感。</p>

  <p>2.电影票部分：完整嵌入图一的下方空白处，电影票的背景色（棕+白）和图一的白底适
配，票面上的“IMAX2D”座位号“等信息都清晰显示，右侧的电影海报小图也会对齐在票面右侧。
不要有过大面积留白，比例3:4</p>
</blockquote>

<h2 id="升级动态票根">升级动态票根</h2>

<p>旋即静态图片已经不能满足大家的需求，AI生成视频给了大家实验动态票根的机会，这是我的提示词：</p>

<blockquote>
  <p>固定镜头，静止镜头，根据画面生成精美的酷炫风格动态壁纸，慢动作，人物表情自然生动，不添加画面没有的元素，重点呈现头发飘动和眼睛眨眼效果，前升的手掌缓缓抓捏的动作，同时确保人物角色姿势和视角保持基本不变。</p>
</blockquote>

<p>根据指定人物的招术特征，补充特定的特效提示，可以尝试更高级的效果</p>

<blockquote>

  <p>帮我生成视频：固定镜头，静止镜头，根据画面生成精美的酷炫风格动态壁纸，人物表情自然生动，不添加画面没有的元素，重点呈现头发飘动和眼睛眨眼效果，月亮缓缓拉远，人物缓缓拉近，然后作出攻击的动作缓缓靠近镜头，魔法氛围特效，同时确保人物角色面部特征、服饰风格细节、视角保持基本不变。下部75%半透明面板保持位置不变，周围有绚丽的火系魔法特效。</p>
</blockquote>

<p>指定一些动作</p>

<blockquote>
  <p>固定镜头，静止镜头，动漫人物手握一张印有海报的电影票根，根据画面生成精美的酷炫风格动态壁纸，人物表情自然生动，不添加画面没有的元素，人物用单手揉捏白色纸质门票，最终捏爆门票，有火星纸屑分飞的特效，背景营造魔法光线特效</p>
  <h2 id="定制动态票根">定制动态票根</h2>
</blockquote>

<p>通过首尾帧技术，先把开始图和结尾图通过PS编辑调优，可以大大提高视频的指令遵从度。</p>

<p>以下是我常用的一些网站和工具，排名不分先后</p>

<ol>
  <li><a href="https://pai.video/">拍我中文版 pai.video</a></li>
  <li><a href="https://zaodian.quark.cn/r/ai-studio-pc/main/gen-video">夸克造点</a></li>
  <li><a href="https://jimeng.jianying.com/ai-tool/generate?type=video">字节即梦</a></li>
  <li><a href="https://www.doubao.com/">字节豆包</a></li>
  <li><a href="https://app.klingai.com/global/image-to-video/frame-mode/new">可灵</a></li>
</ol>

<h2 id="定制疯狂动物城">定制疯狂动物城</h2>

<h3 id="定制疯狂动物城主角合影">定制疯狂动物城主角合影</h3>

<blockquote>
  <p>不要换脸，人物脸部不能有任何改变！请将图1的小女孩融合到图2中，合成一张三人俯拍自拍照，画面构图紧凑，三位主体靠得很近，头部略微上仰，眼神直视镜头，营造出强烈的视觉冲击力。左侧小女孩站得略靠前，需要保持人脸相似度；需要保持人脸相似度，略微内扣身体，拍摄角度为高角度俯拍，使头部比例被夸张放大，符合典型的日韩视觉自拍风格。简洁干净，进一步凸显人物主体。画面风格偏向日系视觉系，整体画面清晰度高，用iphone前置自拍，最终呈现出精致、要求人物实现无缝融进画面，视觉过渡自然，整体画面光线明亮且均匀，背景为超大电影院坐满了观众，比例 「9:16」</p>
</blockquote>

<h3 id="定制疯狂动物城动态票根">定制疯狂动物城动态票根</h3>

<blockquote>

  <p>固定镜头，静止镜头，根据画面生成精美的可爱治愈风格动态壁纸，人物表情自然生动，不添加画面没有的元素，重点呈现头发、毛发飘动和眼睛眨眼效果，人物先缓缓左右转头，然后用手比yeah，同时确保人物角色面部特征、服饰风格细节、视角保持基本不变。下部白色区域面板保持绝对不变。</p>
</blockquote>
 ]]></content>
  </entry>
  
  <entry>
    <title>iOS26苹果设备iPhone、iPad空间壁纸功能相关问题</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/3c/2025/10/29/Spatial_Scene_wallpaper_iOS26_issues.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=iOS26苹果设备iPhone、iPad空间壁纸功能相关问题" />
    <published>2025-10-29T00:00:00Z</published>
    <updated>2025-10-29T00:00:00+08:00</updated>
    <id>https://www.70apps.com/3c/2025/10/29/Spatial_Scene_wallpaper_iOS26_issues</id>
    <content type="html"><![CDATA[ <h1 id="玩转苹果设备动态壁纸ios-26-空间场景模式全攻略">玩转苹果设备动态壁纸：iOS 26 空间场景模式全攻略</h1>

<p>对于追求个性化手机体验的苹果用户来说，动态壁纸一直是提升设备颜值的重要方式。随着 iOS 26 的发布，Apple 推出了 “空间场景模式” 这一全新功能，能让你的 iPhone 和 iPad 壁纸瞬间拥有惊艳的 3D 效果。今天，我们就来详细拆解如何利用这一功能，打造专属的动态壁纸。</p>

<h2 id="一认识-ios-26-的-空间场景模式">一、认识 iOS 26 的 “空间场景模式”</h2>

<h3 id="1-什么是空间场景模式">1. 什么是空间场景模式？</h3>

<video muted="" width="100%" autoplay="autoplay" loop="loop">
<source src="../../../../images/2025/68.mp4" type="video/mp4" />
</video>

<p>简单来说，空间场景模式是 Apple 借助 AI 技术实现的壁纸黑科技。它能够智能分析静态图像的层次结构，自动为照片增加景深效果。当你倾斜 iPhone 或 iPad 时，照片中的主体会仿佛突破屏幕限制，“跃然纸上”，呈现出极具立体感的 3D 视觉体验，让普通的静态照片摇身一变成为动态的视觉焦点。</p>

<p>这一功能的应用场景也十分广泛，不仅能在锁定屏幕上作为动态壁纸使用，还支持主屏幕的照片小部件，甚至在照片应用中浏览图片时，也能感受到景深带来的沉浸式效果。其中，将其设置为锁定屏幕壁纸，是最能体现 3D 效果的用法，每次点亮屏幕都能收获满满的视觉惊喜。</p>

<h2 id="二准备工作确认设备兼容性">二、准备工作：确认设备兼容性</h2>

<p>在开始制作动态壁纸前，首先要确保你的设备支持这一功能，否则再完美的操作也无法呈现理想效果。</p>

<h3 id="1-iphone-支持型号">1. iPhone 支持型号</h3>

<p>iOS 26 的空间场景模式仅适用于<strong>iPhone 12 及更高版本</strong>的设备，如果你使用的是 iPhone 11 及更早机型，很遗憾暂时无法体验这一功能。</p>

<h3 id="2-ipad-支持型号">2. iPad 支持型号</h3>

<p>iPadOS 26 对设备的要求是搭载 A15 芯片及以上，具体兼容的 iPad 型号如下表所示：</p>

<p>经用户反馈，iPad 10 升级26.1也用不了，估计芯片得A15以上：</p>

<table>
  <thead>
    <tr>
      <th>iPad 型号</th>
      <th>芯片 / 备注</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>iPad mini (6th gen)</td>
      <td>A15</td>
    </tr>
    <tr>
      <td>iPad mini (7th gen)</td>
      <td>A17 Pro</td>
    </tr>
    <tr>
      <td>iPad Air (5th gen)</td>
      <td>M1</td>
    </tr>
    <tr>
      <td>iPad Air (6th gen)</td>
      <td>M2</td>
    </tr>
    <tr>
      <td>iPad Air (7th gen)</td>
      <td>M3</td>
    </tr>
    <tr>
      <td>iPad Pro (3rd gen)</td>
      <td>A12X</td>
    </tr>
    <tr>
      <td>iPad Pro (4th gen)</td>
      <td>A12Z</td>
    </tr>
    <tr>
      <td>iPad Pro (5th gen)</td>
      <td>M1</td>
    </tr>
    <tr>
      <td>iPad Pro (6th gen)</td>
      <td>M2</td>
    </tr>
    <tr>
      <td>iPad Pro (7th gen)</td>
      <td>M4</td>
    </tr>
  </tbody>
</table>

<p>建议大家对照表格，确认自己的设备在兼容列表内后，再进行后续操作。</p>

<h2 id="三详细步骤在锁定屏幕设置-3d-壁纸">三、详细步骤：在锁定屏幕设置 3D 壁纸</h2>

<p>确认设备兼容后，我们就可以正式开始设置 3D 壁纸了，步骤简单易懂，跟着操作就能轻松完成：</p>

<ol>
  <li>
    <p><strong>进入锁定屏幕编辑模式</strong>：首先按住 iPhone 或 iPad 的锁定屏幕，此时屏幕会弹出编辑界面。</p>
  </li>
  <li>
    <p><strong>添加新壁纸</strong>：点击屏幕右下角的 “+” 按钮，进入壁纸选择页面。</p>
  </li>
  <li>
    <p><strong>选择照片来源</strong>：在弹出的选项中，点击 “照片”，从你的相册中挑选一张想要设置为壁纸的图片。这里建议选择主体清晰、层次分明的照片，这样生成的 3D 效果会更明显。</p>
  </li>
  <li>
    <p><strong>开启空间场景模式</strong>：选中照片后，点击屏幕右下角的 “六边形图标”，此时 iOS 会自动开始分析照片并生成空间场景，这个过程可能需要几秒钟，请耐心等待。</p>
  </li>
  <li>
    <p><strong>预览效果</strong>：生成完成后，你可以轻轻倾斜设备，预览 3D 壁纸的动态效果，感受主体 “漂浮” 的视觉体验。</p>
  </li>
  <li>
    <p><strong>自定义细节</strong>：如果需要，你还可以对时钟样式、小部件布局等进行自定义，让壁纸更符合你的使用习惯和审美。</p>
  </li>
  <li>
    <p><strong>完成设置</strong>：所有调整都满意后，点击屏幕右上角的 “完成” 按钮，这样你的锁定屏幕就成功设置为 3D 壁纸啦！</p>
  </li>
</ol>

<h2 id="四进阶技巧开启深度效果提升动感">四、进阶技巧：开启深度效果，提升动感</h2>

<p>如果你想让 3D 壁纸的效果更上一层楼，可以尝试同时开启 “空间场景模式” 和 “经典景深效果”，这样照片主体会与时钟等界面元素产生重叠，视觉上更加逼真、动感十足。具体开启方法如下：</p>

<ol>
  <li>
    <p><strong>进入壁纸编辑模式</strong>：在设置好空间场景壁纸后，再次按住锁定屏幕，点击 “编辑” 进入壁纸编辑界面。</p>
  </li>
  <li>
    <p><strong>找到深度效果选项</strong>：在编辑界面中，点击 “六边形图标” 旁边的 “圆圈图标”，此时会弹出相关设置选项。</p>
  </li>
  <li>
    <p><strong>开启深度效果</strong>：在选项中找到 “深度效果” 并点击开启即可。</p>
  </li>
</ol>

<p>需要注意的是，如果你的照片不符合深度效果的要求，比如主体模糊、层次不清晰，那么 “深度效果” 选项可能不会出现。这种情况下，建议更换一张高质量、主体明确的照片再次尝试。</p>

<h2 id="五常见问题无法设置空间场景壁纸的解决方法">五、常见问题：无法设置空间场景壁纸的解决方法</h2>

<p>在设置过程中，有些用户可能会遇到无法成功设置空间场景壁纸的问题，别担心，以下是几种常见问题的解决办法，帮你快速排查：</p>

<ol>
  <li>
    <p><strong>确认壁纸适用场景</strong>：空间场景模式目前<strong>仅支持锁定屏幕壁纸</strong>，不支持桌面壁纸，如果你试图将其设置为桌面壁纸，自然无法成功。</p>
  </li>
  <li>
    <p><strong>检查设备兼容性</strong>：再次确认你的设备是否在支持列表内，只有 iPhone 12 及以上、搭载 A12 芯片及以上的 iPad 才能使用该功能。</p>
  </li>
  <li>
    <p><strong>确认开启空间场景选项</strong>：在设置壁纸时，一定要确保点击了 “六边形图标”，开启了空间场景模式，并且等待系统完成动态图片生成后再保存。</p>
  </li>
  <li>
    <p><strong>关闭低电量模式</strong>：低电量模式会限制部分功能的使用，包括空间场景模式。进入手机 “设置”-“电池”，关闭 “低电量模式” 后再尝试设置。</p>
  </li>
  <li>
    <p><strong>无需关注 “降低透明度” 设置</strong>：很多用户担心 “降低透明度” 会影响效果，实际上这一设置与空间场景模式无关，无论开启还是关闭，都不会对壁纸效果产生影响。</p>
  </li>
  <li>
    <p><strong>关闭 “减少动态效果”</strong>：“减少动态效果” 会直接影响空间场景的显示，导致 3D 效果无法呈现。进入 “设置”-“辅助功能”-“动态效果”，确保 “减少动态效果” 处于关闭状态。</p>
  </li>
</ol>

<p>按照以上方法排查，大部分无法设置的问题都能得到解决。</p>

<h2 id="总结">总结</h2>

<p>iOS 26 的 “空间场景模式” 为苹果设备的壁纸带来了全新的 3D 体验，搭配简单的操作步骤和实用的问题解决办法，即使是技术小白也能轻松上手。希望通过这篇攻略，大家都能利用空间场景模式，打造出独一无二的动态壁纸，让自己的 iPhone 和 iPad 焕发新的活力。</p>

<blockquote>
  <p>（注：文档部分内容可能由 AI 生成）</p>
</blockquote>

<blockquote>
  <p><a href="https://locklive.gumroad.com/">LockLive官方壁纸店 https://locklive.gumroad.com/</a></p>
</blockquote>

<blockquote>
  <p>https://widget-club.com/zh-CN/article/ios26-3d-effect</p>
</blockquote>
 ]]></content>
  </entry>
  
  <entry>
    <title>使用 LockLive 应用制作苹果设备（iPhone 和 iPad）的动态壁纸</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/3c/2025/09/17/How_to_use_LockLive_make_lock_screen_live_wallpaper.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=使用LockLive应用制作苹果设备（iPhone和iPad）的动态壁纸" />
    <published>2025-09-17T00:00:00Z</published>
    <updated>2025-09-17T00:00:00+08:00</updated>
    <id>https://www.70apps.com/3c/2025/09/17/How_to_use_LockLive_make_lock_screen_live_wallpaper</id>
    <content type="html"><![CDATA[ <h1 id="使用-locklive-应用制作苹果设备iphone-和-ipad的动态壁纸">使用 LockLive 应用制作苹果设备（iPhone 和 iPad）的动态壁纸</h1>

<p>核心流程是选择素材、编辑制作、保存到相册，最后在系统设置中启用。整个过程需要确保设备系统版本和 App 功能兼容。</p>

<h2 id="-1-准备工作与前提条件">📱 1. 准备工作与前提条件</h2>

<p>在开始制作前，请确认以下几点：</p>

<p>• 设备与系统：确保你的 iPhone 或 iPad 系统版本为 iPadOS 17 / iOS 17 或更新版本。较新的系统能更好地支持动态壁纸功能。</p>

<p>• 应用获取：在 App Store 中搜索并下载 LockLive 动态壁纸制作应用。</p>

<p>• 素材准备：LockLive 这类应用通常支持将视频或实况照片 (Live Photo) 转换为动态壁纸。请提前准备好你想要制作的短视频片段或Live Photo。</p>

<h2 id="-2-使用-locklive-制作动态壁纸的步骤">🪜 2. 使用 LockLive 制作动态壁纸的步骤</h2>

<p>虽然不同应用界面略有差异，但基本流程相似，以下为通用操作指引：</p>

<p>1） 打开应用并选择功能：</p>

<p>在桌面找到 LockLive App 图标并点击打开。应用内通常会明确区分“动态壁纸制作”、“Live Photo制作”或类似功能入口，点击进入相应模块。</p>

<p>2） 导入素材：</p>

<p>在应用内，你可以从相册中选择一段已有的视频，或者直接使用应用内置的工具录制或创建一段新内容作为素材。</p>

<p>3） 编辑与自定义（可选）：</p>

<p>许多应用提供基础编辑功能。你通常可以：</p>

<p>◦ 剪辑视频片段：选取视频中最精彩的部分。</p>

<p>◦ 添加效果或滤镜：为动态壁纸增添个性化色彩。</p>

<p>◦ 设定封面帧：选择视频的某一帧画面作为静态封面，这在预览和锁屏显示时很重要。</p>

<p>4） 生成并保存动态壁纸：</p>

<p>编辑满意后，点击“制作”、“保存”或类似按钮。应用会将视频转换为 Live Photo 格式，并自动保存到你的系统相册中。请务必到手机“照片”App的“相簿”中，确认名为“Live Photos”或“实况照片”的相簿里已成功保存新制作的动态壁纸。</p>

<h2 id="️-3-将制作好的动态壁纸设置为设备壁纸">⚙️ 3. 将制作好的动态壁纸设置为设备壁纸</h2>

<p>制作完成的动态壁纸（已保存为Live Photo）需要通过在系统设置中操作才能生效：</p>

<p>1） 打开系统设置：</p>

<p>进入 iPhone 或 iPad 的 【设置】 &gt; 【墙纸】。</p>

<p>2） 选取新墙纸：</p>

<p>点击 【选取新墙纸】，然后在弹出的页面中，点击 【所有照片】 或直接从相簿中找到并选择你刚刚制作保存的那张实况照片 (Live Photo)。</p>

<p>3） 预览与设定：</p>

<p>◦ 在预览页面，你可以用力按压屏幕来预览动态效果。</p>

<p>◦ 确保左下角或选项中的 【Live Photo】 按钮处于开启状态（如果适用）。</p>

<p>◦ 点击右上角的 【设定】，然后选择 【设定锁定屏幕】、【设定主屏幕】 或 【同时设定】。</p>

<p>◦ 请注意：动态效果主要在锁定屏幕上通过长按激活。设为主屏幕壁纸后，通常仅呈现静态封面图或仅有轻微的视差效果，不会自动播放动画。</p>

<h2 id="-4-注意事项与常见问题">💡 4. 注意事项与常见问题</h2>

<p>• 动态效果触发：在锁屏界面，需要开启“三维触控”或“触感触控”功能（路径：【设置】&gt;【辅助功能】&gt;【触控】&gt;【三维触控与触感触控】）并通过长按屏幕来查看动态效果。</p>

<p>• 耗电与性能：动态壁纸会比静态壁纸消耗更多电量，对设备性能也有一定要求。若手机电量紧张或机型较旧，请酌情使用。</p>

<p>• 第三方应用权限：首次使用LockLive等第三方应用时，请根据提示授予其访问照片的权限，以便导入素材和保存作品。</p>

<p>• 横屏壁纸处理：如果你制作的动态壁纸是横屏视频，设为壁纸后可能默认是竖屏显示。你可能需要先在系统的“照片”App中编辑该实况照片，将其旋转至正确的横屏朝向并分别调整后保存，然后再进行设置。</p>

<p>希望这些步骤能帮助你成功制作并设置个性化的动态壁纸。</p>

<ul>
  <li><a href="https://70apps.com/blog/app/2025/04/23/LockLive.html">LockLive 官方介绍主页</a></li>
  <li><a href="https://apps.apple.com/app/id6742252309?ct=70apps">LockLive 苹果应用市场下载链接</a></li>
  <li><a href="https://70apps.com/locklive/">LockLive 专属动态壁纸购买链接</a></li>
  <li><a href="https://www.gpwzw.com/">xLiveWallpaper Free Download</a></li>
  <li><a href="https://xLiveWallpaper.vercel.app/">xLiveWallpaper United States Site</a></li>
  <li><a href="https://LiveWallpaper.vercel.app/">xLiveWallpaper India Site</a></li>
</ul>
 ]]></content>
  </entry>
  
  <entry>
    <title>如何制作透明背景的WebP动图</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/ai/2025/09/09/transparent_webp.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=如何制作透明背景的WebP动图" />
    <published>2025-09-09T00:00:00Z</published>
    <updated>2025-09-09T00:00:00+08:00</updated>
    <id>https://www.70apps.com/ai/2025/09/09/transparent_webp</id>
    <content type="html"><![CDATA[ <h1 id="为什么要使用webp格式来实现动画">为什么要使用webP格式来实现动画</h1>

<h1 id="编辑动图的工具">编辑动图的工具</h1>

<ol>
  <li>豆包 - 生成图片、修剪背景，扩图</li>
  <li>Adobe PS - 调整到1920x1080尺寸图片</li>
  <li>豆包、可灵、即梦 - 生成炫酷视频</li>
  <li>Adobe Premiere Pro  - 编辑透明视频</li>
  <li>Adobe Media Encoder - 导出透明视频</li>
  <li>https://soconvert.com/cn/mp4towebp  - 透明视频转webP动图</li>
</ol>

<h1 id="制作透明背景格式的视频">制作透明背景格式的视频</h1>

<h2 id="adobe-premiere-pro">Adobe Premiere Pro</h2>

<ol>
  <li>载入视频，并加载到时间线，选中视频</li>
  <li>切换 Effects</li>
  <li>Video Effects - Keying - Color Key 或 Ultra Key 拖放到视频编辑条上</li>
  <li>选中视频编辑条，切换 Effect controls ，找到 Color Key</li>
  <li>颜色选择器在预览画面上选择色值</li>
  <li>继续在下方编辑 Color Tolerance 调整强度，编辑Edge Thin 和Edge Feather 调整边缘</li>
  <li>选择 File - export - send to Adobe Media Encoder</li>
</ol>

<h2 id="adobe-media-encoder">Adobe Media Encoder</h2>

<ol>
  <li>选择参数，导出Mov</li>
</ol>

<ul>
  <li>格式： QuickTime</li>
  <li>视频编解码器： 无（8位未压缩的RGB）</li>
  <li>以最大尝试渲染，并选择深度为 8-bpc + Alpha</li>
</ul>

<h1 id="常规方法">常规方法</h1>

<p>专业设计师一般使用AE制作动画，并使用插件导出WebP，相关软件我也打包在百度网盘了，请自取。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>通过百度网盘分享的文件：
链接: https://pan.baidu.com/s/13Peub2U7xYdPg3Ct2nvl-w?pwd=live
提取码: live
复制这段内容后打开百度网盘手机App，操作更方便哦
</code></pre></div></div>

<p>插件：
https://zhuanlan.zhihu.com/p/72637097</p>

<p>安装工具：
https://aescripts.com/learn/zxp-installer/</p>
 ]]></content>
  </entry>
  
  <entry>
    <title>安卓手机支持动态壁纸清单</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2025/08/22/Live_Wallpaper_Android.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=安卓手机支持动态壁纸清单" />
    <published>2025-08-22T00:00:00Z</published>
    <updated>2025-08-22T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2025/08/22/Live_Wallpaper_Android</id>
    <content type="html"><![CDATA[ <h1 id="安卓手机支持动态壁纸">安卓手机支持动态壁纸</h1>

<blockquote>
  <p>安卓机型在支持动态壁纸上能力不一，特此汇总跟踪记录。</p>
</blockquote>

<h3 id="检查手机是否支持动态壁纸">检查手机是否支持动态壁纸</h3>

<p>并非所有Android手机都支持动态壁纸功能。您可以通过以下方法检查手机是否支持：</p>

<p>在设置菜单中查找“壁纸”或“桌面”选项。</p>

<p>如果有“动态壁纸”或“Live Wallpaper”选项，则说明您的手机支持动态壁纸。</p>

<p>有可能选择以下几种方式设置动态壁纸：</p>

<p>在“壁纸”或“桌面”设置中，找到动态壁纸选项。</p>

<p>还有一个在相册或图库应用中，找到视频或实况，查找是否有设为壁纸的选项或按钮</p>

<ol>
  <li>内置壁纸：选择系统内置的动态壁纸样式。</li>
  <li>实况壁纸：部分手机系统支持自有实况格式的壁纸</li>
  <li>视频壁纸：选择视频文件作为动态壁纸。</li>
</ol>

<p>Android原生系统，很早就支持壁纸Service（Android 2.x / API Level 7），只要不限制，都可以下载第三方壁纸App来设置。</p>

<p>推荐 壁纸引擎 ，免费无广告。</p>

<p>国内安卓厂商为了推广自己的主题商店，一般不会在系统级别支持视频设为壁纸。</p>

<h2 id="国内安卓手机">国内安卓手机</h2>

<h3 id="小米">小米</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: left">型号/系统</th>
      <th style="text-align: left">内置动态</th>
      <th style="text-align: left">实况壁纸</th>
      <th style="text-align: left">视频壁纸</th>
      <th style="text-align: left">第三方设置</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">通用</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">-</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">-</td>
    </tr>
  </tbody>
</table>

<h3 id="华为">华为</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: left">型号/系统</th>
      <th style="text-align: left">内置动态</th>
      <th style="text-align: left">实况壁纸</th>
      <th style="text-align: left">视频壁纸</th>
      <th style="text-align: left">第三方设置</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">Mate40 Pro</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">-</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">抖音:仅主屏</td>
    </tr>
    <tr>
      <td style="text-align: left">Mate60 Pro</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">-</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">抖音:仅主屏</td>
    </tr>
    <tr>
      <td style="text-align: left">P50 Pro/HarmonyOS 4.2</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">-</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">壁纸引擎:仅主屏</td>
    </tr>
    <tr>
      <td style="text-align: left">P70 Pro/HarmonyOS 5.1</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">无</td>
    </tr>
    <tr>
      <td style="text-align: left">Pure X/HarmonyOS 5.1</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">无</td>
    </tr>
  </tbody>
</table>

<h3 id="荣耀">荣耀</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: left">型号/系统</th>
      <th style="text-align: left">内置动态</th>
      <th style="text-align: left">实况壁纸</th>
      <th style="text-align: left">视频壁纸</th>
      <th style="text-align: left">第三方设置</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">荣耀 V40</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">-</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">壁纸引擎:仅主屏</td>
    </tr>
  </tbody>
</table>

<h3 id="oppo">OPPO</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: left">型号/系统</th>
      <th style="text-align: left">内置动态</th>
      <th style="text-align: left">实况壁纸</th>
      <th style="text-align: left">视频壁纸</th>
      <th style="text-align: left">第三方设置</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">Reno8/ColorOS 14</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">-</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">壁纸引擎：主屏+锁屏</td>
    </tr>
    <tr>
      <td style="text-align: left">Find X6</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">-</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">抖音：主屏+锁屏</td>
    </tr>
    <tr>
      <td style="text-align: left">Find X7 ULTRA</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">-</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">抖音：主屏+锁屏</td>
    </tr>
    <tr>
      <td style="text-align: left">Find X8s</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">抖音：主屏+锁屏</td>
    </tr>
  </tbody>
</table>

<h3 id="vivo">VIVO</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: left">型号</th>
      <th style="text-align: left">内置壁纸</th>
      <th style="text-align: left">用户视频</th>
      <th style="text-align: left">第三方</th>
      <th style="text-align: left">备注</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">通用</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">抖音</td>
      <td style="text-align: left">壁纸引擎：仅主屏</td>
    </tr>
    <tr>
      <td style="text-align: left">vivo X Fold5 折叠内屏</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">壁纸引擎</td>
      <td style="text-align: left">2200 x 2480</td>
    </tr>
    <tr>
      <td style="text-align: left">vivo X Fold5 折叠外屏</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">壁纸引擎</td>
      <td style="text-align: left">1172 x 2748</td>
    </tr>
  </tbody>
</table>

<h3 id="iqoo">iQoo</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: left">型号</th>
      <th style="text-align: left">内置壁纸</th>
      <th style="text-align: left">用户视频</th>
      <th style="text-align: left">第三方</th>
      <th style="text-align: left">备注</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">通用</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">-</td>
      <td style="text-align: left"> </td>
    </tr>
    <tr>
      <td style="text-align: left">iQoo Z9</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">-</td>
      <td style="text-align: left">需要压缩1080x2338，屏幕为1260x2800</td>
    </tr>
  </tbody>
</table>

<h3 id="一加">一加</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: left">型号/系统</th>
      <th style="text-align: left">内置动态</th>
      <th style="text-align: left">实况壁纸</th>
      <th style="text-align: left">视频壁纸</th>
      <th style="text-align: left">第三方设置</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">一加11pro</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">不支持</td>
      <td style="text-align: left">壁纸引擎</td>
    </tr>
  </tbody>
</table>

<h2 id="国外安卓手机">国外安卓手机</h2>

<h3 id="三星-samsung">三星 Samsung</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: left">型号/系统</th>
      <th style="text-align: left">内置动态</th>
      <th style="text-align: left">实况壁纸</th>
      <th style="text-align: left">视频壁纸</th>
      <th style="text-align: left">第三方设置</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">通用</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">-</td>
      <td style="text-align: left">支持</td>
      <td style="text-align: left">-</td>
    </tr>
  </tbody>
</table>

<h1 id="苹果">苹果</h1>

<ul>
  <li>iOS 16+ 支持长按锁屏实况壁纸</li>
  <li>iOS 17+ 支持自动锁屏实况壁纸</li>
</ul>
 ]]></content>
  </entry>
  
  <entry>
    <title>XCode 开发实现捷径打开自己开发的App</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2025/06/24/App-Intents-XCode.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=XCode开发实现捷径打开自己开发的App" />
    <published>2025-06-24T00:00:00Z</published>
    <updated>2025-06-24T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2025/06/24/App-Intents-XCode</id>
    <content type="html"><![CDATA[ <p>我计划在开发的LockLive应用里添加捷径快捷方式，命名为 <code class="language-plaintext highlighter-rouge">LockNow</code>，描述为 <code class="language-plaintext highlighter-rouge">LockLive Standby Mode</code>，整理一下如下：</p>

<h2 id="先上代码">先上代码</h2>

<p>新建一个 Siri Intent Definition File 类型文件</p>

<ol>
  <li>Intents.intentdefinition</li>
</ol>

<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
<span class="cp">&lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt;</span>
<span class="nt">&lt;plist</span> <span class="na">version=</span><span class="s">"1.0"</span><span class="nt">&gt;</span>
<span class="nt">&lt;dict&gt;</span>
	<span class="nt">&lt;key&gt;</span>INEnums<span class="nt">&lt;/key&gt;</span>
	<span class="nt">&lt;array/&gt;</span>
	<span class="nt">&lt;key&gt;</span>INIntentDefinitionModelVersion<span class="nt">&lt;/key&gt;</span>
	<span class="nt">&lt;string&gt;</span>1.2<span class="nt">&lt;/string&gt;</span>
	<span class="nt">&lt;key&gt;</span>INIntentDefinitionNamespace<span class="nt">&lt;/key&gt;</span>
	<span class="nt">&lt;string&gt;</span>HF1gjA<span class="nt">&lt;/string&gt;</span>
	<span class="nt">&lt;key&gt;</span>INIntentDefinitionSystemVersion<span class="nt">&lt;/key&gt;</span>
	<span class="nt">&lt;string&gt;</span>24E263<span class="nt">&lt;/string&gt;</span>
	<span class="nt">&lt;key&gt;</span>INIntentDefinitionToolsBuildVersion<span class="nt">&lt;/key&gt;</span>
	<span class="nt">&lt;string&gt;</span>16E140<span class="nt">&lt;/string&gt;</span>
	<span class="nt">&lt;key&gt;</span>INIntentDefinitionToolsVersion<span class="nt">&lt;/key&gt;</span>
	<span class="nt">&lt;string&gt;</span>16.3<span class="nt">&lt;/string&gt;</span>
	<span class="nt">&lt;key&gt;</span>INIntents<span class="nt">&lt;/key&gt;</span>
	<span class="nt">&lt;array&gt;</span>
		<span class="nt">&lt;dict&gt;</span>
			<span class="nt">&lt;key&gt;</span>INIntentCategory<span class="nt">&lt;/key&gt;</span>
			<span class="nt">&lt;string&gt;</span>generic<span class="nt">&lt;/string&gt;</span>
			<span class="nt">&lt;key&gt;</span>INIntentConfigurable<span class="nt">&lt;/key&gt;</span>
			<span class="nt">&lt;true/&gt;</span>
			<span class="nt">&lt;key&gt;</span>INIntentDescription<span class="nt">&lt;/key&gt;</span>
			<span class="nt">&lt;string&gt;</span>LockLive Standby Mode<span class="nt">&lt;/string&gt;</span>
			<span class="nt">&lt;key&gt;</span>INIntentDescriptionID<span class="nt">&lt;/key&gt;</span>
			<span class="nt">&lt;string&gt;</span>3CFvai<span class="nt">&lt;/string&gt;</span>
			<span class="nt">&lt;key&gt;</span>INIntentManagedParameterCombinations<span class="nt">&lt;/key&gt;</span>
			<span class="nt">&lt;dict&gt;</span>
				<span class="nt">&lt;key&gt;&lt;/key&gt;</span>
				<span class="nt">&lt;dict&gt;</span>
					<span class="nt">&lt;key&gt;</span>INIntentParameterCombinationSupportsBackgroundExecution<span class="nt">&lt;/key&gt;</span>
					<span class="nt">&lt;true/&gt;</span>
					<span class="nt">&lt;key&gt;</span>INIntentParameterCombinationUpdatesLinked<span class="nt">&lt;/key&gt;</span>
					<span class="nt">&lt;true/&gt;</span>
				<span class="nt">&lt;/dict&gt;</span>
			<span class="nt">&lt;/dict&gt;</span>
			<span class="nt">&lt;key&gt;</span>INIntentName<span class="nt">&lt;/key&gt;</span>
			<span class="nt">&lt;string&gt;</span>Intent<span class="nt">&lt;/string&gt;</span>
			<span class="nt">&lt;key&gt;</span>INIntentParameterCombinations<span class="nt">&lt;/key&gt;</span>
			<span class="nt">&lt;dict&gt;</span>
				<span class="nt">&lt;key&gt;&lt;/key&gt;</span>
				<span class="nt">&lt;dict&gt;</span>
					<span class="nt">&lt;key&gt;</span>INIntentParameterCombinationIsPrimary<span class="nt">&lt;/key&gt;</span>
					<span class="nt">&lt;true/&gt;</span>
					<span class="nt">&lt;key&gt;</span>INIntentParameterCombinationSupportsBackgroundExecution<span class="nt">&lt;/key&gt;</span>
					<span class="nt">&lt;true/&gt;</span>
				<span class="nt">&lt;/dict&gt;</span>
			<span class="nt">&lt;/dict&gt;</span>
			<span class="nt">&lt;key&gt;</span>INIntentResponse<span class="nt">&lt;/key&gt;</span>
			<span class="nt">&lt;dict&gt;</span>
				<span class="nt">&lt;key&gt;</span>INIntentResponseCodes<span class="nt">&lt;/key&gt;</span>
				<span class="nt">&lt;array&gt;</span>
					<span class="nt">&lt;dict&gt;</span>
						<span class="nt">&lt;key&gt;</span>INIntentResponseCodeName<span class="nt">&lt;/key&gt;</span>
						<span class="nt">&lt;string&gt;</span>success<span class="nt">&lt;/string&gt;</span>
						<span class="nt">&lt;key&gt;</span>INIntentResponseCodeSuccess<span class="nt">&lt;/key&gt;</span>
						<span class="nt">&lt;true/&gt;</span>
					<span class="nt">&lt;/dict&gt;</span>
					<span class="nt">&lt;dict&gt;</span>
						<span class="nt">&lt;key&gt;</span>INIntentResponseCodeName<span class="nt">&lt;/key&gt;</span>
						<span class="nt">&lt;string&gt;</span>failure<span class="nt">&lt;/string&gt;</span>
					<span class="nt">&lt;/dict&gt;</span>
				<span class="nt">&lt;/array&gt;</span>
			<span class="nt">&lt;/dict&gt;</span>
			<span class="nt">&lt;key&gt;</span>INIntentTitle<span class="nt">&lt;/key&gt;</span>
			<span class="nt">&lt;string&gt;</span>LockNow<span class="nt">&lt;/string&gt;</span>
			<span class="nt">&lt;key&gt;</span>INIntentTitleID<span class="nt">&lt;/key&gt;</span>
			<span class="nt">&lt;string&gt;</span>GFaSHZ<span class="nt">&lt;/string&gt;</span>
			<span class="nt">&lt;key&gt;</span>INIntentType<span class="nt">&lt;/key&gt;</span>
			<span class="nt">&lt;string&gt;</span>Custom<span class="nt">&lt;/string&gt;</span>
			<span class="nt">&lt;key&gt;</span>INIntentVerb<span class="nt">&lt;/key&gt;</span>
			<span class="nt">&lt;string&gt;</span>Do<span class="nt">&lt;/string&gt;</span>
		<span class="nt">&lt;/dict&gt;</span>
	<span class="nt">&lt;/array&gt;</span>
	<span class="nt">&lt;key&gt;</span>INTypes<span class="nt">&lt;/key&gt;</span>
	<span class="nt">&lt;array/&gt;</span>
<span class="nt">&lt;/dict&gt;</span>
<span class="nt">&lt;/plist&gt;</span>
</code></pre></div></div>

<p>新建两个Swift源代码类型文件</p>

<ol>
  <li>LockNowIntent.swift</li>
  <li>LockNowShortcuts.swift</li>
</ol>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
<span class="c1">//  LockNowIntent.swift</span>

<span class="kd">import</span> <span class="kt">AppIntents</span>

<span class="kd">struct</span> <span class="kt">LockNowIntent</span><span class="p">:</span> <span class="kt">AppIntent</span> <span class="p">{</span>
    <span class="kd">static</span> <span class="k">var</span> <span class="nv">title</span><span class="p">:</span> <span class="kt">LocalizedStringResource</span> <span class="o">=</span> <span class="s">"LockNow"</span>
    <span class="kd">static</span> <span class="k">var</span> <span class="nv">description</span> <span class="o">=</span> <span class="kt">IntentDescription</span><span class="p">(</span><span class="s">"LockLive Standby Mode."</span><span class="p">)</span>
    <span class="kd">static</span> <span class="k">var</span> <span class="nv">openAppWhenRun</span><span class="p">:</span> <span class="kt">Bool</span> <span class="o">=</span> <span class="kc">true</span>

    <span class="kd">@MainActor</span> <span class="c1">// Ensures perform() runs on the main thread</span>
    <span class="kd">func</span> <span class="nf">perform</span><span class="p">()</span> <span class="n">async</span> <span class="k">throws</span> <span class="o">-&gt;</span> <span class="kd">some</span> <span class="kt">IntentResult</span> <span class="o">&amp;</span> <span class="kt">ReturnsValue</span><span class="o">&lt;</span><span class="kt">Bool</span><span class="o">&gt;</span> <span class="p">{</span>
        <span class="nf">print</span><span class="p">(</span><span class="s">"LockNowIntent"</span><span class="p">)</span>
        <span class="k">return</span> <span class="o">.</span><span class="nf">result</span><span class="p">(</span><span class="nv">value</span><span class="p">:</span> <span class="kc">true</span><span class="p">)</span>
    <span class="p">}</span>
<span class="p">}</span>

</code></pre></div></div>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">//</span>
<span class="c1">//  LockNowShortcuts.swift</span>

<span class="kd">import</span> <span class="kt">AppIntents</span>

<span class="kd">struct</span> <span class="kt">LockNowShortcuts</span><span class="p">:</span> <span class="kt">AppShortcutsProvider</span> <span class="p">{</span>
    <span class="kd">static</span> <span class="k">var</span> <span class="nv">appShortcuts</span><span class="p">:</span> <span class="p">[</span><span class="kt">AppShortcut</span><span class="p">]</span> <span class="p">{</span>
        <span class="kt">AppShortcut</span><span class="p">(</span>
            <span class="nv">intent</span><span class="p">:</span> <span class="kt">LockNowIntent</span><span class="p">(),</span>
            <span class="nv">phrases</span><span class="p">:</span> <span class="p">[</span>
                <span class="s">"Open </span><span class="se">\(</span><span class="o">.</span><span class="n">applicationName</span><span class="se">)</span><span class="s">"</span><span class="p">,</span>  <span class="c1">// 必须有\(.applicationName)"</span>
                <span class="s">"Launch </span><span class="se">\(</span><span class="o">.</span><span class="n">applicationName</span><span class="se">)</span><span class="s">"</span><span class="p">,</span>
                <span class="s">"</span><span class="se">\(</span><span class="o">.</span><span class="n">applicationName</span><span class="se">)</span><span class="s">"</span>
            <span class="p">],</span>
            <span class="nv">shortTitle</span><span class="p">:</span> <span class="s">"Lock Now"</span><span class="p">,</span> <span class="c1">// 显示在捷径中快捷方式的标题</span>
            <span class="nv">systemImageName</span><span class="p">:</span> <span class="s">"bolt.circle"</span> <span class="c1">// 显示在捷径中快捷方式的图标</span>
        <span class="p">)</span>
    <span class="p">}</span>
<span class="p">}</span>

</code></pre></div></div>

<h2 id="客官稍等下面是deepseek给我的开发建议基本上是错的">客官稍等，下面是DeepSeek给我的开发建议，基本上是错的。</h2>

<p>在 Xcode 16 中开发 Intent 以实现通过 Siri 快捷指令快速打开自己开发的 App，可以按照以下步骤操作。这些步骤结合了最新的 App Intents 框架（适用于 iOS 16+ 和 macOS Ventura+），并参考了相关技术文档和实践经验。</p>

<hr />

<h3 id="1-配置项目以支持-app-intents"><strong>1. 配置项目以支持 App Intents</strong></h3>
<p>确保你的项目满足以下条件：</p>
<ul>
  <li><strong>Xcode 16</strong>：支持最新的 App Intents API。</li>
  <li><strong>iOS 16+/macOS Ventura+</strong>：App Intents 需要较新的系统版本。</li>
  <li><strong>添加 Intent Definition 文件</strong>：
    <ol>
      <li>在 Xcode 项目中，选择 <strong>File &gt; New &gt; File</strong>。</li>
      <li>搜索 <strong>“Siri Intent Definition File”</strong> 并创建。</li>
      <li>在 <code class="language-plaintext highlighter-rouge">.intentdefinition</code> 文件中定义你的 Intent。</li>
    </ol>
  </li>
</ul>

<hr />

<h3 id="2-定义-app-intent"><strong>2. 定义 App Intent</strong></h3>
<p>在 <code class="language-plaintext highlighter-rouge">.intentdefinition</code> 文件中，创建一个新的 Intent：</p>
<ul>
  <li><strong>Intent 类型</strong>：选择 <strong>“Open App”</strong> 或自定义操作。</li>
  <li><strong>参数</strong>（可选）：可以添加如 <code class="language-plaintext highlighter-rouge">deepLink</code> 参数以支持特定页面跳转。</li>
  <li><strong>标题和描述</strong>：如 <code class="language-plaintext highlighter-rouge">"Open My App"</code> 和 <code class="language-plaintext highlighter-rouge">"Quickly launch MyApp from Shortcuts."</code>。</li>
</ul>

<hr />

<h3 id="3-实现-app-intent-代码"><strong>3. 实现 App Intent 代码</strong></h3>
<p>在 Swift 中，创建一个符合 <code class="language-plaintext highlighter-rouge">AppIntent</code> 协议的结构体：</p>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">import</span> <span class="kt">AppIntents</span>

<span class="kd">struct</span> <span class="kt">OpenMyAppIntent</span><span class="p">:</span> <span class="kt">AppIntent</span> <span class="p">{</span>
    <span class="kd">static</span> <span class="k">var</span> <span class="nv">title</span><span class="p">:</span> <span class="kt">LocalizedStringResource</span> <span class="o">=</span> <span class="s">"Open My App"</span>
    <span class="kd">static</span> <span class="k">var</span> <span class="nv">description</span> <span class="o">=</span> <span class="kt">IntentDescription</span><span class="p">(</span><span class="s">"Opens MyApp directly from Shortcuts."</span><span class="p">)</span>

    <span class="kd">func</span> <span class="nf">perform</span><span class="p">()</span> <span class="n">async</span> <span class="k">throws</span> <span class="o">-&gt;</span> <span class="kd">some</span> <span class="kt">IntentResult</span> <span class="p">{</span>
        <span class="c1">// 使用 Deeplink 或直接打开 App</span>
        <span class="k">let</span> <span class="nv">url</span> <span class="o">=</span> <span class="kt">URL</span><span class="p">(</span><span class="nv">string</span><span class="p">:</span> <span class="s">"myapp://"</span><span class="p">)</span><span class="o">!</span>
        <span class="k">if</span> <span class="n">await</span> <span class="kt">UIApplication</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="nf">canOpenURL</span><span class="p">(</span><span class="n">url</span><span class="p">)</span> <span class="p">{</span>
            <span class="n">await</span> <span class="kt">UIApplication</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="nf">open</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
            <span class="k">return</span> <span class="o">.</span><span class="nf">finished</span><span class="p">()</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="k">throw</span> <span class="kt">NSError</span><span class="p">(</span><span class="nv">domain</span><span class="p">:</span> <span class="s">"AppNotInstalled"</span><span class="p">,</span> <span class="nv">code</span><span class="p">:</span> <span class="mi">404</span><span class="p">)</span>
        <span class="p">}</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<hr />

<h3 id="4-注册-intent-并添加快捷短语"><strong>4. 注册 Intent 并添加快捷短语</strong></h3>
<p>使用 <code class="language-plaintext highlighter-rouge">AppShortcutsProvider</code> 让 Shortcuts 应用识别你的 Intent：</p>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">struct</span> <span class="kt">MyAppShortcuts</span><span class="p">:</span> <span class="kt">AppShortcutsProvider</span> <span class="p">{</span>
    <span class="kd">static</span> <span class="k">var</span> <span class="nv">appShortcuts</span><span class="p">:</span> <span class="p">[</span><span class="kt">AppShortcut</span><span class="p">]</span> <span class="p">{</span>
        <span class="kt">AppShortcut</span><span class="p">(</span>
            <span class="nv">intent</span><span class="p">:</span> <span class="kt">OpenMyAppIntent</span><span class="p">(),</span>
            <span class="nv">phrases</span><span class="p">:</span> <span class="p">[</span><span class="s">"Open </span><span class="se">\(</span><span class="o">.</span><span class="n">applicationName</span><span class="se">)</span><span class="s">"</span><span class="p">],</span>
            <span class="nv">shortTitle</span><span class="p">:</span> <span class="s">"Launch My App"</span><span class="p">,</span>
            <span class="nv">systemImageName</span><span class="p">:</span> <span class="s">"app"</span>
        <span class="p">)</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
<ul>
  <li><strong><code class="language-plaintext highlighter-rouge">phrases</code></strong>：用户可以说或输入的快捷指令短语，如 <code class="language-plaintext highlighter-rouge">"Open MyApp"</code>。</li>
</ul>

<hr />

<h3 id="5-处理-intent-回调"><strong>5. 处理 Intent 回调</strong></h3>
<p>在 <code class="language-plaintext highlighter-rouge">AppDelegate</code> 或 SwiftUI 的入口处，确保处理 Intent 的返回：</p>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// 对于 SwiftUI</span>
<span class="kd">@main</span>
<span class="kd">struct</span> <span class="kt">MyApp</span><span class="p">:</span> <span class="kt">App</span> <span class="p">{</span>
    <span class="k">var</span> <span class="nv">body</span><span class="p">:</span> <span class="kd">some</span> <span class="kt">Scene</span> <span class="p">{</span>
        <span class="kt">WindowGroup</span> <span class="p">{</span>
            <span class="kt">ContentView</span><span class="p">()</span>
        <span class="p">}</span>
    <span class="p">}</span>
<span class="p">}</span>

<span class="c1">// 对于 UIKit</span>
<span class="kd">func</span> <span class="nf">application</span><span class="p">(</span><span class="n">_</span> <span class="nv">application</span><span class="p">:</span> <span class="kt">UIApplication</span><span class="p">,</span> <span class="k">continue</span> <span class="nv">userActivity</span><span class="p">:</span> <span class="kt">NSUserActivity</span><span class="p">,</span> <span class="nv">restorationHandler</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">([</span><span class="kt">UIUserActivityRestoring</span><span class="p">]?)</span> <span class="o">-&gt;</span> <span class="kt">Void</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span> <span class="p">{</span>
    <span class="k">if</span> <span class="n">userActivity</span><span class="o">.</span><span class="n">activityType</span> <span class="o">==</span> <span class="s">"OpenMyAppIntent"</span> <span class="p">{</span>
        <span class="c1">// 处理 Deeplink 逻辑</span>
        <span class="k">return</span> <span class="kc">true</span>
    <span class="p">}</span>
    <span class="k">return</span> <span class="kc">false</span>
<span class="p">}</span>
</code></pre></div></div>

<hr />

<h3 id="6-测试与调试"><strong>6. 测试与调试</strong></h3>
<ol>
  <li><strong>在 Xcode 中运行</strong>：确保 Intent 出现在 Shortcuts 应用中。</li>
  <li><strong>手动测试</strong>：
    <ul>
      <li>打开 <strong>Shortcuts App</strong>，创建新快捷指令。</li>
      <li>搜索你的 App 名称，应能看到定义的 Intent。</li>
      <li>运行快捷指令，检查是否能正确打开 App。</li>
    </ul>
  </li>
</ol>

<p>如果 Intent 未显示，尝试：</p>
<ul>
  <li>清理 Xcode 派生数据（<code class="language-plaintext highlighter-rouge">Xcode &gt; Preferences &gt; Locations &gt; DerivedData</code>）。</li>
  <li>重启设备和 Shortcuts App。</li>
</ul>

<hr />

<h3 id="7-进阶功能可选"><strong>7. 进阶功能（可选）</strong></h3>
<ul>
  <li><strong>支持旧系统（iOS 15 及以下）</strong>：使用 <code class="language-plaintext highlighter-rouge">NSUserActivity</code> 和 <code class="language-plaintext highlighter-rouge">SiriKit Intents</code> 作为备用方案。</li>
  <li><strong>多语言支持</strong>：在 <code class="language-plaintext highlighter-rouge">.intentdefinition</code> 文件中配置本地化字符串。</li>
  <li><strong>参数化 Deeplink</strong>：如 <code class="language-plaintext highlighter-rouge">myapp://home?tab=settings</code>，以支持更多场景。</li>
</ul>

<hr />

<h3 id="总结"><strong>总结</strong></h3>
<p>通过上述步骤，你可以在 Xcode 16 中实现一个简单的 App Intent，让用户通过 Siri 或快捷指令快速打开你的 App。如需更复杂的功能（如传递参数或执行特定操作），可进一步扩展 Intent 逻辑。</p>
 ]]></content>
  </entry>
  
  <entry>
    <title>LockLive</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/app/2025/04/23/LockLive.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=LockLive" />
    <published>2025-04-23T00:00:00Z</published>
    <updated>2025-04-23T00:00:00+08:00</updated>
    <id>https://www.70apps.com/app/2025/04/23/LockLive</id>
    <content type="html"><![CDATA[ <h1 id="locklive">LockLive</h1>

<p>Create stunning dynamic lock screen live photos and usher in a new era of personalized screensavers!</p>

<p><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/0b/63/84/0b638403-ae84-dfa7-7a90-ddd43430a8c9/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></p>

<p><a href="https://apps.apple.com/app/id6742252309?ct=70apps"><img src="../../../../images/icon/download_app_store_world.png" alt="appstoredownload" /></a></p>

<h2 id="intro">Intro</h2>

<ul>
  <li>Lightning-fast real-time preview: No more long waits—instantly witness your creations. Every adjustment is displayed in real time, ensuring a super efficient and seamless creative process.</li>
  <li>Precision capture: With the precision capture feature, perfectly freeze any exciting moment in the frame, never missing a single detail.</li>
  <li>Smart screen adaptation: Automatically adapts to different screen sizes. No matter what device you use, the wallpaper will fit perfectly, delivering a stunning visual experience.</li>
  <li>Easy setup and quick preview: Through convenient and diverse quick setup options, you can quickly preview the final effect and even showcase cool videos while charging.</li>
  <li>Portrait depth dynamic lock screen, cool display while charging: Add unique charm to your device with convenient and diverse quick setup options, making your charging time stand out.</li>
</ul>

<h2 id="screenshots">Screenshots</h2>

<p><img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/1e/08/b2/1e08b2fa-3c41-174b-c039-8081a01a9e2d/devshots-1744648650969.jpg/300x0w.webp" alt="应用截图1" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/e6/4f/ab/e64fabe9-2124-9f54-8587-513451e52eed/devshots-1744647864220.jpg/300x0w.webp" alt="应用截图2" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/0a/24/ae/0a24ae38-2f38-f1b0-12c8-c80ac0e59ba0/devshots-1744648678146.jpg/300x0w.webp" alt="应用截图3" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/df/e4/41/dfe441d1-56bd-a0cc-968b-cdb2ff377254/devshots-1744648574102.jpg/300x0w.webp" alt="应用截图4" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/91/e1/7d/91e17d2f-73c3-1b26-d6d3-615ef23c3c00/devshots-1744648617623.jpg/300x0w.webp" alt="应用截图5" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/44/d3/bd/44d3bd9b-38a5-a9f9-f302-ddc605cfb421/devshots-1744648712268.jpg/300x0w.webp" alt="应用截图5" /></p>

<h2 id="简介">简介</h2>

<ul>
  <li>闪电般快速的实时预览：无需漫长等待，瞬间见证创作成果。每一次调整都能实时呈现，确保创作过程超级高效且流畅无缝。</li>
  <li>精准捕捉截取：借助精准捕捉功能，完美定格画面中的任何精彩瞬间，绝不放过任何一个细节。</li>
  <li>智能屏幕适配：自动适应不同屏幕尺寸。无论使用何种设备，壁纸都能完美贴合，带来令人惊艳的视觉体验。</li>
  <li>轻松设置快速预览：通过便捷多样的快速设置选项，可以快速预览最终效果，还可以用于充电时展示酷炫视频。</li>
  <li>人物景深动态锁屏，充电时炫酷展示：通过便捷多样的快速设置选项，为你的设备增添独特魅力，让充电时光与众不同。</li>
</ul>

<h2 id="应用截图">应用截图</h2>

<p><img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/6c/0a/c4/6c0ac4e3-3a12-839e-e0c2-aa4386f9be12/devshots-1744648968181.jpg/300x0w.webp" alt="应用截图1" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/bd/79/69/bd796918-b895-491b-3a77-03b7b3fd73c5/devshots-1744648818896.jpg/300x0w.webp" alt="应用截图2" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/66/97/5c/66975c3e-8f1c-7710-1521-c03ac688a922/devshots-1744648995297.jpg/300x0w.webp" alt="应用截图3" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/ad/59/41/ad5941e2-05c7-579b-119d-088818994d2a/devshots-1744648870645.jpg/300x0w.webp" alt="应用截图4" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/43/99/2d/43992d18-2f0b-e9f7-6a34-c858f0028777/devshots-1744648940500.jpg/300x0w.webp" alt="应用截图5" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/4c/c9/63/4cc96369-89be-d60c-962e-19e7fe72328d/devshots-1744649017775.jpg/300x0w.webp" alt="应用截图5" /></p>

<h2 id="download">Download</h2>

<p><a href="https://apps.apple.com/app/id6742252309?ct=70apps"><img src="../../../../images/icon/download_app_store_world.png" alt="appstoredownload" /></a></p>

<ul>
  <li><a href="https://apps.apple.com/app/id6742252309?ct=70apps">App Store https://apps.apple.com/app/id1529981662</a></li>
</ul>

<h1 id="全部应用">全部应用</h1>

<ul>
  <li><a href="/blog/app/2025/04/23/LockLive.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/0b/63/84/0b638403-ae84-dfa7-7a90-ddd43430a8c9/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
LockLive</li>
  <li><a href="/blog/app/2023/08/05/Emoji_Guess.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/71/48/8e/71488e88-3ed4-2ede-0d68-b6933b02b2b5/AppIcon-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
图标猜成语</li>
  <li><a href="/blog/app/2023/07/24/Chinese_CrossWord_2023.html"><img src="https://is3-ssl.mzstatic.com/image/thumb/Purple116/v4/35/43/75/35437530-c14c-ef92-0cfc-e438eb1f2808/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/246x0w.png" alt="appicon" /></a><br />
新疯狂填字</li>
  <li><a href="/blog/app/2023/08/04/Super_Clock.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/dc/8a/ff/dc8affa0-f8c3-40f2-543c-bf3e43366ba4/AppIcon-0-0-1x_U007emarketing-0-10-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
超级时钟</li>
  <li><a href="/blog/app/2023/07/23/Crazy_Chengyu.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple122/v4/a6/2a/6e/a62a6e42-8c92-c353-594c-c798c0aaeaaa/AppIcon-0-0-1x_U007emarketing-0-0-0-5-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/260x0w.png" alt="appicon" /></a><br />
疯狂成语</li>
  <li><a href="/blog/app/2023/04/08/Chinese_CrossWord.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple123/v4/38/f7/71/38f771d4-2d95-052a-0eb9-aef58da9aab5/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/230x0w.png" alt="appicon" /></a><br />
疯狂填字</li>
  <li><a href="/blog/app/2023/04/08/Super_Password.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple112/v4/d1/3a/0a/d13a0a0a-fbfa-32ea-9382-6cb461dbabba/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
超级密码</li>
</ul>

 ]]></content>
  </entry>
  
  <entry>
    <title>互联网 AI 生存指南：我的 AI 全家桶</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/ai/2025/03/12/My_AI_ToolBox.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=互联网AI生存指南：我的AI全家桶" />
    <published>2025-03-12T00:00:00Z</published>
    <updated>2025-03-12T00:00:00+08:00</updated>
    <id>https://www.70apps.com/ai/2025/03/12/My_AI_ToolBox</id>
    <content type="html"><![CDATA[ <h1 id="互联网-ai-生存指南我的-ai-全家桶">互联网 AI 生存指南：我的 AI 全家桶</h1>

<p>在这个 AI 蓬勃发展的时代，各类 AI 工具如雨后春笋般涌现，彻底改变了我们的工作与生活方式。经过一段时间的探索与实践，我精心整理了一份自己常用的 AI 工具清单，它们各司其职，相互配合，让我的效率得到了极大提升，仿佛组成了一个专属的 AI “梦幻团队”，下面就来给大家详细介绍一下。</p>

<h2 id="一智能问答与推理担当">一、智能问答与推理担当</h2>

<h3 id="deepseek">DeepSeek：</h3>

<p>这是来自中国的人工智能公司研发的明星产品 。其推理模型 DeepSeek - R1 表现极为亮眼，在处理复杂问题时，能够通过高效的算法和创新的训练方式，以较低的资源消耗实现高质量的逻辑推导和问题解决。例如在一些复杂的数学问题求解、逻辑谜题破解上，DeepSeek 往往能给出清晰的解题步骤和准确答案。而且它在代码生成方面也有出色表现，能根据自然语言描述生成完整模块代码（支持 Java/Python/Go 等多种语言），还能实时分析代码性能瓶颈并提供优化方案，自动生成技术方案文档与 API 说明 。由于其模型是开源的，开发者们可以基于此进行更多的创新应用开发。<a href="https://www.deepseek.com/">DeepSeek 官网链接</a></p>

<h3 id="腾讯元宝">腾讯元宝：</h3>

<p>当涉及到对内容来源有严格要求，需要获取更加权威、准确且符合特定规范的信息时，腾讯元宝就派上了用场。它依托腾讯强大的资源整合能力和数据筛选机制，能够从海量的信息库中精准定位出可靠的内容，在学术研究、专业报告撰写等场景中发挥着重要作用。<a href="https://yuanbao.qq.com/">腾讯元宝官网链接</a></p>

<h2 id="二多面手助手豆包">二、多面手助手：豆包</h2>

<p>豆包绝对是我日常使用频率极高的 AI 工具之一。无论是查询资料，像在研究某个专业领域知识时，它能迅速从广泛的信息源中提炼出关键内容；还是进行日常聊天，分享想法、交流观点，它都能很好地理解意图并给出有趣又有价值的回应。在文字创作方面，无论是写文章、故事，还是创作诗歌，豆包都能根据给定的主题和要求，生成结构合理、内容丰富的文本。翻译功能也十分强大，支持多种语言之间的精准互译，无论是商务文档、学术论文，还是日常交流语句，都能准确转换，为跨越语言障碍提供了极大便利，各种执行性的文字任务交给它，都能妥妥完成。 <a href="https://doubao.com/">豆包官网链接</a></p>

<h2 id="三文档处理专家kimi-和-kimi">三、文档处理专家：Kimi 和 Kimi+</h2>

<h3 id="kimi">Kimi：</h3>

<p>在面对长文章和复杂文档时，Kimi 展现出了强大的内容提炼能力。例如在处理一些行业研究报告、法律条文文档时，它能够快速梳理出文档的核心观点、重要结论以及关键数据，帮助我们在短时间内抓住重点，理解文档的主旨。对于需要从大量文本中提取特定信息的工作，Kimi 能够高效完成，大大节省了阅读和分析的时间。 <a href="https://www.kimi-ai.com/">Kimi 官网链接</a></p>

<h3 id="kimi-1">Kimi+：</h3>

<p>Kimi + 在 Kimi 的基础上更进一步，它拥有一键生成 PPT 的神奇功能。当我们有展示需求，却没有足够时间去精心制作 PPT 时，只需将相关的文字内容整理好输入给 Kimi+，它就能自动根据内容结构和逻辑，生成美观且专业的 PPT 模板，包括页面布局、图表设计、文字排版等都能处理得恰到好处，让演示文稿的制作变得轻松又高效。 <a href="https://www.kimi-ai.com/kimi-plus">Kimi + 官网链接</a></p>

<h2 id="四音频处理利器">四、音频处理利器</h2>

<h3 id="海豚配音">海豚配音：</h3>

<p>对于从事自媒体工作或者有音频内容创作需求的人来说，海豚配音是一个不可多得的好工具。它拥有超过 300 种适合自媒体的声音，涵盖了各种风格，无论是温柔甜美的女声，还是沉稳大气的男声，亦或是活泼俏皮的卡通音，都能在这里找到。在制作视频配音、有声读物、广告音频等内容时，丰富的声音选择可以为作品增添更多的吸引力和趣味性，满足不同场景下的音频需求。 <a href="https://www.haitunpeiyin.com/">海豚配音官网链接</a></p>

<h3 id="fishaudio">FishAudio：</h3>

<p>声音复制在一些特定场景中非常有用，而 FishAudio 让这个操作变得简单快捷。它能够快速分析目标声音的特征，并进行复制模拟。例如，在一些影视配音的模仿创作，或者需要特定人物声音的二次利用场景中，FishAudio 能够通过简单的操作步骤，生成与原声音相似的音频，为音频创作和处理提供了更多的可能性和便利性。 <a href="https://www.fishaudio.com/">FishAudio 官网链接</a></p>

<h2 id="五视频创作精灵">五、视频创作精灵</h2>

<h3 id="可灵">可灵：</h3>

<p>可灵能够将文字和图片巧妙地转化为视频。在当下短视频流行的时代，内容创作的效率至关重要。当我们有了一个视频创意，只需要准备好相关的文字描述和一些基础图片素材，输入到可灵中，它就能自动生成具有一定情节和视觉效果的视频。无论是制作产品宣传视频、创意短视频，还是简单的生活记录视频，可灵都能帮助我们快速将想法转化为实际的视频作品，降低了视频创作的门槛和成本。 <a href="https://www.keeling.com/">可灵官网链接</a></p>

<h2 id="六图片生成大师即梦">六、图片生成大师：即梦</h2>

<p>即梦是一款强大的图片生成 AI 工具，用户只需要简单地描述心中所想的画面，无论是奇幻的场景、美丽的风景，还是独特的人物形象，即梦都能通过先进的图像生成算法，将文字描述转化为精美的图片。在设计领域，设计师可以借助即梦快速生成创意草图，获取灵感；在自媒体创作中，创作者也能利用它生成独特的配图，为文章增添视觉吸引力，极大地拓展了图片创作的边界，让创意能够迅速可视化。 <a href="https://www.jimeng.com/">即梦官网链接</a></p>

<h2 id="七视频剪辑神器">七、视频剪辑神器</h2>

<h3 id="剪映专业版">剪映专业版：</h3>

<p>对于专业的视频创作者来说，剪映专业版提供了丰富且强大的剪辑功能。它支持多轨道剪辑，能够对视频的各个元素进行精细调整，如视频片段的剪辑、拼接、特效添加、音频处理等。同时，它还拥有海量的素材库，包括各种滤镜、转场效果、音乐等，能够满足专业视频创作中对高质量内容的需求，帮助创作者打造出具有专业水准的视频作品。 <a href="https://www.capcut.cn/">剪映专业版官网链接</a></p>

<h3 id="秒剪">秒剪：</h3>

<p>秒剪则更侧重于便捷性和快速分享。在我们想要快速制作一个适合发朋友圈或者视频号的短视频时，秒剪的操作简单易懂，能够快速对视频进行剪辑、添加字幕、应用简单特效等操作，并且可以直接在应用内完成分享，满足了用户即时创作和分享生活点滴的需求。 <a href="https://miaojian.weishi.qq.com/">秒剪官网链接</a></p>

<h3 id="度加剪辑">度加剪辑：</h3>

<p>度加剪辑在快速生成视频方面具有独特优势。它可以根据用户输入的主题和一些关键信息，自动匹配相关的素材，并按照一定的逻辑和风格生成视频。对于一些对视频质量有一定要求，但又希望能够快速出片的场景，如新闻报道视频的快速制作、简单产品介绍视频的生成等，度加剪辑能够高效地完成任务，节省大量的创作时间。 <a href="https://dujia.baidu.com/">度加剪辑官网链接</a></p>

<h2 id="八数据处理与可视化助手小浣熊">八、数据处理与可视化助手：小浣熊</h2>

<p>在面对大量数据时，小浣熊能够帮助我们轻松梳理和分析。它可以对各种格式的数据进行导入和整理，运用多种数据分析算法对数据进行深入挖掘，发现数据中的规律和趋势。更为重要的是，小浣熊能够将分析结果快速生成可视化图表，如柱状图、折线图、饼图、散点图等，以直观的图形展示数据，让复杂的数据变得一目了然，便于我们做出决策和进行数据汇报。 <a href="https://www.xiaohuanxiongdata.com/">小浣熊官网链接</a></p>

<h2 id="九知识管理与分享平台">九、知识管理与分享平台</h2>

<h3 id="百度文库白板画布">百度文库白板画布：</h3>

<p>百度文库白板画布是一个功能丰富的在线协作平台。它支持快速生成内部分享 PPT，团队成员可以在上面共同编辑、讨论，实时协作完成演示文稿的制作。同时，它还提供了主题化阅读功能，用户可以围绕某个特定主题收集、整理相关文档，并在画布上进行关联和分析，有助于深入研究某个领域的知识。此外，在内容创作和头脑风暴环节，大家可以在画布上自由书写想法、绘制思维导图，激发创意，促进团队之间的思想碰撞。 <a href="https://wenku.baidu.com/whiteboard">百度文库白板画布官网链接</a></p>

<h3 id="get-笔记">Get 笔记：</h3>

<p>Get 笔记专注于知识的收集和整理。它可以订阅直播间和跟踪博主，自动生成逐字稿，方便我们回顾直播内容和学习博主的经验。对于这些文字内容，我们可以进一步进行分类、标注，建立自己的知识库。在需要分析框架和结构时，通过对收集内容的梳理，能够清晰地看到不同知识之间的逻辑关系，为学习和创作提供有力支持。 <a href="https://getnote.com/">Get 笔记官网链接</a></p>

<h3 id="ima">ima：</h3>

<p>ima 作为个人知识库，具有强大的知识管理功能。它能够将我们从各种渠道获取的信息，如网页文章、文档资料、图片等进行统一存储和管理。通过智能标签和分类系统，方便我们快速检索和查找所需知识。同时，ima 还支持知识的关联和拓展，能够根据已有的知识内容，推荐相关的信息，帮助我们构建更加完善的知识体系。 <a href="https://www.imaknowledge.com/">ima 官网链接</a></p>

<h2 id="十经验建议获取窗口小红书点点">十、经验建议获取窗口：小红书点点</h2>

<p>小红书点点是一个汇聚了广大用户真实经验和建议的平台。在这里，我们可以获取到各种灵活且人性化的信息。无论是生活中的小窍门，如美食烹饪技巧、家居收纳方法；还是工作中的经验分享，如职场晋升策略、项目管理心得；亦或是消费决策的参考，如产品使用评价、旅游攻略等，都能在小红书点点上找到。通过浏览其他用户的分享，我们能够从不同的视角获取信息，为自己的生活和工作提供更多的思路和参考。 <a href="https://www.diandianlife.top/home">小红书点点官网链接</a></p>

<p>这些 AI 工具各有所长，在不同的场景中发挥着关键作用。合理运用这个 AI 全家桶，能够帮助我们在互联网时代更高效地工作、学习和生活，充分享受 AI 技术带来的便利与创新。大家不妨也根据自己的需求，尝试使用这些工具，打造属于自己的 AI 助力体系。</p>

<p>即刻 @是松月呀</p>
 ]]></content>
  </entry>
  
  <entry>
    <title>2025最全社交媒体发布图片尺寸大全</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2025/01/22/Social_Media_Image_Size_2025.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=2025最全社交媒体发布图片尺寸大全" />
    <published>2025-01-22T00:00:00Z</published>
    <updated>2025-01-22T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2025/01/22/Social_Media_Image_Size_2025</id>
    <content type="html"><![CDATA[ <h1 id="常用规范">常用规范</h1>

<blockquote>
  <p>Social Media Image Size Guide 2025</p>
</blockquote>

<table>
  <thead>
    <tr>
      <th style="text-align: center">Media</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">Facebook Square</td>
      <td style="text-align: center">1200 x 1200 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td style="text-align: center">Facebook Landscape</td>
      <td style="text-align: center">1200 x 630 px</td>
      <td style="text-align: center">1.905:1</td>
    </tr>
    <tr>
      <td style="text-align: center">Facebook Portrait</td>
      <td style="text-align: center">630 x 1200 px</td>
      <td style="text-align: center">0.525:1</td>
    </tr>
    <tr>
      <td style="text-align: center">Instagram Square</td>
      <td style="text-align: center">1080 x 1080 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td style="text-align: center">Instagram Landscape</td>
      <td style="text-align: center">1080 x 566 px</td>
      <td style="text-align: center">1.908:1</td>
    </tr>
    <tr>
      <td style="text-align: center">Instagram Portrait</td>
      <td style="text-align: center">1080 x 1350 px</td>
      <td style="text-align: center">0.8:1</td>
    </tr>
    <tr>
      <td style="text-align: center">X(Twitter) Square</td>
      <td style="text-align: center">1200 x 1200 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td style="text-align: center">X(Twitter) Landscape</td>
      <td style="text-align: center">1200 x 900 px</td>
      <td style="text-align: center">1.78:1</td>
    </tr>
    <tr>
      <td style="text-align: center">X(Twitter) Portrait</td>
      <td style="text-align: center">900 x 1200 px</td>
      <td style="text-align: center">0.5625:1</td>
    </tr>
    <tr>
      <td style="text-align: center">Pinterest Square</td>
      <td style="text-align: center">1000 x 1000 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td style="text-align: center">LinkedIn Landscape</td>
      <td style="text-align: center">1200 x 627 px</td>
      <td style="text-align: center">1.914:1</td>
    </tr>
    <tr>
      <td style="text-align: center">LinkedIn Portrait</td>
      <td style="text-align: center">627 x 1200 px</td>
      <td style="text-align: center">0.5225:1</td>
    </tr>
    <tr>
      <td style="text-align: center">RedNote Square</td>
      <td style="text-align: center">1080 x 1080 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td style="text-align: center">RedNote Landscape</td>
      <td style="text-align: center">1200 x 900 px</td>
      <td style="text-align: center">1.33:1</td>
    </tr>
    <tr>
      <td style="text-align: center">RedNote Portrait</td>
      <td style="text-align: center">900 x 1200 px</td>
      <td style="text-align: center">0.75:1</td>
    </tr>
    <tr>
      <td style="text-align: center">微博 Normal</td>
      <td style="text-align: center">980 x 900 px</td>
      <td style="text-align: center">1.08:1</td>
    </tr>
    <tr>
      <td style="text-align: center">微博 Long</td>
      <td style="text-align: center">800 x 2000 px</td>
      <td style="text-align: center">0.4:1</td>
    </tr>
  </tbody>
</table>

<h1 id="facebook-more">Facebook More</h1>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Square</td>
      <td style="text-align: center">1200 x 1200 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Landscape</td>
      <td style="text-align: center">1200 x 630 px</td>
      <td style="text-align: center">1.905:1</td>
    </tr>
    <tr>
      <td>Portrait</td>
      <td style="text-align: center">630 x 1200 px</td>
      <td style="text-align: center">0.525:1</td>
    </tr>
    <tr>
      <td>Profile</td>
      <td style="text-align: center">320 x 320 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Cover Photo</td>
      <td style="text-align: center">1200 x 628 px</td>
      <td style="text-align: center">2:1</td>
    </tr>
    <tr>
      <td>Stories</td>
      <td style="text-align: center">1080 x 1920 px</td>
      <td style="text-align: center">9:16</td>
    </tr>
    <tr>
      <td>Ad:All</td>
      <td style="text-align: center">1080 x 1080 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
  </tbody>
</table>

<h1 id="instagram-more">Instagram More</h1>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Square</td>
      <td style="text-align: center">1200 x 1200 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Landscape</td>
      <td style="text-align: center">1200 x 630 px</td>
      <td style="text-align: center">1.905:1</td>
    </tr>
    <tr>
      <td>Portrait</td>
      <td style="text-align: center">630 x 1200 px</td>
      <td style="text-align: center">0.525:1</td>
    </tr>
    <tr>
      <td>Profile</td>
      <td style="text-align: center">320 x 320 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Stories</td>
      <td style="text-align: center">1080 x 1920 px</td>
      <td style="text-align: center">9:16</td>
    </tr>
  </tbody>
</table>

<h1 id="xtwitter-more">X(Twitter) More</h1>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Square</td>
      <td style="text-align: center">1200 x 1200 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Landscape</td>
      <td style="text-align: center">1200 x 900 px</td>
      <td style="text-align: center">4:3</td>
    </tr>
    <tr>
      <td>Portrait</td>
      <td style="text-align: center">900 x 1200 px</td>
      <td style="text-align: center">3:4</td>
    </tr>
    <tr>
      <td>Profile</td>
      <td style="text-align: center">400 x 400 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Cover Photo</td>
      <td style="text-align: center">1500 x 500 px</td>
      <td style="text-align: center">3:1</td>
    </tr>
    <tr>
      <td>In-Steam Photos</td>
      <td style="text-align: center">1600 x 900 px</td>
      <td style="text-align: center">16:9</td>
    </tr>
    <tr>
      <td>Card Image</td>
      <td style="text-align: center">120 x 120 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Ad:Tweets</td>
      <td style="text-align: center">600 x 335 px</td>
      <td style="text-align: center">1.79:1</td>
    </tr>
    <tr>
      <td>Ad:Web Card Image</td>
      <td style="text-align: center">800 x 418 px</td>
      <td style="text-align: center">1.91:1</td>
    </tr>
    <tr>
      <td>Ad:App Card Image</td>
      <td style="text-align: center">800 x 800 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
  </tbody>
</table>

<h1 id="pinterest-more">Pinterest More</h1>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Square</td>
      <td style="text-align: center">1000 x 1000 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Static and Ad Specs</td>
      <td style="text-align: center">1000 x 1500 px</td>
      <td style="text-align: center">2:3</td>
    </tr>
    <tr>
      <td>Idea Pin</td>
      <td style="text-align: center">1080 x 1920 px</td>
      <td style="text-align: center">9:16</td>
    </tr>
    <tr>
      <td>Square Pin</td>
      <td style="text-align: center">1000 x 1000 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Long Pin</td>
      <td style="text-align: center">1000 x 2100 px</td>
      <td style="text-align: center">1:2.1</td>
    </tr>
    <tr>
      <td>Infographic Pin</td>
      <td style="text-align: center">1000 x 3000 px</td>
      <td style="text-align: center">1:3</td>
    </tr>
    <tr>
      <td>Ad:All</td>
      <td style="text-align: center">1000 x 1500 px</td>
      <td style="text-align: center">2:3</td>
    </tr>
  </tbody>
</table>

<h1 id="linkedin-more">LinkedIn More</h1>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Landscape</td>
      <td style="text-align: center">1200 x 627 px</td>
      <td style="text-align: center">1.914:1</td>
    </tr>
    <tr>
      <td>Portrait</td>
      <td style="text-align: center">627 x 1200 px</td>
      <td style="text-align: center">0.5225:1</td>
    </tr>
    <tr>
      <td>Blog Post</td>
      <td style="text-align: center">1080 x 1080 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Company Logo</td>
      <td style="text-align: center">300 x 300 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Company Square Logo</td>
      <td style="text-align: center">60 x 60 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Company Cover Image</td>
      <td style="text-align: center">1128 x 191 px</td>
      <td style="text-align: center">6:1</td>
    </tr>
    <tr>
      <td>Life Tab Main Image</td>
      <td style="text-align: center">1128 x 376 px</td>
      <td style="text-align: center">3:1</td>
    </tr>
    <tr>
      <td>Lift Tab Modules Image</td>
      <td style="text-align: center">502 x 282 px</td>
      <td style="text-align: center">1.78:1</td>
    </tr>
    <tr>
      <td>Lift Tab Photo Image</td>
      <td style="text-align: center">900 x 600 px</td>
      <td style="text-align: center">3:2</td>
    </tr>
  </tbody>
</table>

<h1 id="reanote-小红书-more">ReaNote 小红书 More</h1>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Portrait</td>
      <td style="text-align: center">900 x 1200 px</td>
      <td style="text-align: center">3:4</td>
    </tr>
    <tr>
      <td>Square</td>
      <td style="text-align: center">1080 x 1080 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Landscape</td>
      <td style="text-align: center">1200 x 900 px</td>
      <td style="text-align: center">4:3</td>
    </tr>
    <tr>
      <td>Profile</td>
      <td style="text-align: center">400 x 400 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Cover Landscape</td>
      <td style="text-align: center">800 x 600 px</td>
      <td style="text-align: center">4:3</td>
    </tr>
    <tr>
      <td>Cover Portrait</td>
      <td style="text-align: center">1242 x 1660 px</td>
      <td style="text-align: center">3:4</td>
    </tr>
    <tr>
      <td>Background</td>
      <td style="text-align: center">1000 x 800 px</td>
      <td style="text-align: center">10:8</td>
    </tr>
  </tbody>
</table>

<h2 id="reanote-小红书常用的图片比例">ReaNote 小红书常用的图片比例</h2>

<h3 id="reanote-小红书封面">ReaNote 小红书封面</h3>

<p>小红书笔记的封面图片，有竖版封面和横版封面两种尺寸比例。</p>

<p>大多数情况下推荐大家使用竖版小红书封面，因为同等情况下竖版封面的显示面积比横版封面多数大约40%。</p>

<p>更多的展示面积以为着更高点关注度，为了让我们分享的小红书笔记被更多人关注，建议大家选择竖版格式的小红书封面。</p>

<h3 id="reanote-小红书背景图">ReaNote 小红书背景图</h3>

<p>小红书背景图是小红书个人主页上半部分的背景图片，它的图片比例是5:4。</p>

<p>小红书背景图的左侧区域需要展示头像、昵称和个人数据，建议大家在设计背景图片时，将这个背景的视觉焦点放在居中/偏右侧的位置，以确保我们的背景内容不被遮挡。</p>

<h3 id="reanote-小红书配图">ReaNote 小红书配图</h3>

<p>和常规的内容分享平台不同，小红书笔记的内容配图都是顶置轮播滑动的形式进行展示。</p>

<p>为了确保版面的一致性，小红书提供了3种笔记配图的尺寸，分别是竖版（3:4）、方形(1:1)、横版(4:3)，并且整篇笔记只支持一种图片比例。</p>

<h2 id="reanote-common-image-ratios-for-xiaohongshu-little-red-book">ReaNote Common Image Ratios for Xiaohongshu (Little Red Book)</h2>

<h3 id="reanote-xiaohongshu-cover-images">ReaNote Xiaohongshu Cover Images</h3>

<p>Xiaohongshu note cover images come in two aspect ratios: vertical and horizontal.</p>

<p>In most cases, we recommend using vertical covers for Xiaohongshu notes, as vertical covers occupy about 40% more display area than horizontal ones under the same conditions.</p>

<p>More display area means a higher level of attention. To make your Xiaohongshu notes stand out, we suggest opting for vertical cover formats.</p>

<h3 id="reanote-xiaohongshu-background-images">ReaNote Xiaohongshu Background Images</h3>

<p>The Xiaohongshu background image is the header image at the top of your personal profile page, with an aspect ratio of 5:4.</p>

<p>Since the left side of the background image displays your avatar, username, and profile data, we recommend placing the visual focus of the background in the center or slightly to the right during design to ensure key elements remain unobstructed.</p>

<h3 id="reanote-xiaohongshu-content-images">ReaNote Xiaohongshu Content Images</h3>

<p>Unlike regular content platforms, Xiaohongshu note images are displayed in a top-positioned carousel format.</p>

<p>To maintain layout consistency, Xiaohongshu provides three image ratios for notes: vertical (3:4), square (1:1), and horizontal (4:3). Importantly, each note can only use one image ratio throughout.</p>

<h1 id="参考网址">参考网址</h1>

<ul>
  <li><a href="https://www.facebook.com/business/ads-guide/update/image">Meta Ads Guide</a></li>
  <li><a href="https://purple-photo.web.app/editor">purple-photo.web.app</a></li>
  <li><a href="https://desygner.com/blog/social-media-image-sizes-2022/">social-media-image-sizes-2022</a></li>
  <li><a href="https://www.canva.cn/sizes/newmedia/">Canvas 常用新媒体尺寸</a></li>
  <li><a href="https://www.devshots.app/?70apps_61">Dev Shots</a></li>
</ul>

<blockquote>
  <p>最后更新日期：2023年8月22日</p>
</blockquote>
 ]]></content>
  </entry>
  
  <entry>
    <title>SQL最佳实践：不要再比较 count(*) = 0</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2024/12/08/SQL_best_practices_no_more_select_count(-)_-_0.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=SQL最佳实践：不要再比较count(*)=0" />
    <published>2024-12-08T00:00:00Z</published>
    <updated>2024-12-08T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2024/12/08/SQL_best_practices_no_more_select_count(*)_>_0</id>
    <content type="html"><![CDATA[ <h1 id="sql-best-practices--dont-compare-count-with-0">SQL best practices – don’t compare count(*) with 0</h1>

<p>每次看到这样的SQL都会让我抓狂：</p>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">SELECT</span> <span class="n">u</span><span class="p">.</span><span class="o">*</span> <span class="k">FROM</span> <span class="n">users</span> <span class="n">u</span>
<span class="k">WHERE</span> <span class="mi">0</span> <span class="o">=</span> <span class="p">(</span><span class="k">SELECT</span> <span class="k">COUNT</span><span class="p">(</span><span class="o">*</span><span class="p">)</span> <span class="k">FROM</span> <span class="n">addresses</span> <span class="n">a</span> <span class="k">WHERE</span> <span class="n">a</span><span class="p">.</span><span class="n">user_id</span> <span class="o">=</span> <span class="n">u</span><span class="p">.</span><span class="n">id</span><span class="p">);</span>
</code></pre></div></div>

<p>一起来分析一下这样写有什么问题，如何避免这种写法。</p>

<p>写这样的SQL，明显是为了搜索出没有填写地址的用户列表。</p>

<p>这么写不对吗？我们是找没有地址的用户，看起来也没有什么问题，问题在于计数！！！</p>

<p>如果有个用户关联了上百万的地址，系统就要全查出来，并统计出数量！！！</p>

<p>实际上哪怕没有上百万的地址记录，如果有2个、3个，这种计数的性能损耗也是非常多余的。</p>

<p>所以，什么样的SQL才适用于这种情况呢？答案就是 <code class="language-plaintext highlighter-rouge">EXISTS</code></p>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">SELECT</span> <span class="n">u</span><span class="p">.</span><span class="o">*</span> <span class="k">FROM</span> <span class="n">users</span> <span class="n">u</span>
<span class="k">WHERE</span> <span class="k">NOT</span> <span class="k">EXISTS</span> <span class="p">(</span><span class="k">SELECT</span> <span class="k">FROM</span> <span class="n">addresses</span> <span class="n">a</span> <span class="k">WHERE</span> <span class="n">a</span><span class="p">.</span><span class="n">user_id</span> <span class="o">=</span> <span class="n">u</span><span class="p">.</span><span class="n">id</span><span class="p">);</span>
</code></pre></div></div>

<p>EXISTS (示例中是 NOT EXISTS) 会高效率检查是否至少有一条地址纪录，而不用计数。</p>

<p>当然，总有人说我这么写也没有错吧啦吧啦，是的，所以标题是最佳实践，建议大家养成好的SQL或编程习惯，只有这样才能避免极端情况下的错误。</p>

<h2 id="引用">引用</h2>

<p>转自 depesz@depesz.com 的blog，近期刚好用到，特此记录。</p>

<ul>
  <li><a href="https://www.depesz.com/2024/12/01/sql-best-practices-dont-compare-count-with-0/">blog</a></li>
</ul>
 ]]></content>
  </entry>
  
  <entry>
    <title>DevShots - 极客晒图</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/project/2024/10/01/DevShots.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=DevShots-极客晒图" />
    <published>2024-10-01T00:00:00Z</published>
    <updated>2024-10-01T00:00:00+08:00</updated>
    <id>https://www.70apps.com/project/2024/10/01/DevShots</id>
    <content type="html"><![CDATA[ <h1 id="devshots---极客晒图">DevShots - 极客晒图</h1>

<ul>
  <li>快速生成支持Markdown语法的漂亮代码截图</li>
  <li>Generate Beautiful Images of Developers Markdown Code to Share</li>
  <li>開発者の Markdown コードの美しい画像を生成して共有します</li>
  <li>개발자의 Markdown 코드의 아름다운 이미지를 생성하여 공유합니다</li>
</ul>

<p><img src="../../../../images/project/devshots.png" alt="appicon" /></p>

<ul>
  <li><a href="https://devshots.app/?f=70apps">马上访问 DevShots.app</a></li>
</ul>

<h2 id="应用介绍">应用介绍</h2>

<p>快速制作用于分享的图片，支持的功能有：</p>

<ul>
  <li>支持 Markdown 格式</li>
  <li>代码高亮</li>
  <li>截图 + 文字 拼图</li>
  <li>手机外壳图</li>
  <li>苹果应用商店手机、iPad截图</li>
  <li>支持本地保存收藏模板，方便下次使用</li>
  <li>多个中英文字体，方便快捷</li>
  <li>颜色样式丰富，一键直达，还有随机模式，看看运气怎么样</li>
</ul>

<h2 id="应用截图">应用截图</h2>

<p><img src="../../../../images/2024/59_screen_1.png" alt="应用截图1" />
<img src="../../../../images/2024/59_screen_2.png" alt="应用截图2" /></p>

<h2 id="更新历史">更新历史</h2>

<h4 id="version-241009">Version 24.10.09</h4>

<ul>
  <li>✅ Add auto size mode - DevShots</li>
  <li>🇨🇳 Add Chinese Ming Dynasty Font</li>
  <li>🪳 Updated to Html2canvas-pro</li>
  <li>⏩ Add JPEG image format download</li>
  <li>🍎 AppStore iPad Screenshot</li>
  <li>🍎 AppStore iPhone Screenshot</li>
  <li>📰 Add KingHwa Old Song Font</li>
</ul>

<h2 id="马上使用">马上使用</h2>

<ul>
  <li><a href="https://devshots.app/?f=70apps">马上访问 DevShots.app</a></li>
</ul>

<h1 id="全部项目">全部项目</h1>

<ul>
  <li><a href="/blog/project/2024/10/01/DevShots.html"><img src="/blog/images/project/devshots.png" alt="appicon" /></a><br />
DevShots</li>
</ul>

 ]]></content>
  </entry>
  
  <entry>
    <title>WINDOWS网站增加免费HTTPS证书</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/web/2024/07/13/Free_SSL_WINDOWS.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=WINDOWS网站增加免费HTTPS证书" />
    <published>2024-07-13T00:00:00Z</published>
    <updated>2024-07-13T00:00:00+08:00</updated>
    <id>https://www.70apps.com/web/2024/07/13/Free_SSL_WINDOWS</id>
    <content type="html"><![CDATA[ <h1 id="问题">问题</h1>

<p>升级我的网站到HTTPS，来支持浏览器安全认证和支持微信小程序API开发等</p>

<h1 id="step-1">Step 1</h1>

<p>登录你的阿里云控制台
（不要问我从哪里进，不知道的先去<a href="https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=smatfm0j&amp;utm_source=smatfm0j">注册阿里云</a>）</p>

<ul>
  <li>选择产品与服务 - 数字证书管理服务</li>
  <li>切换到 个人测试证书（原免费证书），再点击立即购买</li>
</ul>

<p><img src="../../../../images/2024/58_aliyun_admin.png" alt="阿里去选择购买" title="注意选择免费的那一项" /></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>每个帐号只能购买20个，免费的不支持泛域名，只能指定支持的完整明细域名
</code></pre></div></div>
<h1 id="step-2">Step 2</h1>

<p>购买完成就可以在后台 创建证书</p>

<p><img src="../../../../images/2024/58_create_ssl.png" alt="填报域名" title="在后台 创建证书" /></p>

<h1 id="step-3">Step 3</h1>

<p>验证服务器</p>

<ul>
  <li>根据要求配置DNS</li>
  <li>如果是阿里云DSN可以试试自动部署</li>
  <li>其他家的DNS需要手工添加主机记录的 _dnsauth 的记录值，完成DNS验证</li>
</ul>

<h1 id="step-3-1">Step 3</h1>

<p>申请成功即可在后台下载一个ZIP</p>

<p><img src="../../../../images/2024/58_download_select.png" alt="下载" title="SSL证书下载" /></p>

<h1 id="step-4">Step 4</h1>

<p>导入证书到服务器</p>

<p><img src="../../../../images/2024/sslimport.png" alt="导入" title="SSL证书导入" /></p>

<h1 id="step-5">Step 5</h1>

<p>指定（修改）IIS中站点的证书</p>

<ul>
  <li>指定端口为443</li>
  <li>重启IIS</li>
</ul>

<p><img src="../../../../images/2024/sslconfig.png" alt="修改" title="SSL证书修改" /></p>

<h1 id="更新">更新</h1>

<ul>
  <li>进入阿里云</li>
  <li>选择个人测试证书（原免费证书），完成0元支付</li>
  <li>创建证书，填入域名，提交申请</li>
  <li>马上查看进度，获取DNS验证设置</li>
  <li>在DNS上修改主机记录的_dnsauth的记录值</li>
  <li>完成DNS验证</li>
  <li>等待申请审批</li>
  <li>收到审批邮件后，在阿里云下载文件上传到服务器，一个证书，一个密码TXT</li>
  <li>打开管理后台，进入证书管理，进入个人节点，导入证书</li>
  <li>打开IIS管理后，进入绑定，选择新的证书，可能名字都一样，点击查看详情，确认到期日期即可</li>
  <li>需要的话可以重启IIS，用Chrome验证证书有效日期</li>
</ul>

<h1 id="参考">参考</h1>

<ol>
  <li><a href="https://help.aliyun.com/knowledge_detail/95502.html?spm=5176.2020520163.cas.36.4f574MYv4MYvfJ">Windows IIS 安装SSL证书</a></li>
  <li>https://console.dnspod.cn/dns/list/detail/70apps.com/records</li>
  <li>https://yundun.console.aliyun.com/?p=cas#/instance/test/cn-hangzhou</li>
</ol>
 ]]></content>
  </entry>
  
  <entry>
    <title>Lottie Animation 应用速查表</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2024/05/27/Lottie_Animation_Cheatsheet.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=LottieAnimation应用速查表" />
    <published>2024-05-27T00:00:00Z</published>
    <updated>2024-05-27T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2024/05/27/Lottie_Animation_Cheatsheet</id>
    <content type="html"><![CDATA[ <h1 id="lottie-动画解决方案">Lottie 动画解决方案</h1>

<h2 id="为什么要在你的产品中使用动画">为什么要在你的产品中使用动画</h2>

<p>在当今的数字设计领域，动画效果越来越受到重视，而 Lottie 动画解决方案则为我们带来了全新的可能性。</p>

<p>Lottie 是一个强大的工具，它能够让我们轻松地在各种平台上实现复杂而精美的动画。无论是移动端应用还是网页设计，Lottie 都能发挥巨大作用。</p>

<p>那么，Lottie 到底是什么呢？简单来说，它是一种将 Adobe After Effects 等软件中创建的动画导出为 JSON 格式的技术。通过这种方式，动画可以在不同的设备和平台上以高效的方式呈现，同时保持高质量的视觉效果。</p>

<p>对于初学者来说，使用 Lottie 有以下几个关键步骤。首先，我们需要在动画制作软件中设计好我们的动画。然后，利用相关的插件或工具将其导出为 Lottie 格式的 JSON 文件。接下来，在我们的项目中引入 Lottie 库，并加载和播放这个 JSON 文件。</p>

<p>Lottie 的优点众多。它具有出色的跨平台性，减少了为不同平台分别制作动画的繁琐。而且，它的文件体积相对较小，不会对应用的性能造成过大负担。</p>

<p>在实际应用中，Lottie 可以为我们的产品增添生动性和吸引力。比如，在一个应用的引导界面中使用流畅的动画来吸引用户的注意力，或者在网页中添加有趣的交互动画来提升用户体验。</p>

<p>总之，Lottie 动画解决方案是一个值得我们深入探索和学习的领域。它为我们的设计带来了更多的创意空间和可能性，让我们能够打造出更加令人惊艳的数字作品。</p>

<h2 id="马上在网站集成lottie动画">马上在网站集成Lottie动画</h2>

<p>第一步：准备工作</p>

<p>首先，确保你已经有了 Lottie 动画的 JSON 文件。这通常是通过在诸如 Adobe After Effects 等专业软件中制作动画，然后使用相关插件导出得到的。当然你也可以在文末的十大Lottie资源网站下载需要的动画JSON文件。</p>

<p>第二步：引入 Lottie 库</p>

<p>根据你使用的前端框架或技术，选择合适的 Lottie 库。可以从官方网站或相关的资源库中获取。将其添加到你的网站项目中，通常通过在 HTML 文件中添加脚本标签来实现。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;script src="js/lottie.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script&gt;
lottie.loadAnimation({
  container: element, // the dom element that will contain the animation
  renderer: 'svg',
  loop: true,
  autoplay: true,
  path: 'data.json' // the path to the animation json
});
&lt;/script&gt;
</code></pre></div></div>

<p>当然，你也可以使用CDN加速JS包</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.9.2/lottie.min.js" type="text/javascript"&gt;&lt;/script&gt;
</code></pre></div></div>

<p>第三步：加载和初始化</p>

<p>Lottie 动画在你的网页代码中，找到合适的位置来加载和初始化 Lottie 动画。使用库提供的方法，传入 JSON 文件的路径或 URL。</p>

<p>第四步：设置动画属性</p>

<p>你可以根据需要设置动画的各种属性，如播放速度、循环次数、是否自动播放等。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;script&gt;
lottie.loadAnimation({
  container: element, // the dom element
  renderer: 'svg',
  loop: true,
  autoplay: true,
  animationData: animationData, // the animation data
  // ...or if your animation contains repeaters:
  // animationData: cloneDeep(animationData), // e.g. lodash.clonedeep
  rendererSettings: {
    context: canvasContext, // the canvas context, only support "2d" context
    preserveAspectRatio: 'xMinYMin slice', // Supports the same options as the svg element's preserveAspectRatio property
    title: 'Accessible Title', // Adds SVG title element for accessible animation title
    description: 'Accessible description.', // Adds SVG desc element for accessible long description of animation
    clearCanvas: false,
    progressiveLoad: false, // Boolean, only svg renderer, loads dom elements when needed. Might speed up initialization for large number of elements.
    hideOnTransparent: true, //Boolean, only svg renderer, hides elements when opacity reaches 0 (defaults to true)
    className: 'some-css-class-name',
    id: 'some-id',
  }
});
&lt;/script&gt;
</code></pre></div></div>

<p>第五步：处理交互</p>

<p>如果希望与动画进行交互，例如点击触发特定动作，可以通过监听事件并编写相应的处理函数来实现。</p>

<p>第六步：测试与调试</p>

<p>在本地环境中进行充分的测试，确保动画能够正常播放，并且交互功能也按预期工作。如果遇到问题，查看控制台的错误信息，以便快速定位和解决。</p>

<p>第七步：优化与性能</p>

<p>考虑注意优化动画的加载和播放，避免对网站性能造成过大影响。可以考虑对 JSON 文件进行压缩等操作。</p>

<p>通过以上步骤，你就可以成功地将 Lottie 动画集成到你的网站中。它将为你的网站带来全新的活力和吸引力，给用户留下深刻的印象。</p>

<h2 id="在移动应用开发中使用">在移动应用开发中使用</h2>

<h3 id="以ios集成为例">以iOS集成为例</h3>

<p>在 Xcode 中，选择 “File” → “Add Packages…” 添加包
在URL中输入 <code class="language-plaintext highlighter-rouge">https://github.com/airbnb/lottie-spm.git</code></p>

<h1 id="更多资源">更多资源</h1>

<h2 id="设计软件及插件">设计软件及插件</h2>

<ul>
  <li>After Effect + bodymovin.zxp</li>
  <li>https://editor.lottiefiles.com/ 在线编辑创作Lottie</li>
</ul>

<h2 id="top-10-lottie-resource-website">Top 10 Lottie Resource Website</h2>

<table>
  <thead>
    <tr>
      <th>项目</th>
      <th>网址</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>🇺🇸 <a href="https://lottiefiles.com/">LottieFiles</a></td>
      <td><a href="https://lottiefiles.com/" title="nav">https://lottiefiles.com/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 <a href="https://lordicon.com/">LordIcon</a></td>
      <td><a href="https://lordicon.com/" title="nav">https://lordicon.com/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 <a href="https://flaticon.com/">FlatIcon</a></td>
      <td><a href="https://www.flaticon.com/animated-icons" title="nav">https://www.flaticon.com/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 <a href="https://finsweet.com/lottieflow">Lottieflow</a></td>
      <td><a href="https://finsweet.com/lottieflow" title="nav">https://finsweet.com/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 <a href="https://iconscout.com/lottie-animations">IconScout</a></td>
      <td><a href="https://iconscout.com/lottie-animations" title="nav">https://iconscout.com/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 <a href="https://icons8.com/illustrations/styles/animated-1">Icons8</a></td>
      <td><a href="https://icons8.com/illustrations/styles/animated-1" title="nav">https://icons8.com/illustrations/styles/animated-1</a></td>
    </tr>
    <tr>
      <td>🇺🇸 <a href="https://creattie.com/">Creattie</a></td>
      <td><a href="https://creattie.com/lottie-animated-illustrations/all?type=free&amp;orderBy=order&amp;page=1" title="nav">https://creattie.com/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 <a href="https://lottiefolder.com/">LottieFolder</a></td>
      <td><a href="https://www.lottiefolder.com/" title="nav">https://www.lottiefolder.com/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 <a href="https://lottielab.com/">LottieLab</a></td>
      <td><a href="https://www.lottielab.com/" title="nav">https://www.lottielab.com/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 <a href="https://www.motionelements.com/">MotionElements</a></td>
      <td><a href="https://www.motionelements.com/lottie" title="nav">https://www.motionelements.com/lottie</a></td>
    </tr>
  </tbody>
</table>

<h2 id="preview-lettie-animation-json-online">Preview Lettie Animation JSON Online</h2>

<ul>
  <li><a href="https://www.lottielab.com/preview">LottieLab</a></li>
  <li><a href="https://app.lottiefiles.com/preview">LottieFiles</a></li>
  <li><a href="https://lottie.cloud/app/">Lottie Cloud</a> (Only Upload)</li>
</ul>

<h2 id="json-url-for-test">JSON URL for test</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  https://assets5.lottiefiles.com/private_files/lf30_ej73j8k8.json
  https://assets5.lottiefiles.com/packages/lf20_5buYwf.json
  https://assets9.lottiefiles.com/packages/lf20_zlffgf9c.json
  https://assets10.lottiefiles.com/datafiles/yqyCt9QfT8z5kLU/data.json
  https://assets10.lottiefiles.com/packages/lf20_o4C0VO.json
  https://assets6.lottiefiles.com/datafiles/Y95p1QxekMZhR3m/data.json
  https://assets1.lottiefiles.com/datafiles/hToYrgLpHl1u69x/data.json
  https://assets10.lottiefiles.com/private_files/lf30_Twfrj1.json
  https://assets4.lottiefiles.com/packages/lf20_qFttfS.json
  https://assets3.lottiefiles.com/datafiles/LM7IXg9BbuCdrfl/data.json
  https://assets9.lottiefiles.com/packages/lf20_jhudx27y.json
  https://assets4.lottiefiles.com/private_files/lf30_yo2zavgg.json
  https://assets8.lottiefiles.com/private_files/lf30_GjhcdO.json
  https://assets3.lottiefiles.com/datafiles/HF2l8DiOyOT4dwI/data.json
  https://assets4.lottiefiles.com/packages/lf20_gghk4m0m.json
  https://assets4.lottiefiles.com/private_files/lf30_ar2kiikf.json
  https://assets6.lottiefiles.com/private_files/lf30_oxurudgk.json
  https://assets9.lottiefiles.com/packages/lf20_gwwngxas.json
  https://assets3.lottiefiles.com/packages/lf20_xjhwr9wv.json
  https://assets3.lottiefiles.com/packages/lf20_QdVQmS.json
  https://assets8.lottiefiles.com/datafiles/9zxVW04xOMfVl8F/data.json
  https://assets2.lottiefiles.com/packages/lf20_nvskuoaw.json
  https://assets10.lottiefiles.com/private_files/lf30_a4mKwA.json
  https://assets6.lottiefiles.com/packages/lf20_4tvpr5xz.json
  https://assets3.lottiefiles.com/packages/lf20_kh52Ub.json
</code></pre></div></div>

<h2 id="hack-for-json-url">hack for json URL</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>https://iconscout.com/lottie-animation-pack/confetti-explosion
https://iconscout.com/lottie-animation-pack/explosion-1
</code></pre></div></div>

<h2 id="official-github">Official Github</h2>

<ul>
  <li><a href="https://github.com/airbnb/lottie-web">Lottie for Web Github Page</a> by airbnb.com</li>
  <li><a href="https://github.com/airbnb/lottie-ios">Lottie for iOS Github Page</a> by airbnb.com</li>
  <li><a href="https://github.com/airbnb/lottie-ios">Lottie for Android Github Page</a> by airbnb.com</li>
</ul>
 ]]></content>
  </entry>
  
  <entry>
    <title>Awesome AI Video</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2024/05/27/Awesome_AI_Video.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=AwesomeAIVideo" />
    <published>2024-05-27T00:00:00Z</published>
    <updated>2024-05-27T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2024/05/27/Awesome_AI_Video</id>
    <content type="html"><![CDATA[ <h1 id="awesome-ai-video">Awesome AI Video</h1>

<blockquote>
  <p>A list of awesome AI video online tools, free to try at least.</p>
</blockquote>

<h2 id="ai-video-generator">AI Video Generator</h2>

<ul>
  <li><a href="https://lumalabs.ai/dream-machine">Luma</a> <img width="18" src="../../../../images/website.svg" alt="website" />  -  Luma Dream Machine is an AI model that makes high quality, realistic videos fast from text and images</li>
  <li><a href="https://vivago.ai/">Viva</a> <img width="18" src="../../../../images/website.svg" alt="discord bot" /> -  A free video generator.</li>
  <li><a href="https://jimeng.jianying.com/ai-tool/video/generate">JiMeng</a> <img width="18" src="../../../../images/website.svg" alt="discord bot" /> -  A video generator by BetyDance.</li>
  <li>[Haiper.AI])(https://haiper.ai/creations) <img width="18" src="../../../../images/website.svg" alt="discord bot" /> -  AI powered video creation platform.
    <h3 id="text-to-video">Text to Video</h3>
  </li>
</ul>

<blockquote>
  <p>Prompt</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>A playful tabby cat chasing a radiant butterfly amidst a sun-drenched, blooming garden. The cat's emerald eyes twinkle with joy, the butterfly's icy wings dance against the warm, sunlit backdrop, creating a whimsical tableau of nature's enchantment.
</code></pre></div></div>

<table>
  <thead>
    <tr>
      <th style="text-align: left">Luma</th>
      <th style="text-align: left">Viva</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><video width="320" height="240" controls=""><source src="../../../../images/2024/text_video_luma.mp4" type="video/mp4" />Your browser does not support the video tag.</video></td>
      <td style="text-align: left"><video width="320" height="240" controls=""><source src="../../../../images/2024/text_video_viva.mp4" type="video/mp4" />Your browser does not support the video tag.</video></td>
    </tr>
    <tr>
      <td style="text-align: left">JiMeng</td>
      <td style="text-align: left">Haiper</td>
    </tr>
  </tbody>
  <tbody>
    <tr>
      <td style="text-align: left"><video width="320" height="240" controls=""><source src="../../../../images/2024/text_video_jimeng.mp4" type="video/mp4" />Your browser does not support the video tag.</video></td>
      <td style="text-align: left"><video width="320" height="240" controls=""><source src="../../../../images/2024/text_video_haiper.mp4" type="video/mp4" />Your browser does not support the video tag.</video></td>
    </tr>
    <tr>
      <td style="text-align: left">Kling</td>
      <td style="text-align: left"> </td>
    </tr>
  </tbody>
  <tbody>
    <tr>
      <td style="text-align: left"><video width="320" height="240" controls=""><source src="../../../../images/2024/text_video_kling.mp4" type="video/mp4" />Your browser does not support the video tag.</video></td>
      <td style="text-align: left"> </td>
    </tr>
  </tbody>
</table>

<h3 id="image-to-video">Image to Video</h3>

<blockquote>
  <p>Prompt</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Smile girl
</code></pre></div></div>

<table>
  <thead>
    <tr>
      <th style="text-align: left">Luma</th>
      <th style="text-align: left">Viva</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><video width="320" height="320" controls=""><source src="../../../../images/2024/image_video_luma.mp4" type="video/mp4" />Your browser does not support the video tag.</video></td>
      <td style="text-align: left"><video width="320" height="320" controls=""><source src="../../../../images/2024/image_video_viva.mp4" type="video/mp4" />Your browser does not support the video tag.</video></td>
    </tr>
  </tbody>
</table>

<table>
  <thead>
    <tr>
      <th style="text-align: left">JiMeng</th>
      <th style="text-align: left">Haiper</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><video width="320" height="320" controls=""><source src="../../../../images/2024/image_video_jimeng.mp4" type="video/mp4" />Your browser does not support the video tag.</video></td>
      <td style="text-align: left"><video width="320" height="320" controls=""><source src="../../../../images/2024/image_video_haiper.mp4" type="video/mp4" />Your browser does not support the video tag.</video></td>
    </tr>
    <tr>
      <td style="text-align: left">Kling</td>
      <td style="text-align: left"> </td>
    </tr>
  </tbody>
  <tbody>
    <tr>
      <td style="text-align: left"><video width="320" height="320" controls=""><source src="../../../../images/2024/image_video_kling.mp4" type="video/mp4" />Your browser does not support the video tag.</video></td>
      <td style="text-align: left"> </td>
    </tr>
  </tbody>
</table>

<h2 id="ai-storyline-video-generator">AI Storyline Video Generator</h2>

<ul>
  <li><a href="https://brmgo.com/">白日梦 DayDream</a> <img width="18" src="../../../../images/website.svg" alt="website" />  - A Chinese AI Video generator with script\scene\audio.</li>
</ul>

<h2 id="showcase-with-prompt">Showcase with Prompt</h2>

<ul>
  <li><a href="https://openai.com/index/sora/">Sora</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - OpenAI Video Project</li>
  <li><a href="https://pw.shengshu-ai.com/">PixWeaver</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - A demo site of vidu</li>
  <li><a href="https://kling.kuaishou.com/">可灵 Kling</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - A killer new AI video model from KUAISHOU</li>
</ul>
 ]]></content>
  </entry>
  
  <entry>
    <title>Awesome AI image</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2024/04/29/Awesome_AI_Image.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=AwesomeAIimage" />
    <published>2024-04-29T00:00:00Z</published>
    <updated>2024-04-29T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2024/04/29/Awesome_AI_Image</id>
    <content type="html"><![CDATA[ <h1 id="awesome-ai-image">Awesome AI image</h1>

<blockquote>
  <p>A list of awesome AI image online tools, free to try at least.</p>
</blockquote>

<h2 id="contents">Contents</h2>

<ul>
  <li><a href="#text-to-image-generator">🤖 Text to Image Generator</a></li>
  <li><a href="#showcase-with-prompt">🎨 Showcase with Prompt</a></li>
</ul>

<h2 id="text-to-image-generator">Text to Image Generator</h2>

<ul>
  <li><a href="https://www.midjourney.com/app/">Midjourney</a> <img width="18" src="../../../../images/discord.svg" alt="discord bot" style="fill:#2f84f7;" /> -  The first success AI image generator product.</li>
  <li><a href="https://cn.bing.com/images/create">Bing Image Creator</a> <img width="18" src="../../../../images/website.svg" alt="discord bot" /> -  A DALL· E’s AI image generation tool by Microsoft Bing.</li>
  <li><a href="https://www.youchuanai.com/">悠船 YouchuanAI</a> <img width="18" src="../../../../images/website.svg" alt="website" /> <img width="18" src="../../../../images/mac.svg" alt="Mac App" /> <img width="18" src="../../../../images/windows.svg" alt="Widnows App" />  - A Chinese Commercial AI image generator app.</li>
  <li><a href="https://ideogram.ai/">ideogram.ai</a> <img width="18" src="../../../../images/website.svg" alt="website" />   - With reliable text rendering capabilities.</li>
  <li><a href="https://dreamina.jianying.com/">Dreamina</a> <img width="18" src="../../../../images/website.svg" alt="website" />   - Power by Bytedance.</li>
  <li><a href="https://www.qiyuai.net/">奇域 qiyu</a> <img width="18" src="../../../../images/website.svg" alt="website" />   - Focus on Chinese style, power by XiaoHuangShu.</li>
  <li><a href="https://tongyi.aliyun.com/wanxiang/">通义万相 wanxiang</a> <img width="18" src="../../../../images/website.svg" alt="website" />   - Power by Alibaba.</li>
  <li><a href="https://yige.baidu.com/">文心一格 yige</a> <img width="18" src="../../../../images/website.svg" alt="website" />   - Power by Baidu.</li>
  <li><a href="https://www.liblib.art/lib3">哩布</a> <img width="18" src="../../../../images/website.svg" alt="website" />   - Support lots of Model and SD3 Beta</li>
  <li><a href="https://www.freepik.com/ai">FreePik</a> <img width="18" src="../../../../images/website.svg" alt="website" />   - 7 Great AI Image (UX) Tools by FreePik.com</li>
</ul>

<h3 id="example">Example</h3>

<p>All example use these prompt words, from CatJourney.</p>

<blockquote>
  <p>Prompt</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>human woman with short hair, light blonde hair, grey eyes, wearing a leather armor partially covered by a brown cape, serious and determined facial expression, red flowers around, symetric, dynamic pose, Extremely Detailed, Realistic, full body hero, Full view, bright sunlight, unreal render, ultra realistic digital art, hyper realistic, 160 mm lens, soft rim light, octane render, unreal engine, volumetric lighting, dramatic light, 8k, neon ray tracing, path tracing, volumetric light, optix Cinematic post processing, cinema4d, octane render, optix, volumetric fog, global illumination, photorealism, post processing Photoshop --ar 9:16 --style raw --stylize 750 --niji 6
</code></pre></div></div>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>短发的人类女人，浅金色的头发，灰色的眼睛，穿着皮甲，部分被棕色斗篷覆盖，严肃而坚定的面部表情，周围的红色花朵，对称，动态姿势，极其详细，逼真，全身英雄，全视图，明亮的阳光，虚幻渲染，超写实的数字艺术，超写实，160毫米镜头，柔和的边缘光，辛烷值渲染， 虚幻引擎， 体积光照， 戏剧性光， 8k， 霓虹灯光线追踪， 路径追踪， 体积光， optix 电影后期处理， cinema4d， 辛烷值渲染， optix， 体积雾， 全局照明， 照片级真实感， 后期处理 Photoshop
</code></pre></div></div>
<blockquote>
  <p>Negative Prompt (option)</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(worst quality, low quality, illustration, 3d, 2d, painting, cartoons, sketch),lowres,normal quality,worstquality,EasyNegative,FastNegativeV2,pubic hair,bad body,deformed,mutated,mutation,ugly,text,logo,poorly drawn hands,mutated hands and fingers,mutated hands,bad hands,malformed hands,too many fingers,missing fingers,fused fingers,extra legs,extra limb,extra arms,disconnected limbs,floating limbs,malformed limbs,missing limb,cross-eyed,bad feet,poorly drawn face,disfigured
</code></pre></div></div>

<table>
  <thead>
    <tr>
      <th style="text-align: left">Midjourney</th>
      <th style="text-align: left">Bing Image Creator</th>
      <th style="text-align: left">悠船 YouchuanAI</th>
      <th style="text-align: left">ideogram.ai</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><img src="https://ugc.hitv.com/32/240429142008149f7e1afc60a2a26670c1d25c3ed22f/0JnNas0.png" alt="generated by midjourney" width="160" /></td>
      <td style="text-align: left"><img src="https://ugc.hitv.com/32/240429142007149f7e1afc60a2a26670c1d25c3ed22f/Gqd6Lz0.png" alt="generated by Bing Image Creator" width="160" /></td>
      <td style="text-align: left"><img src="https://ugc.hitv.com/32/240429142011149f7e1afc60a2a26670c1d25c3ed22f/N8xJF70.png" alt="generated by YouchuanAI" width="160" /></td>
      <td style="text-align: left"><img src="https://ugc.hitv.com/32/240429142008149f7e1afc60a2a26670c1d25c3ed22f/hOyOhM0.png" alt="generated by ideogram" width="160" /></td>
    </tr>
  </tbody>
</table>

<table>
  <thead>
    <tr>
      <th style="text-align: left">Dreamina</th>
      <th style="text-align: left">奇域 qiyu</th>
      <th style="text-align: left">通义万相 wanxiang</th>
      <th style="text-align: left">文心一格 yige</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><img src="https://ugc.hitv.com/32/240429142007149f7e1afc60a2a26670c1d25c3ed22f/maQLJp0.png" alt="generated by dreamina" width="160" /></td>
      <td style="text-align: left"><img src="https://ugc.hitv.com/32/240429142009149f7e1afc60a2a26670c1d25c3ed22f/jshzdT0.png" alt="generated by qiyu" width="160" /></td>
      <td style="text-align: left"><img src="https://ugc.hitv.com/32/240429142010149f7e1afc60a2a26670c1d25c3ed22f/Qz2aCV0.png" alt="generated by Alibaba TongYiWanXiang" width="160" /></td>
      <td style="text-align: left"><img src="https://ugc.hitv.com/32/240429142010149f7e1afc60a2a26670c1d25c3ed22f/b9OD410.png" alt="generated by Baidu Yige" width="160" /></td>
    </tr>
  </tbody>
</table>

<table>
  <thead>
    <tr>
      <th style="text-align: left">哩布(SD3)</th>
      <th style="text-align: left"> </th>
      <th style="text-align: left"> </th>
      <th style="text-align: left"> </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><img src="https://ugc.hitv.com/32/240429142006149f7e1afc60a2a26670c1d25c3ed22f/OEmi2h0.png" alt="generated by liblib.art" width="160" /></td>
      <td style="text-align: left"> </td>
      <td style="text-align: left"> </td>
      <td style="text-align: left"> </td>
    </tr>
  </tbody>
</table>

<h2 id="showcase-with-prompt">Showcase with Prompt</h2>

<ul>
  <li><a href="https://civitai.com/images/">Civitai</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - No.1 AI Image Models Website</li>
  <li><a href="https://www.liblib.art/inspiration">哩布 Liblib</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - No.1 AI Image Models Website in China</li>
  <li><a href="https://lib.kalos.art/">Kalos Art lib</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - Your Ultimate AI Artistic Style Library</li>
  <li><a href="https://lexica.art/">Lexica</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - Search and Generate AI images</li>
  <li><a href="https://promptfolder.com/midjourney-prompt-helper/">Prompt Folder</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - Midjourney Prompt Generator</li>
  <li><a href="https://promptomania.com/">Prompt Mania</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - AI art community with an online prompt builder</li>
  <li><a href="https://catjourney.life/">Cat Journey</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - Amazing AI images and prompt</li>
</ul>

<h3 id="more-ai-prompts-websites">More AI Prompts Websites</h3>

<ul>
  <li><a href="https://prompthero.com/">Prompt Hero</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - Maybe the biggest prompt website</li>
  <li><a href="https://promptbase.com/">Prompt Base</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - Sell your prompts online</li>
  <li><a href="https://artiversehub.ai/prompt-marketplace">Artiverse Hub</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - Free AI Art Prompt market is offering Multi-Platform ai prompts</li>
</ul>

<h3 id="more-prompts-online-tools">More Prompts Online Tools</h3>

<ul>
  <li><a href="https://betterwaifu.com/novelai-sex-prompts/">Sex Prompts</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - A lot of pose keyword 🔞</li>
  <li><a href="https://replicate.com/pharmapsychotic/clip-interrogator">Clip Interrogator</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - a prompt engineering tool to optimize text prompts to match a given image</li>
  <li><a href="https://www.anysue.com/interrogator.html">CLIP Interrogator 2.1</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - a other prompt engineering service site</li>
  <li><a href="https://imagedescriptiongenerator.xyz/">Image AI Description</a> <img width="18" src="../../../../images/website.svg" alt="website" /> - a AI driven image description generator</li>
</ul>

<h1 id="more-resources">More Resources</h1>
<ul>
  <li><a href="https://colab.research.google.com/github/pharmapsychotic/clip-interrogator/blob/main/clip_interrogator.ipynb">Google Colab : CLIP Interrogator 2.1</a></li>
</ul>
 ]]></content>
  </entry>
  
  <entry>
    <title>2024最全AppStore截图尺寸大全</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2024/03/12/AppStore_ScreenShot_Size_2024.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=2024最全AppStore截图尺寸大全" />
    <published>2024-03-12T00:00:00Z</published>
    <updated>2024-03-12T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2024/03/12/AppStore_ScreenShot_Size_2024</id>
    <content type="html"><![CDATA[ <h1 id="2024最全appstore截图尺寸大全">2024最全AppStore截图尺寸大全</h1>

<h2 id="iphone">iPhone</h2>

<h3 id="iphone-screenshots">iPhone ScreenShots</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: center">Device Display</th>
      <th style="text-align: center">Portrait Size</th>
      <th style="text-align: center">Landscape Size</th>
      <th style="text-align: left">More</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">iPhone 6.7”</td>
      <td style="text-align: center">1290 x 2796</td>
      <td style="text-align: center">2796 x 1290</td>
      <td style="text-align: left">6.7“ or 6.5”</td>
    </tr>
    <tr>
      <td style="text-align: center">iPhone 6.5”</td>
      <td style="text-align: center">1284 x 2778 <br />1242 x 2688</td>
      <td style="text-align: center">2778 x 1284 <br />2688 x 1242</td>
      <td style="text-align: left">6.7“ or 6.5”</td>
    </tr>
    <tr>
      <td style="text-align: center">iPhone 6.1”</td>
      <td style="text-align: center">1179 x 2556</td>
      <td style="text-align: center">2556 x 1179</td>
      <td style="text-align: left">reuse</td>
    </tr>
    <tr>
      <td style="text-align: center">iPhone 5.8”</td>
      <td style="text-align: center">1170 x 2532 <br />1125 x 2436 <br />1080 x 2340</td>
      <td style="text-align: center">2532 x 1170 <br />2436 x 1125 <br />2340 x 1080</td>
      <td style="text-align: left">reuse</td>
    </tr>
    <tr>
      <td style="text-align: center">iPhone 5.5”</td>
      <td style="text-align: center">1242 x 2208</td>
      <td style="text-align: center">2208 x 1242</td>
      <td style="text-align: left">must</td>
    </tr>
    <tr>
      <td style="text-align: center">iPhone 4.7”</td>
      <td style="text-align: center">750 x 1334</td>
      <td style="text-align: center">1334 x 750</td>
      <td style="text-align: left">reuse</td>
    </tr>
    <tr>
      <td style="text-align: center">iPhone 4.0”</td>
      <td style="text-align: center">640 x 1136</td>
      <td style="text-align: center">1136 x 640</td>
      <td style="text-align: left">reuse</td>
    </tr>
    <tr>
      <td style="text-align: center">iPhone 3.5”</td>
      <td style="text-align: center">640 x 960</td>
      <td style="text-align: center">960 x 640</td>
      <td style="text-align: left">reuse</td>
    </tr>
  </tbody>
</table>

<blockquote>
  <p>all size are device with status bar</p>
</blockquote>

<h3 id="iphone-devices">iPhone Devices</h3>

<table>
  <thead>
    <tr>
      <th>Device Display</th>
      <th style="text-align: left">Devices</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>iPhone 6.7”</td>
      <td style="text-align: left">iPhone 15 Pro Max<br />iPhone 15 Plus<br />iPhone 14 Pro Max</td>
    </tr>
    <tr>
      <td>iPhone 6.5”</td>
      <td style="text-align: left">iPhone 14 Plus<br />iPhone 13 Pro Max<br />iPhone 12 Pro Max<br />iPhone 11 Pro Max<br />iPhone 11<br />iPhone XS Max<br />iPhone XR</td>
    </tr>
    <tr>
      <td>iPhone 6.1”</td>
      <td style="text-align: left">iPhone 15 Pro<br />iPhone 15<br />iPhone 14 Pro</td>
    </tr>
    <tr>
      <td>iPhone 5.8”</td>
      <td style="text-align: left">iPhone 14<br />iPhone 13 Pro<br />iPhone 13<br />iPhone 13 mini<br />iPhone 12 Pro<br />iPhone 12<br />iPhone 12 mini<br />iPhone 11 Pro<br />iPhone XS<br />iPhone X</td>
    </tr>
    <tr>
      <td>iPhone 5.5”</td>
      <td style="text-align: left">iPhone 8 Plus<br />iPhone 7 Plus<br />iPhone 6s Plus</td>
    </tr>
    <tr>
      <td>iPhone 4.7”</td>
      <td style="text-align: left">iPhone SE (3rd,2nd)<br />iPhone 8<br />iPhone 7<br />iPhone 6s<br />iPhone 6</td>
    </tr>
    <tr>
      <td>iPhone 4.0”</td>
      <td style="text-align: left">iPhone SE (1st)</td>
    </tr>
    <tr>
      <td>iPhone 3.5”</td>
      <td style="text-align: left">iPhone 4s</td>
    </tr>
  </tbody>
</table>

<h2 id="ipad">iPad</h2>

<h3 id="ipad-screenshots">iPad ScreenShots</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: center">Device Display</th>
      <th style="text-align: center">Portrait Size</th>
      <th style="text-align: center">Landscape Size</th>
      <th style="text-align: left">More</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">iPad 12.9”</td>
      <td style="text-align: center">2048 x 2732</td>
      <td style="text-align: center">2732 x 2048</td>
      <td style="text-align: left">must</td>
    </tr>
    <tr>
      <td style="text-align: center">iPad 11.0”</td>
      <td style="text-align: center">1488 x 2266<br />1668 x 2388<br />1640 x 2360</td>
      <td style="text-align: center">2266 x 1488<br />2388 x 1668<br />2360 x 1640</td>
      <td style="text-align: left">reuse</td>
    </tr>
    <tr>
      <td style="text-align: center">iPad 10.5”</td>
      <td style="text-align: center">1668 x 2224</td>
      <td style="text-align: center">2224 x 1668</td>
      <td style="text-align: left">reuse</td>
    </tr>
    <tr>
      <td style="text-align: center">iPad 9.7”</td>
      <td style="text-align: center">1536 x 2048<br />768 x 1024</td>
      <td style="text-align: center">2048 x 1536<br />1024 x 768</td>
      <td style="text-align: left">reuse</td>
    </tr>
  </tbody>
</table>

<blockquote>
  <p>all size are device with status bar</p>
</blockquote>

<h3 id="ipad-devices">iPad Devices</h3>

<table>
  <thead>
    <tr>
      <th>Device Display</th>
      <th style="text-align: left">Devices</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>iPad 12.9”</td>
      <td style="text-align: left">iPad Pro (2nd)</td>
    </tr>
    <tr>
      <td>iPad 11.0”</td>
      <td style="text-align: left">iPad Pro (4th, 3rd)<br />iPad (10th)<br />iPad Air (5th, 4th)<br />iPad mini (6th)</td>
    </tr>
    <tr>
      <td>iPad 10.5”</td>
      <td style="text-align: left">iPad (9th, 8th, 7th)<br />iPad Pro<br />iPad Air</td>
    </tr>
    <tr>
      <td>iPad 9.7”</td>
      <td style="text-align: left">iPad<br />iPad mini</td>
    </tr>
  </tbody>
</table>

<h2 id="more-device">More Device</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: center">Device Display</th>
      <th style="text-align: center">Screenshot Size</th>
      <th style="text-align: left">More</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">Mac</td>
      <td style="text-align: center">1280 x 800<br />1440 x 900<br />2560 x 1600<br />2880 x 1800</td>
      <td style="text-align: left">Must any one</td>
    </tr>
    <tr>
      <td style="text-align: center">Apple TV</td>
      <td style="text-align: center">1920 x 1080<br />3840 x 2160</td>
      <td style="text-align: left">Must any one</td>
    </tr>
    <tr>
      <td style="text-align: center">Apple Vision Pro</td>
      <td style="text-align: center">3840 X 2160</td>
      <td style="text-align: left">Must any one</td>
    </tr>
    <tr>
      <td style="text-align: center">Apple Watch</td>
      <td style="text-align: center">410 x 502<br />396 x 484<br />368 x 448<br />312 x 390</td>
      <td style="text-align: left">Must any one</td>
    </tr>
  </tbody>
</table>

<h1 id="2024最全appstore预览视频尺寸大全">2024最全AppStore预览视频尺寸大全</h1>

<p>The general iOS video guidelines include:</p>

<ul>
  <li>视频长度在 15 秒到 30 秒（minimum length of 15 seconds and max length of 30 seconds for a video）</li>
  <li>文件大小最大 500 MB（video size up to 500 MB）</li>
  <li>视频格式为 H.264 和 ProRes 422（Two accepted formats - H.264 and ProRes 422 (HQ only)）</li>
  <li>后缀名支持.mov,.m4v,mp4（Supported extensions - .mov, .m4v, .mp4 for H.264 and .mov for ProRes 422）</li>
</ul>

<h2 id="iphone-1">iPhone</h2>

<h3 id="iphone-preview-video">iPhone Preview Video</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: center">Device Display</th>
      <th style="text-align: center">Portrait Size</th>
      <th style="text-align: center">Landscape Size</th>
      <th style="text-align: left">More</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">iPhone 6.7”</td>
      <td style="text-align: center">886 x 1920</td>
      <td style="text-align: center">1920 x 886</td>
      <td style="text-align: left">6.7“ or 6.5”</td>
    </tr>
    <tr>
      <td style="text-align: center">iPhone 6.5”</td>
      <td style="text-align: center">886 x 1920</td>
      <td style="text-align: center">1920 x 886</td>
      <td style="text-align: left">6.7“ or 6.5”</td>
    </tr>
  </tbody>
</table>

<h2 id="ipad-mac-apple-tv">iPad, Mac, Apple TV</h2>

<h3 id="ipad-preview-video">iPad Preview Video</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: center">Device Display</th>
      <th style="text-align: center">Portrait Size</th>
      <th style="text-align: center">Landscape Size</th>
      <th style="text-align: left">More</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">iPad 12.9”</td>
      <td style="text-align: center">1200 x 1600</td>
      <td style="text-align: center">1600 x 1200</td>
      <td style="text-align: left">must</td>
    </tr>
  </tbody>
</table>

<h3 id="mac-preview-video">Mac Preview Video</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: center">Device Display</th>
      <th style="text-align: center">Portrait Size</th>
      <th style="text-align: center">Landscape Size</th>
      <th style="text-align: left">More</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">Mac</td>
      <td style="text-align: center">-</td>
      <td style="text-align: center">1920 x 1080</td>
      <td style="text-align: left">must</td>
    </tr>
  </tbody>
</table>

<h3 id="apple-tv-preview-video">Apple TV Preview Video</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: center">Device Display</th>
      <th style="text-align: center">Portrait Size</th>
      <th style="text-align: center">Landscape Size</th>
      <th style="text-align: left">More</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">Apple TV</td>
      <td style="text-align: center">-</td>
      <td style="text-align: center">1920 x 1080</td>
      <td style="text-align: left">must</td>
    </tr>
  </tbody>
</table>

<h1 id="参考网址">参考网址</h1>

<ul>
  <li><a href="https://developer.apple.com/help/app-store-connect/reference/screenshot-specifications">Screenshot specifications</a></li>
</ul>

<blockquote>
  <p>最后更新日期：2024年3月12日</p>
</blockquote>
 ]]></content>
  </entry>
  
  <entry>
    <title>Mac M1 上体验 AI 作图保姆教程</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2023/09/18/Run_Stable_Diffusion_on_Mac.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=MacM1上体验AI作图保姆教程" />
    <published>2023-09-18T00:00:00Z</published>
    <updated>2023-09-18T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2023/09/18/Run_Stable_Diffusion_on_Mac</id>
    <content type="html"><![CDATA[ <p>本文介绍如何在Mac M1 Pro上通过苹果Core ML来安装和运行Stable Diffusion。</p>

<p>How to Install and Run Stable Diffusion on Your M1 Macbook Pro using Core ML.</p>

<h1 id="苹果的开源工具包">苹果的开源工具包</h1>

<p>苹果开源了一个工具包 <a href="https://github.com/apple/ml-stable-diffusion">Core ML Stable Diffusion</a> ，使用Core ML（苹果的机器学习模型）来实现AI作图，通过这个工具包实现在苹果芯片设备上运行 Stable Diffusion。</p>

<p>这个工具包包括：</p>

<p><code class="language-plaintext highlighter-rouge">python_coreml_stable_diffusion</code>, a Python package for converting PyTorch models to Core ML format and performing image generation with Hugging Face diffusers in Python</p>

<p><code class="language-plaintext highlighter-rouge">StableDiffusion</code>, a Swift package that developers can add to their Xcode projects as a dependency to deploy image generation capabilities in their apps. The Swift package relies on the Core ML model files generated by python_coreml_stable_diffusion</p>

<h2 id="安装和准备工作">安装和准备工作</h2>

<h3 id="安装运行环境软件">安装运行环境软件：</h3>

<ul>
  <li>Install Homebrew package manager</li>
  <li>Install Rust</li>
  <li>Install pyenv</li>
  <li>Install Anaconda</li>
  <li>Install Python3.8</li>
</ul>

<h3 id="创建-python-运行期环境">创建 Python 运行期环境</h3>

<p>创建运行期环境 <code class="language-plaintext highlighter-rouge">coreml_stable_diffusion</code></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> conda create -n coreml_stable_diffusion python=3.8 -y
</code></pre></div></div>
<p>切换启用运行期环境 <code class="language-plaintext highlighter-rouge">coreml_stable_diffusion</code></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>conda activate coreml_stable_diffusion
</code></pre></div></div>

<h3 id="下载软件包安装依赖-python-包">下载软件包，安装依赖 Python 包</h3>

<p>下载 GitHub 源码包，<a href="https://github.com/apple/ml-stable-diffusion">Core ML Stable Diffusion</a> ，解压到本地文件夹，或使用 git 命令 Clone 项目。</p>

<p>进入指定路径</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir ~/Desktop/
</code></pre></div></div>

<p>Clone 克隆项目代码</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone https://github.com/apple/ml-stable-diffusion.git
</code></pre></div></div>

<p>进入程序主路径</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd ml-stable-diffusion
</code></pre></div></div>

<p>安装依赖 Python 包</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pip install -e .
</code></pre></div></div>

<h2 id="命令行登录-huggingface">命令行登录 HuggingFace</h2>

<p>注册并取得 HuggingFace.co 的授权 API Token，我测试的 Readonly type，一切OK。</p>

<p>通过终端登录 HuggingFace</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>huggingface-cli login
</code></pre></div></div>
<p>输入申请的API Token</p>

<h2 id="转换模型">转换模型</h2>

<p>创建文件夹 AI_MODELS</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir AI_MODELS
</code></pre></div></div>

<p>软件包使用的默认模型是 CompVis/Default Model is v1.4，下载并转化默认模型为苹果专用ML模型，存储在当前文件夹里的 AI_MODELS</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python -m python_coreml_stable_diffusion.torch2coreml \
    --convert-unet  \
    --convert-text-encoder  \
    --convert-safety-checker  \
    -o ./AI_MODELS
</code></pre></div></div>

<p>其他模型可以在网站上查找，并复制模型的版本标识，如 CompVis/stable-diffusion-v1-5</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python -m python_coreml_stable_diffusion.torch2coreml  \
    --convert-unet  \
    --convert-text-encoder  \
    --convert-safety-checker  \
    -o ./AI_MODELS \
    --model-version CompVis/stable-diffusion-v1-5
</code></pre></div></div>

<p>下载和转换时间较长，我的机器需要2、3个小时。</p>

<h2 id="测试生成">测试生成</h2>

<p>创建文件夹 AI_IMAGES</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir AI_IMAGES
</code></pre></div></div>

<p>测试一下，见证奇迹的时刻</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python -m python_coreml_stable_diffusion.pipeline \
          -i ./AI_MODELS \
          -o ./AI_IMAGES \
          --compute-unit CPU_AND_GPU \
          --seed 888 \
          --prompt "a man riding a horse on Mar."
</code></pre></div></div>

<p>生成时间较长，我的机器需要20分钟。如果有问题，可以使用参数 –compute-unit CPU_ONLY ，时间更长。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python -m python_coreml_stable_diffusion.pipeline \
          -i ./AI_MODELS \
          -o ./AI_IMAGES \
          --compute-unit CPU_ONLY \
          --seed 888 \
          --prompt "a man riding a horse on Mar."
          --negative-prompt "nsfw"
</code></pre></div></div>

<h2 id="管理咒语prompt">管理咒语（Prompt）</h2>

<p>为了方便管理生成的图像和Prompt，我重写了生成的脚本，替换 pipeline.py 中的 get_image_path 过程，按日期存储相关的图像和脚本及Prompt</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>def get_image_path(args, **override_kwargs):
    """ mkdir output folder and encode metadata in the filename
    """
    x = datetime.datetime.now()

    out_folder = f"{override_kwargs.get('model_version', None) or args.model_version.replace('/', '__')}"
    out_folder = x.strftime("%Y") + x.strftime("%m") + x.strftime("%d") + "/" + out_folder
    out_folder = os.path.join(args.o, out_folder)
    os.makedirs(out_folder, exist_ok=True)

    out_fname = x.strftime("%Y") + x.strftime("%m") + x.strftime("%d") + "_" +  x.strftime("%H") +  x.strftime("%M") +  x.strftime("%S") +"_Seed_"
    out_fname += f"{override_kwargs.get('seed', None) or args.seed}"
    if args.scheduler is not None:
        out_fname += f"_customScheduler_{override_kwargs.get('scheduler', None) or args.scheduler}"
        out_fname += f"_numInferenceSteps{override_kwargs.get('num_inference_steps', None) or args.num_inference_steps}"


    out_path_png = os.path.join(out_folder, out_fname + ".png")
    out_path_text = os.path.join(out_folder, out_fname + ".txt")
    logger.info(f"Saving python script to {out_path_text}")
    py_script = f"python -m python_coreml_stable_diffusion.pipeline \\\n\
    -i ./ai_model \\\n\
    -o ./ai_image \\\n\
    --compute-unit {args.compute_unit} \\\n\
    --seed {args.seed} \\\n\
    --prompt \"{args.prompt}\" \\\n\
    --negative-prompt \"{args.negative_prompt}\" \\\n\
    --model-version {args.model_version}"
    file = open(out_path_text, 'w')
    file.write("python command:\n\n")
    file.write(py_script)
    file.write("\n\n")
    file.write("prompt:\n\n")
    file.write(args.prompt)
    file.write("\n\n")
    file.write("negative-prompt:\n\n")
    file.write(args.negative_prompt)
    file.write("\n\n")
    file.close()

    return out_path_png  
</code></pre></div></div>

<p><img src="../../../../images/2023/2023-09-26-01.png" alt="screen" /></p>

<p>也可以在我克隆的项目里直接下载。</p>

<p><a href="https://github.com/CheneyLin/ml-stable-diffusion/blob/main/python_coreml_stable_diffusion/pipeline.py">github.com/CheneyLin</a></p>

<p>我建了一个 Notion 模板来存储生成的图像和Prompt，方便使用。</p>

<p><img src="../../../../images/2023/2023-09-26-02.png" alt="screen" /></p>

<p><a href="https://linchangyu.notion.site/AI-Image-Prompt-List-342abeebfaa5467bb2ac2a950b6c56dd?pvs=4">AI-Image-Prompt-List</a></p>

<h1 id="webui">WebUI</h1>

<p><a href="https://github.com/AUTOMATIC1111/stable-diffusion-webui">Stable Diffusion webUI</a> 需要 python 版本&gt;=3.10</p>

<h3 id="下载">下载</h3>

<p>Clone 克隆项目代码</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
</code></pre></div></div>

<p>进入程序主路径</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd Stable-diffusion-webui
</code></pre></div></div>

<h3 id="创建-python-运行期环境-1">创建 Python 运行期环境</h3>

<p>创建运行期环境 <code class="language-plaintext highlighter-rouge">sd_webui</code></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>conda create -n sd_webui python=3.10 -y
</code></pre></div></div>
<p>切换启用运行期环境 <code class="language-plaintext highlighter-rouge">sd_webui</code></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>conda activate sd_webui
</code></pre></div></div>

<h3 id="下载模型文件">下载模型文件</h3>

<p>将下载好的模型文件（ Stable Diffusion models/checkpoints ）放到 <code class="language-plaintext highlighter-rouge">stable-diffusion-webui/models/Stable-diffusion</code></p>

<p>常用模型下载地址：</p>

<ul>
  <li>Stable DIffusion 1.4 (<a href="https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt">sd-v1-4.ckpt</a>)</li>
  <li>Stable Diffusion 1.5 (<a href="https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.ckpt">v1-5-pruned-emaonly.ckpt</a>)</li>
  <li>Stable Diffusion 1.5 Inpainting (<a href="https://huggingface.co/runwayml/stable-diffusion-inpainting/resolve/main/sd-v1-5-inpainting.ckpt">sd-v1-5-inpainting.ckpt</a>)</li>
</ul>

<p>最新的大图模型（Stable Diffusion 2.0 and 2.1，支持768x768以上）：</p>

<ul>
  <li>Stable Diffusion 2.0 (<a href="https://huggingface.co/stabilityai/stable-diffusion-2/resolve/main/768-v-ema.ckpt">768-v-ema.ckpt</a>)</li>
  <li>Stable Diffusion 2.1 (<a href="https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-ema-pruned.ckpt">v2-1_768-ema-pruned.ckpt</a>)</li>
</ul>

<h3 id="启动">启动</h3>

<p>首次启动会安装依赖软件，耐心等候</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> ./webui.sh
</code></pre></div></div>

<p>然后会拉起浏览器访问 http://127.0.0.1:7860/</p>

<h1 id="参考网址">参考网址</h1>

<ul>
  <li><a href="https://github.com/apple/ml-stable-diffusion">Core ML Stable Diffusion</a></li>
  <li><a href="https://github.com/AUTOMATIC1111/stable-diffusion-webui">Stable Diffusion webUI</a></li>
  <li><a href="https://www.chrisjmendez.com/2023/01/07/run-stable-diffusion-on-macbook-pro-m1-core-ml/">Run Stable Diffusion locally on your M1 Macbook Pro</a>.</li>
  <li><a href="https://decentralizedcreator.com/what-is-stable-diffusion-seed-and-how-to-use-it">What is Stable Diffustion Seed</a></li>
</ul>
 ]]></content>
  </entry>
  
  <entry>
    <title>Top 10 开发者分享漂亮代码美化截图的在线工具</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2023/09/05/Top_Tools_For_Share_Your_Code.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=Top10开发者分享漂亮代码美化截图的在线工具" />
    <published>2023-09-05T00:00:00Z</published>
    <updated>2023-09-05T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2023/09/05/Top_Tools_For_Share_Your_Code</id>
    <content type="html"><![CDATA[ <p>作为一名程序员，您大部分时间都花在创建代码上。如果您在团队中工作或需要反馈，您可以与同事共享您的代码。</p>

<p>无论你的代码写得多好，它仍然看起来很乏味。仅仅因为有一行又一行的技术术语，并不意味着你不能美化它。</p>

<p>您需要的是一个代码片段图像生成器。这是一个非常聪明的工具，可以将代码片段（你知道，那些编程魔法的小片段）转换成引人注目的视觉效果。</p>

<p>这些图片有精致的字体、充满活力的亮点，甚至还有多变的背景。我们称之为代码艺术。</p>

<p>社交媒体有很多关于美学的内容。无论是旅行照片还是技术内容，其有吸引力的视觉呈现都很重要。</p>

<p>代码片段图像生成器可帮助您创建具有视觉吸引力且易于共享的代码图像，从而提高参与度和理解力。</p>

<p>下面是一些工具帮助你达到快速高效分享代码、甚至截图的目标。</p>

<h1 id="代码截图在线工具">代码截图在线工具</h1>

<table>
  <thead>
    <tr>
      <th style="text-align: center">Site</th>
      <th style="text-align: center">移动版本</th>
      <th>免费/收费</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center"><a href="https://devshots.app/?70apps">DevShots</a></td>
      <td style="text-align: center">支持</td>
      <td>免费</td>
    </tr>
    <tr>
      <td style="text-align: center"><a href="https://snappify.com/">Snappify.io</a></td>
      <td style="text-align: center">不支持</td>
      <td>高级功能收费，14天试用</td>
    </tr>
    <tr>
      <td style="text-align: center"><a href="https://carbon.now.sh/">Carbon</a></td>
      <td style="text-align: center">支持</td>
      <td>免费</td>
    </tr>
    <tr>
      <td style="text-align: center"><a href="https://ray.so/">Ray.so</a></td>
      <td style="text-align: center">支持</td>
      <td>免费</td>
    </tr>
    <tr>
      <td style="text-align: center"><a href="https://codekeep.io/screenshot">CodeKeep</a></td>
      <td style="text-align: center">支持</td>
      <td>高级功能收费</td>
    </tr>
    <tr>
      <td style="text-align: center"><a href="https://codeimg.io/">CodeImg.io</a></td>
      <td style="text-align: center">支持</td>
      <td>免费</td>
    </tr>
    <tr>
      <td style="text-align: center"><a href="https://codeimg.io/">InstaCode</a></td>
      <td style="text-align: center">支持</td>
      <td>免费</td>
    </tr>
    <tr>
      <td style="text-align: center"><a href="https://codesnap.dev/">CodeSnap</a></td>
      <td style="text-align: center">不支持</td>
      <td>高级功能收费</td>
    </tr>
    <tr>
      <td style="text-align: center"><a href="https://app.codeimage.dev/">CodeImage</a></td>
      <td style="text-align: center">支持</td>
      <td>免费</td>
    </tr>
    <tr>
      <td style="text-align: center"><a href="https://chalk.ist/">Chalkist</a></td>
      <td style="text-align: center">不支持</td>
      <td>免费</td>
    </tr>
  </tbody>
</table>

<h2 id="devshots">DevShots</h2>

<p><a href="https://devshots.app/?70apps">DevShots.app</a> 帮助开发者快速生成代码分享图片，基于浏览器的保存机制，可以方便地重复上次的配置。而且内置了众多社交媒体的模板和水印，非常适合为 Instagram、Facebook 和 Twitter 等社交媒体平台创建分享图片。</p>

<p><img src="../../../../images/2023/devshots-1701085290248.png" alt="应用截图" /></p>

<h2 id="carbon">Carbon</h2>

<h1 id="包含在工具集中的">包含在工具集中的</h1>

<table>
  <thead>
    <tr>
      <th style="text-align: center">Site</th>
      <th style="text-align: center">移动版本</th>
      <th>免费/收费</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center"><a href="https://pika.style/templates/code-image">Pika</a></td>
      <td style="text-align: center">不支持</td>
      <td>高级功能收费</td>
    </tr>
    <tr>
      <td style="text-align: center"><a href="https://codebeautify.org/code-to-image-converter">Codebeautify</a></td>
      <td style="text-align: center">不支持</td>
      <td>免费</td>
    </tr>
    <tr>
      <td style="text-align: center"><a href="https://10015.io/tools/code-to-image-converter">10015.io</a></td>
      <td style="text-align: center">支持</td>
      <td>免费</td>
    </tr>
    <tr>
      <td style="text-align: center"><a href="https://tweetlet.net/code">CodeLet</a></td>
      <td style="text-align: center">支持</td>
      <td>免费</td>
    </tr>
  </tbody>
</table>

<h1 id="代码片断软件">代码片断软件</h1>

<table>
  <thead>
    <tr>
      <th style="text-align: center">App</th>
      <th style="text-align: left">环境</th>
      <th style="text-align: center">免费/收费</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center"><a href="https://pieces.app/">Pieces</a></td>
      <td style="text-align: left">Chrome、VSCode、JetBrains IDE</td>
      <td style="text-align: center">免费</td>
    </tr>
    <tr>
      <td style="text-align: center"><a href="https://www.dangercove.com/petrify/">Petrify</a></td>
      <td style="text-align: left">MacOS</td>
      <td style="text-align: center">付费</td>
    </tr>
  </tbody>
</table>

<h1 id="参考网址">参考网址</h1>

<ul>
  <li><a href="https://dev.to/estheragbaje/6-awesome-tools-that-turn-code-snippets-to-images-54fo">6 Awesome Tools</a></li>
  <li><a href="https://geekflare.com/code-snippet-image-generator/">Turn Code Snippets into Beautiful Images to Share on Social Media</a></li>
</ul>
 ]]></content>
  </entry>
  
  <entry>
    <title>2023最全社交媒体发布图片尺寸大全</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2023/08/22/Social_Media_Image_Size_2023.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=2023最全社交媒体发布图片尺寸大全" />
    <published>2023-08-22T00:00:00Z</published>
    <updated>2023-08-22T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2023/08/22/Social_Media_Image_Size_2023</id>
    <content type="html"><![CDATA[ <h1 id="常用规范">常用规范</h1>

<blockquote>
  <p>Social Media Image Size Guide 2023</p>
</blockquote>

<table>
  <thead>
    <tr>
      <th style="text-align: center">Media</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">Facebook Square</td>
      <td style="text-align: center">1200 x 1200 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td style="text-align: center">Facebook Landscape</td>
      <td style="text-align: center">1200 x 630 px</td>
      <td style="text-align: center">1.905:1</td>
    </tr>
    <tr>
      <td style="text-align: center">Facebook Portrait</td>
      <td style="text-align: center">630 x 1200 px</td>
      <td style="text-align: center">0.525:1</td>
    </tr>
    <tr>
      <td style="text-align: center">Instagram Square</td>
      <td style="text-align: center">1080 x 1080 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td style="text-align: center">Instagram Landscape</td>
      <td style="text-align: center">1080 x 566 px</td>
      <td style="text-align: center">1.908:1</td>
    </tr>
    <tr>
      <td style="text-align: center">Instagram Portrait</td>
      <td style="text-align: center">1080 x 1350 px</td>
      <td style="text-align: center">0.8:1</td>
    </tr>
    <tr>
      <td style="text-align: center">X(Twitter) Square</td>
      <td style="text-align: center">1200 x 1200 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td style="text-align: center">X(Twitter) Landscape</td>
      <td style="text-align: center">1200 x 900 px</td>
      <td style="text-align: center">1.78:1</td>
    </tr>
    <tr>
      <td style="text-align: center">X(Twitter) Portrait</td>
      <td style="text-align: center">900 x 1200 px</td>
      <td style="text-align: center">0.5625:1</td>
    </tr>
    <tr>
      <td style="text-align: center">Pinterest Square</td>
      <td style="text-align: center">1000 x 1000 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td style="text-align: center">LinkedIn Landscape</td>
      <td style="text-align: center">1200 x 627 px</td>
      <td style="text-align: center">1.914:1</td>
    </tr>
    <tr>
      <td style="text-align: center">LinkedIn Portrait</td>
      <td style="text-align: center">627 x 1200 px</td>
      <td style="text-align: center">0.5225:1</td>
    </tr>
    <tr>
      <td style="text-align: center">小红书 Square</td>
      <td style="text-align: center">1080 x 1080 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td style="text-align: center">小红书 Landscape</td>
      <td style="text-align: center">1200 x 900 px</td>
      <td style="text-align: center">1.33:1</td>
    </tr>
    <tr>
      <td style="text-align: center">小红书 Portrait</td>
      <td style="text-align: center">900 x 1200 px</td>
      <td style="text-align: center">0.75:1</td>
    </tr>
    <tr>
      <td style="text-align: center">微博 Normal</td>
      <td style="text-align: center">980 x 900 px</td>
      <td style="text-align: center">1.08:1</td>
    </tr>
    <tr>
      <td style="text-align: center">微博 Long</td>
      <td style="text-align: center">800 x 2000 px</td>
      <td style="text-align: center">0.4:1</td>
    </tr>
  </tbody>
</table>

<h1 id="facebook-more">Facebook More</h1>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Square</td>
      <td style="text-align: center">1200 x 1200 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Landscape</td>
      <td style="text-align: center">1200 x 630 px</td>
      <td style="text-align: center">1.905:1</td>
    </tr>
    <tr>
      <td>Portrait</td>
      <td style="text-align: center">630 x 1200 px</td>
      <td style="text-align: center">0.525:1</td>
    </tr>
    <tr>
      <td>Profile</td>
      <td style="text-align: center">320 x 320 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Cover Photo</td>
      <td style="text-align: center">1200 x 628 px</td>
      <td style="text-align: center">2:1</td>
    </tr>
    <tr>
      <td>Stories</td>
      <td style="text-align: center">1080 x 1920 px</td>
      <td style="text-align: center">9:16</td>
    </tr>
    <tr>
      <td>Ad:All</td>
      <td style="text-align: center">1080 x 1080 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
  </tbody>
</table>

<h1 id="instagram-more">Instagram More</h1>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Square</td>
      <td style="text-align: center">1200 x 1200 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Landscape</td>
      <td style="text-align: center">1200 x 630 px</td>
      <td style="text-align: center">1.905:1</td>
    </tr>
    <tr>
      <td>Portrait</td>
      <td style="text-align: center">630 x 1200 px</td>
      <td style="text-align: center">0.525:1</td>
    </tr>
    <tr>
      <td>Profile</td>
      <td style="text-align: center">320 x 320 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Stories</td>
      <td style="text-align: center">1080 x 1920 px</td>
      <td style="text-align: center">9:16</td>
    </tr>
  </tbody>
</table>

<h1 id="xtwitter-more">X(Twitter) More</h1>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Square</td>
      <td style="text-align: center">1200 x 1200 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Landscape</td>
      <td style="text-align: center">1200 x 900 px</td>
      <td style="text-align: center">4:3</td>
    </tr>
    <tr>
      <td>Portrait</td>
      <td style="text-align: center">900 x 1200 px</td>
      <td style="text-align: center">3:4</td>
    </tr>
    <tr>
      <td>Profile</td>
      <td style="text-align: center">400 x 400 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Cover Photo</td>
      <td style="text-align: center">1500 x 500 px</td>
      <td style="text-align: center">3:1</td>
    </tr>
    <tr>
      <td>In-Steam Photos</td>
      <td style="text-align: center">1600 x 900 px</td>
      <td style="text-align: center">16:9</td>
    </tr>
    <tr>
      <td>Card Image</td>
      <td style="text-align: center">120 x 120 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Ad:Tweets</td>
      <td style="text-align: center">600 x 335 px</td>
      <td style="text-align: center">1.79:1</td>
    </tr>
    <tr>
      <td>Ad:Web Card Image</td>
      <td style="text-align: center">800 x 418 px</td>
      <td style="text-align: center">1.91:1</td>
    </tr>
    <tr>
      <td>Ad:App Card Image</td>
      <td style="text-align: center">800 x 800 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
  </tbody>
</table>

<h1 id="pinterest-more">Pinterest More</h1>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Square</td>
      <td style="text-align: center">1000 x 1000 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Static and Ad Specs</td>
      <td style="text-align: center">1000 x 1500 px</td>
      <td style="text-align: center">2:3</td>
    </tr>
    <tr>
      <td>Idea Pin</td>
      <td style="text-align: center">1080 x 1920 px</td>
      <td style="text-align: center">9:16</td>
    </tr>
    <tr>
      <td>Square Pin</td>
      <td style="text-align: center">1000 x 1000 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Long Pin</td>
      <td style="text-align: center">1000 x 2100 px</td>
      <td style="text-align: center">1:2.1</td>
    </tr>
    <tr>
      <td>Infographic Pin</td>
      <td style="text-align: center">1000 x 3000 px</td>
      <td style="text-align: center">1:3</td>
    </tr>
    <tr>
      <td>Ad:All</td>
      <td style="text-align: center">1000 x 1500 px</td>
      <td style="text-align: center">2:3</td>
    </tr>
  </tbody>
</table>

<h1 id="linkedin-more">LinkedIn More</h1>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Landscape</td>
      <td style="text-align: center">1200 x 627 px</td>
      <td style="text-align: center">1.914:1</td>
    </tr>
    <tr>
      <td>Portrait</td>
      <td style="text-align: center">627 x 1200 px</td>
      <td style="text-align: center">0.5225:1</td>
    </tr>
    <tr>
      <td>Blog Post</td>
      <td style="text-align: center">1080 x 1080 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Company Logo</td>
      <td style="text-align: center">300 x 300 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Company Square Logo</td>
      <td style="text-align: center">60 x 60 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Company Cover Image</td>
      <td style="text-align: center">1128 x 191 px</td>
      <td style="text-align: center">6:1</td>
    </tr>
    <tr>
      <td>Life Tab Main Image</td>
      <td style="text-align: center">1128 x 376 px</td>
      <td style="text-align: center">3:1</td>
    </tr>
    <tr>
      <td>Lift Tab Modules Image</td>
      <td style="text-align: center">502 x 282 px</td>
      <td style="text-align: center">1.78:1</td>
    </tr>
    <tr>
      <td>Lift Tab Photo Image</td>
      <td style="text-align: center">900 x 600 px</td>
      <td style="text-align: center">3:2</td>
    </tr>
  </tbody>
</table>

<h1 id="小红书-more">小红书 More</h1>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Square</td>
      <td style="text-align: center">1080 x 1080 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Landscape</td>
      <td style="text-align: center">1200 x 900 px</td>
      <td style="text-align: center">4:3</td>
    </tr>
    <tr>
      <td>Portrait</td>
      <td style="text-align: center">900 x 1200 px</td>
      <td style="text-align: center">3:4</td>
    </tr>
    <tr>
      <td>Profile</td>
      <td style="text-align: center">400 x 400 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Cover Landscape</td>
      <td style="text-align: center">800 x 600 px</td>
      <td style="text-align: center">4:3</td>
    </tr>
    <tr>
      <td>Cover Portrait</td>
      <td style="text-align: center">1242 x 1660 px</td>
      <td style="text-align: center">3:4</td>
    </tr>
    <tr>
      <td>Background</td>
      <td style="text-align: center">1000 x 800 px</td>
      <td style="text-align: center">10:8</td>
    </tr>
  </tbody>
</table>

<h2 id="小红书常用的图片比例">小红书常用的图片比例</h2>

<h3 id="小红书封面">小红书封面</h3>

<p>小红书笔记的封面图片，有竖版封面和横版封面两种尺寸比例。</p>

<p>大多数情况下推荐大家使用竖版小红书封面，因为同等情况下竖版封面的显示面积比横版封面多数大约40%。</p>

<p>更多的展示面积以为着更高点关注度，为了让我们分享的小红书笔记被更多人关注，建议大家选择竖版格式的小红书封面。</p>

<h3 id="小红书背景图">小红书背景图</h3>

<p>小红书背景图是小红书个人主页上半部分的背景图片，它的图片比例是5:4。</p>

<p>小红书背景图的左侧区域需要展示头像、昵称和个人数据，建议大家在设计背景图片时，将这个背景的视觉焦点放在居中/偏右侧的位置，以确保我们的背景内容不被遮挡。</p>

<h3 id="小红书配图">小红书配图</h3>

<p>和常规的内容分享平台不同，小红书笔记的内容配图都是顶置轮播滑动的形式进行展示。</p>

<p>为了确保版面的一致性，小红书提供了3种笔记配图的尺寸，分别是竖版（3:4）、方形(1:1)、横版(4:3)，并且整篇笔记只支持一种图片比例。</p>

<h1 id="微博-more">微博 More</h1>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Normal</td>
      <td style="text-align: center">980 x 900 px</td>
      <td style="text-align: center">1.08:1</td>
    </tr>
    <tr>
      <td>Long</td>
      <td style="text-align: center">800 x 2000 px</td>
      <td style="text-align: center">0.4:1</td>
    </tr>
    <tr>
      <td>Profile</td>
      <td style="text-align: center">180 x 180 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Home Cover</td>
      <td style="text-align: center">980 x 300 px</td>
      <td style="text-align: center">3:1</td>
    </tr>
    <tr>
      <td>Story Cover</td>
      <td style="text-align: center">980 x 560 px</td>
      <td style="text-align: center">1.75:1</td>
    </tr>
    <tr>
      <td>Focus Cover</td>
      <td style="text-align: center">540 x 260 px</td>
      <td style="text-align: center">2:1</td>
    </tr>
  </tbody>
</table>

<h2 id="微博常用的图片比例">微博常用的图片比例</h2>

<h3 id="微博主页封面图">微博主页封面图</h3>

<p>主页封面图是微博个人主页的背景封图，它的尺寸是固定980像素*300像素，并且它不会根据浏览器的界面缩放进行图形缩放，这也意味着，主页封面图选定尺寸后，不管在什么显示环境下，它都是固定的视觉效果。</p>

<h3 id="微博内容区域">微博内容区域</h3>

<p>微博的内容区域就是微博的主页封面图点开之后的完整效果，固定尺寸是980*900像素。和主页封面图相同，内容区域图片也是固定尺寸，不支持缩放显示。</p>

<h3 id="微博长图">微博长图</h3>

<p>微博常见的内容长图，一般情况下大家保持980像素宽度，长度自定义即可。但想要追求更好的阅读效果，建议大家在设计微博长图时，选择980*900像素的图片格式。</p>

<h3 id="微博头条封图">微博头条封图</h3>

<p>微博头条封图是微博文章专栏的封面图，它的尺寸也是固定为980*560像素。</p>

<p>转发微博头条文章时，头条封图的底部会自动添加文章标题，建议大家将封图的视觉中心放在中上部分，以避免底部标题遮挡。</p>

<h3 id="微博焦点图">微博焦点图</h3>

<p>焦点图是微博企业用户（蓝V）专属的展示需求，可以自定义添加可跳转的URL链接。焦点图的推荐尺寸是560*260像素，支持JPG、PNG、GIF三种图片格式。</p>

<h1 id="微信公众号-more">微信公众号 More</h1>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th style="text-align: center">Width &amp; Height</th>
      <th style="text-align: center">Aspect Ratio</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Profile</td>
      <td style="text-align: center">240 x 240 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Home Cover</td>
      <td style="text-align: center">900 x 383 px</td>
      <td style="text-align: center">2.35:1</td>
    </tr>
    <tr>
      <td>Home Logo</td>
      <td style="text-align: center">200 x 200 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
    <tr>
      <td>Video Cover Landscape</td>
      <td style="text-align: center">1080 x 608 px</td>
      <td style="text-align: center">16:9</td>
    </tr>
    <tr>
      <td>Video Cover Portrait</td>
      <td style="text-align: center">1080 x 1260 px</td>
      <td style="text-align: center">6:7</td>
    </tr>
    <tr>
      <td>Content Welcome Image</td>
      <td style="text-align: center">900 x 500 px</td>
      <td style="text-align: center">9:5</td>
    </tr>
    <tr>
      <td>QRCode Card</td>
      <td style="text-align: center">600 x 600 px</td>
      <td style="text-align: center">1:1</td>
    </tr>
  </tbody>
</table>

<h2 id="微信公众号常用的图片比例">微信公众号常用的图片比例</h2>

<h3 id="微信公众号封面">微信公众号封面</h3>

<p>微信公众号封面图片的裁剪比例是2.35:1，我们准备的公众号封面，只需要符合2.35:1的宽高比例，就可以避免裁剪完整显示图片内容。</p>

<h3 id="微信公众号小图">微信公众号小图</h3>

<p>公众号推送次头条使用的小图比例是1:1，我们在选择公众号小图时，只需要按照1:1的方形尺寸，就可以避免裁剪完美显示。</p>

<h3 id="视频号封面">视频号封面</h3>

<p>视频号封面设计有横版封面和竖版封面两种样式，横版封面的尺寸比例是16:9，竖版封面的尺寸比例是6:7，在对应的比例上制作的视屏号封面都可以完整显示。</p>

<h3 id="公众号内容引导图">公众号内容引导图</h3>

<p>公众号内容引导图就是位于公众号标题下方、正文上方的欢迎头图，多用作品牌展示和邀请关注。内容引导图的推荐比例是9:5，大家也可以根据自己的内容需求，调整合适的显示比例。</p>

<h3 id="公众号二维码名片">公众号二维码名片</h3>

<p>公众号二维码名片通常是放置在公众号底部的引导图片，有1:1和16:9两种样式。</p>

<h1 id="参考网址">参考网址</h1>

<ul>
  <li><a href="https://www.facebook.com/business/ads-guide/update/image">Meta Ads Guide</a></li>
  <li><a href="https://purple-photo.web.app/editor">purple-photo.web.app</a></li>
  <li><a href="https://desygner.com/blog/social-media-image-sizes-2022/">social-media-image-sizes-2022</a></li>
  <li><a href="https://www.canva.cn/sizes/newmedia/">Canvas 常用新媒体尺寸</a></li>
</ul>

<blockquote>
  <p>最后更新日期：2023年8月22日</p>
</blockquote>
 ]]></content>
  </entry>
  
  <entry>
    <title>图标猜成语</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/app/2023/08/05/Emoji_Guess.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=图标猜成语" />
    <published>2023-08-05T00:00:00Z</published>
    <updated>2023-08-05T00:00:00+08:00</updated>
    <id>https://www.70apps.com/app/2023/08/05/Emoji_Guess</id>
    <content type="html"><![CDATA[ <h1 id="图标猜成语">图标猜成语</h1>

<p>训练脑洞大开的创造力，让枯燥的成语学习变得有趣。一起来玩表情与想象力的碰撞，体验emoji的无限可能!</p>

<p><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/71/48/8e/71488e88-3ed4-2ede-0d68-b6933b02b2b5/AppIcon-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></p>

<p><a href="https://apps.apple.com/app/id535139765?ct=70apps"><img src="https://ugc.hitv.com/32/230805124027149f7e1afc60a2a26670c1d25c3ed22f/SX2oob0.png" alt="appstoredownload" /></a></p>

<h2 id="应用介绍">应用介绍</h2>

<p>输入四个图标组合成一个成语，猜对答案即可过关！
如果输入的图标完全正确，背景变绿！
如果输入的图标是有效的，但是位置不对，背景变黄！
如果输入的图标不是答案中的，背景变灰！
最多猜8次，未猜中就失败重来了。</p>

<p>使用金币道具可以查看成语解释或查看答案！</p>

<p>疯狂填字独立开发者2022年心意之作，感谢支持！</p>

<h2 id="应用截图">应用截图</h2>

<p><img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource112/v4/a2/01/09/a20109d8-5711-e519-5c12-0e8637cceaf8/b171fdde-7be7-4ac8-b9c7-832423bafb2e_iPhoneXScreen1@3x.png/230x0w.webp" alt="应用截图1" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource126/v4/0d/57/11/0d571131-8cff-e415-0ffc-00667b225a69/48f78dd9-5106-4175-ba86-d6c4f91b2eb2_iPhoneXScreen2@3x.png/230x0w.webp" alt="应用截图2" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource112/v4/d3/22/07/d3220705-4d1b-f0d4-cad1-c1094d6be2c7/4bd14256-3671-4771-8e82-035a5918f9b5_iPhoneXScreen3@3x.png/230x0w.webp" alt="应用截图3" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource122/v4/11/68/f7/1168f79d-298a-e8f1-c5c7-2a2e664412be/6335308e-9430-4a30-a9d2-d1f32a22d61d_iPhoneXScreen4@3x.png/230x0w.webp" alt="应用截图4" /></p>

<h2 id="马上下载app">马上下载App</h2>

<p><a href="https://apps.apple.com/app/id535139765?ct=70apps"><img src="https://ugc.hitv.com/32/230805124027149f7e1afc60a2a26670c1d25c3ed22f/SX2oob0.png" alt="appstoredownload" /></a></p>

<ul>
  <li><a href="https://apps.apple.com/app/id535139765?ct=70apps">苹果商店下载 https://apps.apple.com/app/id535139765</a></li>
</ul>

<h1 id="全部应用">全部应用</h1>

<ul>
  <li><a href="/blog/app/2025/04/23/LockLive.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/0b/63/84/0b638403-ae84-dfa7-7a90-ddd43430a8c9/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
LockLive</li>
  <li><a href="/blog/app/2023/08/05/Emoji_Guess.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/71/48/8e/71488e88-3ed4-2ede-0d68-b6933b02b2b5/AppIcon-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
图标猜成语</li>
  <li><a href="/blog/app/2023/07/24/Chinese_CrossWord_2023.html"><img src="https://is3-ssl.mzstatic.com/image/thumb/Purple116/v4/35/43/75/35437530-c14c-ef92-0cfc-e438eb1f2808/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/246x0w.png" alt="appicon" /></a><br />
新疯狂填字</li>
  <li><a href="/blog/app/2023/08/04/Super_Clock.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/dc/8a/ff/dc8affa0-f8c3-40f2-543c-bf3e43366ba4/AppIcon-0-0-1x_U007emarketing-0-10-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
超级时钟</li>
  <li><a href="/blog/app/2023/07/23/Crazy_Chengyu.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple122/v4/a6/2a/6e/a62a6e42-8c92-c353-594c-c798c0aaeaaa/AppIcon-0-0-1x_U007emarketing-0-0-0-5-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/260x0w.png" alt="appicon" /></a><br />
疯狂成语</li>
  <li><a href="/blog/app/2023/04/08/Chinese_CrossWord.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple123/v4/38/f7/71/38f771d4-2d95-052a-0eb9-aef58da9aab5/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/230x0w.png" alt="appicon" /></a><br />
疯狂填字</li>
  <li><a href="/blog/app/2023/04/08/Super_Password.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple112/v4/d1/3a/0a/d13a0a0a-fbfa-32ea-9382-6cb461dbabba/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
超级密码</li>
</ul>

 ]]></content>
  </entry>
  
  <entry>
    <title>SuperClock</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/app/2023/08/04/Super_Clock.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=SuperClock" />
    <published>2023-08-04T00:00:00Z</published>
    <updated>2023-08-04T00:00:00+08:00</updated>
    <id>https://www.70apps.com/app/2023/08/04/Super_Clock</id>
    <content type="html"><![CDATA[ <h1 id="superclock">SuperClock</h1>

<p>A flip-clock that can turn on the pomodoro timer, weather broadcast and white noise.</p>

<p><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/dc/8a/ff/dc8affa0-f8c3-40f2-543c-bf3e43366ba4/AppIcon-0-0-1x_U007emarketing-0-10-0-85-220.png/246x0w.png" alt="appicon" /></p>

<p><a href="https://apps.apple.com/app/id1529981662?ct=70apps"><img src="../../../../images/icon/download_app_store_world.png" alt="appstoredownload" /></a></p>

<h2 id="intro">Intro</h2>

<p>Simple design super clock, and the custom functions are waiting for you to discover.</p>

<p>A flip-clock that can turn on the pomodoro timer, weather broadcast and white noise. Click on the blank space to bring up the menu.</p>

<ul>
  <li>Added pomodoro timer function.</li>
  <li>Added 6 kinds of cute little animal animations for charging.</li>
  <li>Added more than ten kinds of background white noise.</li>
  <li>Screen rotation function, switching among automatic, locked portrait screen, and locked landscape screen.</li>
  <li>24/12 timing function, switching between 24-hour system and 12-hour system.</li>
  <li>Weather information function, switching between displaying and hiding the weather information function.</li>
  <li>Date information function, switching between displaying and hiding the date information function.</li>
</ul>

<p>Double-click the clock to switch between hour-minute and hour-minute-second modes.</p>

<p>Click the weather icon to update the latest real-time weather online.</p>

<p>Slide up and down on the left to adjust the brightness.</p>

<p>Slide up and down on the right to adjust the flip-page sound effect.</p>

<p>Plug in the charging and see if there is any change!</p>

<h2 id="screenshots">Screenshots</h2>

<p><img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/38/89/bd/3889bd88-9e4f-3935-7b2d-ad6e1014e3dc/c9388070-b955-48e5-81ed-e429e59a374c_iPhoneScreen1@3x.png/300x0w.webp" alt="应用截图1" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/7c/19/ba/7c19ba62-31fd-12e1-55fe-e3b4d86dc38d/03462913-70c6-4ab2-b4ae-ca6958b3783e_iPhoneScreen2@3x.png/300x0w.webp" alt="应用截图2" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/2d/dd/d5/2dddd5a2-3db7-fcd6-0023-6f2f64ad5d6d/74ac17f5-43fa-45c8-b7f4-640c0d0bf54f_iPhoneScreen3@3x.png/300x0w.webp" alt="应用截图3" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/69/e6/a2/69e6a24d-2ecd-ac9b-4fc2-39c048e1893f/9001140a-094e-4df8-88a6-3ec938d70fc6_iPhoneScreen4@3x.png/300x0w.webp" alt="应用截图4" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/22/62/34/2262343c-f8e2-6669-24ce-d06df2a53173/aa9d3729-6d89-4a6d-a1dd-e8a6abd8dd76_iPhoneScreen5@3x.png/300x0w.webp" alt="应用截图5" /></p>

<h2 id="download">Download</h2>

<p><a href="https://apps.apple.com/app/id1529981662?ct=70apps"><img src="../../../../images/icon/download_app_store_world.png" alt="appstoredownload" /></a></p>

<ul>
  <li><a href="https://apps.apple.com/app/id1529981662?ct=70apps">App Store https://apps.apple.com/app/id1529981662</a></li>
</ul>

<h1 id="全部应用">全部应用</h1>

<ul>
  <li><a href="/blog/app/2025/04/23/LockLive.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/0b/63/84/0b638403-ae84-dfa7-7a90-ddd43430a8c9/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
LockLive</li>
  <li><a href="/blog/app/2023/08/05/Emoji_Guess.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/71/48/8e/71488e88-3ed4-2ede-0d68-b6933b02b2b5/AppIcon-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
图标猜成语</li>
  <li><a href="/blog/app/2023/07/24/Chinese_CrossWord_2023.html"><img src="https://is3-ssl.mzstatic.com/image/thumb/Purple116/v4/35/43/75/35437530-c14c-ef92-0cfc-e438eb1f2808/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/246x0w.png" alt="appicon" /></a><br />
新疯狂填字</li>
  <li><a href="/blog/app/2023/08/04/Super_Clock.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/dc/8a/ff/dc8affa0-f8c3-40f2-543c-bf3e43366ba4/AppIcon-0-0-1x_U007emarketing-0-10-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
超级时钟</li>
  <li><a href="/blog/app/2023/07/23/Crazy_Chengyu.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple122/v4/a6/2a/6e/a62a6e42-8c92-c353-594c-c798c0aaeaaa/AppIcon-0-0-1x_U007emarketing-0-0-0-5-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/260x0w.png" alt="appicon" /></a><br />
疯狂成语</li>
  <li><a href="/blog/app/2023/04/08/Chinese_CrossWord.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple123/v4/38/f7/71/38f771d4-2d95-052a-0eb9-aef58da9aab5/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/230x0w.png" alt="appicon" /></a><br />
疯狂填字</li>
  <li><a href="/blog/app/2023/04/08/Super_Password.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple112/v4/d1/3a/0a/d13a0a0a-fbfa-32ea-9382-6cb461dbabba/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
超级密码</li>
</ul>

 ]]></content>
  </entry>
  
  <entry>
    <title>XCode14升级涉及到POD打包出错</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2023/07/28/XCode_14_Archive_POD_Issue.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=XCode14升级涉及到POD打包出错" />
    <published>2023-07-28T00:00:00Z</published>
    <updated>2023-07-28T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2023/07/28/XCode_14_Archive_POD_Issue</id>
    <content type="html"><![CDATA[ <h2 id="错误描述">错误描述</h2>

<p>环境：XCode 14.3.1，iPhoneXR iOS 16.5，POD 1.10.1</p>

<p>真机调试运行（Run）正常，发布打包（Archive）时提示出错:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Command PhaseScriptExecution failed with a nonzero exit code
</code></pre></div></div>

<p>或</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>file not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a
</code></pre></div></div>

<h2 id="解决步骤">解决步骤</h2>

<ul>
  <li>升级更新 Pods（Cocoapods）</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> sudo gem install cocoapods
</code></pre></div></div>

<ul>
  <li>更新 Pods（Cocoapods） 配置的第三方程序包到最新版本</li>
</ul>

<p>编辑XCode里的 <code class="language-plaintext highlighter-rouge">Podfile</code> 文件，确保支持的iOS版本改为11.0</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>platform :ios, '11.0'
</code></pre></div></div>

<p>打开终端，在XCode项目的根文件夹下，执行更新</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pod update
</code></pre></div></div>

<p>如果有问题，可以先删除Podfile里的list，升级一次包，再改回去，重新升级安装一次包</p>

<ul>
  <li>更新 Pods Targets的编译配置</li>
</ul>

<p>编辑 Pods 包各个编译目标（Targets） 的 General 的 Minimum Deployments 配置</p>

<p>将iOS的版本改为 11.0</p>

<p><img src="../../../../images/2023/48_xcode_pod.png" alt="XCode截图" /></p>
 ]]></content>
  </entry>
  
  <entry>
    <title>2023年XCode升级GameCenter必读</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2023/07/28/GameCenter_Update_iOS_14.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=2023年XCode升级GameCenter必读" />
    <published>2023-07-28T00:00:00Z</published>
    <updated>2023-07-28T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2023/07/28/GameCenter_Update_iOS_14</id>
    <content type="html"><![CDATA[ <h1 id="一game-center功能介绍">一、Game Center功能介绍</h1>

<p>iOS中的 Game Center 是Apple提供的游戏中心服务,它具有以下核心功能:</p>

<ol>
  <li>玩家账号系统 - 提供玩家帐号系统,可以在不同游戏中使用统一的Game Center账号。</li>
  <li>成就与排行榜 - 可以设置游戏内的成就系统,以及查看不同游戏的排行榜。</li>
  <li>多人对战 - 支持通过WiFi或蓝牙进行的多人实时对战游戏。</li>
  <li>社交功能 - 玩家可以在Game Center看到好友的游戏动态,还可以添加好友等。</li>
  <li>云存储 - 提供基于iCloud的云存储功能,可以在不同设备上同步游戏进度。</li>
  <li>登陆认证 - 提供了统一的Game Center登陆认证系统。</li>
</ol>

<p>总之，Game Center为iOS游戏提供了丰富的社交、竞技功能，是游戏开发者可以直接集成使用的强大服务。它极大地丰富了iOS游戏的功能和体验。</p>

<h1 id="二ios14升级">二、iOS14升级</h1>

<p>iOS14起，GameCenter升级了一些重要的代码，以积分榜为例：</p>

<p>旧代码，objective-c</p>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
<span class="cp">#import "AppBasePageGame+GameCenter.h"</span>
<span class="cp">#import &lt;GameKit/GameKit.h&gt;</span>

<span class="kd">@implementation</span> <span class="kt">AppBasePageGame</span><span class="p">(</span><span class="kt">GameCenter</span><span class="p">)</span>

<span class="cp">#pragma mark - GameCenter</span>

<span class="c1">//登录GameCenter：</span>
<span class="o">-</span><span class="p">(</span><span class="n">void</span><span class="p">)</span><span class="n">goAuthenticate</span>
<span class="p">{</span>
    <span class="nf">void</span> <span class="p">(</span><span class="o">^</span><span class="n">authenticateHandler</span><span class="p">)(</span><span class="kt">UIViewController</span> <span class="o">*</span><span class="n">viewController</span><span class="p">,</span> <span class="kt">NSError</span> <span class="o">*</span><span class="n">error</span><span class="p">)</span> <span class="o">=</span> <span class="o">^</span><span class="p">(</span><span class="kt">UIViewController</span> <span class="o">*</span><span class="n">viewController</span><span class="p">,</span> <span class="kt">NSError</span> <span class="o">*</span><span class="n">error</span><span class="p">)</span> <span class="p">{</span>
        <span class="k">if</span> <span class="p">(</span><span class="n">viewController</span><span class="p">)</span> <span class="p">{</span>
            <span class="c1">// 需要展示登录界面</span>
            <span class="p">[</span><span class="k">self</span> <span class="nv">presentViewController</span><span class="p">:</span><span class="n">viewController</span> <span class="nv">animated</span><span class="p">:</span><span class="kt">YES</span> <span class="nv">completion</span><span class="p">:</span><span class="kc">nil</span><span class="p">];</span>
        <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">)</span> <span class="p">{</span>
            <span class="c1">// 验证错误</span>
            <span class="kt">NSLog</span><span class="p">(</span><span class="s">@"Authentication failed: %@"</span><span class="p">,</span> <span class="n">error</span><span class="o">.</span><span class="n">localizedDescription</span><span class="p">);</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="c1">// 验证成功</span>
            <span class="kt">NSLog</span><span class="p">(</span><span class="s">@"Authentication succeeded"</span><span class="p">);</span>
        <span class="p">}</span>
    <span class="p">};</span>

    <span class="p">[[</span><span class="kt">GKLocalPlayer</span> <span class="n">localPlayer</span><span class="p">]</span> <span class="nv">setAuthenticateHandler</span><span class="p">:</span><span class="n">authenticateHandler</span><span class="p">];</span>
<span class="p">}</span>

<span class="c1">//显示排行榜：</span>
<span class="o">-</span><span class="p">(</span><span class="n">void</span><span class="p">)</span><span class="n">goShowTop</span>
<span class="p">{</span>

    <span class="k">if</span> <span class="p">([</span><span class="kt">GKLocalPlayer</span> <span class="n">localPlayer</span><span class="p">]</span><span class="o">.</span><span class="n">isAuthenticated</span> <span class="o">==</span> <span class="kt">NO</span><span class="p">)</span> <span class="p">{</span>
        <span class="kt">NSLog</span><span class="p">(</span><span class="s">@"没有授权，无法获取展示中心"</span><span class="p">);</span>
        <span class="k">return</span><span class="p">;</span>
    <span class="p">}</span>

    <span class="kt">GKGameCenterViewController</span> <span class="o">*</span><span class="kt">GCVC</span> <span class="o">=</span> <span class="p">[</span><span class="kt">GKGameCenterViewController</span> <span class="k">new</span><span class="p">];</span>
    <span class="c1">//跳转指定的排行榜中</span>
    <span class="p">[</span><span class="kt">GCVC</span> <span class="nv">setLeaderboardIdentifier</span><span class="p">:</span><span class="kt">CONFIG_GAMECENTER_LEADERBOARD</span><span class="p">];</span>
    <span class="c1">//跳转到那个时间段</span>
    <span class="kt">NSString</span> <span class="o">*</span><span class="n">type</span> <span class="o">=</span> <span class="s">@"all"</span><span class="p">;</span>
    <span class="k">if</span> <span class="p">([</span><span class="n">type</span> <span class="nv">isEqualToString</span><span class="p">:</span><span class="s">@"today"</span><span class="p">])</span> <span class="p">{</span>
        <span class="p">[</span><span class="kt">GCVC</span> <span class="nv">setLeaderboardTimeScope</span><span class="p">:</span><span class="kt">GKLeaderboardTimeScopeToday</span><span class="p">];</span>
    <span class="p">}</span><span class="k">else</span> <span class="k">if</span><span class="p">([</span><span class="n">type</span> <span class="nv">isEqualToString</span><span class="p">:</span><span class="s">@"week"</span><span class="p">]){</span>
        <span class="p">[</span><span class="kt">GCVC</span> <span class="nv">setLeaderboardTimeScope</span><span class="p">:</span><span class="kt">GKLeaderboardTimeScopeWeek</span><span class="p">];</span>
    <span class="p">}</span><span class="k">else</span> <span class="k">if</span> <span class="p">([</span><span class="n">type</span> <span class="nv">isEqualToString</span><span class="p">:</span><span class="s">@"all"</span><span class="p">]){</span>
        <span class="p">[</span><span class="kt">GCVC</span> <span class="nv">setLeaderboardTimeScope</span><span class="p">:</span><span class="kt">GKLeaderboardTimeScopeAllTime</span><span class="p">];</span>
    <span class="p">}</span>
    <span class="kt">GCVC</span><span class="o">.</span><span class="n">gameCenterDelegate</span> <span class="o">=</span> <span class="k">self</span><span class="p">;</span>
    <span class="p">[</span><span class="k">self</span> <span class="nv">presentViewController</span><span class="p">:</span><span class="kt">GCVC</span> <span class="nv">animated</span><span class="p">:</span><span class="kt">YES</span> <span class="nv">completion</span><span class="p">:</span><span class="kc">nil</span><span class="p">];</span>

<span class="p">}</span>

<span class="c1">//上传分数：</span>
<span class="o">-</span><span class="p">(</span><span class="n">void</span><span class="p">)</span><span class="n">goSubmitScore</span>
<span class="p">{</span>
    <span class="k">if</span> <span class="p">([</span><span class="kt">GKLocalPlayer</span> <span class="n">localPlayer</span><span class="p">]</span><span class="o">.</span><span class="n">isAuthenticated</span> <span class="o">==</span> <span class="kt">NO</span><span class="p">)</span> <span class="p">{</span>
        <span class="kt">NSLog</span><span class="p">(</span><span class="s">@"没有授权，无法获取展示中心"</span><span class="p">);</span>
        <span class="k">return</span><span class="p">;</span>
    <span class="p">}</span>
    <span class="kt">NSInteger</span> <span class="n">userStar</span> <span class="o">=</span> <span class="p">[</span><span class="kt">FrameUser</span> <span class="n">getStar</span><span class="p">]</span><span class="o">*</span><span class="mi">100</span><span class="p">;</span>
    <span class="kt">GKScore</span> <span class="o">*</span><span class="n">scoreBoard</span> <span class="o">=</span> <span class="p">[[</span><span class="kt">GKScore</span> <span class="n">alloc</span><span class="p">]</span> <span class="nv">initWithLeaderboardIdentifier</span><span class="p">:</span><span class="kt">CONFIG_GAMECENTER_LEADERBOARD</span><span class="p">];</span>
    <span class="n">scoreBoard</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">userStar</span><span class="p">;</span>
    <span class="p">[</span><span class="kt">GKScore</span> <span class="nv">reportScores</span><span class="p">:</span><span class="err">@</span><span class="p">[</span><span class="n">scoreBoard</span><span class="p">]</span> <span class="nv">withCompletionHandler</span><span class="p">:</span><span class="o">^</span><span class="p">(</span><span class="kt">NSError</span> <span class="o">*</span><span class="n">error</span><span class="p">)</span> <span class="p">{</span>
        <span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">)</span> <span class="p">{</span>
            <span class="c1">// handle error</span>
        <span class="p">}</span>
    <span class="p">}];</span>


<span class="p">}</span>

<span class="c1">//实现代理：</span>
<span class="c1">//接受关闭回调，非常重要</span>
<span class="cp">#pragma mark -  GKGameCenterControllerDelegate</span>
<span class="o">-</span> <span class="p">(</span><span class="n">void</span><span class="p">)</span><span class="nv">gameCenterViewControllerDidFinish</span><span class="p">:(</span><span class="kt">GKGameCenterViewController</span> <span class="o">*</span><span class="p">)</span><span class="n">gameCenterViewController</span><span class="p">{</span>
    <span class="p">[</span><span class="n">gameCenterViewController</span> <span class="nv">dismissViewControllerAnimated</span><span class="p">:</span><span class="kt">YES</span> <span class="nv">completion</span><span class="p">:</span><span class="kc">nil</span><span class="p">];</span>
<span class="p">}</span>
<span class="kd">@end</span>
</code></pre></div></div>

<p>iOS14后的代码，swift</p>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
<span class="kd">import</span> <span class="kt">UIKit</span>
<span class="kd">import</span> <span class="kt">SpriteKit</span>
<span class="kd">import</span> <span class="kt">GameplayKit</span>
<span class="kd">import</span> <span class="kt">AVFoundation</span>
<span class="kd">import</span> <span class="kt">GoogleMobileAds</span>
<span class="kd">import</span> <span class="kt">GameKit</span>
<span class="kd">import</span> <span class="kt">SwiftUI</span>

<span class="kd">class</span> <span class="kt">GameViewController_GameCenter</span><span class="p">:</span> <span class="kt">GameViewController</span><span class="p">,</span> <span class="kt">GKGameCenterControllerDelegate</span> <span class="p">{</span>

    <span class="kd">public</span> <span class="k">var</span> <span class="nv">thisLeaderboardID</span><span class="o">=</span><span class="s">"com.gpwzw.appChineseWordCross2.Score"</span>

    <span class="k">override</span> <span class="kd">func</span> <span class="nf">viewDidLoad</span><span class="p">()</span> <span class="p">{</span>
        <span class="k">super</span><span class="o">.</span><span class="nf">viewDidLoad</span><span class="p">()</span>
        <span class="k">self</span><span class="o">.</span><span class="nf">goGameCenterAuthenticate</span><span class="p">()</span>

    <span class="p">}</span>

    <span class="c1">//登录GameCenter：</span>
    <span class="kd">func</span> <span class="nf">goGameCenterAuthenticate</span><span class="p">(){</span>

        <span class="kt">GKLocalPlayer</span><span class="o">.</span><span class="n">local</span><span class="o">.</span><span class="n">authenticateHandler</span> <span class="o">=</span> <span class="p">{</span> <span class="n">gcAuthVC</span><span class="p">,</span> <span class="n">error</span> <span class="k">in</span>
            <span class="k">if</span> <span class="kt">GKLocalPlayer</span><span class="o">.</span><span class="n">local</span><span class="o">.</span><span class="n">isAuthenticated</span> <span class="p">{</span>
                <span class="nf">print</span><span class="p">(</span><span class="s">"Authenticated to Game Center!"</span><span class="p">)</span>
            <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="k">let</span> <span class="nv">vc</span> <span class="o">=</span> <span class="n">gcAuthVC</span> <span class="p">{</span>
                <span class="k">self</span><span class="o">.</span><span class="nf">present</span><span class="p">(</span><span class="n">vc</span><span class="p">,</span> <span class="nv">animated</span><span class="p">:</span> <span class="kc">true</span><span class="p">)</span>
            <span class="p">}</span>
            <span class="k">else</span> <span class="p">{</span>
                <span class="nf">print</span><span class="p">(</span><span class="s">"Error authentication to GameCenter: "</span> <span class="o">+</span>
                      <span class="s">"</span><span class="se">\(</span><span class="n">error</span><span class="p">?</span><span class="o">.</span><span class="n">localizedDescription</span> <span class="p">??</span> <span class="s">"none"</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
            <span class="p">}</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="c1">//显示排行榜：</span>
    <span class="kd">func</span> <span class="nf">showGameCenterLeaderboard</span><span class="p">(){</span>
        <span class="k">if</span> <span class="kt">GKLocalPlayer</span><span class="o">.</span><span class="n">local</span><span class="o">.</span><span class="n">isAuthenticated</span> <span class="p">{</span>
            <span class="k">let</span> <span class="nv">gameCenterViewLeaderBoard</span> <span class="o">=</span> <span class="kt">GKGameCenterViewController</span><span class="p">(</span><span class="nv">leaderboardID</span><span class="p">:</span> <span class="n">thisLeaderboardID</span><span class="p">,</span> <span class="nv">playerScope</span><span class="p">:</span> <span class="kt">GKLeaderboard</span><span class="o">.</span><span class="kt">PlayerScope</span><span class="o">.</span><span class="n">global</span><span class="p">,</span> <span class="nv">timeScope</span><span class="p">:</span> <span class="kt">GKLeaderboard</span><span class="o">.</span><span class="kt">TimeScope</span><span class="o">.</span><span class="n">today</span><span class="p">)</span>
            <span class="n">gameCenterViewLeaderBoard</span><span class="o">.</span><span class="n">gameCenterDelegate</span> <span class="o">=</span> <span class="k">self</span><span class="p">;</span>
            <span class="k">self</span><span class="o">.</span><span class="nf">present</span><span class="p">(</span><span class="n">gameCenterViewLeaderBoard</span><span class="p">,</span><span class="nv">animated</span><span class="p">:</span> <span class="kc">true</span><span class="p">);</span>
        <span class="p">}</span>
        <span class="k">else</span><span class="p">{</span>
            <span class="c1">//self.goGameCenterAuthenticate();</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="c1">//上传分数：</span>
    <span class="kd">func</span> <span class="nf">postGameCenterLeaderboardAsync</span><span class="p">(</span><span class="n">_</span> <span class="nv">score</span><span class="p">:</span> <span class="kt">Int</span><span class="p">)</span> <span class="n">async</span><span class="p">{</span>

        <span class="k">if</span> <span class="kt">GKLocalPlayer</span><span class="o">.</span><span class="n">local</span><span class="o">.</span><span class="n">isAuthenticated</span> <span class="p">{</span>
            <span class="kt">Task</span><span class="p">{</span>
                <span class="k">try</span> <span class="n">await</span> <span class="kt">GKLeaderboard</span><span class="o">.</span><span class="nf">submitScore</span><span class="p">(</span>
                    <span class="n">score</span><span class="p">,</span>
                    <span class="nv">context</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
                    <span class="nv">player</span><span class="p">:</span> <span class="kt">GKLocalPlayer</span><span class="o">.</span><span class="n">local</span><span class="p">,</span>
                    <span class="nv">leaderboardIDs</span><span class="p">:</span> <span class="p">[</span><span class="n">thisLeaderboardID</span><span class="p">]</span>
                <span class="p">)</span>
            <span class="p">}</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Score submitted"</span><span class="p">)</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="c1">//上传分数：</span>
    <span class="kd">func</span> <span class="nf">postGameCenterLeaderboardAll</span><span class="p">()</span> <span class="n">async</span><span class="p">{</span>

        <span class="k">let</span> <span class="nv">intLastStage</span> <span class="o">=</span> <span class="n">appDelegate</span><span class="o">.</span><span class="n">gameConfig</span><span class="o">.</span><span class="nf">getConfigNumber</span><span class="p">(</span><span class="kt">CONFIG_LAST_STAGE</span><span class="p">)</span>
        <span class="k">let</span> <span class="nv">intScore</span> <span class="o">=</span> <span class="n">intLastStage</span> <span class="o">*</span> <span class="mi">100</span>

        <span class="k">if</span> <span class="kt">GKLocalPlayer</span><span class="o">.</span><span class="n">local</span><span class="o">.</span><span class="n">isAuthenticated</span> <span class="p">{</span>
            <span class="kt">Task</span><span class="p">{</span>
                <span class="k">try</span> <span class="n">await</span> <span class="kt">GKLeaderboard</span><span class="o">.</span><span class="nf">submitScore</span><span class="p">(</span>
                    <span class="n">intScore</span><span class="p">,</span>
                    <span class="nv">context</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
                    <span class="nv">player</span><span class="p">:</span> <span class="kt">GKLocalPlayer</span><span class="o">.</span><span class="n">local</span><span class="p">,</span>
                    <span class="nv">leaderboardIDs</span><span class="p">:</span> <span class="p">[</span><span class="n">thisLeaderboardID</span><span class="p">]</span>
                <span class="p">)</span>
            <span class="p">}</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Score submitted"</span><span class="p">)</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="c1">//实现代理：</span>
    <span class="c1">//接受关闭回调，非常重要</span>
    <span class="kd">func</span> <span class="nf">gameCenterViewControllerDidFinish</span><span class="p">(</span><span class="n">_</span> <span class="nv">gameCenterViewController</span><span class="p">:</span> <span class="kt">GKGameCenterViewController</span><span class="p">)</span> <span class="p">{</span>
        <span class="nf">print</span><span class="p">(</span><span class="s">"game center did finish"</span><span class="p">)</span>
        <span class="n">gameCenterViewController</span><span class="o">.</span><span class="nf">dismiss</span><span class="p">(</span><span class="nv">animated</span><span class="p">:</span> <span class="kc">true</span><span class="p">)</span>
    <span class="p">}</span>
<span class="p">}</span>

</code></pre></div></div>

<h1 id="三2023年8月16日新规">三、2023年8月16日新规</h1>

<p>苹果邮件原文</p>

<blockquote>
  <p>Starting August 16, 2023, new apps and app updates that offer Game Center features need to include the Game Center entitlement and have Game Center features configured in App Store Connect before you can submit them to the App Store. Existing apps on the App Store are not affected by this new requirement.<br />
<br />
We noticed that although the apps listed below have Game Center features configured in App Store Connect, their latest binary delivery doesn’t include the Game Center entitlement. In your next app update, please update your binary to include the entitlement.<br />
<br />
Name: 疯狂填字<br />
……<br />
<br />
How to add the entitlement<br />
If you’re automatically signing your app with Xcode and haven’t enabled the Game Center capability, enabling Game Center automatically adds the entitlement to the entitlement plist. If Game Center is already enabled in Xcode, and the com.apple.developer.game-center entitlement isn’t in the entitlements plist, remove and re-enable the Game Center capability.<br />
<br />
If you’re manually signing your app, make sure the capability is enabled in Certificates, Identifiers &amp; Profiles, generate a new profile, and add the com.apple.developer.game-center entitlement directly to your entitlements plist.<br />
<br />
Learn more about diagnosing issues with entitlements to verify the entitlement is included in your app. If your app isn’t taking advantage of Game Center, you should remove the capability in Xcode and App Store Connect.<br />
<br />
If you have any questions, contact us.<br />
<br />
Apple Developer Relations<br /></p>
</blockquote>

<p>Xcode 编译时会提示：</p>

<p>Could not load services for GameKit. This likely means your game is missing the com.apple.developer.game-center entitlment.</p>

<p>这个简单，把以下内容加到 info 最后面即可</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    &lt;key&gt;com.apple.developer.game-center&lt;/key&gt;
    &lt;true/&gt;
</code></pre></div></div>

<p>如果递交审核时还是会提示：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>你必须在 Xcode 中添加 com.apple.developer.game-center 密钥

or

Unable to Add for Review: You must add the com.apple.developer.game-center key in Xcode.
</code></pre></div></div>

<p>还需要在开发者后台配置 App ID，启用 Game Center</p>

<p><img src="/blog/images/2024/gamecenterappid.png" alt="game center app id" /></p>

<p>或在Xcode中增加能力</p>

<ol>
  <li>找到你的Targets，切换到 Signing &amp; Capabilities</li>
  <li>点击左上角的 + Capability</li>
  <li>搜索点击 Game Center</li>
</ol>

<p><img src="/blog/images/2024/gamecentercapability.png" alt="game center capability" /></p>
 ]]></content>
  </entry>
  
  <entry>
    <title>新疯狂填字 - 2023新版中文填字游戏</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/app/2023/07/24/Chinese_CrossWord_2023.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=新疯狂填字-2023新版中文填字游戏" />
    <published>2023-07-24T00:00:00Z</published>
    <updated>2023-07-24T00:00:00+08:00</updated>
    <id>https://www.70apps.com/app/2023/07/24/Chinese_CrossWord_2023</id>
    <content type="html"><![CDATA[ <h1 id="新疯狂填字---2023新版中文填字游戏">新疯狂填字 - 2023新版中文填字游戏</h1>

<p>游戏引擎技术，体验更流畅，快来下载最新版本的疯狂填字！</p>

<p><img src="https://is3-ssl.mzstatic.com/image/thumb/Purple116/v4/35/43/75/35437530-c14c-ef92-0cfc-e438eb1f2808/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/246x0w.png" alt="appicon" /></p>

<p><a href="https://apps.apple.com/app/id590999314"><img src="../../../../images/icon/download_app_store_world.png" alt="appstoredownload" /></a></p>

<h2 id="应用介绍">应用介绍</h2>

<p>2023最新版本，欢迎新老填友下载</p>

<p>疯狂填字是最早的在线中文填字游戏，现在你可以在手机上玩填字了，既打发了时间，又增长了知识！</p>

<p>上千关卡即将登场，你准备好挑战史上最疯狂的中文填字游戏了吗?</p>

<p>1、游戏开始选择【开始游戏】，消耗一颗心（生命值）进入游戏<br />
2、进入关卡后，选中空的格子就会显示对应提示<br />
3、点击下方字母按键输入首字母拼音<br />
4、正确完成词条就会转换为汉字显示<br />
5、错误就需要消耗一颗心（生命值）才能继续，没有生命值就结束了<br />
6、完成当前关卡即可解锁下一关卡
7、正确填对的词条可以获得金币奖励，每十关还可以获得道具奖励
8、使用【放大镜】【大火箭】可以帮助过关</p>

<p>常见问题</p>

<p>问：怎么输入汉字？
答：疯狂填字原创使用拼音首字母输入答题玩法，词条答对即可显示正确答案。比如万里长城，就需要输入WLCC即可答对。</p>

<p>问：原来的疯狂填字怎么没有了？
答：虽然政策原因，疯狂填字老版不能在大陆地区销售。</p>

<p>欢迎关注新浪官方微博:
@疯狂填字</p>

<p>欢迎关注官方微信公众号:
疯狂填字</p>

<p>官方网站
https://www.70apps.com/fktz/</p>

<p>资深填友请加官方QQ群：242914318</p>

<h2 id="应用截图">应用截图</h2>

<p><img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource112/v4/ed/04/79/ed0479df-784a-4f36-0628-fde3f72d5ce8/aa0058c6-293d-47d0-a3e2-827861726564_iPhoneXScreen1@3x.png/300x0w.webp" alt="应用截图1" />
<img src="https://is3-ssl.mzstatic.com/image/thumb/PurpleSource112/v4/94/33/a7/9433a771-6aa9-5107-a994-3d6d3d2b9ae5/2d2fc7bb-9081-4463-93b5-839226911bc2_iPhoneXScreen2@3x.png/300x0w.webp" alt="应用截图2" />
<img src="https://is2-ssl.mzstatic.com/image/thumb/PurpleSource112/v4/09/db/d8/09dbd85b-6d1e-a5b2-0973-90e6c6b91014/87e2033d-950e-4696-aebc-d2b7612cb5b4_iPhoneXScreen3@3x.png/300x0w.webp" alt="应用截图3" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource122/v4/9b/31/e9/9b31e94e-ae7d-e61a-0ebb-778526bd9723/a65322a7-8886-4c75-b996-ab0168ae2ffc_iPhoneXScreen4@3x.png/300x0w.webp" alt="应用截图4" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource112/v4/e1/a3/c6/e1a3c62d-860a-079a-b561-602bad8bba8c/67787d66-ea21-4ec9-8df7-cd50db6e757e_iPhoneXScreen5@3x.png/300x0w.webp" alt="应用截图5" /></p>

<h2 id="马上下载">马上下载</h2>

<p><a href="https://apps.apple.com/app/id590999314"><img src="../../../../images/icon/download_app_store_world.png" alt="appstoredownload" /></a></p>

<ul>
  <li><a href="https://apps.apple.com/app/id590999314">2023版苹果商店下载 https://apps.apple.com/app/id590999314</a></li>
</ul>

<h1 id="全部应用">全部应用</h1>

<ul>
  <li><a href="/blog/app/2025/04/23/LockLive.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/0b/63/84/0b638403-ae84-dfa7-7a90-ddd43430a8c9/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
LockLive</li>
  <li><a href="/blog/app/2023/08/05/Emoji_Guess.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/71/48/8e/71488e88-3ed4-2ede-0d68-b6933b02b2b5/AppIcon-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
图标猜成语</li>
  <li><a href="/blog/app/2023/07/24/Chinese_CrossWord_2023.html"><img src="https://is3-ssl.mzstatic.com/image/thumb/Purple116/v4/35/43/75/35437530-c14c-ef92-0cfc-e438eb1f2808/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/246x0w.png" alt="appicon" /></a><br />
新疯狂填字</li>
  <li><a href="/blog/app/2023/08/04/Super_Clock.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/dc/8a/ff/dc8affa0-f8c3-40f2-543c-bf3e43366ba4/AppIcon-0-0-1x_U007emarketing-0-10-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
超级时钟</li>
  <li><a href="/blog/app/2023/07/23/Crazy_Chengyu.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple122/v4/a6/2a/6e/a62a6e42-8c92-c353-594c-c798c0aaeaaa/AppIcon-0-0-1x_U007emarketing-0-0-0-5-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/260x0w.png" alt="appicon" /></a><br />
疯狂成语</li>
  <li><a href="/blog/app/2023/04/08/Chinese_CrossWord.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple123/v4/38/f7/71/38f771d4-2d95-052a-0eb9-aef58da9aab5/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/230x0w.png" alt="appicon" /></a><br />
疯狂填字</li>
  <li><a href="/blog/app/2023/04/08/Super_Password.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple112/v4/d1/3a/0a/d13a0a0a-fbfa-32ea-9382-6cb461dbabba/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
超级密码</li>
</ul>

 ]]></content>
  </entry>
  
  <entry>
    <title>疯狂成语 - 2021年度推荐成语消消乐</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/app/2023/07/23/Crazy_Chengyu.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=疯狂成语-2021年度推荐成语消消乐" />
    <published>2023-07-23T00:00:00Z</published>
    <updated>2023-07-23T00:00:00+08:00</updated>
    <id>https://www.70apps.com/app/2023/07/23/Crazy_Chengyu</id>
    <content type="html"><![CDATA[ <h1 id="疯狂成语">疯狂成语</h1>

<p>年度推荐成语消消乐</p>

<p><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple122/v4/a6/2a/6e/a62a6e42-8c92-c353-594c-c798c0aaeaaa/AppIcon-0-0-1x_U007emarketing-0-0-0-5-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/260x0w.webp" alt="appicon" /></p>

<p><a href="https://apps.apple.com/app/id1561993081?ct=70apps"><img src="https://ugc.hitv.com/32/230805124027149f7e1afc60a2a26670c1d25c3ed22f/SX2oob0.png" alt="appstoredownload" /></a></p>

<h2 id="应用介绍">应用介绍</h2>

<p>根据提示，按序选中汉字，完成任务即可过关！</p>

<p>挑战不可能的拼成语游戏，只有眼疾手快的你才能胜利！</p>

<p>每10小关一大关，可获得道具奖励！</p>

<p>1个生命值恢复需要10分钟，要珍惜哟！</p>

<p>使用道具快速过关：</p>

<ul>
  <li>
    <p>火箭炸弹：消除最底部的一行字牌</p>
  </li>
  <li>
    <p>月光宝盒：清空重新开始当前关卡</p>
  </li>
  <li>
    <p>冻结时间：发牌间隔时间变慢一倍</p>
  </li>
  <li>
    <p>寻字宝镜：标注当前答案的所有字</p>
  </li>
  <li>
    <p>生命值：每次游戏会消耗1点生命值</p>
  </li>
</ul>

<p>疯狂填字独立开发者心意之作，感谢支持！</p>

<h2 id="应用截图">应用截图</h2>

<p><img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource114/v4/54/80/54/5480549d-ae43-c7f4-e64d-8934e8224c86/9927422f-f115-409e-82cc-cdb30b044bda_iPhoneXScreen1@3x.png/300x0w.webp" alt="应用截图1" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource124/v4/a0/a7/5f/a0a75f29-6413-6b92-a098-06803c67b7e2/95f9b55b-fdc6-4acb-9291-b3972165bc4e_iPhoneXScreen2@3x.png/300x0w.webp" alt="应用截图2" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource114/v4/25/8b/00/258b002d-6e40-c56e-bd2f-15bf9ee8ba04/92a3c492-22b8-42c3-9892-3e28ccdeca90_iPhoneXScreen3@3x.png/300x0w.webp" alt="应用截图3" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource124/v4/c9/a2/a8/c9a2a8e1-a4ac-5c47-8979-f0b8ae0a8227/2efd5ebd-6328-4bdd-9d5d-4798027286bc_iPhoneXScreen4@3x.png/300x0w.webp" alt="应用截图4" /></p>

<h2 id="马上下载">马上下载</h2>

<p><a href="https://apps.apple.com/app/id1561993081?ct=70apps"><img src="https://ugc.hitv.com/32/230805124027149f7e1afc60a2a26670c1d25c3ed22f/SX2oob0.png" alt="appstoredownload" /></a></p>

<ul>
  <li><a href="https://apps.apple.com/app/id1561993081?ct=70apps">苹果商店下载 https://apps.apple.com/app/id1561993081</a></li>
</ul>

<h1 id="全部应用">全部应用</h1>

<ul>
  <li><a href="/blog/app/2025/04/23/LockLive.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/0b/63/84/0b638403-ae84-dfa7-7a90-ddd43430a8c9/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
LockLive</li>
  <li><a href="/blog/app/2023/08/05/Emoji_Guess.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/71/48/8e/71488e88-3ed4-2ede-0d68-b6933b02b2b5/AppIcon-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
图标猜成语</li>
  <li><a href="/blog/app/2023/07/24/Chinese_CrossWord_2023.html"><img src="https://is3-ssl.mzstatic.com/image/thumb/Purple116/v4/35/43/75/35437530-c14c-ef92-0cfc-e438eb1f2808/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/246x0w.png" alt="appicon" /></a><br />
新疯狂填字</li>
  <li><a href="/blog/app/2023/08/04/Super_Clock.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/dc/8a/ff/dc8affa0-f8c3-40f2-543c-bf3e43366ba4/AppIcon-0-0-1x_U007emarketing-0-10-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
超级时钟</li>
  <li><a href="/blog/app/2023/07/23/Crazy_Chengyu.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple122/v4/a6/2a/6e/a62a6e42-8c92-c353-594c-c798c0aaeaaa/AppIcon-0-0-1x_U007emarketing-0-0-0-5-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/260x0w.png" alt="appicon" /></a><br />
疯狂成语</li>
  <li><a href="/blog/app/2023/04/08/Chinese_CrossWord.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple123/v4/38/f7/71/38f771d4-2d95-052a-0eb9-aef58da9aab5/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/230x0w.png" alt="appicon" /></a><br />
疯狂填字</li>
  <li><a href="/blog/app/2023/04/08/Super_Password.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple112/v4/d1/3a/0a/d13a0a0a-fbfa-32ea-9382-6cb461dbabba/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
超级密码</li>
</ul>

 ]]></content>
  </entry>
  
  <entry>
    <title>UI/UX的AI产品清单</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/ai/2023/04/18/UI_UX_AI_Products_Index.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=UI/UX的AI产品清单" />
    <published>2023-04-18T00:00:00Z</published>
    <updated>2023-04-18T00:00:00+08:00</updated>
    <id>https://www.70apps.com/ai/2023/04/18/UI_UX_AI_Products_Index</id>
    <content type="html"><![CDATA[ <h1 id="综合">综合</h1>

<table>
  <thead>
    <tr>
      <th>项目</th>
      <th>网址</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>🇨🇳 Stablity.ai - Clipdrop</td>
      <td><a href="https://clipdrop.co/tools" title="nav">https://clipdrop.co/tools</a></td>
    </tr>
  </tbody>
</table>

<h1 id="生成图像">生成图像</h1>

<table>
  <thead>
    <tr>
      <th>项目</th>
      <th>网址</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>🇺🇸 <a href="https://discord.com/invite/midjourney">Discord</a> - MidJourney</td>
      <td><a href="https://www.midjourney.com/" title="nav">https://www.midjourney.com/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 <a href="https://discord.com/invite/bluewillow">Discord</a> - BlueWillow</td>
      <td><a href="https://www.bluewillow.ai/" title="nav">https://www.bluewillow.ai/</a></td>
    </tr>
    <tr>
      <td>🇨🇳 Images.AI</td>
      <td><a href="https://images.ai/" title="nav">https://images.ai/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 微软 - Bing Image Creater</td>
      <td><a href="https://bing.com/create" title="nav">https://bing.com/create</a></td>
    </tr>
    <tr>
      <td>🇺🇸 fotor</td>
      <td><a href="https://www.fotor.com/features/ai-image-generator/" title="nav">https://www.fotor.com/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 Fusion Brain : 网址打开就能用，有多种绘画风格，并且支持无限画布，最重要的是，功能完全免费，免注册免登录！</td>
      <td><a href="https://fusionbrain.ai/?f=70apps" title="nav">https://fusionbrain.ai/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 ideogram.ai : With reliable text rendering capabilities</td>
      <td><a href="https://ideogram.ai/?f=70apps" title="nav">https://ideogram.ai/</a></td>
    </tr>
    <tr>
      <td>🇨🇳 Dreamina : Power by Bytedance</td>
      <td><a href="https://dreamina.jianying.com/?f=70apps" title="nav">https://dreamina.jianying.com/</a></td>
    </tr>
    <tr>
      <td>🇨🇳 奇域 qiyu : Focus on Chinese style, power by XiaoHuangShu</td>
      <td><a href="https://www.qiyuai.net/?f=70apps" title="nav">https://www.qiyuai.net/</a></td>
    </tr>
    <tr>
      <td>🇨🇳 通义万相 wanxiang : Power by Alibaba</td>
      <td><a href="https://tongyi.aliyun.com/wanxiang/?f=70apps" title="nav">https://tongyi.aliyun.com/wanxiang/</a></td>
    </tr>
  </tbody>
</table>

<h1 id="去除水印">去除水印</h1>

<table>
  <thead>
    <tr>
      <th>项目</th>
      <th>网址</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>🇨🇳 PixelBin - WatermarkRemover.io</td>
      <td><a href="https://www.watermarkremover.io/zh?f=70apps" title="nav">https://www.watermarkremover.io/</a></td>
    </tr>
  </tbody>
</table>

<h1 id="去除对象">去除对象</h1>

<table>
  <thead>
    <tr>
      <th>项目</th>
      <th>网址</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>🇺🇸 hama</td>
      <td><a href="https://www.hama.app/zh?f=70apps" title="nav">https://www.hama.app/</a></td>
    </tr>
  </tbody>
</table>

<h1 id="矢量转换">矢量转换</h1>

<table>
  <thead>
    <tr>
      <th>项目</th>
      <th>网址</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>🇺🇸 <a href="https://www.creativefabrica.com/studio/features/vectorize-image/" title="SVG 文件转换器">SVG 文件转换器</a></td>
      <td><a href="https://www.creativefabrica.com/studio/features/vectorize-image/" title="nav">https://www.creativefabrica.com/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 Vectorizer.ai</td>
      <td><a href="https://vectorizer.ai/?f=70apps" title="nav">https://vectorizer.ai/</a></td>
    </tr>
  </tbody>
</table>

<blockquote>
  <p>最后更新日期：2024年4月18日</p>
</blockquote>
 ]]></content>
  </entry>
  
  <entry>
    <title>在Slack中安装和使用AI助手Claude</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/ai/2023/04/14/how_to_install_and_use_Claude.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=在Slack中安装和使用AI助手Claude" />
    <published>2023-04-14T00:00:00Z</published>
    <updated>2023-04-14T00:00:00+08:00</updated>
    <id>https://www.70apps.com/ai/2023/04/14/how_to_install_and_use_Claude</id>
    <content type="html"><![CDATA[ <p>本文由AI助手Claude生成<del>，不过在2023年5月，此功能已不在中国大陆地区使用</del>。</p>

<p>Slack已成为最流行的团队协作和沟通工具之一，我们可以在Slack中安装各种集成应用和机器人来扩展其功能。Claude是一款开源的AI助手，可直接在Slack中安装和使用。本文将介绍如何在Slack中安装Claude以及使用Claude来帮助提高团队效率和解决常见问题。</p>

<p>首先，我们需要访问Claude的Slack应用安装页面，网址为<a href="https://www.anthropic.com/claude-in-slack">https://www.anthropic.com/claude-in-slack</a> 。</p>

<p>在此页面上点击“Add to Slack”按钮即可开始安装流程。Slack会弹出确认窗口，点击“Authorize”授权Claude访问您的Slack团队和频道。</p>

<p><img src="../../../../images/2023/2023-04-14-1.png" alt="screen" /></p>

<p>安装完成后，Claude将出现在Slack的应用目录中。我们可以通过点击左侧应用目录中的Claude头像开始使用Claude。此时Claude会发送一条欢迎消息，介绍其功能和命令。Claude支持通过 @Claude 加命令的方式来提问和交互。例如，<del>我们可以 @Claude 加 help 命令来查看所有支持的命令；可以通过 @Claude 加 weather 城市名来查询某个城市的天气；</del>可以@Claude加timer 30来设置一个30分钟的计时器。</p>

<p><img src="../../../../images/2023/2023-04-14-2.png" alt="screen" /></p>

<p>Claude还支持更自然的语言理解，我们可以简单地@Claude后跟上我们的问题或请求，比如@Claude Do I need an umbrella today?或@Claude Please remind me to call John at 3pm。Claude会自动理解我们的意图并提供相应的回答和提醒帮助。</p>

<p><img src="../../../../images/2023/2023-04-14-3.png" alt="screen" /></p>

<p>通过在Slack中安装和使用Claude，我们不但可以提高团队的工作效率，也可以解决许多日常琐事，特别是一些简单的信息查询、提醒或日程相关的任务。相比于人工处理这些日常问题，Claude可以提供即时和自动化的解决方案，节省大量时间和资源。说明Claude是一个在Slack中十分有用的工具与助手。</p>

<h1 id="链接">链接</h1>

<ul>
  <li><a href="https://slack.com/">Slack:https://slack.com/</a></li>
  <li><a href="https://www.anthropic.com/claude-in-slack">Claude:https://www.anthropic.com/claude-in-slack</a></li>
</ul>
 ]]></content>
  </entry>
  
  <entry>
    <title>chatGPT类产品清单</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/ai/2023/04/08/chatGPT_Like_Products_Index.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=chatGPT类产品清单" />
    <published>2023-04-08T00:00:00Z</published>
    <updated>2023-04-08T00:00:00+08:00</updated>
    <id>https://www.70apps.com/ai/2023/04/08/chatGPT_Like_Products_Index</id>
    <content type="html"><![CDATA[ <h1 id="ai大模型平台">AI大模型（平台）</h1>

<table>
  <thead>
    <tr>
      <th>项目</th>
      <th>网址</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>🇺🇸 Google - Brad</td>
      <td><a href="https://bard.google.com/" title="nav">https://bard.google.com/</a></td>
    </tr>
    <tr>
      <td>🇨🇳 百度 - 文心一言</td>
      <td><a href="https://yiyan.baidu.com/" title="nav">https://yiyan.baidu.com/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 OpenAI - GPT</td>
      <td><a href="https://openai.com/" title="nav">https://openai.com/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 OpenAI - chatGPT</td>
      <td><a href="https://ai.com/" title="nav">https://ai.com/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 Llama2 - 免费版本</td>
      <td><a href="https://labs.perplexity.ai/" title="nav">https://labs.perplexity.ai/</a></td>
    </tr>
  </tbody>
</table>

<h1 id="aigpt应用网站">AI（GPT）应用网站</h1>

<table>
  <thead>
    <tr>
      <th>项目</th>
      <th>网址</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>🇺🇸 微软 - New Bing</td>
      <td><a href="https://www.bing.com/new" title="nav">https://www.bing.com/new</a></td>
    </tr>
    <tr>
      <td>🇨🇳 Images.AI</td>
      <td><a href="https://images.ai/" title="nav">https://images.ai/</a></td>
    </tr>
    <tr>
      <td>🇺🇸 微软 - Bing Image Creater</td>
      <td><a href="https://bing.com/create" title="nav">https://bing.com/create</a></td>
    </tr>
    <tr>
      <td>🇨🇳 PMAI - PMAI产品AI小帮手</td>
      <td><a href="https://www.pmaihelper.com/" title="nav">https://www.pmaihelper.com/</a></td>
    </tr>
    <tr>
      <td>🇨🇳 SQLkiller - AI数据分析助手</td>
      <td><a href="https://www.sqlkiller.com/" title="nav">https://www.sqlkiller.com/</a></td>
    </tr>
    <tr>
      <td>🇨🇳 趣学旅程 - chatGPT工具</td>
      <td><a href="https://www.quxuetrip.com/chatgpt.html" title="nav">https://www.quxuetrip.com/</a></td>
    </tr>
    <tr>
      <td>🇨🇳 <a href="https://github.com/binjie09">binjie09</a> - chatGPT Web</td>
      <td><a href="https://chat.binjie.site:7777/" title="nav">https://chat.binjie.site/</a></td>
    </tr>
    <tr>
      <td>☠️ 91ChatGPT</td>
      <td><a href="https://91chatgpt.com/" title="nav">https://91chatgpt.com/</a></td>
    </tr>
    <tr>
      <td>🇨🇳 即时设计 - AI图片</td>
      <td><a href="https://js.design/" title="nav">https://js.design/</a></td>
    </tr>
  </tbody>
</table>

<h1 id="ai插件式应用">AI插件式应用</h1>

<table>
  <thead>
    <tr>
      <th>项目</th>
      <th>网址</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>🇨🇳 <a href="https://slack.com/">Slack</a> - Claude</td>
      <td><a href="https://www.anthropic.com/claude-in-slack" title="nav">https://www.anthropic.com/claude-in-slack</a></td>
    </tr>
    <tr>
      <td>🇺🇸 <a href="https://discord.com/invite/midjourney">Discord</a> - MidJourney</td>
      <td><a href="https://www.midjourney.com/" title="nav">https://www.midjourney.com/</a></td>
    </tr>
  </tbody>
</table>

<h1 id="ai导航站">AI导航站</h1>

<table>
  <thead>
    <tr>
      <th>项目</th>
      <th>网址</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>🇨🇳 一只码 - AIAPP.CLUB</td>
      <td><a href="https://aiapp.club/" title="nav">https://aiapp.club/</a></td>
    </tr>
    <tr>
      <td>🇨🇳 深度导航 - AI分类</td>
      <td><a href="https://www.deepdh.com/ai" title="nav">https://www.deepdh.com/ai</a></td>
    </tr>
    <tr>
      <td>🇨🇳 云典 - AI智库</td>
      <td><a href="http://cosoh.com/" title="nav">http://cosoh.com/</a></td>
    </tr>
  </tbody>
</table>

<blockquote>
  <p>最后更新日期：2023年7月</p>
</blockquote>
 ]]></content>
  </entry>
  
  <entry>
    <title>超级密码</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/app/2023/04/08/Super_Password.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=超级密码" />
    <published>2023-04-08T00:00:00Z</published>
    <updated>2023-04-08T00:00:00+08:00</updated>
    <id>https://www.70apps.com/app/2023/04/08/Super_Password</id>
    <content type="html"><![CDATA[ <h1 id="超级密码">超级密码</h1>

<p>支持iPhone、iPad、Android、PC（谷歌浏览器）的极简密码管理工具</p>

<p><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple112/v4/d1/3a/0a/d13a0a0a-fbfa-32ea-9382-6cb461dbabba/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></p>

<p><a href="https://apps.apple.com/app/id493455722?ct=70apps"><img src="../../../../images/icon/download_app_store_world.png" alt="appstoredownload" /></a>  <a href="https://play.google.com/store/apps/details?id=com.gpwzw.supergenpass"><img src="../../../../images/icon/download_google_play.png" alt="playstoredownload" /></a>  <a href="https://www.70apps.com/release/supergenpass/app-release.apk"><img src="../../../../images/icon/download_local_apk.png" alt="apkdownload" /></a></p>

<h3 id="谷歌浏览器插件">谷歌浏览器插件</h3>
<p><a href="https://chrome.google.com/webstore/detail/superchromepass/dcdaiabaidgglbdapfdaengffpdpicbk"><img src="../../../../images/icon/download_chrome_plugin.png" alt="chromestoredownload" /></a></p>

<h2 id="应用简介">应用简介</h2>

<p>超级密码App使用主密码和对应的网站或使用标识来实时生成密码，所有的密码都是实时计算生成，而且每个网站对应的密码都不相同，最大限度地防止了密码重复使用时造成的隐患。</p>

<p>所有密码没有存储在手机设备或服务器上，安全保护网络资产。</p>

<p>界面重新优化，极简交互体验，节省你的每一秒时间。</p>

<p>SuperGenPass是一个最先在Chrome浏览器上开发的一个开源插件，用于实现以上功能，本应用经原作者授权开发。</p>

<p>我们也开发了一个Chrome插件，请到Chrome插件市场下载，实现PC和手机上的方便操作。</p>

<p>感谢您下载使用本应用，请支持我们!</p>

<h2 id="应用截图">应用截图</h2>

<p><img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource126/v4/81/c1/fe/81c1fe26-9466-9de6-d71c-2b15eff20618/544d128f-6045-44f4-a462-67f6805bd9c0_iPhoneXScreen1@3x.png/300x0w.webp" alt="应用截图1" />
<img src="https://is4-ssl.mzstatic.com/image/thumb/PurpleSource122/v4/6f/ea/08/6fea0838-0b28-1ffa-0d3f-555d14444051/71fa607b-f0e9-4314-9b0b-271b57a04cb2_iPhoneXScreen2@3x.png/300x0w.webp" alt="应用截图2" /></p>

<h2 id="马上下载app">马上下载App</h2>

<p><a href="https://apps.apple.com/app/id493455722?ct=70apps"><img src="../../../../images/icon/download_app_store_world.png" alt="appstoredownload" /></a>  <a href="https://play.google.com/store/apps/details?id=com.gpwzw.supergenpass"><img src="../../../../images/icon/download_google_play.png" alt="playstoredownload" /></a>  <a href="https://www.70apps.com/release/supergenpass/app-release.apk"><img src="../../../../images/icon/download_local_apk.png" alt="apkdownload" /></a></p>

<ul>
  <li><a href="https://apps.apple.com/app/id493455722?ct=70apps">苹果商店下载 https://apps.apple.com/app/id493455722</a></li>
  <li><a href="https://play.google.com/store/apps/details?id=com.gpwzw.supergenpass">谷歌商店下载 https://play.google.com/store/apps/details?id=com.gpwzw.supergenpass</a></li>
  <li><a href="https://www.70apps.com/release/supergenpass/app-release.apk">安卓本地下载 https://www.70apps.com/release/supergenpass/app-release.apk</a></li>
</ul>

<h1 id="谷歌浏览器插件应用截图">谷歌浏览器插件应用截图</h1>

<p><img src="../../../../images/2023/42_screen.jpg" alt="应用截图" /></p>

<h2 id="马上安装谷歌浏览器插件">马上安装谷歌浏览器插件</h2>

<p><a href="https://chrome.google.com/webstore/detail/superchromepass/dcdaiabaidgglbdapfdaengffpdpicbk"><img src="../../../../images/icon/download_chrome_plugin.png" alt="chromestoredownload" /></a></p>
<ul>
  <li><a href="https://chrome.google.com/webstore/detail/superchromepass/dcdaiabaidgglbdapfdaengffpdpicbk">谷歌插件商店下载</a></li>
</ul>

<h1 id="在-product-hunt-上支持我们">在 Product Hunt 上支持我们</h1>

<p><a href="https://www.producthunt.com/posts/super-gen-password?utm_source=badge-featured&amp;utm_medium=badge&amp;utm_souce=badge-super&#0045;gen&#0045;password" target="_blank"><img src="../../../../images/icon-ph.svg" alt="Super&#0032;Gen&#0032;Password - App&#0032;designed&#0032;to&#0032;make&#0032;unique&#0032;password&#0032;for&#0032;every&#0032;websites&#0046; | Product Hunt" style="width: 250px; height: 54px;border: 1px solid #CCC;border-radius: 12px;" width="250" height="54" /></a></p>

<h1 id="全部应用">全部应用</h1>

<ul>
  <li><a href="/blog/app/2025/04/23/LockLive.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/0b/63/84/0b638403-ae84-dfa7-7a90-ddd43430a8c9/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
LockLive</li>
  <li><a href="/blog/app/2023/08/05/Emoji_Guess.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/71/48/8e/71488e88-3ed4-2ede-0d68-b6933b02b2b5/AppIcon-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
图标猜成语</li>
  <li><a href="/blog/app/2023/07/24/Chinese_CrossWord_2023.html"><img src="https://is3-ssl.mzstatic.com/image/thumb/Purple116/v4/35/43/75/35437530-c14c-ef92-0cfc-e438eb1f2808/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/246x0w.png" alt="appicon" /></a><br />
新疯狂填字</li>
  <li><a href="/blog/app/2023/08/04/Super_Clock.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/dc/8a/ff/dc8affa0-f8c3-40f2-543c-bf3e43366ba4/AppIcon-0-0-1x_U007emarketing-0-10-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
超级时钟</li>
  <li><a href="/blog/app/2023/07/23/Crazy_Chengyu.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple122/v4/a6/2a/6e/a62a6e42-8c92-c353-594c-c798c0aaeaaa/AppIcon-0-0-1x_U007emarketing-0-0-0-5-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/260x0w.png" alt="appicon" /></a><br />
疯狂成语</li>
  <li><a href="/blog/app/2023/04/08/Chinese_CrossWord.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple123/v4/38/f7/71/38f771d4-2d95-052a-0eb9-aef58da9aab5/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/230x0w.png" alt="appicon" /></a><br />
疯狂填字</li>
  <li><a href="/blog/app/2023/04/08/Super_Password.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple112/v4/d1/3a/0a/d13a0a0a-fbfa-32ea-9382-6cb461dbabba/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
超级密码</li>
</ul>

 ]]></content>
  </entry>
  
  <entry>
    <title>疯狂填字 - 超级烧脑中文填字游戏</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/app/2023/04/08/Chinese_CrossWord.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=疯狂填字-超级烧脑中文填字游戏" />
    <published>2023-04-08T00:00:00Z</published>
    <updated>2023-04-08T00:00:00+08:00</updated>
    <id>https://www.70apps.com/app/2023/04/08/Chinese_CrossWord</id>
    <content type="html"><![CDATA[ <h1 id="疯狂填字---超级烧脑中文填字游戏">疯狂填字 - 超级烧脑中文填字游戏</h1>

<p>连续更新十多年的中文填字游戏，超过500万人的填友力荐！</p>

<p><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple123/v4/38/f7/71/38f771d4-2d95-052a-0eb9-aef58da9aab5/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/230x0w.webp" alt="appicon" /></p>

<p><a href="https://apps.apple.com/app/id516491385?ct=70apps"><img src="../../../../images/icon/download_app_store_world.png" alt="appstoredownloadbedge" /></a>  <a href="https://play.google.com/store/apps/details?id=com.gpwzw.appchinesewordcross"><img src="../../../../images/icon/download_google_play.png" alt="playstoredownloadbedge" /></a>  <a href="https://www.70apps.com/release/fktz/app-google-release.apk"><img src="../../../../images/icon/download_local_apk.png" alt="apkdownload" /></a></p>

<h3 id="微信小程序--搜索-疯狂填字">微信小程序 : 搜索 疯狂填字</h3>
<p><img src="https://ugc.hitv.com/32/230805131233149f7e1afc60a2a26670c1d25c3ed22f/0T156q0.png" alt="minibedge" /></p>

<h2 id="应用介绍">应用介绍</h2>

<p>疯狂填字是最早的在线中文填字游戏，现在你可以在手机上玩填字了，既打发了时间，又增长了知识！</p>

<p>四大题库，上千关卡，你准备好挑战史上最疯狂的中文填字游戏了吗?</p>

<ul>
  <li>简单填字游戏：小学生也能玩的中文填字</li>
  <li>经典填字游戏：大学生也有难度的填字游戏</li>
  <li>天天填字游戏：超多关卡的填字游戏</li>
  <li>完美填字游戏：极致完美图形填字题目</li>
</ul>

<ol>
  <li>游戏一开始选择关卡或直接开始</li>
  <li>选中空的格子就会显示对应提示</li>
  <li>点击正方字母按键输入首字母拼音</li>
  <li>正确完成词条就会转换为汉字显示</li>
  <li>点击菜单按钮弹出更多功能菜单</li>
  <li>累计3星即可解锁下一题</li>
  <li>完成成就可以领取金币</li>
  <li>购买答案后可以双击或通过按钮查看答案</li>
</ol>

<h3 id="常见问题">常见问题</h3>

<ul>
  <li>问：怎么输入汉字？</li>
  <li>答：疯狂填字原创使用拼音首字母输入答题玩法，词条答对即可显示正确答案。</li>
</ul>

<hr />

<ul>
  <li>问：为什么我没有看到四个题库？</li>
  <li>答：题库经常更新，所以需要联网下载，下载后左右滑屏即可查看所有题库。</li>
</ul>

<h3 id="关注我们">关注我们</h3>

<p>欢迎关注新浪官方微博：<a href="https://weibo.com/2707133653">@疯狂填字</a></p>

<p>欢迎关注新浪官方微信公众号：疯狂填字</p>

<p>官方网站：<a href="https://www.70apps.com/fktz/">https://www.70apps.com/fktz/</a></p>

<h2 id="应用截图">应用截图</h2>

<p><img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource116/v4/43/5d/09/435d09b7-08ab-6f31-b4b0-351c2b5c2d16/8f0dbf28-63c1-4989-bc2c-e123b9aaee66_iPhoneXScreen1@3x.png/300x0w.webp" alt="应用截图1" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource112/v4/55/96/52/559652d2-36dc-d02c-71df-be89f2d6bdd4/39bce565-d619-4354-bcfa-d45cc707fc55_iPhoneXScreen2@3x.png/300x0w.webp" alt="应用截图2" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource112/v4/00/b5/24/00b5247b-66a4-8d0b-3bae-1148479b152b/571a6c58-6c50-4f50-8076-d6545ea0102c_iPhoneXScreen3@3x.png/300x0w.webp" alt="应用截图3" />
<img src="https://is1-ssl.mzstatic.com/image/thumb/PurpleSource112/v4/ab/2f/06/ab2f06b9-8457-7b3d-105a-5799220d890e/f7cd5257-b660-43f9-8f54-c405b031486b_iPhoneXScreen4@3x.png/300x0w.webp" alt="应用截图4" /></p>

<h2 id="马上下载app">马上下载App</h2>

<p><a href="https://apps.apple.com/app/id516491385?ct=70apps"><img src="../../../../images/icon/download_app_store_world.png" alt="appstoredownloadbedge" /></a>  <a href="https://play.google.com/store/apps/details?id=com.gpwzw.appchinesewordcross"><img src="../../../../images/icon/download_google_play.png" alt="playstoredownloadbedge" /></a>  <a href="https://www.70apps.com/release/fktz/app-google-release.apk"><img src="../../../../images/icon/download_local_apk.png" alt="apkdownload" /></a></p>

<ul>
  <li><a href="http://apps.apple.com/app/id516491385?ct=70apps">苹果商店下载(非中国区帐号)http://apps.apple.com/app/id516491385</a></li>
  <li><a href="https://play.google.com/store/apps/details?id=com.gpwzw.appchinesewordcross">谷歌商店下载https://play.google.com/store/apps/details?id=com.gpwzw.appchinesewordcross</a></li>
  <li><a href="https://www.70apps.com/release/fktz/app-google-release.apk">安卓本地下载https://www.70apps.com/release/fktz/app-google-release.apk</a></li>
</ul>

<h3 id="微信小程序--搜索-疯狂填字-1">微信小程序 : 搜索 疯狂填字</h3>
<p><img src="../../../../images/icon/mini_fktz.png" alt="minibedge" /></p>

<h1 id="全部应用">全部应用</h1>

<ul>
  <li><a href="/blog/app/2025/04/23/LockLive.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/0b/63/84/0b638403-ae84-dfa7-7a90-ddd43430a8c9/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
LockLive</li>
  <li><a href="/blog/app/2023/08/05/Emoji_Guess.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/71/48/8e/71488e88-3ed4-2ede-0d68-b6933b02b2b5/AppIcon-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
图标猜成语</li>
  <li><a href="/blog/app/2023/07/24/Chinese_CrossWord_2023.html"><img src="https://is3-ssl.mzstatic.com/image/thumb/Purple116/v4/35/43/75/35437530-c14c-ef92-0cfc-e438eb1f2808/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/246x0w.png" alt="appicon" /></a><br />
新疯狂填字</li>
  <li><a href="/blog/app/2023/08/04/Super_Clock.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/dc/8a/ff/dc8affa0-f8c3-40f2-543c-bf3e43366ba4/AppIcon-0-0-1x_U007emarketing-0-10-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
超级时钟</li>
  <li><a href="/blog/app/2023/07/23/Crazy_Chengyu.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple122/v4/a6/2a/6e/a62a6e42-8c92-c353-594c-c798c0aaeaaa/AppIcon-0-0-1x_U007emarketing-0-0-0-5-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/260x0w.png" alt="appicon" /></a><br />
疯狂成语</li>
  <li><a href="/blog/app/2023/04/08/Chinese_CrossWord.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple123/v4/38/f7/71/38f771d4-2d95-052a-0eb9-aef58da9aab5/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/230x0w.png" alt="appicon" /></a><br />
疯狂填字</li>
  <li><a href="/blog/app/2023/04/08/Super_Password.html"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple112/v4/d1/3a/0a/d13a0a0a-fbfa-32ea-9382-6cb461dbabba/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/246x0w.png" alt="appicon" /></a><br />
超级密码</li>
</ul>

 ]]></content>
  </entry>
  
  <entry>
    <title>JEKYLL 手工配置语法高亮样式</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2021/11/15/JEKYLL_SYNTAX_HIGHLIGHTING_THEME.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=JEKYLL手工配置语法高亮样式" />
    <published>2021-11-15T00:00:00Z</published>
    <updated>2021-11-15T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2021/11/15/JEKYLL_SYNTAX_HIGHLIGHTING_THEME</id>
    <content type="html"><![CDATA[ <h1 id="调用rougify生成器">调用rougify生成器</h1>

<p>参考官方增强样式的使用方法：</p>

<p>Syntax highlighting</p>

<p>Themes should support Jekyll’s syntax highlighting by sourcing a <a href="https://github.com/rouge-ruby/rouge/tree/master/lib/rouge/themes">Rouge stylesheet</a>, often as a Sass import. To generate a stylesheet, you can use the following command (choosing the Rouge theme that best suits your Jekyll theme):</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>rougify style base16.solarized.dark &gt; _scss/rouge.scss
</code></pre></div></div>

<h2 id="手工调整行号的表格样式">手工调整行号的表格样式</h2>

<p>添加_sass/_syntax-highlighting-dark-fix.scss</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">.highlight</span> <span class="nt">table</span> <span class="p">{</span> <span class="nl">margin</span><span class="p">:</span><span class="m">5px</span> <span class="m">0</span><span class="p">;</span><span class="nl">border</span><span class="p">:</span><span class="m">0</span><span class="p">;</span><span class="nl">background</span><span class="p">:</span> <span class="n">linear-gradient</span><span class="p">(</span><span class="n">rgba</span><span class="p">(</span><span class="m">255</span><span class="p">,</span><span class="m">255</span><span class="p">,</span><span class="m">255</span><span class="p">,</span><span class="m">0.1</span><span class="p">)</span> <span class="m">50%</span><span class="p">,</span> <span class="n">rgba</span><span class="p">(</span><span class="m">0</span><span class="p">,</span><span class="m">0</span><span class="p">,</span><span class="m">0</span><span class="p">,</span><span class="m">0.1</span><span class="p">)</span> <span class="m">50%</span><span class="p">);</span> <span class="nl">background-size</span><span class="p">:</span> <span class="m">100%</span> <span class="m">40px</span><span class="p">;}</span>
<span class="nc">.highlight</span> <span class="nt">table</span> <span class="nt">td</span> <span class="p">{</span> <span class="nl">padding</span><span class="p">:</span><span class="m">0</span> <span class="m">5px</span><span class="p">;</span> <span class="nl">border</span><span class="p">:</span><span class="m">0</span><span class="p">;}</span>
<span class="nc">.highlight</span> <span class="nt">table</span> <span class="nt">td</span><span class="nc">.gl</span> <span class="p">{</span> <span class="nl">width</span><span class="p">:</span><span class="m">0</span><span class="p">;</span> <span class="nl">text-align</span><span class="p">:</span> <span class="nb">right</span><span class="p">;</span><span class="nl">border-right</span><span class="p">:</span> <span class="m">1px</span> <span class="nb">solid</span> <span class="m">#ccc</span><span class="p">;}</span>
<span class="nc">.highlight</span> <span class="nt">table</span> <span class="nt">pre</span> <span class="p">{</span> <span class="nl">padding</span><span class="p">:</span> <span class="m">0</span><span class="p">;</span> <span class="nl">margin</span><span class="p">:</span> <span class="m">0</span><span class="p">;</span> <span class="nl">border</span><span class="p">:</span><span class="m">0</span><span class="p">;</span><span class="nl">padding-right</span><span class="p">:</span> <span class="m">2px</span><span class="p">;}</span>
<span class="nt">div</span><span class="nc">.highlight</span><span class="o">,</span> <span class="nt">figure</span><span class="nc">.highlight</span> <span class="p">{</span><span class="nl">background-color</span><span class="p">:</span> <span class="nb">transparent</span><span class="cp">!important</span><span class="p">;}</span>
<span class="nt">pre</span><span class="nc">.highlight</span><span class="o">,</span> <span class="nt">pre</span><span class="nc">.highlight</span> <span class="nc">.w</span> <span class="p">{</span> <span class="nl">color</span><span class="p">:</span> <span class="m">#93a1a1</span><span class="p">;</span> <span class="p">}</span>
<span class="nt">figure</span><span class="nc">.highlight</span><span class="o">&gt;</span><span class="nt">pre</span> <span class="p">{</span> <span class="nl">color</span><span class="p">:</span> <span class="m">#93a1a1</span><span class="p">;</span> <span class="nl">background-color</span><span class="p">:</span> <span class="m">#002b36</span><span class="p">;}</span>
</code></pre></div></div>

<p>修改 css/main.scss</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">//</span> <span class="nt">Import</span> <span class="nt">partials</span> <span class="nt">from</span> <span class="s1">"sass_dir"</span> <span class="o">(</span><span class="nt">defaults</span> <span class="nt">to</span> <span class="s1">"_sass"</span><span class="o">)</span>
<span class="k">@import</span>
        <span class="s1">"base"</span><span class="p">,</span>
        <span class="s1">"layout"</span><span class="p">,</span>
        <span class="s1">"toc"</span><span class="p">,</span>
        <span class="s1">"rouge"</span><span class="p">,</span>
        <span class="s1">"syntax-highlighting-dark-fix"</span>
<span class="p">;</span>

</code></pre></div></div>

<p>post里添加代码就可以用，<code>linenos</code>可选</p>

<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{% highlight css linenos %}
figure.highlight&gt;pre {
  color: #93a1a1;
  background-color: #002b36;
}
{% endhighlight %}
</code></pre></div></div>

<p>或</p>

<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">~~~</span><span class="nl">css linenos
</span><span class="sb">figure.highlight&gt;pre {
  color: #93a1a1;
  background-color: #002b36;
}
//~~~
</span></code></pre></div></div>

<h2 id="效果">效果</h2>

<figure class="highlight"><pre><code class="language-css" data-lang="css"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
</pre></td><td class="code"><pre><span class="nt">figure</span><span class="nc">.highlight</span><span class="o">&gt;</span><span class="nt">pre</span> <span class="p">{</span>
  <span class="nl">color</span><span class="p">:</span> <span class="m">#93a1a1</span><span class="p">;</span>
  <span class="nl">background-color</span><span class="p">:</span> <span class="m">#002b36</span><span class="p">;</span>
<span class="p">}</span>
</pre></td></tr></tbody></table></code></pre></figure>

<h1 id="也可以在线搜索可用的样式">也可以在线搜索可用的样式</h1>

<h2 id="访问rouge-theme-preview-page">访问<a href="* https://spsarolkar.github.io/rouge-theme-preview/">Rouge Theme Preview Page</a></h2>

<p>选择合适的样式抓包下载style.css</p>

<p>我用的是：</p>

<ul>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-base16.solarized.dark.css //base16.solarized.dark</li>
</ul>

<h1 id="例子">例子</h1>

<h2 id="java">Java</h2>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">int</span> <span class="n">total</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span>
<span class="k">for</span><span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">list</span><span class="o">.</span><span class="na">length</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span>
<span class="o">{</span>	<span class="n">total</span> <span class="o">+=</span> <span class="n">list</span><span class="o">[</span><span class="n">i</span><span class="o">];</span>
<span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span> <span class="n">list</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">);</span>
<span class="o">}</span>
<span class="k">return</span> <span class="n">total</span><span class="o">;</span>
</code></pre></div></div>

<h2 id="scala">Scala</h2>

<div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  <span class="k">def</span> <span class="nf">findNums</span><span class="o">(</span><span class="n">n</span><span class="k">:</span> <span class="kt">Int</span><span class="o">)</span><span class="k">:</span> <span class="kt">Iterable</span><span class="o">[(</span><span class="kt">Int</span>, <span class="kt">Int</span><span class="o">)]</span> <span class="k">=</span> <span class="o">{</span>

    <span class="c1">// a for comprehension using two generators</span>
    <span class="nf">for</span> <span class="o">(</span><span class="n">i</span> <span class="k">&lt;-</span> <span class="mi">1</span> <span class="n">until</span> <span class="n">n</span><span class="o">;</span>
         <span class="n">j</span> <span class="k">&lt;-</span> <span class="mi">1</span> <span class="nf">until</span> <span class="o">(</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="o">);</span>
         <span class="k">if</span> <span class="nf">isPrime</span><span class="o">(</span><span class="n">i</span> <span class="o">+</span> <span class="n">j</span><span class="o">))</span> <span class="nf">yield</span> <span class="o">(</span><span class="n">i</span><span class="o">,</span> <span class="n">j</span><span class="o">)</span>
  <span class="o">}</span>
</code></pre></div></div>

<h2 id="c">C++</h2>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include &lt;iostream&gt;
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>

<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>    
    <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"Size of char: "</span> <span class="o">&lt;&lt;</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">char</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="s">" byte"</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span>
    <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"Size of int: "</span> <span class="o">&lt;&lt;</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">int</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="s">" bytes"</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span>
    <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"Size of float: "</span> <span class="o">&lt;&lt;</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">float</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="s">" bytes"</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span>
    <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"Size of double: "</span> <span class="o">&lt;&lt;</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">double</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="s">" bytes"</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span>

    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="python">Python</h2>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre><span class="o">~~~</span>
<span class="c1"># line comment
</span><span class="n">v</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">s</span> <span class="o">=</span> <span class="s">"string"</span>

<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="o">-</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">):</span>
    <span class="k">print</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>

<span class="k">class</span> <span class="nc">LinkedList</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">x</span>
        <span class="bp">self</span><span class="p">.</span><span class="nb">next</span> <span class="o">=</span> <span class="bp">None</span>
<span class="o">~~~</span>
</pre></td></tr></tbody></table></code></pre></figure>

<p>找时候做一个web版本</p>

<ul>
  <li>https://github.com/rouge-ruby/rouge/tree/master/lib/rouge/themes</li>
</ul>

<h1 id="引用">引用</h1>

<ol>
  <li><a href="https://ben.balter.com/jekyll-style-guide/themes/">增强样式官方指引</a></li>
  <li><a href="https://jekyllrb.com/docs/liquid/tags/#code-snippet-highlighting">语法高亮官方指引</a></li>
  <li><a href="* https://spsarolkar.github.io/rouge-theme-preview/">Rouge Theme Preview Page</a></li>
  <li><a href="https://github.com/rouge-ruby/rouge/blob/master/docs/Languages.md">over 200 different languages</a></li>
</ol>

<h2 id="完整的theme和css地址列表">完整的Theme和css地址列表</h2>

<ul>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-base16.css //base16</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-base16.dark.css //base16.dark</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-base16.light.css //base16.light</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-base16.monokai.css //base16.monokai</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-base16.monokai.dark.css //base16.monokai.dark</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-base16.monokai.light.css //base16.monokai.light</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-base16.solarized.css //base16.solarized</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-base16.solarized.dark.css //base16.solarized.dark</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-base16.solarized.light.css //base16.solarized.light</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-colorful.css //colorful</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-github.css //github</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-gruvbox.css //gruvbox</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-gruvbox.dark.css //gruvbox.dark</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-gruvbox.light.css //gruvbox.light</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-igorpro.css //igorpro</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-molokai.css //molokai</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-monokai.css //monokai</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-monokai.sublime.css //monokai.sublime</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-pastie.css //pastie</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-thankful_eyes.css //thankful_eyes</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-tulip.css //tulip</li>
  <li>https://spsarolkar.github.io/rouge-theme-preview/css/syntax-pastie.css //pastie</li>
</ul>
 ]]></content>
  </entry>
  
  <entry>
    <title>GitHub Pages + JEKYLL 支持页面内目录导航</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2021/10/27/JEKYLL_TOC_THEME.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=GitHubPages+JEKYLL支持页面内目录导航" />
    <published>2021-10-27T00:00:00Z</published>
    <updated>2021-10-27T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2021/10/27/JEKYLL_TOC_THEME</id>
    <content type="html"><![CDATA[ <h1 id="jekyll-支持页面内目录导航">JEKYLL 支持页面内目录导航</h1>

<p>在网上搜索到一个解决方案，可以在GitHub Pages 下使用：</p>

<p>GitHub项目：<a href="https://github.com/allejo/jekyll-toc">Jekyll Pure Liquid Table of Contents</a></p>

<ul>
  <li>下载 toc.html 文件</li>
  <li>放到 _includes 目录</li>
  <li>在 _layouts 下用到的 html 里面，在 content 前面加上一行</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{% include toc.html html=content %}
</code></pre></div></div>

<h1 id="我的实践">我的实践</h1>

<h2 id="下载-tochtml">下载 toc.html</h2>

<p>我下载了最新版本的 toc.html <a href="https://github.com/allejo/jekyll-toc/releases/latest">https://github.com/allejo/jekyll-toc/releases/latest</a></p>

<h2 id="复制一个模板">复制一个模板</h2>

<p>我的做法是新增一个模板，复制 _layouts/post.html 为 _layouts/post-toc.html</p>

<p>增加了两次，用于做移动的适配。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  &lt;div class="toc"&gt;
    &lt;div class="title"&gt;目录 Contents&lt;/div&gt;
    &lt;div class="content"&gt;{% include toc.html html=content %}&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="toc-mobile"&gt;
      &lt;nav class="title" onclick="javascript:document.getElementById('toc_mobile_content').classList.toggle('show');"&gt;目录 Contents&lt;/nav&gt;
      &lt;div class="content" id="toc_mobile_content" onclick="javascript:document.getElementById('toc_mobile_content').classList.toggle('show');"&gt;{% include toc.html html=content %}&lt;/div&gt;
  &lt;/div&gt;
</code></pre></div></div>

<h2 id="调用模板">调用模板</h2>

<p>新增POST时，指定使用的layout模板</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>---
layout: post-toc
category : code
title: GitHub Pages + JEKYLL 支持页面内目录导航
description: 使用jekyll-toc定制页面内目录
---
</code></pre></div></div>

<p>可以在我网站上的这个页面看到这个目录的效果。如果需要可以来我的Github项目下载代码研究。</p>

<h1 id="引用">引用</h1>

<ol>
  <li><a href="https://github.com/allejo/jekyll-toc">linking to Jekyll Pure Liquid Table of Contents</a></li>
  <li><a href="https://stackoverflow.com/questions/22044488/jekyll-code-in-jekyll">linking to stackoverflow:jekyll-code-in-jekyll</a></li>
</ol>
 ]]></content>
  </entry>
  
  <entry>
    <title>国内厂商应用商店跳转链接</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/web/2021/10/21/Chinese_Android_Market_Schema.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=国内厂商应用商店跳转链接" />
    <published>2021-10-21T00:00:00Z</published>
    <updated>2021-10-21T00:00:00+08:00</updated>
    <id>https://www.70apps.com/web/2021/10/21/Chinese_Android_Market_Schema</id>
    <content type="html"><![CDATA[ <h1 id="收集到的app-schema">收集到的App Schema</h1>

<p>以微信的包名com.tencent.mm为例</p>

<table>
  <thead>
    <tr>
      <th>应用商店</th>
      <th>跳转方式</th>
      <th>值</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>GooglePlay（默认应用商店）</td>
      <td>SCHEMA Link</td>
      <td><a href="market://details?id=com.tencent.mm">market://details?id=com.tencent.mm</a></td>
    </tr>
    <tr>
      <td>GooglePlay</td>
      <td>Web Link</td>
      <td><a href="https://play.google.com/store/apps/details?id=com.tencent.mm">https://play.google.com/store/apps/details?id=com.tencent.mm</a></td>
    </tr>
    <tr>
      <td>小米应用商店</td>
      <td>SCHEMA Link</td>
      <td><a href="mimarket://details?id=com.tencent.mm">mimarket://details?id=com.tencent.mm</a></td>
    </tr>
    <tr>
      <td>小米应用商店</td>
      <td>Web Link</td>
      <td><a href="https://app.xiaomi.com/details?id=com.tencent.mm">https://app.xiaomi.com/details?id=com.tencent.mm</a></td>
    </tr>
    <tr>
      <td>三星应用商店</td>
      <td>SCHEMA Link</td>
      <td><a href="samsungapps://ProductDetail/com.tencent.mm">samsungapps://ProductDetail/com.tencent.mm</a></td>
    </tr>
    <tr>
      <td>华为应用商店</td>
      <td>SCHEMA Link</td>
      <td><a href="appmarket://details?id=com.tencent.mm">appmarket://details?id=com.tencent.mm</a></td>
    </tr>
    <tr>
      <td>华为应用商店(自定义渠道)</td>
      <td>SCHEMA Link</td>
      <td><a href="hiapplink://com.huawei.appmarket?appId=C5683">hiapplink://com.huawei.appmarket?appId=C5683</a></td>
    </tr>
    <tr>
      <td>华为应用商店(自定义渠道)</td>
      <td>Web Link</td>
      <td><a href="https://appgallery.cloud.huawei.com/ag/n/app/C5683">https://appgallery.cloud.huawei.com/ag/n/app/C5683</a></td>
    </tr>
    <tr>
      <td>OPPO应用商店</td>
      <td>SCHEMA Link</td>
      <td><a href="oppomarket://details?packagename=com.tencent.mm">oppomarket://details?packagename=com.tencent.mm</a></td>
    </tr>
    <tr>
      <td>OPPO应用商店(私有)</td>
      <td>SCHEMA Link</td>
      <td><a href="oaps://mk/dt?id=30412997">oaps://mk/dt?id=30412997</a></td>
    </tr>
    <tr>
      <td>vivo应用商店</td>
      <td>SCHEMA Link</td>
      <td><a href="vivomarket://details?id=com.tencent.mm&amp;th_id=40413">vivomarket://details?id=com.tencent.mm&amp;th_id=40413</a></td>
    </tr>
    <tr>
      <td>vivo应用商店</td>
      <td>Web Link</td>
      <td><a href="https://h5coml.vivo.com.cn/h5coml/appdetail_h5/browser_v2/index.html?appId=40413&amp;resource=301&amp;source=7">https://h5coml.vivo.com.cn/h5coml/appdetail_h5/browser_v2/index.html?appId=40413&amp;resource=301&amp;source=7</a></td>
    </tr>
    <tr>
      <td>魅族应用商店</td>
      <td>SCHEMA Link</td>
      <td><a href="mstore://details?package_name=com.tencent.mm">mstore://details?package_name=com.tencent.mm</a></td>
    </tr>
    <tr>
      <td>魅族应用商店</td>
      <td>Web Link</td>
      <td><a href="http://app.meizu.com/apps/public/detail?package_name=com.tencent.mm">https://app.meizu.com/apps/public/detail?package_name=com.tencent.mm</a></td>
    </tr>
  </tbody>
</table>

<h1 id="ua判断">UA判断</h1>

<ul>
  <li><a href="https://github.com/faisalman/ua-parser-js">ua-parser-js</a> //2021-10</li>
  <li><a href="https://github.com/suxianbaozi/phonecheck">phonecheck</a> //2021-4</li>
  <li><a href="http://fex-team.github.io/ua-device/">ua-device.js</a> 是由Baidu WebFE(FEX)团队开发的一个用于解析UA来得到用户终端信息的JS框架。//2017</li>
  <li><a href="http://www.webapps-online.com/online-tools/user-agent-strings">http://www.webapps-online.com/online-tools/user-agent-strings</a></li>
</ul>

<h1 id="引用">引用</h1>

<ol>
  <li><a href="https://developer.android.com/distribute/marketing-tools/linking-to-google-play">linking to google play</a></li>
  <li><a href="https://open-wiki.flyme.cn/doc-wiki/index#id?134">linking to meizu market</a></li>
</ol>
 ]]></content>
  </entry>
  
  <entry>
    <title>Mac M1升级Jekyll遇到的新问题</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/web/2021/10/08/Jekyll_Update_Mac_M1.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=MacM1升级Jekyll遇到的新问题" />
    <published>2021-10-08T00:00:00Z</published>
    <updated>2021-10-08T00:00:00+08:00</updated>
    <id>https://www.70apps.com/web/2021/10/08/Jekyll_Update_Mac_M1</id>
    <content type="html"><![CDATA[ <h1 id="问题-new">问题 new</h1>

<p>2021年升级Mac M1了，Jekyll 又无法启动了。</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ jekyll server
</code></pre></div></div>

<h1 id="解决">解决</h1>

<p>升级了一下Jekyll到4.2.1，新的安装命令：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ gem install bundler jekyll
$ jekyll new my-awesome-site
$ cd my-awesome-site
$ bundle exec jekyll serve
</code></pre></div></div>

<p>先升级brew</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ brew update
</code></pre></div></div>

<p>安装脚本提示</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>You may want to add this to your PATH.

ruby is keg-only, which means it was not symlinked into /opt/homebrew,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have ruby first in your PATH, run:
  echo 'export PATH="/opt/homebrew/opt/ruby/bin:$PATH"' &gt;&gt; ~/.zshrc

For compilers to find ruby you may need to set:
  export LDFLAGS="-L/opt/homebrew/opt/ruby/lib"
  export CPPFLAGS="-I/opt/homebrew/opt/ruby/include"

For pkg-config to find ruby you may need to set:
  export PKG_CONFIG_PATH="/opt/homebrew/opt/ruby/lib/pkgconfig"
</code></pre></div></div>

<p>重新安装最新版本ruby</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ brew install ruby
</code></pre></div></div>

<p>查询ruby版本还是老的</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]
</code></pre></div></div>

<p>MAC M1 环境下配置ruby运行路径</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ export PATH="/opt/homebrew/opt/ruby/bin:$PATH"
</code></pre></div></div>
<p>查询后是最新版本</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [arm64-darwin20]
</code></pre></div></div>

<p>在新的ruby环境下重新安装</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo gem install bundler jekyll
</code></pre></div></div>
<p>重新配置gem的Path</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ export PATH="/opt/homebrew/lib/ruby/gems/3.0.0/bin:$PATH"
</code></pre></div></div>
<p>再次查询就正确了</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ which jekyll                                           
/opt/homebrew/lib/ruby/gems/3.0.0/bin/jekyll
</code></pre></div></div>
<p>再次运行还是有问题，提示webrick错误
google一下，原来是jekyll默认少引用了一个包</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ bundle add webrick                              
</code></pre></div></div>
<p>把PATH参数加到 M1 默认终端配置文件 <code>~/.zshrc</code> 中</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo echo 'export PATH="/opt/homebrew/opt/ruby/bin:$PATH"' &gt;&gt; ~/.zshrc
$ sudo echo 'export PATH="/opt/homebrew/lib/ruby/gems/3.0.0/bin:$PATH"' &gt;&gt; ~/.zshrc
</code></pre></div></div>
<p>验证一下 <code>~/.zshrc</code></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ vim ~/.zshrc
</code></pre></div></div>

<p>接下来就正常了。</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ jekyll serve
//or
$ jekyll server
</code></pre></div></div>

<ol>
  <li><a href="https://jekyllrb.com/">Jekyll官网</a></li>
  <li><a href="https://talk.jekyllrb.com/t/load-error-cannot-load-such-file-webrick/5417/6">load error:cannot load such file webrick</a></li>
</ol>
 ]]></content>
  </entry>
  
  <entry>
    <title>SWIFT编程速查表</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2021/03/25/SWIFT_CHEATSHEET.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=SWIFT编程速查表" />
    <published>2021-03-25T00:00:00Z</published>
    <updated>2021-03-25T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2021/03/25/SWIFT_CHEATSHEET</id>
    <content type="html"><![CDATA[ <h1 id="定义常量和变量">定义常量和变量</h1>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  // 使用 let 定义常量
  let double: Double = 2.0
  //doubel = 3.0 返回错误：不能修改常量的值
  let inferredDouble = 2.0 //通过显式赋值定义浮点数字类型

  // 使用 var 定义变量
  var mutableInt: Int = 1
  mutableInt = 2
  // 正确：可以修改变量的值

</code></pre></div></div>

<h1 id="数字类型转换">数字类型转换</h1>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  let integerValue = 8
  let doubleValue = 8.0
  // let sum = integerValue + doubleValue
  // 错误：类型不匹配

  // 使用强制类型转换来避免隐藏的类型转换错误
  let sum = Double(integerValue) + doubleValue
  // 正确：两个值是同一类型了
</code></pre></div></div>

<h1 id="常用类型">常用类型</h1>

<h2 id="字符串strings">字符串（Strings）</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  // 使用字符串表达式来显式赋值定义变量或常量
  let helloWorld = "Hello, World!"

  // 使用多行字符串
  let helloWorldProgram = """
  A "Hello, World" program
  by Cheney Lin
  from China
  """

  // 空字符串
  let emptyString = "" // 使用字符串表达式
  let anotherEmptyString = String() //使用类初始化

  // 连接字符串
  var mutableString = "Swift"
  mutableString += " is awesome!"

  // 字符串插值
  print("The value is \(double)")
  // 字符串插值字符串
  print("This is my opinion: \(mutableString)")
</code></pre></div></div>

<h2 id="元组tuples">元组（Tuples）</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  //组合多个值的元组类型
  let httpError = (503, "Server Error")

  //赋值调用元组的值
  let (code, reason) = httpError
  //直接调用元组的值
  let codeByIndex = httpError.0
  let reasonByIndex = httpError.1
  //指定调用元组的值
  let (_, justTheReason) = httpError
</code></pre></div></div>

<h2 id="可选预定义类型optionals">可选预定义类型（Optionals）</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  // 可选预定义的变量可以是空值（nil）
  var catchphrase: String? //默认为nil
  catchphrase = "Hey, what's up!"

  // 使用 ! 修饰符进行强制转换
  // 使用前需要保证变量有值，否则就异常错误了
  let count1: Int = catchphrase!.count

  // 使用 ? 修饰符调用变量，进行可选预定义绑定
  // 通过对赋值结果的判断来保证后续代码的正常执行
  if let count = catchphrase?.count {
    print(count)
  }

  // 使用空值合并运算符 ?? 设置一个默认值
  let count2: Int = catchphrase?.count ?? 0

  // 使用可选预定义类型链式取值
  // 如果原始值是nil，新变量的值也为nil
  let count3: Int? = catchphrase?.count

  // 强制解析可选预定义类型
  let forcedCatchphrase: String! = "Hey, what's up!"
  let implicitCatchphrase = forcedCatchphrase
  // 获取强制解析变量的值，就不需要加 !
</code></pre></div></div>

<h2 id="集合类型数组array">集合类型：数组（Array）</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  let immutableArray:[String]=["Alice", "Bob"]
  // 也可以显式定义字符串数组
  var mutableArray = ["Eve"，"Frank"]
  // 检测数组中的值
  let isEveThere = immutableArray.contains(“Eve")
  // 通过序号调用数组的值
  let name: String = immutableArray[0]

  // 更新数组中某项的值，注意别超过了数组项的总数
  mutableArray[1]="Bart"
  // immutableArray[1]="Bart"
  // 错误：数组常量的值不能被赋值
  mutableArray.append("Ellen") // 追加项
  // 指定位置插入值
  mutableArray.insert("Gemma",at:1)
  // 删除项
  let removederson = mutableArray.remove(at:1)

  // 数组常量（let collection）不能重新定义或对某一项进行赋值
  // 数组变量（var collection）可以重新定义或对某一项进行赋值
  mutableArray =["Ilary","David"]
  mutableArray[0]=“John"
</code></pre></div></div>

<h2 id="集合类型字典dictionary">集合类型：字典（Dictionary）</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  // 通过键值对（key + value）管理数据
  let immutableDict: [String: String] = ["name": "Kirk", "rank": "captain"]
  // 也可以显式定义字典
  var mutableDict = ["name": "Kirk", "rank": "captain"]
  // 使用 key 调用字典的值，查找不到时返回nil
  let name2: String? = immutableDict["name"]
  // 更新字典的值
  mutableDict["name"] = "Janeway"
  // 增加新的值
  mutableDict["ship"] = "Voyager"
  // 删除值，查找不到时返回nil
  let rankWasRemoved: String? = mutableDict.removeValue(forKey: "rank")
</code></pre></div></div>

<h2 id="集合类型集合set">集合类型：集合（Set）</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  // 集合会自动忽略相同的值，所以下面的例子中 immutableSet 最后只会有两项值
  let immutableSet: Set = ["chocolate", "vanilla", "chocolate"]
  var mutableSet: Set = ["butterscotch", "strawberry"]
  // 测试集合是否包含某个值
  immutableSet.contains("chocolate")
  // 增加值
  mutableSet.insert("green tea")
  // 删除值，查找不到时返回nil
  let flavorWasRemoved: String? = mutableSet.remove("strawberry")
</code></pre></div></div>

<h1 id="常用语法">常用语法</h1>

<h2 id="流程循环">流程：循环</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  // 遍历列表或集合
  for item in listOrSet {
    print(item)
  }
  // 遍历字典对象
  for (key, value) in dictionary {
    print("\(key) = \(value)")
  }

  // 遍历指定范围
  // 封闭指定范围操作符（...）
  for i in 0...10 {
    print(i) //0 到 10
  }
  // 半开放指定范围操作符（..&lt;）
  for i in 0..&lt;10 {
    print(i) //0 到 9
  }
  // while 关键字，可能不执行
  var x = 0
  while x &lt; 10 {
    x += 1
    print(x)
  }
  // repeate-while 关键字，至少执行一次
  repeat {
    x -= 1
    print(x)
  } while(x &gt; 0)
</code></pre></div></div>

<h2 id="流程判断">流程：判断</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  // 使用 if 关键字来选择不同分支语句
  let number = 88
  if (number &lt;= 10) {
    // 如果 number 小于等于10，执行这里的代码
  }else if (number &gt; 10 &amp;&amp; number &lt;100) {
    // 如果 number 大于10且小于100，执行这里的代码
  } else {
    //否则，执行这里的代码
  }

  // 三目操作符
  // 是否判断的简写
  let height = 100
  let isTall = height &gt; 200 ? true : false

  // 使用 guard 关键字优化判断语句的效率
  for n in 1...30 {
    guard n % 2 ==0 else {
      continue
    }
    print("\(n) is even")
  }

  // 使用 switch 关键字选择多个分支语句
  let year = 2021
  switch year {
    case 2003, 2004:
      // year的值为2003或2004
      print("Panther or Tiger")
    case 2010:
      print("Lion")
    case 2012...2015:
      print("Mountain Lion trrough El Captain")
    default:
      print("Not ready!")
  }
</code></pre></div></div>

<h2 id="函数function">函数（Function）</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  // 返回值为空的函数（void）
  func sayHello() {
    print("Hello")
  }

  // 带参数的函数
  func sayHello(name: String) {
    print("Hello \(name)!")
  }

  // 带参数的函数，同时设置默认值
  func sayHello(name: String = "Cheney") {
    print("Hello \(name)!")
  }

  // 带多个参数的函数，同时设置默认值
  func sayHello(name: String = "Cheney", age: Int) {
    print("\(name) is \(age) years old!")
  }
  // 指定没有设置默认值的参数就可以调用函数
  sayHello(age: 35)

  // 带参数且指定返回值的函数
  func add(x: Int, y: Int) -&gt; Int {
    return x + y
  }
  let value = add(x: 8, y: 10)

  // 只有一个表达式时，可以省略 return 关键字
  func multiply(x: Int, y: Int) -&gt; Int {
    x * y
  }
  // 额外指定参数命名标签
  func add(x xVal: Int, y yVal: Int) -&gt; Int {
    return xVal + yVal
  }
  // 参数的省略写法
  func add(_ x: Int, y: Int) -&gt; Int {
    return x + y
  }
  let value = add(8, y: 10)

  // 把函数作为参数
  func doMath(operation: (Int, Int), a: Int, b: Int) -&gt; Int {
    return operation(a, b)
  }
</code></pre></div></div>

<h2 id="闭包closures">闭包（Closures）</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  let adder: (Int, Int) -&gt; Int = { (x, y) in x + y }

  // 在闭包中使用简写参数名
  let square: (Int) -&gt; Int = { $0 * $0 }

  // 把闭包函数作为参数
  func addWithClosure  = doMath(operation: adder, a: Int, b: Int) -&gt; Int {
    return operation(a, b)
  }
</code></pre></div></div>

<h2 id="枚举enumerations">枚举（Enumerations）</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> enum Taste {
   case sweet, sour, salty, bitter, umami
 }
 let vinegarTaste = Taste.sour

 // 遍历枚举
 enum Food: CaseIterable {
   case pasta, pizza, hamburger
 }
 for food in Food.allCases {
   print(foot)
 }
 // 遍历字符串
 enum Currency: String {
   case euro = "EUR"
   case dollar = "USD"
   case pound = "GBP"
 }
 // 输出枚举的原始值
 let euroSymbol = Currency.euro.rawValue
 print("The currency symbl for Euro is \(euroSymbol)")

 // 枚举的可赋值性
 enum Content {
   case empty
   case text(Strig)
   case number(Int)
 }
 // 使用 switch 处理可赋值枚举
 let content = Content.text("Hello")
 swithc content {
   case .empty:
     print("Value is empty")
   case .text(let value):
     print("Value is \(value)")
   case .number(_): //不调用时，可以省略
     print("Value is a number")
 }

</code></pre></div></div>

<h2 id="结构structs">结构（Structs）</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  struct User {
    var name: String
    var age: Int = 40
  }
  // 完全显式初始化需要对全部属性赋值
  let john = User(name: "John", age: 35)

  // 有默认值的属性可以不显式赋值
  let dave = User(name: "Dave")

  // 使用结构属性的值
  print("\(john.name) is \(john.age) years old")
</code></pre></div></div>

<h1 id="类">类</h1>

<h2 id="类classes">类（Classes）</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  class Person {
    let name: String
    // 类初始化
    init(name: String) {
      self.name = name
    }

    // 使用 deinit 销毁类
    deinit {
      print("正在销毁")
    }

    var numberOfLaughs: Int = 0
    func laugh() {
      numberOfLaughs += 1
    }

    // 定义计算属性
    var isHappy: Bool {
      return numberOfLaughs &gt; 0
    }
  }

  let devid = Person(name: "David")
  david.laugh()
  let happy = david.isHappy
</code></pre></div></div>

<h2 id="类的继承inheritance">类的继承（Inheritance）</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  class Student: Persion {
    var numberOfExams: Int = 0
    //重写（override） isHappy方法的逻辑
    override var isHappy: Bool {
      numberOfLaughs &gt; 0 &amp;&amp; numberofExams &gt;2
    }
  }

  let ray = Student(name: "Ray")
  ray.numberOfExams = 4
  ray.laugh()
  let happy = ray.isHappy

  // 使用关键字（final）预置定义子类，可以防止被继承
  final class Child: Person { }
</code></pre></div></div>

<h2 id="类的指定初始化和快捷初始化designated--convenience-initializers">类的指定初始化和快捷初始化（Designated &amp; Convenience Initializers）</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  // 一个类，至少需要一个设计模式初始器或可选的省略模式初始器
  class ModeOfTransportation {
    let name: String

    //设计模式初始器，提供 name 参数
    init(name: String) {
      self.name = name
    }
    //省略模式初始器
    convenience init() {
      self.init(name: "未注册")
    }
  }

  class Vehicle: ModeOfTransportation {
    let wheels: Int
    // 设计模式初始器，提供 name ， wheels 参数
    init(name: String, wheels: Int) {
      self.wheels = wheels
      //调用主类的设计模式初始器
      super.init(name: name)
    }
    //省略模式初始器
    override convenience init(name: Srting) {
      self.init(name: name, wheels: 4)
    }
  }
</code></pre></div></div>

<h2 id="类的扩展extensions">类的扩展（Extensions）</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  // 扩展可以在已有的类（结构、枚举、协议）基础上增加功能
  extension String {
    var boolValue: Bool {
      if self == "1" {
        return true
      }
      return false
    }
  }
  let isTure = "0".boolValue
</code></pre></div></div>

<h1 id="错误捕获">错误捕获</h1>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  // 预定义错误
  enum BeverageMachineError: Error {
    case invalidSelection
    case insufficientFunds
    case outOfStock
  }
  func selectBeverage(_ selection: Int) throws -&gt;
  String {
    //业务逻辑写这里
    return "waiting for beverage..."
  }

  // 通过 do try catch 语句捕获错误
  let message: String
  do {
    message = try selectBeverage(20)
  } catch BeverageMachineError.invalidSelection {
    print("Invalid selection")
  } catch BeverageMachineError.insufficientFunds {
    print("Insufficient funds")
  } catch BeverageMachineError.outOfStock {
    print("Out of stock")
  } catch {
    print("Generic error")
  }

  // try? 出错时返回空值 nil
  let nillableMessage = try? selectBeverage(10)
  // try! 出错时返回实时错误（runtime error）
  let throwableMessage = try! selectBeverage(10)
</code></pre></div></div>

<h1 id="codable-协议">Codable 协议</h1>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  import Foundation

  // Codable 其实是一个组合协议，由 Decodable 和 Encodable 两个协议组成
  struct UserInfo: Codable {
    let username: String
    let loginCount: Int
  }
  extension UserInfo: CustomStringConvertible {
    var description: String {
      return "\(username) 登录 \(loginCount) 次"
    }
  }
  let json = """
  {"username": "David", "loginCount": 2}
  """
  // 使用 JSONDecoder 来序列化JSON
  let decoder = JSONDecoder()

  // 字符串转化为数据对象
  let data = json.data(using: .utf8)!
  let userInfo = try! decoder.decode(UserInfo.self, from: data)
  print(userInfo)

  // 使用 Encodable 序列化结构对象
  let encode = JSONEncoder()
  let userInfoData = try! encoder.encode(userInfo)

  // 数据转字符串
  let jsonString = String(data: userInfoData, encoding: .utf8)
  print(jsonString)
</code></pre></div></div>

<h1 id="组件的存取控制">组件的存取控制</h1>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  // 组件：可以是框架或应用，可以通过 import 导入在其他代码中使用的最小单元
  public class AccessLevelsShowcase {
    // 可以被调用方读取的公有变量或方法
    public var somePublicProperty = 0

    // 私有变量或方法
    var someInternalProperty = 0

    // 使用 fileprivate 关键字定义直接内部变量或方法，只能由定义组件的代码级别调用
    fileprivate func someFilePrivateMethod() {}

    // 私有变量或方法
    private func somePrivateMethod() {}
  }
</code></pre></div></div>

<p>翻译自：</p>

<ul>
  <li><a href="https://www.raywenderlich.com/6362977-swift-5-1-cheat-sheet-and-quick-reference">《Swift 5.1 Cheat Sheet and Quick Reference》</a> by raywenderlish.com</li>
  <li><a href="https://koenig-media.raywenderlich.com/uploads/2019/11/RW-Swift-5.1-Cheatsheet-1.0.1.pdf">英文版pdf</a></li>
  <li><a href="https://koenig-media.raywenderlich.com/uploads/2019/11/RW-Swift-5-1-Cheatsheet_1.0.1.playground.zip">Demo代码包</a></li>
</ul>
 ]]></content>
  </entry>
  
  <entry>
    <title>SWIFT开发使用CoreData</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2021/03/15/SWIFT_DEVELOP_COREDATA.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=SWIFT开发使用CoreData" />
    <published>2021-03-15T00:00:00Z</published>
    <updated>2021-03-15T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2021/03/15/SWIFT_DEVELOP_COREDATA</id>
    <content type="html"><![CDATA[ <h1 id="一core-data介绍">一、Core Data介绍</h1>

<ol>
  <li>Core Data是iOS5之后才出现的一个数据持久化存储框架，它提供了对象-关系映射(ORM)的功能，即能够将对象转化成数据，也能够将保存在数据库中的数据还原成对象。</li>
  <li>虽然其底层也是由类似于SQL的技术来实现，但我们不需要编写任何SQL语句，有点像Java开发中的Hibernate持久化框架</li>
  <li>Core Data数据最终的存储类型可以是：SQLite数据库，XML，二进制，内存里，或自定义数据类型。</li>
  <li>与SQLite区别：只能取出整个实体记录，然后分解，之后才能得到实体的某个属性。</li>
</ol>

<h1 id="二core-data的使用准备---数据模型和实体类的创建">二、Core Data的使用准备 - 数据模型和实体类的创建</h1>

<ol>
  <li>创建项目的时候，勾选“Use Core Data”。完毕后在 AppDelegate 中，会生成相关代码。</li>
  <li>打开项目中的 xcdatamodeld 文件，在右边的数据模型编辑器的底部工具栏点击 Add Entity 添加实体。
同时在属性栏中对实体命名进行修改，并在 Attribute 栏目中添加 id，userName，password ，age四个属性。</li>
  <li>点击下方的 Editor Style 按钮可以查看实体的关系图。</li>
  <li>自 iOS10 和 swift3 之后，访问 CoreData 的方法简洁了许多，我们不再需要手动新建对应于 entity 的 class。</li>
</ol>

<h1 id="三core-data的使用">三、Core Data的使用</h1>

<h2 id="1首先在代码中引入coredata库">1、首先在代码中引入CoreData库</h2>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">import</span> <span class="kt">CoreData</span>
</code></pre></div></div>

<h2 id="2插入保存数据操作">2、插入（保存）数据操作</h2>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">/// 添加数据</span>
<span class="kd">func</span> <span class="nf">addData</span><span class="p">()</span>
<span class="p">{</span>
    <span class="c1">//获取管理的数据上下文 对象</span>
    <span class="k">let</span> <span class="nv">app</span> <span class="o">=</span> <span class="kt">UIApplication</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">delegate</span> <span class="k">as!</span> <span class="kt">AppDelegate</span>
    <span class="k">let</span> <span class="nv">context</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">persistentContainer</span><span class="o">.</span><span class="n">viewContext</span>

    <span class="c1">//创建User对象</span>
    <span class="k">let</span> <span class="nv">user</span> <span class="o">=</span> <span class="kt">NSEntityDescription</span><span class="o">.</span><span class="nf">insertNewObject</span><span class="p">(</span><span class="nv">forEntityName</span><span class="p">:</span> <span class="s">"User"</span><span class="p">,</span>
                                                   <span class="nv">into</span><span class="p">:</span> <span class="n">context</span><span class="p">)</span> <span class="k">as!</span> <span class="kt">User</span>

    <span class="c1">//对象赋值</span>
    <span class="n">user</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="mi">1</span>
    <span class="n">user</span><span class="o">.</span><span class="n">userName</span> <span class="o">=</span> <span class="s">"hangge"</span>
    <span class="n">user</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="s">"1234"</span>

    <span class="c1">//保存</span>
    <span class="k">do</span> <span class="p">{</span>
        <span class="k">try</span> <span class="n">context</span><span class="o">.</span><span class="nf">save</span><span class="p">()</span>
        <span class="nf">print</span><span class="p">(</span><span class="s">"保存成功！"</span><span class="p">)</span>
    <span class="p">}</span> <span class="k">catch</span> <span class="p">{</span>
        <span class="nf">fatalError</span><span class="p">(</span><span class="s">"不能保存：</span><span class="se">\(</span><span class="n">error</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="3查询数据操作">3、查询数据操作</h2>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">/// 查询数据</span>
<span class="kd">func</span> <span class="nf">queryData</span><span class="p">()</span>
<span class="p">{</span>
    <span class="c1">//获取管理的数据上下文 对象</span>
    <span class="k">let</span> <span class="nv">app</span> <span class="o">=</span> <span class="kt">UIApplication</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">delegate</span> <span class="k">as!</span> <span class="kt">AppDelegate</span>
    <span class="k">let</span> <span class="nv">context</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">persistentContainer</span><span class="o">.</span><span class="n">viewContext</span>

    <span class="c1">//声明数据的请求</span>
    <span class="k">let</span> <span class="nv">fetchRequest</span> <span class="o">=</span> <span class="kt">NSFetchRequest</span><span class="o">&lt;</span><span class="kt">User</span><span class="o">&gt;</span><span class="p">(</span><span class="nv">entityName</span><span class="p">:</span><span class="s">"User"</span><span class="p">)</span>
    <span class="n">fetchRequest</span><span class="o">.</span><span class="n">fetchLimit</span> <span class="o">=</span> <span class="mi">10</span> <span class="c1">//限定查询结果的数量</span>
    <span class="n">fetchRequest</span><span class="o">.</span><span class="n">fetchOffset</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1">//查询的偏移量</span>

    <span class="c1">//设置查询条件</span>
    <span class="k">let</span> <span class="nv">predicate</span> <span class="o">=</span> <span class="kt">NSPredicate</span><span class="p">(</span><span class="nv">format</span><span class="p">:</span> <span class="s">"id= '1' "</span><span class="p">,</span> <span class="s">""</span><span class="p">)</span>
    <span class="n">fetchRequest</span><span class="o">.</span><span class="n">predicate</span> <span class="o">=</span> <span class="n">predicate</span>

    <span class="c1">//查询操作</span>
    <span class="k">do</span> <span class="p">{</span>
        <span class="k">let</span> <span class="nv">fetchedObjects</span> <span class="o">=</span> <span class="k">try</span> <span class="n">context</span><span class="o">.</span><span class="nf">fetch</span><span class="p">(</span><span class="n">fetchRequest</span><span class="p">)</span>

        <span class="c1">//遍历查询的结果</span>
        <span class="k">for</span> <span class="n">info</span> <span class="k">in</span> <span class="n">fetchedObjects</span><span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"id=</span><span class="se">\(</span><span class="n">info</span><span class="o">.</span><span class="n">id</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"username=</span><span class="se">\(</span><span class="n">info</span><span class="o">.</span><span class="n">userName</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"password=</span><span class="se">\(</span><span class="n">info</span><span class="o">.</span><span class="n">password</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
        <span class="p">}</span>
    <span class="p">}</span>
    <span class="k">catch</span> <span class="p">{</span>
        <span class="nf">fatalError</span><span class="p">(</span><span class="s">"不能保存：</span><span class="se">\(</span><span class="n">error</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="4修改数据操作">4、修改数据操作</h2>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">/// 修改数据操作</span>
<span class="kd">func</span> <span class="nf">modifyData</span><span class="p">()</span>
<span class="p">{</span>
    <span class="c1">//获取管理的数据上下文 对象</span>
    <span class="k">let</span> <span class="nv">app</span> <span class="o">=</span> <span class="kt">UIApplication</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">delegate</span> <span class="k">as!</span> <span class="kt">AppDelegate</span>
    <span class="k">let</span> <span class="nv">context</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">persistentContainer</span><span class="o">.</span><span class="n">viewContext</span>

    <span class="c1">//声明数据的请求</span>
    <span class="k">let</span> <span class="nv">fetchRequest</span> <span class="o">=</span> <span class="kt">NSFetchRequest</span><span class="o">&lt;</span><span class="kt">User</span><span class="o">&gt;</span><span class="p">(</span><span class="nv">entityName</span><span class="p">:</span><span class="s">"User"</span><span class="p">)</span>
    <span class="n">fetchRequest</span><span class="o">.</span><span class="n">fetchLimit</span> <span class="o">=</span> <span class="mi">10</span> <span class="c1">//限定查询结果的数量</span>
    <span class="n">fetchRequest</span><span class="o">.</span><span class="n">fetchOffset</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1">//查询的偏移量</span>

    <span class="c1">//设置查询条件</span>
    <span class="k">let</span> <span class="nv">predicate</span> <span class="o">=</span> <span class="kt">NSPredicate</span><span class="p">(</span><span class="nv">format</span><span class="p">:</span> <span class="s">"id= '1' "</span><span class="p">,</span> <span class="s">""</span><span class="p">)</span>
    <span class="n">fetchRequest</span><span class="o">.</span><span class="n">predicate</span> <span class="o">=</span> <span class="n">predicate</span>

    <span class="c1">//查询操作</span>
    <span class="k">do</span> <span class="p">{</span>
        <span class="k">let</span> <span class="nv">fetchedObjects</span> <span class="o">=</span> <span class="k">try</span> <span class="n">context</span><span class="o">.</span><span class="nf">fetch</span><span class="p">(</span><span class="n">fetchRequest</span><span class="p">)</span>

        <span class="c1">//遍历查询的结果</span>
        <span class="k">for</span> <span class="n">info</span> <span class="k">in</span> <span class="n">fetchedObjects</span><span class="p">{</span>
            <span class="c1">//修改密码</span>
            <span class="n">info</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="s">"abcd"</span>
            <span class="c1">//重新保存</span>
            <span class="k">try</span> <span class="n">context</span><span class="o">.</span><span class="nf">save</span><span class="p">()</span>
        <span class="p">}</span>
    <span class="p">}</span>
    <span class="k">catch</span> <span class="p">{</span>
        <span class="nf">fatalError</span><span class="p">(</span><span class="s">"不能保存：</span><span class="se">\(</span><span class="n">error</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="5删除数据操作">5、删除数据操作</h2>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">/// 删除数据操作</span>
<span class="kd">func</span> <span class="nf">deleteData</span><span class="p">()</span>
<span class="p">{</span>
    <span class="c1">//获取管理的数据上下文 对象</span>
    <span class="k">let</span> <span class="nv">app</span> <span class="o">=</span> <span class="kt">UIApplication</span><span class="o">.</span><span class="n">shared</span><span class="o">.</span><span class="n">delegate</span> <span class="k">as!</span> <span class="kt">AppDelegate</span>
    <span class="k">let</span> <span class="nv">context</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">persistentContainer</span><span class="o">.</span><span class="n">viewContext</span>

    <span class="c1">//声明数据的请求</span>
    <span class="k">let</span> <span class="nv">fetchRequest</span> <span class="o">=</span> <span class="kt">NSFetchRequest</span><span class="o">&lt;</span><span class="kt">User</span><span class="o">&gt;</span><span class="p">(</span><span class="nv">entityName</span><span class="p">:</span><span class="s">"User"</span><span class="p">)</span>
    <span class="n">fetchRequest</span><span class="o">.</span><span class="n">fetchLimit</span> <span class="o">=</span> <span class="mi">10</span> <span class="c1">//限定查询结果的数量</span>
    <span class="n">fetchRequest</span><span class="o">.</span><span class="n">fetchOffset</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1">//查询的偏移量</span>

    <span class="c1">//设置查询条件</span>
    <span class="k">let</span> <span class="nv">predicate</span> <span class="o">=</span> <span class="kt">NSPredicate</span><span class="p">(</span><span class="nv">format</span><span class="p">:</span> <span class="s">"id= '1' "</span><span class="p">,</span> <span class="s">""</span><span class="p">)</span>
    <span class="n">fetchRequest</span><span class="o">.</span><span class="n">predicate</span> <span class="o">=</span> <span class="n">predicate</span>

    <span class="c1">//查询操作</span>
    <span class="k">do</span> <span class="p">{</span>
        <span class="k">let</span> <span class="nv">fetchedObjects</span> <span class="o">=</span> <span class="k">try</span> <span class="n">context</span><span class="o">.</span><span class="nf">fetch</span><span class="p">(</span><span class="n">fetchRequest</span><span class="p">)</span>

        <span class="c1">//遍历查询的结果</span>
        <span class="k">for</span> <span class="n">info</span> <span class="k">in</span> <span class="n">fetchedObjects</span><span class="p">{</span>
            <span class="c1">//删除对象</span>
            <span class="n">context</span><span class="o">.</span><span class="nf">delete</span><span class="p">(</span><span class="n">info</span><span class="p">)</span>
        <span class="p">}</span>

        <span class="c1">//重新保存-更新到数据库</span>
        <span class="k">try!</span> <span class="n">context</span><span class="o">.</span><span class="nf">save</span><span class="p">()</span>
    <span class="p">}</span>
    <span class="k">catch</span> <span class="p">{</span>
        <span class="nf">fatalError</span><span class="p">(</span><span class="s">"不能保存：</span><span class="se">\(</span><span class="n">error</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
 ]]></content>
  </entry>
  
  <entry>
    <title>SWIFT游戏开发增加音乐、音效</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2021/03/15/SWIFT_DEVELOP_AUDIO.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=SWIFT游戏开发增加音乐、音效" />
    <published>2021-03-15T00:00:00Z</published>
    <updated>2021-03-15T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2021/03/15/SWIFT_DEVELOP_AUDIO</id>
    <content type="html"><![CDATA[ <p>虽然声音的设计和研发总是在项目接近尾声时开始，但是声音永远是游戏开发需要总体考虑的重要问题。尤其是在手机设备上，环境、噪声有时也让你精心设计的音乐和音效无法让用户很好地感知。</p>

<p>不管怎么说，声音是游戏非常非常非常重要的部分，这是用户能否沉浸和体验你创造的游戏世界的关键。</p>

<p>一起来学习一下iOS播放音乐和音效的强大能力，顺便探索一下语音合成功能。</p>

<p>听起来还不错吧，让我们现在就开始！</p>

<h1 id="使用-avaudioplayer-播放声音">使用 AVAudioPlayer 播放声音</h1>

<h2 id="问题">问题</h2>

<p>能不能在几分钟内就让我的游戏App开始播放一个声音文件？</p>

<h2 id="答案">答案</h2>

<p>在iOS中最简单的声音播放解决方案就是使用 AVAudioPlayer ，这个功能包需要引入 AVFoundation 框架包。首先我们来引入 AVFoundation 框架包：</p>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="kd">import</span> <span class="kt">AVFoundation</span>
</code></pre></div></div>

<p>提供一个可播放声音文件就可以创建一个 AVAudioPlayer 对象来播放声音。当然你可能需要提前缓存这个声音文件，以免你要播放的时间造成延迟。记住，通过 Bundle 类的方法： url(forResource:, withExtension:) 来存取你添加到XCode项目中的声音文件。</p>

<p>下面这个例子中， audioPlayer 是我们定义的 AVAudioPlayer 实例对象：</p>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="k">guard</span> <span class="k">let</span> <span class="nv">soundFileURL</span> <span class="o">=</span> <span class="kt">Bundle</span><span class="o">.</span><span class="n">man</span><span class="o">.</span><span class="nf">url</span><span class="p">(</span><span class="nv">forResource</span><span class="p">:</span> <span class="s">"TestSound"</span><span class="p">,</span>
        <span class="nv">withExtension</span><span class="p">:</span><span class="s">"wav"</span><span class="p">)</span> <span class="k">else</span> <span class="p">{</span>
        <span class="nf">print</span><span class="p">(</span><span class="s">"URL Wrong"</span><span class="p">)</span>
        <span class="k">return</span>
    <span class="p">}</span>
    <span class="k">do</span> <span class="p">{</span>
        <span class="n">audioPlayer</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">AVAudioPlayer</span><span class="p">(</span><span class="nv">contentsOf</span><span class="p">:</span> <span class="n">soundFileURL</span><span class="p">)</span>
    <span class="p">}</span> <span class="k">catch</span> <span class="k">let</span> <span class="nv">error</span> <span class="p">{</span>
        <span class="nf">print</span><span class="p">(</span><span class="s">"Failed to load the sound: </span><span class="se">\(</span><span class="n">error</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
    <span class="p">}</span>
    <span class="n">audioPlayer</span><span class="p">?</span><span class="o">.</span><span class="nf">prepareToPlay</span><span class="p">()</span>
</code></pre></div></div>

<p>使用下面的语句，开始播放吧：</p>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="n">audioPlayer</span><span class="p">?</span><span class="o">.</span><span class="nf">play</span><span class="p">()</span>
</code></pre></div></div>

<p>如果需要循环播放，你可以设置实例对象的 numberOfLoops 属性，播放一次就停止，请设置为 0</p>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="n">audioPlayer</span><span class="p">?</span><span class="o">.</span><span class="n">numberOfLoops</span> <span class="o">=</span> <span class="mi">0</span>
</code></pre></div></div>

<p>播放两次就停止，请设置为 1</p>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="n">audioPlayer</span><span class="p">?</span><span class="o">.</span><span class="n">numberOfLoops</span> <span class="o">=</span> <span class="mi">1</span>
</code></pre></div></div>

<p>一直播放，除非用户来停止，请设置为 -1</p>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="n">audioPlayer</span><span class="p">?</span><span class="o">.</span><span class="n">numberOfLoops</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
</code></pre></div></div>

<p>默认情况下，AVAudioPlayer 实例对象只会播放一次。播放结束后，再次播放就会从来开始再播一次。通过 numberOfLoops 属性来控制播一次、播两次、一直播。</p>

<p>使用 pause 和 stop 方法来暂停和停止声音，注意 stop 方法会完全结束播放，并从缓存中清除声音资源。</p>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="c1">// To pause:</span>
    <span class="n">audioPlayer</span><span class="p">?</span><span class="o">.</span><span class="nf">pause</span><span class="p">()</span>
    <span class="c1">// To stop:</span>
    <span class="n">audioPlayer</span><span class="p">?</span><span class="o">.</span><span class="nf">stop</span><span class="p">()</span>
</code></pre></div></div>

<p>如果要从头开始播放声音，可以设置 currentTime 属性，以秒为单位标识声音资源已经播放的时长，设置为 0 ，表示声音播放进度回到最开始的地方。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    audioPlayer?.currentTime = 0
</code></pre></div></div>

<p>你可以试试设置为其他数字，看看会不会跳转到其他进度来继续播放。</p>

<h2 id="更多信息">更多信息</h2>

<p>AVAudioPlayer 需要使用实例对象，避免系统回收内存时，自动删除AVAudioPlayer对象。</p>

<p>你可以同时播放多个声音，但是你也得管理多个播放对对象，想轻松一点，可以找一些现成的第三方声音控制引擎代码包来帮你管理。</p>

<p>在你准备播放声音之前，你需要知道要播放的文件的地址，或是准备一个存储声音数据的数据对象。</p>

<p>AVAudioPlayer 支持很多声音格式，根据设备各有不同，iPhoneX 支持的格式有：</p>

<ul>
  <li>AAC-LC</li>
  <li>HE-AAC</li>
  <li>HE-AAC v2</li>
  <li>Protected AAC</li>
  <li>MP3</li>
  <li>Linear PCM (.wav)</li>
  <li>Apple Lossless</li>
  <li>FLAC</li>
  <li>Dolby Digital (AC-3)</li>
  <li>Dolby Digital Plus (E-AC-3)</li>
  <li>Audible (formats 2, 3, 4, Audible Enhanced Audio, AAX, and AAX+)</li>
</ul>

<p>.aac,.mp3,.wav是比较通用的声音文件格式。</p>

<p>下面的代码中，定义了项目文件中一个命名为 TestSound.wav 的声音文件，你可以修改成自己项目里的文件名。</p>

<p>过 Bundle 类的方法： url(forResource:, withExtension:) 来存取你添加到XCode项目中的声音文件。</p>

<p>下面这个例子中， audioPlayer 是我们定义的 AVAudioPlayer 实例对象：</p>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="k">guard</span> <span class="k">let</span> <span class="nv">soundFileURL</span> <span class="o">=</span> <span class="kt">Bundle</span><span class="o">.</span><span class="n">man</span><span class="o">.</span><span class="nf">url</span><span class="p">(</span><span class="nv">forResource</span><span class="p">:</span> <span class="s">"TestSound"</span><span class="p">,</span>
        <span class="nv">withExtension</span><span class="p">:</span><span class="s">"wav"</span><span class="p">)</span> <span class="k">else</span> <span class="p">{</span>
        <span class="nf">print</span><span class="p">(</span><span class="s">"URL Wrong"</span><span class="p">)</span>
        <span class="k">return</span>
    <span class="p">}</span>
</code></pre></div></div>

<p>这个 soundFileURL 变量是一个 URL 对象，是我们给 AVAudioPlayer 对象找到要播放的声音文件的定位。</p>

<p>最后，AVAudioPlayer 对象需要手动缓存声音资源文件，否则播放时就会延迟，播放大尺寸声音资源文件时甚至会卡住。另外记住，缓存声音资源是很占内存的，如果你有很多大尺寸声音资源文件，需要额外考虑好内容的处理。</p>

<h1 id="使用-avaudiorecorder-录音">使用 AVAudioRecorder 录音</h1>

<p>略</p>

<h1 id="多个声音播放">多个声音播放</h1>

<h2 id="问题-1">问题</h2>

<p>我有很多个声音播放对象，可不可以在可能的时间复用？</p>

<h2 id="答案-1">答案</h2>

<p>创建一个管理器对象来管理多个 AVAudioPlayer 播放器对象。播放前，我们向管理器对象来请求一个 AVAudioPlayer 播放器对象，管理器对象自动返回一个没有在播放的播放器，如果没有，就创建一个并返回。</p>

<p>参考代码如下：</p>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// An array of all players stored in the pool; not accessible</span>
<span class="c1">// outside this file</span>
<span class="kd">private</span> <span class="k">var</span> <span class="nv">players</span> <span class="p">:</span> <span class="p">[</span><span class="kt">AVAudioPlayer</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>

<span class="kd">class</span> <span class="kt">AVAudioPlayerPool</span><span class="p">:</span> <span class="kt">NSObject</span> <span class="p">{</span>

    <span class="c1">// Given the URL of a sound file, either create or reuse an audio player</span>
    <span class="kd">class</span> <span class="kd">func</span> <span class="nf">player</span><span class="p">(</span><span class="nv">url</span> <span class="p">:</span> <span class="kt">URL</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">AVAudioPlayer</span><span class="p">?</span> <span class="p">{</span>

        <span class="c1">// Try and find a player that can be reused and is not playing</span>
        <span class="k">let</span> <span class="nv">availablePlayers</span> <span class="o">=</span> <span class="n">players</span><span class="o">.</span><span class="n">filter</span> <span class="p">{</span> <span class="p">(</span><span class="n">player</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span> <span class="k">in</span>
            <span class="k">return</span> <span class="n">player</span><span class="o">.</span><span class="n">isPlaying</span> <span class="o">==</span> <span class="kc">false</span> <span class="o">&amp;&amp;</span> <span class="n">player</span><span class="o">.</span><span class="n">url</span> <span class="o">==</span> <span class="n">url</span>
        <span class="p">}</span>

        <span class="c1">// If we found one, return it</span>
        <span class="k">if</span> <span class="k">let</span> <span class="nv">playerToUse</span> <span class="o">=</span> <span class="n">availablePlayers</span><span class="o">.</span><span class="n">first</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Reusing player for </span><span class="se">\(</span><span class="n">url</span><span class="o">.</span><span class="n">lastPathComponent</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
            <span class="k">return</span> <span class="n">playerToUse</span>
        <span class="p">}</span>

        <span class="c1">// Didn't find one? Create a new one</span>

        <span class="k">do</span> <span class="p">{</span>
            <span class="k">let</span> <span class="nv">newPlayer</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">AVAudioPlayer</span><span class="p">(</span><span class="nv">contentsOf</span><span class="p">:</span> <span class="n">url</span><span class="p">)</span>
            <span class="n">players</span><span class="o">.</span><span class="nf">append</span><span class="p">(</span><span class="n">newPlayer</span><span class="p">)</span>
            <span class="k">return</span> <span class="n">newPlayer</span>
        <span class="p">}</span> <span class="k">catch</span> <span class="k">let</span> <span class="nv">error</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Couldn't load </span><span class="se">\(</span><span class="n">url</span><span class="o">.</span><span class="n">lastPathComponent</span><span class="se">)</span><span class="s">: </span><span class="se">\(</span><span class="n">error</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
            <span class="k">return</span> <span class="kc">nil</span>
        <span class="p">}</span>


    <span class="p">}</span>

<span class="p">}</span>
</code></pre></div></div>

<p>使用的时候这样调用：</p>

<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">if</span> <span class="k">let</span> <span class="nv">url</span> <span class="o">=</span> <span class="kt">Bundle</span><span class="o">.</span><span class="n">main</span><span class="o">.</span><span class="nf">url</span><span class="p">(</span><span class="nv">forResource</span><span class="p">:</span> <span class="s">"TestSound"</span><span class="p">,</span>
                           <span class="nv">withExtension</span><span class="p">:</span> <span class="s">"wav"</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">let</span> <span class="nv">player</span> <span class="o">=</span> <span class="kt">AVAudioPlayerPool</span><span class="o">.</span><span class="nf">player</span><span class="p">(</span><span class="nv">url</span><span class="p">:</span> <span class="n">url</span><span class="p">)</span>
    <span class="n">player</span><span class="p">?</span><span class="o">.</span><span class="nf">play</span><span class="p">()</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="更多信息-1">更多信息</h2>

<p>AVAudioPlayer 对象可以播放多次，但是不允许切换不同的声音资源。所以你要复用一个播放器对象，你只能播放同一个声音资源。你要播放另外的声音，就要一个新的播放器对象。</p>

<p>这也意味着 AVAudioPlayerPool 对象需要明确识别你要播放的声音资源。</p>

<p>我们创建的 AVAudioPlayerPool 对象需要实现：</p>

<ol>
  <li>维护一个 AVAudioPlayer 对象的数组。</li>
  <li>请求播放器时，先检查有没有可用的对应URL的播放器对象，如果有就直接返回。</li>
  <li>如果没有合适的 AVAudioPlayer 对象，就需要新建一个播放器，并返回，播放结束，这个对象就可以被复用了。</li>
</ol>

<h1 id="多个声音文件的淡入淡出效果">多个声音文件的淡入淡出效果</h1>

<p>略</p>

<h1 id="语音合成">语音合成</h1>

<p>略</p>

<h1 id="获取系统音乐app的信息">获取系统音乐APP的信息</h1>

<p>略</p>

<h1 id="监测系统音乐app的曲目切换">监测系统音乐APP的曲目切换</h1>

<p>略</p>

<h1 id="控制音乐回放">控制音乐回放</h1>

<p>略</p>

<h1 id="用户选择曲目">用户选择曲目</h1>

<p>略</p>

<h1 id="与其他app的声音功能协同">与其他APP的声音功能协同</h1>

<p>略</p>

<h1 id="游戏音效最佳实践">游戏音效最佳实践</h1>

<p>略（保持你的游戏在无声状态下也能完美运行）</p>

<p>本文翻译自《iOS Swift Game Development Cookbook》第三版</p>
<blockquote>
  <p>https://www.oreilly.com/library/view/ios-swift-game/9781491999073/ch04.html</p>
</blockquote>

<p><img src="https://learning.oreilly.com/library/cover/9781491999073/250w/" alt="ins" /></p>
 ]]></content>
  </entry>
  
  <entry>
    <title>SWIFT开发extension</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2021/03/11/SWIFT_DEVELOP_EXTENSION.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=SWIFT开发extension" />
    <published>2021-03-11T00:00:00Z</published>
    <updated>2021-03-11T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2021/03/11/SWIFT_DEVELOP_EXTENSION</id>
    <content type="html"><![CDATA[ <h1 id="extension">Extension</h1>

<p>SWIFT编写和应用extension变得很简单。</p>

<p>直接在项目中增加UIColor+Extension.swift，就可以在其他文件中直接使用了。</p>

<p>例子：使用 #FFFFFF 或 #FFFFFFFF 来设置颜色值，快速与Web开发同步参数。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>//
//  UIColor+Extension.swift
//  

import UIKit

extension UIColor {
    public convenience init?(hex: String) {
        let r, g, b, a: CGFloat

        if hex.hasPrefix("#") {
            let start = hex.index(hex.startIndex, offsetBy: 1)
            let hexColor = String(hex[start...])

            if hexColor.count == 8 {
                let scanner = Scanner(string: hexColor)
                var hexNumber: UInt64 = 0

                if scanner.scanHexInt64(&amp;hexNumber) {
                    r = CGFloat((hexNumber &amp; 0xff000000) &gt;&gt; 24) / 255
                    g = CGFloat((hexNumber &amp; 0x00ff0000) &gt;&gt; 16) / 255
                    b = CGFloat((hexNumber &amp; 0x0000ff00) &gt;&gt; 8) / 255
                    a = CGFloat(hexNumber &amp; 0x000000ff) / 255

                    self.init(red: r, green: g, blue: b, alpha: a)
                    return
                }
            }

            if hexColor.count == 6 {
                let scanner = Scanner(string: hexColor)
                var hexNumber: UInt64 = 0

                if scanner.scanHexInt64(&amp;hexNumber) {
                    r = CGFloat((hexNumber &amp; 0xff0000) &gt;&gt; 16) / 255
                    g = CGFloat((hexNumber &amp; 0x00ff00) &gt;&gt; 8) / 255
                    b = CGFloat(hexNumber &amp; 0x0000ff) / 255

                    self.init(red: r, green: g, blue: b, alpha: 255)
                    return
                }
            }
        }

        return nil
    }
}
</code></pre></div></div>

<blockquote>
  <p>调用举例：</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> UIColoe.init(hex:"#FFFFFF")
 UIColoe.init(hex:"#00000088") // 88 表示透明度 alpha
</code></pre></div></div>
 ]]></content>
  </entry>
  
  <entry>
    <title>使用SWIFT开发iOS游戏</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2021/03/08/SWIFT_DEVELOP_GAME.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=使用SWIFT开发iOS游戏" />
    <published>2021-03-08T00:00:00Z</published>
    <updated>2021-03-08T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2021/03/08/SWIFT_DEVELOP_GAME</id>
    <content type="html"><![CDATA[ <p>SWIFT开发iOS游戏，需要用到新的库 SpriteKit和GameplayKit</p>

<h1 id="引入">引入</h1>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import SpriteKit
import GameplayKit
</code></pre></div></div>

<h3 id="测试数据">测试数据</h3>

<table>
  <thead>
    <tr>
      <th>Level</th>
      <th>Word</th>
      <th>Prompt</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>欢声雷动</td>
      <td>形容热烈欢呼的动人场面</td>
    </tr>
    <tr>
      <td>1</td>
      <td>欣喜若狂</td>
      <td>形容高兴到了极点</td>
    </tr>
    <tr>
      <td>1</td>
      <td>载歌载舞</td>
      <td>边唱歌，边跳舞，形容尽情欢乐</td>
    </tr>
    <tr>
      <td>1</td>
      <td>灯火辉煌</td>
      <td>形容夜晚灯光明亮的繁华景象</td>
    </tr>
    <tr>
      <td>1</td>
      <td>春暖花开</td>
      <td>比喻春天是游览、观赏的大好时机</td>
    </tr>
    <tr>
      <td>1</td>
      <td>春色满园</td>
      <td>比喻欣欣向荣的景象</td>
    </tr>
    <tr>
      <td>1</td>
      <td>春光明媚</td>
      <td>形容春天的景物鲜明可爱</td>
    </tr>
    <tr>
      <td>1</td>
      <td>春意盎然</td>
      <td>春天的意味正浓</td>
    </tr>
    <tr>
      <td>1</td>
      <td>精卫填海</td>
      <td>比喻意志坚决，不畏艰难</td>
    </tr>
    <tr>
      <td>1</td>
      <td>愚公移山</td>
      <td>比喻坚持不懈地改造自然或进行斗争</td>
    </tr>
    <tr>
      <td>1</td>
      <td>百折不回</td>
      <td>比喻意志坚强，无论受到多少次挫折也不退缩</td>
    </tr>
    <tr>
      <td>1</td>
      <td>勇往直前</td>
      <td>勇敢地一直向前进</td>
    </tr>
    <tr>
      <td>1</td>
      <td>痛痒相关</td>
      <td>形容彼此关系密切</td>
    </tr>
    <tr>
      <td>1</td>
      <td>情深似海</td>
      <td>形容情爱深厚，像大海一样不可量</td>
    </tr>
    <tr>
      <td>1</td>
      <td>恩重如山</td>
      <td>恩情深厚，像山一样深重</td>
    </tr>
    <tr>
      <td>1</td>
      <td>循序渐进</td>
      <td>指学习工作等按照一定的步骤逐渐深入或提高</td>
    </tr>
    <tr>
      <td>1</td>
      <td>由浅入深</td>
      <td>从简单到复杂</td>
    </tr>
    <tr>
      <td>1</td>
      <td>日积月累</td>
      <td>一天一天地、一月一月地不断积累</td>
    </tr>
    <tr>
      <td>1</td>
      <td>温故知新</td>
      <td>温习旧的知识，得到新的理解和体会</td>
    </tr>
    <tr>
      <td>1</td>
      <td>漫山遍野</td>
      <td>山上和田野里到处都是</td>
    </tr>
    <tr>
      <td>1</td>
      <td>绿叶成阴</td>
      <td>比喻绿叶繁茂覆盖成荫</td>
    </tr>
    <tr>
      <td>1</td>
      <td>天长地久</td>
      <td>形容时间悠久。也形容永远不变（多指爱情）</td>
    </tr>
    <tr>
      <td>1</td>
      <td>树大根深</td>
      <td>比喻势力强大，根基牢固</td>
    </tr>
    <tr>
      <td>1</td>
      <td>人无远虑</td>
      <td>“必有近忧”的上句</td>
    </tr>
    <tr>
      <td>1</td>
      <td>必有近忧</td>
      <td>“人无远虑”的下句</td>
    </tr>
    <tr>
      <td>1</td>
      <td>有备无患</td>
      <td>事先有准备，就可以避免祸患</td>
    </tr>
    <tr>
      <td>1</td>
      <td>防患未然</td>
      <td>防止事故或祸害于尚未发生之前</td>
    </tr>
    <tr>
      <td>1</td>
      <td>临危不惧</td>
      <td>遇到危难的时候，一点也不怕</td>
    </tr>
    <tr>
      <td>1</td>
      <td>多谋善断</td>
      <td>很有智谋，又善于判断</td>
    </tr>
    <tr>
      <td>1</td>
      <td>从容不迫</td>
      <td>不慌不忙，沉着镇定</td>
    </tr>
    <tr>
      <td>1</td>
      <td>方寸不乱</td>
      <td>形容人遇到特殊紧急的情况时能够从容镇定</td>
    </tr>
    <tr>
      <td>2</td>
      <td>雁过留声</td>
      <td>比喻留名声于身后</td>
    </tr>
    <tr>
      <td>2</td>
      <td>天朗气清</td>
      <td>形容天空晴朗，空气清新</td>
    </tr>
    <tr>
      <td>2</td>
      <td>日月如梭</td>
      <td>形容时间过得很快，意同光阴似箭</td>
    </tr>
    <tr>
      <td>2</td>
      <td>光阴似箭</td>
      <td>形容时间过得极快，意同日月如梭</td>
    </tr>
    <tr>
      <td>2</td>
      <td>寒来暑往</td>
      <td>泛指时光流逝</td>
    </tr>
    <tr>
      <td>2</td>
      <td>星移物换</td>
      <td>比喻时间的变化</td>
    </tr>
    <tr>
      <td>2</td>
      <td>风吹草动</td>
      <td>比喻微小的变动</td>
    </tr>
    <tr>
      <td>2</td>
      <td>雨过天晴</td>
      <td>结束下雨天空转晴</td>
    </tr>
    <tr>
      <td>2</td>
      <td>瓜熟蒂落</td>
      <td>指时机一旦成熟，事情自然成功</td>
    </tr>
    <tr>
      <td>2</td>
      <td>水到渠成</td>
      <td>比喻条件成熟，事情自然会成功</td>
    </tr>
    <tr>
      <td>2</td>
      <td>学无止境</td>
      <td>指学业上是没有尽头的，应奋进不息</td>
    </tr>
    <tr>
      <td>2</td>
      <td>一往无前</td>
      <td>形容勇猛无畏地前进</td>
    </tr>
    <tr>
      <td>2</td>
      <td>滴水成冰</td>
      <td>形容天气十分寒冷</td>
    </tr>
    <tr>
      <td>2</td>
      <td>鹅毛大雪</td>
      <td>形容雪下得大而猛</td>
    </tr>
    <tr>
      <td>2</td>
      <td>雪兆丰年</td>
      <td>指冬天大雪是来年丰收的预兆</td>
    </tr>
    <tr>
      <td>2</td>
      <td>勤能补拙</td>
      <td>勤奋能够弥补不足</td>
    </tr>
    <tr>
      <td>2</td>
      <td>笨鸟先飞</td>
      <td>比喻能力差的人怕落后，做事比别人先动手</td>
    </tr>
    <tr>
      <td>2</td>
      <td>人一己百</td>
      <td>比喻以百倍的努力赶上别人</td>
    </tr>
    <tr>
      <td>2</td>
      <td>奋起直追</td>
      <td>振作起来，紧紧赶上去</td>
    </tr>
    <tr>
      <td>2</td>
      <td>宁折不弯</td>
      <td>比喻宁可死也绝不屈服妥协</td>
    </tr>
    <tr>
      <td>2</td>
      <td>义正词严</td>
      <td>道理正当公允，严肃的措词</td>
    </tr>
    <tr>
      <td>2</td>
      <td>威武不屈</td>
      <td>强暴的压力不能使之屈服，表示坚贞顽强</td>
    </tr>
    <tr>
      <td>2</td>
      <td>大义凛然</td>
      <td>由于胸怀正义而神态庄严，令人敬畏</td>
    </tr>
    <tr>
      <td>2</td>
      <td>火树银花</td>
      <td>形容张灯结彩或大放焰火的灿烂夜景</td>
    </tr>
    <tr>
      <td>2</td>
      <td>数不胜数</td>
      <td>形容数量极多，很难计算</td>
    </tr>
    <tr>
      <td>2</td>
      <td>观者如堵</td>
      <td>形容观看人数众多</td>
    </tr>
    <tr>
      <td>2</td>
      <td>张灯结彩</td>
      <td>形容节日或有喜庆事情的景象</td>
    </tr>
    <tr>
      <td>2</td>
      <td>欢聚一堂</td>
      <td>欢乐地聚集在一起</td>
    </tr>
    <tr>
      <td>2</td>
      <td>普天同庆</td>
      <td>天下的人或全国的人共同庆祝</td>
    </tr>
    <tr>
      <td>2</td>
      <td>喜气洋洋</td>
      <td>充满了欢喜的神色或气氛</td>
    </tr>
    <tr>
      <td>2</td>
      <td>争奇斗艳</td>
      <td>形容百花竞放，十分艳丽</td>
    </tr>
    <tr>
      <td>2</td>
      <td>五彩缤纷</td>
      <td>指颜色繁多，非常好看</td>
    </tr>
    <tr>
      <td>2</td>
      <td>色色俱全</td>
      <td>各种各样的东西都很齐全</td>
    </tr>
    <tr>
      <td>2</td>
      <td>跋山涉水</td>
      <td>形容走远路的艰苦</td>
    </tr>
    <tr>
      <td>2</td>
      <td>餐风饮露</td>
      <td>形容旅途或野外生活的艰苦</td>
    </tr>
    <tr>
      <td>2</td>
      <td>赏心悦目</td>
      <td>指看到美好的景色而心情愉快</td>
    </tr>
    <tr>
      <td>2</td>
      <td>舐犊之爱</td>
      <td>比喻对子女的疼爱</td>
    </tr>
    <tr>
      <td>2</td>
      <td>乌鸟私情</td>
      <td>比喻侍奉尊亲的孝心</td>
    </tr>
    <tr>
      <td>2</td>
      <td>天伦之乐</td>
      <td>泛指家庭的乐趣</td>
    </tr>
    <tr>
      <td>2</td>
      <td>其乐无穷</td>
      <td>其中的乐趣没有穷尽</td>
    </tr>
    <tr>
      <td>2</td>
      <td>摩拳擦掌</td>
      <td>形容人们精神振奋，跃跃欲试的样子</td>
    </tr>
    <tr>
      <td>2</td>
      <td>生龙活虎</td>
      <td>形容活泼矫健，富有生气</td>
    </tr>
    <tr>
      <td>2</td>
      <td>身强力壮</td>
      <td>形容身体强壮有力</td>
    </tr>
    <tr>
      <td>2</td>
      <td>铜筋铁骨</td>
      <td>比喻十分健壮的身体</td>
    </tr>
    <tr>
      <td>2</td>
      <td>莘莘学子</td>
      <td>指刻苦学习的，比较认真的好学生</td>
    </tr>
    <tr>
      <td>2</td>
      <td>立雪求道</td>
      <td>旧指学生恭敬受教</td>
    </tr>
    <tr>
      <td>2</td>
      <td>春风化雨</td>
      <td>比喻良好的薰陶和教育</td>
    </tr>
    <tr>
      <td>2</td>
      <td>孺子可教</td>
      <td>指年轻人可培养</td>
    </tr>
    <tr>
      <td>2</td>
      <td>感人肺腑</td>
      <td>使人内心深深感动</td>
    </tr>
    <tr>
      <td>2</td>
      <td>可歌可泣</td>
      <td>形容英勇悲壮的感人事迹</td>
    </tr>
    <tr>
      <td>2</td>
      <td>艰苦卓绝</td>
      <td>坚忍刻苦的精神超过寻常</td>
    </tr>
    <tr>
      <td>2</td>
      <td>惊天动地</td>
      <td>形容某个事件的声势或意义</td>
    </tr>
    <tr>
      <td>2</td>
      <td>披星戴月</td>
      <td>形容连夜奔波或早出晚归，十分辛苦</td>
    </tr>
    <tr>
      <td>2</td>
      <td>流星赶月</td>
      <td>形容行动迅速</td>
    </tr>
    <tr>
      <td>2</td>
      <td>众星捧月</td>
      <td>比喻众人拥护着一个他们所尊敬爱戴的人</td>
    </tr>
    <tr>
      <td>2</td>
      <td>烘云托月</td>
      <td>比喻从侧面渲染以显示或突出主体</td>
    </tr>
  </tbody>
</table>
 ]]></content>
  </entry>
  
  <entry>
    <title>SWIFT开发入门</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2021/03/08/SWIFT_DEVELOP_ABC.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=SWIFT开发入门" />
    <published>2021-03-08T00:00:00Z</published>
    <updated>2021-03-08T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2021/03/08/SWIFT_DEVELOP_ABC</id>
    <content type="html"><![CDATA[ <h1 id="概念">概念</h1>

<h2 id="项目文件管理">项目文件管理</h2>

<ul>
  <li>项目中的所有.swift文件都会被引入，不再需要在单个文件中用import引入</li>
  <li>没有了宏定义 #define，直接用let定义即可</li>
</ul>

<h1 id="常用变量操作">常用变量操作</h1>

<h2 id="var-和-let">var 和 let</h2>

<ul>
  <li>var 定义变量，可以在后面的代码中修改变量的值</li>
  <li>let 定义常量，值不能被修改</li>
  <li>可以在一行中声明多个变量或常量，用逗号分隔</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>let myName : String = "Cheney Lin"
var userName : String = "Jack"
</code></pre></div></div>

<h2 id="可选对象变量optional">可选对象变量（Optional）</h2>

<ul>
  <li>在定义对句变量时，在类型后加一个?表示可选对象变量（可为空的意思）</li>
  <li>在定义对句变量时，在类型后加一个!用于明确赋值</li>
  <li>在 Swift 中， nil 不是指针，他是值缺失的一种特殊类型，任何类型的可选项都可以设 置成 nil 而不仅仅是对象类型</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>var myName : String?
var myName : String? = nil

var myName : String! = "Cheney Lin"
</code></pre></div></div>

<p>使用可选对象变量时，有几种方式：</p>

<ul>
  <li>正常使用：在变量后面加一个?，需要进一步处理或函数调用</li>
  <li>强制使用：在变量后面加一个!，一般用于明确之前代码已经赋值的情况下使用</li>
  <li>默认值使用：在变量后面加个 <strong>??</strong> (nil合并运算符)，用于给出默认值</li>
  <li>引用使用：新建一个变量，引用要处理的变量，用IF语句来做控制逻辑</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> NSLog(%@,myName!)
</code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> NSLog(%@,myName??"Cheney Lin")
</code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>if let newName = myName?
{
    NSLog(%@,newName)
}
</code></pre></div></div>

<h1 id="字符串处理">字符串处理</h1>

<h2 id="基本操作">基本操作</h2>

<ul>
  <li>定义字符串，用双引号”Cheney Lin”，不需要前面加@</li>
  <li>用+连接字符串即可合并字符串</li>
  <li>用String.init(value:Int64)即可将数字转换为字符串</li>
  <li>用isEmpty判断空字符串</li>
  <li>多行字符串是用三个双引号引起来的一系列字符</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>let memo:String = """Hello World,\n
I am Cheney Lin."""
</code></pre></div></div>

<ul>
  <li>Swift 用字符串插值（string interpolation）的方式把常量名或者变量名当做占位符加入到长字符串中，Swift 会用当前常量或变量的值替换这些占位符。将常量或变量名放入圆括号中，并在开括号前使用反斜杠将其转义：</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>print("myName的值为:\(myName)") // myName的值为:Cheney Lin
</code></pre></div></div>

<h2 id="遍历字符">遍历字符</h2>

<p>for-in 循环遍历 String 中的每一个独立的 Character</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>func isIncludeChineseIn(string: String) -&gt; Bool
{
    for value in string
    {
        if ("\u{4E00}" &lt;= value  &amp;&amp; value &lt;= "\u{9FA5}") {
            return true
        }
    }
    return false
}
</code></pre></div></div>

<h2 id="字符串-访问和修改">字符串-访问和修改</h2>

<h3 id="字符串索引">字符串索引</h3>

<ul>
  <li>每一个 String 值都有相关的索引类型， String.Index，它相当于每个 Character 在字符串中的位置</li>
  <li>startIndex 属性来访问 String 中第一个 Character 的位置。</li>
  <li>endIndex 属性就是 String中最后一个 字符后的位置</li>
  <li>endIndex 属性并不是字符串下标脚本的合法实际参数 如果 String 为空，则 startIndex 与 endIndex 相等</li>
  <li>使用 index(before:) 和 index(after:) 方法来访问给定索引的前后</li>
  <li>要访问给定索引更远的索引，你可以使用 index(_:offsetBy:)</li>
  <li>使用 indices 属性来访问字符串中每个字符的索引</li>
</ul>

<h3 id="插入">插入</h3>

<ul>
  <li>插入字符，使用 insert(_:at:) 方法</li>
  <li>插入另一个字符串的内容到特定的索引，使用 insert(contentsOf:at:) 方法</li>
</ul>

<h3 id="删除">删除</h3>
<ul>
  <li>移除字符，使用 remove(at:)方法</li>
  <li>移除一小段特定范围的字符串，使用 removeSubrange(_:) 方法</li>
</ul>

<h2 id="字符串-子串和字符串比较">字符串-子串和字符串比较</h2>

<h3 id="子字符串">子字符串</h3>
<ul>
  <li>使用下标或者类似 prefix(_:) 的方法得到的子字符串是</li>
  <li>Substring 类型 Substring 拥有 String 的大部分方法</li>
  <li>Substring 可以转成 String 类型</li>
  <li>子字符串重用一部分原字符串的内存</li>
  <li>修改字符串或者子字符串之前都不需要花费拷贝内存的代价</li>
  <li>String 和 Substring 都遵循 StringProtocol 协议，也就是说它基本上能很方便地兼容所有 接受 StringProtocol 值的字符串操作函数</li>
</ul>

<h3 id="字符串比较">字符串比较</h3>

<ul>
  <li>字符串和字符相等性(==和!=)</li>
  <li>前缀相等性 hasPrefix(_:)</li>
  <li>后缀相等性 hasSuffix(_:)</li>
</ul>

<h1 id="本地存储-userdefaults">本地存储 UserDefaults</h1>

<p>UserDefaults可用于存储一些设置参数，不建议存储复杂的数据结构。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>struct defaultsKeys {
    static let key1 = "key1"
    static let key2 = "key2"
    static let key3 = "key3"
}

let defaults = UserDefaults.standard

// 写入
defaults.setValue("Some String Value", forKey: defaultsKeys.key1)
defaults.setValue(100.0, forKey: defaultsKeys.key2)
defaults.setValue(true, forKey: defaultsKeys.key3)


// 读取
if let value1 = defaults.string(forKey: defaultsKeys.key1) {
    print(value1)
}

let value2 = defaults.float(forKey: defaultsKeys.key2)
print(value2)

let value3 = defaults.bool(forKey: defaultsKeys.key3)
print(value3)
</code></pre></div></div>
 ]]></content>
  </entry>
  
  <entry>
    <title>使用Python下载m3u8视频文件</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/code/2020/08/24/PYTHON_DOWNLOAD_M3U8_TS_MERGE.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=使用Python下载m3u8视频文件" />
    <published>2020-08-24T00:00:00Z</published>
    <updated>2020-08-24T00:00:00+08:00</updated>
    <id>https://www.70apps.com/code/2020/08/24/PYTHON_DOWNLOAD_M3U8_TS_MERGE</id>
    <content type="html"><![CDATA[ <h2 id="环境">环境</h2>

<ul>
  <li>macOS Catalina 10.15.4</li>
  <li>Python 2.7</li>
  <li>Chrome 浏览器</li>
  <li>CURL转代码：https://curl.trillworks.com/</li>
</ul>

<h2 id="操作">操作</h2>

<h3 id="取得m3u8">取得M3U8</h3>

<p>通过 Chrome 浏览器 模拟手机访问视频网站</p>

<p>进入network页，过滤m3u8或直接过滤ts</p>

<h3 id="取得curl脚本">取得CURL脚本</h3>
<p>右键点击TS文件请求项，选择菜单中的 Copy as cURL
<img src="http://www.linchangyu.com/images/2020/20200824/curl.png" alt="screen" /></p>

<h3 id="转换curl代码">转换CURL代码</h3>

<p>进入 https://curl.trillworks.com/，将复制的CURL脚本粘贴在左边
<img src="http://www.linchangyu.com/images/2020/20200824/curlcode.png" alt="screen" /></p>

<h3 id="python核心代码">Python核心代码</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#!/usr/bin/python3
import requests

def downloadTSbyID( id ):
    headers = {
        'Connection': 'keep-alive',
        'Pragma': 'no-cache',
        'Cache-Control': 'no-cache',
        'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
        'Accept': '*/*',
        'Origin': 'https://***.com',
        'Sec-Fetch-Site': 'cross-site',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Dest': 'empty',
        'Referer': 'https://***.com/m/?group=54',
        'Accept-Language': 'zh,zh-CN;q=0.9,en;q=0.8,zh-TW;q=0.7',
    }

    response = requests.get('https://*.com/aOzZnTwQWdF/000'+id+'.ts', headers=headers)
    ts = response.content
    with open(id+'.ts','wb') as data_file:
        data_file.write(ts)
    return id;

i = 0
cmdcombine = 'cat '
while i &lt;= 99:
    s = "%03d" % i
    print(downloadTSbyID(s))
    cmdcombine = cmdcombine + s + '.ts '
    i=i+1
cmdcombine = cmdcombine + ' &gt; combin.mpg'
print(cmdcombine)

</code></pre></div></div>

<ul>
  <li>TS文件没有规律的话，需要处理M3U8，此处略</li>
  <li>下载的TS文件需要根据M3U8的顺序排序，合并时需要排序，否则视频就乱了</li>
</ul>

<h3 id="合并ts文件">合并TS文件</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  cat 001.ts 002.ts &gt; combin.mpg
</code></pre></div></div>

<p>复制打印出的脚本在终端里执行即可，TS本质是MPEGII文件，如果需要可以直接将.TS改为.mpg</p>
 ]]></content>
  </entry>
  
  <entry>
    <title>安卓设计指引 Android Design Guide</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/ux/2020/05/25/ANDROID_DESIGN_GUIDE.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=安卓设计指引AndroidDesignGuide" />
    <published>2020-05-25T00:00:00Z</published>
    <updated>2020-05-25T00:00:00+08:00</updated>
    <id>https://www.70apps.com/ux/2020/05/25/ANDROID_DESIGN_GUIDE</id>
    <content type="html"><![CDATA[ <p><img src="/images/2020/20200525/p01.png" alt="ins" />
<img src="/images/2020/20200525/p02.png" alt="ins" />
<img src="/images/2020/20200525/p03.png" alt="ins" />
<img src="/images/2020/20200525/p04.png" alt="ins" />
<img src="/images/2020/20200525/p05.png" alt="ins" />
<img src="/images/2020/20200525/p06.png" alt="ins" />
<img src="/images/2020/20200525/p07.png" alt="ins" />
<img src="/images/2020/20200525/p08.png" alt="ins" /></p>

<p>### 网络资源</p>

<p>https://material.io/</p>

<p>### 欢迎关注</p>

<p>Instagram：@lincheney
绿洲（微博）：@风雨雷电堂</p>
 ]]></content>
  </entry>
  
  <entry>
    <title>Le X620 刷机</title>
    <link rel="alternate" type="text/html" href="https://www.70apps.com/software/2020/03/10/LeX620_Flash_ROM.html/?utm_source=RSS&amp;utm_medium=RSS&amp;utm_campaign=LeX620刷机" />
    <published>2020-03-10T00:00:00Z</published>
    <updated>2020-03-10T00:00:00+08:00</updated>
    <id>https://www.70apps.com/software/2020/03/10/LeX620_Flash_ROM</id>
    <content type="html"><![CDATA[ <h2 id="刷机准备">刷机准备</h2>

<ol>
  <li>在关于手机中确定手机型号是Le X620</li>
  <li>充电100%</li>
  <li>备份（懒得搞）</li>
  <li>启用开发者模式</li>
  <li>打开USE调试模式选项</li>
  <li>打开OEM刷机模式选项</li>
  <li>安装ADB（我是装了Android Studio)</li>
</ol>

<h2 id="安装-recovery-twrp">安装 recovery-twrp</h2>

<p>下载安装<a href="https://qc3.androidfilehost.com/dl/d36LssqifnQD0CxFAai8lg/1583996668/962021903579492129/recovery-twrp-121117.img">recovery-twrp-121117.img</a></p>

<p>可以在这里找找：<a href="https://twrp.me/devices/leecole2.html">https://twrp.me/devices/leecole2.html</a></p>

<ol>
  <li>下载TWRP刷机服务软件</li>
  <li>关机，连接USB，长按音量下和开机键，进入刷机模式</li>
  <li>电脑打开终端，进入img所在路径（MAC）</li>
  <li>解锁，输入：$ fastboot oem unlock</li>
  <li>刷入软件包，输入：$ fastboot flash recovery recovery-twrp-121117.img</li>
  <li>提示finished. total time: 4.2s，表示OK</li>
  <li>长按关机</li>
  <li>长按音量上和开机键，进入TWRP</li>
</ol>

<h2 id="刷入rom">刷入ROM</h2>

<ol>
  <li>下载ROM</li>
  <li>在TWRP软件界面，调整为中文界面，选择清除，滑动按钮确认恢复出厂（双清）</li>
  <li>安装</li>
</ol>

<h3 id="下载的rom">下载的ROM</h3>

<p>下载了很多，能用的就这个，指纹还不行：</p>
<ul>
  <li>crDroidAndroid-7.1.2-20180113-le_x620-v3.8.4.zip</li>
  <li>帖子：<a href="https://forum.xda-developers.com/le-2/development/rom-crdroidandroid-v3-8-4-t3753954">https://forum.xda-developers.com/le-2/development/rom-crdroidandroid-v3-8-4-t3753954</a></li>
  <li>ROM：<a href="https://androidfilehost.com/?fid=889964283620777919">https://androidfilehost.com/?fid=889964283620777919</a></li>
</ul>

<p>还有一个能用指纹，用不了wifi：</p>
<ul>
  <li>lineage-14.1-20190402-UNOFFICIAL-le_x620.zip</li>
</ul>

<h3 id="额外软件">额外软件</h3>

<h3 id="install-supersu">Install SuperSU</h3>

<p>ROOT工具</p>

<h3 id="google-套件">Google 套件</h3>

<p><a href="https://opengapps.org/">https://opengapps.org/</a></p>

<ul>
  <li>Platform:ARM64</li>
  <li>Android:7.1</li>
  <li>Variant:pico</li>
</ul>

<p>刷原版ROM，Android选6.0，下载下来应该是这样的</p>

<ul>
  <li>open_gapps-arm64-6.0-pico-20200307.zip</li>
  <li>open_gapps-arm64-7.1-pico-20200307.zip</li>
</ul>

<h2 id="神秘问题">神秘问题</h2>

<ol>
  <li>刷机完成后进入初始设置，先跳过wifi，设置指纹，完成后再激活wifi</li>
  <li>找不到sim卡，基带版本未知，重启后，自动激活</li>
</ol>

<h2 id="参考资料">参考资料</h2>

<ul>
  <li>XDA论坛：<a href="https://forum.xda-developers.com/le-2/development">https://forum.xda-developers.com/le-2/development</a></li>
  <li>基本概念： <a href="https://www.zhihu.com/question/21168134">https://www.zhihu.com/question/21168134</a></li>
  <li>刷机流程：
    <ul>
      <li><a href="https://www.androidweblog.com/root-leeco-le-2-install-twrp-recovery/">https://www.androidweblog.com/root-leeco-le-2-install-twrp-recovery/</a></li>
      <li><a href="https://impressivedroid.com/leeco-le-2-root-guide/">https://impressivedroid.com/leeco-le-2-root-guide/</a></li>
      <li><a href="http://bbs.gfan.com/android-8358693-1-1.html">http://bbs.gfan.com/android-8358693-1-1.html</a></li>
    </ul>
  </li>
</ul>
 ]]></content>
  </entry>
  

</feed>
