survey-sdk-audit by posthog/posthog
npx skills add https://github.com/posthog/posthog --skill survey-sdk-audit在审计 PostHog SDK 对 surveyVersionRequirements.ts 的调查功能支持时使用此技能。
待审计功能: $ARGUMENTS
开始前,请验证 SDK 路径是否可访问。对每个路径运行 ls:
$POSTHOG_JS_PATH$POSTHOG_IOS_PATH$POSTHOG_ANDROID_PATH$POSTHOG_FLUTTER_PATH如果任何路径为空或不存在,请询问用户:"我需要您机器上 [SDK 仓库] 的路径。它位于何处?"
获取所有路径后,询问用户是否希望通过添加到 .claude/settings.local.json 来保存它们以供将来会话使用:
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
{
"env": {
"POSTHOG_JS_PATH": "/path/to/posthog-js",
"POSTHOG_IOS_PATH": "/path/to/posthog-ios",
"POSTHOG_ANDROID_PATH": "/path/to/posthog-android",
"POSTHOG_FLUTTER_PATH": "/path/to/posthog-flutter"
},
"permissions": {
"allow": [
"Read(/path/to/posthog-js/**)",
"Read(/path/to/posthog-ios/**)",
"Read(/path/to/posthog-android/**)",
"Read(/path/to/posthog-flutter/**)",
"Grep(/path/to/posthog-js/**)",
"Grep(/path/to/posthog-ios/**)",
"Grep(/path/to/posthog-android/**)",
"Grep(/path/to/posthog-flutter/**)"
]
}
}
注意: Read 和 Grep 权限授予 Claude 访问这些外部 SDK 仓库的权限,无需每次都提示。
重要提示:像 $POSTHOG_JS_PATH 这样的环境变量在 Bash 工具命令中无法可靠地展开。
请优先使用以下方法,而不是 bash 命令:
如果必须使用 bash,请先展开变量:
echo $POSTHOG_JS_PATH
然后在后续命令中直接使用回显的路径。
所有调查 SDK 功能对等工作均在以下位置跟踪:https://github.com/PostHog/posthog/issues/45658
为缺失功能创建新问题时:
在相应的 SDK 仓库中创建问题(见下方标签)
将问题作为任务列表项添加到跟踪问题的 "Tracked Issues" 部分:
注意:GitHub 会自动展开问题链接以显示标题,因此不需要描述。
要更新跟踪问题正文:
步骤 1:获取当前正文到临时文件:
gh api repos/PostHog/posthog/issues/45658 --jq '.body' > /tmp/tracking_issue_body.md
步骤 2:使用 Edit 工具修改 /tmp/tracking_issue_body.md。这确保用户可以在继续之前查看您更改的差异。
步骤 3:用户批准编辑后,推送更新:
gh api repos/PostHog/posthog/issues/45658 -X PATCH -f body="$(cat /tmp/tracking_issue_body.md)"
重要提示:始终对临时文件使用 Edit 工具,而不是直接写入。这使用户能够清楚地了解跟踪问题正在进行的更改。
| SDK | 代码路径 | 更新日志 |
|---|---|---|
| posthog-js (浏览器) | $POSTHOG_JS_PATH/packages/browser | $POSTHOG_JS_PATH/packages/browser/CHANGELOG.md |
| posthog-react-native | $POSTHOG_JS_PATH/packages/react-native | $POSTHOG_JS_PATH/packages/react-native/CHANGELOG.md |
| posthog-ios | $POSTHOG_IOS_PATH | $POSTHOG_IOS_PATH/CHANGELOG.md |
| posthog-android | $POSTHOG_ANDROID_PATH | $POSTHOG_ANDROID_PATH/CHANGELOG.md |
| posthog-flutter | $POSTHOG_FLUTTER_PATH | $POSTHOG_FLUTTER_PATH/CHANGELOG.md |
Flutter 包装了原生 SDK。在以下位置检查依赖版本:
$POSTHOG_FLUTTER_PATH/ios/posthog_flutter.podspec(查找 s.dependency 'PostHog')$POSTHOG_FLUTTER_PATH/android/build.gradle(查找 posthog-android 依赖项)查看 surveyVersionRequirements.ts 中的 check 函数,了解触发此功能的字段/条件:
s.conditions?.deviceTypes → 搜索 "deviceTypes"s.appearance?.fontFamily → 搜索 "fontFamily"s.conditions?.urlMatchType → 搜索 "urlMatchType"# 在更新日志中搜索功能关键字
grep -n -i "KEYWORD" /path/to/CHANGELOG.md
如果找到,请阅读周围行以获取版本号。
# 查找添加了关键字的提交(使用 -S 进行精确字符串匹配)
cd /path/to/sdk && git log --oneline --all -S "KEYWORD" -- "*.swift" "*.kt" "*.ts" "*.tsx"
# 然后查找包含该提交的第一个版本标签
git tag --contains COMMIT_HASH | sort -V | head -3
# 查找 Flutter 何时开始要求 iOS 版本 X.Y.Z
cd $POSTHOG_FLUTTER_PATH && git log --oneline -p -- "ios/posthog_flutter.podspec" | grep -B10 "X.Y.Z"
# 获取该提交的 Flutter 版本
git tag --contains COMMIT_HASH | sort -V | head -1
关键:数据模型中存在字段并不意味着功能已实现。您必须检查实际的过滤/匹配逻辑。
SDK 渲染能力:
packages/react-native/src/surveys/ 中的 React Native 组件)PostHog/Surveys/ 中的 SwiftUI 视图 — SurveySheet.swift、QuestionTypes.swift、MultipleChoiceOptions.swift)PostHogDisplaySurvey、PostHogDisplayChoiceQuestion 等)供开发者自行渲染。对于仅渲染功能,使用 issue: false。lib/src/surveys/widgets/ 中的 Flutter 小部件 — survey_bottom_sheet.dart、choice_question.dart)对于具有内置渲染的 SDK,功能必须在渲染代码中实际实现,而不仅仅是作为数据模型上的字段存在。对于 Android(仅委托),在显示模型上暴露字段就足够了 — 使用注释标记为 issue: false。
检查调查过滤逻辑的关键文件:
$POSTHOG_JS_PATH/packages/browser/src/extensions/surveys/surveys-extension-utils.tsx - 实用函数,如 canActivateRepeatedly、getSurveySeen、hasEvents$POSTHOG_JS_PATH/packages/browser/src/extensions/surveys.tsx - 主要调查逻辑$POSTHOG_JS_PATH/packages/react-native/src/surveys/getActiveMatchingSurveys.ts - 主要过滤逻辑$POSTHOG_JS_PATH/packages/react-native/src/surveys/surveys-utils.ts - 实用函数,如 canActivateRepeatedly、hasEvents$POSTHOG_IOS_PATH/PostHog/Surveys/PostHogSurveyIntegration.swift → getActiveMatchingSurveys() 方法,canActivateRepeatedly 计算属性$POSTHOG_ANDROID_PATH/posthog-android/src/main/java/com/posthog/android/surveys/PostHogSurveysIntegration.kt → getActiveMatchingSurveys() 方法,canActivateRepeatedly() 函数跨 SDK 比较的关键实用函数:
canActivateRepeatedly - 确定调查在被查看后是否可以再次显示hasEvents - 检查调查是否具有基于事件的触发器getSurveySeen - 检查用户是否已经看过该调查示例陷阱 1:iOS 和 Android 的 Survey 模型中都有 linkedFlagKey,但都没有实现 linkedFlagVariant 检查。它们只调用 isFeatureEnabled(key)(布尔值)而不是比较 flags[key] === variant。
示例陷阱 2:浏览器 canActivateRepeatedly 检查三个条件:(1) 事件 repeatedActivation,(2) schedule === 'always',(3) 调查进行中。移动 SDK 可能只检查条件 (1),完全缺少 schedule 检查。
检查调查渲染逻辑的关键文件:
$POSTHOG_JS_PATH/packages/browser/src/extensions/surveys/surveys-extension-utils.tsx - getDisplayOrderQuestions()、getDisplayOrderChoices()$POSTHOG_JS_PATH/packages/react-native/src/surveys/surveys-utils.ts - getDisplayOrderQuestions()、getDisplayOrderChoices()$POSTHOG_IOS_PATH/PostHog/Surveys/QuestionTypes.swift - SingleChoiceQuestionView、MultipleChoiceQuestionView;$POSTHOG_IOS_PATH/PostHog/Surveys/SurveySheet.swift - 问题排序$POSTHOG_ANDROID_PATH/posthog/src/main/java/com/posthog/surveys/PostHogDisplaySurveyQuestion.kt 和 PostHogDisplaySurveyAppearance.kt 中的显示模型暴露情况$POSTHOG_FLUTTER_PATH/lib/src/surveys/widgets/survey_bottom_sheet.dart - 问题排序;$POSTHOG_FLUTTER_PATH/lib/src/surveys/widgets/choice_question.dart - 选项渲染需要查找的内容:
getActiveMatchingSurveys()?posthog-js 浏览器是规范实现 — 它拥有所有功能,并且是事物应如何工作的真相来源。
审计功能时:
$POSTHOG_JS_PATH/packages/browser/src/extensions/surveys.ts 以理解完整、正确的行为$POSTHOG_JS_PATH/packages/react-native/src/surveys/getActiveMatchingSurveys.ts)进行比较,后者是移动特定实现的参考某些功能仅在 Web 上有意义:
issue: falseissue: false对于每个功能,生成:
{
feature: 'Feature Name',
sdkVersions: {
'posthog-js': 'X.Y.Z',
'posthog-react-native': 'X.Y.Z', // 如果不支持则省略
'posthog-ios': 'X.Y.Z',
'posthog-android': 'X.Y.Z',
'posthog_flutter': 'X.Y.Z', // 添加注释:首个要求原生 SDK >= X.Y 的版本
},
unsupportedSdks: [
{ sdk: 'sdk-name', issue: 'https://github.com/PostHog/repo/issues/123' }, // 需要实现
{ sdk: 'sdk-name', issue: false }, // 不适用(例如,仅限 Web 的功能)
],
check: (s) => ...,
}
重要提示:创建新问题前务必先搜索现有问题。
# 在特定 SDK 仓库中搜索
gh issue list --repo PostHog/posthog-ios --search "FEATURE_KEYWORD" --state all --limit 20
gh issue list --repo PostHog/posthog-android --search "FEATURE_KEYWORD" --state all --limit 20
gh issue list --repo PostHog/posthog-flutter --search "FEATURE_KEYWORD" --state all --limit 20
# 同时使用更广泛的术语搜索
gh issue list --repo PostHog/posthog-ios --search "survey feature flag" --state all --limit 20
始终在主仓库 PostHog/posthog 和特定 SDK 仓库中搜索问题,以确保问题不存在于任何地方。
| 仓库 | 调查功能标签 |
|---|---|
| PostHog/posthog-js | feature/surveys |
| PostHog/posthog-ios | Survey, enhancement |
| PostHog/posthog-android | Survey, enhancement |
| PostHog/posthog-flutter | Survey, enhancement |
# posthog-js(涵盖浏览器和 react-native)
gh issue create --repo PostHog/posthog-js --label "feature/surveys" --title "..." --body "..."
# posthog-ios
gh issue create --repo PostHog/posthog-ios --label "Survey" --label "enhancement" --title "..." --body "..."
# posthog-android
gh issue create --repo PostHog/posthog-android --label "Survey" --label "enhancement" --title "..." --body "..."
# posthog-flutter
gh issue create --repo PostHog/posthog-flutter --label "Survey" --label "enhancement" --title "..." --body "..."
## 🚨 重要提示
此问题可能在主 PostHog 应用中面向用户,请参见 [`surveyVersionRequirements.ts`](https://github.com/PostHog/posthog/blob/master/frontend/src/scenes/surveys/surveyVersionRequirements.ts)。如果您删除或关闭此问题,请务必在此处更新版本要求列表。
## 摘要
[SDK] SDK 不支持调查的 [功能]。
## 当前状态
- [如果存在任何内容 - 类型、部分实现等]
## 预期行为
[配置此功能时应发生的情况]
## 参考实现
参见 posthog-js 浏览器:`packages/browser/src/extensions/surveys.ts`
对于移动特定模式,参见 posthog-react-native:`packages/react-native/src/surveys/getActiveMatchingSurveys.ts`
## 跟踪
此问题在调查 SDK 功能对等问题中跟踪:https://github.com/PostHog/posthog/issues/45658
_此问题由 Claude 使用 `/survey-sdk-audit` 技能生成。_
在完成审计之前,请验证所有步骤是否完成:
surveyVersionRequirements.ts 中的检查函数pnpm --filter=@posthog/frontend build:survey-sdk-docs 以更新 docs/published/docs/surveys/sdk-feature-support.mdxlinkedFlagKey 存在但缺少 linkedFlagVariant 检查)canActivateRepeatedly 这样的函数在不同 SDK 中可能有不同的逻辑;浏览器是真相来源issue: false),但对于具有内置渲染的 SDK,渲染代码必须实际使用该字段PostHogDisplayChoiceQuestion 上暴露 shuffleOptions,但 SwiftUI QuestionTypes.swift 在渲染选项时完全忽略它完成审计后,考虑是否应将任何学习内容添加到此技能文件中:
如果发现改进,请向用户提出:
在此次审计过程中,我发现了一些可以改进技能的学习内容:
- [描述改进内容]
您希望我更新技能文件吗?
每周安装次数
76
仓库
GitHub 星标数
32.3K
首次出现
2026年2月16日
安全审计
安装于
opencode75
claude-code75
github-copilot75
codex75
amp75
kimi-cli75
Use this skill when auditing survey feature support across PostHog SDKs for surveyVersionRequirements.ts.
Feature to audit: $ARGUMENTS
Before starting, verify the SDK paths are accessible. Run ls on each path:
$POSTHOG_JS_PATH$POSTHOG_IOS_PATH$POSTHOG_ANDROID_PATH$POSTHOG_FLUTTER_PATHIf any path is empty or doesn't exist, ask the user: "I need the path to [SDK repo] on your machine. Where is it located?"
Once you have all paths, ask the user if they'd like to save them for future sessions by adding to .claude/settings.local.json:
{
"env": {
"POSTHOG_JS_PATH": "/path/to/posthog-js",
"POSTHOG_IOS_PATH": "/path/to/posthog-ios",
"POSTHOG_ANDROID_PATH": "/path/to/posthog-android",
"POSTHOG_FLUTTER_PATH": "/path/to/posthog-flutter"
},
"permissions": {
"allow": [
"Read(/path/to/posthog-js/**)",
"Read(/path/to/posthog-ios/**)",
"Read(/path/to/posthog-android/**)",
"Read(/path/to/posthog-flutter/**)",
"Grep(/path/to/posthog-js/**)",
"Grep(/path/to/posthog-ios/**)",
"Grep(/path/to/posthog-android/**)",
"Grep(/path/to/posthog-flutter/**)"
]
}
}
Note: The Read and Grep permissions grant Claude access to these external SDK repositories without prompting each time.
IMPORTANT : Environment variables like $POSTHOG_JS_PATH do NOT expand reliably in Bash tool commands.
Instead of bash commands, prefer:
If you must use bash, first expand the variable:
echo $POSTHOG_JS_PATH
Then use the echoed path directly in subsequent commands.
All survey SDK feature parity work is tracked in: https://github.com/PostHog/posthog/issues/45658
When creating new issues for missing features:
Create the issue in the appropriate SDK repo (see labels below)
Add the issue to the tracking issue's "Tracked Issues" section as a task list item:
Note: GitHub automatically expands issue links to show titles, so no description is needed.
To update the tracking issue body:
Step 1 : Fetch the current body to a temp file:
gh api repos/PostHog/posthog/issues/45658 --jq '.body' > /tmp/tracking_issue_body.md
Step 2 : Use the Edit tool to modify /tmp/tracking_issue_body.md. This ensures the user can review the diff of your changes before proceeding.
Step 3 : After the user has approved the edits, push the update:
gh api repos/PostHog/posthog/issues/45658 -X PATCH -f body="$(cat /tmp/tracking_issue_body.md)"
Important : Always use the Edit tool on the temp file rather than writing directly. This gives the user visibility into exactly what changes are being made to the tracking issue.
| SDK | Code Path | Changelog |
|---|---|---|
| posthog-js (browser) | $POSTHOG_JS_PATH/packages/browser | $POSTHOG_JS_PATH/packages/browser/CHANGELOG.md |
| posthog-react-native | $POSTHOG_JS_PATH/packages/react-native | $POSTHOG_JS_PATH/packages/react-native/CHANGELOG.md |
| posthog-ios | $POSTHOG_IOS_PATH | $POSTHOG_IOS_PATH/CHANGELOG.md |
Flutter wraps native SDKs. Check dependency versions in:
$POSTHOG_FLUTTER_PATH/ios/posthog_flutter.podspec (look for s.dependency 'PostHog')$POSTHOG_FLUTTER_PATH/android/build.gradle (look for posthog-android dependency)Look at the check function in surveyVersionRequirements.ts to understand what field/condition triggers this feature:
s.conditions?.deviceTypes → search for "deviceTypes"s.appearance?.fontFamily → search for "fontFamily"s.conditions?.urlMatchType → search for "urlMatchType"# Search changelog for the feature keyword
grep -n -i "KEYWORD" /path/to/CHANGELOG.md
If found, read the surrounding lines to get the version number.
# Find commits that added the keyword (use -S for exact string match)
cd /path/to/sdk && git log --oneline --all -S "KEYWORD" -- "*.swift" "*.kt" "*.ts" "*.tsx"
# Then find the first version tag containing that commit
git tag --contains COMMIT_HASH | sort -V | head -3
# Find when Flutter started requiring iOS version X.Y.Z
cd $POSTHOG_FLUTTER_PATH && git log --oneline -p -- "ios/posthog_flutter.podspec" | grep -B10 "X.Y.Z"
# Get the Flutter version for that commit
git tag --contains COMMIT_HASH | sort -V | head -1
CRITICAL : Having a field in a data model does NOT mean the feature is implemented. You must check the actual filtering/matching logic.
SDK rendering capabilities:
packages/react-native/src/surveys/)PostHog/Surveys/ — SurveySheet.swift, QuestionTypes.swift, MultipleChoiceOptions.swift)PostHogDisplaySurvey, PostHogDisplayChoiceQuestion, etc.) for developers to render themselves. Use issue: false for rendering-only features.For SDKs with built-in rendering, a feature must be actually implemented in the rendering code , not just present as a field on the data model. For Android (delegate-only), exposing the field on the display model is sufficient — mark as issue: false with a comment.
Key files to check for survey filtering logic:
$POSTHOG_JS_PATH/packages/browser/src/extensions/surveys/surveys-extension-utils.tsx - utility functions like canActivateRepeatedly, getSurveySeen, hasEvents$POSTHOG_JS_PATH/packages/browser/src/extensions/surveys.tsx - main survey logic$POSTHOG_JS_PATH/packages/react-native/src/surveys/getActiveMatchingSurveys.ts - main filtering logic$POSTHOG_JS_PATH/packages/react-native/src/surveys/surveys-utils.ts - utility functions like canActivateRepeatedly, Key utility functions to compare across SDKs:
canActivateRepeatedly - determines if a survey can be shown again after being seenhasEvents - checks if survey has event-based triggersgetSurveySeen - checks if user has already seen the surveyExample pitfall 1 : Both iOS and Android have linkedFlagKey in their Survey model, but neither implements linkedFlagVariant checking. They only call isFeatureEnabled(key) (boolean) instead of comparing flags[key] === variant.
Example pitfall 2 : The browser canActivateRepeatedly checks THREE conditions: (1) event repeatedActivation, (2) schedule === 'always', (3) survey in progress. Mobile SDKs may only check condition (1), missing the schedule check entirely.
Key files to check for survey rendering logic:
$POSTHOG_JS_PATH/packages/browser/src/extensions/surveys/surveys-extension-utils.tsx - getDisplayOrderQuestions(), getDisplayOrderChoices()$POSTHOG_JS_PATH/packages/react-native/src/surveys/surveys-utils.ts - getDisplayOrderQuestions(), getDisplayOrderChoices()$POSTHOG_IOS_PATH/PostHog/Surveys/QuestionTypes.swift - SingleChoiceQuestionView, MultipleChoiceQuestionView; - question orderingWhat to look for:
getActiveMatchingSurveys()?posthog-js browser is the canonical implementation - it has every feature and is the source of truth for how things are supposed to work.
When auditing a feature:
$POSTHOG_JS_PATH/packages/browser/src/extensions/surveys.ts to understand the complete, correct behavior$POSTHOG_JS_PATH/packages/react-native/src/surveys/getActiveMatchingSurveys.ts) which is the reference for mobile-specific implementationsSome features only make sense on web:
issue: false for all mobileissue: false for all mobileFor each feature, produce:
{
feature: 'Feature Name',
sdkVersions: {
'posthog-js': 'X.Y.Z',
'posthog-react-native': 'X.Y.Z', // or omit if unsupported
'posthog-ios': 'X.Y.Z',
'posthog-android': 'X.Y.Z',
'posthog_flutter': 'X.Y.Z', // add comment: first version to require native SDK >= X.Y
},
unsupportedSdks: [
{ sdk: 'sdk-name', issue: 'https://github.com/PostHog/repo/issues/123' }, // needs implementation
{ sdk: 'sdk-name', issue: false }, // not applicable (e.g., web-only feature)
],
check: (s) => ...,
}
IMPORTANT: Always search for existing issues BEFORE creating new ones.
# Search in the SDK-specific repo
gh issue list --repo PostHog/posthog-ios --search "FEATURE_KEYWORD" --state all --limit 20
gh issue list --repo PostHog/posthog-android --search "FEATURE_KEYWORD" --state all --limit 20
gh issue list --repo PostHog/posthog-flutter --search "FEATURE_KEYWORD" --state all --limit 20
# Also search with broader terms
gh issue list --repo PostHog/posthog-ios --search "survey feature flag" --state all --limit 20
Always search issues in the main repo PostHog/posthog AND the SDK-specific repo(s) to ensure an issue does not already exist anywhere.
| Repository | Labels for Survey Features |
|---|---|
| PostHog/posthog-js | feature/surveys |
| PostHog/posthog-ios | Survey, enhancement |
| PostHog/posthog-android | Survey, enhancement |
| PostHog/posthog-flutter | Survey, enhancement |
# posthog-js (covers browser and react-native)
gh issue create --repo PostHog/posthog-js --label "feature/surveys" --title "..." --body "..."
# posthog-ios
gh issue create --repo PostHog/posthog-ios --label "Survey" --label "enhancement" --title "..." --body "..."
# posthog-android
gh issue create --repo PostHog/posthog-android --label "Survey" --label "enhancement" --title "..." --body "..."
# posthog-flutter
gh issue create --repo PostHog/posthog-flutter --label "Survey" --label "enhancement" --title "..." --body "..."
## 🚨 IMPORTANT
This issue is likely user-facing in the main PostHog app, see [`surveyVersionRequirements.ts`](https://github.com/PostHog/posthog/blob/master/frontend/src/scenes/surveys/surveyVersionRequirements.ts). If you delete or close this issue, be sure to update the version requirements list here.
## Summary
The [SDK] SDK does not support [feature] for surveys.
## Current State
- [What exists, if anything - types, partial implementation, etc.]
## Expected Behavior
[What should happen when this feature is configured]
## Reference Implementation
See posthog-js browser: `packages/browser/src/extensions/surveys.ts`
For mobile-specific patterns, see posthog-react-native: `packages/react-native/src/surveys/getActiveMatchingSurveys.ts`
## Tracking
This is tracked in the survey SDK feature parity issue: https://github.com/PostHog/posthog/issues/45658
_This issue was generated by Claude using the `/survey-sdk-audit` skill._
Before finishing the audit, verify all steps are complete:
surveyVersionRequirements.tspnpm --filter=@posthog/frontend build:survey-sdk-docs to update docs/published/docs/surveys/sdk-feature-support.mdxlinkedFlagKey exists but linkedFlagVariant check is missing)canActivateRepeatedly may have different logic across SDKs; browser is the source of truthissue: false) but for SDKs with built-in rendering, the rendering code must actually use the fieldshuffleOptions on but the SwiftUI completely ignores it when rendering choicesAfter completing an audit, consider whether any learnings should be added to this skill file:
If you find improvements, propose them to the user:
I found some learnings during this audit that could improve the skill:
- [describe the improvement]
Would you like me to update the skill file?
Weekly Installs
76
Repository
GitHub Stars
32.3K
First Seen
Feb 16, 2026
Security Audits
Gen Agent Trust HubPassSocketWarnSnykWarn
Installed on
opencode75
claude-code75
github-copilot75
codex75
amp75
kimi-cli75
前端代码审计工具 - 自动化检测可访问性、性能、响应式设计、主题化与反模式
46,200 周安装
Effect-TS 专家指南:TypeScript 函数式编程库,掌握结构化并发与错误处理
269 周安装
阿里云Model Studio文本嵌入技能:text-embedding-v4/v3/v2/v1与qwen3模型快速上手
72 周安装
阿里云AIContent管理技能:OpenAPI调用、SDK使用与AI内容资源管理指南
268 周安装
iOS开发专家指南:SwiftUI最佳实践、代码审查与HIG合规性检查
271 周安装
日本所得税计算技能:自动计算业务所得、扣除与税额,对接e-tax申报
271 周安装
阿里云DashVector向量搜索教程:Python SDK快速入门与AI搜索实践
270 周安装
| posthog-android | $POSTHOG_ANDROID_PATH | $POSTHOG_ANDROID_PATH/CHANGELOG.md |
| posthog-flutter | $POSTHOG_FLUTTER_PATH | $POSTHOG_FLUTTER_PATH/CHANGELOG.md |
lib/src/surveys/widgets/ — survey_bottom_sheet.dart, choice_question.dart)hasEvents$POSTHOG_IOS_PATH/PostHog/Surveys/PostHogSurveyIntegration.swift → getActiveMatchingSurveys() method, canActivateRepeatedly computed property$POSTHOG_ANDROID_PATH/posthog-android/src/main/java/com/posthog/android/surveys/PostHogSurveysIntegration.kt → getActiveMatchingSurveys() method, canActivateRepeatedly() function$POSTHOG_IOS_PATH/PostHog/Surveys/SurveySheet.swift$POSTHOG_ANDROID_PATH/posthog/src/main/java/com/posthog/surveys/PostHogDisplaySurveyQuestion.kt and PostHogDisplaySurveyAppearance.kt$POSTHOG_FLUTTER_PATH/lib/src/surveys/widgets/survey_bottom_sheet.dart - question ordering; $POSTHOG_FLUTTER_PATH/lib/src/surveys/widgets/choice_question.dart - choice renderingPostHogDisplayChoiceQuestionQuestionTypes.swift