Xcodeproj相关以及删除 多层文件夹、库、资源逻辑
一、介绍
Xcodeproj是CocoaPods用ruby开发的一个插件库,可以用来新建、修改Xcode工程。
二、wiki和资源
Xcodeproj wiki :https://www.rubydoc.info/github/CocoaPods/Xcodeproj/index
Xcodeproj github: https://github.com/CocoaPods/Xcodeproj
三、删除 多层文件夹、库、资源逻辑
Xcodeproj库提供了很多方法可以看wiki,不过有个鸡肋的地方就是“删除 多层文件夹、库、资源”,因为Xcodeproj没有提供可以直接删除多层文件夹、库、资源的方法,必须要从最深的一层开始,向外删除。
如图示例,需要删除最底层的,然后一层一层向外删除。
以下为代码逻辑:
require 'xcodeproj'
require 'json'
require 'find' #package_path 该地址为物理路径
def deletePackage(package_path)
arr=[];
#通过find找到该物理路径下所有的文件结构地址
Find.find(package_path) do |path|
#去除包含.framework、.bundle的路径,以及文件类型是.m .mm .h .txt .a .DS_Store等的路径
if !path.index(".framework") && !path.index(".bundle") && !path.end_with?(".m", ".mm", ".h", ".txt", ".a",".DS_Store")
#将物理路径转成 项目的group路径,删除path 前面不相干的路径,再拼接项目名称 ,35长度要视实际情况
path="pickle"+path[35,path.length-35]
#按照 group路径最长的加到arr数组最后面逻辑处理。
if arr.size == 0
arr.push(path)
else
for n in arr do
if path.length > n.length
arr.push(path)
break
end
end
end
end
end
#对数组进行反转,最深的路径在最前面
arr = arr.reverse
#将arr里面所有的路径进行删除资源以及引用
for n in arr do
removeGroup = @project.main_group.find_subpath(n, true)
removeGroup.set_source_tree('<group>')
if !removeGroup.empty? then
process_group_remove_path(@target, removeGroup)
removeGroup.clear()
end
end
end def process_group_remove_path(aTarget, aGroup)
puts "\nprocess_group_remove_path..."
aGroup.files.each do |file|
aTarget.resources_build_phase.remove_file_reference(file)
end aGroup.groups.each do |group|
process_group_remove_path(aTarget,group)
end
end
看了不少相关帖子,对于删除多层结构的没有相关解决方案,特立此贴。
(因为我们项目有开发自动化打包,脚本配置在了jenkins上,其中有需要对工程进行动态添加或是删除)
Xcodeproj相关以及删除 多层文件夹、库、资源逻辑的更多相关文章
- java 删除多层文件夹
/** * 因为不小心,写了一个死循环,在电脑里创建的了n多层空文件夹 * 并且手动最外层删除不掉. * 所以用写了本代码,从里向外的进行删除操作. * @author Singularity * @ ...
- windows 删除多层文件夹
眼下目录d:\clu_1下有99个目录,名字为0,1....99,每一个目录下又有25个目录,目录名为0,1,....24,其下其下又有以日期命名的目录(如20140521),最后是zip文件.如一个 ...
- Ubuntu下与菜单和图标相关的几个文件夹
转自UBUNTU下与菜单和图标相关的几个文件夹 /usr/share/icons 系统图标文件夹 /usr/share/applications 系统菜单文件夹,要在左上角的应用程序菜单中添加一项 ...
- xp下删除windows7,无法删除windows7文件夹,无法删除windows7文件,双系统卸载,取得文件权限
http://blog.csdn.net/lanmanck/article/details/5722050 ---------------------------------------------- ...
- FILE文件删除操作(删除指定文件夹下所有文件和文件夹包括子文件夹下所有文件和文件夹),就是删除所有
2018-11-05 19:42:08开始写 选择 删除 1.FileUtils.java类 import java.io.File;//导入包 import java.util.List;//导入 ...
- java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量
package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...
- 【Mac系统 + Git】之上传项目代码到github上以及删除某个文件夹
之前做开发的时候,用过一段时间git代码管理工具,用命令行操作感觉十分高大上,今天我想从头总结一篇Mac系统下如何利用git上传代码到github上的学习. 目录 一.安装Git 二.创建.ssh文件 ...
- Win7如何删除需要管理员权限才能删除的文件夹
在Windows 7系统运行中.往往会遇到想要删除某个文件夹时,系统提示:文件夹访问被拒绝 你需要权限来执行此操作,如何才能删除此类文件夹呢? ------------------ --------- ...
- PHP批量清空删除指定文件夹内容
PHP批量清空删除指定文件夹内容: cleancache.php <?php // 清文件缓存 $dirs = array( realpath(dirname(__FILE__) . '/../ ...
随机推荐
- 【自学Spring Boot】什么是Spring Boot
为啥要有Spring Boot? 以前大学刚开始学java web的时候,需要搭建起web框架,当时使用的是SSH(struts+spring+hibernate),那就开始搭建吧,初学者哪里知道整套 ...
- Qt开发经验小技巧1-10
当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它,有时候用QTime ...
- python:封装连接数据库方法
config.py # 数据库测试环境 name = '***' password = '******' host_port_sid = '10.**.*.**:1521/bidbuat' Oracl ...
- laravel composer vendor 目录加载类库详细 之后做说明
composer installLoading composer repositories with package informationInstalling dependencies (inclu ...
- 第07组 Beta冲刺(2/4)
队名:秃头小队 组长博客 作业博客 组长徐俊杰 过去两天完成的任务:学习了很多东西 Github签入记录 接下来的计划:继续学习 还剩下哪些任务:后端部分 燃尽图 遇到的困难:自己太菜了 收获和疑问: ...
- Zookeeper架构及FastLeaderElection机制
原文链接:http://www.jasongj.com/zookeeper/fastleaderelection/ Zookeeper是什么 Zookeeper是一个分布式协调服务,可用于服务发现,分 ...
- Netty原理架构解析
Netty原理架构解析 转载自:http://www.sohu.com/a/272879207_463994本文转载关于Netty的原理架构解析,方便之后巩固复习 Netty是一个异步事件驱动的网络应 ...
- cetos7 Mysql5.7安装
centos7 MySQL安装 一.检查是否已经存在mysql,若存在卸载,避免安装时产生一些错误 rpm -qa | grep -i mysql 若存在,使用rpm -e packname –nod ...
- 链表习题(2)-一个集合用带头结点的单链表L表示,编写算法删除其值最大的结点。
/*一个集合用带头结点的单链表L表示,编写算法删除其值最大的结点.*/ /* 算法思想:使用pre,p,premax,max四个指针,pre和p进行比较,premax和max进行最后的删除操作 通过遍 ...
- Docker简易安装及命令实例
docker ~ ~ ~ Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中, ...