iOS 是否失去了使用动态框架的大部分优势?
由于 iOS 会将所需的所有动态框架复制到应用程序包中,因此它不会在应用程序之间共享动态框架并节省内存。除了与主应用程序及其扩展程序共享内存。
使用的应用程序dlOpen无法发送到 App Store。这意味着 Apple 禁止正式使用动态框架。
旧的 Apple 文件说动态框架可以节省应用程序启动时间,但新文件说它们没有。旧文件是否过时?这是比较:
这是否意味着如果我们使用动态框架dlOpen稍后加载它们,它会比静态框架更快?因为动态框架在开始时需要一些时间来链接,但它们在加载到内存中节省了更多时间。静态框架的加载时间大于动态框架的链接时间。真的吗?
所以看起来在 iOS 上使用动态框架没有任何好处,对吧?
在 macOS 和 Linux 上呢?动态框架有什么优势吗?如果是这样,它们是如何工作的?
frameworks launch-time ios dynamic-frameworks static-framework
我有一个 XCFramework,它依赖于几个静态框架。
我的 XCFramework 是在启用 BUILD_FOR_LIBRARIES_FOR_DISTRIBUTION 的情况下构建的。
子框架不需要从 XCFramework 外部访问。
当我尝试在客户端(主机)应用程序中编译 XCFramework 时,我在 XCFramework 的 .swiftinterface 文件中收到错误消息No such module 'FBSDKLoginKit'(FBSDKLoginKit 是 XCFramework 子框架之一)
似乎缺少的是依赖模块的 swiftinterface 文件。例如,我正在使用 FBSDKLoginKit,但 XCFramework 中不存在 swiftinterface。
作为参考,我正在编译框架如下:
xcodebuild archive -project "TestFrameowrk.xcodeproj" -scheme "TestFrameowrk" -sdk iphoneos -archivePath ~/Desktop/xcframework.arm SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
xcodebuild archive -project "TestFrameowrk.xcodeproj" -scheme "TestFrameowrk" -sdk iphonesimulator -archivePath ~/Desktop/xcframework.x86 SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
xcodebuild -create-xcframework -framework ~/Desktop/xcframework.x86.xcarchive/Products/Library/Frameworks/TestFrameowrk.framework -framework ~/Desktop/xcframework.arm.xcarchive/Products/Library/Frameworks/TestFrameowrk.framework -output ~/Desktop/Framework.xcframework
Run Code Online (Sandbox Code Playgroud)