Skip to content

Commit

Permalink
优化
Browse files Browse the repository at this point in the history
  • Loading branch information
muzipiao committed Jun 14, 2019
1 parent 4a9ef24 commit 603109a
Show file tree
Hide file tree
Showing 14 changed files with 217 additions and 458 deletions.
126 changes: 32 additions & 94 deletions README.md
@@ -1,6 +1,6 @@
# Mac 端 Shell 脚本

Mac 上一些常用的**批处理脚本**,类似 Windows 电脑上常用的 Batch 批处理脚本文件。收集开发中常用到的 Shell 脚本,下载后可根据需求修改使用。
Mac 上一些常用的**批处理脚本**,类似 Windows 电脑上常用的 Batch 批处理脚本文件。收集开发中常用到的 Shell 脚本,下载后可根据需求修改使用。

|类型|说明|备注|
|:---|:---|:---|
Expand All @@ -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 的尺寸类型

手机型号 | 屏幕尺寸 | 屏幕密度 | 逻辑尺寸 | 逻辑像素 | 缩放倍数
---|---|---|---|---|---
Expand All @@ -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 ⭐️,您的鼓励是我前进的动力。
31 changes: 0 additions & 31 deletions app转ipa/AutoIPA.sh

This file was deleted.

File renamed without changes.
75 changes: 75 additions & 0 deletions 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
66 changes: 58 additions & 8 deletions dev-shell.py
Expand Up @@ -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 -----------------------
Expand Down
File renamed without changes.
52 changes: 52 additions & 0 deletions 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. 根据图形界面提示,选择文件,点击确定按钮。


0 comments on commit 603109a

Please sign in to comment.