效果图镇楼
使用注意事项
- 将脚本和
plist
文件放到和主工程同目录下 -
project_name
换成工程名字 -
scheme_name
换成工程schemeName
一般都是和工程名字一样的(不确定的话可以同时按住shift
+command
+,
或者按下图所示来操作) -
exportOptionsPlistPath
导出的plist
文件路径再后面细说 - 如果没有使用项目中没有使用
CocoaPods
, 编译的时候需要将archive -workspace
改成archive -project
具体的看代码注释 - 替换蒲公英
key
,fir
的token
, 苹果开发者账号和密码(如果苹果账号有双重认证,需要去官网获取认证密码,替换脚本里面的tcha-fzfe-jcmd-tken
) - 运行脚本只需要打开终端
cd
到当前工程目录文件下输入:./shell.sh
回车即可 -
xcodebuild
更多详细使用, 在终端中输入xcodebuild --help
Shell
脚本代码
代码说明见注释
#使用方法
if [ ! -d ./IPADir ];
then
mkdir -p IPADir;
fi
# 删除build包
if [[ -d build ]]; then
rm -rf build -r
fi
#工程绝对路径
project_path=$(cd `dirname $0`; pwd)
#工程名 将XXX替换成自己的工程名
project_name=AutoArchiveTest
#scheme名 将XXX替换成自己的sheme名
scheme_name=AutoArchiveTest
#打包模式 Debug/Release
development_mode=Release
#build文件夹路径
build_path=${project_path}/build
#plist文件所在路径: 默认上传 app-store
exportOptionsPlistPath=${project_path}/exportAppstore.plist
#导出.ipa文件所在路径
exportIpaPath=${project_path}/IPADir/${development_mode}
echo "请输入你想法发布的方式 ? [ 1:app-store 2:ad-hoc] "
##
read number
while([[ $number != 1 ]] && [[ $number != 2 ]])
do
echo "笨蛋,只能输入 1 or 2"
echo "请输入你想法发布的方式 ? [ 1:app-store 2:ad-hoc] "
read number
done
if [ $number == 1 ];
then
# 配置证书
development_mode=Release
exportOptionsPlistPath=${project_path}/exportAppstore.plist
else
# 配置证书
development_mode=Release
exportOptionsPlistPath=${project_path}/exportTest.plist
fi
echo '///-----------'
echo '/// 正在清理工程'
echo '///-----------'
xcodebuild \
clean -configuration ${development_mode} -quiet || exit
echo '///--------'
echo '/// 清理完成'
echo '///--------'
echo ''
echo '///-----------'
echo '/// 正在编译工程:'${development_mode}
echo '///-----------'
# 如果没有使用cocoaPods, 需要将 archive -workspace ${project_path}/${project_name}.xcworkspace \
# 换成 archive -project ${project_name}.xcodeproj \
xcodebuild \
archive -workspace ${project_path}/${project_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-archivePath ${build_path}/${project_name}.xcarchive -quiet || exit
echo '///--------'
echo '/// 编译完成'
echo '///--------'
echo ''
echo '///----------'
echo '/// 开始ipa打包'
echo '///----------'
xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \
-configuration ${development_mode} \
-exportPath ${exportIpaPath} \
-exportOptionsPlist ${exportOptionsPlistPath} \
-quiet || exit
# 删除build包
#if [[ -d build ]]; then
#rm -rf build -r
#fi
if [ -e $exportIpaPath/$scheme_name.ipa ];
then
echo '///----------'
echo '/// ipa包已导出'
echo '///----------'
open $exportIpaPath
else
echo '///-------------'
echo '/// ipa包导出失败 '
echo '///-------------'
fi
echo '///------------'
echo '/// 打包ipa完成 '
echo '///-----------='
echo ''
echo '///-------------'
echo '/// 开始发布ipa包 '
echo '///-------------'
echo "\n\n"
if [ $number == 1 ];
then
#验证并上传到App Store
# 将-u 后面的XXX替换成自己的AppleID的账号,-p后面的XXX替换成自己的密码
altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
#1900006358@qq.com
#tcha-fzfe-jcmd-tken(双重认证密码)
#iOS123456(苹果账号密码)
"$altoolPath" --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -u 1900006358@qq.com [-p iOS123456]
"$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u 1900006358@qq.com -p tcha-fzfe-jcmd-tken
else
echo "请输入你要发布的平台 ? [ 1:fir 2:蒲公英] "
##
read platform
while([[ $platform != 1 ]] && [[ $platform != 2 ]])
do
echo "笨蛋,只能输入 1 or 2"
echo "请输入你要发布的平台 ? [ 1:fir 2:蒲公英] "
read platform
done
if [ $platform == 1 ];
then
#上传到Fir
# 将XXX替换成自己的Fir平台的token
fir login -T d58c5754d2aff40b4d883ddfefa0d079
fir publish $exportIpaPath/$scheme_name.ipa
else
echo "开始上传到蒲公英"
#上传到蒲公英
#蒲公英aipKey
MY_PGY_API_K=3820ab3ad13099f28775f203b45cc8d7
#蒲公英uKey
MY_PGY_UK=45c0b76527e81687b93e0e4c35c9d994
curl -F "file=@${exportIpaPath}/${scheme_name}.ipa" -F "uKey=${MY_PGY_UK}" -F "_api_key=${MY_PGY_API_K}" https://upload.pgyer.com/apiv1/app/upload
fi
fi
echo "\n\n"
echo "已运行完毕>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
exit 0
exportAppstore.plist
和exportTest.plist
文件配置
测试包配置如下:(这里显示的是手动打包)
provisioningProfiles
字典中的值是项目的bundle id
以及对应描述文件的名字(这个名字就是我们在生成描述文件我们自己命名的名字), 配置该文件有一个取巧的方法, 直接使用Xcode
打包, 之后直接导出ipa
即可得到一份该文件, 如下图所示:
个人建议不管你是手动管理证书还是自动管理证书都先使用Xcode
打包, 之后直接导出或者copy
一份里面的ExportOptions.plist
文件之后再改下名字即可
一般出错的话都是由于
plist
文件里面证书配置有问题,所以还是建议使用XCode
自动生成的
如果遇到create xxx build xxx 错误
可以先项目里面生成的build
文件删除即可
常见错误解答