如何抑制`警告:链接对dylib不安全,无法在应用程序扩展中使用?

Way*_*man 38 linker-warning ios ios-frameworks ios-extensions

我有一个在iOS应用程序和扩展程序之间共享的动态框架.该框架中有一些代码引用UIApplication,当然,这些代码在扩展中不可用.这些电话是完全孤立的,所以我并不担心它们会导致我的分机出现问题.

由于警告消息中没有指定标志,可能无法执行此操作,但在构建项目时如何抑制 warning: linking against dylib not safe for use in application extensions

Oli*_*ain 31

对于您的watch/today-widget扩展目标(因此不是您的app或libray目标),请进入项目设置并将构建设置"APPLICATION_EXTENSION_API_ONLY"/"仅需要App-Extension-Safe API"更改为NO.

  • 这只会关闭警告.使用不适用于扩展程序的API将导致Apple的应用程序审核期间被拒绝.如果您打算通过App Store发布此应用程序,最好保持警告开启并删除使用任何不允许扩展的API. (8认同)
  • 从 XCode 12.5 开始,它将强制您将“仅需要应用程序扩展安全 API”设置为“YES”。 (3认同)

abd*_*lek 11

我认为您可以使用嵌入式框架在应用程序扩展与其包含的应用程序之间共享代码。但您必须注意,您的框架不包含扩展无法使用的api。请参阅应用程序扩展无法使用某些API,以及使用嵌入式框架共享代码

如果您的框架不包含此类api,请不要忘记在框架目标的中将其设置Require Only App-Extension-Safe APIYESBuild Settings

在此处输入图片说明

作为在应用程序和扩展之间共享源文件的第二种方法,您不必创建单独的框架目标。您可以通过同时针对两个项目共享源文件。

在此处输入图片说明


Lio*_*Lio 11

我的框架没有使用任何受限制的 API,但我仍然收到警告...这为我解决了这个问题。 在此输入图像描述

  • 这是正确的答案。 (2认同)

Way*_*man 7

简短的回答:没有办法.

我最终做的是重构我的代码,以拉出我的扩展和我的动态框架常见的部分,以便我的扩展可以安全地引用那些独立于手机特定代码的部分.

我最终这样做是因为将来某个时候我需要将它提交给App Store,Apple的指导似乎很清楚,引用UIApplication是一个非常大的禁忌.

  • 您在哪里放置公共代码?我们在一个框架中有它,并在应用程序和扩展中引用它.但这引发了警告...... (3认同)