iOS制作framework_ios framework-程序员宅基地

技术标签: framework  随笔  SDK  ios  

ios自定义.framework .framework可以制作为静态库和动态库,此文章是制作静态库。系统的.framework都是动态库,自己制作的.framework都是静态库。

如何制作.framework如下:

1.用xcode创建一个framework工程,如下图

2.编写自己的工具类。如下图

3.设置Build Active Architecture Only 值 为NO。如下图(适配所有版本的模拟器和真机)

4.设置Mach-O Type值为Static Library(静态库)。如下图

5.将你需要别人引用的头文件设置public。默认在project(不可见,私有)。

6.引入头文件,有几个public 就引入几个public文件

 

7.创建Target。File->New->Target->Other->Aggregate。如下图

 

8.添加脚本。如下图

9.下面的脚本代码复制到新建的 Run Script. 如下图

#!/bin/sh
#要build的target名
TARGET_NAME=${PROJECT_NAME}
if [[ $1 ]]
then
TARGET_NAME=$1
fi
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/Products"

#创建输出目录,并删除之前的framework文件
mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}"
rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"

#分别编译模拟器和真机的Framework
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build

#拷贝framework到univer目录
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}"

#合并framework,输出最终的framework到build目录
lipo -create -output "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework/${TARGET_NAME}"

#删除编译之后生成的无关的配置文件
dir_path="${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/"
for file in ls $dir_path
do
if [[ ${file} =~ ".xcconfig" ]]
then
rm -f "${dir_path}/${file}"
fi
done
#判断build文件夹是否存在,存在则删除
if [ -d "${SRCROOT}/build" ]
then
rm -rf "${SRCROOT}/build"
fi
rm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos"
#打开合并后的文件夹
open "${UNIVERSAL_OUTPUT_FOLDER}"

 

 10.切换Scheme,CusFrameWork 设置Excluded Architectures下的 Any ios Simulator SDK 值为 arm64。(模拟器生成的.framework, 不需要arm64架构)。如下图 切记taget不要看错了。

 11.Scheme:CusFrameWork, 设置编译模式 release。如下图

12.设置.framework的最低版本,如下图

 

13.Schem: CusFrameWork. 选择真机,command+b 生成真机.framework。如下图

14. Schem: CusFrameWork. 选择模拟器,command+b 生成真机.framework。如下图

 

13.切换Schem:Aggregate, 选择 any ios device, command+B 编译运行脚本,脚本会自动打开文件夹 如下图

 

14.测试引入.framework. 新建一个项目TestCusFrameWork. 将13步骤中的CusFrameWork.framework文件夹 放到此项目中的根目录中。然后引入。如下图

 15.在TestCusFrameWork使用自己制作的SDK 并运行,成功打印。如下图

完结 OK 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dingqk/article/details/124535948

智能推荐

Nginx配置gzip压缩,提高网站访问速度_nginx 图片压缩-程序员宅基地

文章浏览阅读1.3k次。Nginx配置gzip压缩,提高网站访问速度_nginx 图片压缩

linux gbk putty 乱码,三个设置解决Putty登陆Linux同时支持GBK与UTF-8编码乱码的问题...-程序员宅基地

