美文网首页iOS组件化
iOS平台静态库的打包和调用

iOS平台静态库的打包和调用

作者: ted005 | 来源:发表于2018-10-29 18:14 被阅读63次

在iOS平台为了实现源代码保护,可以将具体实现细节打包为静态库.a文件,同时暴露.h文件方便业务代码调用。制作静态库的过程如下:

制作并打包静态库.a文件

  • 新建工程new -> project,选择iOS tab,Framework & Library分类下的Cocoa Touch Static Library,如图:
  • 下一步next,输入静态库名称MyStaticLib等信息,Language暂时选择Objective-C

  • 生成项目工程,会看到生成了MyStaticLib.hMyStaticLib.m两个文件,Products目录下的静态库文件libMyStaticLib尚未生成。
  • 静态库文件的代码既支持Objective-CSwift,也支持原生的C语言。这里使用C作为示例语言编写一个简单的逻辑。将MyStaticLib.h改造为C代码,引入标准C函数库,并在其中定义一个方法sum,它接受两个int类型的参数,返回它们的

    #ifndef MyStaticLib_h
    #define MyStaticLib_h
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int sum(int a, int b);
    
    #endif /* MyStaticLib_h */
    
  • MyStaticLib.m文件中添加sum方法的具体实现:

    #import "MyStaticLib.h"
    
    int sum(int a, int b) {
        return a + b;
    }
    
  • 示例代码的逻辑很简单,现在可以配置工程的一些属性了。在Build Phases页面,Copy Files选项中已经自动为我们添加了暴露给外部调用的头文件MyStaticLib.h

切换至Build Settings页面,注意选项Build Active Architecture Only,通常Debug选择YES,而Release选择NO。如果是YES,代表静态库只针对当前设备的架构打包,即只针对图中设备模拟器iPhone XR的架构x86_64进行打包。

  • 运行程序,在Products目录下生成了静态库文件libMyStaticLib.a,查看目录可以发现同时暴露了MyStaticLib.h头文件。至此,静态库.a文件已经制作完成。

测试调用静态库

  • 新建一个简单的Single View App,在工程目录下新建文件夹3rd,并将之前生成的libMyStaticLib.a和头文件MyStaticLib.h拖入3rd文件夹下,注意选中Copy items if needed。检查General页面下选项Linked Frameworkd and Libraries中是否自动识别并添加了libMyStaticLib.a。如果没有,需要点击+添加。

  • 切换至Build Settings页面,找到选项Header Search Paths,输入../3rd,并设置为recursive递归的方式寻找。Xcode会在配置的目录下寻找头文件。
  • 编辑源文件ViewController.m如下,引入头文件MyStaticLib.h,添加测试代码

    #import "ViewController.h"
    #import "MyStaticLib.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        // 测试代码
        int result = sum(5, 10);
        NSLog(@"%d", result);
    }
    
    @end
    
  • 运行程序,可以在控制台看到输入了正确的值15。至此,静态库的调用实现完成。

依照不同的CPU架构打包

  • 模拟器架构为x86_64,真机架构为armv7armv7sarm64

  • 之前打包时,我们选择的设备是模拟器iPhone XR,因此生成的静态库libMyStaticLib.a支持的架构是x86_64真机是无法运行的。可以通过命令lipo -info libMyStaticLib.a查看:

    lipo -info libMyStaticLib.a
    

    输出结果为libMyStaticLib.a is architecture: x86_64

  • 要想在真机上运行,打包时必须选择对应的设备架构。注意:依照不同架构生成静态库文件的大小也是不同的。 切换至Build Settings页面,配置选项ArchitecturesValid Architectures,具体配置如下:

    1. armv7
  1. armv7s
  1. arm64
  1. 通用


工程示例代码参见Github

相关文章

  • iOS平台静态库的打包和调用

    在iOS平台为了实现源代码保护,可以将具体实现细节打包为静态库.a文件,同时暴露.h文件方便业务代码调用。制作静态...

  • iOS静态库与动态库的区别与打包

    iOS静态库与动态库的区别与打包iOS静态库与动态库的区别与打包

  • iOS封装framework,包含xib,storyboard,

    0. 网络含有很多有关iOS封装framework .a静态库文章,本文推荐 iOS静态库iOS打包framewo...

  • iOS 静态库开发

    iOS 静态库开发 本文旨在说明静态库制作中的一些常见问题和特殊处理1. 打包静态库需要的相关问题和设置 静态库中...

  • cocoaPods 打包静态库 遇到的坑 and git

    cocoaPods 打包静态库 遇到的坑参考资料iOS 打包.a文件的那些事儿iOS-将自己的库支持CocoaPo...

  • 目录一、库二、静态库、动态库、Framework三、打包静态库 1、.a静态库和.framework静态库的区别 ...

  • iOS中的静态库 .a 和 .framework &&a

    一、iOS里静态库形式 二、.a 与 .framework有什么区别 三、为什么要使用静态库 四、如何打包 .a ...

  • ios静态库资料

    (1)浅谈iOS开发.a静态库的打包(包括打包的文件中用到了一些别人的三方库和分类的处理) https://blo...

  • 静态库与动态库

    在iOS中,库分为静态库和动态库,它是程序代码共享的方式。 iOS静态库的形式:.a和.framework iOS...

  • iOS 打包动态库和静态库

    打包注意,真机下打包的静态库只能在真机下运行,模拟器下打包的静态库只能在模拟器下运行 1.打包.a静态库 在.h和...

网友评论

    本文标题:iOS平台静态库的打包和调用

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