<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>欢迎来到 Code Knight! :tada: on 小乜's Code Knight</title><link>https://x-mie.com/</link><description>Recent content in 欢迎来到 Code Knight! :tada: on 小乜's Code Knight</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><managingEditor>ian@x-mie.com (小乜)</managingEditor><webMaster>ian@x-mie.com (小乜)</webMaster><copyright>© 2026 小乜 of X-Studio</copyright><lastBuildDate>Sun, 22 Feb 2026 07:15:16 -0800</lastBuildDate><atom:link href="https://x-mie.com/index.xml" rel="self" type="application/rss+xml"/><item><title>后视镜里的雾气</title><link>https://x-mie.com/p/fog-in-the-rearview-mirror/</link><pubDate>Sun, 22 Feb 2026 07:15:16 -0800</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/fog-in-the-rearview-mirror/</guid><description>&lt;p&gt;尾灯在暗夜的公路上拉出红晕，&lt;br&gt;
引擎的低鸣震颤着发酸的掌心。&lt;/p&gt;
&lt;p&gt;逃离的庆幸只维持了短短一瞬，&lt;br&gt;
拥堵的车流便将时间无限拉长，&lt;br&gt;
熟悉的失落感随着夜风倒灌进来。&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://x-mie.com/p/fog-in-the-rearview-mirror/featured.jpg"/></item><item><title>褪色的喧嚣</title><link>https://x-mie.com/p/fade-noise/</link><pubDate>Fri, 20 Feb 2026 23:06:44 -0800</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/fade-noise/</guid><description>&lt;p&gt;窗外的夜风带着初春的料峭，&lt;br&gt;
机箱风扇的细碎嗡鸣重新成为房间里唯一的背景音。&lt;br&gt;
日历上那些惹眼的红，&lt;br&gt;
不知不觉又褪回了平淡的黑白。&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://x-mie.com/p/fade-noise/featured.jpg"/></item><item><title>毁灭世界的红色按键</title><link>https://x-mie.com/p/cracks-on-fingertips/</link><pubDate>Fri, 23 May 2025 09:30:43 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/cracks-on-fingertips/</guid><description>&lt;p&gt;窗台上的灰尘，&lt;br&gt;
在冷掉的日光里缓慢起伏。&lt;br&gt;
空气里有种干燥的焦灼感，&lt;br&gt;
像一张即将燃尽的废纸。&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://x-mie.com/p/cracks-on-fingertips/featured.jpg"/></item><item><title>用 ChatGPT 写了个脚本</title><link>https://x-mie.com/p/using-chatgpt/</link><pubDate>Fri, 10 Mar 2023 00:54:17 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/using-chatgpt/</guid><description>&lt;p&gt;最近把博客迁移到 hugo 了，VPS 里的所有服务也全部迁移到了 docker 容器里，包括 hugo，静态页托管在 docker 的 nginx 里，源文件放在 github 上。正好可以通过 webhook 来实现源文件 push 后自动部署，于是让 ChatGPT 帮忙写了个监听代码，非常强大非常科学~&lt;/p&gt;</description></item><item><title>iOS "即插即用"的服务类</title><link>https://x-mie.com/p/ios-service/</link><pubDate>Sat, 25 Apr 2020 14:04:06 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/ios-service/</guid><description>&lt;p&gt;在项目的开发过程中免不了需要集成第三方 SDK ，而这个过程中最头疼的事就是在 AppDelegate 中重写各种相关的系统回调方法，比如 &lt;code&gt;application:openURL:options:&lt;/code&gt; 和 &lt;code&gt;application:didReceiveRemoteNotification:fetchCompletionHandler:&lt;/code&gt; 等等，而每个 SDK 对这些方法中拿到的数据处理方式又各不相同，并且随着集成的第三方 SDK 越来越多，AppDelegate 也变得越来越臃肿，每一个回调方法中充斥着各种第三方 SDK 的处理代码，AppDelegate 亟待瘦身。&lt;/p&gt;
&lt;p&gt;另外，当一个公司内部有多个项目都需要集成一系列 SDK（如分享、推送、支付等） 的时候，将这个重复的集成步骤在公共组件中统一处理是一个非常有必要的事情，这样既能够减少很大一部分重复开发工作，也能够将冗余的代码从 AppDelegate 中剥离出去。而对于各个项目的开发同学来说，使用公共组件中的这些组件能力的时候，更关心的应该是如何在业务中使用这些能力，而不是关心第三方 SDK 需要从哪些系统回调中监听数据，或者第三方 SDK 的生命周期管理，例如：使用支付功能的时候，业务需要使用的能力只有&lt;strong&gt;发起支付&lt;/strong&gt;动作和&lt;strong&gt;支付成功或失败&lt;/strong&gt;的回调，而具体发起支付前需要的参数配置和支付结果的回调应该在哪里监听（通过 url scheme 还是 SDK 内置的 H5 回调），这些是业务方不需要考虑的。&lt;/p&gt;</description></item><item><title>组件化下的多语言方案</title><link>https://x-mie.com/p/ios-localization/</link><pubDate>Sat, 18 Apr 2020 13:43:23 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/ios-localization/</guid><description>&lt;p&gt;这一次需要对公司现有项目做国际化改造，由于项目在早期的迭代过程中没有考虑国际化的需求，项目中的字符串都是通过硬编码的形式直接写在业务逻辑里的，我们在做国际化时遇到的第一个问题就是如何将现有硬编码字符串替换为支持多语言的实现方案。经过初步统计，现有两个项目各有约 4000-5000 的字符串，我们需要一个比较好的方案来快速完成多语言方案替换，尽量不将过多的时间花在这类非技术性问题上。&lt;/p&gt;

