美文网首页
iOS加快app启动速度——动态库转静态库方法

iOS加快app启动速度——动态库转静态库方法

作者: 经天纬地 | 来源:发表于2021-08-16 11:03 被阅读0次

    app启动速度分mian()函数之前和main()函数之后,其中main()函数之前的流程大概有以下几个:

    • dyld动态库加载
    • rebase,调整镜像内部指针,因为有“地址动态空间布局随机化”
    • binding,修复指向外部的指针,比如app调用打印NSLog,需要找到NSLog指针地址进行调用
    • objc setup:runtime初始化,class和sel注册,sel唯一性确认
    • load&constructor&initialize,调用所有load方法,初始化C&C++的静态化变量

    本文主要讨论动态库优化问题

    1. 减少动态库数量,苹果官方建议使用自定义的动态库不超过6个
    2. 转静态库

    在我看来,目前比较有效就是profile文件去掉user_framework,可以达到pod进来的第三方库全部为静态库,对于个别需要动态库编译的,可以特殊处理,代码如下:

      #创建需要进行处理的动态库的数组
      needStaticAry = Array['AFNetworking', 'AppOrderFiles', 'BeeHive', 'CTMediator', 'DateTools', 'EasyNavigation','FSCalendar','IQKeyboardManager','JDStatusBarNotification','JKCategories','JXCategoryView','JXPagingView','MBProgressHUD','MJExtension','MJRefresh','Masonry','PlatformJSBridgeManager','RSAEncryptor','ReactiveObjC','SDAutoLayout','SDCycleScrollView','SDWebImage','TYCyclePagerView','TZImagePickerController','UITableView+FDTemplateLayoutCell','WebViewJavascriptBridge','XQYContractSDK','YYKit','dsBridge']
      #这个hooks允许,你在生成xcode project写入硬盘前做最后的改动
      post_install do |installer|
          #获取所有的target,包括静态库h和动态库
          installer.pods_project.targets.each do |target|
              #打印所有的target,这里的target是一个对象,获取名字需要用target.name
              puts "  ||-#{target}"
    
              needStaticAry.each do |staticTarget|
                  if target.name == staticTarget
                      target.build_configurations.each do |config|
                          #将mach-o改为静态库
                          config.build_settings['MACH_O_TYPE'] = "staticlib"
    
                      end
                  end
              end
          end
      end
    

    检查成功与否:


    image.png

    相关文章

      网友评论

          本文标题:iOS加快app启动速度——动态库转静态库方法

          本文链接:https://www.haomeiwen.com/subject/zermbltx.html