1.新建一个静态库工程.

file→ new→ project, 弹出框中选择iOS→ framework & library中的cocoa touch static library.点击Next,输入product name: TestFramework, 点击Next→ 点击Create.

2.删除向导所生成工程中的Target.

点击工程名→ 点击TARGETS → 右键Delete.

3.增加一个新的Target.

点击Target底部的"+"号,弹出框中选择OS X→ Framework & Library中的Bundle.点击Next,输入product name TestFramework, 点击Finish.

4.修改新建 Target 的 Building Settings 项.

a: 选中TARGET→ Build Settings项, 将Architectures→ Base SDK 改为Latest iOS(iOS 9.0), 将Architectures 改为 $(ARCHS_STANDARD);

b: 在 Deployment项, 选中"Mac OS X Deployment Target", 点击键盘上的Delete键, 将“Targeted Device Family”改成"1,2";

c: 在 (null) - Deployment项, 修改"iOS Deployment Target"为"6.0",同时修改PROJECT的info下的Deployment Target → "iOS Deployment Target"为"6.0";

d: 在Linking项, 将"Dead Code Stripping" 改为"NO", "Link With Standard Libraries" 改为 "NO", 将 "Mach-O Type" 改为"Relocatable Object File";

f: 在Packing项, 将"Wrapper Extension" 改为 "framework";

5.修改 Target 的 Info 项.

点击Info, 将 "Bundle OS Type code" 改为 "FMWK"

6.将要写入静态库的源码文件拖入工程目录, 这里以一个简单的语句输出作为例子

Command+N 新建一个cocoa Touch class, 名字为TestLog, 点击Next, 点击create;

TestLog.h代码如下:

[objc]view plaincopy

#import

@interfaceTestLog : NSObject

- (void)TestLog;

@end

TestLog.m代码如下:

[objc]view plaincopy

#import"TestLog.h"

@implementationTestLog

- (void)TestLog

{

NSLog(@"这里是静态库输出日志\\n");

}

@end

7.删除TestFramework.m, 修改TestFramework.h内容如下:

[objc]view plaincopy

#ifndef TestFramework_h

#define TestFramework_h

#import

#endif

8.暴露Headers供外部项目调用接口.

选中Target下的Build Phases, 点击左上角"+"号→ "New Headers Phase", 展开Headers, 点击左下角"+", 选择"TestFramework.h"和"TestLog.h"→ 点击add, 将这两个头文件拖动到上方Public下.

9.然后分别在iOS Device 和 iOS Simulator 下编译.

在Window→ Projects中左边选择TestFramework工程, 点击右边的Derived Data右边的箭头,打开Finder, 在../Build/Products目录下有真机和模拟器生成的TestFramework.framework

10.合并Framework.

打开终端, 输入:

cd /Users/android/Library/Developer/Xcode/DerivedData/TestFramework-aainjryhnvupalarkmoushxwuwdr/Build/Products, 回车;

可以输入lipo -info XXX 来查看库的信息, armv7 arm64的是真机, X86_64的是模拟器;

输入命令:

lipo -create /Users/android/Library/Developer/Xcode/DerivedData/TestFramework-aainjryhnvupalarkmoushxwuwdr/Build/Products/Debug-iphoneos/TestFramework.framework/TestFramework /Users/android/Library/Developer/Xcode/DerivedData/TestFramework-aainjryhnvupalarkmoushxwuwdr/Build/Products/Debug-iphonesimulator/TestFramework.framework/TestFramework -output NewTestFramework

在Products目录下会生成一个NewTestFramework的文件, 将该文件拷贝覆盖TestFramework.framework目录下的TestFramework文件, 新的TestFramework.framework就是真机和模拟器通用的framework.

