Posts

Showing posts from April, 2026

A New Collection of Thoughtful Learning Apps — Now Available on iOS & Android

Image
I’m excited to share a set of mobile apps I’ve recently completed and published on both the Google Play Store and the Apple App Store. These apps are designed with a simple goal in mind: to make meaningful, structured content more accessible, whether you’re studying theology or improving your English vocabulary. 📱 Now Available on Both Platforms All apps are live and available for download: Google Play Developer Page: https://play.google.com/store/apps/dev?id=5835943159853189043 Apple App Store Developer Page: https://apps.apple.com/ca/developer/q-z-l-corp/id1888794100 📖 Theology & Confession Study Apps For those interested in Reformed theology and classical Christian teachings, I’ve developed a series of apps that present foundational texts in a clean, focused reading format: The Belgic Confession Canons of Dort Heidelberg Catechism Westminster Shorter Catechism Each app is designed to provide a distraction-free experience, making it easier to read, reflect, and revisit these im...

2026年4月26日 主日下午听道反思: 在信仰中选择更艰难的道路

Image
在信仰中选择更艰难的道路 今天的讲道一开始,用一个很生活化的例子:在材料不齐全的情况下尝试做鸡肉蓝带。虽然听起来有点幽默,但它引出了一个很深的属灵提醒——我们常常倾向于用“捷径”去获得好的结果。 这让我反思自己的生活。很多时候,我也更喜欢用更快、更容易的方式去完成一些“好的目标”,无论是在工作、人际关系,甚至在属灵生命中。我想要结果,却不愿意等待过程;想要解决问题,却不愿意经历困难。 关于耶稣在旷野受试探的内容,对我有很大的提醒。魔鬼提出的每一个试探,看起来都很合理:解决饥饿、获得权柄、证明神的保护。但耶稣却一一拒绝。 让我特别有感触的是,这些并不一定是“坏的东西”,而是“错误的方式、错误的时间、错误的途径”去获得它们。耶稣教导我们,顺服神不仅是避免罪,更是相信神的时间与方式是最好的。 第三个试探尤其触动我:要求神“证明祂自己”。我也常常在无意中期待神用某种明显的方式来证明祂的带领与爱。但耶稣选择的不是试探神,而是在不确定中依然信靠神。 讲道提醒我:困难并不代表神不在。相反,有时候艰难的道路,正是神的爱与计划最深刻显明的地方。 总结来说,这篇信息让我有三个主要的反思: 不要为了好的结果而走捷径 信靠神的时间与方式,而不是只追求结果 在顺服中成长,即使道路不容易 最终,跟随基督意味着:选择信靠,而不是控制;选择顺服,而不是方便。

2026 April 26th - Afternoon Sermon Reflection:Choosing the Harder Path of Faith

Image
Choosing the Harder Path of Faith Today’s afternoon sermon began with a simple story about trying to make chicken cordon bleu without the right ingredients. It sounded humorous, but it pointed to a deeper truth: we often try to take shortcuts when we want good results. This made me reflect on my own life. Many times, I also prefer the easier or faster way to achieve something good—whether in work, relationships, or even spiritual life. I want results without waiting, and solutions without struggle. The message about Jesus’ temptation in the wilderness was especially meaningful. Each temptation offered something that seemed reasonable: food for hunger, authority over kingdoms, and proof of God’s protection. Yet Jesus refused all of them. What struck me most is that these were not necessarily “bad things,” but rather “wrong ways, wrong timing, and wrong means” to obtain them. Jesus shows that obedience is not only about avoiding sin, but also about trusting God’s timing and metho...

2026 April 26th - Morning Sermon Reflection:Till Now the Lord Has Helped Us

Image
Ebenezer—Till Now the Lord Has Helped Us Today’s morning message reminded me again that even after Israel’s failure and spiritual wandering, God, in His great mercy, continued to draw them back to Himself. The twenty years of silence did not mean that God had abandoned them. Rather, it showed His patience in waiting for their repentance. This leads me to reflect on my own life—when I grow spiritually cold or distant, do I fail to recognize that God is still at work in my heart? Samuel called the people to repentance—not merely emotional sorrow, but a decisive turning away from idols and a wholehearted return to the Lord. This made me realize that although I do not bow to physical idols today, I can easily elevate comfort, success, relationships, or self-worth above God. These things can quietly become idols in my life. Jesus said, “No one can serve two masters.” I need to honestly ask myself: what do I truly trust in and value most? In the second part, I was especially struck by ...

