plugins/languages/flutter/skills/ios/SKILL.md
Flutter iOS 平台规范 — Cupertino 设计、Impeller (iOS 默认)、ATT/隐私清单、Info.plist 权限描述、ProMotion 120Hz、App Store 审核合规。当用户开发 iOS/iPadOS 端、提到 "iOS"、"Cupertino"、"App Store"、"ATT"、"权限"、"Info.plist"、"TestFlight" 时加载。
npx skillsauth add lazygophers/ccplugin flutter-iosInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
CupertinoApp(
theme: const CupertinoThemeData(
primaryColor: CupertinoColors.activeBlue,
brightness: Brightness.light,
),
);
CupertinoPageScaffold(
navigationBar: const CupertinoNavigationBar(middle: Text('Settings')),
child: CupertinoListSection.insetGrouped(
header: const Text('Account'),
children: [
CupertinoListTile(
title: const Text('Profile'),
leading: const Icon(CupertinoIcons.person),
trailing: const CupertinoListTileChevron(),
onTap: () => context.push('/profile'),
),
],
),
);
// 销毁性 alert
showCupertinoDialog(
context: context,
builder: (_) => CupertinoAlertDialog(
title: const Text('Delete'),
actions: [
CupertinoDialogAction(
isDestructiveAction: true,
onPressed: () => Navigator.pop(context, true),
child: const Text('Delete'),
),
CupertinoDialogAction(
isDefaultAction: true,
onPressed: () => Navigator.pop(context, false),
child: const Text('Cancel'),
),
],
),
);
Impeller 自 Flutter 3.10 起 iOS 默认启用,消除 shader compilation jank。
优化要点:
BackdropFilter 控制使用范围 (开销大)Opacity → color.withValues(alpha: …)CustomPaint 复杂度可控// 高质量毛玻璃
ClipRRect(
borderRadius: BorderRadius.circular(16),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10),
child: Container(
color: CupertinoColors.systemBackground.withValues(alpha: 0.8),
child: content,
),
),
);
// 1. 图片预缓存
@override
void didChangeDependencies() {
super.didChangeDependencies();
precacheImage(const AssetImage('assets/hero.png'), context);
}
// 2. CachedNetworkImage + 降采样
CachedNetworkImage(
imageUrl: url,
memCacheWidth: 200,
memCacheHeight: 200,
placeholder: (_, __) => const CupertinoActivityIndicator(),
);
声明所有 SDK 收集的数据类型 + 使用必需 API 的 Reason。Flutter 默认模板已含,自定义插件需补充。
import 'package:app_tracking_transparency/app_tracking_transparency.dart';
Future<void> ensureTrackingPermission() async {
final status = await AppTrackingTransparency.trackingAuthorizationStatus;
if (status == TrackingStatus.notDetermined) {
await AppTrackingTransparency.requestTrackingAuthorization();
}
}
| Key | 场景 |
| --- | --- |
| NSCameraUsageDescription | 相机 |
| NSPhotoLibraryUsageDescription | 相册 |
| NSLocationWhenInUseUsageDescription | 定位 |
| NSMicrophoneUsageDescription | 麦克风 |
| NSUserTrackingUsageDescription | ATT |
缺失任一会导致 App Store 拒审或运行崩溃。
ios/Runner/Runner.entitlements 配置 associated-domains + 服务器部署 apple-app-site-association。
testWidgets('Cupertino navigation', (tester) async {
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
await tester.pumpWidget(const ProviderScope(child: CupertinoApp(home: SettingsPage())));
await tester.tap(find.text('Profile'));
await tester.pumpAndSettle();
expect(find.byType(ProfilePage), findsOneWidget);
debugDefaultTargetPlatformOverride = null;
});
flutter build ios --release --split-debug-info=build/debug-info --obfuscate
flutter build ipa --release --export-method=app-store
| AI 借口 | 实际检查 | 严重度 | | --- | --- | --- | | "Material 在 iOS 也行" | iOS 是否 Cupertino? | 高 | | "不需要 ATT" | 涉广告追踪是否实现 ATT? | 高 | | "权限直接请求" | Info.plist 描述是否完整? | 高 | | "BackdropFilter 随便用" | 使用范围是否受控? | 中 | | "120fps 自动" | ProMotion 上是否实测无掉帧? | 中 | | "隐私清单不重要" | iOS 17+ 必需 PrivacyInfo.xcprivacy | 高 |
CupertinoAppPrivacyInfo.xcprivacy 完整NS*UsageDescription 完整TargetPlatform.iOS 覆盖Skills(flutter:core) / Skills(flutter:ui) / Skills(flutter:state)tools
UI/UX 与布局设计——做界面布局/结构/导航/组件/交互的设计决策。触发:做UI/UX/布局/排版/导航/组件/交互/栅格/响应式/图表选型/字体配对。按媒介路由 HTML/Web、原生 App(iOS/Android/桌面)、CLI、TUI。需后端动态系统不适用;配色/主题/色板走姊妹 skill design-color。
tools
主题与配色设计——做颜色搭配/调色板/主题/品牌色阶/暗模式的设计决策。触发:选配色/调色/主题/色板/品牌色/暗模式/对比度/色盲/UI风格。按媒介路由 HTML/Web(CSS变量)、原生App(平台token)、CLI(ANSI)、TUI(真彩/256/16降级)。保证可访问性(对比度/色盲安全)。需后端动态系统不适用;UI/UX 布局/组件/交互走姊妹 skill design-uiux。
tools
跨任意组件(plugin/skill/agent/command)的验证驱动优化循环纪律 skill。当用户要优化某个已有组件却无明确方向、或要防止改了反而更差(自评乐观偏差 / 多维同改归因失效 / 为凑分加废话膨胀)、或要把一套通用「评分→单变量改→改后验证严格更好才留否则回滚→触顶停」的纪律套到任意组件上时使用。管优化过程本身的纪律(validation gate / ratchet / 独立验证 / 触顶停),不评单组件深度(交 skill-dev),不查插件接线(交 plugin-dev)。仅手动 /optimize-any 触发。
data-ai
两层规则记忆 (基于 .skein/spec)。planning 时 recall 召回相关规则、task finish 后 sediment 沉淀学习 + prune 自动精简过期/重复/断链规则。core 常驻硬规 + recall 按需召回, 经判定门自动写盘 (不逐次问用户)。产出 .skein/spec 下 core/recall 规则文件 + index。另支持空仓 bootstrap 播种规则基线、记忆大面积失效 (大重构/换栈) 时 reconstruct 可逆归档后按项目类型分型重建、maintain 手动体检 (超预算/stale/断链/重复/废弃, --apply 自动修复)、auto-fix (Stop hook 写 .pending-fix 标记 → main 派 skein-specer bg 跑 maintain --apply 全自动修, 断链只报告)。