iOS自动化打包脚本

iOS自动化打包脚本

闲来无事学习一下shell

打包xcframework

  • 由于xcode13的模拟器也包含arm64架构,移除模拟器arm64架构,build Setting=>Excluded Architectures=>勾选Any ios simulator sdk 添加arm64 也可在脚本中设置-arch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/bin/bash
set -e
set -u
set -o pipefail

SCHEME_NAME=sdk
WORKSPACE_NAME=sdk
#打包环境
CONFIGURATION=Release

#cd到脚本绝对路径下
ROOT_PATH=$(cd "$(dirname "${BASH_SOURCE[0]}")"; pwd)
#输出路径
EXPORT_PATH=${ROOT_PATH}/archive


#chech scheme
xcodebuild -list || exit 0

#clean
function arch_clean {
xcodebuild clean \
-workspace ${WORKSPACE_NAME}.xcworkspace \
-scheme ${SCHEME_NAME} \
-configuration ${CONFIGURATION}
}

#下面iphonesimulator15.5 可根据 xcodebuild -showsdks查看
# #打包模拟器
function archive_simulator {
xcodebuild archive \
-workspace ${WORKSPACE_NAME}.xcworkspace \
-scheme ${SCHEME_NAME} \
-destination="iOS Simulator" \
-sdk iphonesimulator15.5 \
-configuration ${CONFIGURATION} \
SKIP_INSTALL=NO \
BUILD_LIBRARIES_FOR_DISTRIBUTION=YES \
-archivePath ${EXPORT_PATH}/ios_simulator.xcarchive
}

function archive_iosDevice {
xcodebuild archive \
-workspace ${WORKSPACE_NAME}.xcworkspace \
-scheme ${SCHEME_NAME} \
-sdk iphoneos \
-destination="iOS" \
-configuration ${CONFIGURATION} \
SKIP_INSTALL=NO \
BUILD_LIBRARIES_FOR_DISTRIBUTION=YES \
-archivePath ${EXPORT_PATH}/ios_device.xcarchive
}

# #创建xcframework
function create_xcframework {
xcodebuild -create-xcframework \
-framework ${EXPORT_PATH}/ios_device.xcarchive/Products/Library/Frameworks/${SCHEME_NAME}.framework \
-framework ${EXPORT_PATH}/ios_simulator.xcarchive/Products/Library/Frameworks/${SCHEME_NAME}.framework \
-output ${EXPORT_PATH}/${SCHEME_NAME}.xcframework
}


arch_clean || exit 0
archive_simulator || exit 0

if [[ -e ${EXPORT_PATH}/ios_simulator.xcarchive ]] ;then
echo -e "\033[1135m🍺🍺🍺🍺🍺🍺xcarchive ios_simulator success!🍺🍺🍺🍺🍺🍺 \033[0m"
else
echo -e "\033[1135m❌❌❌❌❌❌xcarchive ios_simulator fail!❌❌❌❌❌❌ \033[0m"
fi

archive_iosDevice || exit 0

if [[ -e ${EXPORT_PATH}/ios_device.xcarchive ]] ;then
echo -e "\033[1135m🍺🍺🍺🍺🍺🍺xcarchiveios_device success!🍺🍺🍺🍺🍺🍺 \033[0m"
else
echo -e "\033[1135m❌❌❌❌❌❌xcarchive ios_device fail!❌❌❌❌❌❌ \033[0m"
fi

cd ${EXPORT_PATH}
create_xcframework || exit 0
if [[ -e ${EXPORT_PATH}/${SCHEME_NAME}.xcframework ]] ;then
echo -e "\033[1135m🍺🍺🍺🍺🍺🍺create ${SCHEME_NAME}.xcframework success!🍺🍺🍺🍺🍺🍺 \033[0m"
else
echo -e "\033[1135m❌❌❌❌❌❌create ${SCHEME_NAME}.xcframework fail!❌❌❌❌❌❌ \033[0m"
fi

open .

打包ipa

把shell脚本和ExportOptions.plist一起放在根目录下,下面例子中ExportOptions.plist为ad-hoc模式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/bin/bash
set -e
set -u
set -o pipefail

SCHEME_NAME=SdkApp
WORKSPACE_NAME=sdk
#打包环境
CONFIGURATION=Release
#cd到脚本绝对路径下
ROOT_PATH=$(cd "$(dirname "${BASH_SOURCE[0]}")"; pwd)
#输出路径
EXPORT_PATH=${ROOT_PATH}/archive
EXPORT_IPA_PATH=${EXPORT_PATH}/ipa

#chech scheme
xcodebuild -list || exit 0

#clean
function arch_clean {
xcodebuild clean \
-workspace ${WORKSPACE_NAME}.xcworkspace \
-scheme ${SCHEME_NAME} \
-configuration ${CONFIGURATION}
}

#编译
function archive {
xcodebuild archive \
-workspace ${WORKSPACE_NAME}.xcworkspace \
-scheme ${SCHEME_NAME} \
-configuration ${CONFIGURATION} \
-archivePath ${EXPORT_PATH}/${SCHEME_NAME}.xcarchive
}

#打包导出
function arch_export {
xcodebuild -exportArchive \
-archivePath ${EXPORT_PATH}/${SCHEME_NAME}.xcarchive \
-exportPath ${EXPORT_IPA_PATH} \
-exportOptionsPlist ${ROOT_PATH}/ExportOptions.plist
}


arch_clean || exit 0
archive || exit 0

if [[ -e ${EXPORT_PATH}/${SCHEME_NAME}.xcarchive ]] ;then
echo -e "\033[1;35m🍺🍺🍺🍺🍺xcarchive success!🍺🍺 \033[0m"
else
echo -e "\033[1;35m❌❌ fail ❌❌❌❌\033[0m"
fi

arch_export || exit 0

if [[ -e ${EXPORT_IPA_PATH}/${SCHEME_NAME}.ipa ]] ;then
echo -e "\033[1;35m🍺🍺🍺🍺🍺xcarchive success!🍺🍺 \033[0m"
else
echo -e "\033[1;35m❌❌ fail ❌❌❌❌\033[0m"
fi

open ${EXPORT_IPA_PATH}

ExportOptions.plist 文件<可手动打包一次后,生成>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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>destination</key>
<string>export</string>
<key>method</key>
<string>ad-hoc</string>
<key>signingStyle</key>
<string>automatic</string>
<key>stripSwiftSymbols</key>
<true/>
<key>thinning</key>
<string>&lt;none&gt;</string>
</dict>
</plist>

iOS自动化打包脚本
http://example.com/2025/03/07/iOS自动化打包脚本/
作者
FIRF27
发布于
2025年3月7日
许可协议