我有一个项目包括:
- 一个应用程序目标:
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
只向控制台记录一条消息。
从应用程序扩展中链接到嵌入式框架的正确方法是什么,以避免出现此警告?
"Require Only App-Extension-Safe API"=YES
,编译器会在你尝试在你的框架中使用不受支持的API(例如UIApplication
)时给你一个错误,从而保证客户可以安全地在扩展中使用框架。 - shallowThought