mcpField
A
apple-targets

apple-targets

github.com/evanbacon开发1.4k538 次安装15 周前更新
代码仓库

关于 apple-targets

apple-targets 为编码 Agent 提供 Apple 扩展和应用 target 的参考技能,涵盖运行机制、Swift 实例及排错要点。按类型组织的文档可用于实现规划和问题诊断。

主要功能

  1. 01覆盖多类 Apple 扩展与 target
  2. 02说明运行行为和生命周期
  3. 03提供 Swift 代码示例
  4. 04列出系统版本要求与平台支持
  5. 05整理常见问题和调试建议

适用场景

  1. 01规划 iOS 应用的 Widget 或分享扩展
  2. 02实现 App Intents 或 Safari 扩展
  3. 03排查 Apple 扩展的运行问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/evanbacon/expo-apple-targets --skill apple-targets

安装后在 Claude Code 中输入/apple-targets确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

_template.md
account-auth.md
action.md
app-intent.md
authentication-services.md
bg-download.md
broadcast-setup-ui.md
broadcast-upload.md
call-directory.md
classkit-context.md
clip.md
content-blocker.md
credentials-provider.md
device-activity-monitor.md
file-provider-ui.md
file-provider.md
intent-ui.md
intent.md
keyboard.md
location-push.md
matter.md
message-filter.md
network-app-proxy.md
network-dns-proxy.md
network-filter-data.md
network-packet-tunnel.md
notification-content.md
notification-service.md
entitlements/
app-groups.md
README.md

详细介绍

Apple 扩展目标技能参考

此目录包含所有受支持的 Apple 扩展和目标类型的完整技能文档。每份技能文档都提供 AI Agent 理解、实现和排查特定 Apple 扩展类型所需的一切内容,包括:

  • Apple 文档链接和 WWDC 主题演讲引用
  • 运行时行为和生命周期说明
  • 实际用例和实现模式
  • 可用于生产环境的 Swift 代码示例
  • 平台可用性和版本要求
  • 常见注意事项和调试技巧

安装此技能

使用 npx skills 将此技能安装到你的编码 Agent(Claude Code、Cursor、Codex 等)中:

npx skills add EvanBacon/expo-apple-targets/tree/main/skills/apple-targets

CLI 会自动检测你已安装的 Agent,并将 SKILL.md(以及此目录中的支持参考文档)复制到 Agent 的技能目录中(例如 .claude/skills/ 或 .agents/skills/)。安装后,每当你要求 Agent 构建 Apple 扩展或目标时,它都会自动加载这些指南。

如何使用这些技能

适用于 AI Agent:

  1. 当用户询问特定扩展类型时(例如,“如何构建小组件?”或“我需要添加共享扩展”),请阅读相应的技能文档,以获取完整的实现指南。

  2. 规划可能需要扩展的功能时(例如,“添加主屏幕显示” → 阅读 widget.md),请查阅技能文档,了解相关要求和限制。

  3. 排查扩展问题时,请参考相关技能文档中的“注意事项”部分,其中汇集了 Apple Developer Forums 和实际经验中的常见问题。

  4. 不确定哪种扩展类型适用于某个用例时,请浏览相关技能文档中的“用例”部分,找到最合适的选项。

每份技能文档的结构:

每份技能文档都遵循 _template.md 中定义的模板:

  • Frontmatter:标题、一句话描述、最低 OS 版本
  • Apple 文档:官方参考链接
  • WWDC 历程:展示功能演进的主题演讲链接
  • 功能说明:逐步介绍运行时行为
  • 用例:按行业/应用类型整理的实际场景
  • 关键类:重要框架类型表
  • 实现:带有行内注释的可用于生产环境的 Swift 代码
  • 与 @bacons/apple-targets 配合使用:此插件的设置说明
  • 平台可用性:OS 版本矩阵
  • 注意事项:常见错误、内存限制和无提示故障模式

按类别划分的技能

