Подтвердить что ты не робот

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 для этого и как это сделать? Большое спасибо.

4b9b3361

Ответ 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