zoukankan      html  css  js  c++  java
  • 关于Xcode工程和代码的自动生成

      承接上一篇关于模板的介绍,这次说说自动生成问题;程序员都是懒的,本人就是懒癌晚期……

    思路

      1.利用Xcode和我们自定义的工程模板生成项目

      2.写json配置文件,在用脚本配合文件模板生成功能模块代码

      3.利用xcodeproj添加文件引用

    1.利用Xcode和我们自定义的工程模板生成项目

      好的工程组织架构应该是一目了然的,当然也和作者的习惯有关,模板都是可以自定义的

    2.写json配置文件,在用脚本配合文件模板生成功能模块代码

     配置文件如下:

    proj_path:工程文件的路径
    parent_path:该模块的相对于工程文件的路径(本例:/Users/mac/Desktop/wwwww/wwwww/Module/Service)
    moudels:需要添加的功能模块
    完整架构如下
     

    我的项目都是mvvm架构,功能上基本上都按照视图控制器来分,每个功能模块包含:Controller、Model、View三部分,如图所示

    文件生成的工作就很简单了,挑选相应的模块,该换的换~
     
    3.利用xcodeproj添加文件引用

    再来就是添加文件引用了,需要用到ruby框架Xcodeproj,这个就是在cocoapods上使用的项目管理工具,很犀利…… 我们要做的就是写一个遍历脚本把相应的文件引用添加进工程即可,贴上我的脚本供参考一下:

     1 require 'xcodeproj'
     2 require 'json'
     3 
     4 #移除索引
     5 def removeBuildPhaseFilesRecursively(aTarget, aGroup)
     6     aGroup.files.each do |file|
     7         aTarget.resources_build_phase.remove_file_reference(file)
     8     end
     9     
    10     aGroup.groups.each do |group|
    11         removeBuildPhaseFilesRecursively(aTarget, group)
    12     end
    13 end
    14 
    15 #添加索引
    16 def addFilesToGroup(aGroup, full_path, aTarget)
    17     current_path = full_path
    18     mGroup = aGroup
    19     Dir.foreach(current_path) do |entry|
    20         filePath = File.join(current_path, entry)
    21         # 过滤目录和.DS_Store文件
    22         if entry != ".DS_Store" && !filePath.to_s.end_with?(".meta") && entry != "." && entry != ".." then
    23             if File::ftype(filePath) == "directory"
    24                 mGroup = aGroup.find_subpath(File.join(entry),true)
    25                 addFilesToGroup(mGroup,filePath,aTarget)
    26             else
    27                 # 向group中增加文件引用
    28                 if nil == mGroup.find_subpath(entry)
    29                     fileReference = mGroup.new_reference(filePath)
    30                     aTarget.resources_build_phase.add_file_reference(fileReference, true)
    31                 end
    32             end
    33         end
    34     end
    35 end
    36 
    37 fconfig = File.read('moudels.json')
    38 configs = JSON.parse(fconfig)
    39 for project_item in configs do
    40     proj_path = project_item["proj_path"]
    41     parent_path = project_item["parent_path"]
    42     moudels = project_item["moudels"]
    43 
    44     #相对于 ruby文件 .xcodeproj 的路径
    45     project = Xcodeproj::Project.open(proj_path)
    46     target = project.targets.first
    47     project_dir = project.project_dir
    48     target_name = target.name
    49 
    50     for model in moudels do
    51         moudel_name = model["moudel_name"]
    52         moudel_path = "#{project_dir}/#{target_name}/#{parent_path}/#{moudel_name}"
    53         mapiGroup = project.main_group.find_subpath(File.join(target.name, parent_path, moudel_name), true)
    54         
    55         puts "mapiGroup : #{mapiGroup}"
    56         puts "moudel_path : #{moudel_path}"
    57         addFilesToGroup(mapiGroup, moudel_path,target)
    58     end
    59 
    60     
    61     puts "重组目录结构..."
    62     project.save
    63 end

      嗯,就这样吧

      GitHub

  • 相关阅读:
    5星|施展《枢纽》(上):中国历史就是中原跟草原、西域、雪域、西南、海洋的互动史
    乔布斯在位时,库克实质上已经在做CEO的工作了:3星|《蒂姆·库克传》
    3星|张维迎《企业家精神与中国经济》:逻辑不够严谨,有陷入锤子模式的嫌疑
    4星|《喜鹊谋杀案》:侦探小说手稿也是罪案工具和破案线索【严重剧透】
    近年读了1008本书,挑出32本5星好书
    2019左其盛好书榜,没见过更好的榜单(截至6月30日)
    他们怎么能如此丧尽天良:3星|《天生恶魔?:纽伦堡审判与罗夏墨迹测验》
    原始部落与现代社会成员的熟人数量都不超过邓巴数:3星|邓巴《社群的进化》
    C#文件或文件夹压缩和解压
    HttpWebRequest Timeout
  • 原文地址:https://www.cnblogs.com/helmsyy/p/9758885.html
Copyright © 2011-2022 走看看