iOS 使用 Xcode8 制作动态库及静态库

  在使用第三方 SDK 时,经常遇到他们提供的仅仅只有一个动态或静态库,并不能获取源码。使用动态库 FrameWork 或 静态库 Lib,可以满足不想把核心代码的具体实现向使用者展示,又能避免其他人错改动代码。

  一、动态库 FrameWork 的制作:

  打开 Xcode,选中 Cocoa Touch FrameWork。

  

  新建一个 PublicModel 文件,简单输出Log

  

  若这个 PublicManager 文件想要对外公开头文件。需要

  

  然后编译,得到动态库 FrameWork

  

  到目前为止,一个简单的 FrameWork 就制作完成了。接下来就是使用这个 FrameWork 了。

  把 FrameWork 拖进工程。引入 #import <DynamicFrameWorkMake/PublicManager.h>

PublicManager *manager = [[PublicManager alloc] init];
[manager printLog:@"这是一个打印信息"];

  编译运行,会发现 引入头文件处有个警告 “Missing submodule ‘DynamicFrameWork.PublicManager‘”,控制台会报错:

  

  这时需要在 General Embedded Binaries 中添加制作的 FrameWork。

  

  解决“Missing submodule ‘DynamicFrameWork.PublicManager”警告的方法是,在编译动态库时,在 DynamicFrameWorkMake.h 文件中,添加 "#import <DynamicFrameWorkMake/PublicManager.h>"

  

  需要注意的是,编译生成的 FrameWork 跟我们所选的编译环境有关,如果你选择的是 模拟器编译出来的,导入时在真机运行会报错的,同时也有 Debug 和 Release 模式之分。

  下面可以把真机编译出来的 FrameWork 和 模拟器编译出来的进行合并。

  

  打开终端,输入:

  lipo -create + 模拟器目录 + 真机目录 -output 合并后的目录。

  eg: lipo -create /Users/Robin/Library/Developer/Xcode/DerivedData/DynamicFrameWorkMake-fafcaqoabyywoqfahbpuzhfcltmd/Build/Products/Debug-iphoneos/DynamicFrameWorkMake.framework/DynamicFrameWorkMake /Users/Robin/Library/Developer/Xcode/DerivedData/DynamicFrameWorkMake-fafcaqoabyywoqfahbpuzhfcltmd/Build/Products/Debug-iphonesimulator/DynamicFrameWorkMake.framework/DynamicFrameWorkMake -output /Users/Robin/Desktop/DynamicFrameWork

  如果报错:error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: can‘t move temporary file: /Users/Robin/Desktop/DynamicFrameWork to file: /Users/zhangtibin/Desktop/DynamicFrameWork.lipo (Is a directory)

  

  

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 22.0px Times; color: #e44347 }
span.s1 { color: #d28f5a }
span.s2 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 22.0px Times; color: #e44347 }
span.s1 { color: #d28f5a }
span.s2 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff }
span.s1 { }

时间: 2024-10-11 21:33:25

iOS 使用 Xcode8 制作动态库及静态库的相关文章

IOS开发中制作属于自己的静态库.a、资源库.bundle、.framework

一.什么是库        库实际上是一种代码共享的方式,主要用于代码重用和源码隐藏,通常分为动态库和静态库. 静态库:链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存空间. 二.什么是.a..bundle..framework          在iOS中静态库以.a和.framework的形式存在,动态库以.dylib和.framework的形式存在. 之所以.framewo

ios 开发中 动态库 与静态库的区别

使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库,多个应用程序共享内存中得同一份库文件,节省资源 3使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的. 从1可以得出,将整个应用程序分模块,团队合作,进行分工,影响比较小. 等其他好处, 从2可以看出,其实动态库应该叫共享库,那么从这个意义上来说,苹果禁止iOS开

技巧:Linux 动态库与静态库制作及使用详解

技巧:Linux 动态库与静态库制作及使用详解 标准库的三种连接方式及静态库制作与使用方法 Linux 应用开发通常要考虑三个问题,即:1)在 Linux 应用程序开发过程中遇到过标准库链接在不同 Linux 版本下不兼容的问题: 2)在 Linux 静态库的制作过程中发现有别于 Windows 下静态库的制作方法:3)在 Linux 应用程序链接第三方库或者其他静态库的时候发现链接顺序的烦人问题.本文就这三个问题针对 Linux 下标准库链接和如何巧妙构建 achrive(*.a) 展开相关介

Windows 下VC++6.0制作、使用动态库和静态库

Windows 下VC++6.0制作.使用动态库和静态库 一.VC++6.0制作.使用静态库 静态库制作 1.如图一在VC++6.0中new一个的为win32 static library工程并新建一个.cpp和一个.h(C++header file)文件 2..cpp程序直接照老师给的打,注意这里需要改错,去掉(long) 3. .h文件需要自己编写格式如下.以head.h为例 #ifndef _HEAD_H_ #define _HEAD_H_ unsigned long unsgn_pow(

Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名

Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf  动态库的后缀为*.so  静态库的后缀为 libxxx.a   ldconfig   目录名 转载自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情. 在Linux操作系统中,普遍使用ELF格

Linux系统中“动态库”和“静态库”那点事儿【转】

转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情. 在Linux操作系统中,普遍使用ELF格式作为可执行程序或者程序生成过程中的中间格式.ELF(Executable and Linking Format,可执行连接格式)是UNIX系统实验室(USL)作为应用程序二进制

函数库:静态库和动态库

1.函数库 函数库其实就是一些写好的函数集合,方便别人的复用.实现的封装之后,最终的目的都是给别人调用. 2.库的形式 库的形式分:动态链接库和静态链接库. 优点: (1)库文件都是被编译好的二进制文件,别人看不到源代码,可以保持保密:(2)同时不会因为不小心被修改出现问题,便于维护. LINUX 下的库学习: 静态链接库:.a 文件 其实就是将多函数,做编译但是不链接生成的 .o 文件,使用 ar 工具打包为 .a 的文件.编译的阶段,当调用这些库的时候,链接器就会去 .a 的库文件中拿出被调

malloc,colloc,realloc内存分配,动态库,静态库的生成与调用

 1.在main方法里面直接定义一个非常大的数组的时候,可能会出现栈溢出:错误代码演示: #include<stdio.h> #include<stdlib.h> void main() { int a[1024 * 1024]; int num = 100; system("pause"); } 错误截图: 2.在定义数组的时候要定义数组的长度,否则会出现错误.(特例:在GCC编译器下,不会出现错误(因为标准不一样)). 3.打印并且赋值的是: for (

Linux系统中“动态库”和“静态库”那点事儿

摘自http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情. 在Linux操作系统中,普遍使用ELF格式作为可执行程序或者程序生成过程中的中间格式.ELF(Executable and Linking Format,可执行连接格式)是UNIX系统实验室(USL)作为应用程序二进制接