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...
解决 Xcode 报错:Sandbox rsync “Operation not permitted”(React Native / CocoaPods 完整方案)
- Get link
- X
- Other Apps
By
Errong Leng
-
解决 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 新安全机制 与 CocoaPods / React Native 构建脚本之间的不兼容
在当前阶段,关闭 User Script Sandboxing 是最简单、最稳定的解决方案。
希望这篇文章能帮你少踩几个坑。
❤️ Support This Blog
If this post helped you, you can support my writing with a small donation. Thank you for reading.
Popular Posts
Fix “A problem occurred starting process 'command node'” in Android Studio for React Native
By
Errong Leng
-
Fix “A problem occurred starting process 'command node'” in Android Studio for React Native If you are building a React Native Android project and encounter this error during Gradle sync: A problem occurred evaluating project ':react-native-svg'. > A problem occurred starting process 'command 'node'' —even though node works perfectly in your terminal—this guide will show you how to fix it quickly. Common Misconceptions This error is often mistaken as a Node.js or PATH issue, but that is not always the case. Node.js is installed and working in your terminal. PATH and environment variables appear correct. Still, Android Studio Gradle sync fails with the above error. The Real Cause The issue typically arises because of an incorrect Gradle JDK configuration inside Android Studio . Gradle runs inside a JVM and uses that JVM to spawn external processes (like node ). If the Gradle JDK is incompatible or misconfigured, Gradle will...
Swagger annotations for API that allows downloading files as zip
By
三好Daddy
-
I have built out an API that allows you downloading log files as zip in a sprint boot app. The app also integrated with Swagger 3, so I also want this API can be hit in the Swagger UI. In this post, I will demonstrate how to use @ApiOperation annotation to tell Swagger UI download the response as a zip file. use @ApiOperation for your method The key is set media type to "application/octet-stream" which can be recognized by Swagger UI. By doing so, you are set "accept":" application/octet-stream " in the request header. Put below annotation section on top of your API's controller method. @Operation( summary = "", description = "", method="GET", responses = { @ApiResponse(responseCode = "200", description = "", content = { @Content( mediaType = "application/octet-stream" ...
2023, New Start! New AdSense Account! New Earnings!
By
Errong Leng
-
It's been a while after I created adsense account to display ads on this blog. A few years later the payment finally reached my payout threshold, I just found the existed adsense account is bind to China. but I moved to Canada 3 years ago. I tried to change the country of it, but just found Unfortunately it's not possible to change the country of your payment address in AdSense. If you've moved to a new country or territory, you'll need to cancel your existing AdSense account and create a new AdSense account . So I created a new adsense account today on 2023-01-12. Though new account is still under reviewing, I believe it will be approved soon. To reach out payout threshold in this year, I set up the below plan: write one blog per week day!!! write one blog per week day!!! write one blog per week day!!! Try ingress more traffic to this blog
Comments
Post a Comment