ruby库xcodeproj使用心得

| 导语 在iOS自动化测试工具的开发过程中,会涉及到修改项目工程的配置,通过xcodeproj可以实现脚本方式修改,不需要打开XCode手动修改配置了。

xcodeproj这个库功能很强大,XCode工程的大多数配置都可以通过通过xcodeproj完成;在这里主要给大家介绍下一些常用配置的修改方法。

使用方法:

1.安装xcodeproj

gem install xcodeproj

2.通过xcodeproj设置证书

require 'xcodeproj'

#打开项目工程A.xcodeproj
project_path = 'xxxPath/A.xcodeproj'
project = Xcodeproj::Project.open(project_path)

#修改某个target在debug模式下的证书配置
#此处遍历找到debug
project.targets[0].build_configurations.each do |config|
  if config.name == 'Debug'
    config.build_settings["PROVISIONING_PROFILE_SPECIFIER"] = "xxProfileName"
    config.build_settings["DEVELOPMENT_TEAM"] = "xxTeamName"
    config.build_settings["CODE_SIGN_IDENTITY"] = "xxIdentityName"
    config.build_settings["CODE_SIGN_IDENTITY[sdk=iphoneos*]"] = "iPhone Developer"
  end
end

project.save

此处可以通过此方法修改target下某个模式(debug, release等)的大多数配置,可通过config.build_settings查看所有的键值对,然后根据需求修改键值,如OTHER_FLAGS,PRODUCT_BUNDLE_IDENTIFIER,HEADER_SEARCH_PATHS,LIBRARY_SEARCH_PATHS等。

3.通过xcodeproj在工程的xxx group下引入xx.h和xx.m文件


require 'xcodeproj'

#打开项目工程A.xcodeproj
project_path =  'xxxPath/A.xcodeproj'
project = Xcodeproj::Project.open(project_path)

#找到要插入的group (参数中true表示如果找不到group,就创建一个group)
group = project.main_group.find_subpath(File.join('GroupName'),true)

#set一下sorce_tree
group.set_source_tree('SOURCE_ROOT')

#向group中增加文件引用(.h文件只需引用一下,.m引用后还需add一下)
file_ref = group.new_reference('xxxPath/xx.h')

file_ref = group.new_reference('xxxPath/xx.m')
ret = target.add_file_references(file_ref)

project.save

4.通过xcodeproj在工程中引入framwork、.a文件和bundle文件

require 'xcodeproj'

#打开项目工程A.xcodeproj
project_path =  'xxxPath/xx.xcodeproj'
project = Xcodeproj::Project.open(project_path)

#遍历target,找到需要操作的target

targetIndex = 0

project.targets.each_with_index do |target, index|
  if target.name  == "xxxTargetName"
    targetIndex = index
  end
end

target = project.targets[targetIndex]

#添加xx.framework的引用
file_ref = project.frameworks_group.new_file('xxPath/xx.framework')
target.frameworks_build_phases.add_file_reference(file_ref)

#添加xx.a的引用
file_ref = project.frameworks_group.new_file('xxPath/xx.a')
target.frameworks_build_phases.add_file_reference(file_ref)

#添加xx.bundle的引用
file_ref = project.frameworks_group.new_file('xxPath/xx.bundle')
target.resources_build_phase.add_file_reference(file_ref)

project.save

5.提供过xcodeproj在把xx.framework加入到copy files phase中(这里不限framework,也可以是其他类型文件)

require 'xcodeproj'
#打开项目工程A.xcodeproj 
project_path = 'xxxPath/xx.xcodeproj' 
project = Xcodeproj::Project.open(project_path)
#遍历target,找到需要操作的target 
targetIndex = 0 
project.targets.each_with_index do |target, index| 
  if target.name == "xxxTargetName" 
    targetIndex = index 
  end
end

target = project.targets[targetIndex] 

file_ref = project.frameworks_group.new_file('xxPath/xx.framework')

#把xx.framework添加到copy files中
#"leakFramework"即copy files build phase的名字,可自己随便取,也可不填,默认为空
target.new_copy_files_build_phase("leakFramework")

#项目中可能有多个copy files build phases,找到刚刚创建的那个,然后把xx.framework引入
target.copy_files_build_phases.each do |item| 
  if item.name == "leakFramework"
     #引入xx.framework
     item.add_file_reference(file_ref)
     #设置copy file buldphase中的Destination选项,使用枚举值表示的。"10"表示Frameworks 
     #这个值我是通过对比设置前后的两个文件找出来的
     item.dst_subfolder_spec = "10"
     #勾上code sign on copy选项(默认是没勾上的)
     item.files[0].settings = Hash.new  
     item.files[0].settings["ATTRIBUTES"] = ["CodeSignOnCopy"] 
  end