2026年4月26日 主日上午听道反思: 到如今耶和华都帮助我们

Image
以便以谢——到如今耶和华都帮助我们 今天主日上午的信息让我再次看见,以色列人在经历失败与偏离之后,神仍然以极大的恩典带领他们回转。二十年的沉寂,并不代表神的离弃,反而显明祂在耐心地等待人悔改。这让我反思自己——当我在属灵上冷淡、远离神时,是否也忽略了神仍然在我生命中默默作工? 撒母耳呼召百姓悔改,不只是情感上的懊悔,而是实际地除掉偶像、归向神。这让我意识到,今天我虽然不拜有形的偶像,却很容易把安逸、成就、人际关系或自我价值放在神之上。这些都可能成为我生命中的“偶像”。主耶稣曾说:“一个人不能事奉两个主。”我需要诚实面对:我真正依靠和最看重的是什么? 在第二部分,我特别被以色列人的转变触动。从过去依靠约柜当作“工具”,到如今谦卑求告神,他们开始真正依靠神,而不是操控神。这也提醒我,我的祷告是否只是希望神成就我的计划,还是愿意完全信靠祂的带领? 更让我安慰的是,撒母耳作为祭司为百姓代求,预表了主耶稣基督的工作。耶稣是永远的大祭司,为我们代求。即使我软弱、失败,我仍可以坦然来到神面前,因为不是靠我自己,而是靠基督的救赎。 最后,“以便以谢”这块石头深深提醒我——信仰需要记念。生活中,我常常只看到当下的困难,却忘记过去神的带领与帮助。其实回头看,我的人生中有许多“以便以谢”的时刻:在困难中得到供应,在迷茫中得到指引,在软弱中得到扶持。这些都证明:“到如今,耶和华都帮助我。” 因此,我愿意在心里也立一块“以便以谢”的石头:记念神的恩典,坚固对未来的信心,并在顺境与逆境中都信靠祂。 愿我不只是听道,更能活出悔改、信靠与感恩的生命。也愿我在每天的生活中,常常提醒自己:“到如今,耶和华都帮助我。”

2026年4月19日 主日上午听道反思: 在君王里得避难

Image
诗篇第2篇:在君王里得避难 听完这篇关于诗篇第2篇的讲道,我心里既有一些不安,也有很深的安慰。讲道一开始提出的问题—— “列国为什么争闹?” ——让我感到非常贴近现实。当我看到今天世界上的战争、政治紧张和各种冲突时,我常常会感到困惑,甚至有些灰心。我通常会觉得问题只是人类彼此无法和平相处。但这篇讲道提醒我,从更深的角度来看,真正的问题是人对神的悖逆。 这种角度其实不是我平时会去想的。正如讲道中提到的,这样的观点不会出现在新闻里。但仔细想想,这是有道理的——如果人拒绝神的权柄,那么真正的和平就不可能存在。离开了那位定义公义与真理的神,世界的秩序就必然是混乱的。 让我印象最深的是神的回应。当列国喧嚷、筹谋的时候,神却不是焦虑或惊慌,反而“发笑”。这个画面非常有力量。它提醒我,无论世界看起来多么混乱,神仍然完全掌权。耶稣基督已经是君王了,这不是未来才会实现的事情,而是现在的事实。这让我在不稳定的世界中,找到一种稳固的依靠。 但这篇讲道也没有让我停留在安逸中。“当以嘴亲子”这个呼召非常直接。信仰不仅仅是相信一些道理,更是降服。这一点对我来说是一个提醒:我是否真的在生活的各个方面顺服基督的权柄?还是在某些地方仍然想自己作主?这让我意识到,悖逆不仅存在于“列国”之中,也可能隐藏在我自己的心里。 我也很感恩讲道中清楚地传讲了福音,没有刻意弱化或包装。信息是直接而迫切的:要悔改,归向基督。乍听之下可能觉得严厉,但其实这是出于怜悯。神之所以警告,是因为祂关心我们。 而最让我感到安慰的,是“避难”这个主题。那位将要审判世界的君王,同时也是为我们舍命的救主。“在他里面得避难,而不是躲避他”,这一点非常深刻。耶稣既是公义的审判者,也是代替我们承受审判的羔羊。祂承担了我们本该承受的刑罚,使我们可以在祂里面得着真正的安全。 讲道中关于飓风“风眼”的比喻让我印象很深。现在的时代就像风暴中的短暂平静——仍然有时间,仍然有机会。但这段时间不会永远持续。这让我不仅为自己的信仰感到警醒,也更加看重向他人传福音的重要性。如果基督真的是唯一的避难所,那么引导别人来到祂面前,就是一件非常重要的事情。 总的来说,这篇讲道帮助我用更合乎圣经的眼光来看待世界,也反思自己的生命。它提醒我,耶稣已经作王,人类的悖逆是真实的,但神的恩典同样真实并且向人敞开。 我祷告,愿自己既有谦卑的心...

