一、介绍
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. nacos-server安装、运行 (docker)

    https://nacos.io/en-us/docs/quick-start-docker.htmlhttps://github.com/nacos-group/nacos-docker mkdir ...

  2. Java多个线程顺序打印数字

    要求 启动N个线程, 这N个线程要不间断按顺序打印数字1-N. 将问题简化为3个线程无限循环打印1到3 方法一: 使用synchronized 三个线程无序竞争同步锁, 如果遇上的是自己的数字, 就打 ...

  3. 从ReentrantLock的实现看AQS的原理及应用 可重入锁

    https://mp.weixin.qq.com/s/sA01gxC4EbgypCsQt5pVog

  4. 009 SpringBoot+Swagger的使用

    一:概述 1.说明 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务. 总体目标是使客户端和文件系统作为服务器以同样的速度来更新. 文件的方法 ...

  5. saltstack执行state.sls耗时长的坑

    一直用的 jenkins + saltstack 自动化构建发布项目,一共也就不超过20台服务器,奈何运行时间越来越慢,并且负载越来越高(这里大部分都是使用state模块),但是不用state模块效率 ...

  6. [LeetCode] 340. Longest Substring with At Most K Distinct Characters 最多有K个不同字符的最长子串

    Given a string, find the length of the longest substring T that contains at most k distinct characte ...

  7. [LeetCode] 495. Teemo Attacking 提莫攻击

    In LOL world, there is a hero called Teemo and his attacking can make his enemy Ashe be in poisoned ...

  8. 错误:net::ERR_BLOCKED_BY_CLIENT

    提示net::ERR_BLOCKED_BY_CLIENT错误 解决办法: 当我们查看浏览器第三方插件的时候,就会看到插件中存在“广告过滤插件”,其实,报错的原因就是第三方广告过滤插件在捣鬼, 当你关闭 ...

  9. oracle11G 命令【导库数量对比】

    1.查询用户有哪些表 select * from all_tables where owner='ZJY'; 160 rows selected. 2. 查询总数 select object_type ...

  10. ddl语法

    创建表: create table 表名 ( 字段1 varchar2(32) not null primary key, 字段2 date not null ) tablespace 表空间名 事务 ...