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

楔子

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

GitHub demo 地址 https://github.com/guoxiangyang110/iOSSDKDemo

知识点

大家都知道计算机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及使用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容

  • (原文:How to Create a Framework for iOS 作者:Sam Davies 译者:Mr...
    王宪岭阅读 4,938评论 3 23
  • (原文:How to Create a Framework for iOS作者:Sam Davies 译者:Mr_...
    Yaanco阅读 2,352评论 4 5
  • 指令集 通常会把CPU的扩展指令集称为”CPU的指令集”(因为基本的,类似加减的指令似乎是必须被CPU所支持的指令...
    JimmyL阅读 4,513评论 7 10
  • 如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件。然而,这种方法并不是很优雅。它会暴露所有的实现细节...
    小热狗阅读 3,477评论 3 9
  • 原文链接在上一篇教程(中译版)中,你学到了怎么样创建一个可复用的圆形旋钮控件。然而你可能不清楚怎样让其他开发者更方...
    _冷忆阅读 2,448评论 9 5