前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ruby操作项目.xcodeproj

ruby操作项目.xcodeproj

作者头像
用户2814378
发布2022-11-07 15:13:04
9010
发布2022-11-07 15:13:04
举报
文章被收录于专栏:高科技宣传

前言

开发过程中经常遇到需要脚本拷贝文件,添加文件引用到Xcode,新建group,添加文件到Build Phase以及增加-fno-objc-arc标识等,这些都可以通过脚本实现。

准备工作

安装Ruby库Xcodeproj

了解几个概念

  • Target:指定了一个用于产品(product), 并且包含了从工程中的一些文件中构建产品的命令.
  • Group:Group 其实是 Xcode 中用来组织文件的一种方式, 它对文件系统没有任何影响 , 无论你创建或者删除一个 Group, 都不会导致 folder 的增加或者移除. 当然如果在你删除时选择 Move to Trash 就是另外一说了,不过Xcode9开始已经同步了Group和Folder,New Group默认创建了对应的Folder.
  • FileRef:FileRef 其实就是 File Reference 的缩写, 当你从 Xcode 中删除一个文件的时候, 它会弹出Remove Reference的提示框. 而其中的 Remove Reference 选项并不会将这个文件移除到垃圾桶, 而只是会将这个文件的引用从 Xcode 的工程文件中删除.

开始操作

1.查找*.xcodeproj并打开

xcodeproj/project.rb

project = Xcodeproj::Project.open('./*.xcodeproj')

2.获取Target

target = project.targets.first

3.创建Group

xcodeproj/project/object/group.rb

group = project.main_group.find_subpath(group的path)

4.添加文件到Group中

xcodeproj/project/object/group.rb 为了避免重复添加引用,添加之前先判断是否引用已经存在

代码语言:javascript
复制
if group.find_file_by_path(file_path)
    //引用已经存在
else 
    //添加引用
   file_ref = group.new_reference(file_path)
end

本次操作之后,这个文件就添加到了 group 中, 会出现在工程中的导航栏中。

但是这个文件并没有被添加到 Build Phases 中, 无论你是编译还是作为资源来使用, Xcode 都会提示你无法找到这个文件. 我们还需要把这个文件加入到 Build Phases 中.

5.添加文件到Build Phases中,为MRC设置-fno-objc-arc标识

xcodeproj/project/object/native_target.rb

如果文件是ARC,执行指令

target.add_file_references([file_ref])

如果文件是MRC,执行指令

target.add_file_references([file_ref],'-fno-objc-arc')

6.保存project

project.save

完整代码如下:

代码语言:javascript
复制
def add_file_reference_to_group(target, project, directory_path, to_group, need_mrc)
    if to_group and File::exist?(directory_path) then
        Dir.foreach(directory_path) do |entry|
            if entry != "." and entry != ".." and entry != ".DS_Store"
                pb_gen_file_path = entry
                if to_group.find_file_by_path(pb_gen_file_path)
                    puts pb_gen_file_path + " reference exist"
                else
                    file_reference = to_group.new_reference(pb_gen_file_path)
                    if need_mrc and entry.include?("pbobjc.m")
                        target.add_file_references([file_reference],'-fno-objc-arc')
                    else
                        target.add_file_references([file_reference])
                    end
                end
            end
        end
        project.save
    end
end

project = Xcodeproj::Project.open('./*.xcodeproj')
target = project.targets.first
group = project.main_group.find_subpath(要添加到的Group的path)
add_file_reference_to_group(target, project, 想要添加到指定Group的file的path, group, true)

参考文章

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 准备工作
  • 了解几个概念
  • 开始操作
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档