用户界面扩展
技能扩展类型何时阅读
widget.mdwidget用户需要主屏幕小组件、锁定屏幕小组件、实时活动、待机模式界面或控制中心控件(iOS 18+)。基于时间线的 SwiftUI 视图。
clip.mdclip用户需要通过 NFC、二维码、App Clip 代码、Safari 横幅或“信息”链接触发的即时启动迷你应用。这不是扩展,而是一个受大小限制的应用目标。
share.mdshare用户希望自己的应用出现在系统共享表单中,以接收其他应用分享的 URL、图像、文本或文件。
action.mdaction用户需要在 Safari、“照片”或“文件”中使用上下文菜单操作来转换内容,并可选择返回修改后的数据。
keyboard.mdkeyboard用户需要具有专用输入功能的自定义系统键盘(表情符号选择器、GIF 搜索、特定语言布局、计算器)。
photo-editing.mdphoto-editing用户希望直接在“照片”应用的编辑界面中为照片/视频添加滤镜、调整效果或特效。
quicklook-preview.mdquicklook-preview用户需要在 Quick Look 中为自定义文件类型提供带交互控件和多页内容的丰富预览。
quicklook-thumbnail.mdquicklook-thumbnail用户需要为 Finder、“文件”应用和 Spotlight 中显示的自定义文件类型生成缩略图。
通知
技能扩展类型何时阅读
notification-service.mdnotification-service用户需要在推送通知显示之前下载图像、解密负载或修改通知内容。此扩展在后台运行,时间限制为 30 秒。
notification-content.mdnotification-content用户需要为展开的推送通知提供自定义 SwiftUI/UIKit 界面,并加入交互控件和丰富媒体。
Siri 与意图
技能扩展类型何时阅读
intent.mdintent用户需要用于内置领域(消息、支付、锻炼、媒体播放、预约乘车)的 Siri 语音命令。使用旧版 SiriKit 框架。
intent-ui.mdintent-ui用户在确认或处理意图时,需要在 Siri 界面中显示自定义 UI。这是 intent 扩展的配套组件。
app-intent.mdapp-intent用户需要用于快捷指令、Spotlight、Siri、专注模式过滤器和控制中心小组件的现代 App Intents(iOS 16+)。可替代自定义 .intentdefinition 文件。
网络与 VPN
技能扩展类型何时阅读
network-packet-tunnel.mdnetwork-packet-tunnel用户需要构建 VPN 客户端,通过自定义协议隧道传输设备的全部流量。支持经典和现代个人 VPN。
network-app-proxy.mdnetwork-app-proxy用户需要应用级网络过滤(按应用配置 VPN),让特定应用通过自定义代理路由流量。需要 MDM 或受监管设备。
network-dns-proxy.mdnetwork-dns-proxy用户需要在系统范围内拦截并响应 DNS 查询,以实现 DNS 过滤、日志记录或自定义解析。
network-filter-data.mdnetwork-filter-data用户需要进行深度数据包检测以过滤内容(家长控制、企业安全)。需要 Apple 特殊授权。
文件管理
技能扩展类型何时阅读
file-provider.mdfile-provider用户想在“文件” App 中提供云存储或远程文件系统,并支持按需下载、搜索和同步。
file-provider-ui.mdfile-provider-ui用户想为文稿选取器中的文件操作(共享、权限)提供自定义 UI。与 File Provider 扩展配套。
通信与电话
技能扩展类型何时阅读
message-filter.mdmessage-filter用户想过滤收到的 SMS/MMS 消息,将垃圾信息、交易信息或促销信息分类到不同标签页。
call-directory.mdcall-directory用户想屏蔽电话号码,或为来电提供来电者 ID 标签。更新由系统管理的 SQLite 数据库。
unwanted-communication.mdunwanted-communication用户想提供 UI,让用户向举报服务举报骚扰电话、消息或 FaceTime 呼叫。需要特殊授权。
内容与媒体
技能扩展类型何时阅读
broadcast-upload.mdbroadcast-upload用户想将 ReplayKit 屏幕录制流式传输到直播服务(Twitch、YouTube Live)。实时接收视频/音频缓冲区。
broadcast-setup-ui.mdbroadcast-setup-ui用户想提供自定义 UI 来配置直播(选择流密钥、隐私设置)。与直播上传扩展配套。
safari.mdsafari用户想使用 Safari Web 扩展(Manifest V3),包含内容脚本、后台页面,以及与宿主应用的原生消息传递。
content-blocker.mdcontent-blocker用户想在 Safari 中使用基于规则的 JSON 声明式规则来拦截广告、跟踪器或隐藏内容。不执行 JavaScript。
教育与屏幕使用时间
技能扩展类型何时阅读
classkit-context.mdclasskit-context用户想通过 ClassKit 框架,将教育类 App 中的学生进度报告到 Apple 的 Schoolwork App。
device-activity-monitor.mddevice-activity-monitor用户想监控 App/网站使用情况,并在达到屏幕使用时间限制时触发操作。适用于家长控制和专注类 App。
shield-action.mdshield-action用户想在用户尝试绕过屏幕使用时间限制屏蔽(被屏蔽的 App/网站)时显示自定义 UI。处理或拒绝该请求。
shield-config.mdshield-config用户想在屏幕使用时间规则限制 App 或网站时显示自定义屏蔽 UI(屏蔽画面)。
身份验证与安全
技能扩展类型何时阅读
authentication-services.mdauthentication-services用户想在 Safari 和 App 中使用密码和通行密钥自动填充。这是 credentials-provider 的现代替代方案。支持创建/验证通行密钥(WebAuthn)。
credentials-provider.mdcredentials-provider用户想使用旧版密码自动填充(iOS 12+)。对于新项目,请改用 authentication-services,它同时支持密码和通行密钥。
smart-card.mdsmart-card用户想通过 CryptoTokenKit 框架使用智能卡或硬件令牌(YubiKey、PIV 卡)进行身份验证。适用于企业场景。
account-auth.mdaccount-auth用户想修改 Kerberos 或其他企业单点登录(SSO)协议的身份验证请求。需要特殊授权。
位置与后台服务
技能扩展类型何时阅读
location-push.mdlocation-push用户希望使用静默推送通知唤醒应用,以获取高精度位置更新。适用于车队追踪、配送应用和基于位置的提醒。
bg-download.mdbg-download用户希望按需获取资源,或由系统的后台资源下载器管理大型资源下载。适用于游戏和媒体应用。
智能家居与 Matter
技能扩展类型何时阅读
matter.mdmatter用户希望添加 Matter 智能家居设备支持,以便通过“家庭”应用为设备配网。需要注册 MFi 并通过 Matter 认证。
打印
技能扩展类型何时阅读
print-service.mdprint-service用户希望发现网络打印机并向其打印,而不使用 AirPrint;或为专业打印机提供自定义打印渲染。
搜索与索引
技能扩展类型何时阅读
spotlight.mdspotlight用户希望在 Spotlight 中为应用内容建立索引、提供丰富的搜索结果,并处理从 Spotlight 搜索触发的点按操作。使用 Core Spotlight 和 NSUserActivity。
spotlight-delegate.mdspotlight-delegate用户希望使用后台扩展进行大规模 Spotlight 索引,并按系统管理的计划定期运行。仅限 macOS(不适用于 iOS)。
协作与会议
技能扩展类型何时阅读
virtual-conference.mdvirtual-conference用户希望将视频会议应用与系统通话界面和 CallKit 集成,从而启用接力、画中画和系统通话控制。
Apple Watch
技能扩展类型何时阅读
watch.mdwatch用户希望开发独立的 watchOS 应用,包含复杂功能、锻炼时段、HealthKit 集成,以及用于与 iPhone 同步的 Watch Connectivity。这不是扩展,而是一个完整的应用目标。

