iOS 项目中多个target编译前修改plist文件某个值
目前我的项目是由一份Project多个Target多个shema构成的。因为代码逻辑都是一样的,仅仅是里面的资源和请求接口不一样,所以添加了多个Target.
项目中用到了JPush, 但是Jpush很坑爹,有一个PushConfig.plist文件,程序运行的时候会读取此文件中的值:
内容如下:
最主要的 APP_KEY 因为不同的Target , APP_KEY值不一样。这样一来每次编译打包的时候,都需要更改此文件.
太麻烦了。
步骤如下:
1. 存放所有Jpush AppKey的文件,如:JPUSHKEY
里面存放的key按照 $PRODUCTNAME=$APPKEY这种格式排列
2. shell 脚本一份. modifyJPushKey.sh
3. 项目中点中TARGETS,右边选择 Build Phases
点击 + (NEW Run Script Build Phase)
点击 Run Script 一栏,下拉展开:
里面可以填写脚本:
(我为了编写修改脚本便,脚本我拿出来单独写成一份文件。这个 Run Script 里面,就去执行这个写出来的脚本。)
SHELL_PATH=$PROJECT_DIR/modifyJPushKey.sh
chmod +x ${SHELL_PATH}
sh ${SHELL_PATH}
展开 Run Script 如图:
这时候可以把它(Run Script 这一栏)拖动到前面,以便脚本在合适的时候执行.
附录:
1. JPUSHKEY文件如下: = 号左右的是 PRODUCTNAME
=号右边的就是 key值
2. modifyJPushKey.sh
目前我的项目是由一份Project多个Target多个shema构成的。因为代码逻辑都是一样的,仅仅是里面的资源和请求接口不一样,所以添加了多个Target.
项目中用到了JPush, 但是Jpush很坑爹,有一个PushConfig.plist文件,程序运行的时候会读取此文件中的值:
内容如下:
最主要的 APP_KEY 因为不同的Target , APP_KEY值不一样。这样一来每次编译打包的时候,都需要更改此文件.
太麻烦了。
步骤如下:
1. 存放所有Jpush AppKey的文件,如:JPUSHKEY
里面存放的key按照 $PRODUCTNAME=$APPKEY这种格式排列
2. shell 脚本一份. modifyJPushKey.sh
3. 项目中点中TARGETS,右边选择 Build Phases
点击 + (NEW Run Script Build Phase)
点击 Run Script 一栏,下拉展开:
里面可以填写脚本:
(我为了编写修改脚本便,脚本我拿出来单独写成一份文件。这个 Run Script 里面,就去执行这个写出来的脚本。)
SHELL_PATH=$PROJECT_DIR/modifyJPushKey.sh
chmod +x ${SHELL_PATH}
sh ${SHELL_PATH}
展开 Run Script 如图:
这时候可以把它(Run Script 这一栏)拖动到前面,以便脚本在合适的时候执行.
附录:
1. JPUSHKEY文件如下: = 号左右的是 PRODUCTNAME
=号右边的就是 key值
A_HD=8031cffad446b************
B_HD=0f4f8ff111ba38************
C_HD=e2ef1b1560833******
D_HD=6531d43b365e2******
E_HD=d7c71863e1d620******
F_HD=9b7a1d141e97f0******
G_HD=13c75c512e3feaaf******
2. modifyJPushKey.sh
#!/bin/bash
#productName
PRODUCTNAME=${PRODUCT_NAME}
#JPUSHKEY文件 绝对路径
JPUSHKEY_FILE_PATH=$PROJECT_DIR/******/*******/JPUSHKEY
#PushConfig.plist文件 绝对路径
PushConfig_FILE_PATH=$PROJECT_DIR/******/******/PushConfig.plist
#存放AppKey值
keyString=""
#根据PRODUCTNAME 查找JPUSHKEY文件中 对应的keyString值
cat ${JPUSHKEY_FILE_PATH} | while read line
do
productName=${line%%=*}
if [ "${PRODUCTNAME}" == "${productName}" ]; then
keyString=${line#*=}
echo $productName $keyString
#替换 PushConfig.plist 文件中 appkey的值
sed -i '' "/<key>APP_KEY<\/key>/{ n; s/\(<string>\).*\(<\/string>\)/\1${keyString}\2/;}" ${PushConfig_FILE_PATH}
exit 0
fi
done
就是这样的。