iOS自动化打包修改图标及一些参数

xcodebuild打包

使用xcodebuild打包有三种情况,一种是adHoc测试打包ipa,一个是上传AppStore打包,一个企业级别打包。以下只介绍企业级别打包步骤。

一:终端分步实现如下

  1. 打开终端,cd到当前目录工程
  2. 在终端中输入一下内容来完成编译
    xcodebuild archive -workspace XXX.xcworkspace -scheme XXX -configuration Release -archivePath ./myArchivePath CONFIGURATION_BUILD_DIR ./dir ODE_SIGN_IDENTITY=证书 PROVISIONING_PROFILE=描述文件UUID

iOS自动化打包修改图标及一些参数_第1张图片
如果工程是勾选了Automatically manage signing,那么就不用在配置ODE_SIGN_IDENTITY和PROVISIONING_PROFILE。假如需要在脚本文件中自己配置证书的话,需在工程中勾掉这个选项,手动配置证书。如下

iOS自动化打包修改图标及一些参数_第2张图片
证书名字在钥匙串里复制打包所用的证书名字即可
配置文件UUID:首先在Finder中前往/Users/用户名/Library/MobileDevice/Provisioning Profiles路径(用户名记得替换成自己的电脑名字)然后在路径下找到当前bundleId所使用的配置文件,文件名即为UUID。
3. 配置打包的ExportOptions.plist文件
可以在任意一个Xcode工程中新建一个ExportOptions.plist文件
iOS自动化打包修改图标及一些参数_第3张图片
如果要手动在下面.sh文件里面设置证书的话,ExportOptions.plist文件要加字典provisioningProfiles,键值对是bundleID和对应的配置证书UUID。
4. 工程路径下的终端中输入xcodebuild -exportArchive -archivePath ./myArchivePath.xcarchive -exportOptionsPlist ./ExportOptions.plist -exportPath ./out ,这一步实际就是Xcode编译号后在工程中勾选打包的选择。只是用配置文件的方式来抵销手动选择。

将上述步骤放入shell脚本中,可以修改图标,bundleID等

1.cd到需要自动打包的工程下
2.在终端中输入touch xcodebuild.sh创建xcodebuild.sh脚本文件
3.双击打开脚本写入下面 脚本内容(请确保所有版本的plist配置文件都写好了)
4.在终端中输入 ./xcodebuild.sh运行脚本,按照步骤完成打包选择(如果运行的时候出现Permission denied,请先在终端中执行chmod a+x *.文件的后缀名 后,在运行。)
下面脚本是需要先输入版本号:

#
#脚本所在的目录必须和WorkSpace或者说工程主目录所在的目录在同一个目录层级中
#脚本所在的目录必须和WorkSpace或者说工程主目录所在的目录在同一个目录层级中

#配置参数

#workspace的名字,如果没有则不需要
Workspace_Name="xx"

#工程名字
Project_Name="xx"

echo "place enter the version you want to export"

read version
#判断version是否为空
if [[ -z $version ]];
then
echo "请输入版本号"
exit 1
else
echo "版本号为 $version"
fi
#version="1.0.1"

bundleId="com.cm.sS"

appName="demo"
#配置打包方式Release或者Debug
Configuration="Release"

#基础主路径
BUILD_PATH=./build

echo $BUILD_PATH
#工程地址
project_path='.'
#基础子路径
#enterprise
ENTERPRISE_PATH=${BUILD_PATH}/${Project_Name}/enterprise
#图标替换
#注意icon 使用Images.xcassets/AppIcon.appiconset
#launch使用Images.xcassets/LaunchImage.launchimage
#测试使用图标icon
#resource_path=./图标/bailu
#正式使用图标icon
resource_path=./图标/icon
echo $resource_path

#配置编译文件的存放地址
#企业
CONFIGURATION_BUILD_PATH_ENTERPRISE=${ENTERPRISE_PATH}/${Configuration}-iphoneos

#配置打包结果输出的路径
#企业版本
EnterprisePrijectOutPath=${ENTERPRISE_PATH}/enterpriseOut

