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)
iOS 使用 Xcode8 制作动态库及静态库的更多相关文章
- IOS开发中制作属于自己的静态库.a、资源库.bundle、.framework
一.什么是库 库实际上是一种代码共享的方式,主要用于代码重用和源码隐藏,通常分为动态库和静态库. 静态库:链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复 ...
- iOS动态库和静态库的运用
概念认识 什么是库 库是共享程序代码的方式,库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.在开发过程中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,不想被外界知道,所以会把 ...
- 【转】iOS动态库和静态库的简要介绍
静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人 ...
- ios 开发中 动态库 与静态库的区别
使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...
- 技巧:Linux 动态库与静态库制作及使用详解
技巧:Linux 动态库与静态库制作及使用详解 标准库的三种连接方式及静态库制作与使用方法 Linux 应用开发通常要考虑三个问题,即:1)在 Linux 应用程序开发过程中遇到过标准库链接在不同 L ...
- Windows 下VC++6.0制作、使用动态库和静态库
Windows 下VC++6.0制作.使用动态库和静态库 一.VC++6.0制作.使用静态库 静态库制作 1.如图一在VC++6.0中new一个的为win32 static library工程并新建一 ...
- iOS开发——高级篇——换肤、静态库
一.换肤 1.思路1> 解决方案1,使用颜色作为图片素材的命名关键字 问题1:要保证每套图片的文件名 颜色+ 名称.png的格式比较麻烦 问题2:如果要将某一个图片应用到其他皮肤不方便2> ...
- Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名
Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名 转载自:http://b ...
- Linux系统中“动态库”和“静态库”那点事儿【转】
转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻. ...
随机推荐
- Iframe 高度自适应,js控制Iframe 高度自适应
Iframe 高度自适应, js控制Iframe 高度自适应, iframe自适应高度 ================================ ©Copyright 蕃薯耀 2019年12 ...
- office2013激活工具,可以激活新版本office 2013
耽误一上午没激活成功,最后还是找到了激活文件KMSpico v9.0.6.zip 链接:https://pan.baidu.com/s/1WEyJm8kVnqDONRJRHTRQiQ 提取码:4h45 ...
- 能使Oracle索引失效的七大限制条件
Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时候却适得其反. 例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的.or ...
- 微信小程序遮罩层覆盖input失效
问题:微信小程序中,我们常使用遮罩层,如点击按钮弹出下拉框.弹框等等.若在遮罩层下存在input.textarea.canvas.camera.map.video等标签时,会出现遮罩层覆盖失效的问题. ...
- jquery 相同ID 绑定事件
本文链接:https://blog.csdn.net/lan_13217/article/details/84079441 http://hi.baidu.com/meneye/blog/item/1 ...
- app内区域截图利用html2Canvals保存到手机 截屏 (html2Canvals2版本1.0.0)
html2canvas($(], {scale:,logging:false,useCORS:true}).then(function(canvas) { var dataUrl = canvas.t ...
- 超好用的免费Redis客户端
Redis这款基于内存的键值对(key-vlaue)数据库,自带了一个基于命令行式的管理工具redis-cli,但是使用起来并不方便.虽然现在有了许多的图形化管理工具,有些需要收费,有些不好用.最终还 ...
- 1022_Digital_Library (30分)
这里提供两种写法, 其实都是一样的,第一种比较快. #include <bits/stdc++.h> using namespace std; map<string,set<s ...
- 疫情下的在线上课方案:QQ直播+蓝墨云班课
目录 疫情下的在线上课方案:QQ群视频(腾讯课堂)+蓝墨云班课 使用QQ进行直播 材料 QQ直播步骤 其他问题 使用蓝墨云班课加强学习效果 教材问题 我的直播-小学生硬笔书法基础 我的直播 - C程序 ...
- 对象的上转型和下转型 (instanceof关键字)
1.对象的上转型,就是多态的一种写法 格式:父类名称 对象名 = new 子类名称(): Animal animal = new Cat(); 含义:右侧创建一个子类对象,把它当作父类来使用 向上转型 ...