&lt;h4 class="relative group"&gt;多语言宏
 &lt;div id="多语言宏" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a4%9a%e8%af%ad%e8%a8%80%e5%ae%8f" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;对于已有的非多语言项目来说，使用苹果提供的多语言宏是最佳选择，因为苹果提供的宏可以通过 Xcode 的 &lt;code&gt;Editor-Export for Localization...&lt;/code&gt; 功能直接将所有多语言字符串一键导出为 .xliff 文件或 .strings 文件。&lt;/p&gt;
&lt;p&gt;首先梳理一下 Objective-C 提供的多语言宏，苹果一共提供了四个宏供开发者使用：&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NSLocalizedString(key, comment)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NSLocalizedStringFromTable(key, tbl, comment)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>iOS 后台持续定位</title><link>https://x-mie.com/p/ios-background-location/</link><pubDate>Tue, 25 Dec 2018 21:04:06 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/ios-background-location/</guid><description>&lt;p&gt;最近在优化项目中的定位功能，总结一下和后台持续定位有关的各方面细节，会涉及到后台运行、延迟定位、无感知唤醒等内容。目前测试的效果是后台挂机（也就是手机关闭屏幕待机）状态下超过 24 小时不间断获取位置并上报服务器。&lt;/p&gt;

&lt;h3 class="relative group"&gt;权限
 &lt;div id="权限" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%9d%83%e9%99%90" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;首先来看一下权限问题，要使用后台定位首先需要保证 &lt;code&gt;Target -&amp;gt; Capabilities -&amp;gt; Background Modes &lt;/code&gt; 的开关打开，并勾选 &lt;code&gt;Location updates&lt;/code&gt; ，然后在 info.plist 中添加必要的 &lt;code&gt;NSLocationWhenInUseUsageDescription&lt;/code&gt; 和 &lt;code&gt;NSLocationAlwaysAndWhenInUseUsageDescription&lt;/code&gt; 描述字段，兼容 iOS 10 以及之前版本的还需要 &lt;code&gt;NSLocationAlwaysUsageDescription&lt;/code&gt; ，具体描述内容要求简洁清晰地解释 APP 需要定位的理由以及用途。&lt;/p&gt;</description></item><item><title>Hello Knight</title><link>https://x-mie.com/p/hello-world/</link><pubDate>Fri, 07 Dec 2018 16:21:17 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/hello-world/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-objc" data-lang="objc"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NSLog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;@&amp;#34;Hello Knight!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NSLog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;@&amp;#34;I am Ian..&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NSLog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;@&amp;#34;换机房了，豪华直连。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NSLog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;@&amp;#34;全站 HTTPS 了。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NSLog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;@&amp;#34;启用 CDN 了。。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>博客系统迁移了</title><link>https://x-mie.com/p/blog-transfer-to-hexo/</link><pubDate>Thu, 03 Dec 2015 18:51:45 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/blog-transfer-to-hexo/</guid><description>&lt;p&gt;博客又迁移了，从最早的基于 asp 的 PJBlog，到基于世界上最好的语言 PHP 的 Wordpress，再到现在回归本质基于 HTML 的 Hexo，折腾了一路，现在不折腾了，Hexo 算是很轻量级的博客框架了。&lt;/p&gt;</description></item><item><title>小游戏 箱子大战java版源代码</title><link>https://x-mie.com/p/boxfight-java-source/</link><pubDate>Thu, 14 Mar 2013 11:16:43 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/boxfight-java-source/</guid><description>&lt;p&gt;&lt;strong&gt;写于2011年7月,一直在草稿箱里:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;实习的时候无聊，把高三那年在文曲星上用类c的LavaX写的小游戏用java重写了，写了2天，第一天思路错了，监听器怎么都搞不定，方向控制也偷懒想要取巧，结果搞得自己都混乱了，各种bug无从下手。于是第二天全部删掉重写，一天下来总算是能运行了，虽然bug一大堆！然后又用了一天时间测试和bug fix，一休息就拉企鹅过来试玩，期间各种棍子乱飞，箱子乱飞，改代码改了一上午，终于是能玩完一局不出错了，感觉上和高三那年写的一样一样啊，下午又小修修补补的，已知的bug全部搞定，又加了些新功能，玩起来已经非常欢乐了。。。&lt;br&gt;