2026 April 19th - Morning Sermon Reflection:Finding Refuge in the King

Image
Psalm 2: Finding Refuge in the King Listening to this sermon on Psalm 2 left me both unsettled and comforted at the same time. It started with a question that feels very close to home: “Why do the nations rage?” When I look at the world today—wars, political tension, and constant conflict—it’s easy to feel confused or even discouraged. I often think the problem is simply that people can’t get along. But this sermon challenged me to see deeper: the real issue is humanity’s rebellion against God. That perspective is not something I naturally think about. Like the sermon said, we don’t hear this on the news. But it makes sense—if people reject God’s authority, then peace will always be fragile. True peace can’t exist apart from the One who defines justice and righteousness. What struck me most was God’s response. While the nations rage and make plans, God is not anxious or threatened—He laughs. That image is powerful. It reminds me that no matter how chaotic things feel, God is sti...

A New Collection of Thoughtful Learning Apps — Now Available on iOS & Android

Image
I’m excited to share a set of mobile apps I’ve recently completed and published on both the Google Play Store and the Apple App Store. These apps are designed with a simple goal in mind: to make meaningful, structured content more accessible, whether you’re studying theology or improving your English vocabulary. 📱 Now Available on Both Platforms All apps are live and available for download: Google Play Developer Page: https://play.google.com/store/apps/dev?id=5835943159853189043 Apple App Store Developer Page: https://apps.apple.com/ca/developer/q-z-l-corp/id1888794100 📖 Theology & Confession Study Apps For those interested in Reformed theology and classical Christian teachings, I’ve developed a series of apps that present foundational texts in a clean, focused reading format: The Belgic Confession Canons of Dort Heidelberg Catechism Westminster Shorter Catechism Each app is designed to provide a distraction-free experience, making it easier to read, reflect, and revisit these im...

React Native iOS 修复:MaterialIcons 显示 “?”(字体未加载问题完整解决方案)

Image
React Native iOS 修复:MaterialIcons 显示 “?”(字体未加载问题完整解决方案) 如果你的 React Native 应用在 iOS 上显示 ? 而不是 MaterialIcons 图标,通常是因为 iOS 没有正确加载图标字体导致的。 本文将讲解: 问题出现的原因 完整修复方法 常见坑:Multiple commands produce MaterialIcons.ttf 问题现象 你可能在代码中使用: import MaterialIcons from '@react-native-vector-icons/material-icons'; 并这样渲染图标: <MaterialIcons name="dashboard" size={24} color="#2563eb" /> 但在 iOS 上出现: 显示 ? 图标为空白 图标无法显示 根本原因 问题的核心是 MaterialIcons.ttf 没有被正确加载到 iOS App Bundle 中。 在 iOS 中,字体必须满足: 被加入 App 资源文件 在 Info.plist 中注册 如果缺少任何一步,iOS 就无法渲染字体图标,只会显示 ? 。 解决方案(推荐做法) 第一步:在 Info.plist 注册字体 打开文件: ios/<YourAppName>/Info.plist 添加以下内容: <key>UIAppFonts</key> <array> <string>MaterialIcons.ttf</string> </array> 如果已经存在 UIAppFonts ,只需追加: <string>MaterialIcons.ttf</string> 第二步:清理并重新构建 iOS 项目 修改 Info.plist 后必须重新编译 App。 方法一:Xcode Product → Clean Build F...

