首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在iOS8中支持Xcode6和嵌入式框架

仅在iOS8中支持Xcode6和嵌入式框架
EN

Stack Overflow用户
提问于 2014-09-18 18:11:37
回答 14查看 59.4K关注 0票数 68

在Xcode6.0.1中使用嵌入式框架(dyld),部署目标低于iOS 8时,我得到:

装入successful

  • Runtime库时出现错误
  • Build is successful
  • Runtime

错误:

代码语言:javascript
复制
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) 
EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2015-02-25 02:39:10

有一段时间我在想,这也是我的问题,但是对于普通的应用程序(non-iOS-8-extension),你只需要在你随意的Xcode6 iOS通用框架目标中更改一个构建设置(将Mach-O类型设置为静态库):

之后,iTunes连接和iOS 7应该不会有任何问题:)

票数 39
EN

Stack Overflow用户

发布于 2014-09-18 18:31:28

因此,在深入研究之后,我想出了解决方案

应该有你的MyEmbeddedFramework.framework添加到应用程序中,执行此操作

there if >如果您有,请在选项卡常规> Embedded Binaries

  1. Remove中删除MyEmbeddedFramework.framework构建阶段>复制阶段" Frameworks“中的MyEmbeddedFramework.framework。
  2. Clean Build Folder
  3. Move MyEmbeddedFramework.framework in void Embedded Frameworks部分。
  4. 您现在将看到新的构建阶段> Embedded Frameworks是由XCode6创建的(不是您,它是由XCode6创建的,如果您有5个构建阶段,它应该可以正确运行。

总而言之,要让它正常工作,您应该看到MyEmbeddedFramework.framework在

A)常规>嵌入式二进制文件

B)构建阶段>嵌入式框架

它在iPhone5/iOS8上工作得很好,而不是在我得到的iPhone4S/iOS7上:

dyld:库未加载:引用自: /var/mobile/Applications/739D9C44-3B91-4D4F-805B-83BE66C9CBCA/musiXmatch.app/musiXmatch的@rpath/ObjectiveLyricsTouch2.framework/ObjectiveLyricsTouch2原因:找不到合适的图像。在/private/var/mobile/Applications/739D9C44-3B91-4D4F-805B-83BE66C9CBCA/musiXmatch.app/Frameworks/ObjectiveLyricsTouch2.framework/ObjectiveLyricsTouch2中发现: /private/var/mobile/Applications/739D9C44-3B91-4D4F-805B-83BE66C9CBCA/musiXmatch.app/Frameworks/ObjectiveLyricsTouch2.framework/ObjectiveLyricsTouch2:不兼容cpu-子类型: 0x0000000B

问题出在EmbeddedFramework中。我不得不

1)将架构设置为默认值2)将有效架构设置为: armv7、armv7s和armv64 (正如苹果公司建议的那样,需要armv64才能让嵌入式框架工作)。

然后我就可以在应用程序上运行一个嵌入式框架了

  • iPhone5S/iPhone5C iOS8
  • iPhone5S/iPhone5C iOS7
  • iPod第5代/
    • iPhone5S/iPhone5C iOS8
    • iPhone5S/iPhone5C/
    • iPhone4/ iOS7

无论如何,当提交到iTunesConnect时,我在最低要求的版本上得到了一些错误:

  • 框架的MinimumOSVersion "...“无效。最小值为iOS 8.0;
  • 无效架构:包含和应用程序扩展模块和框架的应用程序必须支持arm64;

票数 30
EN

Stack Overflow用户

发布于 2014-10-05 22:40:43

到目前为止,还没有办法使用嵌入式框架在应用程序和小工具之间共享代码,并让它在iOS 8以及iOS 7和之前的版本上运行。

下面是有关该http://atomicbird.com/blog/ios-app-extension-tips更多信息

框架与iOS 7

如果你在一个应用和一个扩展之间共享代码,一个很好的方法是创建你自己的嵌入式框架来保存代码。在iOS 8上,这两种情况下都会动态加载,所以设置好了。

如果你仍然支持iOS 7(或更早的版本),那就不是那么清晰了。嵌入式框架在那里不起作用。App Extension Programming Guide轻而易举地指出,您可以使用dlopen来处理此问题。使用这种方法,您可以编写代码在运行时动态加载框架,而不是依赖于iOS为您加载它,前提是您已经验证了代码运行在支持这样做的iOS版本上。

但是如何在iOS 7上使用这些代码呢?如果你的共享代码在一个嵌入式框架中,就没有办法在iOS 7上执行它,因为它是不可用的。

如果您只需要iOS 8上的共享代码,那么dlopen方法可能会很方便。如果您在iOS 7上需要它,则需要将其包含在应用程序目标中。一旦你这样做了,你就不需要这个框架了。您仍然可以为应用程序扩展使用框架,但这样做实际上没有什么用处。你会做创建框架的工作,但没有从它中获得任何好处。只需在两个目标中包含共享代码即可。

来自苹果的扩展指南https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensibilityPG.pdf

如果您从包含的应用程序链接到嵌入式框架,即使嵌入式框架在这些版本中不可用,您仍可以将其部署到8.0之前的iOS版本。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25909870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档