You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swift Package Manager(SPM)目标中设置APPLICATION_EXTENSION_API_ONLY?

让SPM模块实现APPLICATION_EXTENSION_API_ONLY的等效行为

要实现和Xcode原生框架开启APPLICATION_EXTENSION_API_ONLY完全一致的效果,按以下步骤配置即可:

1. 配置SPM模块,强制检查扩展禁用API

在你的Package.swift中,给共享模块目标添加APPLICATION_EXTENSION_API_ONLY编译宏。这会让模块在编译时自动检测是否使用了App扩展不允许的API(比如UIApplication.shared),一旦违规直接触发编译错误,和原Xcode框架的行为完全对齐。

示例配置:

let package = Package(
    name: "YourPackage",
    products: [
        .library(name: "SharedCore", targets: ["SharedCore"]),
    ],
    targets: [
        .target(
            name: "SharedCore",
            dependencies: [],
            swiftSettings: [
                .define("APPLICATION_EXTENSION_API_ONLY")
            ]
        ),
        // 测试目标可按需配置
    ]
)

2. 给每个App扩展目标添加链接器标志,消除引用警告

打开Xcode项目,找到每个App扩展的目标:

  • 进入Build Settings → 搜索Other Linker Flags
  • 添加-application_extension标志

这个操作会告诉Xcode该扩展仅使用支持App扩展的模块,从而消除对SPM共享模块的“未标记为App扩展安全”警告。

3. 主App目标保持默认配置

主App的编译设置不需要做任何修改,这样既不会触发第三方框架的扩展兼容性警告,同时能正常使用SPM共享模块的全部功能。

效果验证

  • 若SPM模块中使用了UIApplication.shared等扩展禁用API,编译时会直接报错,和原Xcode框架开启APPLICATION_EXTENSION_API_ONLY的行为一致。
  • 各App扩展引用该模块时,不会再出现批量警告。
  • 主App引用模块时无额外警告,功能正常。

内容的提问来源于stack exchange,提问作者KPM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:15:27