end

下面说说我找一个设置项对应的脚本的方法:
拿copy files phase的设置举例,copy files phase中的引入比其他几个build phase的引入稍复杂,因为还有Destination和subpath,code sign on copy等参数设置。在设置时,若不知道对应的脚本是啥,可以先不设置,保存project1.pbxproj,然后手动设置这些参数,保存project2.pbxproj。对比两个文件的不同。
比如我在找code sign on copy对应的脚本设置中是这样做的:

a.对比勾上和不勾上的区别code sign on copy默认没勾上,我通过对比发现,project2.pbxproj比project1.pbxproj多了这部分settings = {ATTRIBUTES = (CodeSignOnCopy, ); };(请把滚动条拖到末尾能看到)。

DB241A68D0CB52AD852AC2DB /* FBAllocationTracker.framework in leakFramework */ = {isa = PBXBuildFile; fileRef = C5132A98E85BD6300B586092 /* FBAllocationTracker.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };

b.发现这部分区别位于/* Begin PBXBuildFile section */ 这个section中,然后我去xcodeproj的api文档(http://www.rubydoc.info/gems/xcodeproj/Xcodeproj)中搜索PBXBuildFile相关的类,找到了下面这个,然后发现果然有settings这个属性。接下来需要看怎么获得需要设置的这个对象实例。
c.因为文件是加到copy file phase中了,所以我认为这个copyfile相关的类中一定有方法能返回PBXBuildFile的实例,于是我搜索copyfile相关的类。搜到了PBXCopyFilesBuildPhase这个类,但是在这个类中,没有找到返回PBXBuildFile实例的方法,那再想想,可能再它的父类中,于是通过下图找到了父类AbstractBuildPhase。

d.在AbstractBuildPhase类的api中,我看到了files属性,返回的是PBXBuildFile实例!!至此,再顺着缕回去,我就知道通过可通过target.copy_files_build_phases.files获取需要配置的文件啦,然后再设置属性settings,一切搞定!

这里简单说了一下我找方法的心路历程,希望能帮助到大家。在开发过程中有更多需求可通过官方文档详查看http://
www.rubydoc.info/gems/xcodeproj/Xcodeproj
。文档中类名很清晰,可以先根据自己的需求判断应该使用那个类,然后去类中具体找方法;或者在方法中模糊搜索一下,可能一下就搜到想要用的方法了!
QQ图片20170728161226.png

IBM、微软、华为等……均采用的软件配置。目录摘要如下: 配置结构 ..........\1 配置项 CI ..........\...........\1.01 客户文档 Customer ..........\...........\1.02 项目计划 Plan ..........\...........\.............\1.2.1 软件估计Estimation ..........\...........\.............\1.2.2 软件开发计划PPL ..........\...........\.............\1.2.3 配置管理计划CMP ..........\...........\1.03 需求分析SRS ..........\...........\................\infoX-MDSP PortalDemo SRS 软件需求规格说明书.doc .................................................. ..........\2 项目管理 PM ..........\.............\2.1 会议纪要 MOM ..........\.............\................\2.1.1 开工会 kick-off ..........\.............\................\2.1.2 周例会 weekly ..........\.............\................\2.1.3 阶段结束会议 EOP ..........\.............\................\2.1.4 关闭会议 closure ..........\.............\................\2.1.5 技术讨论会 Technical ..........\.............\................\2.1.6 其他会议 other ..........\.............\2.2 项目报告 Daily ..........\.............\..................\2.2.1 项目日报 Daily ..........\.............\..................\2.2.2 项目周报 weekly .................................................. ..........\.............\2.3 问题跟踪 Tracking ..........\.............\2.4 团队建设 Team Buliding ..........\.............\..........................\MTV-SMCP项目组月考核汇总表9月.xls ..........\.............\..........................\portaldemo项目沟通既要.xls ..........\.............\..........................\vssver.scc ..........\.............\2.5 公司制度 ..........\3 配置管理 CM .................................................. ..........\4 质量管理 QM ..........\.............\4.1 度量 Metrics .................................................. ..........\5 测试记录 Test Record .................................................. ..........\6 培训及总结 Training ..........\.....................\6.1 Plan阶段 .................................................. ..........\7 工具使用 Tools ..........\8 参考资料 Reference ..........\9 日志 Timesheet ..........\................\9.1 工时统计 Timesheet ..........\................\9.2 工作日志 Log ..........\................\9.3 技术问题跟踪Tracking ..........\................\........................\infoX-PortalDemo技术讨论问题跟踪表.xls
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值