Xcode 6和嵌入式框架仅支持iOS8及以上版本。

69

在 Xcode 6.0.1 中使用嵌入式框架(dyld)并且部署目标小于 iOS 8 时,出现以下情况:

  • 构建成功
  • 运行时库加载错误

错误信息:

dyld: Library not loaded: @rpath/ObjectiveLyricsTouch2.framework/ObjectiveLyricsTouch2        
Referenced from: /private/var/mobile/Containers/Bundle/Application/DC65ACA9-98E5-46CD-95F8-829D3416F6C0/musiXmatch.app/musiXmatch
Reason: image not found
(lldb) 

1
是的,您可以在iOS 7上使用动态框架:http://quellish.tumblr.com/post/103107323582/dynamic-frameworks-on-ios-7 - quellish
@quellish 很好知道,我在 WWDC '14 上与苹果工程师交流过。他们没有建议使用这种技术。话虽如此,在某些情况下,这可能是一种可行的解决方法。 - loretoparisi
15个回答

0

iOS v8 之前的动态框架

动态框架,也称为嵌入式框架,从 iOS v8 开始支持,但您可以尝试更改 Mach-O 类型[关于]动态库(对于支持的目标,默认设置为动态库)。

动态链接错误[关于]

dyld: Library not loaded: @rpath/<some_path>

这是一个动态链接器错误,它在加载或运行时链接二进制文件。

[词汇]


0

在iOS上使用动态库时,您必须对库进行代码签名。在Xcode 6中,您应该选择“Code Sign On Copy”。而在Xcode5中,您需要通过运行脚本自己对库进行签名。例如:

LOCATION="${BUILT_PRODUCTS_DIR}"/"${FRAMEWORKS_FOLDER_PATH}"
IDENTITY="iPhone Developer: xxxxx"
codesign --verbose --force --sign "$IDENTITY" "$LOCATION/BeeFramework.framework/BeeFramework"

这确实有效,按照这样做可以使你的应用程序运行。但是苹果可能不允许这样做。 - iOkay
是的,这确实使应用程序运行,但在itunesconnect的验证过程中失败了。 - Ravi Dalmia

0

如果你想让框架在iOS 7.0中工作,请从你的PodFile中删除"use frameworks!"。即运行"pod deintegrate"命令,修改您的PodFile,然后重新运行"pod install"命令。

另外,在此之后,我必须将该框架的所有".h"文件添加到Bridging文件中,这样就解决了问题。同时,从swift文件中删除导入"TestLibrary"的代码。


0

我在升级到Xcode 7.3时遇到了一个错误,但是我找到了解决方案。 - 在Pods项目中更改目标 -> 7.0 - 希望这对你有用! attack


0
我遇到了一个问题,需要将一些库作为嵌入式框架包含,否则会出现上述错误。但当我这样做时,在提交应用商店时又出现了错误。
我的解决方案是使用Pods,并确保取消注释"use_frameworks!" 行。

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