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

Posted ZachRobin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 中的静态库与动态库,区别制作和使用

iOS XCode7制作.Framework动态库和.a静态库的总结

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

[Linux 高并发服务器]制作静态库与动态库

iOS 动态库+静态库

Linux下动态库和静态库制作与调用