上下文:
- 我们有一个Xcode项目,可以构建iOS应用程序和一些应用程序扩展。
- 我们还在Xcode框架中拥有一些共享代码,这些代码具有标志
APPLICATION_EXTENSION_API_ONLY
(以便我们可以在应用程序扩展中使用它)。 - 我们目前正在通过SPM模块将应用程序模块化,这意味着将这些框架转换为SPM模块。
问题:
SPM模块未标记为应用程序扩展安全,因此对于每个链接到应用程序扩展的SPM模块,都会发出警告,对于每个应用程序扩展(这会产生相当多的警告)。
评论:
我还没有找到一种方法来设置SPM模块上的此标志。
到目前为止,我唯一找到的是一种完全禁用警告的方法,即将no_application_extension
链接器标志设置为SPM目标 - 但是,如果我在应用程序扩展中使用不可用的API,则不会收到任何警告或错误(我尝试在模块中使用UIApplication.shared
,我没有收到任何警告或错误;如果我尝试在现有框架上这样做,我会立即收到编译器错误)。
如果我将application_extension
链接器标志设置为SPM目标,那么不仅在使用应用程序扩展中不可用的API时不会收到任何警告或错误,而且在构建应用程序时也会收到许多警告,因为许多应用程序使用的其他框架不可用于应用程序扩展中。
问题:
如何使我的SPM模块具有与在Xcode目标中设置APPLICATION_EXTENSION_API_ONLY
标志时相同的行为?
这意味着:
- 在应用程序扩展中使用被标记为应用程序扩展安全使用的模块时不会收到任何警告
- 同时在此类模块使用应用程序扩展中不可用的API时仍会得到错误信息
理想情况下,有一种简单的方法可以在SPM模块上设置APPLICATION_EXTENSION_API_ONLY
标志并恢复熟悉的行为。
谢谢
application-extension
链接器标志设置为目标,同时在应用程序目标的其他链接器标志中设置-no_application_extension
标志,就可以获得预期的行为。不幸的是,在测试后,它实际上完全禁用了警告(类似于第一个解决方法)。 - KPM