React Native iOS Fix: MaterialIcons Showing “?” (Font Not Loaded) – Complete Guide

Image
React Native iOS Fix: MaterialIcons Showing “?” (Font Not Loaded) – Complete Guide If your React Native app is showing ? instead of MaterialIcons on iOS, the issue is almost always caused by a missing or unregistered icon font in the iOS build. This guide explains: Why this happens How to fix it properly How to avoid the common “Multiple commands produce MaterialIcons.ttf” error Symptoms You are using: import MaterialIcons from '@react-native-vector-icons/material-icons'; And rendering icons like: <MaterialIcons name="dashboard" size={24} color="#2563eb" /> But on iOS, you see: A ? instead of icons Blank icons Or missing glyphs Root Cause The issue happens because MaterialIcons.ttf is not properly loaded in the iOS app bundle. On iOS, fonts must be: Included in the app resources Registered in Info.plist If either step is missing, iOS cannot render the icon font and falls back to ? . Fix...

如何为 App Store Connect 准备应用预览视频和截图(ffmpeg 实战指南)

Image
  如何为 App Store Connect 准备应用预览视频和截图(ffmpeg 实战指南) 在通过 App Store Connect 发布应用时,截图和应用预览视频(App Preview)是非常关键的一步,也是最容易踩坑的地方。 这篇文章用最简单、实用的方式,带你一步一步搞定。 📸 应用截图(最简单) 截图其实很容易: 在 iPhone 上打开你的 App 直接截图 使用 AirDrop 传到 Mac 用 Preview 调整到要求尺寸 基本就完成了,不需要复杂工具。 🎬 应用预览视频(重点难点) 相比截图,应用预览视频有严格要求,来自 Apple: 📋 核心要求 ⏱ 时长: 不超过 30 秒 🎞 帧率: 不高于 30 fps(建议 30 fps) 📐 分辨率: 竖屏: 886 × 1920 横屏: 1920 × 886 🔊   必须包含音频(不能是静音视频) 📱 第一步:用 iPhone 录屏 使用系统自带录屏功能: 在控制中心添加“屏幕录制” 开始录制 演示你的 App 核心功能 停止录制 💡 建议:提前规划好内容,控制在 30 秒以内。 🔄 第二步:传到 Mac 通过 AirDrop 快速传输视频到电脑。 🎧 第三步:添加音频(必要) App Preview   必须有音频 ,否则容易被拒。 可以使用 iMovie: 添加背景音乐 加旁白说明 简单剪辑视频 完成后导出视频。 ⚙️ 第四步:用 ffmpeg 处理视频 这是最关键的一步,可以解决大部分审核问题。 ✂️ 裁剪到 30 秒 ffmpeg -ss 0 -t 30 -i input.mp4 -c copy trimmed.mp4 📐 调整分辨率 + 帧率 + 优化格式 ffmpeg -i trimmed.mp4 \ -vf "scale=886:1920:force_original_aspect_ratio=decrease,pad=886:1920:(ow-iw)/2:(oh-ih)/2,fps=30" \ -r 30 -vsync cfr \ -c:v libx264 -b:v 2000k -maxrate 2000k -bufsize 4000k \ -pix_fmt yuv420p \ -c:a aac -b:a 128k \ -mov...

How to Prepare App Preview Videos and Screenshots for App Store Connect