目标类型与扩展

应用目标(不是扩展):

  • App Clip(clip)— 使用产品类型 com.apple.product-type.application.on-demand-install-capable
  • watchOS App(watch)— 使用产品类型 com.apple.product-type.application

这些都是完整的应用,拥有自己的 Info.plist、应用图标和生命周期。它们不使用 NSExtensionPointIdentifier。

其他所有类型都是应用扩展,使用产品类型 com.apple.product-type.app-extension,并在其 Info.plist 中声明扩展点标识符。

常见用例速查

用户说……阅读此技能文档
“添加主屏幕小组件”widget.md
“添加共享扩展”share.md
“构建即时 App / App Clip”clip.md
“与 Siri 集成”intent.md 或 app-intent.md
“修改推送通知”notification-service.md
“自定义通知界面”notification-content.md
“构建 VPN 应用”network-packet-tunnel.md
“密码管理器自动填充”authentication-services.md
“拦截骚扰电话”call-directory.md
“过滤短信垃圾信息”message-filter.md
“添加到文件 App”file-provider.md
“自定义键盘”keyboard.md
“照片滤镜扩展”photo-editing.md
“Safari 广告拦截器”content-blocker.md
“Safari 扩展”safari.md
“直播 / 屏幕录制”broadcast-upload.md
“watchOS 应用”watch.md
“屏幕使用时间家长控制”device-activity-monitor.md
“智能家居 / Matter”matter.md
“打印到网络打印机”print-service.md
“Spotlight 搜索集成”spotlight.md

