Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS merge several framework into one

Tags:

ios

After watching the WWDC 2016 video optimizing App Startup time, Apple suggested developer can merge several frameworks (dynamic library not static) into one to improve the app cold start time. https://developer.apple.com/videos/play/wwdc2016/406/

So I downloaded a dummy project here:

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

And try to merge two frameworks into one using the following command:

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

And the console returns

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)

So my question is how to merge several framework into one? Can we use libtool to do it and how to do it? Many thanks.

like image 971
PrimaryChicken Avatar asked Aug 09 '16 06:08

PrimaryChicken


2 Answers

For dynamic frameworks lipo -create path/yourFramework1 path/yourFramework2 -output path/yourFramework

For .a libraries

  • where sim/lib.a contains i386
  • where dev/lib.a contains armv7

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

output contains i386 and armv7

like image 73
Ted Avatar answered Oct 29 '22 05:10

Ted


I can combine two frameworks (static library only) into one using

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

The script from this github maybe helpful https://gist.github.com/evands/8ba4f227b00ae14a9303

P.S. Merging static library does not reduce the cold start time

like image 43
PrimaryChicken Avatar answered Oct 29 '22 04:10

PrimaryChicken