关于打包frameWork

以前公司比较纯粹,做自己的研发而已,当时当各种需求不那么纯粹时,你可能需要各种尝试,mark打包frameWork

想把一个功能完整的模块,打包成frameWork分割开来,首先,打开Xcode,file-->new-->workSpace,新建一个工作空间

创建完成后,把他放在,桌面提前建好的文件夹

第二步,创建frameWork,


创建好frameork

此时需要做相关设置



第一步设置



第二步设置


第三步设置

设置完以上步骤后


把要暴露的文件放在public


暴露在外的文件,放在.h中

注意细节问题,比如info中的development Target最好和要融合的项目保持一致,一些不支持的ARC的第三方库,要配置支持ARC

打开终端,到该framework路劲,用cocoapod加入要打包的代码需用的第三方库,添加成功之后,重新用workspace打开SDK

把要封装的代码,放入SDK项目中,commend+b后在product中,生成对应的framework

遇到的报错:

invalid iOS deployment version '--target=i386-apple-ios13.0-simulator', iOS 10 is the maximum deployment target for 32-bit targets


解决方案:

图中设置修改为如图standard

如果需要完整的融合,可能还涉及到要打包bundle资源文件,bundle打包步骤如下

新建project,xcode-->file-->new-->project

选macOS下的bundle


bundle

bundle创建之后设置相关配置如下图





设置完成

把需要打包的xib 图片等文件,放到该bundle中

分别选择ios 设备 和模拟器,commend+b 在product中看见两个版本的bundle文件

生产bundle资源文件后,对于xib 以及图片资源的引用,需要注意修改NSString* bundlePath = [[NSBundle mainBundle]pathForResource: @"MyBundle"ofType:@"bundle"];

NSBundle*resourceBundle = [NSBundle bundleWithPath:bundlePath];

图片获得bundle中的资源

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"SourcesBundle" ofType:@"bundle"];

NSString *imgPath= [bundlePath stringByAppendingPathComponent:@"xxx"];


可能出现的问题,

第一:重复问题,模块化的代码,打包后,可能和融合的项目中代码重复,尤其注意类别代码,报连接错误时,注意看一下错误上下文一般会提示重复的文件类

第二:缺失第三库库文件问题,打包的项目里可能存在的第三方库,需要在当前项目用同样的方式,比如cocoapod引入

第三:注意第三方API中的framework及bundle资源文件的添加

细节问题,因人而异不在赘述,打卡,Mark!


关于真机包和模拟器包合并

1、首先在在连接真机的情况下编译出一个版本,show in finder可见

2、再次选中模拟器编译一个版本,编译成功之后 show in finder可见

3、 输入 lipo -info加真机上的FW中二进制文件的路径,回车,最后得到的arm64说明是真机

输入lipo -info加模拟器FW中二进制文件的路径,回车,最后得到的i386 x86_64说明是模拟器

4、lipo +空格+ _create+空格+framewrok下二进制文件的目录+空格+同样真机framework目录下二进制文件的目录+ -output + 空格 + 同样真机framework目录下二进制文件的目录


例如:lipo -create /Users/yonyou/Desktop/10.22号合并FW/真机/YYOUPatProject.framework/YYOUPatProject /Users/yonyou/Desktop/10.22号合并FW/模拟器/YYOUPatProject.framework/YYOUPatProject -output /Users/yonyou/Desktop/10.22号合并FW/真机/YYOUPatProject.framework/YYOUPatProject 

合并出来的包,就是真机FW目录下的framwork了。根据上述,由于输出的文件路径直接放在了真机FW的文件路径中,所以此时原来只支持真机的FW已经被替换,可以同时支持模拟器和真机,直接放在项目中使用即可。


注意-output在哪个文件夹路径下,最后合并的二进制文件就在哪个路径下

最后需要用合并的二进制文件替换原来真机或者模拟器framework下面的二进制文件,才是最后合成适用真机和模拟器的合并包。

如果出现:have the same architectures (arm64) and can't be in the same fat output file问题,

XCode12之前:

编译模拟器静态库支持i386 x86_64两架构

编译真机静态库支持armv7 arm64两架构

使用lipo -create -output命令可以将两个库合并成一个支持模拟器和真机i386 x86_64 armv7 arm64四种架构的胖子库。

XCode12编译的模拟器静态库也支持了arm64,导致出现真机库和模拟器库不能合并的问题。

解决办法:

Build Settings -> Excluded Architectures里按照这样设置一下,再编译合并就不会报错了


如图设置

合并真机及模拟器包的另一种方法 

选择项目的该位置


在Run Script中添加如下代码,添加完成之后,分别选择模拟器,和真机,再次cmd+B,成功之后,会自动弹出,对应路径的打好包的SDK,直接使用即可.

if["${ACTION}"="build"]

then

INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework

DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework

SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework

# 如果真机包或模拟包不存在,则退出合并

if[ ! -d"${DEVICE_DIR}"] || [ ! -d"${SIMULATOR_DIR}"]

then

exit 0

fi

# 如果合并包已经存在,则替换

if[ -d"${INSTALL_DIR}"]

then

rm -rf"${INSTALL_DIR}"

fi

mkdir -p"${INSTALL_DIR}"

cp -R"${DEVICE_DIR}/""${INSTALL_DIR}/"

# 使用lipo命令将其合并成一个通用framework 

# 最后将生成的通用framework放置在工程根目录下新建的Products目录下 

lipo -create"${DEVICE_DIR}/${PROJECT_NAME}""${SIMULATOR_DIR}/${PROJECT_NAME}"-output"${INSTALL_DIR}/${PROJECT_NAME}"

#合并完成后打开目录

open"${SRCROOT}/Products"

fi

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

推荐阅读更多精彩内容