美文网首页afnetwork 使用
iOS 一键自动化打包脚本 normal armv7 arm64

iOS 一键自动化打包脚本 normal armv7 arm64

作者: 空空小僧 | 来源:发表于2018-08-20 20:42 被阅读0次

    首先,主要技术来自
    博客: https://www.jianshu.com/p/4281908243a3
    膜拜大神,
    感谢大神提供资源,顺便是自己记录及学习一下,抄一下作者的一些知识点,方便自己学习记忆
    首先提供一下脚本:在作者的基础上有一点细节的修改,否则报错如下图
    报错: normal armv7 normal arm64

    image.png

    其中大概步骤整理如下:

    1. 进入工程所在目录,创建xcodebuild.sh的脚本(名字自己自定义)
    2. 自己没使用自动打包的时候,之前使用手动打包的方式成功之后,会有一个ExportOptions.plist,(不同的方式打包产生的plist不同,比如 appStore.ac-hoc,enterprise的方式都不同,如下图,最简单的就是直接复制一份)


      最简单

    其中企业版的内容为:


    image.png

    其他的类型自己去看

    3.然后自己copy下面的脚本内容到xcodebuild.sh里面,根据自己的需求去修改下面的脚本,如果是workspace的工程就直接可以用,上面的脚本都有原作者的注释,需要填的信息,挨个填一下就ok了,然后进入当前目录,直接输入 . xcodebuild.sh 就可以运行脚本,如果提示没有权限的话 可以直接给chomd + 777 sh文件地址,就可以了


    image.png

    选择完之后,就可以坐等结果了

    #author by heyujia (感谢原作者,我是小僧,修改了一丁点)
    #脚本所在的目录必须和WorkSpace或者说工程主目录所在的目录在同一个目录层级中
    
    #配置参数
    
    #workspace的名字,如果没有则不需要这段话,我测试工程是一个工作空间所以就没用,如果需不需要要用的话,还需要在编译阶段的脚本代码里去掉  -workspace ${Project_Name}.xcworkspace
    Workspace_Name="你的workSpace名字"
    
    
    #工程名字
    Project_Name="你的工程名字"
    
    
    #配置打包方式Release或者Debug
    Configuration="Release"
    
    
    
    #基础主路径
    BUILD_PATH=./build
    
    
    #不同版本的基础子路径
    #adHoc
    ADHOC_PATH=${BUILD_PATH}/adHoc
    #appStore
    APPSTORE_PATH=${BUILD_PATH}/appStore
    #enterprise
    ENTERPRISE_PATH=${BUILD_PATH}/enterprise
    
    #配置编译文件的存放地址
    #ps: 空空小僧修改的  否则报上面的错误  下面企业的路径是绝对路径,其他的是相对路径
     #******************这里要特别注意 必须写绝对路径,写相对路径会报错. 错误为: normal armv7   normal arm64的错误
    #adHoc
    CONFIGURATION_BUILD_PATH_ADHOC=${ADHOC_PATH}/${Configuration}-iphoneos
    #appStore
    CONFIGURATION_BUILD_PATH_APPSTORE=${APPSTORE_PATH}/${Configuration}-iphoneos
    #企业
    #CONFIGURATION_BUILD_PATH_ENTERPRISE=${ENTERPRISE_PATH}/${Configuration}-iphoneos
    CONFIGURATION_BUILD_PATH_ENTERPRISE=/Users/Apple/Desktop/oneshare-client-ios/build/enterprise/Release-iphoneos
    
    
    #下面是获取上传到第三方统计崩溃日志的文件,如果没有用到可以删除该部分
    #adHoc
    DSYM_PATH_ADHOC=${CONFIGURATION_BUILD_PATH_ADHOC}/${Project_Name}.app.dSYM
    DSYM_ZIP_PATH_ADHOC=${ADHOC_PATH}/${Project_Name}.app.dSYM.zip
    DSYM_COPY_PATH_ADHOC=${ADHOC_PATH}/copy
    #appStore
    DSYM_PATH_APPSTORE=${CONFIGURATION_BUILD_PATH_APPSTORE}/${Project_Name}.app.dSYM
    DSYM_ZIP_PATH_APPSTORE=${APPSTORE_PATH}/${Project_Name}.app.dSYM.zip
    DSYM_COPY_PATH_APPSTORE=${APPSTORE_PATH}/copy
    #企业
    #appStore
    DSYM_PATH_ENTERPRISE=${CONFIGURATION_BUILD_PATH_ENTERPRISE}/${Project_Name}.app.dSYM
    DSYM_ZIP_PATH_ENTERPRISE=${ENTERPRISE_PATH}/${Project_Name}.app.dSYM.zip
    DSYM_COPY_PATH_ENTERPRISE=${ENTERPRISE_PATH}/copy
    
    
    
    #配置打包结果输出的路径
    #AdHoc版本
    AdHocPrijectOutPath=${ADHOC_PATH}/adHocOut
    #AppStore版本
    AppStorePrijectOutPath=${APPSTORE_PATH}/appStoreOut
    #企业版本
    EnterprisePrijectOutPath=${ENTERPRISE_PATH}/enterpriseOut
    
    
    #如果工程中配置了Automatically manage signing,那么就不需要证书名和描述文件名,请确保工程中配置的证书名和描述文件是你打包想要用的
    #ADHOC证书名#描述文件
    ADHOCCODE_SIGN_IDENTITY="iPhone Distribution: xxxxx 可以去mac钥匙串获取"
    ADHOCPROVISIONING_PROFILE_NAME="xxxxxx.mobileprovision"
    
    #AppStore证书名#描述文件
    APPSTORECODE_SIGN_IDENTITY="iPhone Distribution: xxxxx"
    APPSTOREROVISIONING_PROFILE_NAME="xxxxx-xxxx-xxxx-xxxx-xxxxxx"
    
    #企业(enterprise)证书名#描述文件
    ENTERPRISECODE_SIGN_IDENTITY="iPhone Distribution: x'x'x'x'x"x
    ENTERPRISEROVISIONING_PROFILE_NAME="xxxx.mobileprovision"
    
    
    
    
    
    #加载各个版本的plist文件,为了实现一个脚本打包所有版本,这里对不同对版本创建了不同的plist配置文件。等号后面是文件路径,一般把plist文件放在与脚本同一级别的文件层中。我这里测试用所以plist文件都一样,实际使用是请分开配置为不同文件
    ADHOCExportOptionsPlist="./ExportOptions.plist"
    AppStoreExportOptionsPlist="./ExportOptions.plist"
    EnterpriseExportOptionsPlist="./ExportOptions.plist"
    
    
    #在终端中提示 根据输入的序号不同,打包成不同版本的ipa
    echo "~~~~~~~~~~~~选择打包方式(输入序号)~~~~~~~~~~~~~~~"
    echo "  1 adHoc"
    echo "  2 AppStore"
    echo "  3 Enterprise"
    
    # 读取用户在终端中输入并存到变量里
    read parameter
    sleep 0.5
    method="$parameter"
    
    # 判读用户是否有输入
    if [ -n "$method" ]
    then
    if [ "$method" = "1" ]
    then
    #这里都执行命令中是在xcworkspace工程中执行的,如果工程不是xcworkspace,可以把-workspace的内容删掉,加入了证书和描述文件,如果不需要请删除
    #如果用户选择的是1,就执行adhoc脚本
    #首先清除原来的文件夹
    rm -rf ${BUILD_PATH}
    #创建文件夹,路径需要一层一层创建,不然会创建失败
    mkdir ${BUILD_PATH}
    mkdir ${ADHOC_PATH}
    #编译文件
    mkdir ${CONFIGURATION_BUILD_PATH_ADHOC}
    #打包输出的文件
    mkdir ${AdHocPrijectOutPath}
    #copy
    mkdir ${DSYM_COPY_PATH_ADHOC}
    #编译
    xcodebuild archive -scheme $Project_Name -configuration $Configuration -archivePath ${ADHOC_PATH}/$Project_Name-adhoc.xcarchive CONFIGURATION_BUILD_DIR=${CONFIGURATION_BUILD_PATH_ADHOC}
    #如果需要单独设置证书和描述文件需要在编译时加入下面这句话
    #CODE_SIGN_IDENTITY="${ADHOCCODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${ADHOCPROVISIONING_PROFILE_NAME}" PRODUCT_BUNDLE_IDENTIFIER="${AdHocBundleID}"
    #打包
    xcodebuild  -exportArchive -archivePath ${ADHOC_PATH}/$Project_Name-adhoc.xcarchive -exportOptionsPlist $ADHOCExportOptionsPlist -exportPath ${AdHocPrijectOutPath}
    # 选择是压缩还是复制,复制的方法可以用于上传文件到指定服务器,比如上传到git
    # zip -r 目标路径  源文件路径 ,开始压缩dSYM文件
    zip -r ${DSYM_ZIP_PATH_ADHOC} ${DSYM_PATH_ADHOC}
    # cp -r 源文件路径 目标路径 , 把压缩包拷贝到指定地方
    cp -r ${DSYM_ZIP_PATH_ADHOC} ${DSYM_COPY_PATH_ADHOC}
    # 复制 dSYM 包里的 XXX 文件 上传到指定的地方
    #TARGET_PATH=${DSYM_COPY_PATH}/${TARGET}.app.dSYM/Contents/Resources/DWARF/${TARGET}
    #cp ${TARGET_PATH} ${EXPORT_DIR}
    elif [ "$method" = "2" ]
    then
    #如果用户选择的是2,就执行appstore脚本
    #首先清除原来的文件夹
    rm -rf ${BUILD_PATH}
    #创建文件夹,路径需要一层一层创建,不然会创建失败
    mkdir ${BUILD_PATH}
    mkdir ${APPSTORE_PATH}
    #编译文件
    mkdir ${CONFIGURATION_BUILD_PATH_APPSTORE}
    #打包输出的文件
    mkdir ${AppStorePrijectOutPath}
    #copy
    mkdir ${DSYM_COPY_PATH_APPSTORE}
    xcodebuild archive -scheme $Project_Name -configuration $Configuration -archivePath ${APPSTORE_PATH}/$Project_Name-appstore.xcarchive CONFIGURATION_BUILD_DIR=${CONFIGURATION_BUILD_PATH_APPSTORE}
    xcodebuild  -exportArchive -archivePath ${APPSTORE_PATH}/$Project_Name-appstore.xcarchive -exportOptionsPlist $AppStoreExportOptionsPlist -exportPath ${AppStorePrijectOutPath}
    #创建copy文件夹
    mkdir ${DSYM_COPY_PATH_APPSTORE}
    # 选择是压缩还是复制,复制的方法可以用于上传文件到指定服务器,比如上传到git
    # zip -r 目标路径  源文件路径 ,开始压缩dSYM文件
    zip -r ${DSYM_ZIP_PATH_APPSTORE} ${DSYM_PATH_APPSTORE}
    # cp -r 源文件路径 目标路径 , 把压缩包拷贝到指定地方
    cp -r ${DSYM_ZIP_PATH_APPSTORE} ${DSYM_COPY_PATH_APPSTORE}
    #验证ipa是否打包成功
    if [ -e $AppStorePrijectOutPath/$Project_Name.ipa ]; then
    echo '----ipa包已生成----'
    open $AppStorePrijectOutPath
    echo '----打包ipa完成----'
    echo '**---------------**'
    echo '****开始发布ipa包****'
    echo '**---------------**'
    #验证后上传到App Store
    # 将-u 后面的XXX替换成自己的AppleID的账号,-p后面的XXX替换成自己的密码
    altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
    "$altoolPath" --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -u XXX -p XXX -t ios --output-format xml
    "$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u  XXX -p XXX -t ios --output-format xml
    else
    echo '----ipa包导出失败----'
    fi
    
    
    elif [ "$method" = "3" ]
    then
    #如果用户选择的是3,就执行企业脚本
    #首先清除原来的文件夹
    rm -rf ${BUILD_PATH}
    #创建文件夹,路径需要一层一层创建,不然会创建失败
    mkdir ${BUILD_PATH}
    mkdir ${ENTERPRISE_PATH}
    #编译文件
    mkdir ${CONFIGURATION_BUILD_PATH_ENTERPRISE}
    #打包输出的文件
    mkdir ${EnterprisePrijectOutPath}
    #copy
    mkdir ${DSYM_COPY_PATH_ENTERPRISE}
    xcodebuild archive   -workspace ${Project_Name}.xcworkspace  -scheme $Project_Name -configuration $Configuration -archivePath ${ENTERPRISE_PATH}/$Project_Name-enterprise.xcarchive CONFIGURATION_BUILD_DIR=${CONFIGURATION_BUILD_PATH_ENTERPRISE}
    echo "archive结束...."
    
    xcodebuild  -exportArchive -archivePath ${ENTERPRISE_PATH}/$Project_Name-enterprise.xcarchive -exportOptionsPlist $EnterpriseExportOptionsPlist -exportPath ${EnterprisePrijectOutPath}
    echo "exportArchive结束...."
    #创建copy文件夹
    mkdir ${DSYM_COPY_PATH_ENTERPRISE}
    # 选择是压缩还是复制,复制的方法可以用于上传文件到指定服务器,比如上传到git
    # zip -r 目标路径  源文件路径 ,开始压缩dSYM文件
    zip -r ${DSYM_ZIP_PATH_ENTERPRISE} ${DSYM_PATH_ENTERPRISE}
    # cp -r 源文件路径 目标路径 , 把压缩包拷贝到指定地方
    cp -r ${DSYM_ZIP_PATH_ENTERPRISE} ${DSYM_COPY_PATH_ENTERPRISE}
    # 将 dSYM 包里的 demo 文件 上传到指定地点
    TARGET_PATH=${DSYM_COPY_PATH}/${Project_Name}.app.dSYM/Contents/Resources/DWARF/${Project_Name} cp ${TARGET_PATH} ${EXPORT_DIR}
    else
    #如果是其他输入,则在终端中提示参数无效并退出
    echo "参数无效...."
    exit 1
    fi
    fi
    
    

    再次感谢原作者

    相关文章

      网友评论

        本文标题:iOS 一键自动化打包脚本 normal armv7 arm64

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