Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
book-app
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
book-app
Commits
a437a915
提交
a437a915
authored
8月 10, 2026
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: 更新版本号至 1.2.0+10,并修改 iOS 发布脚本选项
上级
0eb942f3
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
82 行增加
和
17 行删除
+82
-17
pubspec.yaml
pubspec.yaml
+1
-1
ios_publish.sh
scripts/ios_publish.sh
+81
-16
没有找到文件。
pubspec.yaml
浏览文件 @
a437a915
...
@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
...
@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
# of the product and file versions while build-number is used as the build suffix.
version
:
1.
1.0+9
version
:
1.
2.0+10
environment
:
environment
:
sdk
:
'
>=3.0.0
<4.0.0'
sdk
:
'
>=3.0.0
<4.0.0'
...
...
scripts/ios_publish.sh
浏览文件 @
a437a915
...
@@ -5,8 +5,8 @@ set -euo pipefail
...
@@ -5,8 +5,8 @@ set -euo pipefail
#
#
# Default behavior:
# Default behavior:
# 1. Validate local release inputs.
# 1. Validate local release inputs.
# 2. R
un flutter pub get and pod install
.
# 2. R
euse a matching IPA already under build/ios/ipa/
.
# 3. Build an
App Store IPA
.
# 3. Build an
IPA only when no matching IPA exists
.
# 4. Upload the IPA and wait for App Store Connect processing.
# 4. Upload the IPA and wait for App Store Connect processing.
#
#
# Submit behavior:
# Submit behavior:
...
@@ -19,6 +19,7 @@ EXPORT_OPTIONS="$PROJECT_DIR/ios/ExportOptions.plist"
...
@@ -19,6 +19,7 @@ EXPORT_OPTIONS="$PROJECT_DIR/ios/ExportOptions.plist"
ASC_CONFIG
=
"
$PROJECT_DIR
/.asc/config.json"
ASC_CONFIG
=
"
$PROJECT_DIR
/.asc/config.json"
SUBMIT
=
false
SUBMIT
=
false
SKIP_BUILD
=
false
SKIP_BUILD
=
false
REBUILD
=
false
SUBMIT_ONLY
=
false
SUBMIT_ONLY
=
false
TIMEOUT
=
"45m"
TIMEOUT
=
"45m"
...
@@ -27,11 +28,13 @@ REVIEW_NOTES=$'App Review notes:\n\nIn-App Purchases can be found after logging
...
@@ -27,11 +28,13 @@ REVIEW_NOTES=$'App Review notes:\n\nIn-App Purchases can be found after logging
usage
()
{
usage
()
{
cat
<<
EOF
cat
<<
EOF
Usage:
Usage:
./scripts/ios_publish.sh [--submit] [--
skip-build
] [--submit-only] [--timeout 45m]
./scripts/ios_publish.sh [--submit] [--
rebuild] [--upload-only
] [--submit-only] [--timeout 45m]
Options:
Options:
--submit Submit the processed build for App Review after upload.
--submit Submit the processed build for App Review after upload.
--skip-build Reuse an existing IPA under build/ios/ipa/.
--rebuild Force a new IPA build, even if a matching IPA already exists.
--upload-only Reuse an existing matching IPA; never run Flutter or CocoaPods.
--skip-build Alias for --upload-only.
--submit-only Update App Review notes and submit an already uploaded build.
--submit-only Update App Review notes and submit an already uploaded build.
--timeout Upload/build processing timeout passed to asc. Default: 45m.
--timeout Upload/build processing timeout passed to asc. Default: 45m.
-h, --help Show this help.
-h, --help Show this help.
...
@@ -48,6 +51,14 @@ while [[ $# -gt 0 ]]; do
...
@@ -48,6 +51,14 @@ while [[ $# -gt 0 ]]; do
SKIP_BUILD
=
true
SKIP_BUILD
=
true
shift
shift
;;
;;
--upload-only
)
SKIP_BUILD
=
true
shift
;;
--rebuild
)
REBUILD
=
true
shift
;;
--submit-only
)
--submit-only
)
SUBMIT
=
true
SUBMIT
=
true
SUBMIT_ONLY
=
true
SUBMIT_ONLY
=
true
...
@@ -96,8 +107,6 @@ extract_json_id() {
...
@@ -96,8 +107,6 @@ extract_json_id() {
cd
"
$PROJECT_DIR
"
cd
"
$PROJECT_DIR
"
require_cmd flutter
require_cmd pod
require_cmd asc
require_cmd asc
require_cmd jq
require_cmd jq
...
@@ -133,14 +142,47 @@ echo " Version: $VERSION"
...
@@ -133,14 +142,47 @@ echo " Version: $VERSION"
echo
" Build:
$BUILD
"
echo
" Build:
$BUILD
"
echo
" Submit:
$SUBMIT
"
echo
" Submit:
$SUBMIT
"
echo
" Submit only:
$SUBMIT_ONLY
"
echo
" Submit only:
$SUBMIT_ONLY
"
echo
" Rebuild:
$REBUILD
"
echo
"========================================="
echo
"========================================="
echo
"[0/5] Checking App Store Connect auth..."
echo
"[0/5] Checking App Store Connect auth..."
asc doctor
>
/dev/null
asc doctor
>
/dev/null
if
[[
"
$SUBMIT_ONLY
"
==
true
]]
;
then
IPA_DIR
=
"
$PROJECT_DIR
/build/ios/ipa"
echo
"[1-4/5] Submit-only mode; skipping build and upload."
elif
[[
"
$SKIP_BUILD
"
!=
true
]]
;
then
find_matching_ipa
()
{
local
candidate entry info_plist ipa_version ipa_build
IPA_PATH
=
""
while
IFS
=
read
-r
candidate
;
do
entry
=
"
$(
unzip
-Z1
"
$candidate
"
|
grep
-E
'^Payload/[^/]+\.app/Info\.plist$'
|
head
-1
||
true
)
"
[[
-n
"
$entry
"
]]
||
continue
info_plist
=
"
$(
mktemp
"
${
TMPDIR
:-
/tmp
}
/ios-publish.XXXXXX"
)
"
if
!
unzip
-p
"
$candidate
"
"
$entry
"
>
"
$info_plist
"
2>/dev/null
;
then
rm
-f
"
$info_plist
"
continue
fi
ipa_version
=
"
$(
/usr/libexec/PlistBuddy
-c
'Print :CFBundleShortVersionString'
"
$info_plist
"
2>/dev/null
||
true
)
"
ipa_build
=
"
$(
/usr/libexec/PlistBuddy
-c
'Print :CFBundleVersion'
"
$info_plist
"
2>/dev/null
||
true
)
"
rm
-f
"
$info_plist
"
if
[[
"
$ipa_version
"
==
"
$VERSION
"
&&
"
$ipa_build
"
==
"
$BUILD
"
]]
;
then
if
[[
-n
"
$IPA_PATH
"
]]
;
then
echo
"Multiple matching IPAs found under
$IPA_DIR
:"
>
&2
echo
"
$IPA_PATH
"
>
&2
echo
"
$candidate
"
>
&2
exit
1
fi
IPA_PATH
=
"
$candidate
"
fi
done
< <
(
find
"
$IPA_DIR
"
-maxdepth
1
-name
'*.ipa'
-type
f
-print
|
sort
)
}
build_ipa
()
{
require_cmd flutter
require_cmd pod
echo
"[1/5] Installing Flutter dependencies..."
echo
"[1/5] Installing Flutter dependencies..."
flutter pub get
flutter pub get
...
@@ -150,18 +192,41 @@ elif [[ "$SKIP_BUILD" != true ]]; then
...
@@ -150,18 +192,41 @@ elif [[ "$SKIP_BUILD" != true ]]; then
echo
"[3/5] Building IPA..."
echo
"[3/5] Building IPA..."
flutter build ipa
--release
--build-name
=
"
$VERSION
"
--build-number
=
"
$BUILD
"
\
flutter build ipa
--release
--build-name
=
"
$VERSION
"
--build-number
=
"
$BUILD
"
\
--export-options-plist
=
"
$EXPORT_OPTIONS
"
--export-options-plist
=
"
$EXPORT_OPTIONS
"
}
if
[[
"
$SUBMIT_ONLY
"
==
true
]]
;
then
echo
"[1-4/5] Submit-only mode; skipping build and upload."
else
else
echo
"[1-3/5] Skipping build; reusing existing IPA."
if
[[
"
$REBUILD
"
==
true
&&
"
$SKIP_BUILD
"
==
true
]]
;
then
echo
"--rebuild and --upload-only cannot be used together."
>
&2
exit
2
fi
if
[[
"
$REBUILD
"
==
true
]]
;
then
build_ipa
else
find_matching_ipa
if
[[
-n
"
$IPA_PATH
"
]]
;
then
echo
"[1-3/5] Reusing matching IPA; skipping build:
$IPA_PATH
"
elif
[[
"
$SKIP_BUILD
"
==
true
]]
;
then
echo
"No IPA for
$VERSION
(
$BUILD
) found under
$IPA_DIR
."
>
&2
echo
"Build it first or omit --upload-only."
>
&2
exit
1
else
echo
"No matching IPA found; building
$VERSION
(
$BUILD
)."
build_ipa
fi
fi
fi
fi
if
[[
"
$SUBMIT_ONLY
"
!=
true
]]
;
then
if
[[
"
$SUBMIT_ONLY
"
!=
true
]]
;
then
mapfile
-t
IPA_FILES < <
(
find
"
$PROJECT_DIR
/build/ios/ipa"
-maxdepth
1
-name
'*.ipa'
-type
f
-print
|
sort
)
if
[[
-z
"
$IPA_PATH
"
]]
;
then
if
[[
"
${#
IPA_FILES
[@]
}
"
-ne
1
]]
;
then
find_matching_ipa
echo
"Expected exactly one IPA under build/ios/ipa, found
${#
IPA_FILES
[@]
}
:"
>
&2
fi
printf
' %s\n'
"
${
IPA_FILES
[@]
}
"
>
&2
if
[[
-z
"
$IPA_PATH
"
]]
;
then
echo
"No IPA for
$VERSION
(
$BUILD
) found under
$IPA_DIR
."
>
&2
exit
1
exit
1
fi
fi
IPA_PATH
=
"
${
IPA_FILES
[0]
}
"
echo
"IPA:
$IPA_PATH
"
echo
"IPA:
$IPA_PATH
"
echo
"[4/5] Uploading IPA and waiting for processing..."
echo
"[4/5] Uploading IPA and waiting for processing..."
...
@@ -171,7 +236,7 @@ if [[ "$SUBMIT_ONLY" != true ]]; then
...
@@ -171,7 +236,7 @@ if [[ "$SUBMIT_ONLY" != true ]]; then
--version
"
$VERSION
"
\
--version
"
$VERSION
"
\
--build-number
"
$BUILD
"
\
--build-number
"
$BUILD
"
\
--wait
\
--wait
\
--verify-timeout
5m
--verify-timeout
"
$TIMEOUT
"
fi
fi
if
[[
"
$SUBMIT
"
!=
true
]]
;
then
if
[[
"
$SUBMIT
"
!=
true
]]
;
then
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论