文章浏览阅读286次。三个设置解决Putty登陆Linux同时支持GBK与UTF-8编码乱码的问题UTF8的环境设置为putty的设置:1.Windows->Appearance->font setting->Fixedsys(这个字体好看,选其它中文字体也可以)2.Windows->translation->font->UTF-8,登陆上去linux后系统的设置:(如果你系统默认的..._putty不支持gbk

winedt 自动换行_winedt状态栏-程序员宅基地

文章浏览阅读2.9k次。今天在写文章的时候,忽然发现winedt无法自动换行了,也不知道是按了什么组合键还是什么,同时行号变成了10 20 30... 这样的显示在网上看帖子,说只要点亮主界面 wrap 图标就可以了,找了半天也没找到,就想上网搜一搜图片,搜了好久才找到一张有这个图标的,发现是自己的view 选项没有勾选 status。至于行号那个,直接去设置里appearance有一个每十行显示_winedt状态栏

FTP上传大文件时连接重置或者中断,重新连接上传也出现同样情况处理办法_sftp大文件传输中断-程序员宅基地

文章浏览阅读5.5k次。上传大文件的时候经常连接被重置或者中断,重新连接上传出现同样错误,具体错误如下图所示:原因:机房防火墙设置了tcp空闲5分钟中断,如果使用被动模式上传较大的文件,上传速度比较慢时容易造成超时,所以连接会被中断重置。解决办法:将ftp软件设置为主动模式(port模式)进行连接上传即可。以下是几款常用FTP设置方式:1、LeapFTP2、FlashFXP3、FileZila4、CuteFTP..._sftp大文件传输中断

[PTA刷题]Maximum Subsequence Sum_像pta这样的刷题网站有哪些-程序员宅基地

文章浏览阅读761次。Given a sequence of KK integers { N_1N​1​​, N_2N​2​​, ..., N_KN​K​​ }. A continuous subsequence is defined to be { N_iN​i​​, N_{i+1}N​i+1​​, ..., N_jN​j​​ } where 1 \le i \le j \le K1≤i≤j≤K._像pta这样的刷题网站有哪些

HDU1501 Zipper 拉链(dfs)_对两个字符串进行拉链操作-程序员宅基地

文章浏览阅读299次。ZipperTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9847 Accepted Submission(s): 3517Problem DescriptionGiven three strings_对两个字符串进行拉链操作

随便推点

java 表格刷新_java中的表格要怎么自动刷新?-程序员宅基地

文章浏览阅读989次。你的位置:问答吧-> JAVA-> 问题详情java中的表格要怎么自动刷新?我现在是把显示列表写在了一个按钮事件上,而点了这个按钮以后表格没有自动刷新,要把滚动条拉一下才行。而且还有一个更严重的问题是,比如我原本读取了5条记录,后来输入了条件以后只查到一条记录,这样的情况下前面这条记录可以被覆盖,但后面原本查询..._java excel表格如何刷新

数据关键词招聘职位爬虫-程序员宅基地

文章浏览阅读161次。1 # -*- coding:utf-8 -*- 2 # Author:Sure Feng 3 4 from selenium import webdriver 5 from lxml import etree 6 import time 7 import json 8 import openpyxl 9 10 class LaGou..._爬虫岗位关键词

DOTA-Acrylamide DOTA-丙烯酰胺 DOTA-ACA-程序员宅基地

文章浏览阅读317次,点赞8次,收藏7次。DOTA-AcrylamideDOTA(多胺环亚胺)是一种常用的放射性标记化合物,被广泛应用于核医学、放射免疫分析、放射性标记等领域。然而,DOTA在合成过程中可能会产生一种有毒的副产物——丙烯酰胺(Acrylamide)。丙烯酰胺是一种已知的神经毒性和致癌物质,对人体健康具有潜在的危害。在合成DOTA的过程中,通常使用丙烯酰胺作为起始原料,经过一系列的化学反应得到最终产物。然而,由于这些化学反应不完全,导致在合成过程中会产生一定量的丙烯酰胺残留。保存:本品应密封避光,储存于阴凉,干燥,通风处。

微服务跨数据库联合查询_微服务架构下,解决数据库跨库查询的一些思路-程序员宅基地

文章浏览阅读2.2k次。加关注,不迷路! 前言在服务做微服务改造后,原先单库join查询已经不能满足要求,每个拆分的微服务对应一个数据库实例,而且部署在不同的服务器上,那么解决“跨库查询”就势在必行了。 以笔者实战经历来看,以下几个思路仅供参考: 表字段冗余想必大家已经很熟悉,几乎每天都会打交道,不用多讲。需要指出的是冗余字段不能太多,建议控制在2-4个左右。否则会出现数据更新不一致问题,一旦冗余字段有改..._微服务 跨库搜索

unity 第一篇 : unity vscode 代码提示_unity代码提示原理-程序员宅基地

文章浏览阅读3k次。1,按照如下官网地址操作:Unity - Manual: Integrated development environment (IDE) support2,在vscode 中设置:注:如果不起效果,请关闭vscode 再 重新打开_unity代码提示原理

翻译 Designing Stable Compensation Networks for Single Phase Voltage Mode Buck Regulators_appendix a error amplifier and compensation networ-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏11次。在网上看到 Designing Stable Compensation Networks for Single Phase Voltage Mode Buck Regulators,觉得不错,特定翻译出来,如有不妥之处,请指教Assumptions 假设This Technical Brief makes the following assumptions:1. The power supply designer has already designed the power stage of t_appendix a error amplifier and compensation networks design

推荐文章

热门文章

相关标签