IOS объединяет несколько рамок в один
После просмотра видеоролика WWDC 2016, оптимизирующего время запуска приложения, 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 для этого и как это сделать? Большое спасибо.
Ответы
Ответ 1
Для динамических рамок
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
Ответ 2
Я могу объединить две рамки (только статическую библиотеку) в одну, используя
libtool -static -o new.framework SwiftJSON.framework/SwiftJSON Shimmer.framework/Shimmer
script из этого github может быть полезно
https://gist.github.com/evands/8ba4f227b00ae14a9303
P.S. Слияние статической библиотеки не уменьшает время холодного запуска
Ответ 3
Если вы пытаетесь объединить фреймворки, созданные cocoapods, вы можете использовать плагин pod-merge: https://github.com/grab/cocoapods-pod-merge