一、介绍
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相关以及删除 多层文件夹、库、资源逻辑的更多相关文章

  1. java 删除多层文件夹

    /** * 因为不小心,写了一个死循环,在电脑里创建的了n多层空文件夹 * 并且手动最外层删除不掉. * 所以用写了本代码,从里向外的进行删除操作. * @author Singularity * @ ...

  2. windows 删除多层文件夹

    眼下目录d:\clu_1下有99个目录,名字为0,1....99,每一个目录下又有25个目录,目录名为0,1,....24,其下其下又有以日期命名的目录(如20140521),最后是zip文件.如一个 ...

  3. Ubuntu下与菜单和图标相关的几个文件夹

    转自UBUNTU下与菜单和图标相关的几个文件夹 /usr/share/icons  系统图标文件夹 /usr/share/applications  系统菜单文件夹,要在左上角的应用程序菜单中添加一项 ...

  4. xp下删除windows7,无法删除windows7文件夹,无法删除windows7文件,双系统卸载,取得文件权限

    http://blog.csdn.net/lanmanck/article/details/5722050 ---------------------------------------------- ...

  5. FILE文件删除操作(删除指定文件夹下所有文件和文件夹包括子文件夹下所有文件和文件夹),就是删除所有

    2018-11-05  19:42:08开始写 选择 删除 1.FileUtils.java类 import java.io.File;//导入包 import java.util.List;//导入 ...

  6. java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量

    package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...

  7. 【Mac系统 + Git】之上传项目代码到github上以及删除某个文件夹

    之前做开发的时候,用过一段时间git代码管理工具,用命令行操作感觉十分高大上,今天我想从头总结一篇Mac系统下如何利用git上传代码到github上的学习. 目录 一.安装Git 二.创建.ssh文件 ...

  8. Win7如何删除需要管理员权限才能删除的文件夹

    在Windows 7系统运行中.往往会遇到想要删除某个文件夹时,系统提示:文件夹访问被拒绝 你需要权限来执行此操作,如何才能删除此类文件夹呢? ------------------ --------- ...

  9. PHP批量清空删除指定文件夹内容

    PHP批量清空删除指定文件夹内容: cleancache.php <?php // 清文件缓存 $dirs = array( realpath(dirname(__FILE__) . '/../ ...

随机推荐

  1. 剑指offer:扑克牌顺子

    题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他 ...

  2. curl的速度为什么比file_get_contents快以及具体原因

    一.背景      大家做项目的时候,不免会看到前辈的代码.博主最近看到前辈有的时候请求外部接口用的是file_get_contents,有的用的是curl.稍微了解这两部分的同学都知道,curl在性 ...

  3. 数据库sql优化总结之5--数据库SQL优化大总结

    数据库SQL优化大总结 小编最近几天一直未出新技术点,是因为小编在忙着总结整理数据库的一些优化方案,特此奉上,优化总结较多,建议分段去消化,一口吃不成pang(胖)纸 一.百万级数据库优化方案 1.对 ...

  4. disruptor 组件理解

    disruptor 中核心组件包括 RingBuffer.Event .EventHandler.Sequence.Sequence Barrier. WaitStrategy.WorkProcess ...

  5. openresty开发系列37--nginx-lua-redis实现访问频率控制

    openresty开发系列37--nginx-lua-redis实现访问频率控制 一)需求背景 在高并发场景下为了防止某个访问ip访问的频率过高,有时候会需要控制用户的访问频次在openresty中, ...

  6. MSYS2 编译环境配置

    博客转载自:https://medium.com/@fzubair/carnd-term2-gcc-setup-on-windows-287e1fd36845 2018/6/2 — mingw32/c ...

  7. 【linux】CentOS: Sudo: unable to initialize policy plugin

    背景: 在centos7 下 使用sudo 命令对www用户生成ssh秘钥 .报错 解决办法: yum remove sudo yum install sudo 在执行就ok了

  8. mybatis自动生成后无法获取主键id问题

    使用mybatis的自动生成工具生成的主键id: <selectKey resultType="java.lang.Integer" keyProperty="id ...

  9. SRC漏洞挖掘

    SRC目标搜集 文章类的平台 https://www.anquanke.com/src 百度搜索 首先得知道SRC厂商的关键字,利用脚本搜集一波. 比如[应急响应中心]就可以作为一个关键字.通过搜索引 ...

  10. LeetCode:接雨水【42】

    LeetCode:接雨水[42] 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1, ...