Posts

Showing posts with the label iOS开发

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...

如何为 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...

解决 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 ...

解决 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 ...