1. 程式人生 > >IOS 打包證書籤名 shell指令碼

IOS 打包證書籤名 shell指令碼

shell 指令碼:

#!/bin/bash
# 
#--------------------------------------------
# 功能:
# 作者:
# 建立日期:
#--------------------------------------------

#上傳伺服器配置
appId="0001"
versionId="1.0.0"
uploadUrl="http://*********/test/upload.json"

#證書及描述檔案
CODE_SIGN_IDENTITY="iPhone Distribution: *** Appliance Co., Ltd."
DEVELOPMENT_TEAM="5E2PGY2377***"
PROVISIONING_PROFILE_SPECIFIER="****Enterprise"

#打包環境檢測
if [ $1 != "sit" -a $1 != "pre" -a $1 != "Pre" -a $1 != "pre2" -a $1 != "Pre2" -a $1 != "pre3" -a $1 != "Pre3" -a $1 != "prd" ]; then
	echo "請輸入正確的構建環境:[sit | pre | Pre | pre2 | Pre2 | pre3 | Pre3 | prd]"
    exit 1
else
	build_env=$(echo $1 | perl -pe 's/.*/\u$&/')	
fi

#工程路徑讀取
workspace_path="$(cd "$(dirname $0)" && pwd)"
cd ${workspace_path}
workspace_name=$(ls | grep xcworkspace)
project_dir="epa_project_ios"
project_path=${workspace_path}/${project_dir}
project_name=$(ls ${project_dir} | grep xcodeproj | awk -F.xcodeproj '{print $1}')
target_name=${project_name}
info_plist=${project_path}/Project/${project_name}-Info.plist
result_path=${workspace_path}/build/${build_env}_$(date +%Y-%m-%d_%H_%M)

#工程程式碼更新
echo "======開始更新程式碼======"
cd ${project_path}
git stash
git pull --rebase
cd ${workspace_path}
pod update --no-repo-update --verbose
if [ $? != 0 ]; then
    echo "======程式碼更新失敗======"
    exit 1
else
    echo "======完成程式碼更新======"
fi

#修改版本號
if [ -n "$2" ]; then
    bundleShortVersion=$(echo $2 | perl -pe 's/.*/\u$&/')
    /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${bundleShortVersion}" ${info_plist}
else
    #主版本號讀取
    bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" ${info_plist})
fi

#應用標識及名稱修改
case "$1" in
	sit|pre|pre2|pre3)
		bundle_identifier=com.suning.${build_env}
    	bundle_name=${build_env}${bundleShortVersion}
    	;;
	Sit|Pre|Pre2|Pre3|Prd|prd)
		bundle_identifier=com.suning.SuningEfubao
    	bundle_name="****test"
	;;
esac

/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier ${bundle_identifier}" ${info_plist}
/usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName ${bundle_name}" ${info_plist}

#Today Extension
te_info_plist=${project_path}/NotificationBarForYiFuBao/Info.plist
if [ -f ${nse_info_plist} ]; then
    te_bundle_identifier=${bundle_identifier}.NSExtension
    /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier ${te_bundle_identifier}" ${te_info_plist}
fi

#Notification Service Extension
nse_info_plist=${project_path}/NotificationServiceExtension/Info.plist
if [ -f ${nse_info_plist} ]; then
    nse_bundle_identifier=${bundle_identifier}.NotificationServiceExtension
    /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier ${nse_bundle_identifier}" ${nse_info_plist}
fi

#打包環境修改
config_file=${project_path}/Project/Src/Constants/BuildConfig.h

if [ -f ${config_file} ]; then

	upper_env=$(echo ${build_env} | tr '[a-z]' '[A-Z]')

	echo "======修改環境配置======"
	sed -i '' "/TARGET_ENV_/ s/1/0/" ${config_file}
	sed -i '' "/TARGET_ENV_${upper_env}/ s/0/1/" ${config_file}

	sed -i '' "/DEBUG_ENABLE/ s/1/0/" ${config_file}
	
fi

#構建路徑設定
mkdir -p "${result_path}"
setting_out=${result_path}/build_setting.txt
xcodebuild -showBuildSettings -workspace "${workspace_name}" -scheme "${target_name}" -configuration Release > ${setting_out}
build_path=`echo $(grep -w  "CONFIGURATION_BUILD_DIR" ${setting_out} | awk -F= '{print $2}')`
echo "======build_path: ${build_path}======"
archive_path=${build_path}/${target_name}.xcarchive


