1、下载安装瘦身软件
下载: LSUnusedResources.app.zip或者使用 XCode 编译运行项目代码。
2、Assets.xcassets更能瘦身
测试得知:CreateGroup、CreateFolderRefences,2种方式,图片都会直接放在.app文件中,所以打包前后,图片的大小不会改变。
而加入到Assets.xcassets中,打包后,在.app中会生成Assets.car文件来存储图片,文件大小方面也大大降低。

所以,使用Assets.xcassets来管理图片也可以达到ipa瘦身的效果
3、压缩图片
imageoptim是一款基于Mac的图像“瘦身”软件,内置有6种压缩算法,通过删除图片部分无用的EXIF等信息来减小PNG、JPEG和GIF图片的大小。ImageOptim合并了OptiPNG、PNGCrush、AdvanceComp、PNGOUT、Jpegoptim+Jpegtran和Gifsicle等几个工具,旨在为设计师提供最好的优化效果。在最新发布的1.4.4版本中,ImageOptim改进了文件在文件列表中的拖拽、复制、粘贴功能。 下载地址
4、静态库瘦身
通过lipo工具可以查看第3方库的支持的指令集,比如查看IJKMediaFramework.framework
lipo -info /Users/lmy/Desktop/test/IJKMediaFramework.framework/IJKMediaFramework
输出:
Architectures in the fat file: /Users/lmy/Desktop/test/IJKMediaFramework.framework/IJKMediaFramework are: armv7 i386 x86_64 arm64
可以看到,此静态库支持armv7 、i386 、x86_64 、arm64 。
为了打包是app瘦身, 可以去掉i386 、x86_64 这两个模拟器指令集。如果有armv7s,也可以删了。因为armv7可以兼容armv7s,armv7s,只保留armv7和arm64。
第1步:生成只支持armv7:
lipo /Users/lmy/Desktop/test/IJKMediaFramework.framework/IJKMediaFramework -thin armv7 -output /Users/lmy/Desktop/test/IJKMediaFramework_v7
第2步:生成只支持arm64:
lipo /Users/lmy/Desktop/test/IJKMediaFramework.framework/IJKMediaFramework -thin arm64 -output /Users/lmy/Desktop/test/IJKMediaFramework_arm64
第3步:合并armv7+ arm64:
lipo -create /Users/lmy/Desktop/test/IJKMediaFramework_v7 /Users/lmy/Desktop/test/IJKMediaFramework_arm64 -output /Users/lmy/Desktop/test/IJKMediaFramework
或者,cd到这个目录下,去使用命令,如下所示:
cd /Users/lmy/Desktop/test
lipo -create IJKMediaFramework_v7 IJKMediaFramework_arm64 -output IJKMediaFramework
查看目录下所有文件:
ls -ll
total 479776
-rwxr-xr-x 1 lmy staff 122819960 10 31 14:32 IJKMediaFramework
drwxr-xr-x@ 6 lmy staff 192 10 25 15:27 IJKMediaFramework.framework
-rwxr-xr-x 1 lmy staff 62371760 10 25 15:27 IJKMediaFramework_arm64
-rwxr-xr-x 1 lmy staff 60448152 10 25 15:27 IJKMediaFramework_v7
总结:
原来IJKMediaFramework.framework里面的IJKMediaFramework是185M。
armv7的大小是:60M
arm64的大小是:62.4M
armv7+arm64合并之后文件大小是:122.8M
解决模拟器无法使用
删掉了i386和x86_64后模拟器不无法正常运行,目前想到的解决方法:
1、手动在Build.settings-Framework Search Paths下面指定静态库的引用位置
2、手动添加静态库的话可以在发布前将静态库替换。
3、如果用 Cocoapods 管理可以使用两份podfile文件,一份包含模拟器指令集一份不包括,发布的时候更换podfile文件即可;
或者用同一份podfile,分配置环境设置库
pod libWeChatSDK:configurations => ['Debug']
pod libWeChatSDK-device:configurations => ['Release']
信息补充:
arm64:iPhone6s | iphone6s plus|iPhone6| iPhone6 plus|iPhone5S | iPad Air| iPad mini2(iPad mini with Retina Display)
armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)
armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4
i386是针对intel通用微处理器32位处理器
x86_64是针对x86架构的64位处理器
模拟器32位处理器测试需要i386架构,
模拟器64位处理器测试需要x86_64架构,
真机32位处理器需要armv7,或者armv7s架构,
真机64位处理器需要arm64架构。
网友评论