从应用程序扩展链接到嵌入式框架

Linking to a Embedded Framework from a app extension

我有一个项目

Here is a sample project.

我想在 MyExtension 中使用 MyKit 的共享代码,但是当我 link 它时,我收到警告

ld: warning: linking against a dylib which is not safe for use in application extensions: /Users/me/Library/Developer/Xcode/DerivedData/MyApp-dnztzmxjghjlsteetlokzhjtjqkm/Build/Products/Debug-iphonesimulator/MyKit.framework/MyKit

Apple's documentation says

To configure an app extension target to use an embedded framework, set the target’s “Require Only App-Extension-Safe API” build setting to Yes. If you don’t, Xcode reminds you to do so by displaying the warning “linking against dylib not safe for use in application extensions”.

默认设置正确。我 可以 通过将 "Require Only App-Extension-Safe API" 设置为 NO 来消除警告,但这可能会导致某些应用程序被拒绝。

框架不在应用程序扩展中使用任何 API not allowed。事实上,在示例项目中,您会看到 MyKit.framework 仅将消息记录到控制台。

link 从应用程序扩展中嵌入框架以避免出现此错误的正确方法是什么?

如果您的目标是在 App 和 Extension 之间共享代码,则无需创建框架。您可以将源文件添加到不同的目标:

要使用框架,请在框架目标构建设置中将 "Require Only App-Extension-Safe API" 设置为 YES。这样做之后,您的示例项目中就没有警告了。


基于意见的补充:由于您不想在项目之间共享代码,因此在这里使用框架对我来说没有意义。如果您想在项目之间共享代码并因此决定使用框架,我建议将其设为独立的 Xcode 项目,并在自己的版本控制下。