使用shell判断描述文件mobileprovision属于debug/enterprise/ad-hoc/appstore的类型

Shell系列上一篇:使用Shell判断钥匙串里是否包含mobileprovision里的Identity


参考:

  • 命令行获取mobileprovision文件的UUID
  • https://github.com/0xc010d/mobileprovision-read

前言

在iOS开发中,

账号分别为:

企业账号(in-house),个人开发者、公司开发者三种类型,

对应的打包证书有:

1、开发证书(三种开发账号都可以)、
2、ad-hoc证书(三种开发账号都可以)、
3、企业证书(只有企业账号可以)、
4、AppStore证书(只要个人账号和公司账号可以)几类

不同的证书有不同的描述文件,通过描述文件里的

ProvisionedDevices(debug、adhoc独有),
Entitlements.get-task-allow(ad-hoc为false),
ProvisionsAllDevices(企业证书独有)
这些字段判断出描述文件的类型,完整demo如下:
method: -- enterprise ad-hoc appstore develepment

# !/bin/bash
function findtype()
{
  #接收参数,也就是xxx.mobileprovision的路径
  profile_path=$1
  #临时将xxx.mobileprovision转换成plist文件路径
  temp_plist_path="./temp_profile.plist"
  #删除之前存在的plist文件
  rm -rf $temp_plist_path
  #将xxx.mobileprovision转换成xxx.plist
  security cms -D -i "$profile_path" > $temp_plist_path

  #ad-hoc、debug独有
  ProvisionedDevices=$(/usr/libexec/PlistBuddy -c "print ProvisionedDevices" $temp_plist_path)
  ProvisionedDevices_txt_len=${#ProvisionedDevices}
  if [ $ProvisionedDevices_txt_len -gt 0 ]; then
    # echo "debug --- adhoc"
      get_task_allow=$(/usr/libexec/PlistBuddy -c "print Entitlements:get-task-allow" $temp_plist_path)
      if [ $get_task_allow == "false" ]; then
          echo "ad-hoc"
          return 1
      else
        echo "develepment"
        return 2
      fi
  else
    #enterprise 独有
      ProvisionsAllDevices=$(/usr/libexec/PlistBuddy -c "print ProvisionsAllDevices" $temp_plist_path)
      ProvisionsAllDevices_txt_len=${#ProvisionsAllDevices}
      # echo "enterprise --appstore"
      #true=4 false=5
      if [ $ProvisionsAllDevices_txt_len -gt 0 -a $ProvisionsAllDevices_txt_len == 4 ]; then
          echo "enterprise"
          return 3
      else
        echo "appstore"
        return 4
      fi

  fi
}

type_txt=`findtype "/xxx/xxx.mobileprovision"`
echo $type_txt
type_txt2=`findtype "/xxxx/xxx/xx.mobileprovision"`
echo $type_txt2
type_txt3=`findtype "/xxx/xxx.mobileprovision"`
echo $type_txt3
type_txt4=`findtype "/xxxx/xxx.mobileprovision"`
echo $type_txt4

分别用四种描述文件打印结果如下:

$ sh test.sh
ad-hoc
Print: Entry, "ProvisionedDevices", Does Not Exist
enterprise
debug
Print: Entry, "ProvisionedDevices", Does Not Exist
Print: Entry, "ProvisionsAllDevices", Does Not Exist
appstore

二、通过描述文件生成导出的ExportOption.plist文件

# !/bin/bash
function read_info_mobileprovision()
{
  #接收参数,也就是xxx.mobileprovision的路径
  profile_path=$1
  #临时将xxx.mobileprovision转换成plist文件路径
  temp_plist_path="./temp_profile.plist"
  #删除之前存在的plist文件
  rm -rf $temp_plist_path
  #将xxx.mobileprovision转换成xxx.plist
  security cms -D -i "$profile_path" > $temp_plist_path

  inter_temp_varFile=$2
  rm -rf $inter_temp_varFile
  #2.3 读取信息
  #证书持有者机构
  config_TeamName=$(/usr/libexec/PlistBuddy -c "print TeamName" $temp_plist_path)
  echo "config_TeamName='${config_TeamName}'" >> $inter_temp_varFile
  #证书持有者组Id
  config_teamId=$(/usr/libexec/PlistBuddy -c "print :Entitlements:com.apple.developer.team-identifier" $temp_plist_path)
  echo "config_teamId='${config_teamId}'" >> $inter_temp_varFile
  #bundleId
  config_identifier=$(/usr/libexec/PlistBuddy -c "print :Entitlements:application-identifier" $temp_plist_path)
  config_identifier_cut="${config_teamId}."
  config_identifier=${config_identifier#*$config_identifier_cut}
  echo "config_identifier='${config_identifier}'" >> $inter_temp_varFile
  #发布证书名称
  config_disName=$(/usr/libexec/PlistBuddy -c "print Name" $temp_plist_path)
  echo "config_disName='${config_disName}'" >> $inter_temp_varFile
  #描述文件UUID
  config_uuid=$(/usr/libexec/PlistBuddy -c "print UUID" $temp_plist_path)
  echo "config_uuid='${config_uuid}'" >> $inter_temp_varFile
  #过期时间
  config_expirationDate=$(/usr/libexec/PlistBuddy -c "print ExpirationDate"  $temp_plist_path)
  echo "config_expirationDate='${config_expirationDate}'" >> $inter_temp_varFile

  #method: -- enterprise ad-hoc appstore develepment
  #ad-hoc、debug独有
  ProvisionedDevices=$(/usr/libexec/PlistBuddy -c "print ProvisionedDevices" $temp_plist_path)
  ProvisionedDevices_txt_len=${#ProvisionedDevices}
  if [ $ProvisionedDevices_txt_len -gt 0 ]; then
    # echo "debug --- adhoc"
      get_task_allow=$(/usr/libexec/PlistBuddy -c "print Entitlements:get-task-allow" $temp_plist_path)
      if [ $get_task_allow == "false" ]; then
          echo "ad-hoc"
          echo "config_method='ad-hoc'" >> $inter_temp_varFile
      else
        echo "debug"
        echo "config_method='develepment'" >> $inter_temp_varFile
      fi
  else
    #enterprise 独有
      ProvisionsAllDevices=$(/usr/libexec/PlistBuddy -c "print ProvisionsAllDevices" $temp_plist_path)
      ProvisionsAllDevices_txt_len=${#ProvisionsAllDevices}
      # echo "enterprise --appstore"
      #true=4 false=5
      if [ $ProvisionsAllDevices_txt_len -gt 0 -a $ProvisionsAllDevices_txt_len == 4 ]; then
          echo "enterprise"
          echo "config_method='enterprise'" >> $inter_temp_varFile
      else
        echo "appstore"
        echo "config_method='appstore'" >> $inter_temp_varFile
      fi

  fi
}

#证书类型
tempVarFile="./temp_var.txt"
#测试adhoc
# mobile_provision_path="/xx/xxxx/xxx.mobileprovision"
#测试dubug
# mobile_provision_path="/xx/xxxx/xxx.mobileprovision"
#测试enterprise
# mobile_provision_path="/xx/xxxx/xxx.mobileprovision"
#测试appstore
mobile_provision_path="/xx/xxxx/xxx.mobileprovision"
read_info_mobileprovision $mobile_provision_path $tempVarFile
cat $tempVarFile
source $tempVarFile
#method: -- enterprise ad-hoc appstore develepment
#2.6、生成plist
cat > "./ExportOptions.plist" << END_TEXT




    compileBitcode
    
    destination
    export
    method
    ${config_method}
    provisioningProfiles
    
        ${config_identifier}
        ${config_disName}
    
    signingCertificate
    iPhone Distribution
    signingStyle
    manual
    stripSwiftSymbols
    
    teamID
    ${config_teamId}
    thinning
    <none>


END_TEXT

你可能感兴趣的:(使用shell判断描述文件mobileprovision属于debug/enterprise/ad-hoc/appstore的类型)