iOS 自动化打包脚本(Shell)

543 阅读3分钟

Xcode版本14.3

准备工作打包的配置文件(放在与Shell同一级目录)手动打包为例

截屏2023-04-12 17.07.45.png

自定义项目的相关参数

# 是否编译工作空间 (例:若是用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)

2496446-c0b94b158724b397.webp

二.下载公钥保存在本地

### 下载并存储私钥

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)

错误提示截图

error.png 原因:因为Xcode 14.3现在在框架的符号链接中使用了相对路径、导致Cocoapods脚本处理失败, 要么等待Cocoapods1.12.0以上版本的发布,要不参照下面方法进行解决 工程中搜索截图的代码代码

截屏2023-04-12 16.46.25.png

全局搜索 source="$(readlink "${source}")" 
最终替换 source="$(readlink -f "${source}")"