iOS--项目目录组织及生成脚本

来源:互联网 发布:策略模式 java用户界面 编辑:程序博客网 时间:2024/06/05 06:41

在iOS应用开发,Xcode项目目录是随意组织的,这样一来,就会导致不同的人就会有不同的组织方式。从这一点来看,Xcode的项目组织形式上个人觉得就没有Android开发(无论是eclipse还是as)项目组织形式好了。

这段时间为了规范自己的编码目录组织形式,参考网上的资料,结合自己的习惯,定下了以下的一个iOS项目目录组织结构。这个结构并不完美,有好的想法和好的思路会继续更新,逐渐完善整个结构。

资源下载:iOS项目框架脚本

一、目录结构

.
| _ Expand (扩展内容)
| _ _ Category (自定义Category)
| _ _ Macros (宏定义)
| _ _ _ _ JHMacros.h (项目宏定义)
| _ _ _ _ JHMacros.h (全局默认宏定义)
| _ _ _ _ JHThirdMacros.h (项目第三方宏定义)
| _ _ Tool (工具类)
| _ Main (主逻辑及界面View)
| _ _ Module1 (模块1)
| _ _ _ _ Controller (控制器)
| _ _ _ _ Model (数据模型)
| _ _ _ _ Other (其他文件)
| _ _ _ _ Protocal (协议)
| _ _ _ _ Service (服务逻辑)
| _ _ _ _ View (自定义View视图)
| _ _ _ _ _ _ Cell (Cell视图)
| _ _ _ _ _ _ SubView (子视图)
| _ _ Module2 (模块2)
| _ _ _ _ Controller
| _ _ _ _ Model
| _ _ _ _ Other
| _ _ _ _ Protocal
| _ _ _ _ Service
| _ _ _ _ View
| _ _ _ _ _ _ Cell
| _ _ _ _ _ _ SubView
| _ _ Public (公共内容)
| _ _ _ _ Controller
| _ _ _ _ Model
| _ _ _ _ Other
| _ _ _ _ Protocal
| _ _ _ _ Service
| _ _ _ _ View
| _ _ _ _ _ _ Cell
| _ _ _ _ _ _ SubView
| _ Resource (资源)
| _ _ Font (字体资源)
| _ _ Image (图片资源)
| _ _ _ _ Module1.xcassets (模块1图片资源)
| _ _ _ _ Module2.xcassets (模块2图片资源)
| _ _ _ _ Public.xcassets (公共资源)
| _ _ Plist (Plist文件)
| _ SDKFile (第三方SDK)
| _ Vendor (开源项目代码)

二、生成脚本说明

本生成脚本共包含2个文件,一个是项目信息配置文件,一个是脚本程序。

1. 项目信息配置文件(JHFrameworkInitialization.plist)

项目信息配置文件为一个plist文件,包含两个key:projectName和Modules,分别指定项目的项目名称及项目的模块数组。项目名称最好是首字母大写并符合驼峰命名法原则,Modules是一个数组,若项目不能明显区分模块,则不需填写。 该文件需和脚本程序文件在同一目录,否则会出现找不到配置文件的错误。
项目信息配置文件

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict>    <key>ProjectName</key>    <string>OMGProject</string>    <key>Modules</key>    <array>        <string>Module1</string>        <string>Module2</string>    </array></dict></plist>

2. 脚本程序(JHFrameworkInitialization.sh)

其实这个脚本程序是很好理解的,只要有上述的项目目录组织结构,接着就基本使用mkdir命令来生成对应的文件即可。生成完成后需手动把整个结构文件夹添加

