美文网首页
iOS 静态库和动态库

iOS 静态库和动态库

作者: iOS乐乐 | 来源:发表于2020-05-09 09:01 被阅读0次

    一 . iOS原生插件导入uni-app 图片资源包的处理,否则Xcode中图片显示,HBuilderX中的图片资源会出现图片加载失败的情况

    + (UIImage *)getImageResourceForNameFromCLShanYanSDKBundle:(NSString *)name {
        return [UIImage imageNamed:name inBundle:[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"sdk_oauth" ofType:@"bundle"]] compatibleWithTraitCollection:nil];
    }
    
    

    最近是写uni-app原生插件开发的时候使用到了环信的SDK, 剔除模拟器框架后的大小为180MB, uni-app打包基座限制大小是40MB,超过大小后按照次数进行额外的收费, 因为这个原因需要研究一下静态库和动态库寻找解决办法
    静态库: .a和.framework
    动态库: .dylib和.framework
    静态库: 链接时,静态库会被完整的复制到可执行文件中,被多次使用就有多分冗余拷贝
    动态库: 链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序公用,节省内存
    注意:项目中使用了动态库会被苹果拒绝

    静态库文件的版本共4种
    ·真机Debug版本
    ·真机Release版本
    ·模拟器Debug版本
    ·模拟器Release版本

    静态库的制作


    截屏2020-05-09上午9.29.31.png

    ①debug运行一下command+B
    ②release运行一下
    这样回得到真机和模拟器的两个框架
    调试的时候需要将两个进行合并
    上线的话, 为了减少包的大小可以提出模拟器的框架

    静态库外部暴露.h的步骤如何所示:


    WechatIMG954.jpeg 9561588989115_.pic_hd.jpg 9551588988817_.pic.jpg

    测试的时候只需要合并debug下的真机和debug下的模拟器就可以了, 上线的时候可以移除debug下的模拟器框架

    终端输入
    合并.a
    lipo -create xxxx.a xxxx.a -output /Users/lelemeng/Desktop/xxxx.a


    9571588989602_.pic.jpg 9591588990015_.pic_hd.jpg

    对合并的框架移除模拟器框架示例如下

    【首先进入Hyphenate.framework所在目录】
    // 移除支持x86_64,i386的二进制文件
    lipo Hyphenate.framework/Hyphenate -remove x86_64 -remove i386 -output Hyphenate
    //替换framwork内部二进制文件
    mv Hyphenate Hyphenate.framework/Hyphenate
    //查看剥离后的二进制文件支持的CPU架构,如果显示armv7 arm64,就完成剥离,可上传AppStore
    lipo -info Hyphenate.framework/Hyphenate
    

    制作framework注意事项
    Build Active Architecture Only 选项中将debug改成NO,会变异真机的2个架构和模拟器的两个架构, 否则分别只有1个
    可以理解成编译的是当前机器的架构, 会少一个

    截屏2020-05-09上午10.28.42.png

    在TARGETS->Build Settings中,将 Mach-O Type 设置为 Static Library 如下图所示(将framework制作成静态库默认是动态库)

    相关文章

      网友评论

          本文标题:iOS 静态库和动态库

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