【问题标题】:iOS merge several framework into oneiOS 将多个框架合二为一
【发布时间】:2016-12-15 01:54:15
【问题描述】:

在观看了 WWDC 2016 优化 App 启动时间的视频后,Apple 建议开发者可以将多个框架(动态库不是静态的)合并为一个,以改善应用程序的冷启动时间。 https://developer.apple.com/videos/play/wwdc2016/406/

所以我在这里下载了一个虚拟项目:

https://github.com/stepanhruda/dyld-image-loading-performance

并尝试使用以下命令将两个框架合并为一个:

libtool -static -o new.framework SwiftyJSON.framework Shimmer.framework

控制台返回

error:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't map file: SwiftyJSON.framework (Invalid argument)`

error:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't map file: Shimmer.framework (Invalid argument)

所以我的问题是如何将多个框架合并为一个?我们可以使用 libtool 来做到这一点以及如何做到这一点?非常感谢。

【问题讨论】:

  • 你找到合并动态框架的方法了吗?甚至我也在寻找一种通过合并动态库来减少冷启动时间的方法。
  • @vin25 我找不到合并动态框架的方法,但我认为您可以使用更多静态库。

标签: ios


【解决方案1】:

如果您尝试合并由 cocoapods 创建的框架,您可以使用 pod-merge 插件:https://github.com/grab/cocoapods-pod-merge

【讨论】:

    【解决方案2】:

    对于动态框架 lipo -create path/yourFramework1 path/yourFramework2 -output path/yourFramework

    对于 .a 库

    • 其中 sim/lib.a 包含 i386
    • 其中 dev/lib.a 包含 armv7

    lipo -create '/sim/lib.a' '/dev/lib.a' -output 'lib.a'

    输出包含 i386 和 armv7

    【讨论】:

    • lipo -create path/yourFramework1 path/yourFramework2 -output path/yourFramework 无法将不同的动态框架与相同的架构合并
    【解决方案3】:

    我可以将两个框架(仅限静态库)合并为一个使用

    libtool -static -o new.framework SwiftJSON.framework/SwiftJSON Shimmer.framework/Shimmer
    

    来自这个 github 的脚本可能会有所帮助 https://gist.github.com/evands/8ba4f227b00ae14a9303

    附:合并静态库不会减少冷启动时间

    【讨论】:

    • 这为我创建了new.framework 的输出,但它不可用。我也无法进入框架。我错过了什么吗?更清楚地说,输出是 Kind:Framework (from Get Info)
    • P.S.合并静态库并不会减少冷启动时间,那么将框架合并为一个有什么好处?
    • @ihsan_husnul 如果你在 iOS 项目中使用了过多的动态库,会增加应用启动时间(冷启动时间)。所以苹果建议我们合并动态库。
    • 抱歉@PrimaryChicken,您能否澄清您对@ihsan_husnul 的回复?如果不减少启动时间,将多个静态库合并为 1 有什么好处?对构建时间有影响吗?如果不是,它有什么用?我的理解通常是,通过合并库或框架,我们要么试图减少启动时间、构建时间,要么两者兼而有之。合并静态库对构建时间有影响吗?我猜不会,因为合并只发生在静态库构建之后?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2019-11-06
    • 2016-03-18
    • 2010-12-15
    • 2020-12-08
    • 2017-02-26
    相关资源
    最近更新 更多