Image
  How to Prepare App Preview Videos and Screenshots for App Store Connect When distributing your app through App Store Connect, preparing screenshots and app preview videos is one of the final — and surprisingly tricky — steps. This guide walks you through a simple, practical workflow that actually works. 📸 Screenshots (Easy Part) Screenshots are straightforward: Launch your app on your iPhone Capture screenshots directly on the device Transfer them to your Mac via AirDrop Open them in Preview and resize to the required dimensions That’s it. No special tools needed. 🎬 App Preview Videos (The Tricky Part) App preview videos have strict requirements from Apple: Key Requirements ⏱ Duration:   ≤ 30 seconds 🎞 Frame rate:   ≤ 30 fps (recommended: 30 fps) 📐 Resolution: 886 × 1920 (portrait) 1920 × 886 (landscape) 🔊   Must include audio 📱 Step 1: Record Your App on iPhone Use the built-in screen recording feature: Add   Screen Recording   to Control Center (i...

2026 April 12th - Morning Sermon Reflection:Learning to Care Through Prayer

Image
Learning to Care Through Prayer This past Sunday’s sermon on Romans 15:30 was a timely and needed reminder about the role of prayer in the Christian life. Although prayer is something we often talk about, it is also something we easily neglect. The message did not leave me feeling guilty, but instead renewed my desire to pray—especially for others. Prayer Is More Urgent Than We Think One of the things that stood out most was the urgency of prayer. The Apostle Paul does not casually suggest prayer—he appeals to believers. That really challenged me. I often treat prayer as optional, something I do when I have extra time. But this sermon reminded me that prayer is one of the primary ways God chooses to work in the world. It made me reflect: do I really believe that prayer changes things? Or have I quietly reduced prayer to something that only changes me? Even though I don’t fully understand how God’s sovereignty and prayer fit together, I was reminded that Scripture clearly tea...

2026年4月12日 主日上午听道反思: 学习借着祷告彼此关怀

Image
学习借着祷告彼此关怀 这个主日关于罗马书15:30的讲道,对我来说是一个非常及时的提醒。祷告是我们常常谈论的事情,却也是最容易忽略的属灵操练之一。这篇信息没有让我感到压力或内疚,反而重新点燃了我祷告的心,特别是为他人祷告的负担。 祷告比我们想象的更迫切 让我印象最深的是祷告的“迫切性”。使徒保罗不是随意地建议信徒祷告,而是“恳求”、“劝勉”。这对我来说是一个提醒:我常常把祷告当作一种可有可无的事情,是在有空的时候才去做的属灵活动。 但讲道让我重新思想:我真的相信祷告能改变事情吗?还是在不知不觉中,我已经把祷告看成只是改变自己心态的一种方式? 虽然我无法完全理解神的主权与人的祷告如何同时成立,但圣经清楚地教导这两点都是真实的。因此,我所需要的不是完全明白,而是愿意相信,并去祷告。 祷告是一场挣扎 另一个很有冲击力的点,是祷告并不轻松。保罗说我们要在祷告中“竭力”、“努力”。这改变了我对祷告的看法。 仔细想想,这确实符合现实。生活的忙碌、内心的罪、各种分心,甚至是不信,都会让祷告变得困难。有时候我不祷告,是因为觉得自己“不够好”;有时候,则只是被日常事务填满了时间。 但讲道给了一个非常实际的帮助:把“处境”和“神是谁”结合起来祷告。不是停留在模糊的祈求,而是根据神的属性来祷告——他的能力、他的慈爱、他的信实。 这样,祷告就有了方向,也更加真实、有力量。 学习为他人祷告 关于为他人祷告的部分,对我来说是最触动的。我发现自己往往只有在事情影响到自己,或关系非常亲近的人时,才会迫切祷告。但保罗却呼召那些从未见过他的人,为他竭力祷告。 这让我意识到,我的祷告范围太狭窄了。圣经说教会是一个身体,一个肢体受苦,众肢体一同受苦。但在实际生活中,我常常感觉不到这种连结。 而祷告,正是帮助我们进入这种真实彼此关怀的起点。 同时,这也提醒我,在关怀他人时需要有智慧。不是强迫别人分享,而是在对方愿意敞开时,用祷告来托住他们。这或许是最真实、也是最深的关怀方式之一。 不是重担,而是邀请 我最感恩的是,这篇讲道没有让我背上“我做得不够”的重担,而是向我发出邀请。祷告不仅仅是责任,更是一种特权。 这是参与神工作的途径,让我们可以在自己的生命中,也在他人的生命中,经历神的作为。 我盼望自己在祷告上能有成长—not 出于压力,...

React Native TTS iOS 问题全解析:修复 BOOL 错误与事件监听失效(2026 实战指南)

Image
React Native TTS iOS 问题全解析:修复 BOOL 错误与事件监听失效(2026 实战指南) 在 React Native 中使用文本转语音(TTS)本来很简单,但在 iOS 上却可能踩坑。 本文总结了两个非常常见但又很隐蔽的问题,并提供经过验证的解决方案。 🧨 问题一:Objective-C type BOOL is unsupported 错误信息 TextToSpeech.setDefaultRate(): Error while converting JavaScript argument to Objective C type BOOL convert javascript argument to object C type Bool object C type bool is unsupported 🔍 根本原因 这 不是你的代码问题 。 这是由于 iOS 原生桥接层(Objective-C)类型定义错误导致的,尤其在 React Native 新架构(Fabric / TurboModules)下更容易触发。 部分版本的 react-native-tts 错误地使用了: (BOOL *)onWordBoundary ❌ 错误 而 React Native bridge 不支持 BOOL 指针类型 ,只支持: BOOL NSNumber * ✅ 解决方案 https://github.com/ak1394/react-native-tts/issues/291 使用已修复的 fork 版本: @iternio/react-native-tts npm install @iternio/react-native-tts 该版本已修复 iOS 类型问题,可以正常运行。 ⚠️ 问题二:事件监听器未注册 警告信息 Sending `tts-start` with no listeners registered. 即使你已经写了监听: Tts.addEventListener('tts-start', () => { setIsSpeaking(true); }); 🔍 根本原因 问题在于: ...

React Native TTS iOS Fix: “Objective-C BOOL Unsupported” + tts-start Listener Not Working (2026 Guide)

Image
  React Native TTS on iOS — Fixing “Objective-C BOOL Unsupported” and Missing Event Listeners Working with text-to-speech in React Native should be simple — until you hit iOS. Recently, I ran into two frustrating issues using   react-native-tts   on iOS. After digging through GitHub issues and debugging native code, here are the   root causes and fixes . 🧨 Issue 1: Objective-C type BOOL is unsupported Error TextToSpeech.setDefaultRate(): Error while converting JavaScript argument to Objective C type BOOL or convert javascript argument to object C type Bool object C type bool is unsupported 🔍 Root Cause This is   not your code . It’s caused by a   type mismatch in the iOS native bridge , especially under the new React Native architecture (Fabric / TurboModules). Some versions of   react-native-tts   incorrectly define Objective-C method parameters like: (BOOL *)onWordBoundary // ❌ incorrect React Native   does NOT support   BOOL * ...

解决 React Native iOS 缺少 iPad 图标错误(152x152 / 167x167 验证失败)

Image
解决 React Native iOS 缺少 iPad 图标错误(152x152 / 167x167) 在提交 React Native iOS 应用到 App Store 时,如果你遇到类似错误: Missing required icon file. The bundle does not contain an app icon for iPad of exactly '152x152' pixels The bundle does not contain an app icon for iPad Pro of exactly '167x167' pixels 这个问题看起来很奇怪,因为你的 Xcode 项目中已经显示支持 iPad。 🔍 现象 你可能已经看到: Deployment Info 中有 iPad 配置 iPad Orientation 已启用 但是打开 Assets.xcassets → AppIcon 时: ❌ 没有 iPad 图标槽位 最终导致 App Store 校验失败。 🧠 根本原因 这是因为配置不一致导致的: 项目设置支持 iPad ✅ AppIcon 资源仍然是 iPhone-only ❌ 在很多 React Native 项目中,默认生成的 AppIcon 并不包含 iPad 图标槽位。 ✅ 解决方案(最简单有效) 重新创建 AppIcon: 打开 Assets.xcassets 删除当前的 AppIcon 右键 → New App Icon 命名为 AppIcon 新的 AppIcon 会自动包含: iPad 图标(152x152) iPad Pro 图标(167x167) 🖼️ 必须提供的图标 你至少需要提供: 152 × 152(iPad) 167 × 167(iPad Pro) 将对应 PNG 图片拖入即可。 ⚠️ 重要检查 确保项目确实支持 iPad: Build Settings → Targeted Device Family = 1,2 含义: 1 = iPhone 2 ...

Fix Missing iPad App Icon in React Native iOS (Xcode Validation Error 152x152 / 167x167)

Image
Fix Missing iPad App Icon in React Native iOS (Xcode Validation Error) If you're submitting a React Native iOS app and encounter errors like: Missing required icon file. The bundle does not contain an app icon for iPad of exactly '152x152' pixels The bundle does not contain an app icon for iPad Pro of exactly '167x167' pixels This issue can be confusing — especially when your project already shows iPad support in Xcode. 🔍 The Confusing Part In Xcode, you may already see: iPad orientation settings enabled Deployment Info showing iPhone + iPad However, when opening Assets.xcassets → AppIcon , there are no iPad icon slots . This leads to App Store validation failure. 🧠 Root Cause This is caused by a mismatch between: Xcode project settings (which support iPad) Asset catalog configuration (which may still be iPhone-only) In many React Native projects, the default AppIcon set is created without iPad slots, even when the app later ...

解决 Xcode 报错:Sandbox rsync “Operation not permitted”(React Native / CocoaPods 完整方案)

Image
解决 Xcode 报错:Sandbox rsync “Operation not permitted”(React Native / CocoaPods) 在使用 React Native 开发 iOS 应用时,如果你在 Xcode 中遇到类似如下错误: Sandbox: rsync deny(1) file-read-data Operation not permitted PhaseScriptExecution [CP] Embed Pods Frameworks 那么你踩到了 Xcode 15+ 中一个非常常见的坑。 🔍 问题原因 Xcode 15 引入了更严格的安全机制 —— User Script Sandboxing(用户脚本沙箱) 。 这个机制会限制构建过程中脚本的文件访问权限,而 CocoaPods 在编译时会执行一个脚本(Embed Pods Frameworks),使用 rsync 来复制 framework: ❌ 无法读取 framework 文件(如 React.framework) ❌ 无法写入 app bundle 最终导致 Operation not permitted 错误。 ✅ 解决方案(最有效) 关闭 Xcode 的 User Script Sandboxing : 打开 Xcode 选择你的 Project(不是 Target) 进入 Build Settings 搜索: User Script Sandboxing 将其设置为: NO 然后执行清理并重新编译: Shift + Command + K 通常问题会立刻解决。 💡 原理说明 关闭脚本沙箱后,CocoaPods 的构建脚本将可以正常执行: 读取 framework 文件 复制到应用目录 保留签名信息(CodeSignature) ⚠️ 如果仍然报错(补充方案) 可以尝试以下操作: 给 Xcode 添加 Full Disk Access(完整磁盘权限) 删除 DerivedData 目录 重新执行 pod install 🚀 总结 这个问题并不是你的项目配置错误,而是: Xcode ...

Fix Xcode Sandbox rsync “Operation not permitted” Error (React Native / CocoaPods Solution)

Image
Fix Xcode Sandbox rsync “Operation not permitted” Error (React Native / CocoaPods) If you are building a React Native iOS app and suddenly see errors like: Sandbox: rsync deny(1) file-read-data Operation not permitted PhaseScriptExecution [CP] Embed Pods Frameworks You are not alone. This issue is very common in Xcode 15+ due to stricter sandboxing rules. 🔍 Root Cause Xcode introduced User Script Sandboxing , which restricts scripts (like CocoaPods' framework embedding step) from accessing certain files. During build, rsync is used to copy frameworks (e.g. React.framework), but the sandbox blocks it: ❌ Cannot read framework files ❌ Cannot write into app bundle This results in the infamous Operation not permitted error. ✅ Solution (Works Instantly) Disable User Script Sandboxing in Xcode: Open your project in Xcode Select the project (not target) Go to Build Settings Search for: User Script Sandboxing Set it to: NO Then clean and r...

2026年4月5日 主日下午听道反思: 不要错过耶稣

Image
  不要错过耶稣 听完这篇讲道,我一直在想一件事:人真的很容易看错、甚至认不出耶稣是谁。 一开始提到 Joshua Bell 在地铁里拉小提琴的例子让我很有感触。一个这么厉害的音乐家就在眼前,大家却匆匆走过,没有人真正停下来欣赏。其实,当年的耶稣也是这样——祂就在人的中间,但很多人却没有认出祂。 在 Good Friday 那一天,耶稣被嘲笑、被鞭打、被钉在十字架上。从人的角度看,这完全像是一个失败者的结局。如果我当时在场,我会怎么想?我真的会相信祂是神的儿子吗?还是也会怀疑? 可是后来发生的事情很不一样——幔子裂开,地震,甚至坟墓也开了。感觉就像神在说:“你们要看清楚,这不是普通的一件事。” 让我最触动的是那个百夫长。他不是门徒,也不是犹太人,但他看见这些事之后,却说:“这真是神的儿子。” 这让我反思自己:我平时也会说“耶稣是神的儿子”,但我真的打从心里相信吗? 因为如果耶稣真的是神的儿子,那一切都不一样了。祂的死就不是白白的,而是为我们;我们也真的可以来到神面前;甚至连死亡也不再是最后的结局。 对我来说,这篇讲道最大的提醒就是: 不要错过耶稣。 祂其实没有隐藏,只是我常常没有认真去看、去认识祂。就像当时的人一样,离祂很近,却还是没有真正认识祂。 所以我现在的祷告很简单: 主啊,求你让我真的看见你是谁,也让我不只是口里承认,而是心里真实地相信。

2026 April 5th - Afternoon Sermon Reflection:Don't Miss Jesus

Image
Don't Miss Jesus Listening to this sermon really made me think about how easy it is to misunderstand who Jesus is. The example at the beginning about   Joshua Bell   playing in a subway really stuck with me. Someone incredibly valuable can be right in front of us, and we still miss it. That’s kind of what happened with Jesus. People saw Him, heard Him, even watched Him die—and still didn’t recognize Him. At the cross, everything looked like failure. On   Good Friday , Jesus was mocked, beaten, and crucified like a criminal. If I were there, I wonder what I would have thought. Would I have believed He was really the Son of God? Or would I have doubted too? But then the signs happen—the curtain tearing, the earth shaking, even the tombs opening. It’s like God is saying, “Look carefully. This is not just another death.” And what really struck me most is the centurion. He wasn’t a disciple. He wasn’t even a Jew. Yet after seeing everything, he says, “Truly this was the Son o...

2026年4月5日 主日上午听道反思: 从困惑到盼望

Image
从困惑到盼望 复活节的故事,其实很真实。 那些跟随耶稣的人,一开始并没有马上明白发生了什么。妇女是困惑的,彼得也是不确定的,一切都不像他们原本所想的那样。 我发现,这和我自己的经历很像。 很多时候,我并不明白神在做什么。事情的发展常常出乎我的意料,让人困惑,甚至有点失望。 但让我印象很深的是,天使给出的解释其实很简单:“他不在这里,已经复活了。” 他们没有长篇大论地证明什么,只是提醒人去记得耶稣曾经说过的话。 这让我明白,信心有时候并不是把一切都想明白,而是选择相信神已经说过的话。 彼得的反应也让我很有感触。虽然他曾经否认主,但当他听到消息时,他还是跑去看。他没有逃避,而是朝着耶稣走去。 这给了我很大的安慰。 因为复活意味着:过去可以被赦免,现在可以得自由,将来充满盼望。 我也许还不完全明白,但我可以像彼得一样,继续向前,带着一点点的信心,相信神正在做更大的事。 从困惑到盼望,这正是复活节带给我们的旅程。

2026 April 5th - Morning Sermon Reflection:From Confusion to Joy

Image
From Confusion to Joy One thing that stood out to me in the Easter story is how real it feels. The women were confused. Peter was unsure. No one fully understood what was happening at first. And honestly, that’s where I often find myself too. There are many moments in life when I don’t fully understand what God is doing. Things don’t always make sense. Like the disciples, I try to put the pieces together, but they don’t seem to fit. But what struck me was this: the answer wasn’t complicated. The angels didn’t give a long explanation. They simply reminded them of what Jesus had already said. “He is not here. He has risen.” Sometimes, faith is just that simple. Not having every answer, but choosing to trust what God has already spoken. I was also really encouraged by Peter. Even after denying Jesus, he still ran to the tomb. He didn’t hide. He didn’t give up. He ran toward the possibility that something new had happened. That gives me hope. Because the resurrection ...