LESSON 03 / 576 分钟

Project、Target、Scheme 与签名

理解 Xcode 的项目配置,能让你在 AI 修改工程后知道哪里可能出了问题。

用你的前端经验理解

Project 像工作区,Target 像独立构建产物,Scheme 像一组运行/测试配置;Bundle ID 则是应用身份,不是网址。

为什么需要它

同一个工程可以产出主应用、Widget 和测试包。它们共享部分源码,但拥有不同入口、权限和运行环境。把 Target 看成构建产物,比把它看成一个文件夹准确:你把文件拖进目录,不代表所有产物都能访问它。加入扩展后出现找不到类型或资源,常常就出在这层。

它是怎样工作的

构建时,工具按 Target 的设置编译对应源码、连接依赖、打包资源,再签名。Scheme 组织本次 Build、Run、Test 和 Archive 的行为。SDK 是你编译时可见的 API 集合,Deployment Target 是安装时的最低系统要求,两者不能互换。签名与 entitlement 则声明应用身份及获准使用的系统能力。

把关键概念连起来

1

Target

主 App、Widget、测试通常是不同 Target。源码的 Target Membership 决定它参与哪个产物。

2

Scheme

决定构建哪些 Target、如何运行和测试。Deployment Target 是支持的最低系统版本,不是本机 SDK 版本。

3

签名

Team、Bundle ID、证书与 provisioning profile 共同关联开发者、应用和授权设备/能力。优先理解自动签名。

为什么 Widget 读不到主应用的数据

  1. 先确认共享模型文件是否被 Widget Target 编译;不能只检查文件树里是否存在。
  2. 再确认两边都配置了所需的 App Group,并明确读写的是共享容器,而非各自默认沙盒。
  3. 最后区分权限声明和实际行为:共享容器可用不代表时间线已刷新,需要独立验证写入与 Widget 展示。

这里需要你亲自判断

添加 Capability 并不等于已经获得运行时权限;签名错误也不是 Swift 语法错误。

做一个小练习

在工程中找到 Bundle ID、Team、Deployment Target 和当前 Scheme,并说出各自作用。

  1. 列出主 App 和测试 Target 的产物、入口及依赖。
  2. 找一个高于最低系统版本的 API,说明应提高最低版本还是使用 #available 和替代实现。
展开参考思路与验收标准

你应能解释:同一 Project 下两个 Target 可以拥有不同 Bundle ID 和权限;较新的 SDK 不会自动让旧系统支持新 API。配置问题应通过工程设置修复,不能通过删除类型检查或胡乱复制文件掩盖。

Deployment Target 设为 iOS 17 意味着什么?

继续查阅官方资料
Apple Developer 官方资料

本课聚焦核心认知。具体 API、系统要求与发布政策,以当前官方文档和工程验证为准。

答对理解题后即可标记完成