游牧周记第36期
游戏
Diablo IV的卡死问题
2025之后,就卡顿极其严重,问了无数AI,查了无数资料均无效果。 后来还是Gemini 2.5Pro给出了稍微有用的答案。 去掉一个配置文件就好了。 LocalPrefs.txt,说是在Diablo IV的文档目录下,我建议搜一下。 其实就是彻底把游戏配置归零,然后进入游戏提醒重新配置,你也可以直接跳过。 然后真的就顺了很多,虽然和几年前刚刚安装时比有时候还有点卡。 原理就是作为多年老用户,遗留了很多老的配置在配置文件中,互相可能有冲突了。
Gemini越来越神了,会否成为真正的AI一哥?
expo开发
iOS app如何去掉Apple Pay功能设置
我注意到remove的是
com.apple.developer.in-app-payments 貌似内购,而不是apple pay啊 merchant.com.your.merchant.id
🧠 结论先讲:
com.apple.developer.in-app-payments是 Apple Pay(实体支付),不是内购(IAP)!
✅ 区分这两个容易混淆的权限
| 能力名称 | 键名(Key) | 功能用途 | 说明 |
|---|---|---|---|
| 🛒 In-App Purchase (IAP) | com.apple.InAppPurchase(隐含于系统) | 订阅、金币、虚拟物品 | App Store 管理,Xcode 和 profile 默认支持 |
| 💳 Apple Pay(实体支付) | com.apple.developer.in-app-payments | 实体商品支付、Apple Wallet 支付 | 需要配置商户 ID,如:merchant.com.xxx |
🔍 你看到的这个字段:
<key>com.apple.developer.in-app-payments</key>
<array>
<string>merchant.com.your.merchant.id</string>
</array>
正是 Apple Pay 的专属字段,它告诉 Xcode:
这个 App 打算使用 Apple Pay,接入商户
merchant.com.your.merchant.id。
❗️它不是 IAP(内购)
-
IAP 并不需要你手动加任何 entitlement;
-
只要你的 App ID 开启了 In-App Purchase 能力,并在 App Store Connect 配置商品,就可以正常使用;
-
Apple Pay 才需要这个 entitlement,并配合后台商户配置使用。
✅ 你应该怎么做?
-
✅ 如果你只使用 IAP(订阅、金币),删除这个字段是完全正确的;
-
✅ 同时在 Apple Developer Portal → App ID → Capabilities 中关闭 Apple Pay;
-
✅ 用
eas credentials删除旧 profile,重新生成干净的 App Store profile; -
✅ 在
eas build时加入--clear-cache,清除旧的 entitlements 残留。
✅ 为什么这个字段出现在 prebuild 后?
Expo 的模板可能默认为支持 Apple Pay 的插件(如 expo-payments-stripe)预留了这个能力。如果你:
-
用了
expo-dev-client -
或者启用了其他支付相关插件(即使没用 Apple Pay)
就有可能在 prebuild 时被注入。
suhe注:不认同这点,以前没出现过,原因还是不详。
✅ 最后确认(只使用 IAP 的最小需求)
| 项目 | 是否需要 Apple Pay |
|---|---|
expo-in-app-purchases | ❌ 不需要 |
react-native-iap | ❌ 不需要 |
| App Store Connect 商品配置 | ❌ 不需要 Apple Pay,仅需要开启 IAP 能力 |
merchant.com.xxx | ✅ 仅 Apple Pay 需要,IAP 完全不需要 |
GitHub结合Eas打包的工作流程
一个人开发项目,而且希望主分支 main 继续承担日常开发任务,同时只在需要 EAS 构建时创建 PR + 贴 label 触发远程打包。这种需求非常清晰,也非常实用,我们可以为你设计一套轻量、流畅、零冗余的 Git 使用流程,专为“单人开发 + Expo GitHub App 构建”场景优化。
✅ 你的目标简化版
| 需求 | 实现方式 |
|---|---|
日常开发就在 main 分支上 | 继续直接用 main 写代码,无需每次都建分支 |
| 需要远程构建时触发 PR + Expo 构建 | 快速从 main 创建一个构建分支,发 PR,贴 Label,完成后自动删除 |
🧭 推荐工作流设计(为你量 身定制)
✅ Step 1:日常开发保持在 main
你继续在 main 分支做日常开发、调试、测试,无需变动流程。
git checkout main
# 编辑代码...
git commit -am "修复组件显示 bug"
git push origin main
✅ Step 2:需要构建时,创建一个构建专用分支
你只在需要构建的时候,从当前的 main 快速拉个构建用分支(不做额外开发):
git checkout -b build/eas-android-20250803
git push origin build/eas-android-20250803
📌 命名建议:
build/eas-平台-日期,比如build/eas-android-20250803
✅ Step 3:GitHub 上发起 PR(无需修改任何代码)
-
打开 GitHub,会自动提示你:
Compare & pull request -
点击进入 PR 页面。
-
在右侧添加 Label,例如:
eas-build-android:prod_android -
不需要写代码 diff,不需要添加 Reviewer,你自己点就好。
✅ Step 4:Expo GitHub App 识别 Label 并构建
-
构建过程会在 PR → Checks 里展示;
-
Expo Dashboard 会显示构建进度和下载链接;
-
你可以继续用电脑干别的事,等它构建完成。
✅ Step 5:构建完成后,合并 PR 并清理分支
如果你希望主分支也保留这次构建记录:
# 在 GitHub PR 页面点击 “Merge Pull Request”
然后回到本地:
git checkout main
git pull origin main
git branch -d build/eas-android-20250803
git push origin --delete build/eas-android-20250803
也可以 不合并,直接关闭 PR 然后删除分支也没关系 —— 因为你本来就在 main 写代码,构建用 PR 只是工具人 😎。
✅ 自动化版本(可选 Shell 脚本)
如果你想一条命令就完成构建流程(不用记这么多命令),你可以用如下脚本:
#!/bin/bash
DATE=$(date +%Y%m%d)
BRANCH=build/eas-android-$DATE
# 确保当前在 main
git checkout main
git pull
# 创建构建分支并推送
git checkout -b $BRANCH
git push origin $BRANCH
echo ""
echo "✅ 分支 $BRANCH 已创建并推送"
echo "👉 请访问 GitHub 页面创建 PR 并添加 label: eas-build-android:prod_android"
保存为 eas-build.sh,加权限:
chmod +x eas-build.sh
然后以后只需运行:
./eas-build.sh
就自动完成创建分支 + 推送,剩下你只需在 GitHub 上贴个 label。
✅ 为什么这个流程适合你(一人开发者)?
| 特性 | 优点 |
|---|---|
| main 分支持续开发 | 不被强迫换分支、不打断手感 |
| 构建过程隔离 | 不会把构建 commit 和构建控制信息混进 main |
| 构建结束即可删 | PR 不需要合并,临时存在就好 |
| label 构建精准控制 | 不用担心误触发、不用写复杂 CI 文件 |
| GitHub 自动记录构建日志 | PR 页面和 Expo Dashboard 保留构建历史,可审计 |
🧩 可选优化项(建议长期使用时加上)
-
.github/PULL_REQUEST_TEMPLATE.md:自动提示自己加 label; -
.gitignore:确保构建相关的缓存文件不被提交; -
eas.json里 profile 明确配置好平台和镜像,便于稳定复用。
✅ 总结
你可以用这个结构保持开发流畅、构建可控:
| 开发场景 | 操作 |
|---|---|
| 正常写代码 | 就在 main |
| 想打包构建 | main 拉个 build/eas-xxx 分支 → 发 PR → 贴 label |
| 构建完成 | Merge 或 Close PR,然后删掉构建分支 |
| 重复这个流程 | 所有构建 PR 都是干净、独立、不会干扰你 main 的 |
Eas云端打包pnpm项目的问题
报错情况:
eas打包expo app项目报错:Running "pnpm install --frozen-lockfile" in /Users/expo/workingdir/build/ directory ERROR packages field missing or empty For help, run: pnpm help install pnpm install --frozen-lockfile exited with non-zero code: 1
之前没有发现过,但近期出现,可能两个原因:
- pnpm/eas/expo版本更新;
- eas云端服务是gitHub Action触发的; 之前的一个项目遇到过,差点忘了,解决方法就是在pnpm-workspace.yaml中加入:
# 告诉 pnpm 在哪些文件夹里寻找项目
packages:
# 如果您的 Expo 项目就在根目录,并且没有其他包,可以这样写:
- '.'
App 切换到后台的Expo优雅处理方式
首 先做一个通用勾子。
// useAppStatePaulseTask.tsx
import { useEffect, useRef } from 'react';
import { AppState, AppStateStatus } from 'react-native';
export function useAppStatePauseTask(onPause: () => void) {
const appState = useRef(AppState.currentState);
useEffect(() => {
const subscription = AppState.addEventListener('change', (nextAppState: AppStateStatus) => {
if (appState.current.match(/active/) && nextAppState.match(/inactive|background/)) {
onPause(); // App 进入后台时触发
}
appState.current = nextAppState;
});
return () => subscription.remove();
}, [onPause]);
}
在页面调用的例子:
// 在 App 切换到后台(如按了 Home 键、切换到其他 App)时停止某些正在进行的任务
useAppStatePauseTask(() => {
handleAiStop(); // 中止 AI
ExpoSpeechRecognitionModule.stop(); // 停止语音识别
});
新作品
没错,我要开发新的app了,灵感来自于到中国的一个澳洲朋友。
和AI有关,和语言有关,先透露到这里。
总之先去AppStore注册,还有RevenueCat把付款机制做了,图标啥的AI赶紧整一个。
对了还有ICP备案啥的。
一切从简从速。

