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

18

我有一个项目包括:

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

这里有一个示例项目。

我想在MyExtension中使用MyKit的共享代码,但当我链接时,我收到了警告信息:

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

苹果的文档称:

为了使应用扩展目标使用嵌入式框架,请将目标的“仅要求应用程序扩展安全API”构建设置设置为Yes。如果您没有这样做,Xcode会通过显示警告“链接到dylib不适用于应用程序扩展”提醒您。

默认情况下已正确设置此选项。我可以通过将“仅要求应用程序扩展安全API”设置为NO来消除警告,但这可能会导致某些应用被拒绝。

该框架不使用任何在应用程序扩展中不允许API。实际上,在示例项目中,您会看到MyKit.framework只向控制台记录一条消息。

从应用程序扩展中链接到嵌入式框架的正确方法是什么,以避免出现此警告?

1个回答

22

如果您的目标是在应用程序和扩展之间共享代码,则不需要创建框架。您可以将源文件添加到不同的目标中:

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


个人观点补充:如果您不想在项目之间共享代码,则在这里使用框架没有意义。如果您想在项目之间共享代码并决定使用框架,则建议将其作为独立的Xcode项目进行版本控制。


4
啊,我需要在框架中设置“仅需要应用扩展安全API”,而不是在扩展中设置!顺便说一下,我需要使用一个实际上在其他应用程序之间共享的框架。我上面的情况只是为了简化问题。 - Jan
3
是的。错误提示你,你正在使用可能使用不受支持的API调用的框架。使用"Require Only App-Extension-Safe API"=YES,编译器会在你尝试在你的框架中使用不受支持的API(例如UIApplication)时给你一个错误,从而保证客户可以安全地在扩展中使用框架。 - shallowThought
你好,你是否已经将你的框架与嵌入和签名选项链接起来了? 我也有类似的问题。 - user7644872
真是太有趣了,这被认为是正确答案,但它说“你不需要创建一个框架”。到底是怎么回事? - amleszk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接