游戏说明：&lt;br&gt;
由于是简单的使用线程睡眠来控制速度的，所以不同电脑速度表现差别会很大，速度不合理的可以修改 SPEED 的值。&lt;br&gt;
二人游戏，通过Ctrl和Enter键推动上下移动的推杆，推动中间的箱子掉下去砸碎对方的蛋。。。&lt;/p&gt;</description></item><item><title>【小乜汉化】U盘OTG StickMount Pro V2.10中文(解决原版中文乱码)</title><link>https://x-mie.com/p/otg-stickmount-pro-zh-cn/</link><pubDate>Tue, 11 Dec 2012 22:06:51 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/otg-stickmount-pro-zh-cn/</guid><description>&lt;p&gt;这里是发在 MIUI 论坛原帖的备份，就当做个记录吧。&lt;/p&gt;
&lt;p&gt;原帖地址：&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.miui.com/thread-590024-1-1.html" target="_blank" rel="noreferrer"&gt;http://www.miui.com/thread-590024-1-1.html&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;本软件由小乜汉化,版权归原作者Chainfire所有,转载请保留此信息!&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>【小乜汉化】NFC任务启动器 4.0.1 汉化版 [11/06更新]</title><link>https://x-mie.com/p/nfc-task-launcher-zh-cn/</link><pubDate>Tue, 11 Dec 2012 21:29:12 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/nfc-task-launcher-zh-cn/</guid><description>&lt;p&gt;这里是发在 MIUI 论坛原帖的备份，就当做个记录吧。&lt;/p&gt;
&lt;p&gt;原帖地址：&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.miui.com/thread-836337-1-1.html" target="_blank" rel="noreferrer"&gt;http://www.miui.com/thread-836337-1-1.html&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;本软件由小乜汉化,版权归软件原作者所有,转载请保留此信息!&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>【小乜汉化】franco内核工具中文版v8.0.1</title><link>https://x-mie.com/p/franco-kernel-updater-zh-cn/</link><pubDate>Tue, 11 Dec 2012 19:56:45 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/franco-kernel-updater-zh-cn/</guid><description>&lt;p&gt;这里是发在 MIUI 论坛原帖的备份，就当做个记录吧。下载记录还是蛮多的~~~&lt;/p&gt;</description></item><item><title>【刷机教程】Galaxy Nexus(GSM)解锁/root/recovery(附驱动下载)</title><link>https://x-mie.com/p/galaxy-nexus-unlock/</link><pubDate>Sat, 18 Aug 2012 21:33:36 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/galaxy-nexus-unlock/</guid><description>&lt;hr&gt;
&lt;p&gt;这里是发在 MIUI 论坛原帖的备份，就当做个记录吧。&lt;/p&gt;
&lt;p&gt;原帖地址：&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.miui.com/thread-476404-1-1.html" target="_blank" rel="noreferrer"&gt;http://www.miui.com/thread-476404-1-1.html&lt;/a&gt; 7W+次查看&lt;/p&gt;</description></item><item><title>定南中学2008届高三B1班剪影</title><link>https://x-mie.com/p/senior-three-b1-memory/</link><pubDate>Mon, 18 Apr 2011 17:55:00 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/senior-three-b1-memory/</guid><description>&lt;p&gt;下午整理硬盘的时候发现了这些视频,看上去很是怀念,于是就把它们合起来了..&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://x-mie.com/p/senior-three-b1-memory/featured.jpg"/></item><item><title>牢骚</title><link>https://x-mie.com/p/some-boring/</link><pubDate>Fri, 17 Sep 2010 17:55:00 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/some-boring/</guid><description>&lt;p&gt;大学就是一个养老院，&lt;br&gt;
你迫不及待地从高中转进来，&lt;br&gt;
意图享受你想要的悠闲的生活——未曾想过，&lt;br&gt;
这是麻醉，&lt;br&gt;
这是慢性自杀。&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://x-mie.com/p/some-boring/featured.png"/></item><item><title>给技术团队设计的T-Shirt</title><link>https://x-mie.com/p/t-shirt-design/</link><pubDate>Tue, 27 Apr 2010 18:48:00 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/t-shirt-design/</guid><description>&lt;p&gt;​		花了一个下午的时间构思和ps&amp;hellip;.终于做出来了一个比较满意的作品,诶,ps还需要加强&amp;hellip;.练习一万遍啊一万遍&amp;hellip;.&lt;/p&gt;</description></item><item><title>Spicy</title><link>https://x-mie.com/p/spicy/</link><pubDate>Mon, 21 Sep 2009 00:00:00 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/spicy/</guid><description>&lt;p&gt;爱情在生活中是一种调剂&lt;br&gt;
像是意大利菜&lt;br&gt;
加了“spicy”之类的东西&lt;br&gt;
便一下子光鲜夺目起来&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://x-mie.com/p/spicy/featured.jpg"/></item><item><title>仲夏</title><link>https://x-mie.com/p/midsummer/</link><pubDate>Wed, 09 Sep 2009 00:00:00 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/midsummer/</guid><description>&lt;p&gt;莎翁有一本书，叫做《仲夏夜之梦》&lt;/p&gt;
&lt;p&gt;很喜欢这个名字&lt;/p&gt;
&lt;p&gt;你知道吗&lt;/p&gt;
&lt;p&gt;我几乎喜欢一切和夏天相关的词汇&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://x-mie.com/p/midsummer/featured.jpg"/></item><item><title>付出与回报</title><link>https://x-mie.com/p/give-and-return/</link><pubDate>Fri, 28 Aug 2009 10:22:00 +0000</pubDate><author>ian@x-mie.com (小乜)</author><guid>https://x-mie.com/p/give-and-return/</guid><description>&lt;p&gt;这个世界上绝对不存在什么“不求回报的付出”&lt;/p&gt;
&lt;p&gt;信誓旦旦讲这句话的人，要么是在骗人，要么是在骗己&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://x-mie.com/p/give-and-return/featured.png"/></item></channel></rss>