Xcode版本14.3
准备工作打包的配置文件(放在与Shell同一级目录)手动打包为例
自定义项目的相关参数
# 是否编译工作空间 (例:若是用Cocopods管理的.xcworkspace项目,赋值true;用Xcode默认创建的.xcodeproj,赋值false)
is_workspace="false"
# .xcworkspace的名字,如果is_workspace为true,则必须填。否则可不填
workspace_name=""
# .xcodeproj的名字,如果is_workspace为false,则必须填。否则可不填
project_name="AutoIPA"
# 项目的scheme名称(也就是工程的target名称),必填
scheme_name="AutoIPA"
# 打包编译的方式 : Release,Debug。一般用Release。必填
build_configuration="Release"
# 打包的方式。方式分别为 development, ad-hoc, app-store, enterprise 。必填
method="development"
# 下面两个参数只是在手动指定Pofile文件的时候用到,如果使用Xcode自动管理Profile,直接留空就好
# (跟method对应的)mobileprovision文件名,需要先双击安装.mobileprovision文件.手动管理Profile时必填
mobileprovision_name="autoipa_development"
# 项目的bundleID,手动管理Profile时必填
bundle_identifier="cn.autoipa.com"
# 这里可以打印一些相关参数
echo "\033[31;1m--------------------配置参数--------------------\033[0m"
echo "\033[30mis_workspace=${is_workspace} "
echo "workspace_name=${workspace_name}"
echo "project_name=${project_name}"
echo "scheme_name=${scheme_name}"
echo "build_configuration=${build_configuration}"
echo "bundle_identifier=${bundle_identifier}"
echo "method=${method}"
echo "mobileprovision_name=${mobileprovision_name} \033[0m"
# 脚本的一些固定参数定义
# 获取当前脚本所在目录
script_dir="$( cd "$( dirname "$0" )" && pwd )"
# 工程根目录
project_dir=$script_dir
# 时间
DATE=`date '+%Y%m%d_%H%M%S'`
export_path="$HOME/Desktop/$scheme_name-$DATE"
export_archive_path="$export_path/$scheme_name.xcarchive"
export_ipa_path="$export_path"
ipa_name="${scheme_name}"
export_options_plist_path="$project_dir/ExportOptions.plist"
# =======================自动打包部分====================== #
echo "\033[31;1m------------------------------------------------------\033[0m"
echo "\033[32m开始构建项目 \033[0m"
# 进入项目工程目录
cd ${project_dir}
# 指定输出文件目录不存在则创建
if [ -d "$export_path" ] ; then
echo $export_path
else
mkdir -pv $export_path
fi
# 判断编译的项目类型是workspace还是project
if $is_workspace ; then
# 编译前清理工程
xcodebuild clean -workspace ${workspace_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${build_configuration}
xcodebuild archive -workspace ${workspace_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${build_configuration} \
-archivePath ${export_archive_path}
fi
# 检查是否构建成功 xcarchive 实际是一个文件夹不是一个文件所以使用 -d 判断
if [ -d "$export_archive_path" ] ; then
echo "\033[32;1m项目构建成功 🚀 🚀 🚀 \033[0m"
else
echo "\033[31;1m项目构建失败 😢 😢 😢 \033[0m"
exit 1
fi
echo "------------------------------------------------------"
cho "\033[32;1m开始导出ipa文件 \033[0m"
# 导出IPA包
xcodebuild -exportArchive \
-archivePath ${export_archive_path} \
-exportPath ${export_ipa_path} \
-exportOptionsPlist ${export_options_plist_path} \
-allowProvisioningUpdates
# 检查ipa文件是否存在
if [ -f "$export_ipa_path/$scheme_name.ipa" ] ; then
echo "\033[32;1m导出 ipa包成功,准备进行重命名\033[0m"
else
echo "\033[31;1m导出 ipa包失败 😢 😢 😢 \033[0m"
exit 1
fi
# 修改ipa文件名称
mv $export_ipa_path/$scheme_name.ipa $export_ipa_path/$ipa_name.ipa
# 检查文件是否存在
if [ -f "$export_ipa_path/$ipa_name.ipa" ] ; then
echo "\033[32;1m导出 ${ipa_name}.ipa 包成功 🎉 🎉 🎉 \033[0m"
open $export_path
else
echo "\033[31;1m导出 ${ipa_name}.ipa 包失败 😢 😢 😢 \033[0m"
exit 1
fi
# 输出打包总用时
echo "\033[32;1m打包总用时: ${SECONDS}s \033[0m"
# 上传AppStore (Xcode11之后命令)
xcrun altool --upload-app -f "$export_ipa_path/$scheme_name.ipa" -t ios --apiKey xxx --apiIssuer xxx --verbose
exit 0
上传AppStore (Xcode11之后命令)
一.查询并记录issuser和apiKey(密钥 ID)
登录appstoreconnect.apple.com/ 然后选择【用户与访问】--->【密钥】
查询信息:issuser和apiKey(密钥 ID)
二.下载公钥保存在本地
### 下载并存储私钥
1. 登录到[App Store Connect](https://appstoreconnect.apple.com/)。
2. 选择“用户和访问”,然后选择“ API密钥”选项卡。
3. 点击新API密钥旁边的“下载API密钥”链接。
设置好相关信息将密钥下载到本地
将下载好的xxxxxx.p8文件保存到需要放到一个固定目录下 './private_keys' 或者 '~/private_keys' 或者 '~/.private_keys' 都行,我这里选择/private_keys
创建目录: mkdir ~/private_keys
复制文件到此目录: cp /Users/mac/Downloads/AuthKey_XXXXXX.p8 ~/private_keys
Xcode14.3 打包错误以及解决方案 (2023-04-12)
错误提示截图
原因:因为Xcode 14.3现在在框架的符号链接中使用了相对路径、导致Cocoapods脚本处理失败,
要么等待Cocoapods1.12.0以上版本的发布,要不参照下面方法进行解决
工程中搜索截图的代码代码
全局搜索 source="$(readlink "${source}")"
最终替换 source="$(readlink -f "${source}")"