iOS 最省时的打包姿势

作者: SHyH5 | 来源:发表于2018-01-30 14:35 被阅读1761次

    前言

    现在网上有很多自动化打包的脚本,上网搜索一下就有这么些个,眼花缭乱,大多是使用xcodebuild命令,或者在Jenkins上面部署,方便实用。


    auto1.png

    打包方式

    1 自动化脚本打包

    无论是jekins部署还是使用xcodebuild指令的shell脚本都是不错的选择。可以自行google ,网上很多类似的案例。

    2 Apple推荐的方式

    使用xcode的archive功能:Product -> Archieve -> Export

    3 手动build打包 (推荐指数五星)

    (1) 手动编译,生成 .app 文件
    (2) 把 .app 文件放在名字为 Payload 文件夹下
    (3) 压缩文件夹,生成 .zip 文件
    (4) 修改文件名:.zip -> ipa,打包完成
    (5) 登陆各个平台(蒲公英,fir等),把本地的ipa包上传

    *******************画重点***********************

    这里有小弟自己写的一个上传脚本,地址在此:上传ipa脚本地址
    只需要编译一下工程,生成.app文件,再配置一下脚本中的参数即可,一键上传ipa包,具体步骤如下:

    • 1 如果是上传fir平台,把isFir变量更改为fir;上传蒲公英平台则改成pyger
    • 2 desktop参数改成自己本地的路径(本来是想使用绝对路径的,但是后面会报错,新手一枚不知道怎么解决,所以。。),如 ="/Users/用户名"
    • 3 appFileFullPath 路径改成你自己项目build + b 之后 .app 文件的路径即可(设备选择 generic ios device)
    • 4 如果是蒲公英平台的话: 需要获取ukey和apikey两个参数 ,具体可以参照蒲公英获取ukey和apikey页面,updateDescription参数是本更新内容;如果是上传到fir平台,则需要apiToken参数,可以去fir平台自行获取,projectDir是此次更新内容
    • 5 注意一下,如果是是上传fir平台的话,首先要登陆一下 打开终端 输入fir login API Token (API Token 就是平台上获取的token)如果出现了success等字样说明登陆成功 ,然后还需要安装fir-cli工具,也很简单 终端输入sudo gem install -n /usr/local/bin fir-cli --no-ri --no-rdoc 等待完成即可

    遵从以上步骤之后,打开终端,输入 sh + 脚本文件路径 (可以直接把文件拖动到终端中即可)等待完成即可

    代码在此:

    # ************************ 相关参数配置(蒲公英和fir 二选一) **************************
    
    # 设置是使用fir上传(改成fir)还是蒲公英上传pgyer(改成pgyer) --
    isFir="fir"
    # 换算成自己主文件路径 --(使用绝对路径报错,不知道为何)--
    desktop="/Users/自己的用户名"
    # .app 文件的路径
    appFileFullPath="自己的.app文件路径,如下"
    #appFileFullPath="$desktop/Library/Developer/Xcode/DerivedData/FirTextExmple-aqjhktrtgzvszeevtcsdjrypkvfs/Build/Products/Debug-iphoneos/FirTextExmple.app"
    
    # 蒲公英的参数: 自行填写自己账号对应的key值  上传文档地址:https://www.pgyer.com/doc/api#uploadApp
    uKey="自己的uKey,获取方式上面链接"
    apiKey="自己的apiKey,获取方式上面链接"
    # 蒲公英需要填写的版本描述
    updateDescription="这是一个测试路径的版本"
    
    # 上传到fir时,运行脚本之前要先登录一下:fir login API Token。 出现成功字段即可
    # fir的参数:
    #apiToken="62284d44d88e34c013e481184b409fb8"
    apiToken="自己的apiToken"
    #
    projectDir="这是一个上传测试fir的脚本描述"
    # **************************************************
    
    programBag="$desktop/Desktop/ProgramBag"
    payloadPath="$desktop/Desktop/Payload"
    #计时
    SECONDS=0
    
    uploadMethod() {
    if [ $isFir == "fir" ]; then
    #  或者上传IPA到fir上面 -- 明天写 --
    echo "正在上传到fir.im...."
    fir publish "$programBag/Payload.ipa" -T "$apiToken" -c ${projectDir}
    echo "\n🎉🎉打包上传更新成功!"
    #输出总用时
    echo "===总计用时为: ${SECONDS}s==="
    rm -rf ${programBag}
    else
    
    echo "正在上传到蒲公英...."
    #  上传IPA到蒲公英  file=@$programBag/Payload.ipa
    curl -F "file=@$programBag/Payload.ipa" \
    -F "uKey=$uKey" \
    -F "_api_key=$apiKey" \
    -F "updateDescription=$updateDescription" \
    https://www.pgyer.com/apiv1/app/upload
    
    if [ $? -eq 0 ]
    then
    echo "\n🎉🎉上传蒲公英成功"
    echo "===总计用时为: ${SECONDS}s==="
    rm -rf ${programBag}
    else
    echo "上传蒲公英失败"
    fi
    fi
    }
    
    mkdir -p ${payloadPath}
    cp -r ${appFileFullPath} ${payloadPath}
    mkdir -p ${programBag}
    cp -r ${payloadPath} ${programBag} && rm -rf ${payloadPath}
    cd ${programBag}
    zip -q -r ./Payload.zip ./* && rm -rf Payload
    if [ $? -eq 0 ]
    then
    mv Payload.zip Payload.ipa
    echo "压缩成功"
    uploadMethod
    else
    echo "压缩失败"
    fi
    
    image.png GifMakerProject2.gif
    ******************************************
    结语

    个人认为自动化打包脚本,打包的速度有点慢,因为自动化的脚本一般都是封装的xcodebuild指令,实际上和手动打包的原理差不多,用到了achive方法。(swift的项目可能会比oc的项目要编译的慢一点,再加上一些代码书写问题可能就会更慢(多提一嘴,这里给swift项目开发的小伙伴安利一个检测项目编译时间的工具,很实用,地址在此:BuildTimeAnalyzer-for-Xcode))
    而且部署起来也稍稍有些麻烦,不错还好,一错就各种找不着头脑(可能我在网上找的脚本都比较low,或者我比较low)。
    选择第二种方式,手动build 之后,生成.app 文件,然后运行自己写的脚本,是目前我觉得最省时最快捷的方式。。由于是shell初学,可能代码写的一般,旨在解决问题,哈哈(轻喷轻喷)。
    对前端开发来说,shell语言的学习可以在一些方面提高我们的开发效率,毕竟人生苦短嘛!!!

    如果觉得能帮到您的,麻烦点个小星星,哈哈!!大家加油!!!

    参考文章:

    ios自动话打包探索
    shell教程,菜鸟教程

    相关文章

      网友评论

      • 咸鱼而已:用 手动build打包的方式打包,安装的手机上不显示图标遇到过吗。安装到pad上没问题
        SHyH5:@咸鱼而已 是不是appicon,少尺寸了
        咸鱼而已:@SHyH5 遇到问题是自从xcode9更新之后就出现这种情况了:pensive:
        SHyH5:@咸鱼而已 没遇到过,都是正常的
      • aaa000:现在测试平台 官方建议使用TestFighting!
        我感觉testflighting 需要手机测试人员的 苹果账号,这个账号一般人都知道
        使用fir 需要收集 测试人的UDID 加入开发证书 这个UDID 基本上做技术的人知道其他的同事不知道在哪查!
        SHyH5:@buttonTouch 我们公司目前还是用的第三方平台上传包测试,测试人数二十多个左右,不是很多。现在马甲包不是不太好上吗?:smile::smile:几十个账号,这么多??那你们打不同证书的包怎么写换证书和bundle ID的??
        aaa000:@SHyH5 区别在于fir 有人数限制! 设备的UDID 添加一次之后是可以通过苹果后台导出来,不知道你们有没有多个苹果开发者账号,我们公司 有几十个苹果开发者账号,为出马甲包用的! 收集测试设备的UDID 添加 到账号的后台,导出设备id文件 其他账号上再操作一次!有时候感觉是挺烦的。
        这个上传fir 的脚本 之前我也搞过,感觉不怎么实用,直接拖到他们网页就搞定的事!
        SHyH5:@buttonTouch :+1::+1::+1:。之前一直以为是官方的内测版本才会用到testFighting,我也安装了京东,手百等app推送的内测版本。uuid确实其他同事不太知道,我们公司的测试机的uuid都是已经加入了:smile::smile:。这个只是最近学了一些shell,写个脚本练练手,实际运用下
      • 冬季:debug模式?直接build是单架构吧
        SHyH5:@冬季 只是feature阶段,给测试打测试包使用的:smile::smile:只是觉得编译.app文件比achieve要快一些

      本文标题:iOS 最省时的打包姿势

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