iOS 关于xcodebuild打包整理

之前打包都是用Xcode直接打包的,很久之前也用过Fastline。

最近接到一个这样的需求:在Jenkins上创建一个任务,可以配置App Name 、AccessKey、SecretKey和不同的Bundle ID,这些完全由QA自己填,方便生成不同的商户和测试功能。

由于之前在Jenkins上有打包的代码(之前的只能选择Build Type),所以只需要把原来的修改一下,把遇到的问题都记录下来,防止以后再出错。

#!/bin/bash
#这些是配置参数
TENANTNAME=${TENANT_NAME}
APPNAME=${APP_NAME}
ACCESSKEY=${ACCESS_KEY}
SECRETKEY=${SECRET_KEY}
BUILDTYPE=${BUILD_TYPE}
BUNDLEID=${BUNDLE_ID}
PROVISIONINGPROFILE=${PROVISIONING_PROFILE}

# test cmd result
IF_BUILD_FAILED()
{
    if [[ $1 -ne 0 ]]; then
        echo "$2"
        exit 1
    fi
}

# replace string in specil path
REPLACE_STRING_IN_FILE()
{
 SOURCE=$1
 TARGET=$2
 FILE=$3
 OS=`uname`
 if [[ ${OS} == "Darwin" ]]; then
  sed -i "" "s/${SOURCE}/${TARGET}/g" ${FILE}
  PRINTF "if"
 else
  PRINTF "else"
  sed -i "s/${SOURCE}/${TARGET}/g" ${FILE}
 fi
}

packaging()
{

#***********配置项目
#工程名称(Project的名字)
MWProjectName=$1
#scheme名字 -可以点击Product->Scheme->Manager Schemes...查看
MWScheme=$2
#Release还是Debug
MWConfiguration=$3
#日期
MWDate=`date +%Y%m%d_%H%M`
#工程路径
MWWorkspace=$4
#build路径
MWBuildDir=$5
#plist文件名,默认放在工程文件路径的位置
MBPlistName=$6

#创建构建和输出的路径
mkdir -p $MWBuildDir

#构建
xcodebuild archive \
-workspace "$MWProjectName.xcworkspace" \
-scheme "$MWScheme" \
-configuration "$MWConfiguration" \
-archivePath "$MWBuildDir/$MWProjectName" \
clean \
#build \
# -derivedDataPath "$MWBuildTempDir"

# 生成ipa
xcodebuild -exportArchive \
-archivePath "$MWBuildDir/$MWProjectName.xcarchive" \
-exportPath "$MWBuildDir/$MWProjectName" \
-exportOptionsPlist "$MWWorkspace/$MBPlistName" \
-allowProvisioningUpdates YES #这里是关键,因为使用了Automatically manage signing 这个必填,上一行的\一定不要忘记,这个问题找了好久
open $MWBuildDir

}

cd ${SOURCECODEDIR}
#replace app name 替换AppName
echo "Replace app name..."
SOURCE_STR=${APPNAME}
PLIST_PATH="SchoolApp/Info.plist"
plutil -replace CFBundleDisplayName -string "${SOURCE_STR}" ${PLIST_PATH}
IF_BUILD_FAILED $? "Replace app name failed!"


#replace Bundle ID
echo "Replace Bundle ID..."
cd SchoolApp.xcodeproj
#这个遇到了一个问题,必须使用双引号,使用单引号的话不会转换,也是对语言不熟悉造成的
sed -i '' "s/${Old_BundleID}/${New_BundleID}/g" project.pbxproj
cd ../
IF_BUILD_FAILED $? "Replace Bundle ID failed!"

#replace url
echo "Replace url..."
SOURCE_STR="nlxx"
REPLACE_STRING_IN_FILE ${SOURCE_STR} ${TENANTNAME} ${TARGET_URL_FILE}
IF_BUILD_FAILED $? "Replace url failed!"

# replace accesskey
echo "Replace accesskey..."

str=${ACCESS_KEY}
ACCESSKEYARR=(${str//#/ })
if [[ ${BUILDTYPE} == "Debug" ]]; then
 ACCESSKEY=${ACCESSKEYARR[0]}
 SOURCE_STR=${OLDKEY}
 REPLACE_STRING_IN_FILE ${SOURCE_STR} ${ACCESSKEY} ${TARGET_KEY_FILE}
 IF_BUILD_FAILED $? "Replace debug accesskey failed!"
else
 ACCESSKEY=${ACCESSKEYARR[1]}
 SOURCE_STR=${OLDKEY}
 REPLACE_STRING_IN_FILE ${SOURCE_STR} ${ACCESSKEY} ${TARGET_KEY_FILE}
 IF_BUILD_FAILED $? "Replace release accesskey failed!"
fi

# replace secretkey
echo "Replace secretkey..."

SECRET_KEY_STR=${SECRET_KEY}
SECRET_KEY_ARR=(${SECRET_KEY_STR//#/ })

if [[ ${BUILDTYPE} == "Debug" ]]; then
 SECRETKEY=${SECRET_KEY_ARR[0]}
 SOURCE_STR="${OLDKEY}
 REPLACE_STRING_IN_FILE ${SOURCE_STR} ${SECRETKEY} ${TARGET_KEY_FILE}
 IF_BUILD_FAILED $? "Replace debug secretkey failed!"
else
 SECRETKEY=${SECRET_KEY_ARR[1]}
 SOURCE_STR="${OLDKEY}
 REPLACE_STRING_IN_FILE ${SOURCE_STR} ${SECRETKEY} ${TARGET_KEY_FILE}
 IF_BUILD_FAILED $? "Replace release secretkey failed!"
fi


#函数调用
# $1 工程名 $2 scheme名字 $3 Release还是Debug $4 工程路径 $5 ipa文件输出路径 $6 plist文件名字
echo "==============="
echo ""
echo ${BUILDTYPE}
packaging "SchoolApp" "SchoolApp" ${BUILDTYPE} "./" "/Users/jackie/jenkinsArchive/build/buffet" "adhocExportOptions.plist"
echo ""
echo "==============="



最后adhocExportOptions.plist文件其实不需要修改什么,provisioningProfiles后面是空的也可以。

<?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>provisioningProfiles</key>
	<dict>
		<!-- <key>com.****.MHYCXX</key>
		<string>****_AdHoc</string> -->
	</dict>
	<key>compileBitcode</key>
	<false/>
	<key>method</key>
	<string>ad-hoc</string>
</dict>
</plist>

因为设置了自动管理签名,所以只需要修改Bundle ID就可以,Provisioning Profile可以不用填

 

 

 

 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值