guoxiangyang110 / iOSSDKDemo

从CPU架构到 Xcode8 创建 framework 那些事儿

Home Page:http://www.jianshu.com/p/4a66489f565e

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

iOSSDKDemo

楔子

framework只暴露少许接口却能实现强大功能,简直把封装做到了极致。本文以Xcode8.3.3为工具,介绍怎么简洁有效的新鲜出炉一个热乎的framework。顺带给看官朋友们赠送了CPU架构和lipo操作静态包的点心,希望合乎大家口味。

本文已同步到博客 从CPU架构到 Xcode8 创建 framework 那些事儿

知识点

大家都知道计算机CPU又称**处理器,X86和ARM两种架构几乎是当今世界CPU类型的两大王者。

  • X86

X86是英特尔Intel首先开发制造的一种微处理器体系结构的泛称,包括Intel8086、80186、80286、80386以及80486以86结尾系列,英特尔**整个CPU产业链长达数十年,是PC端当之无愧的王者。使用的是复杂指令集。

  • ARM

ARM(Advanced RISC Machines)公司是苹果、Acorn、VLSI、Technology等公司的合资企业。ARM采用将芯片的设计方案授权(licensing)给其他公司生产的模式,在世界范围结成了超过100个的合作伙伴(Partners),将封闭设计的Intel公司变成全民公敌。现在几乎所有的智能手机CPU 都是 采用 ARM架构,Apple的A系列处理器也是在ARM结构之上的。ARM在便携式设备的地位也是无人能及。ARM用的是精简指令集。

欲知详情,且看这篇文章:ARM与X86 CPU架构对比区别


认真看看下面列表,认真看看下面列表,认真看看下面列表,回过头来再看。

CPU架构 对应设备
armv6 iPhone, iPhone2, iPhone 3G, 第一代、第二代iPod Touch
armv7 iPhone 3GS,iPhone 4,iPhone 4S, iPad ,iPad 2,iPod Touch 3G,iPod Touch 4
armv7s iPhone 5,iPhone 5c, iPad4
arm64 iPhone 5S,iphone6,iphone6plus,iPhone6s,iPhone6s Plus,iPhone7,iPhone7 Plus, iPad Air
i386 Mac上跑32位模拟器
x86_64 Mac上跑64位模拟器

terminal lipo命令 有兴趣的同学可以戳这篇文章: lipo命令

lipo 用途
** lipo -create [真机包路径] [模拟器包路径] -output [合并包输出路径] ** 合并静态包
** lipo -thin [合并包路径] -output [拆分包路径] ** 拆分静态包
** lipo -info [包路径] **  查看包信息

干货

1. 创建一个 iOS framework 项目

打开Xcode,选中** iOS-->Cocoa Touch Framework ** 创建framework

SDK信息

2. 配置framework各项编译参数

2.1. 适配最低iOS SDK 版本

PROJECT SDK

TARGET SDK

2.2. Build Settings设置

1.添加armv7s 适配iPhone5、iPhone 5c Xcode6后,默认不支持armv7s,需要选择是否支持armv7s 

添加armv7s.png

2.设置编译打包时支持所有版本

Build Active Architecture Only 设置为NO

打包所有版本.png

3.链接设置 ** 选择工程文件>target>Build Setting>linking**

项目 作用
** Mach-O Type ** ** Static Library ** framework可以是动态库也可以是静态库,系统的framework是动态库,用户制作的framework只能是静态库
** Dead Code Stripping ** ** NO** 现在设置为YES似乎也行
** Link With Standard Libraries ** NO 避免重复链接

静态设置.png

4.添加 UIKit

用到UIKit框架内容的需要将UIKit框架添加进去一起打包,否则framework建成之后相关部分会出现问题,此处特别需要注意

添加UIKit.png

5.设置公开权限 设置公开和非公开的文件,也就是framework里headers文件夹下显露的文件 TARGET-->Build Phases-->headers

设置暴露文件.png

设置SDK公开的头文件,使用时只需引入#import <MySDK/MySDK.h>即可

设置暴露头文件.png

3. 编译生成framework

3.1. 编译

command+B 选择Generic iOS Device或一部真机,Build在真机上跑的包

编译真机对应的包

command+B 选择任一模拟器,Build在模拟器上跑的包

编译模拟器对应的包

3.2. 合并

在terminal用命令行合并两个包,使framework同时适用于真机和模拟器 先找到之前build的framework

找到生成framework.png

生成的真机包路径:Debug-iphoneos-->MySDK.framework-->MySDK 生成的模拟器包路径:Debug-iphonesimulator-->MySDK.framework-->MySDK

找到生成的包.png

terminal 执行合并命令,指定目录生成合并包 ** lipo -create [真机包路径] [模拟器包路径] -output [合并包输出路径] **

bogon:~ guoxiangyang$ lipo -create /Users/guoxiangyang/Library/Developer/Xcode/DerivedData/MySDK-dnpdqcirtujccudetmplklzdxttf/Build/Products/Debug-iphoneos/MySDK.framework/MySDK  /Users/guoxiangyang/Library/Developer/Xcode/DerivedData/MySDK-dnpdqcirtujccudetmplklzdxttf/Build/Products/Debug-iphonesimulator/MySDK.framework/MySDK  -output /Users/guoxiangyang/Desktop/Test/text/MySDK

terminal 执行命令,查看合并包的信息,支持 armv7 armv7s i386 x86_64 arm64,符合各真机及模拟器的要求

bogon:~ guoxiangyang$ lipo -info /Users/guoxiangyang/Desktop/Test/text/MySDK
Architectures in the fat file: /Users/guoxiangyang/Desktop/Test/text/MySDK are: armv7 armv7s i386 x86_64 arm64
3.3. 组合framework

用输出的MySDK替换掉前面Debug-iphoneos中framework中的MySDK 将做好的framework直接拖入要使用的工程中

然后直接引入开放头文件即可

#import <MySDK/MySDK.h>

他山之石

本文特别感谢包括并不限于以下优秀文章: iOS开发:Framework的创建 ios开发:Xcode8制作framework及使用

About

从CPU架构到 Xcode8 创建 framework 那些事儿

http://www.jianshu.com/p/4a66489f565e


Languages

Language:Objective-C 100.0%