三 Flavor(Shijiaobao / Clinical / Yiwangxin)iOS 项目
架构
- Shared/ 全部共用层:AppHomeView、WebMessageHandler(JSBridge)、DevUrlSettings
- *Flavor/ 各 flavor 入口:AppConfig、*App(@main)、AppDelegate(Yiwangxin 含 Push)
- project.yml + xcodegen 管理项目结构
SDK 集成
- 引用 Gitea SPM 包(branch: main,SNAPSHOT 开发模式)
- sdk.properties 追踪当前 SDK_REF,scripts/use-sdk.sh 支持 main/local/x.y.z 一键切换
- 含各 flavor xuqm/*.xuqmconfig 配置文件
JSBridge 协议
- window.webkit.messageHandlers.SZYX_APP.postMessage(json)
- 回调 window.SZYX_YWX_WebViewBridge.onMessage(json)
- 实现 setTitle/getDeviceInfo/login/setUserInfo/getAppVersion/checkUpdate
setStorage/getStorage/removeStorage/clearStorage/setOrientation/apiError
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
73 行
3.0 KiB
Bash
可执行文件
73 行
3.0 KiB
Bash
可执行文件
#!/usr/bin/env bash
|
||
# 切换 iOS SDK 引用方式,更新 sdk.properties 和 project.yml,然后重新生成 Xcode 项目
|
||
#
|
||
# 用法:
|
||
# ./scripts/use-sdk.sh main # SNAPSHOT: 使用 main 分支(最新代码)
|
||
# ./scripts/use-sdk.sh 1.0.2 # Release: 使用指定 tag
|
||
# ./scripts/use-sdk.sh local # 本地调试: 使用本地 SDK 源码路径
|
||
#
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||
GITEA_URL="https://xuqinmin.com/xuqmGroup/XuqmGroup-iOSSDK.git"
|
||
LOCAL_PATH="../../../XuqmGroup/XuqmGroup-iOSSDK"
|
||
|
||
usage() {
|
||
echo "Usage: $0 <main|local|x.y.z>"
|
||
echo " main — SNAPSHOT,引用 main 分支(开发期默认)"
|
||
echo " local — 本地 SDK 源码路径(SDK 开发调试,不要提交此状态)"
|
||
echo " x.y.z — 正式版本 tag(如 1.0.2)"
|
||
exit 1
|
||
}
|
||
|
||
[[ $# -eq 1 ]] || usage
|
||
REF="$1"
|
||
|
||
cd "$PROJECT_DIR"
|
||
|
||
# ── 更新 sdk.properties ───────────────────────────────────────────────────────
|
||
sed -i '' "s/^SDK_REF=.*/SDK_REF=${REF}/" sdk.properties
|
||
echo "[use-sdk] sdk.properties → SDK_REF=${REF}"
|
||
|
||
# ── 生成 project.yml 的包引用块 ───────────────────────────────────────────────
|
||
if [[ "$REF" == "local" ]]; then
|
||
PKG_BLOCK="packages:\n XuqmGroupSDK:\n path: ${LOCAL_PATH}"
|
||
echo "[use-sdk] 模式: 本地路径 (${LOCAL_PATH})"
|
||
elif [[ "$REF" == "main" ]]; then
|
||
PKG_BLOCK="packages:\n XuqmGroupSDK:\n url: ${GITEA_URL}\n branch: main"
|
||
echo "[use-sdk] 模式: SNAPSHOT (branch: main)"
|
||
else
|
||
PKG_BLOCK="packages:\n XuqmGroupSDK:\n url: ${GITEA_URL}\n from: \"${REF}\""
|
||
echo "[use-sdk] 模式: Release (from: ${REF})"
|
||
fi
|
||
|
||
# ── 替换 project.yml 中的 packages 块 ────────────────────────────────────────
|
||
# 用 Python 替换 packages: 到下一个顶层 key 之间的内容
|
||
python3 - "$PKG_BLOCK" <<'PYEOF'
|
||
import sys, re
|
||
|
||
pkg_block = sys.argv[1]
|
||
with open('project.yml', 'r') as f:
|
||
content = f.read()
|
||
|
||
# Replace from 'packages:' up to (but not including) the next top-level key
|
||
new_content = re.sub(
|
||
r'^packages:.*?(?=^\w)',
|
||
pkg_block.replace('\\n', '\n') + '\n\n',
|
||
content,
|
||
flags=re.MULTILINE | re.DOTALL
|
||
)
|
||
with open('project.yml', 'w') as f:
|
||
f.write(new_content)
|
||
print("[use-sdk] project.yml 已更新")
|
||
PYEOF
|
||
|
||
# ── 重新生成 Xcode 项目 ───────────────────────────────────────────────────────
|
||
if command -v xcodegen &>/dev/null; then
|
||
xcodegen generate
|
||
echo "[use-sdk] xcodegen generate 完成"
|
||
else
|
||
echo "[use-sdk] 警告: xcodegen 未安装,请手动运行 xcodegen generate"
|
||
fi
|