美文网首页工具mac 学习
Mac搭建内网服务器无线安装ipa包

Mac搭建内网服务器无线安装ipa包

作者: 张聪_2048 | 来源:发表于2019-08-16 15:10 被阅读0次
    动图展示.gif

    前言

    iOS项目开发中,会将ipa包提供测试人员测试使用,一般会将ipa上传到蒲公英或fir平台,但这些三方平台有安装次数的限制,也许实名认证才能使用,为了解决三方平台的诸多限制和不稳定的情况,所以研究了一下用自己的服务器搭建本地服务,实现内网安装ipa的功能。PS:fir居然把我的账号给封了!!!

    本篇主要是概括总结,建议先看下这三篇文章
    Mac配置本地Https服务
    iOS通过OTA安装ipa包
    Shell脚本解析ipa包

    一、搭建内网 https 网络

    请转阅这篇文章,这里不再累述
    Mac配置本地Https服务

    二、通过 OTA 安装 ipa 包

    请转阅这篇文章,这里不再累述
    iOS通过OTA安装ipa包

    三、内网服务器无线安装ipa包

    1、将ipa包及资源文件上传到本地web工作目录

    在本地web工作路径:/Users/zjh48/CustomWeb,新建文件夹 common,用来存放通用文件
    文件命名如下

    添加文件.png

    2、修改 manifest.plist 文件

    修改manifest.plist文件.png

    software-package:https://10.73.20.15/common/app.ipa
    display-image: https://10.73.20.15/common/appIcon_57x57.png
    full-size-image:https://10.73.20.15/common/appIcon_512x512.png
    其中 10.73.20.15 为本地IP地址

    3、修改index.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>微信2048下载安装</title>
    </head>
    <body>
    <h1 style="font-size:50pt">微信2048下载安装<h1/>
    <h1 style="font-size:80pt">
    <a title="install" href="itms-services://?action=download-manifest&url=https://10.73.20.15/common/manifest.plist">手机直接安装app</a>
    <h1 style="font-size:50pt">
    <a title="ssl" href="https://10.73.20.15/common/ca.crt">ssl 证书安装</a>
    <h1/>
    <h1 style="font-size:50pt">
    <a title="download" href="https://10.73.20.15/common/app.ipa">安装包下载</a>
    <h1/>
    </body>
    </html>
    
    

    修改对应的文件地址
    手机直接安装:https://10.73.20.15/common/manifest.plist
    ssl证书安装:https://10.73.20.15/common/ca.crt
    安装包下载:https://10.73.20.15/common/app.ipa

    访问地址:https://10.73.20.15/common/index.html

    访问index.html.png

    四、Shell脚本自动解析ipa包

    为了方便自动解析ipa,这里写了一个脚本,可能自动读取info.plist的中内容,并修改manifest.plist、index.html等文件内容,脚本内容如下

    #!/bin/sh
    
    echo " "
    echo "##################### 内网OTA安装包处理 #####################"
    echo " "
    
    
    # 使用方法
    # sh disposeIpa.sh user wechat_dev
    # ${1} 操作用户
    # ${2} 包名,可不填
    
    # 当前脚本的目录定义为基础目录
    # basePath=$(dirname $0)
    basePath=$(cd "$(dirname "$0")";pwd)
    echo "基础目录地址 basePath : $basePath"
    userName=${1}
    packageName=${2} 
    
    # 当前ipa路径
    ipaFileName="app.ipa"
    ipaFilePath="${basePath}/${ipaFileName}"
    if [ ! -f "$ipaFilePath" ]; then
        echo "未找到ipa包 $ipaFilePath"
        exit 2
    fi
    
    
    #当前ipa解压路径
    temIpaDirName="TempPayload"
    temIpaDirPath="${basePath}/${temIpaDirName}"
    echo "当前ipa解压路径 temIpaDirPath : $temIpaDirPath"
    
    #删除临时解包目录
    if [ -d "$temIpaDirPath" ]; then
        echo "删除临时解包目录 rm ${temIpaDirPath}"
        rm -rf "${temIpaDirPath}"
    fi
    
    #解包IPA
    if [[ -f "$ipaFilePath" ]]; then
        echo "unzip $ipaFileName begin ..."
        unzip "$ipaFilePath" -d "$temIpaDirPath"
    fi
    
    # 定位到*.app目录及info.plist
    appDir="$temIpaDirPath/Payload/`ls "$temIpaDirPath/"Payload`"
    lcmInfoPlist="${appDir}/Info.plist"
    echo "info.plist文件路径 lcmInfoPlist : $lcmInfoPlist"
    
    # 获取app的名称、版本号、build号
    appName=`/usr/libexec/PlistBuddy -c "Print :CFBundleName" $lcmInfoPlist`
    echo "appName : $appName"
    appVersion=`/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" $lcmInfoPlist`
    echo "appVersion : $appVersion"
    appBuild=`/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" $lcmInfoPlist`
    echo "appBuild : $appBuild"
    appBundleId=`/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" $lcmInfoPlist`
    echo "appBundleId : $appBundleId"
    if [ ! $packageName ]; then
        packageName=$appName
    fi
    
    # 拼接文件全名称
    timeStr=`date +%Y%m%d%H%M`
    appFullName="${packageName}_${appVersion}_${appBuild}_${timeStr}"
    echo "appFullName : $appFullName"
    
    # 获取ip地址
    ipStrArr=`ifconfig | grep inet | grep -v inet6 | grep -v 127 | cut -d ' ' -f2`
    ipArr=(${ipStrArr//\n/ })
    ipStr=${ipArr[0]}
    echo "获取ip地址 ipStr : $ipStr"
    
    # 拼接操作用户路径
    otherPath="${basePath%/*}/$userName"
    echo "操作用户路径 otherPath : $otherPath"
    if [ ! -d "$otherPath" ]; then
      mkdir $otherPath
    fi
    
    #操作用户ipa存储路径
    otherIpaName="ipas"
    oherIpasDir="${otherPath}/${otherIpaName}"
    echo "操作用户ipa存储路径 oherIpasDir : $oherIpasDir"
    if [ ! -d "$oherIpasDir" ]; then
      mkdir $oherIpasDir
    fi
    
    
    #拼接ipa文件地址
    ipaUrl="https://${ipStr}/${userName}/${otherIpaName}/${appFullName}.ipa"
    echo "ipa文件地址 ipaUrl : $ipaUrl"
    
    # installplist信息
    installPlist="${basePath}/manifest.plist"
    echo "installPlist文件路径 installPlist : $installPlist"
    
    # 修改installplist ipaurl信息
    oldIpaUrl=`/usr/libexec/PlistBuddy -c "Print :items:0:assets:0:url" $installPlist`
    if [[ -n $oldIpaUrl ]]; then
        `/usr/libexec/PlistBuddy -c "Set :items:0:assets:0:url $ipaUrl" $installPlist`
        echo "ipaUrl 修改完成 : $ipaUrl"
    fi
    
    # 修改installplist版本等信息
    function changeMetaData {
        value=`/usr/libexec/PlistBuddy -c "Print :items:0:metadata:${1}" $installPlist`
        if [[ -n $value ]]; then
            `/usr/libexec/PlistBuddy -c "Set :items:0:metadata:${1} ${2}" $installPlist`
            echo "${1} 修改完成 : ${2}"
        fi
    }
    changeMetaData "bundle-identifier" $appBundleId
    changeMetaData "bundle-version" $appVersion
    changeMetaData "title" $appName
    
    
    # 修改index.html
    indexPath="${basePath}/index.html"
    indexPath2="${basePath}/index2.html"
    now_path=${basePath##*/}
    function changeHtml {
        sed  ${1} $indexPath > $indexPath2
        cp $indexPath2 $indexPath
        rm $indexPath2
    }
    #html修改标题
    changeHtml "s/>.*下载安装</>${appName}下载安装</g"
    #html修改manifest.plist地址
    changeHtml "s/https:\/\/.*.plist/https:\/\/${ipStr}\/${userName}\/manifest.plist/g"
    #html修改ca证书地址
    changeHtml "s/https:\/\/.*.ca.crt/https:\/\/${ipStr}\/${now_path}\/ca.crt/g"
    #html修改ipa下载地址
    changeHtml "s/https:\/\/.*.ipa/https:\/\/${ipStr}\/${userName}\/${otherIpaName}\/${appFullName}.ipa/g"
    
    echo "##################### index.html #####################"
    cat $indexPath
    echo "##################### index.html #####################"
    
    # 拷贝文件
    cp $ipaFilePath "${oherIpasDir}/${appFullName}.ipa"
    echo "拷贝 ${appFullName}.ipa 成功"
    cp $installPlist "${otherPath}"
    echo "拷贝 $installPlist 成功"
    cp $indexPath "${otherPath}"
    echo "拷贝 $indexPath 成功"
    
    # 删除ipa包
    rm $ipaFilePath
    
    echo "ipa下载安装请访问:https://${ipStr}/${userName}/index.html"
    echo "恭喜操作成功!!!"
    
    开始执行脚本.png
    执行脚本成功.png

    执行脚本成功后,访问 https://10.73.20.15/user/index.html 即可下载安装。



    参考链接:
    一步一步实现无线安装iOS应用(内网OTA)

    相关文章

      网友评论

        本文标题:Mac搭建内网服务器无线安装ipa包

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