#清除舊包
rm -rf ${archive_path}
#歸檔打包
echo "======開始構建======"
xcodebuild clean archive -workspace "${workspace_name}" \
-scheme "${target_name}" \
-archivePath ${archive_path} \
-configuration Release \
CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" \
DEVELOPMENT_TEAM="${DEVELOPMENT_TEAM}" \
PROVISIONING_PROFILE_SPECIFIER="${PROVISIONING_PROFILE_SPECIFIER}"

echo "======檢查是否構建成功======"
if [ -d "${archive_path}" ]; then
	
	echo "構建成功......"
	
else

	echo -e "\033[31m 構建失敗,請修正後重新執行! \033[0m"
	rm -rf ${result_path}
	exit 1

fi

cd ${project_path}
git checkout -- ${config_file}
git checkout -- ${info_plist}
git checkout -- SNYifubao.xcodeproj/project.pbxproj

ipa_name=${target_name}_${bundleShortVersion}.ipa
ipa_path=${result_path}
ExportOptionsPlist=${project_path}/ExportOptions.plist

#XCODE8 需要使用系統的ruby
which rvm > /dev/null
if [[ $? -eq 0 ]]; then
	echo "RVM detected, forcing to use system ruby"
	[ -s "$HOME/.rvm/scripts/rvm" ] && . "$HOME/.rvm/scripts/rvm"
	rvm use system
fi

#匯出ipa
xcodebuild -exportArchive \
-archivePath ${archive_path} \
-exportOptionsPlist ${ExportOptionsPlist} \
-exportPath ${ipa_path}

echo "======檢查是否成功匯出ipa======"
ipa_temp_path=${ipa_path}/${target_name}.ipa
if [ -f "${ipa_temp_path}" ]; then
	echo "匯出ipa成功......"
	#ipa重新命名
	mv "${ipa_temp_path}" "${ipa_path}/${ipa_name}"
else
	echo -e "\033[31m 匯出ipa失敗...... \033[0m"
	exit 1
fi

#備份dSYM
dsym_path=${archive_path}/dSYMs/${target_name}.app.dSYM/Contents/Resources/DWARF/${target_name}
cp -R "${dsym_path}" "${result_path}/${target_name}.dSYM"

#info名稱
ipa_info=${target_name}_${bundleShortVersion}.info
echo ${target_name} ${bundleShortVersion} $1"($(date "+%Y-%m-%d %H:%M"))" > ${result_path}/${ipa_info}
ipaDesc="****test"$1

echo "======result_path: ${result_path}======"

###########################################檔案上傳###########################################

echo "======開始上傳測試包======"
case "$build_env" in
Pre|Pre2|Pre3)
build_env="Pre";;
esac
cd ${result_path}
#curl -T "{${ipa_name},${ipa_info}}" -u epp:ios ftp://*********/${build_env}/ipa/


curl -F "appId=${appId}" -F "versionId=${versionId}" -F "bundleId=${bundle_identifier}" -F "ipaDesc=${ipaDesc}" -F "
[email protected]
${ipa_path}/${ipa_name}" ${uploadUrl} echo "======共耗時${SECONDS}秒======"

相關推薦

IOS 打包書籤 shell指令碼

shell 指令碼:#!/bin/bash # #-------------------------------------------- # 功能: # 作者: # 建立日期: #--------------------------------------------

Hbuilder 打包書籤問題

可能iOS下各種證書(點選這裡)的繁雜,所以官方只給出了iOS系統下證書的生成說明,Android證書的生成的確很簡單,我簡單說明一下: 1、安裝JDK 2、在cmd下,進入到JDK的bin目錄,輸入: keytool -genkey -alias yourapp -keyalg RS

使用Let's Encrypt書籤服務建立Java Keystore(.jks)

安裝certbot sudo apt-get install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install

openssl和cfssl書籤請求一點記錄

基本概念: X509 證書標準,定義證書內容 openssl:一套開源軟體,SSL密碼庫工具,提供了一個通用、健壯、功能完備的工具套件,用以支援SSL/TLS 協議的實現。 CFSSL: CFSSL是CloudFlare的PKI / TLS瑞士×××。它既是命令列工具,也是用於簽名,驗證和捆綁

AndroidStudio配置數字書籤及切換debug和release(包含使用adb命令對apk進行簽名)

使用adb命令對apk進行簽名: jarsigner -verbose -keystore keystore.jks -signedjar signed.apk unsigned.apk alias_

OpenSSL生成並使用CA根書籤Keytool生成的證書請求

