zoukankan      html  css  js  c++  java
  • ruby操作项目.xcodeproj

    前言

    开发过程中经常遇到需要脚本拷贝文件,添加文件引用到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 为了避免重复添加引用,添加之前先判断是否引用已经存在

    1.  
      if group.find_file_by_path(file_path)
    2.  
      //引用已经存在
    3.  
      else
    4.  
      //添加引用
    5.  
      file_ref = group.new_reference(file_path)
    6.  
      end
    7.  
      复制代码

    本次操作之后,这个文件就添加到了 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

    完整代码如下:

    1.  
      def add_file_reference_to_group(target, project, directory_path, to_group, need_mrc)
    2.  
      if to_group and File::exist?(directory_path) then
    3.  
      Dir.foreach(directory_path) do |entry|
    4.  
      if entry != "." and entry != ".." and entry != ".DS_Store"
    5.  
      pb_gen_file_path = entry
    6.  
      if to_group.find_file_by_path(pb_gen_file_path)
    7.  
      puts pb_gen_file_path + " reference exist"
    8.  
      else
    9.  
      file_reference = to_group.new_reference(pb_gen_file_path)
    10.  
      if need_mrc and entry.include?("pbobjc.m")
    11.  
      target.add_file_references([file_reference],'-fno-objc-arc')
    12.  
      else
    13.  
      target.add_file_references([file_reference])
    14.  
      end
    15.  
      end
    16.  
      end
    17.  
      end
    18.  
      project.save
    19.  
      end
    20.  
      end
    21.  
       
    22.  
      project = Xcodeproj::Project.open('./*.xcodeproj')
    23.  
      target = project.targets.first
    24.  
      group = project.main_group.find_subpath(要添加到的Group的path)
    25.  
      add_file_reference_to_group(target, project, 想要添加到指定Group的file的path, group, true)
    26.  
    最怕你一生碌碌无为 还安慰自己平凡可贵
  • 相关阅读:
    Codeforces Round #217 (Div. 2)B. Berland Bingo
    走迷宫1 bnu 1054
    MFC 对话框背景图片
    用Visual C++从位图文件生成任意形状的窗口
    poj 2245 Lotto
    poj 1797 Heavy Transportation
    poj 2253 Frogger
    poj 1125 Stockbroker Grapevine
    B. Books
    【转】阻塞与非阻塞socket的优缺点
  • 原文地址:https://www.cnblogs.com/fakeCoder/p/14964191.html
Copyright © 2011-2022 走看看