關於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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM