From 603109a705aee22ceddfed6f68cbcaf5eb3a4a62 Mon Sep 17 00:00:00 2001 From: lifei Date: Fri, 14 Jun 2019 21:52:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 126 ++++---------- "app\350\275\254ipa/AutoIPA.sh" | 31 ---- .../auto-archive.sh" => auto-archive.sh | 0 convert-ipa.sh | 75 +++++++++ dev-shell.py | 66 +++++++- .../image-shell.sh" => image-shell.sh | 0 readme.txt | 52 ++++++ .../arch_common.sh" | 155 ------------------ .../arch_config/Config.h" | 15 -- .../arch_config/config_dev.txt" | 4 - .../arch_config/config_prod.txt" | 4 - .../arch_config/config_vali.txt" | 4 - .../arch_main.sh" | 120 -------------- .../envir_config.sh" | 23 --- 14 files changed, 217 insertions(+), 458 deletions(-) delete mode 100755 "app\350\275\254ipa/AutoIPA.sh" rename "\350\207\252\345\212\250\345\214\226\346\211\223\345\214\205/auto-archive.sh" => auto-archive.sh (100%) create mode 100755 convert-ipa.sh rename "\345\233\276\347\211\207\346\211\271\345\244\204\347\220\206/image-shell.sh" => image-shell.sh (100%) create mode 100644 readme.txt delete mode 100755 "\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_common.sh" delete mode 100755 "\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/Config.h" delete mode 100755 "\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/config_dev.txt" delete mode 100755 "\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/config_prod.txt" delete mode 100755 "\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/config_vali.txt" delete mode 100755 "\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_main.sh" delete mode 100755 "\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/envir_config.sh" diff --git a/README.md b/README.md index f6532ad..158dce6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Mac 端 Shell 脚本 -Mac 上一些常用的**批处理脚本**,类似 Windows 电脑上常用的 Batch 批处理脚本文件。收集开发中常用到的 Shell 脚本,下载后可根据需求修改使用。 +Mac 上一些常用的**批处理脚本**,类似 Windows 电脑上常用的 Batch 批处理脚本文件。收集开发中常用到的 Shell 脚本,下载后可根据需求修改使用。 |类型|说明|备注| |:---|:---|:---| @@ -11,27 +11,39 @@ Mac 上一些常用的**批处理脚本**,类似 Windows 电脑上常用的 Ba |自动化打包|利用 xcodebuild 指令将项目打包为 ipa。|| |app 转 ipa|将项目编译后的 .app 文件转换为 ipa 文件。|| -## Shell 脚本用法 +## 基于 tkinter 的简易图像界面 -在 Mac 的终端中: +![python 图像界面](https://raw.githubusercontent.com/muzipiao/GitHubImages/master/dev-shell/shell_py.png) -1. 将 Shell 文件复制到目标目录下; -2. 打开终端,拖入 Shell 文件到终端,回车; -3. 输入 1 或 2 或 3 或 4 即可进行对应操作。 +## 直接使用终端操作 -![终端操作示意图](https://github.com/muzipiao/GitHubImages/blob/master/CreateiPhoneIconShellBlogImages/7.png) +![python 图像界面](https://raw.githubusercontent.com/muzipiao/GitHubImages/master/dev-shell/shell_cmd.png) -## 修改 Shell 脚本 +## Shell 脚本用法(以图片批处理为例) + +直接在 Mac 的终端中使用: + +1. 将 image-shell.sh 脚本和要处理的图片拖放到同一个文件夹中; +2. 将 image-shell.sh 拖入终端,回车; +3. 根据提示,输入数字1或2或3或4,执行脚本; +4. 脚本会在原图片目录下新建文件夹,处理后的图片在新建文件夹中。 + +使用 Python 图形界面: -### 增加 AppIcon 的尺寸类型 +1. 将 image-shell.sh 脚本和 dev-shell.py 脚本拖放到同一个文件夹中; +2. 打开终端,输入 python3 (注意有一个空格),拖入 dev-shell.py 到终端,回车; +3. 根据图形界面提示,选择文件或者文件夹,点击确定按钮; +4. 脚本会在原图片目录下新建文件夹,处理后的图片在新建文件夹中。 -AppIcon 尺寸包含 40×40 58×58 60×60 80×80 87×87 120×120 180×180 1024×1024,如果需要特殊尺寸,在下方的for循环处添加相应的数字即可。 +## 修改 Shell 脚本 + +增加 AppIcon 或 LaunchImage 的尺寸类型 -![增加 AppIcon 尺寸类型](https://github.com/muzipiao/GitHubImages/blob/master/CreateiPhoneIconShellBlogImages/9.png) +AppIcon 尺寸包含 40×40 58×58 60×60 80×80 87×87 120×120 180×180 1024×1024,如果需要特殊尺寸,在下方的for循环处添加相应的数字即可。LaunchImage 尺寸包含 960x640,1134x640,1334x750,2208x1242 等等,如果需要其他尺寸,方法相同。 -### 增加 LaunchImage 的尺寸类型 +![增加尺寸类型](https://raw.githubusercontent.com/muzipiao/GitHubImages/master/dev-shell/shell_edit.png) -LaunchImage 尺寸包含 960x640,1134x640,1334x750,2208x1242 等等,如果需要其他尺寸,方法同上,自己到 Shell 文件中修改相应尺寸数字即可。 +LaunchImage 的尺寸类型 手机型号 | 屏幕尺寸 | 屏幕密度 | 逻辑尺寸 | 逻辑像素 | 缩放倍数 ---|---|---|---|---|--- @@ -44,84 +56,10 @@ XS | 5.8英寸 | 458ppi | 375*812pt | 1125*2436px | @3x XS Max | 6.5英寸 | 458ppi | 414*896pt | 1242*2688px | @3x XR | 6.1英寸 | 326ppi | 414*896pt | 828*1792px | @2x -### 3.3、批量生成1x,2x,3x图片 - -1. 将当前文件夹下所有图片缩放为1x,2x,3x图片,并自动命名; -2. 注意:如果icon.png和LaunchImage.png也在当前图片文件下,也会生成1x,2x,3x图片。 - -### 3.4、批量将图片转为PNG格式 - -1. 会将当前文件夹下所有图片转换为PNG格式; -2. 注意,用Shell脚本和用苹果图片预览工具另存为转换,都是仅仅转换图片格式,简单的将缺失Alpha通道色都补为1,体积会变大; -3. 例如JPEG图片格式,只包含RGB通道颜色,体积小,适合网络传输和打印;而PNG图片格式,除了包含RGB颜色外,还包含Alpha透明通道; -4. PNG图片格式是苹果官方推荐的格式,因为iOS系统会用到大量的透明效果,而且PNG图片支持硬解码,使界面更流畅。 - -### 3.5、自动配置项目脚本 - -此脚本供参考,需要一定的脚本基础,根据项目实际情况修改使用。 - -```shell -# 主Shell文件,配置文件填写完成后,将此文件拖入到终端即可。 - -shell_path=$(cd `dirname $0`; pwd) -# 导入公共方法和环境变量 -cd `dirname $0` -. ./arch_common.sh -. ./envir_config.sh - -#提示用户选择 -echo "*** 输入以下需要连接的后台环境 ***" -echo "*** vali,dev,prod ***" -# 读取用户输入并存到变量里 -read parameter -sleep 0.5 -#获取用户选择的字符串,切记=号两边不能有空格 -method="$parameter" -# 判读用户是否有输入 -if [ -n "$method" ]; then - ip_file_name="config_" - if [ "$method" = "vali" ] || [ "$method" = "dev" ]; then - ip_file_name=""$shell_path"/arch_config/"$ip_file_name$method".txt" - elif [ "$method" = "prod" ]; then - ip_file_name=""$shell_path"/arch_config/"$ip_file_name$method".txt" - # 生产要求输入BundleVersion,存到bundle_version - if ["$bundle_prod_version" = ""]; then - # 如果生产版本未配置,则读取输入 - ReadTargetBundleVersion - fi - else - echo "*** 不包含此配置文件 ***" - exit 1 - fi - # 读取ip配置文件到session环境变量 - source $ip_file_name - echo "*** 读取配置文件"$ip_file_name" ***" -else - echo "*** 参数无效,重新输入 ***" -fi - -# 读取项目路径 -CdProjectPath ${project_folder_path} -# 删除重复Info.plist防止打包错误(可选,根据需要) -DelDuplicateInfo ${pbxproj_path} -# 配置项目描述文件 -ConfigProjectProvison ${pbxproj_path} ${provison_name} ${provison_value} -# 删除Config.h旧的配置 -RemoveConfigFileOldDefine ${config_file_path} -# 配置Config.h文件 -DeployConfigManager ${config_file_path} ${bundle_version} -# 配置Info.plist文件 -DeployInfoFile ${Info_file} ${bundle_version} -# 配置ExportOptions.plist文件 -DeployExportOptionsFile ${export_options_file} ${provison_value} -echo "*** "$parameter"环境配置完成 ***" - -``` - -## 2.6、JPG 与 PNG 注意点: - -由于我在网上找到的是 `JPG` 图片,转为 `PNG` 图片后,`Alpha 通道` 颜色异常,所以有 `CGColor` 颜色警告,正常` PNG `图片处理是没有<...>部分的,有警告但不影响使用。 - ----------- - -如果您觉得有所帮助,请在[GitHub](https://github.com/muzipiao/MacShell)上赏个Star ⭐️,您的鼓励是我前进的动力。 +## JPEG 与 PNG 图片格式 + +1. 使用 Shell 脚本或苹果图片预览工具转换,转换图片格式时,若原来不包含 Alpha 通道,则会将缺失的 Alpha 通道值补为1,体积会变大。 +2. JPEG 图片格式,只包含RGB通道颜色,体积小,适合网络传输和打印;而 PNG 图片格式,除了包含RGB颜色外,还包含Alpha透明通道。 +3. PNG 图片格式是苹果官方推荐的格式,因为iOS系统会用到大量的透明效果,而且 PNG 图片支持硬解码,使界面更流畅。 + +如果您觉得有所帮助,请在[GitHub](https://github.com/muzipiao/dev-shell)上赏个Star ⭐️,您的鼓励是我前进的动力。 diff --git "a/app\350\275\254ipa/AutoIPA.sh" "b/app\350\275\254ipa/AutoIPA.sh" deleted file mode 100755 index 804c1c3..0000000 --- "a/app\350\275\254ipa/AutoIPA.sh" +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh - -# -# Created by PacteraLF on 17/4/17. -# Copyright © 2017年 PacteraLF. All rights reserved. - -# 将此脚本放入project文件同级目录下即可 -cd $(dirname $0) - -#注意:脚本目录和xxx.app要在同一个目录,如果放到其他目录,请自行修改脚本。 -#包名称(以.app为后缀名的包名称) -#这里请将双引号里面的名称改为你xxx.app的名称 -App_Name="这里替换为你的.app的文件名,不包含后缀" - -# 先删除里面当前的IPAFolder文件夹 -rm -rf IPAFolder -# 再创建IPAFolder文件夹 -mkdir IPAFolder -# 在文件夹里面创建Payload文件夹 -mkdir IPAFolder/Payload -# 将当前目录下的App_Name.app复制到Payload里面 -cp -r $App_Name.app IPAFolder/Payload/$App_Name.app -# IPA包制作中可忽略iTunesArtwork这个图标,经过发现,可以不要这个图标,打包的时候只吧目录打进去即可 -# cp Icon.png IPAFolder/iTunesArtwork -# 进入CEB文件夹 -cd IPAFolder -# 压缩多个目录zip FileName.zip 目录1 目录2 目录3.... -# zip -r $App_Name.ipa Payload iTunesArtwork -zip -r $App_Name.ipa Payload - -exit 0 diff --git "a/\350\207\252\345\212\250\345\214\226\346\211\223\345\214\205/auto-archive.sh" b/auto-archive.sh similarity index 100% rename from "\350\207\252\345\212\250\345\214\226\346\211\223\345\214\205/auto-archive.sh" rename to auto-archive.sh diff --git a/convert-ipa.sh b/convert-ipa.sh new file mode 100755 index 0000000..8805614 --- /dev/null +++ b/convert-ipa.sh @@ -0,0 +1,75 @@ +#!/bin/sh + +# 脚本目录和xxx.app要在同一个目录,如果想要配置,请填入包含后缀名的全称 +g_app_name="" + +# 在当前目录下找到 .app 文件 +AutoFindAppFolder() { + for p_file in ./*; do + #判断是否为文件夹 + if [ -d "$p_file" ]; then + file_name=$(basename "$p_file") + #判断后缀名称是否是app + file_last=${file_name##*.} + if [ "$file_last" = "app" ]; then + g_app_name="$file_name" + fi + fi + done +} + +# 读取用户输入 +ReadUserSelectPara() { + if [ -z "$g_app_name" ]; then + # 文件名称为空 + read -r input_name + sleep 0.1 + g_app_name=$input_name + ReadUserSelectPara + else + # 文件名称有效 + echo "*** 当前.app 文件:$g_app_name ***" + fi +} + +# 打包ipa +AppToIpa() { + app_file_name=$1 + # 先删除里面当前的IPAFolder文件夹 + rm -rf IPAFolder + # 再创建IPAFolder文件夹 + mkdir IPAFolder + # 在文件夹里面创建Payload文件夹 + mkdir IPAFolder/Payload + # 将当前目录下的App_Name.app复制到Payload里面 + cp -r "$app_file_name" IPAFolder/Payload/"$app_file_name" + # 进入IPAFolder文件夹 + cd IPAFolder + # 压缩多个目录zip FileName.zip 目录1 目录2 目录3.... + file_head=${app_file_name%.*} + zip -r "$file_head.ipa" Payload + echo "*** ipa 文件已经创建到 IPAFolder 文件夹下 ***" +} + +# 脚本主函数 +Main() { + # 如果未设置,则自动获取一次 + if [ -z "$g_app_name" ]; then + AutoFindAppFolder + fi + # 如果自动获取仍旧为空,则要求用户输入 + if [ -z "$g_app_name" ]; then + echo "*** 请输入.app全名称,包含后缀名 ***" + ReadUserSelectPara + else + # 转换 + AppToIpa "$g_app_name" + fi +} + +cd "$(dirname "$0")" || exit 0 + +# 判断有无传递参数,Python脚本中传递有参数 +if [ -z "$1" ]; then + Main +fi \ No newline at end of file diff --git a/dev-shell.py b/dev-shell.py index c12caee..9018920 100644 --- a/dev-shell.py +++ b/dev-shell.py @@ -365,16 +365,66 @@ def sure_btn_click(self): # ----------------------- App 转 ipa ----------------------- class AppToIpaHandle: def __init__(self, master): - ipa_frame = Frame(master) - ipa_frame.pack() + self._master = master + self._frame = Frame(master) + self._frame.grid() + self._str_var = StringVar() + self.create_ui() + self.auto_find_app() + + # 在当前脚本目录下搜索 + def auto_find_app(self): + py_dir = os.getcwd() + file_list = os.listdir(py_dir) + for file_name in file_list: + if file_name.endswith('.app'): + temp_full_path = os.path.join(py_dir, file_name) + self._str_var.set(temp_full_path) + break + + # 创建界面 + def create_ui(self): + app_frame = self._frame + field_width = 40 + pad_width = 35 + # 提示 + tip_label = Label(app_frame, text="请选择后缀名为 .app 的文件", fg='DarkCyan') + path_label = Label(app_frame, text='项目路径:', fg='black') + + # 选择项目路径按钮 + self._str_var.set('输入或者选择 .app 文件路径') + path_input = Entry(app_frame, textvariable=self._str_var, width=field_width) + select_path_btn = Button(app_frame, text='选择文件', command=self.select_path_btn_click) + # 提交按钮 + sure_btn = Button(app_frame, text='确定', command=self.sure_btn_click) + # 布局 + tip_label.grid(row=0, column=0, padx=5, pady=5, rowspan=1, columnspan=3, sticky=W) + path_label.grid(row=1, column=0, padx=5, pady=5) + path_input.grid(row=1, column=1, padx=5, pady=5) + select_path_btn.grid(row=1, column=2, padx=5, pady=5) + sure_btn.grid(row=3, column=0, padx=pad_width, pady=pad_width, rowspan=2, columnspan=3, sticky=NSEW) - self._quit_btn = Button(ipa_frame, text="a关闭", fg="blue", command=master.destroy) - self._quit_btn.pack(side=LEFT) - self._hi_btn = Button(ipa_frame, text="Hello", command=self.say_hi) - self._hi_btn.pack(side=LEFT) + # 选择 .app 文件 + def select_path_btn_click(self): + file_path = filedialog.askopenfilename() + if len(file_path) > 0: + self._str_var.set(file_path) + + def sure_btn_click(self): + dst_path = self._str_var.get() + # 判断是否是.app 文件 + if not dst_path.endswith('.app'): + messagebox.showinfo(title='提示', message='请选择 .app 文件') + return - def say_hi(self): - print("AAAAHi! This is version 2 of 'hello world'") + if not os.path.isfile("convert-ipa.sh"): + messagebox.showinfo(title='提示', message='请将 convert-ipa.sh 文件拖到 python 脚本所在目录') + return + # 如果选择的是文件,则将文件名称和目录分开 + file_name = os.path.basename(dst_path) + dir_path = os.path.dirname(dst_path) + os.system('. ./convert-ipa.sh python ' + '&& cd ' + dir_path + ' && AppToIpa ' + file_name) + messagebox.showinfo(title='提示', message='图片已经保存' + dir_path + '/IPAFolder 文件夹中') # ----------------------- App ----------------------- diff --git "a/\345\233\276\347\211\207\346\211\271\345\244\204\347\220\206/image-shell.sh" b/image-shell.sh similarity index 100% rename from "\345\233\276\347\211\207\346\211\271\345\244\204\347\220\206/image-shell.sh" rename to image-shell.sh diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..5230277 --- /dev/null +++ b/readme.txt @@ -0,0 +1,52 @@ +脚本介绍 +1. 图片批处理:image-shell.sh +2. 自动化打包:auto-archive.sh +3. app转ipa:convert-ipa.sh +4. 图像界面 :dev-shell.py + +Python 图像界面仅支持 3.0 以上版本,例如 python3 拖入 dev-shell.py 到终端(注意 python3 后面有一个空格)。 + +------------------------------------------------------- + +# image-shell.sh +直接使用步骤: +1. 将 image-shell.sh 脚本和要处理的图片拖放到同一个文件夹中; +2. 将 image-shell.sh 拖入终端,回车; +3. 根据提示,输入数字1或2或3或4,执行脚本; +4. 脚本会在原图片目录下新建文件夹,处理后的图片在新建文件夹中。 + +使用 Python 图形界面步骤: +1. 将 image-shell.sh 脚本和 dev-shell.py 脚本拖放到同一个文件夹中; +2. 打开终端,输入 python3和一个空格,拖入 dev-shell.py 到终端,回车; +3. 根据图形界面提示,选择文件或者文件夹,点击确定按钮; +4. 脚本会在原图片目录下新建文件夹,处理后的图片在新建文件夹中。 + +------------------------------------------------------- + +# auto-archive.sh +直接使用步骤: +1. 将 auto-archive.sh 脚本复制到文件后缀名 .xcodeproj 所在项目目录下; +2. 将 auto-archive.sh 拖入终端,回车即可; +3. 如果自动打包失败,请打开 auto-archive.sh 配置项目信息; +4. 如果项目目录无 ExportOptions.plist 文件,请参考新建。 + +使用 Python 图形界面步骤: +1. 将 auto-archive.sh 脚本和 dev-shell.py 脚本拖放到同一个文件夹中; +2. 打开终端,输入 python3和一个空格,拖入 dev-shell.py 到终端,回车; +3. 根据图形界面提示,选择文件或者文件夹,点击确定按钮; +4. 如果脚本自动获取失败,请手动配置。 + +------------------------------------------------------- + +# convert-ipa.sh +直接使用步骤: +1. 将 convert-ipa.sh 和 .app 后缀名文件放在同一个文件夹中;; +2. 将 convert-ipa.sh 拖入终端,回车即可; +3. 转换完成的 ipa 文件在 IPAFolder 文件夹中。 + +使用 Python 图形界面步骤: +1. 将 convert-ipa.sh 脚本和 dev-shell.py 脚本拖放到同一个文件夹中; +2. 打开终端,输入 python3和一个空格,拖入 dev-shell.py 到终端,回车; +3. 根据图形界面提示,选择文件,点击确定按钮。 + + diff --git "a/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_common.sh" "b/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_common.sh" deleted file mode 100755 index 4d3fa1a..0000000 --- "a/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_common.sh" +++ /dev/null @@ -1,155 +0,0 @@ -#!/bin/sh -# 抽取一些通用的方法 -# --------------------1、进入项目文件夹,配置或者拖入项目文件夹-------------------- -CdProjectPath() { - temp_project_folder_path=$1 - if [ -d "$temp_project_folder_path" ]; then - echo "*** 项目路径:$temp_project_folder_path ***" - # 进入文件夹 - cd $temp_project_folder_path - else - echo "*** 项目路径错误,请输入或者拖入项目的文件夹的绝对路径 ***" - echo $temp_project_folder_path - read pf_path_para - sleep 0.5 - # 递归调用 - CdProjectPath $pf_path_para - fi -} - -#--------------------2、清除项目中重复的Info.plist防止打包错误-------------------- -DelDuplicateInfo() { - # 删除Resources文件下Info.plist - echo "*** 删除Resources/Info.plist ***" - resour_info="Resources/Info.plist" - rm $resour_info - # 清除pbxproj文件中Info.plist的索引B04709921B2ADD0800737722和B04709941B2ADD0800737722 - temp_pbxproj_file_path=$1 - sed -i "" "/B04709921B2ADD0800737722/d" ${temp_pbxproj_file_path} - sed -i "" "/B04709941B2ADD0800737722/d" ${temp_pbxproj_file_path} -} - -#-------------------3、配置project.pbxproj文件中描述文件------------------- -ConfigProjectProvison() { - # project.pbxproj文件 - project_file=$1 - # 描述文件名称 - provison_name=$2 - # 描述文件的值 - provison_value=$3 - # 首先替换描述文件名称 - sed -i "" "s/PROVISIONING_PROFILE_SPECIFIER = .*;/PROVISIONING_PROFILE_SPECIFIER = ${provison_name};/g" ${project_file} - # 再替换描述文件的值 - prov_name_list=$(sed -n -e "/PROVISIONING_PROFILE_SPECIFIER = */=" ${project_file}) - for value in $prov_name_list; do - begin_line=$(expr $value - 1) - end_line=$(expr $value + 1) - sed -i "" "${begin_line},${end_line}s/PROVISIONING_PROFILE = \".*\"/PROVISIONING_PROFILE = \"${provison_value}\"/g" ${project_file} - done - echo "*** target描述文件配置完成 ***" -} - -#-------------------4、Prod生产环境要求输入BundleVersion------------------- -ReadTargetBundleVersion() { - # 读取用户输入的CFBundleVersion - echo "*** 请输入CFBundleVersion如4.2.0 ***" - read app_version_para - sleep 0.5 - #获取用户选择的字符串,切记=号两边不能有空格 - app_version="$app_version_para" - # 判读用户是否有输入 - if [ -n "$app_version" ]; then - # 将输入的版本号传给环境变量 - bundle_version=$app_version - else - echo "*** 生产版本BundleVersion不能为空 ***" - ReadTargetBundleVersion - fi -} - -#--------------------5、删除ConfigManager.h旧的自动配置-------------------- -RemoveConfigFileOldDefine() { - temp_config_file=$1 - # 逐行读取文件删除旧的配置,查找需要删除的行 - index=0 - while read line; do - # -c:只输出匹配行的计数,这里如果为空行输出1,否则是0 - isBlankLine=$(echo $line | grep -c "^$") - # 是否有#define的前缀,有输出结果,否则为空 - isHasDefinePre=$(echo $line | grep "^\#define") - # -n判断变量的值,非空返回true - if [ -n "$isHasDefinePre" ] || [ $isBlankLine -eq 1 ]; then - index=$(expr $index + 1) - else - break - fi - done <$temp_config_file - # 如果匹配结果大于0,则删除这些行 - if [ $index -gt 0 ]; then - sed -i '' '1,'$index'd' $temp_config_file - echo "*** Config.h文件删除1--"$index"行 ***" - fi -} - -#-------------------6、配置ConfigManager.h文件IP------------------- -DeployConfigManager() { - # 配置文件Config.h - temp_config_file=$1 - - # 配置文件前缀 - base_url_pre="#define BASE_URL @" - app_version_pre="#define APP_VERSION @" - pub_key_pre="#define PUB_KEY @" - jgid_pre="#define JGID @" - - # 将文件中以这些前缀的所有行全部注释掉,在行前面加上// - sed -i "" "s/^${base_url_pre}/\/\/&/g" ${temp_config_file} - sed -i "" "s/^${app_version_pre}/\/\/&/g" ${temp_config_file} - sed -i "" "s/^${pub_key_pre}/\/\/&/g" ${temp_config_file} - sed -i "" "s/^${jgid_pre}/\/\/&/g" ${temp_config_file} - - # 读取配置文件中的配置 - base_url=${BASE_URL} - app_version=${APP_VERSION} - pub_key=${PUB_KEY} - jgid=${JGID} - - # 将空格都转换为[[:space:]],插入不能有空格 - base_url_space=$(echo $base_url | sed "s/ /[[:space:]]/g") - app_version_space=$(echo $app_version | sed "s/ /[[:space:]]/g") - pub_key_space=$(echo $pub_key | sed "s/ /[[:space:]]/g") - jgid_space=$(echo $jgid | sed "s/ /[[:space:]]/g") - - # 在首行插入配置,方便核对查看 - sed -i '' '1i\ - '$base_url_space'\ - '$app_version_space'\ - '$pub_key_space'\ - '$jgid_space'\ - ' ${temp_config_file} - - # 替换掉所有的[[:space:]]为空格,搜索前100行即可,配置超过100行更改数字即可 - sed -i '' '1,100s/\[\[:space:\]\]/ /g' ${temp_config_file} - echo "*** Config.h文件配置完成 ***" -} - -#--------------------7、配置Info.plist文件-------------------- -DeployInfoFile() { - temp_Info_file=$1 - temp_bundle_version=$2 - # sed -i "" "/CFBundleShortVersionString<\/key>/{ n; s/\(\).*\(<\/string>\)/\1${temp_bundle_version}\2/;}" ${temp_Info_file} - # sed -i "" "/CFBundleVersion<\/key>/{ n; s/\(\).*\(<\/string>\)/\1${temp_bundle_version}\2/;}" ${temp_Info_file} - /usr/libexec/PlistBuddy -c 'Set :CFBundleShortVersionString '${temp_bundle_version}'' ${temp_Info_file} - /usr/libexec/PlistBuddy -c 'Set :CFBundleVersion '${temp_bundle_version}'' ${temp_Info_file} - echo "*** Info.plist文件配置完成 ***" -} - -#------------------8、配置ExportOptions.plist文件---------------- -DeployExportOptionsFile() { - # 配置ExportOptions.plist - temp_export_options_file=$1 - temp_mobile_provison=$2 - #sed -i "" "/provisioningProfiles<\/key>/{ n; s/\(\).*\(<\/string>\)/\1${temp_mobile_provison}\2/;}" ${temp_export_options_file} - /usr/libexec/PlistBuddy -c 'Set :provisioningProfiles:com.cebbank.xyk '${temp_mobile_provison}'' ${temp_export_options_file} - echo "*** ExportOptions.plist文件配置完成 ***" -} diff --git "a/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/Config.h" "b/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/Config.h" deleted file mode 100755 index 9be1feb..0000000 --- "a/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/Config.h" +++ /dev/null @@ -1,15 +0,0 @@ -#define BASE_URL @"https://10.188.88.88:8088" -#define APP_VERSION @"4.0.0" -#define PUB_KEY @"root" -#define JGID @"AAAA6BBB" -// -// ConfigManager.h -// -// Copyright 2011 abc. All rights reserved. -// - - -//#define BASE_URL @"https://aaa.bbb.com:8088" -//#define APP_VERSION @"4.9.0" -//#define PUB_KEY @"root_prod" -//#define JGID @"AAAA6CCCC" diff --git "a/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/config_dev.txt" "b/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/config_dev.txt" deleted file mode 100755 index 0a4525d..0000000 --- "a/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/config_dev.txt" +++ /dev/null @@ -1,4 +0,0 @@ -BASE_URL="#define BASE_URL @\"https://10.188.88.99:8088\"" -APP_VERSION="#define APP_VERSION @\"4.0.0\"" -PUB_KEY="#define PUB_KEY @\"root\"" -JGID="#define JGID @\"AAAA6BBB\"" \ No newline at end of file diff --git "a/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/config_prod.txt" "b/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/config_prod.txt" deleted file mode 100755 index ecd1a07..0000000 --- "a/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/config_prod.txt" +++ /dev/null @@ -1,4 +0,0 @@ -BASE_URL="#define BASE_URL @\"https://aaa.bbb.com:8088\"" -APP_VERSION="#define APP_VERSION @\"4.9.0\"" -PUB_KEY="#define PUB_KEY @\"root_prod\"" -JGID="#define JGID @\"AAAA6CCCC\"" \ No newline at end of file diff --git "a/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/config_vali.txt" "b/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/config_vali.txt" deleted file mode 100755 index 9a70b72..0000000 --- "a/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_config/config_vali.txt" +++ /dev/null @@ -1,4 +0,0 @@ -BASE_URL="#define BASE_URL @\"https://10.188.88.88:8088\"" -APP_VERSION="#define APP_VERSION @\"4.0.0\"" -PUB_KEY="#define PUB_KEY @\"root\"" -JGID="#define JGID @\"AAAA6BBB\"" \ No newline at end of file diff --git "a/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_main.sh" "b/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_main.sh" deleted file mode 100755 index 0dbc5fb..0000000 --- "a/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/arch_main.sh" +++ /dev/null @@ -1,120 +0,0 @@ -#!/bin/sh -# 主Shell文件,配置文件填写完成后,将此文件拖入到终端即可。 -shell_path=$( - cd $(dirname $0) - pwd -) -# 导入公共方法和环境变量 -cd $(dirname $0) -. ./arch_common.sh -. ./envir_config.sh - -#提示用户选择 -echo "*** 输入以下需要连接的后台环境 ***" -echo "*** vali,dev,prod ***" -# 读取用户输入并存到变量里 -read parameter -sleep 0.5 -#获取用户选择的字符串,切记=号两边不能有空格 -method="$parameter" -# 判读用户是否有输入 -if [ -n "$method" ]; then - ip_file_name="config_" - if [ "$method" = "vali" ] || [ "$method" = "dev" ]; then - ip_file_name="$shell_path/arch_config/"$ip_file_name$method".txt" - elif [ "$method" = "prod" ]; then - ip_file_name="$shell_path/arch_config/"$ip_file_name$method".txt" - # 生产要求输入BundleVersion,存到bundle_version - if [ "$bundle_prod_version" = "" ]; then - # 如果生产版本未配置,则读取输入 - ReadTargetBundleVersion - fi - else - echo "*** 不包含此配置文件 ***" - exit 1 - fi - # 读取ip配置文件到session环境变量 - source $ip_file_name - echo "*** 读取配置文件"$ip_file_name" ***" -else - echo "*** 参数无效,重新输入 ***" -fi - -# 读取项目路径 -CdProjectPath ${project_folder_path} -# 删除重复Info.plist防止打包错误(可选,根据需要) -DelDuplicateInfo ${pbxproj_path} -# 配置项目描述文件 -ConfigProjectProvison ${pbxproj_path} ${provison_name} ${provison_value} -# 删除Config.h旧的配置 -RemoveConfigFileOldDefine ${config_file_path} -# 配置Config.h文件 -DeployConfigManager ${config_file_path} ${bundle_version} -# 配置Info.plist文件 -DeployInfoFile ${Info_file} ${bundle_version} -# 配置ExportOptions.plist文件 -DeployExportOptionsFile ${export_options_file} ${provison_value} -echo "*** "$parameter"环境配置完成 ***" - -# XCode目录路径 -default_xcode="/Applications/Xcode.app/Contents/Developer" -current_xcode=$(xcode-select --print-path) -config_xcode="/Applications/"$xcode_name".app/Contents/Developer" - -# 如果当前环境变量和配置不相等,则切换(安装多版本XCode需要切换) -if [ $current_xcode != $config_xcode ]; then - echo "*** 请输入系统密码切换Xcode为:"$xcode_name" ***" - # 切换XCode默认版本 - sudo xcode-select -switch $config_xcode -fi - -# 工程名,注意:脚本目录和xxxx.xcodeproj要在同一个目录,如果放到其他目录,请自行修改脚本。 -project_name="工程名称" - -#打包模式 Debug/Release -development_mode="Release" - -#scheme名 -scheme_name="编译生成的Target名称" - -#plist文件所在路径 -exportOptionsPlistPath=./ExportOptions.plist - -#导出.ipa文件所在路径 -exportFilePath=~/Desktop/$project_name-ipa - -echo '*** 正在 清理工程 ***' -xcodebuild \ - clean -configuration ${development_mode} -quiet || exit -echo '*** 清理完成 ***' - -echo '*** 正在 编译工程 For '${development_mode} -xcodebuild \ - archive -project ${project_name}.xcodeproj \ - -scheme ${scheme_name} \ - -configuration ${development_mode} \ - -archivePath build/${project_name}.xcarchive -quiet || exit -echo '*** 编译完成 ***' - -echo '*** 正在 打包 ***' -xcodebuild -exportArchive -archivePath build/${project_name}.xcarchive \ - -configuration ${development_mode} \ - -exportPath ${exportFilePath} \ - -exportOptionsPlist ${exportOptionsPlistPath} \ - -quiet || exit - -# 删除build包 -if [[ -d build ]]; then - rm -rf build -r -fi - -if [ -e $exportFilePath/$scheme_name.ipa ]; then - echo "*** .ipa文件已导出 ***" - cd ${exportFilePath} - echo "*** 开始上传.ipa文件 ***" - #此处上传分发应用 - echo "*** .ipa文件上传成功 ***" -else - echo "*** 创建.ipa文件失败 ***" -fi -echo '*** 打包完成 ***' diff --git "a/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/envir_config.sh" "b/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/envir_config.sh" deleted file mode 100755 index b64e549..0000000 --- "a/\350\207\252\345\212\250\345\214\226\351\205\215\347\275\256\345\257\274\345\207\272ipa/envir_config.sh" +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -# 项目配置 -# 用非默认版本Xcode打包请更改Xcode名称为对应XCode名称 -xcode_name="Xcode" -# 请将CCCCC.xcodeproj替换为项目中后缀名为.xcodeproj的名称 -pbxproj_path="CCCCC.xcodeproj/project.pbxproj" -# 项目在所在绝对路径 -project_folder_path="/Users/P85755/Desktop/项目/项目文件夹" -# Config.h文件路径 -config_file_path="arch_config/Config.h" -# Info.plist文件路径 -Info_file="Info.plist" -# CFBundleVersion和CFBundleShortVersionString默认4.0.0,测试版本 -bundle_version="4.0.0" -# 生产版本,如果生产版本为空,则要求输入 -bundle_prod_version="" -# BundleId -bundle_id="com.ccc.xxx" -# 配置ExportOptions.plist -export_options_file="ExportOptions.plist" -# 描述文件 -provison_name="cccdevolopment181121" -provison_value="mmmmm-bbbbb-dddd-aaaa-kkkkkk"