2017-02-21 114 views
4

我有从一个应用程序扩展

  • 一个应用目标项目链接到嵌入式框架: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不安全以用于应用程序扩展”。

默认情况下设置正确。我通过将“仅需要应用程序扩展安全API”设置为NO,可以通过摆脱警告,但这可能会导致一些应用程序拒绝。

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

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

回答

4

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

要使用框架,设置“只需要应用程序,扩展安全的API”的框架目标构建设置YES。这样做后,您的示例项目中没有警告。


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

+0

Ahh我必须在框架*中设置“仅需要应用程序扩展安全API”*而不是在扩展中!顺便说一句,我不得不使用其他应用程序之间实际共享的框架。我上面的场景只是为了简化问题 – Jan

+0

是的。该错误告诉您,您正在使用可能使用不受支持的API调用的框架。如果您尝试在您的框架中使用不受支持的API(例如'UIApplication'),编译器会给您一个错误,从而向客户端保证它是保存到的,所以使用''只需要App-扩展 - 安全API'= YES'在扩展中使用框架。 – shallowThought

+0

好吧。谢谢! – Jan