美文网首页
iOS自动打包脚本会用到的相关命令

iOS自动打包脚本会用到的相关命令

作者: 037e3257fa3b | 来源:发表于2018-09-10 17:34 被阅读0次

    iOS自动打包脚本相关命令

    xcodebuild

    终端执行man xcodebuild或xcodebuild -h查看具体使用方法。

    xcodebuild命令详解

    Plist 文件操作

    终端执行 /usr/libexec/PlistBuddy -h 查看使用方法。

    PlistBuddy简单使用

    一、批量出包所需的物料

    从事游戏行业的开发者一定深知行业内马甲包的乱相,吃这一碗饭,在此不做评判。下面简单整理一下整个出包过程。

    1.一个完整xcode工程

    2.相关参数,存在在info.plist中的系统参数或自定义参数

    3.p12证书与distribution描述文件

    4.需要替换的资源文件,icon等

    二、获取信息

    用一个xcode工程出包,图形化界面的Xcode只需要点一下archive,选择导出类型,证书,然后export即可。同理,命令行出包的步骤也是如此。相关命令如下:

    a.导入p12证书到keychain

    security import p12证书路径 -k ~/Library/Keychains/login.keychain-db -P p12证书密码 -T /usr/bin/codesign
    
    //1 identity imported.
    

    b.获取friendlyName eg:iPhone Distribution:Zeng Yang (49P4585YSG)

    openssl pkcs12 -nodes -in p12证书路径 -info -nokeys -passin 'pass:bingniao' 2>/dev/null | grep 'friendlyName'
    
    //friendlyName: iPhone Distribution: Zeng Yang (49P4585YSG)
    

    c.输出mobileprovision相关信息

    openssl smime -in .mobileprovision的描述文件 -inform der -verify
    
    写入信息到临时plist文件,方便后续读取
    openssl smime -in .mobileprovision的描述文件 -inform der -verify >~/tmp_provisionProfile.plist
    

    d.读取相关信息 UUID、mobileProvision、team id等

    //获取UUID  eg:acc104c7-ccf6-402e-92cd-4db3eb7c5c78
    /usr/libexec/PlistBuddy -c 'print UUID' ~/tmp_provisionProfile.plist
    
    //获取mobileProvision文件名 eg:Distribution_dblfk
    /usr/libexec/PlistBuddy -c 'print Name' ~/tmp_provisionProfile.plist
    
    //获取team id  eg:49P4585YSG
    /usr/libexec/PlistBuddy -c 'print TeamIdentifier:0' ~/tmp_provisionProfile.plist
    

    e.获取xcode版本

    获取xcode 版本
    
    xcodebuild -version | head -n 1 | awk '{print $2}'
    
    三、开始出包

    a.修改info.plist文件

    通过PlistBuddy进行操作info.plist文件

    b.替换icon等资源文件

    使用相关shell脚本命令进行强制替换即可。

    c.出包

    相关参数与资源处理完成之后即可进行出包操作。

    出包流程:

    1.clean操作,清理工程;
    2.archive操作,导出 .xcarchive 文件;
    3.export操作,导出IPA包;

    执行命令前,请先cd到工程根目录。

    clean

    xcodebuild clean -configuration Release -alltargets
    

    archive

    xcodebuild archive -scheme <scheme名> -configuration Release -archivePath <~/tmp_app.xcarchive> PROVISIONING_PROFILE="<mobileProvision文件名>" CODE_SIGN_IDENTITY="<friendlyName>" PROVISIONING_PROFILE_SPECIFIER="<UUID>" PRODUCT_BUNDLE_IDENTIFIER="<bundle id>" DEVELOPMENT_TEAM="<team id>"
    

    export
    exportOptionsPlist.plist可采用模板写文件

    因为 Xcode 9 默认不允许访问钥匙串的内容,必须要设置 allowProvisioningUpdates 才会允许。所有在这里导出做一下版本判断
    
    version < 9.0
    xcodebuild -exportArchive -archivePath <导出的.xcarchive文件路径> -exportPath <~/exportPath> -exportOptionsPlist <~/tmp_exportOptions.plist路径> -configuration Release
    
    
    version >= 9.0
    xcodebuild -exportArchive -archivePath <导出的.xcarchive文件路径> -exportPath <~/exportPath> -exportOptionsPlist <~/tmp_exportOptions.plist路径> -allowProvisioningUpdates
    

    exportOptionsPlist.plist

    $method 选择: app-store、development、ad-hoc

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
      <dict>
        <key>teamID</key>
        <string>{teamId}</string>
        <key>method</key>
        <string>{$method}</string>
        <key>provisioningProfiles</key>
        <dict>
          <key>{bundleId}</key>
          <string>{uuid}</string>
        </dict>
        <key>compileBitcode</key>
        <false/>
        <key>uploadBitcode</key>
        <false/>
        <key>uploadSymbols</key>
        <false/>
      </dict>
    </plist>
    

    相关文章

      网友评论

          本文标题:iOS自动打包脚本会用到的相关命令

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