确认一下:"Cocoa-Touch framework"只支持iOS8或更高版本吗?
确认一下:"Cocoa-Touch framework"只支持iOS8或更高版本吗?
在使用Xcode 6.0.1中的嵌入式框架(dyld)并且部署目标小于iOS 8时,我遇到以下问题:
- 构建成功
- 运行时库加载错误
错误信息:
dyld: 库未加载:@rpath/ObjectiveLyricsTouch2.framework/ObjectiveLyricsTouch2 引用自:/private/var/mobile/Containers/Bundle/Application/DC65ACA9-98E5-46CD-95F8-829D3416F6C0/musiXmatch.app/musiXmatch 原因:未找到图像 (lldb)
在当前情况下,无法使用嵌入式框架在iOS 8以及iOS 7和之前的版本上分享代码。
解决方法是,在iOS 8上可以动态加载嵌入式框架来共享代码,但是在iOS 7上不支持嵌入式框架。可以使用dlopen方法来解决这个问题,通过在运行时动态加载框架来执行代码。但是,如果共享的代码在嵌入式框架中,就无法在iOS 7上执行,因为它是不可用的。如果只需要在iOS 8上使用共享代码,可以使用dlopen方法。如果需要在iOS 7上使用共享代码,需要将其包含在应用程序目标中,这样就不需要使用框架了,可以在两个目标中都包含共享代码。
从苹果的扩展指南中可以看到,如果你从主应用程序链接到一个嵌入式框架,即使在iOS 8.0之前的版本中,你仍然可以部署它,尽管在这些版本中不支持嵌入式框架。
因此,回答问题是:嵌入式框架在iOS 7上不可用,只能在iOS 8或更高版本上使用。
Confirmation: Cocoa-Touch framework是否只支持iOS8或更高版本?
原因:Embedded Framework的问题,需要设置架构和有效架构来解决。
解决方法:
1. 移除General > Embedded Binaries中的MyEmbeddedFramework.framework。
2. 移除Build Phases > Copy Phase "Frameworks"中的MyEmbeddedFramework.framework。
3. 清理构建文件夹。
4. 将MyEmbeddedFramework.framework移动到void Embedded Frameworks部分。
5. 现在你应该在General > Embedded Binaries和Build Phase > Embedded Frameworks中看到MyEmbeddedFramework.framework。
问题是Embedded Framework的问题,需要进行以下设置:
1. 将架构设置为默认。
2. 设置有效架构为armv7、armv7s和armv64。
这样就能够在以下设备和操作系统上运行应用程序:
- iPhone5S/iPhone5C iOS8
- iPhone5S/iPhone5C iOS7
- iPod 5th gen / iOS7
- iPhone4S / iOS7
- iPhone4 / iOS7
然而,在提交到iTunesConnect时,可能会出现以下错误:
- The MinimumOSVersion of framework "..." is invalid. The minimum value is iOS 8.0;
- Invalid Architecture: Apps that include and app extension and a framework must support arm64;
根据开发者的经验,即使动态框架可以在iOS7上运行,App Store Submission Validator仍会拒绝在iOS7上使用动态框架的应用程序。
在Xcode 6.1更新后,这种方法不再适用。继续返回错误: embedded dylibs/frameworks are only supported on iOS 8.0 and later.
根据开发者的经验,无法在构建为iOS7的情况下部署嵌入式框架。
如果将动态库重写为静态库,问题是否会解决?或者我的小组件会停止工作吗?
开发者的项目被拒绝了,是否有人知道是否会通过审核?如果不能,如何在支持iOS7的应用程序中使用嵌入式框架?
开发者的IPA在XCode提交阶段未能通过iTunes Connect验证。在这里有一个有趣的案例,可能对你有帮助。
如何在Xcode中使用dlopen()?有没有示例?可以参考这个链接:Deploying a Containing App to Older Versions of iOS。
你还记得在验证失败时使用的Xcode版本吗?如果不是最新版本,是否尝试过使用Xcode 6.1?根据报道,最新版本可能是可能的。
有关iOS 8.3 Beta对于应用扩展、嵌入式框架和ARM64的有趣注意事项:应用扩展需要一个arm64切片才能在64位设备上运行。如果尝试在64位设备上运行armv7切片,将无法工作。如果应用程序和应用扩展都链接到同一个框架,那么应用程序需要有一个arm64切片。
注意事项:该回答不是一个答案。
Confirmation: Cocoa-Touch framework是否只支持iOS 8或更高版本?
这个问题的出现是因为有人在使用Xcode 6创建iOS通用框架时遇到了问题,他们发现将Mach-O Type设置为Static Library后,可以顺利提交应用到iTunes Connect并且在iOS 7上运行。然而,也有人在验证iPA文件时遇到了错误,显示"found an unexpected Mach-O Header code :someNumbers.."。有些人表示在提交应用到App Store时没有遇到问题,而有些人则表示在iOS 6上无法正常工作。还某些情况下不确定Swift框架是否也适用于这种方法。
为了解决这个问题,可以尝试将Mach-O Type设置为Static Library,并验证iPA文件是否通过。同时,可以尝试在iOS 6设备上测试应用程序是否运行正常。对于Swift框架,需要进一步测试确认是否适用于这种方法。
希望以上信息对你有帮助,祝你的框架开发顺利!