XcodeProj,使用Ruby更改工程文件
一,Ruby基础
Ruby迭代器each、map、collect、inject
each——连续访问集合的所有元素
collect—-从集合中获得各个元素传递给block,block返回的结果生成新的集合。
map——-同collect。
inject——遍历集合中的各个元素,将各个元素累积成返回一个值。
二,Ruby脚本
此脚本的作用是,待CoreLib工程中的文件copy到SDK工程中后,给这些文件添加依赖。目的是为了减少人工干预。
灵感来自于Cocapods。需要使用到Xcodeproj这个工具。
此脚本的缺陷是:如果是在编译过程中去给文件添加依赖,修改到了Xcode的工程文件,工程会停止运行,必须要跑两遍,才会有结果,所以后来这个方法被否决了。
require 'xcodeproj'
project_path = './EcoRobotCoreLib/EcoRobotCoreLib.xcodeproj' # 工程的全路径
sdk_project_path = './EcoRobotSDK/EcoRobotSDK.xcodeproj'
project = Xcodeproj::Project.open(project_path) # 、显示所有的target
project.targets.each do |target|
puts target.name
end # 增加新的文件到工程中
target = project.targets.first
group = project.main_group.find_subpath(File.join('testXcodeproj','newGroup'), true)
group.set_source_tree('SOURCE_ROOT') # 获取全部的文件引用
file_ref_list = target.source_build_phase.files_references # 设置文件引用是否存在标识
file_ref_mark = false # 检测需要添加的文件是否存在
for file_ref_temp in file_ref_list
puts file_ref_temp.path.to_s
if file_ref_temp.path.to_s.end_with?('ViewController1.m') then
file_ref_mark = true
end
end if !file_ref_mark then
file_ref = group.new_reference('ViewController1.h文件路径')
target.add_file_references([file_ref])
else
puts '文件引用已存在'
end if !file_ref_mark then
file_ref = group.new_reference('ViewController1.m文件路径')
target.add_file_references([file_ref])
else
puts '文件引用已存在'
end
project.save
puts '文件添加完成'
require 'xcodeproj'
project_path = './EcoRobotSDK/EcoRobotSDK.xcodeproj' # 工程的全路径
project = Xcodeproj::Project.open(project_path) #获取target
target = project.targets.first
puts target.name
#根据路径名寻找group,def find_subpath(path, should_create = false) ,不重新创建
group = project.main_group.find_subpath(File.join('CommonClass(公共类)','StaticLibaryHeaders', 'iotclient'), false)
#如果找不到路径,就退出
if !group
exit
end
group.set_source_tree('<group>') #SOURCE_ROOT "<group>"
puts "group.real_path:#{group.real_path}" header_path=group.real_path.to_s; #+"/Class/StaticLibaryHeaders/iotclient";
puts "#{header_path}" # 获取全部的文件引用
file_ref_list = target.headers_build_phase.files_references
file_ref_mark = false;
if File::directory?(header_path)
Dir::foreach(header_path) do |file|
if file !="." and file !=".."
# puts file.to_s
for file_ref_temp in file_ref_list
if file_ref_temp && file_ref_temp.path.to_s.end_with?(file.to_s)
then
# if file_ref_temp.path.to_s.end_with?(file.to_s) then
file_ref_mark = true
puts "文件依赖存在,头文件:#{file}"
break;
end
end
if file_ref_temp && !file_ref_mark
puts "文件依赖不存在,file:#{file}"
puts File.basename(file)
puts "路径地址:#{header_path}/#{file}"
file_ref = group.new_reference("#{header_path}/#{file}")
target.add_file_references([file_ref]); end
file_ref_mark = false end end
end project.save; # def traverse_dir(file_path)
# if File.directory? file_path
# Dir.foreach(file_path) do |file|
# if file !="." and file !=".."
# traverse_dir(file_path+"/"+file)
# end
# end
# else
# puts "File:#{File.basename(file_path)}"
# # 检测需要添加的文件是否存在
# # for file_ref_temp in file_ref_list
# # puts file_ref_temp.path.to_s
# # if file_ref_temp.path.to_s.end_with?('#{File.basename(file_path)}') then
# # # file_ref_mark = true
# # file_ref = group.new_reference(file_path)
# # target.add_file_references([file_ref]);
# # end
# # end # end
# end # traverse_dir(header_path); #对的
# if File::directory?(header_path)
# Dir::foreach(header_path) do |file|
# puts file.to_s
# end
# end # file_ref_list = target.headers_build_phase.files_references
# for file_ref_temp in file_ref_list
# if file_ref_temp
# puts file_ref_temp.path.to_s
# end
# end
XcodeProj,使用Ruby更改工程文件的更多相关文章
- Xcodeproj相关以及删除 多层文件夹、库、资源逻辑
一.介绍Xcodeproj是CocoaPods用ruby开发的一个插件库,可以用来新建.修改Xcode工程. 二.wiki和资源Xcodeproj wiki :https://www.rubydo ...
- Xcode工程文件pbxproj
Xcode工程文件pbxproj Xcode会去读Project.pbxproj文件,把pbxproj转成plist文件,看起根目录结构 rootObject:指向的是我们的工程对象.(对应一个24个 ...
- Visual Studio各版本工程文件之间的转换
转载于:http://www.cnblogs.com/jmliao/p/5594179.html 由于VS版本比较多,低版本无法直接打开高版本的工程文件,通过对工程文件进行一些修改可以解决这些问题. ...
- 转:使用vs2013打开VS2015的工程文件的解决方案(适用于大多数vs低版本打开高版本)
http://www.cnblogs.com/WayneLiu/p/5060277.html 前言:重装系统前我使用的是vs2015(有点装*),由于使用2015实在在班上太另类了, 导致我想在其他同 ...
- SVN版本更新后,upData工程之后,Xcode 工程文件打不开解决办法
svn更新代码后,打开xcode工程文件,会出现 xxx..xcodeproj cannot be opened becausethe project file cannot be parsed. ...
- Xcode 工程文件打开不出来, cannot be opened because the project file cannot be parsed.
svn更新代码后,打开xcode工程文件,会出现 xxx..xcodeproj cannot be opened because the project file cannot be parsed ...
- Android开发:彻底更改工程名
对于已经建立的工程,如果发现原来的工程名不合适,此时若想彻底更改工程名,需要三个步骤: 1.更改工程名 选中工程名,右键-->Refactor-->Rename. 2.更改src文件下包名 ...
- Keil工程文件的建立、设置与目标文件的获得
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为 CPU 可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工 汇编的方法了.机器汇编是通过汇编软件 ...
- Xcode工程文件打不开:cannot be opened because the project file cannot be parsed
svn更新代码后,打开xcode工程文件,会出现 xxx..xcodeproj cannot be opened because the project file cannot be parsed ...
随机推荐
- Oracle 11g快速收集全库统计信息
环境:Oracle 11.2.0.4 采用并行的方式,快速收集全库统计信息,多用于跨版本升级之后,对全库的统计信息重新进行快速收集: --开启计时 set timing on --设置并行收集 exe ...
- MySQL.Linux.安装
Linux 7.x.安装 MySQL 环境: linux是安装在虚拟机中的,宿主机是:win10系统.安装MySQL的时候,首先需要网络是通的(宿主机和虚拟机之间通信).相关配置,参见:虚拟机和宿主机 ...
- JAVA8函数式接口
java8 中内置的四大核心函数接口** Consumer<T> :消费型接口* void accept(T t)* Supplier<T> :供给型接口* T get()** ...
- c# 修改xml格式config文件
xml 格式的config文件如下: <?xml version="1.0" encoding="utf-8"?> <configuratio ...
- Python之words count
要求: 对文件单词进行统计,不区分大小写,并显示单词重复最多的十个单词 思路: 利用字典key,value的特性存单词及其重复的次数 每行进行特殊字符的处理,分离出被特殊字符包含的单词 def mak ...
- 3.GDScript(1)概览
GDScript 是上面提到的用于Godot的主要语言.和其他语言相比,它与Godot高度整合,有许多优点: 简单,优雅,设计上为Lua.Python.Squirrel等语言用户所熟悉. 加载和编译速 ...
- linux小倒腾
1.vim安装,sudo apt-get install vim-gtk,于是vim就安装好了.当然在我电脑上还出现了gvim,简单的vim配置(etc/vim/vimrc): "我的设置 ...
- 扇入Fan-in和扇出Fan-out
什么是扇入和扇出? 在软件设计中,扇入和扇出的概念是指应用程序模块之间的层次调用情况. 按照结构化设计方法,一个应用程序是由多个功能相对独立的模块所组成. 扇入:是指直接调用该模块的上级模块的个数.扇 ...
- hdu3037 lucas
题意 : 给了n课不同的树,要求将 0,1,2,3,4,5,...m个松果,分别放在n棵树上的方案数有多少, 我们这样考虑, 如果将m个相同的松果 放入n棵树中 , 转化一下,我们让每个点至少放1个 ...
- Python - 5.Exception Handling
From:http://interactivepython.org/courselib/static/pythonds/Introduction/ExceptionHandling.html Exce ...