博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用xcodeproj为工程添加framework
阅读量:6196 次
发布时间:2019-06-21

本文共 1912 字,大约阅读时间需要 6 分钟。

最近的需要做一个自动打包各个子模块framework的脚本。写脚本嘛,思路很简单,把平时那些手动的操作转化成代码就可以。

步骤也很简单,平时打一个framework的时候需要:

1.在工程 linked Frameworks and Libraries 中添加所需要的framework

2.修改podfile文件,然后执行pod install 命令

3.执行打包framework的脚本,输入子模块名称做为参数

4.提交代码至子模块git仓库,reset掉中间产生的无用代码

想了下这个步骤,唯一有点难度的就是 给工程添加framework,之前做过修改XCode中build Setting的相关设置,感觉应该差不多。但是做的时候问题就出现了,问题来自xcodeproj文件

简单介绍下xcodeproj文件。 

首先这是个类似于ipa的包,显示包内容或者直接拖到sublime3中打开,可以看到里面的结构,其中就有我们今天的主角:project.pbxproj。

project.pbxproj采用的是老式风格的plist文件(old ASCII plist)。就是由很多 节点{ 内容 } 节点 { 内容 } 组成的,大多数的内容如之前修改build setting的内容,就想当于key-value;找到对应的key之后修改value就可以了,github上有很多的工具。

293EFECE17BB1F2100A264A1 /* Release */ = {

isa = XCBuildConfiguration;

baseConfigurationReference = 5FFFEAC8FAEB3F5B5524ED1D /* Pods.release.xcconfig */;

buildSettings = {

ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;

CLANG_CXX_LANGUAGE_STANDARD = "compiler-default";

CLANG_CXX_LIBRARY = "compiler-default";

CLANG_ENABLE_MODULES = YES;

CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;

...

}

然而在给xcodeproj添加资源或者文件的时候就不一样了。资源大多数是这样的 :

012EEC861DACDC6F007833C4 /* XXXView.m in Sources */ = {isa = PBXBuildFile; fileRef = 012EEC5C1DACDC6F007833C4 /* XXXView.m */; };

这里面就出现了个比较蛋疼的东西 就是 012EEC861DACDC6F007833C4 这个标识符,查了下发现这个是唯一标识符,苹果默认生成与资源一一对应的。所以我们添加资源的时候需要生成唯一标识符,这个技术难度就比较大了。

在遇到这个问题的时候想到了NB的cocoapods,cocoapods最后也是生成了一个.a文件然后添加到工程中,那么cocoapods应该也有实现的方法。

经过一系列的search之后,找到了cocoapods中的xcodeproj框架,专门用于添加资源文件的。

xcodeproj的有文档,也有很多的资料,这里有不赘述了,有需要的可以看下面的链接:

最后简单的上下代码:

target为:子模块framework的名称

path = $iphonePath + '/XXX.xcodeproj' # the project_path

project = Xcodeproj::Project.open(path)

projectTarget = project.targets.first

targetFramework = target + 'Framework'

targetPath = $reposPath + target + '/' + targetFramework + '/' + target + '.framework'

reference = project.frameworks_group.new_reference(targetPath)

projectTarget.frameworks_build_phase.add_file_reference(reference, true)

题外话:

ruby语言确实非常的好用,简单易读,很优雅~ 有空的可以学学~

转载地址:http://ssfca.baihongyu.com/

你可能感兴趣的文章
图片预览
查看>>
CPP复习笔记 3
查看>>
restful架构风格设计准则(一)以资源为中心、自描述的请求响应、资源状态迁移为粒度...
查看>>
mysql 数据表读锁机制详解
查看>>
wpf listbox 选中项 上移下移
查看>>
yum install --downloadonly 下载依赖包到本地 但不安装
查看>>
交换机,路由器,集线器,有什么区别
查看>>
介绍WS Federaion 二:把百度和谷歌和谐起来
查看>>
数学之路(3)-机器学习(3)-机器学习算法-欧氏距离(2)
查看>>
ASP.NET操作服务System.ComponentModel.Win32Exception: 拒绝访问
查看>>
Struts2的OGNL标签详解
查看>>
Django第一步
查看>>
RMQ算法模板
查看>>
thinkpad T420屏幕对比度设置
查看>>
libpopt的使用(译)
查看>>
setOnFocusChangeListener的使用
查看>>
Linux下Shell的复制粘贴快捷键
查看>>
[RK3399][Android7.1] 调试笔记 --- 模块编译32位动态库【转】
查看>>
物联网 MQTT 服务质量级别
查看>>
Serv-u只开放21端口连接不上解决方案
查看>>