shell技巧1 - 生成ipa文件

1、前言

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

《shell技巧1 - 生成ipa文件》 20180831-iTunes12.7-new-change.png
《shell技巧1 - 生成ipa文件》 20180831-iTunes12.7.png

2、ipa文件结构

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

《shell技巧1 - 生成ipa文件》 20180831-ipa-file-path.png

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

3、bash脚本

  • 生成.app目录内容:

    《shell技巧1 - 生成ipa文件》 20180831-Xcode-build-app.png

  • 执行shell脚本生成ipa文件:

    《shell技巧1 - 生成ipa文件》 20180831-bash-make-ipa-file.png

  • 生成成功后,自动打开ipa文件所在目录:

    《shell技巧1 - 生成ipa文件》 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 文件,双击就会打开到终端:

《shell技巧1 - 生成ipa文件》 20180831-make-ipa-Unix-file.png

方法三

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

方法四

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

6、总结

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

参考

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

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

    原文作者:iHTCboy
    原文地址: https://www.jianshu.com/p/8214fdade670
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