生成私鑰[帶密碼] [root@node00 security]# openssl genrsa [-des3] -out ca.key 2048 Generating RSA private key, 2048 bit long modulus ...............

騰訊雲免費SSL證書如何生成書籤請求CSR?

騰訊雲免費SSL證書基本上可以滿足我們小網站的需求,大家可以參考這篇:騰訊雲免費SSL證書申請地址  申請到證書即可。但是問 題來了,騰訊雲免費SSL證書生成的SSL證書只提供,KEY+CRT,缺少證書籤名請求CSR,應該如何搞?比如我們使用某些虛擬主 機(諸如糖果主機)

IOS8與9配置企業書籤的應用

ios8出來的時候,使用企業證書打出的包不能夠下載,後來網上提供了一定的解決,在plist中的bundle id後面加上ios8fix,如下: <key>bundle-identifier</key> <string>com.ah

蘋果書籤機制

原文地址:http://www.mamicode.com/info-detail-1155997.html 非對稱加密和摘要 非對稱加密的特性和用法 非對稱加密演算法可能是世界上最重要的演算法,它是當今電子商務等領域的基石。簡而言之,非對稱加密就是指加密金鑰和解密金

iOS利用(Shell指令碼)自動打包專案工程生成ipa

剛剛進入一家遊戲公司,今天在研究iOS利用指令碼打包專案工程。用xcode打包速度慢而且繁瑣,所以選擇指令碼來做,在這裡分享一下。 打包方法 一.通過Xcode 其實當我們Xcode點選了build或者執行comand+R之後,Xcode自己執行的

詳解Shell指令碼實現iOS自動化編譯打包提交

目錄 前言Shell指令碼涉及的工具 xcodebuild和xcrunaltoolfir-cliPlistBuddy一些概念的區別具體實現 xcodebuild和xcrun準備Plist檔案獲取命令列引數清理構建目錄編譯打包成Archive將Archive匯出上傳到Fir

ios xcodebuild命令列自動打包 shell指令碼

#################################### 使用規則:     1.cd到工程目錄,再執行該sh指令碼檔案     2.該工程如果存在xcworkspace檔案,那麼WORKSPACE_NAME必須要指定名稱,PROJECT_NAME也

iOS工程自動打包Shell指令碼打包

1 #!/bin/bash 2 3 #-------------------------------------------- 4 # 功能:編譯xcode專案並打ipa包 5 # 使用說明: 6 # 編譯project 7 # ipa-b

升級到xcode9 shell指令碼自動打包失敗

http://blog.csdn.net/kongdeqin/article/details/78050599 升級到xcode9 shell指令碼自動打包失敗 升級完xcode9 自動打包報: xcrun: error: unable to find utility “Pac

Shell指令碼構建Docker 半自動化編譯打包釋出應用

Docker 釋出的方式為實現DevOps(自動化運維,需要配置 程式碼管理工具如Git的hook來實現提交編譯、打包、釋出等一系列事件控制)提供了諸多方便,輔助於Shell指令碼可以很好的配合起來。Docker映象可以通過自動化編譯,也可以通過匯入映象的方式來獲得。本文的題目叫:Shell指令

【福利乾貨】Maven 自動打包編譯的shell指令碼

以下內容純屬瞎琢磨,希望對大家有用,廢話不多說直接上程式碼 #!/bin/bash echo ================================= echo 自動化部署指令碼啟動 echo 自動化部署指令碼啟動 echo ==============================

iOS音視訊—Shell指令碼語言(第一個指令碼應用)

Shell指令碼語言 簡介 一、Android開發:動態庫編譯(.so檔案) iOS開發:靜態庫(.a檔案) Shell編譯 掌握基本Shell使用->修改和應用Shell 二、什麼是Shell

iOS音視訊—Shell指令碼語言(語法-字串)

In every walk with nature one receives far more than he seeks. 每一次和自然同行,都會有意外的收貨。 Shell指令碼語言(語法-字串)

Maven 自動打包編譯的shell指令碼

#!/bin/bash echo ================================= echo 自動化部署指令碼啟動 echo 自動化部署指令碼啟動 echo ================================= echo 進入/data/vhome cd

ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象

實驗環境 系統版本:16.04-4.4.0-21-generic Jenkins版本:v2.140 Docker版本:18.09.0 Harbor版本:v1.5.3(centos7-3.10) 注:由於Harbor是基於Docker Registry V2版本,所以就要求Docker版本不小於1.1