创建一个framework相关推荐

  1. C#创建一个Windows Service

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

  2. WCF技术剖析之三十二:一步步创建一个完整的分布式事务应用

    在完成了对于WCF事务编程(<上篇>.<中篇>.<下篇>)的介绍后,本篇文章将提供一个完整的分布式事务的WCF服务应用,通过本例,读者不仅仅会了解到如何编程实现事务 ...

  3. 创建一个强名称密钥文件+ 如何在 Visual C# .NET 中将程序集安装到全局程序集缓存中...

    创建强名称密钥文件 单击"开始",依次指向"程序"."Microsoft Visual Studio 2005"."Visual ...

  4. SilverLight学习笔记--如何在xaml文件中操作用户在后台代码定义的类(2)--示例篇:创建一个登录控件(原创)(转载本文请注明出处)...

    本文将示例如何运用前篇所写知识来建立一个用户自定义的登录控件.此控件界面非常简单,主要涉及的知识点是:   如何创建用户控件(包括对此控件的自定义事件和属性的编写,此处我们将创建一个名为LoginBo ...

  5. tensorflow1.11.0 tf.constant()函数(创建一个常数张量)

    tf.constant tf.constant(value,dtype=None,shape=None,name='Const',verify_shape=False ) Defined in ten ...

  6. 创建一个dynamics 365 CRM online plugin (一) - Hello World Plugin

    源代码连接:https://github.com/TheMiao/Dynamics365CRM/blob/master/MyCRM/MyCRM/HelloWorld.cs 首先,我们需要创建一个.NE ...

  7. 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包

    MSBuild 的 Task 为我们扩展项目的编译过程提供了强大的扩展性,它使得我们可以用 C# 语言编写扩展:利用这种扩展性,我们可以为我们的项目定制一部分的编译细节.NuGet 为我们提供了一种自 ...

  8. 利用记事本创建一个ASP.NET Core RC2 MVC应用

    步骤一.安装最新的.NET Core SDK 我们可以根据自身的操作系统环境从https://github.com/dotnet/cli上下载.NET Core最新的SDK,这个SDK包含.NET C ...

  9. 使用PHP创建一个REST API(Create a REST API with PHP)

    译者前言: 首先这是一篇国外的英文文章,非常系统.详尽的介绍了如何使用PHP创建REST API,国内这方面的资料非常非常的有限,而且基本没有可操作性.这篇文章写的非常好,只要对PHP稍有了解的程序员 ...

最新文章

  1. 图像、视频生成大一统!MSRA+北大全华班「女娲」模型怒刷8项SOTA,完虐OpenAI DALL-E...
  2. Ubuntu下使用Evernote
  3. [工具]Mac下非常好用的快捷终端Dterm
  4. 生产过程中计算机软件的确认--简述医疗器械生产过程确认
  5. python一个函数调用另一个函数的返回值_在python函数中使用True,False和None作为返回值...
  6. C#中new的用法,及与override的区别
  7. 电信光猫该怎么同时连接三个路由器?
  8. UVA1368 UVALive3602 ZOJ3132 DNA Consensus String【贪心】
  9. SQL Server-【知识与实战VIII】触发器(下)
  10. 大型网络游戏服务器的框架设计
  11. javascript鼠标效果
  12. java的三种流程控制语录_Java 流程控制语句
  13. 统信UOS系统连接Windows共享的打印机(飞腾2000CPU)
  14. java 在线画布_使用canvas制作在线画板
  15. Typora主要常用快捷键
  16. :Java+MySQL基于ssm的餐厅饭店前台点菜订餐系统vue
  17. Dragonfly 应用-如何计算面孔隙率
  18. 对话杨宁:巨头搞不成区块链,落地的最大阻碍是“习惯”
  19. 为效率而生:开源Mac版Google Authenticator认证客户端GoldenPassport
  20. 怎么一键拼图多张照片?快来码住这些拼图方法

热门文章

  1. CMakeList下打印log
  2. WebKit Layout 数据结构
  3. Android Canvas 图形绘制
  4. win10 cortana 搜索无效怎么解决
  5. opencv多线程显示的问题和解决方法
  6. Java单链表反转 详细过程
  7. OCR算法识别率怎么评估?
  8. spring的AOP配置之@注解方式
  9. 剑指Offer——不用加减乘除做加法
  10. iOS 后台返回json解析出现的null的解决办法