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

时间:2017-02-21 08:40:24

标签: ios xcode xcode8 ios-app-extension ios-frameworks

我有一个项目

  • 一个应用目标:MyApp
  • 一个嵌入式框架目标:MyKit.framework
  • 一个应用程序扩展目标:MyExtension

Here is a sample project.

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

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

  

要配置应用扩展程序目标以使用嵌入式框架,请将目标的“仅限应用程序扩展安全API”构建设置设置为“是”。如果不这样做,Xcode会提醒您这样做,方法是显示警告“链接到dylib并不安全,无法在应用程序扩展中使用”。

默认情况下已正确设置。通过设置"仅需要App-Extension-Safe API"我可以摆脱警告没有,但这可能导致一些应用拒绝。

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

从应用扩展程序链接到嵌入式框架的正确方法是什么,以避免这种错误?

1 个答案:

答案 0 :(得分:12)

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

要使用框架,请设置"仅需要App-Extension-Safe API"到框架目标构建设置中的YES。完成后,示例项目中没有警告。

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