zoukankan      html  css  js  c++  java
  • iOS开发系列-Shell脚本生成IPA

    概述

    在公司开发到了测试阶段需要频繁打包交付给测试,看似简单的工作,重复的流程总是感觉不是那么好,我们可以借助苹果提供的编译指令编译项目。

    自动化脚本编译打包IPA

    常见的iOS项目就是基于xcodeproj。目前大部分公司项目都是用CocoaPod 管理第三方库,也就是项目基于xcworkspace 。这两种项目在编译时候命令有一些区别,下面分别写两种脚本供参考。

    普通项目编译

    PackageApplication方式生成ipa的方式苹果已经不建议使用了,取而代之的是xcodebuild -exportArchive

    #!/bin/bash
    
    ZWProjectName="TestProj"
    ZWScheme="TestProj"
    ZWConfiguration="Release"
    
    ZWDate=`date +%Y%m%d_%H%M`
    ZWWorkspace=`pwd`
    echo "workspace=$ZWWorkspace-----------------------"
    ZWBuildDir="$ZWWorkspace/build"        #build路径
    ZWBuildTempDir="$ZWBuildDir/temp/$ZWDate"    #构建过程中的文件
    HCIpaDir="$ZWBuildDir/ipa"                                #生成ipa文件路径
    
    :<<!
    #编译 链接 签名 生成app
    #如果要构建workspace,你必须指定-workspace和-scheme参数。
    xcodebuild 
    -workspace "$ZWWorkspace/$ZWProjectName.xcodeproj/project.xcworkspace" 
    -scheme "$ZWScheme" 
    -configuration "$ZWConfiguration" 
    clean 
    build 
    -derivedDataPath "$ZWBuildTempDir"
    #CODE_SIGN_IDENTITY=证书
    #PROVISIONING_PROFILE=描述文件UUID
    
    #生成ipa  本质主要是对生成app进行压缩成ipa
    xcrun -sdk iphoneos 
    -v PackageApplication "$ZWBuildTempDir/Build/Products/$ZWConfiguration-iphoneos/$ZWProjectName.app" 
    -o "$HCIpaDir/$ZWDate.ipa" #这里反复报错 如果输出的目录不存在就报错 Unable to create '....." 解决办法 手动穿件输出测文件夹层级结构
    
    #清除构建的文件
    rm -rf $ZWBuildDir/temp
    
    open $HCIpaDir
    !
    
    #-------PackageApplication已经不推荐使用了 warning: PackageApplication is deprecated, use `xcodebuild -exportArchive` instead.-----
    
    xcodebuild archive 
    -workspace "$ZWWorkspace/$ZWProjectName.xcodeproj/project.xcworkspace" 
    -scheme "$ZWScheme" 
    -configuration "$ZWConfiguration" 
    -archivePath "$ZWBuildTempDir/$ZWProjectName.xcarchive"
    CODE_SIGN_IDENTITY="" #证书
    PROVISIONING_PROFILE="" #描述文件UUID
    
    xcodebuild 
    -exportArchive 
    -archivePath "$ZWBuildTempDir/$ZWProjectName.xcarchive" 
    -exportPath "$HCIpaDir/$ZWDate/" 
    -exportOptionsPlist "./exportOptionsPlist.plist" 
    #CODE_SIGN_IDENTITY="" #证书
    #PROVISIONING_PROFILE="" #描述文件UUID
    
    #这里不需要设置证书
    #编译流程
    #1.首先看ZWConfiguration是Release还是Debug
    #2.如果是Release那么就去General->Signing(Release)的Provisioning Profile编译
    #3.如果是Debug那么就去General->Signing(Debug)的Provisioning Profile编译
    
    #如果是发布store的包 只需将配置设置General->Signing(Release)的Provisioning Profile选择Store 描述文件
    
    :<<!
        编写过程遇到的报错:
        1.exportOptionsPlist.plist文件的编写
            xcode直接先Archive 拿到ExportOptions.plist
        2.下面这个报错纠结了我好久,
    
    #    Error Domain=NSCocoaErrorDomain Code=384
    # 详细报错
    #2018-03-06 17:18:43.013 xcodebuild[2836:4964380] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/rj/k7nnqyqd5xz7_lh9s2dc9z4m0000gn/T/TestProj_2018-03-06_17-18-43.012.xcdistributionlogs'.
    #2018-03-06 17:18:43.476 xcodebuild[2836:4964380] [MT] IDEDistribution: Step failed: <IDEDistributionPackagingStep: 0x7f8ca5d414e0>: Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo={NSDebugDescription=No value., NSFilePath=/var/folders/rj/k7nnqyqd5xz7_lh9s2dc9z4m0000gn/T/ipatool-json-filepath-U38ZKM}
    #error: exportArchive: The data couldn’t be read because it isn’t in the correct format.
    
    #Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo={NSDebugDescription=No value., NSFilePath=/var/folders/rj/k7nnqyqd5xz7_lh9s2dc9z4m0000gn/T/ipatool-json-filepath-U38ZKM}
    
    #** EXPORT FAILED **
    
    #  最终发现了问题关闭compileBitcode 设置为NO
    !
    
    #通过蒲公英提供的上传应用 API,调用系统的 curl 命令来上传应用。
    #FilePath="$HCIpaDir/$ZWDate/${ZWScheme}.ipa"
    #UKey="User key" #开发者的用户 Key,在应用管理-API中查看
    #ApiKey="API key" #是开发者的 API Key,在应用管理-API中查看 注意不是APPKey
    
    #chmod -R 777 "${FilePath}"
    #curl 
    #-F "file=@${FilePath}" 
    #-F "uKey=${UKey}" 
    #-F "_api_key=${ApiKey}" 
    #https://www.pgyer.com/apiv2/app/upload
    
    

    基于CocoaPod的工程脚本编译

    对于使用工作空间管理工程,唯一不同的是在xcodebuild archive需要加参数-workspacescheme

    #!/bin/bash
    
    ZWProjectName="lifeCristal"
    ZWScheme="lifeCristal"
    ZWConfiguration="Release"
    
    ZWDate=`date +%Y%m%d_%H%M`
    ZWWorkspace=`pwd`
    echo "workspace=$ZWWorkspace-----------------------"
    ZWBuildDir="$ZWWorkspace/build"        #build路径
    ZWBuildTempDir="$ZWBuildDir/temp/$ZWDate"    #构建过程中的文件
    HCIpaDir="$ZWBuildDir/ipa"                                #生成ipa文件路径
    
    xcodebuild archive 
    -workspace "$ZWWorkspace/$ZWProjectName.xcworkspace" 
    -scheme "$ZWScheme" 
    -configuration "$ZWConfiguration" 
    -archivePath "$ZWBuildTempDir/$ZWProjectName.xcarchive"
    CODE_SIGN_IDENTITY="" #证书
    PROVISIONING_PROFILE="" #描述文件UUID
    
    xcodebuild 
    -exportArchive 
    -archivePath "$ZWBuildTempDir/$ZWProjectName.xcarchive" 
    -exportPath "$HCIpaDir/$ZWDate/" 
    -exportOptionsPlist "./exportOptionsPlist.plist" 
    CODE_SIGN_IDENTITY="" #证书
    PROVISIONING_PROFILE="" #描述文件UUID
    
    FilePath="$HCIpaDir/$ZWDate/${ZWScheme}.ipa"
    UKey="013cca42bc5347715f895cfc8061f75f"
    ApiKey="4861c59806712e3473c867520884236f"
    
    chmod -R 777 "${FilePath}"
    curl 
    -F "file=@${FilePath}" 
    -F "uKey=${UKey}" 
    -F "_api_key=${ApiKey}" 
    https://www.pgyer.com/apiv2/app/upload
    

    证书跟描述文件UUID获取

    • 获取本机可用的开发证书
    security find-identity -v -p codesigning
    

    • 获取描述文件的UUDI
      我们Mac电脑所有描述文件目录 个人资源库/MobileDevice/Provisioning Profiles/
      执行命令
    /usr/bin/security cms -D -i 描述文件路径
    

    通常描述文件的名称就是描述文件的UUID。

    exportOptionsPlist.plist文件获取

    这个文件中的内容会随着Xode的版本而发生改变。我这边做法是自己手动打包第一次,将生成的ExportOptions.plist改名为exportOptionsPlist.plist。后续每次打包都是用这个plist就可以了。

    创建的编译报错

    在实际使用避免不了各种错误,下面对一些常见的错误解决。

    Bitcode引发的错误

    解决办法:在exportOptionsPlist.plist关闭BitcodeNO

  • 相关阅读:
    ar游戏开发入门三步走
    什么是 OpenCL OpenGL
    https 服务器搭建
    javascript 访问cookie信息
    手机网页制作需要注意的一点东西
    asp.net下载文件几种方式
    javascriptM
    PDF转JPG
    java实现PDF转HTML
    关于mysql ERROR 1045 (28000)错误的解决办法
  • 原文地址:https://www.cnblogs.com/CoderHong/p/9439043.html
Copyright © 2011-2022 走看看