iOS使用workspace开发framework以及集成coc
一、workspace相当于项目管理工具,创建workspace形成的文件是.xcworkspace。
1、首先创建一个文件夹,例如CXFrameWork

2、使用xcode创建workspace并放入CXFrameWork文件夹内,如图
选择File → new→Workspace →编辑 → 点击save


这时候文件夹中就多了 CXFrameWork.xcworkspace 文件

3、打开 CXFrameWork.xcworkspace 分别创建app和framework两个项目并添加到 CXFrameWork.xcworkspace 中,如图
app:



framework:



创建完的项目文件夹和项目层级如下图:


二、项目基本架构已经创建好,现在可以给framework设置配置:
1、设置Build Active Architecture Only 值 为NO

2、搜索Mach,设置为Static Library

3、搜索Dead Code Stripping 设置为NO

4、去除模拟器中arm64 搜索Excluded Architectures 下Any ios Simulator SDK 值为 arm64。模拟器生成的.framework 不需要arm64

5、Build Libraries for Distribution 设置为Yes (如果是swift语言的时候需要)

三、配置完成,开始编辑引用cocoa集成第三方库
1、使用终端cd 到 CXFrameWork文件夹

2、创建podfile 文件
终端 输入命令:vim Podfile,然后按i进行编辑:pod 引用格式如下:
1、指明xcworkspace名称
2、target中需要分别制定app和framework的路径
3、pod所需要的第三方库名称
4、编辑完后 按esc按键并输入:wq 按回车键保存
5、终端输入 pod install 等待家在pod资源
use_frameworks!
platform :ios, '9.0'
指明xcworkspace名称
workspace 'CXFrameWork.xcworkspace'
target 'CXFrameWorkDemo' do
这里的project要指明路径
project 'CXFrameWorkDemo/CXFrameWorkDemo.xcodeproj'
pod 'AFNetworking'
pod 'SVProgressHUD'
end
target 'CXFrameWork' do
这里的project要指明路径
project 'CXFrameWork/CXFrameWork.xcodeproj'
pod 'AFNetworking'
pod 'SVProgressHUD'
end

6、加载完成后如图所示

此时打开CXFrameWork文件夹 可以看到如图:

打开工作组就可以开始framework制作了
四、framework制作
1、首先新建一个类,例如FirstTest



2、开始引用想要的第三方头文件 例如:AFNetworking 并创建一个方法开始调用



3、将FirstTest暴露出给app调用:
在bulid Phases中找到headers 并将FirstTest.h移动到public中,然后在CXFrameWork.h中添加引用 FirstTest.h



4、开始将framework编译并在demo中使用了
首先将framework添加到CXFrameWorkDemo中



5、开始调用framework中 FirstTest.h的方法 并选择模拟器调试.
注意:此时如果不想单独编译framework 可以在 CXFrameWorkDemo 编辑添加CXFrameWork 同时编译生产 ,操作如下:
选择 CXFrameWorkDemo -》Edit Scheme →bulid 点击左下角的+ 选择CXFrameWork并添加



以上步骤操作完后就可以选择模拟器或者真机直接调试代码是否成功:
可以看到日志打印 是刚才编写的测试内容,说明framework制作成功了。


五、framework的打包给其他项目使用,有两种方式 一种使用脚本直接生产, 一种使用终端合并生成;这里暂时先讲如何使用终端打包framework
1、选择CXFrameWork工程并分别选择模拟器和真机编译



2、编译完成后选择framework路径 show in finder 可以看到如图文件:



3、使用终端命令合并framework
首先将刚刚找到的模拟器和真机的两个frmework 使用终端合并:
1、先去除模拟器和真机重复的编译环境,首先查看真机和模拟器的支持环境使用lipo -info 语句



2、此时没有发现重复的环境 真机是arm64 模拟器是x86_64,所以不用删除重复,如有遇到重复的 则使用终端语句 例如删除X86_64 ,选择其中一个删除就行(AipBase.framework/AipBase代表framework的路径)
lipo -remove x86_64 AipBase.framework/AipBase -o AipBase.framework/AipBase
3、开始合并 ;使用lipo -create xxxxx xxxxxx -output xxxxxxx
例如:

4、生成新CXFrameWork 然后将其跟真机路径中的CXFrameWork替换就生成了合并的CXFrameWork ,就可以提供给用户使用了(注意:这里的是debug环境,真是提供需要release环境)

生产release环境的合并CXFrameWork 需改一下设置后,重新选择真机和模拟器编译并重复以上合并操作即可:



framework还有bundle资源生成,后续继续更新.