#!/bin/shecho ""echo "-------------------------------------"echo "-         初始化JH iOS框架         -"echo "-------------------------------------"echo ""echo "将在以下目录新建:"echo $PWDecho ""# 通过Plist文件获取当前配置数据infoPlistFilePath="JHFrameworkInitialization.plist"if [[ -f infoPlistFilePath ]]; then    echo "找不到项目信息配置文件(JHFrameworkInitialization.plist)"    return fiprojectName=$(/usr/libexec/PlistBuddy -c "print ProjectName" ${infoPlistFilePath})modules=$(/usr/libexec/PlistBuddy -c "print Modules" ${infoPlistFilePath})# 判断是否存在JH iOS框架文件JHPath="JHFramework"if [  -a "$JHPath" ]; thenrm -rf $JHPathfimkdir $JHPath# 创建Main文件夹echo "1.创建Main文件夹..."mkdir $JHPath"/Main"mkdir $JHPath"/Main/Public"mkdir $JHPath"/Main/Public/Controller"mkdir $JHPath"/Main/Public/View"mkdir $JHPath"/Main/Public/View/Cell"mkdir $JHPath"/Main/Public/View/SubView"mkdir $JHPath"/Main/Public/Model"mkdir $JHPath"/Main/Public/Other"mkdir $JHPath"/Main/Public/Protocal"mkdir $JHPath"/Main/Public/Service"# mkdir $JHPath"/Main/Preview"# mkdir $JHPath"/Main/Base"echo "  Main文件夹创建成功!"# 创建Expand文件夹echo "2.创建Expand文件夹..."mkdir $JHPath"/Expand"mkdir $JHPath"/Expand/Category"mkdir $JHPath"/Expand/Macros"mkdir $JHPath"/Expand/Tool"echo "  Expand文件夹创建成功!"# 创建Resource文件夹echo "3.创建Resource文件夹..."mkdir $JHPath"/Resource"mkdir $JHPath"/Resource/Font"mkdir $JHPath"/Resource/Image"mkdir $JHPath"/Resource/Image/Public.xcassets"# mkdir $JHPath"/Resource/Global"mkdir $JHPath"/Resource/Plist"echo "  Resource文件夹创建成功!"# 创建SDKFile文件夹echo "4.创建SDKFile文件夹..."mkdir $JHPath"/SDKFile"echo "  SDKFile文件夹创建成功!"# 创建模块文件夹echo "5.创建Vendor文件夹..."mkdir $JHPath"/Vendor"echo "  Vendor文件夹创建成功!"# 初始化JHMacros.hecho "6.创建JHMacros.h文件..."macrosPath=$JHPath"/Expand/Macros/JHMacros.h"         # JHMacros.h位置echo "//"                                               >>$macrosPathecho "//  JH常用宏定义(尽量不要在这里增加项目的宏定义)"     >>$macrosPathecho "//  JHMacros.h"                                   >>$macrosPathecho "//  "$projectName                                 >>$macrosPathecho "//"                                               >>$macrosPathecho "//  Created by JH on $(date +%m/%d/%y)."       >>$macrosPathecho "//  Copyright © 2016 JH. All rights reserved."    >>$macrosPathecho "//"                                               >>$macrosPathecho ""                                                 >>$macrosPathecho "#ifndef JHMacros_h"                               >>$macrosPathecho "#define JHMacros_h"                               >>$macrosPathecho ""                                                 >>$macrosPathecho "// 导入必要的头文件"                                  >>$macrosPathecho "#import \"JHThridMacros.h\""                      >>$macrosPathecho "#import \"JH"$projectName"Macros.h\""            >>$macrosPathecho ""                                                 >>$macrosPathecho "// 设备Size常量"                                   >>$macrosPathecho "#define JH_SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width            // 屏幕宽度"                  >>$macrosPathecho "#define JH_SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height          // 屏幕高度"                  >>$macrosPathecho "#define JH_TABBAR_HEIGHT 49.0                                              // TabBar高度"                >>$macrosPathecho "#define JH_STATUSBAR_HEIGHT 20.0                                           // 状态栏高度([[UIApplication sharedApplication] statusBarFrame].size.height)" >>$macrosPathecho "#define JH_NAVIGATIONBAR_HEIGHT 44.0                                       // NavigationBar高度"         >>$macrosPathecho ""                                                 >>$macrosPathecho "// 设备信息常量"                                    >>$macrosPathecho "#define JH_SYSTEM_NAME [UIDevice currentDevice].systemName                 // 设备系统名称"               >>$macrosPathecho "#define JH_SYSTEM_VERSION [UIDevice currentDevice].systemVersion           // 设备系统版本"               >>$macrosPathecho "#define JH_UUID [[UIDevice currentDevice].identifierForVendor UUIDString]  // UUID,每次安装app都会不一样" >>$macrosPathecho ""                                                 >>$macrosPathecho "// NSUserDefaults"                                >>$macrosPathecho "#define JH_USERDEFAULTS [NSUserDefaults standardUserDefaults]" >>$macrosPathecho ""                                                 >>$macrosPathecho "// 关于文件管理的常量"                               >>$macrosPathecho "#define JH_FILE_MANAGER [NSFileManager defaultManager]                     // 文件管理者"                 >>$macrosPathecho "#define JH_SANDBOX_DOCUMENTS_PATH [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]    // sandbox中documents文件夹路径" >>$macrosPathecho "#define JH_SANDBOX_LOG_DERECTORY [JH_SANDBOX_DOCUMENTS_PATH stringByAppendingPathComponent:@"JHLog"]     // 日志缓存路径" >>$macrosPathecho ""                                                 >>$macrosPathecho "#endif /* JHMacros_h */"                          >>$macrosPathecho "  JHMacros.h文件创建成功"# 初始化JHThirdMacros.hecho "7.创建JHThirdMacros.h文件..."macrosPath=$JHPath"/Expand/Macros/JHThirdMacros.h"    # JHThirdMacros.h位置echo "//"                                               >>$macrosPathecho "//  JH第三方SDK宏定义"                              >>$macrosPathecho "//  JHThridMacros.h"                              >>$macrosPathecho "//  "$projectName                                 >>$macrosPathecho "//"                                               >>$macrosPathecho "//  Created by JH on $(date +%m/%d/%y)."       >>$macrosPathecho "//  Copyright © 2016 JH. All rights reserved."    >>$macrosPathecho "//"                                               >>$macrosPathecho ""                                                 >>$macrosPathecho "#ifndef JHThridMacros_h"                          >>$macrosPathecho "#define JHThridMacros_h"                          >>$macrosPathecho ""                                                 >>$macrosPathecho ""                                                 >>$macrosPathecho "#endif /* JHThridMacros_h */"                     >>$macrosPathecho "  JHThirdMacros.h文件创建成功"# 初始化应用<ProjectName>Macros.hif [[ $projectName != "" ]]; then    echo "8.创建JH"$projectName"Macros.h文件..."    macrosPath=$JHPath"/Expand/Macros/JH"$projectName"Macros.h"   # JH<ProjectName>Macros.h位置    echo "//"                                               >>$macrosPath    echo "//  本应用("$projectName")宏定义"                 >>$macrosPath    echo "//  JH"$projectName"Macros.h"                     >>$macrosPath    echo "//  "$projectName                                 >>$macrosPath    echo "//"                                               >>$macrosPath    echo "//  Created by JH on $(date +%m/%d/%y)."          >>$macrosPath    echo "//  Copyright © 2016 JH. All rights reserved."    >>$macrosPath    echo "//"                                               >>$macrosPath    echo ""                                                 >>$macrosPath    echo "#ifndef JH"$projectName"Macros_h"                 >>$macrosPath    echo "#define JH"$projectName"Macros_h"                 >>$macrosPath    echo ""                                                 >>$macrosPath    echo ""                                                 >>$macrosPath    echo "#endif /* JH"$projectName"Macros_h */"            >>$macrosPath    echo "  JH"$projectName"Macros.h文件创建成功"fi# 创建模块文件夹echo "9.创建模块文件夹..."for module in $modulesdo    if [[ ${module} != "Array" && ${module} != "{" && ${module} != "}" ]]; then        mkdir $JHPath"/Main/"$module        mkdir $JHPath"/Main/"$module"/Controller"        mkdir $JHPath"/Main/"$module"/View"        mkdir $JHPath"/Main/"$module"/View/Cell"        mkdir $JHPath"/Main/"$module"/View/SubView"        mkdir $JHPath"/Main/"$module"/Model"        mkdir $JHPath"/Main/"$module"/Other"        mkdir $JHPath"/Main/"$module"/Protocal"        mkdir $JHPath"/Main/"$module"/Service"        mkdir $JHPath"/Resource/Image/"$module.xcassets    fidoneecho "  模块文件夹创建成功!"echo ""echo "-------------------------------------"echo "-       初始化JH iOS框架完成       -"echo "-------------------------------------"echo ""
1 0
原创粉丝点击