【问题标题】:Linking to a Embedded Framework from a app extension从应用程序扩展链接到嵌入式框架
【发布时间】:2017-07-10 18:49:57
【问题描述】:

我有一个项目

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

Here is a sample project.

我想在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

Apple's documentation says

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

默认设置正确。我可以通过将“仅需要应用扩展安全 API”设置为 NO 来消除警告,但这可能会导致某些应用被拒绝。

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

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

【问题讨论】:

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


    【解决方案1】:

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

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


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

    【讨论】:

    • 啊,我必须在框架中而不是在扩展中设置“仅需要应用程序扩展安全 API”!顺便说一句,我必须使用实际上在其他应用程序之间共享的框架。我上面的场景只是为了简化问题
    • 是的。该错误告诉您,您正在使用可能使用不受支持的 API 调用的框架。使用"Require Only App-Extension-Safe API" = YES,如果您尝试在框架中使用不受支持的API(例如UIApplication),编译器会给您一个错误,从而向客户端保证在扩展中使用框架是保存的。
    • 您好,您是否将您的框架与嵌入和签名选项相关联?我也有类似的问题。
    猜你喜欢
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 2021-02-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多