fix(client): 去 dev 旁路 + 修 macOS keychain -34018 [tsk__bm21nctbhWF]

1. 去 dev 旁路:删除 auth_screen.dart 中 test@pangolin.dev 预填 + devLogin
   跳过后端分支,以及 auth_provider.dart 的 devLogin() 方法。

2. 修 keychain -34018(errSecMissingEntitlement):
   在 DebugProfile.entitlements / Release.entitlements 中添加
   keychain-access-groups($(AppIdentifierPrefix)com.pangolin.pangolinVpn),
   使 flutter_secure_storage 的 Data Protection Keychain API 获得正确 entitlement。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-06-16 13:21:38 +08:00
parent fe16f89bc3
commit f3cc2dfc2d
4 changed files with 10 additions and 26 deletions
-7
View File
@@ -53,13 +53,6 @@ class AuthNotifier extends StateNotifier<AuthState> {
await _store.clear();
state = const AuthState();
}
/// Dev-only:仅设置内存登录态,不写 keychain。
/// 用于 debug 测试账户旁路,规避 flutter_secure_storage 在未签名
/// macOS app 上的 keychain entitlement 问题(-34018)。
void devLogin(String token) {
state = AuthState(accessToken: token);
}
}
// ── Providers ────────────────────────────────────────────────────────
-19
View File
@@ -1,5 +1,4 @@
// auth_screen.dart — 登录 / 注册页(邮箱 + 验证码流程)
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
@@ -41,20 +40,9 @@ class _AuthScreenState extends ConsumerState<AuthScreen> {
late final AuthApi _api = AuthApi(baseUrl: _kApiUrl);
// ── Dev-only 测试账户旁路(仅 debug build)─────────────────────
// 后端 /v1/auth 未就绪时,用此账户直接进入主界面浏览 UI。
// 登录后节点列表回退 kDemoNodes,连接键走 mock 动画。
static const _devEmail = 'test@pangolin.dev';
static const _devPassword = 'test1234';
@override
void initState() {
super.initState();
// debug 下预填测试账户,方便直接点登录。
if (kDebugMode) {
_email.text = _devEmail;
_pw.text = _devPassword;
}
}
bool get _emailValid => RegExp(r'\S+@\S+\.\S+').hasMatch(_email.text);
@@ -97,13 +85,6 @@ class _AuthScreenState extends ConsumerState<AuthScreen> {
Future<void> _doLogin() async {
setState(() { _loading = true; _errorZh = null; });
// Dev 旁路:debug build 下用测试账户跳过后端直接登录。
// 用 devLogin 只设内存态,不写 keychain(规避 -34018 entitlement 问题)。
if (kDebugMode && _email.text.trim() == _devEmail && _pw.text == _devPassword) {
ref.read(authProvider.notifier).devLogin('dev-access-token');
if (mounted) widget.onDone();
return;
}
try {
final tokens = await _api.login(
email: _email.text.trim(),
@@ -10,5 +10,10 @@
<true/>
<key>com.apple.security.network.server</key>
<true/>
<!-- flutter_secure_storage: Data Protection Keychain 需要此 entitlement,否则返回 -34018 -->
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.pangolin.pangolinVpn</string>
</array>
</dict>
</plist>
+5
View File
@@ -6,5 +6,10 @@
<false/>
<key>com.apple.security.network.client</key>
<true/>
<!-- flutter_secure_storage: Data Protection Keychain 需要此 entitlement,否则返回 -34018 -->
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.pangolin.pangolinVpn</string>
</array>
</dict>
</plist>