使用 @bacons/apple-targets 创建新扩展

每份技能文档都包含一个“使用 @bacons/apple-targets”部分,其中介绍了三步设置:

# 1. Run the CLI to scaffold the extension
bunx create-target <type>

# 2. Ensure the plugin is in app.json
{
  "expo": {
    "plugins": [["@bacons/apple-targets"]]
  }
}

# 3. Generate the native project
npx expo prebuild --clean

<type> 参数对应各技能文档标题中显示的扩展类型 slug(例如 widget、share、clip、notification-service)。

何时运行 Prebuild

由于目标源文件位于 /ios 目录之外,并且是链接到 Xcode 项目中(而非复制),因此 Swift 代码更改会自动同步。编辑代码时无需重新运行 prebuild。

  • 运行 prebuild --clean 的情况:

    • 创建新目标后的初始设置
    • 修改 expo-target.config.js(图标、颜色、权限、bundle ID、框架)
    • 修改 app.json 插件配置
    • 添加或移除目标
    • Xcode 项目损坏或出现原因不明的构建失败
  • 运行 prebuild(不带 --clean) 的情况:

    • 需要重新生成项目,但希望保留手动进行的 Xcode 修改
    • 更新插件版本并进行少量项目更改
  • 无需运行 prebuild 的情况:

    • 在 targets/<name>/ 目录中编辑 Swift 代码——文件通过链接引入,更改会立即显示在 Xcode 中
    • 在现有目标中添加或修改 Swift 文件
    • 目标实现的大多数日常开发工作

这种架构使你无需不断重新生成整个 Xcode 项目,就能迭代扩展代码,从而加快开发速度并保留手动进行的项目自定义。

权限与功能指南

entitlements/ 目录包含适用于多种扩展类型的 iOS 权限和功能指南:

指南何时阅读
entitlements/app-groups.md用户需要在主应用和扩展(小组件、共享、通知、App Clip)之间共享数据。涵盖命名约定、UserDefaults 套件、共享容器、Keychain 访问组以及自动 EAS 配置。

权限指南解答的常见问题:

  • “如何在应用和小组件之间共享数据?” → 阅读 app-groups.md
  • “我的扩展无法访问主应用中的 UserDefaults” → 阅读 app-groups.md
  • “EAS 如何处理 App Groups 代码签名?” → 阅读 app-groups.md

新建技能的模板

如果需要编写新的技能文档,请以 _template.md 为起点。它定义了必需的 frontmatter、章节结构、代码示例格式和质量检查清单。

其他资源

评论

支持 Markdown