#如果工程中配置了Automatically manage signing,那么就不需要证书名和描述文件名,请确保工程中配置的证书名和描述文件是你打包想要用的
#企业(enterprise)证书名#描述文件
ENTERPRISECODE_SIGN_IDENTITY="iPhone Distribution: x x x x"
ENTERPRISEROVISIONING_PROFILE_NAME="xxxx"uuid

#加载的plist文件
EnterpriseExportOptionsPlist="./ExportOptions.plist"

#要替换的icons素材
icons=([email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected])
launchs=([email protected] [email protected] [email protected] [email protected] [email protected] [email protected])


#首先清除原来的文件夹
rm -rf ${BUILD_PATH}
#创建文件夹,路径需要一层一层创建,不然会创建失败
mkdir ${BUILD_PATH}
mkdir ${ENTERPRISE_PATH}
#编译文件
mkdir ${CONFIGURATION_BUILD_PATH_ENTERPRISE}
#打包输出的文件
mkdir ${EnterprisePrijectOutPath}
#copy
mkdir ${DSYM_COPY_PATH_ENTERPRISE}


#---------------------------------------------------------------------------------------------------------------------------------

prepare(){

plist_path="${project_path}/${Project_Name}/Info.plist"
echo $plist_path

#替换displayName以及bundleId
sed -i '' "/CFBundleDisplayName/{n;s/.*<\/string>/${appName}<\/string>/;}" $plist_path
sed -i '' "/CFBundleName/{n;s/.*<\/string>/${appName}<\/string>/;}" $plist_path
sed -i '' "/CFBundleIdentifier/{n;s/.*<\/string>/${bundleId}<\/string>/;}" $plist_path
sed -i '' "/CFBundleShortVersionString/{n;s/.*<\/string>/${version}<\/string>/;}" $plist_path
sed -i '' "/CFBundleVersion/{n;s/.*<\/string>/${version}<\/string>/;}" $plist_path

#m为下列while循环的参数
m=0
while [[ m -lt ${#icons[@]} ]]; do
icon=${icons[m]}
echo "${icon}"
let m++
#替换图标、启动图
cp "${resource_path}/${icon}" "${project_path}/${Project_Name}/Images.xcassets/AppIcon.appiconset/${icon}"
done

n=0
while [[ n -lt ${#launchs[@]} ]]; do
launch=${launchs[n]}
echo "${launch}"
let n++
#替换图标、启动图
cp "${resource_path}/${launch}" "${project_path}/${Project_Name}/Images.xcassets/LaunchImage.launchimage/${launch}"
done


}
prepare

#exit 1
#
#xcodebuild archive -workspace ${Project_Name}.xcworkspace -scheme $Project_Name -configuration $Configuration -archivePath ${ENTERPRISE_PATH}/$Project_Name-enterprise.xcarchive

xcodebuild archive -workspace ${Project_Name}.xcworkspace -scheme $Project_Name -configuration $Configuration -archivePath ${ENTERPRISE_PATH}/$Project_Name-enterprise.xcarchive
CODE_SIGN_IDENTITY="${ENTERPRISECODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${ENTERPRISEROVISIONING_PROFILE_NAME}" PRODUCT_BUNDLE_IDENTIFIER=${bundleId}

xcodebuild -exportArchive -archivePath ${ENTERPRISE_PATH}/$Project_Name-enterprise.xcarchive -exportOptionsPlist $EnterpriseExportOptionsPlist -exportPath ${EnterprisePrijectOutPath}


manifestplist_path="${EnterprisePrijectOutPath}/manifest.plist"
echo $plist_path

#替换displayName以及bundleId
sed -i '' "/title/{n;s/.*<\/string>/${appName}<\/string>/;}" $manifestplist_path
sed -i '' "/bundle-identifier/{n;s/.*<\/string>/${bundleId}<\/string>/;}" $manifestplist_path
m=0

#创建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}

echo "打包完成"

你可能感兴趣的:(ios)