美文网首页Shell
shell技巧1 - 生成ipa文件

shell技巧1 - 生成ipa文件

作者: iHTCboy | 来源:发表于2018-09-01 16:08 被阅读31次

    1、前言

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

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

    2、ipa文件结构

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

    20180831-ipa-file-path.png

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

    3、bash脚本

    • 生成.app目录内容:


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


      20180831-bash-make-ipa-file.png
    • 生成成功后,自动打开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 文件,双击就会打开到终端:

    20180831-make-ipa-Unix-file.png

    方法三

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

    方法四

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

    6、总结

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

    参考

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

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

    相关文章

      网友评论

        本文标题:shell技巧1 - 生成ipa文件

        本文链接:https://www.haomeiwen.com/subject/ctjuwftx.html