shell技巧1 - 生成ipa文件

简介: 1、前言iTunes 12.7 之前,可以下载ipa应用包、打开ipa包,也生成ipa文件!但是在这12.7之后,关于ipa的所有功能已经移除,如果还想下载ipa包,可以参考我之前的文章:解决 iTunes 12.7 无法下载 AppStore应用的IPA包问题,今天我们主要来说说制作ipa文件的功能。

1、前言

iTunes 12.7 之前,可以下载ipa应用包、打开ipa包,也生成ipa文件!但是在这12.7之后,关于ipa的所有功能已经移除,如果还想下载ipa包,可以参考我之前的文章:解决 iTunes 12.7 无法下载 AppStore应用的IPA包问题,今天我们主要来说说制作ipa文件的功能。

img_9cc2f496056258ae636038b4aea92c5b.png
20180831-iTunes12.7-new-change.png
img_d776c821236d1e83fd205b7d39ec8204.png
20180831-iTunes12.7.png

2、ipa文件结构

其实ipa文件可以理解为一个zip的压缩文件,所以解压ipa文件后,得到ipa的目录 ipafilename/Payload/xxx.app,以微信示例:

img_355e40f0b20895b76e85c97d0d7640ff.png
20180831-ipa-file-path.png

所以,如果我们编译的项目,想生成ipa文件,以前是拖拽到iTunes就会自动生成ipa文件,现在不行了,根据这个原理,我们在Xcode中编译生成的.app目录,按照前面说的目录结构,进行压缩就行啦!

3、bash脚本

  • 生成.app目录内容:


    img_d2f997a22e695e78d33e306a7d9ad6aa.png
    20180831-Xcode-build-app.png
  • 执行shell脚本生成ipa文件:


    img_02d2b3c1e27c0aec674b7fe34f1a78a0.png
    20180831-bash-make-ipa-file.png
  • 生成成功后,自动打开ipa文件所在目录:


    img_e06988fbfdaa3b02ccd55e0271951bde.png
    20180831-make-ipa-finish.png

4、全部代码

具体的代码,可参考我的Github代码:

#!/bin/bash

# 定义用到的变量
projectAppPath=""
outputPath=""
ipaFileName=""

# 定义读取输入字符的函数
getProjectAppPath() {
    # 输出换行,方便查看
    echo "\n================================================"
    # 监听输入并且赋值给变量
    read -p " Enter .app path: " projectAppPath
    # 如果为空值,从新监听
    if test -z "$projectAppPath"; then
        getprojectAppPath
    fi
}

getOutputPath() {
    # 输出换行,方便查看
    echo "\n================================================"
    # 监听输入并且赋值给变量
    read -p " Enter output path: " outputPath

    if test -z "$outputPath"; then
        # 如果没有输出路径,默认输出到桌面
      outputPath="Desktop"
    fi
}

getipaFileName() {
    # 输出换行,方便查看
    echo "\n================================================"
    # 监听输入并且赋值给变量
    read -p " Enter ipa FileName: " ipaFileName

    if test -z "$ipaFileName"; then
        getipaFileName
    fi
}

# 执行函数,给变量赋值
getProjectAppPath
getOutputPath
getipaFileName

# 切换到当前用户的home目录,方便创建桌面目录
cd ~

# 在输出路径下创建 Payload 文件夹
mkdir -p "${outputPath}/Payload"

# 将.app 文件复制到 输出路径的 Payload 文件夹下
cp -r "${projectAppPath}" "${outputPath}/Payload/"

# 切换到输出路径
cd "${outputPath}"

# 将 Payload 文件夹压缩成 ipa 包
zip -r "${ipaFileName}.ipa" Payload

# 删除当前路径下 Payload 文件夹【-r 就是向下递归,不管有多少级目录,一并删除 -f 就是直接强行删除,不作任何提示的意思】
rm -rf "Payload"

# 成功提示
echo "\n\n=====================【转换ipa完成】=========================\n"

echo ${outputPath}
## 打开输出的路径
#open -a Finder "${outputPath}"
# 从当前位置打开finder
open .

# 结束退出
exit 0

5、优化

方法一

每次想生成ipa文件,就要打开终端,执行 sh make_ipa_file.sh,相当麻烦,所以,如果生成别名,直接在终端输入别名就可以执行啦,是不是很棒!

为.bash_profile添加了一个别名:

mkipa='sh /Users/HTC/Documents/iBash/make_ipa_file.sh'

以后直接在终端输入:mkipa就可以啦,这不是很棒!!!

方法二

如果是 Unix 可执行文件,直接点击,会自动打开终端执行。

make_ipa_file.sh 改为 make_ipa_file_sh 名字,然后在终端为文件添加可执行权限:
chmod +x /Users/HTC/Desktop/make_ipa_file_sh

这样就生成了 Unix 文件,双击就会打开到终端:

img_3e2185a87398f3d180d03bd4f2250abe.png
20180831-make-ipa-Unix-file.png

方法三

在 ~/.bashrc 里面添加本函数,或添加脚本路径,也可以方便执行。

方法四

如果是macOS环境,还可以通过苹果的apple脚本服务,来做到一键化,以后有机会在谈谈。

6、总结

通过这个简单又复杂的示例,其实使用脚本的最终目录,也是想提高效率!!所以,打包ipa包的效率,也是向着这样的方向努力!如果你对shell还不熟悉,可以看看下面这2个教程,当前我学习的时候,还没有人给指导,所以,你们是幸福的一代程序员!加油!

参考


  • 如有疑问,欢迎在评论区一起讨论!
  • 如有不正确的地方,欢迎指导!


注:本文首发于 iHTCboy's blog,如若转载,请注来源

目录
相关文章
|
6月前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
553 1
|
6月前
|
人工智能 机器人 Shell
【shell】文件读写及read用法
【shell】文件读写及read用法
|
6月前
|
Shell Linux API
【Shell 命令集合 备份压缩 】Linux 解压缩文件 unzip命令 使用指南
【Shell 命令集合 备份压缩 】Linux 解压缩文件 unzip命令 使用指南
241 0
|
6月前
|
缓存 Shell Linux
【Shell 命令集合 链接器(linker)工具】Linux ld命令 将目标文件与库链接为可执行文件或库文件
【Shell 命令集合 链接器(linker)工具】Linux ld命令 将目标文件与库链接为可执行文件或库文件
209 0
|
6月前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】Linux 创建Kickstart文件mkkickstart命令 使用指南
【Shell 命令集合 系统设置 】Linux 创建Kickstart文件mkkickstart命令 使用指南
67 0
|
6月前
|
Shell Linux 编译器
【Shell 命令集合 备份压缩 】Linux 提取zip压缩文件的详细信息 zipinfo命令 使用指南
【Shell 命令集合 备份压缩 】Linux 提取zip压缩文件的详细信息 zipinfo命令 使用指南
114 0
|
6月前
|
存储 Shell Linux
【Shell 命令集合 备份压缩 】Linux 解码uuencode编码的文件 uudecode 命令 使用指南
【Shell 命令集合 备份压缩 】Linux 解码uuencode编码的文件 uudecode 命令 使用指南
83 0
|
6月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
150 0
|
1月前
|
Shell
Shell 文件包含
10月更文挑战第5天
33 4
|
6月前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
664 3