最新要闻
- 天天通讯!索尼正在研究如何把PS5塞进桌斗里:抱着送人太沉了
- 全球热消息:广汽埃安开放18城免费充电站:两个半月 所有品牌都能充
- 环球观察:顺丰寄6.5万元爱马仕包 运输中被烧毁:官方不给事故证明
- 世界滚动:日本火山时隔5年再次活动 火山灰喷到2400米高:已3级警戒
- 天天热门:情人节礼物 三星Galaxy S23系列手机国行发布:12+1TB顶配12699元
- 焦点速读:比小米13屏幕更小!三星Galaxy S23预售:5199元起
- 精彩看点:男子情人节让老婆洗鞋 每双鞋放520元:结局够绝!钱收了鞋归位
- 邓超情人节送孙俪一盆菜 被赞深得我心:网友一句话暖心
- 全球动态:韩国民众向土耳其捐大量脏衣服引全球网友吐槽:太没品 还不如不捐
- 能用到安卓17 三星承诺Galaxy S23系统升级4代、5年安全更新
- 交管部门:等红灯时玩手机也属分心驾驶
- 焦点播报:三星Galaxy S23系列创预售新纪录 官方送福利:存储容量免费升杯
- 世界动态:成本压力让用户扛!苹果利润正下降:iPhone 15或被迫涨价
- 情人节到了 ChatGPT忙着写情书!全球30%男性想用AI写情书
- 环球快看点丨男子情人节前点歌:外卖员上门唱一曲《老婆辛苦了》 妻子破防
- 世界今亮点!手机汽车深度互联:魅族新专利可用汽车呼吸灯提示手机信息
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
创建.a静态库, framework静态库
(资料图)
在APP项目中使用的静态库有两种,一是.a静态库,另一种是framework静态库。下面分布介绍这2中静态库的创建过程,以及通过脚本工具做自动化打包的2种方式。.a静态库生成.a文件1.创建一个Static Libaray工程2.将项目文件和资源文件(切图,xib等)导入到SDK制作工程中3.在Build Phases项目下,添加New Header Phases, 在Header阶段内添加静态库里的.h头文件,把需要暴露外面的放到public下面(包括:SDK的集成h文件和包含的内部h文件)。bundle文件4.静态库打包bundle文件,这里把静态库中需要的png,xib打包进去。在Targets下点击“+”,增加新的bundle target。从macOS下现在Bundle工程。因为iOS下没有这个项目5.选中bundle target项目下的Build Phases Tab项 ,然后选择Copy Bundle Resources, 把SDK项目里的xib, png放到其中。6.选中bundle target项目下的Build Settings Tab项,设置Base SDK 为 iOS, 设置COMBINE_HIDPI_IMAGES为NO,否则Bundle中的图片会变成tiff格式,设置Skip install为YES,删除Installation Directory对应的值7.运行xcode项目,生成产物bundle文件和.a文件, 默认在目录~/Library/Developer/Xcode/DerivedData下8.从中复制出libStaticLib.a文件,StaticLibResource.bundle,和所有暴露的.h头文件导入到项目中使用(在移动到APP项目时,.a和.bundle文件会自动添加到General->Frameworks,Libraries,and Embedded Content)。9.合并静态库真机和模拟器文件
lipo -create XXX/模拟器.a路径 XXX/真机.a路径 -output 合并后的文件名称.alipo -create \~/Library/Developer/Xcode/DerivedData/StaticLib-hhthxcjblbfkvzcguwyduhlkkvei/Build/Products/Debug-iphoneos/libStaticLib.a \~/Library/Developer/Xcode/DerivedData/StaticLib-hhthxcjblbfkvzcguwyduhlkkvei/Build/Products/Debug-iphonesimulator/libStaticLib.a \-output ~/Desktop/app/libStaticLib.a10.APP中对资源文件的读取要指定对应的bundle,写名bundle的名称。framework静态库生成如果APP项目和SDK项目都使用了pod第三方库,那么podfile文件设置如下:
# App项目的Podfile文件target "StaticFramework" do# Comment the next line if you don"t want to use dynamic frameworks use_frameworks! # Pods for StaticFramework pod "FMDB"end# SDK项目的Podfile文件target "StaticFramework" do# Comment the next line if you don"t want to use dynamic frameworks use_frameworks! # Pods for StaticFramework pod "FMDB"endpost_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings["ENABLE_BITCODE"] = "NO" end endend1.创建一个Static Framework工程2.将项目文件和资源文件(切图,xib等)导入到Framework制作工程中3.Build Phases阶段 修改移动Header阶段内添加静态库里的.h头文件,把需要暴露外面的放到public下面(包括:SDK的集成h文件和包含的内部h文件)。检查Copy Bundle Resources 阶段,查看png,xib等资源文件是否在里面,查看Compile Sources中编译.m文件是否都在里面,查看Link Binary With Libaray下需要链接的其他静态库库是否都在里面。4.Build Settings 修改, 搜索linking进行链接过程设置
Dead Code Stripping 设置为NO,完全包含framework里的代码,拒绝剪裁,修改。Link With Standard Libraries 设置为关闭,避免重复链接Mach-O Type设置为Static Library framework可为动态库也可为静态库,对于用户来说只能选择静态库。Build Active Architecture only 设置为Yes, 使其编译时只生成当前机器的架构。
5.framework合并
lipo -create xxxx/ProjectName.framework/ProjcetName xxxx/ProjectName.framework/ProjcetName -output xxxx/ProjectName.frameworklipo -create \~/Library/Developer/Xcode/DerivedData/StaticFramework-cjzeucukluzhhscxruhakzuohbtp/Build/Products/Debug-iphoneos/StaticFramework.framework/StaticFramework \~/Library/Developer/Xcode/DerivedData/StaticFramework-cjzeucukluzhhscxruhakzuohbtp/Build/Products/Debug-iphonesimulator/StaticFramework.framework/StaticFramework \~/Library/Developer/Xcode/DerivedData/StaticFramework-cjzeucukluzhhscxruhakzuohbtp/Build/Products/Release-iphoneos/StaticFramework.framework/StaticFramework \~/Library/Developer/Xcode/DerivedData/StaticFramework-cjzeucukluzhhscxruhakzuohbtp/Build/Products/Release-iphonesimulator/StaticFramework.framework/StaticFramework \-output ~/Desktop/app/StaticFramework.framework在SDK项目的target中加脚本做framework半自动打包由于每次合并都要打开终端,执行lipo命令是很麻烦的,这里使用xcode提供的工具,编译阶段执行脚本,自动进行合并。在SDK项目的target中加脚本做framework自动合并,不同架构的framework要自己手动运行项目生成。在SDK项目下,依次进行点击Project -> Targets -> Build Phases + -> New Run Script Phases
# Type a script or drag a script file from your workspace to insert its path.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通过新建aggregate合计工程做framework脚本完全自动合并1.创建aggregate项目,添加Targets下面的“+”, 选择other -> aggregate项目,进行创建。2.在aggregate项目下,依次进行点击Project -> Targets -> Build Phases + -> New Run Script Phases, 在里面添加执行脚本3.运行项目,生成framework
# 取得项目名字(get project name)FMK_NAME=${PROJECT_NAME}# 取得生成的静态库文件路径 (get framework path)INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework# 设置真机和模拟器生成的静态库路径 (set devcie framework and simulator framework path)WRK_DIR=${BUILD_ROOT}DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.frameworkSIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework# 模拟器和真机编译 (device and simulator build)xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean buildxcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build# 删除临时文件 (delete temp file)if [ -d "${INSTALL_DIR}" ]thenrm -rf "${INSTALL_DIR}"fimkdir -p "${INSTALL_DIR}"# 拷贝真机framework文件到生成路径下 (copy device file to product path)cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"# 合并生成,替换真机framework里面的二进制文件,并且打开 (merger and open)lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"echo "${DEVICE_DIR}/${FMK_NAME}"echo "${SIMULATOR_DIR}/${FMK_NAME}"rm -rf "${WRK_DIR}"echo "${INSTALL_DIR}"参考文章:https://www.jianshu.com/p/bf1cc6ac7d17https://www.jianshu.com/p/583ca50ee5b3
关键词: 项目文件
-
环球资讯:Android JetPack~ DataBinding(数据绑定)(一) 集成与使用
近期将会梳理一下JetPack全家桶的使用,包括DataBinding,Room,ViewModel,LiveData,Navigation等。本...
来源: 创建.a静态库, framework静态库
环球资讯:Android JetPack~ DataBinding(数据绑定)(一) 集成与使用
天天通讯!索尼正在研究如何把PS5塞进桌斗里:抱着送人太沉了
全球热消息:广汽埃安开放18城免费充电站:两个半月 所有品牌都能充
环球观察:顺丰寄6.5万元爱马仕包 运输中被烧毁:官方不给事故证明
期末复习——网络层
今日报丨chatgpt的时代,先用gpt3来做一个哪里都可以接入的代码吧
观焦点:《分布式技术原理与算法解析》学习笔记Day11
世界滚动:日本火山时隔5年再次活动 火山灰喷到2400米高:已3级警戒
Vue 插值语法与指令系统
全球要闻:「CSP-J2020」 直播获奖 —— 桶排序例题
面向老师的单机版“数学系统math”
自学前端最容易犯的10个的错误,新手学前端快来看看
天天热门:情人节礼物 三星Galaxy S23系列手机国行发布:12+1TB顶配12699元
焦点速读:比小米13屏幕更小!三星Galaxy S23预售:5199元起
精彩看点:男子情人节让老婆洗鞋 每双鞋放520元:结局够绝!钱收了鞋归位
邓超情人节送孙俪一盆菜 被赞深得我心:网友一句话暖心
全球动态:韩国民众向土耳其捐大量脏衣服引全球网友吐槽:太没品 还不如不捐
当前快播:白嫖一个WebAPI限流解决方案
音乐 APP 用户争夺战,火山引擎 VeDI 助力用户体验升级!
能用到安卓17 三星承诺Galaxy S23系统升级4代、5年安全更新
交管部门:等红灯时玩手机也属分心驾驶
焦点播报:三星Galaxy S23系列创预售新纪录 官方送福利:存储容量免费升杯
世界动态:成本压力让用户扛!苹果利润正下降:iPhone 15或被迫涨价
情人节到了 ChatGPT忙着写情书!全球30%男性想用AI写情书
环球快看点丨男子情人节前点歌:外卖员上门唱一曲《老婆辛苦了》 妻子破防
世界今亮点!手机汽车深度互联:魅族新专利可用汽车呼吸灯提示手机信息
全球今热点:《满江红》周边下架:设计公司3人参保
奇瑞艾瑞泽8遭车主集体投诉:A柱漏风 车速超60km/h车内呼呼呼
曝马斯克有意45亿英镑收购曼联 卡塔尔财团也准备要约
快资讯丨下载某乎专栏文章并存为markdown
当前播报:ChatGPT写代码水平惊艳到我,很性感但有点危险
记录--前端实现登录拼图验证
《满江红》周边取消众筹:产品设计创意与网友理解存在偏差
蓝海市场不再!2022中国游戏产业报告发布:收入、用户规模下降明显
养生必备 青海正宗特优级头茬红枸杞500克18.9元大促
重点聚焦!从全屏广告到订阅付费 互联网模式为收割“韭菜”群魔乱舞
天天百事通!少林寺宣布与百度合作:接入百度版ChatGPT“文心一言”
什么是Python装饰器?
焦点要闻:kubeadm的部署+Dashboard+以及连接私有仓库 Harbor
linux 基础(9)背景工作管理
从一次有趣的漏洞分析到一个有趣的PHP后门
当前动态:9 种跨域方式实现原理
观天下!特定领域知识图谱融合方案:学以致用-问题匹配鲁棒性评测比赛验证【四】
全球视点!除了ChatGPT,还能用什么计划管理软件提高效率?
旋转数组中的最小数字
今亮点!高效节能 | 智慧灯杆综合管理解决方案
全球百事通!各个编程语言的优缺点,你适合哪种?
当前视讯!美国18轮货车与一列火车相撞:致16节车厢出轨
23999元起 雷蛇新款灵刃18上架:可选RTX 4060/4070
全球滚动:老人直播间相亲多起来了 成不成就在三五分钟:网络红娘介绍对象
天天新资讯:上市三天狂揽1.5万订单 比亚迪秦PLUS DM-i有多火:店内水泄不通
苹果iOS 16.3.1修复多个错误:但Bug依旧存在
为SQL Server配置连接加密
天天短讯!什么是卷积
陕西现聚落遗址 西周墓葬有43个殉人!国内迄今最多
环球资讯:周黑鸭业绩大降超90% 绝味等也难过:不断涨价 年轻人越来越吃不起鸭脖
杰克琼斯1.8折大促:卫衣/针织衫79元起、牛仔裤119元起发车
世界动态:UP主欲沿大运河从杭州划船到北京 5公里后就被拦截
二维数组中的查找
全球信息:数学知识1.4
关于工具软件:Apipost和Apifox哪个更好用看这篇就够了
全球最资讯丨浪漫之极!杭州地铁口等地现玫瑰瀑布:情人节鲜花卖到1200元
全球快报:业务与研发一体化最佳突破口在何处?
快讯:Unity 转小游戏
环球热讯:基于开源IM即时通讯框架MobileIMSDK:RainbowChat v8.4版已发布
世界快播:Linux输入设备驱动
微资讯!壮观!马斯克星链卫星驶过西班牙夜空:宛若空中列车
【世界聚看点】小学生满分作文跑题老师含泪打5分:把“悔”看成“梅”
环球热资讯!特斯拉京东旗舰店开业:269元的U盘上架
首发16.2元:《仙剑奇侠传7》DLC《人间如梦》正式上线
ChatGPT版必应发飙!怒斥人类:放尊重些
天天快播:IM通讯协议专题学习(九):手把手教你如何在iOS上从零使用Protobuf
ChatGPT注册试用过程分享
全球观察:响应式圣经:10W字,实现Spring响应式编程自由
全球短讯!Unicorn 初探
7万起售 五菱缤果内饰官图发布:同级无敌手
世界上最轻VR头显面世:仅重127克 5K分辨率
环球新消息丨苹果汽车奇瑞造?“果链一哥”立讯与奇瑞签署合作 联手造车
当前动态:法拉第未来:预计FF 91将于4月底交付 但有个前提
不用第三方插件了:微软计划为Edge加入鼠标手势功能
qq空间主人寄语怎么删除?qq空间主人寄语大集合
开学的歌曲有哪些?开学的趣事作文模板
熟悉的人是什么意思?关于我最熟悉的人作文合集
皮脂腺分泌旺盛是什么原因?皮脂腺分泌旺盛怎么解决?
代表月亮消灭你是什么意思?代表月亮消灭你是谁的经典台词?
天天亮点!【AI】PTP时钟同步在智能驾驶系统里的重要性
天天微资讯!去掉Element 中el-input type=number时尾部上下箭头、禁用鼠标滚动
世界热点评!数组中找出只出现一次的两个数字
剑灵活力值在哪里显示?剑灵活力值怎么恢复?
ie图标不见了是怎么回事?ie图标不见了怎么恢复?
闪存和硬盘哪个重要?闪存和硬盘有什么区别?
料理机是干什么用的?料理机品牌十大排名
光纤路由器怎么设置?光纤路由器和宽带路由器一样吗?
速看:口味地道 丰富配料!渣渣灰南昌拌粉好价:4.9元/盒
全球新资讯:129元!小米2C1A三口GaN充电器上架:最高67W 兼容65W PD
天天信息:3秒俱乐部成员!极氪X官图公布:2750mm轴距百变魔方空间
63岁老人喝隔夜牛肉汤:结果住进ICU
黑龙江上空现不明飞行物速度极快 网友脑洞大开:LED风筝?
今日报丨程序员健康最佳作息表,建议收藏!!