Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c3b64e8d0f | |||
| 7794c73a51 | |||
| 6ce67176da | |||
| 48e7efe92a |
@@ -109,8 +109,11 @@ jobs:
|
|||||||
|
|
||||||
- name: Compile (macOS System Extension app)
|
- name: Compile (macOS System Extension app)
|
||||||
env:
|
env:
|
||||||
MACOS_DEVELOPER_ID_CERT_P12_BASE64: ${{ secrets.MACOS_DEVELOPER_ID_CERT_P12_BASE64 }}
|
# 左=脚本期望的 env 名(勿改),右=实际密钥名。Apple 证书/公证密钥是
|
||||||
MACOS_DEVELOPER_ID_CERT_PASSWORD: ${{ secrets.MACOS_DEVELOPER_ID_CERT_PASSWORD }}
|
# 账号级、跨项目唯一 → 放【全局(用户级)密钥】用通用短名,pangolin/jiu 各自
|
||||||
|
# 在此映射到自己脚本的 env。Developer ID Application 证书=站外分发,一张签所有 app。
|
||||||
|
MACOS_DEVELOPER_ID_CERT_P12_BASE64: ${{ secrets.DEVELOPER_ID_P12 }}
|
||||||
|
MACOS_DEVELOPER_ID_CERT_PASSWORD: ${{ secrets.P12_PASSWORD }}
|
||||||
MACOS_APP_PROVISION_PROFILE_BASE64: ${{ secrets.MACOS_APP_PROVISION_PROFILE_BASE64 }}
|
MACOS_APP_PROVISION_PROFILE_BASE64: ${{ secrets.MACOS_APP_PROVISION_PROFILE_BASE64 }}
|
||||||
MACOS_SYSEXT_PROVISION_PROFILE_BASE64: ${{ secrets.MACOS_SYSEXT_PROVISION_PROFILE_BASE64 }}
|
MACOS_SYSEXT_PROVISION_PROFILE_BASE64: ${{ secrets.MACOS_SYSEXT_PROVISION_PROFILE_BASE64 }}
|
||||||
APPSTORE_API_KEY_ID: ${{ secrets.APPSTORE_API_KEY_ID }}
|
APPSTORE_API_KEY_ID: ${{ secrets.APPSTORE_API_KEY_ID }}
|
||||||
@@ -137,8 +140,10 @@ jobs:
|
|||||||
|
|
||||||
- name: Compile & upload to TestFlight (iOS)
|
- name: Compile & upload to TestFlight (iOS)
|
||||||
env:
|
env:
|
||||||
IOS_DIST_CERT_P12_BASE64: ${{ secrets.IOS_DIST_CERT_P12_BASE64 }}
|
# 证书=账号级 →【全局】通用短名(Apple Distribution 证书,签 iOS App Store/TestFlight);
|
||||||
IOS_DIST_CERT_PASSWORD: ${{ secrets.IOS_DIST_CERT_PASSWORD }}
|
# 描述文件=与 bundle id 绑定 →【项目级】pangolin 仓库密钥。
|
||||||
|
IOS_DIST_CERT_P12_BASE64: ${{ secrets.IOS_DIST_P12 }}
|
||||||
|
IOS_DIST_CERT_PASSWORD: ${{ secrets.IOS_DIST_PASSWORD }}
|
||||||
IOS_APP_PROVISIONING_PROFILE_BASE64: ${{ secrets.IOS_APP_PROVISIONING_PROFILE_BASE64 }}
|
IOS_APP_PROVISIONING_PROFILE_BASE64: ${{ secrets.IOS_APP_PROVISIONING_PROFILE_BASE64 }}
|
||||||
IOS_PACKETTUNNEL_PROVISIONING_PROFILE_BASE64: ${{ secrets.IOS_PACKETTUNNEL_PROVISIONING_PROFILE_BASE64 }}
|
IOS_PACKETTUNNEL_PROVISIONING_PROFILE_BASE64: ${{ secrets.IOS_PACKETTUNNEL_PROVISIONING_PROFILE_BASE64 }}
|
||||||
APPSTORE_API_KEY_ID: ${{ secrets.APPSTORE_API_KEY_ID }}
|
APPSTORE_API_KEY_ID: ${{ secrets.APPSTORE_API_KEY_ID }}
|
||||||
|
|||||||
@@ -8,8 +8,9 @@
|
|||||||
# 不需要重启/重新部署控制面。
|
# 不需要重启/重新部署控制面。
|
||||||
#
|
#
|
||||||
# download_urls 目前是固定「仅保留最新一份」的稳定 URL(deploy-client.sh 每次
|
# download_urls 目前是固定「仅保留最新一份」的稳定 URL(deploy-client.sh 每次
|
||||||
# 用同名文件覆盖),不是按版本变化的路径,因此这里不需要随发版改写;
|
# 用同名文件覆盖),不是按版本变化的路径,因此这里不需要随发版改写。
|
||||||
# macos / ios 产物尚未产出,先留空字符串。
|
# macos 自 client-v1.0.59 起由 build-macos 产出 pangolin-macos-x64.zip 并部署到
|
||||||
|
# /downloads,故填稳定直链;ios 走 TestFlight(无直接下载文件),保持留空。
|
||||||
version: "1.0.48"
|
version: "1.0.48"
|
||||||
build_number: 10048
|
build_number: 10048
|
||||||
force_update: false
|
force_update: false
|
||||||
@@ -17,6 +18,6 @@ release_notes: ""
|
|||||||
download_urls:
|
download_urls:
|
||||||
android: "https://api.yanmeiai.com/downloads/pangolin-android.apk"
|
android: "https://api.yanmeiai.com/downloads/pangolin-android.apk"
|
||||||
windows: "https://api.yanmeiai.com/downloads/pangolin-windows-x64-setup.exe"
|
windows: "https://api.yanmeiai.com/downloads/pangolin-windows-x64-setup.exe"
|
||||||
macos: ""
|
macos: "https://api.yanmeiai.com/downloads/pangolin-macos-x64.zip"
|
||||||
ios: ""
|
ios: ""
|
||||||
changelog: []
|
changelog: []
|
||||||
|
|||||||
@@ -223,8 +223,12 @@ PLIST
|
|||||||
|
|
||||||
echo "==> compile-macos: inside-out codesign (sysext -> frameworks -> app)"
|
echo "==> compile-macos: inside-out codesign (sysext -> frameworks -> app)"
|
||||||
xattr -cr "$APP"
|
xattr -cr "$APP"
|
||||||
cp "$SYSEXT_PROFILE" "${SE}/Contents/embedded.provisionprofile"
|
# 从 WORK 临时目录复制(不是 PROF_DIR):flutter build macos 期间 xcodebuild 会
|
||||||
cp "$APP_PROFILE" "${APP}/Contents/embedded.provisionprofile"
|
# 修剪 ~/Library/Developer/Xcode/UserData/Provisioning Profiles,把[3/7]构建前
|
||||||
|
# 装进去的 profile 清掉,构建后再从那目录 cp 会扑空(No such file → 本步失败)。
|
||||||
|
# WORK 是 mktemp 目录、xcodebuild 不碰,里面的原始 .provisionprofile 全程留存。
|
||||||
|
cp "${WORK}/sysext.provisionprofile" "${SE}/Contents/embedded.provisionprofile"
|
||||||
|
cp "${WORK}/app.provisionprofile" "${APP}/Contents/embedded.provisionprofile"
|
||||||
|
|
||||||
# sysext first — libbox is linked (not embedded) into the sysext binary
|
# sysext first — libbox is linked (not embedded) into the sysext binary
|
||||||
# itself (see CLAUDE.md), so signing the sysext bundle re-covers its statically
|
# itself (see CLAUDE.md), so signing the sysext bundle re-covers its statically
|
||||||
|
|||||||
@@ -6,12 +6,12 @@ import { SITE } from '../config/site';
|
|||||||
interface Props { t: T }
|
interface Props { t: T }
|
||||||
const { t } = Astro.props;
|
const { t } = Astro.props;
|
||||||
|
|
||||||
// href 缺省 = 本轮未接入下载(iOS / macOS / Linux),按钮渲染为禁用态占位。
|
// href 缺省 = 本轮未接入下载(iOS 走 TestFlight / Linux),按钮渲染为禁用态占位。
|
||||||
// Android + Windows 已由客户端 CI 产出真实产物并部署到 /downloads。
|
// Android + Windows + macOS 已由客户端 CI 产出真实产物并部署到 /downloads。
|
||||||
const plats: { icon: string; name: string; ver: string; href?: string }[] = [
|
const plats: { icon: string; name: string; ver: string; href?: string }[] = [
|
||||||
{ icon: 'smartphone', name: 'iOS', ver: 'iOS 16+' },
|
{ icon: 'smartphone', name: 'iOS', ver: 'iOS 16+' },
|
||||||
{ icon: 'smartphone', name: 'Android', ver: 'Android 9+', href: SITE.downloads.android },
|
{ icon: 'smartphone', name: 'Android', ver: 'Android 9+', href: SITE.downloads.android },
|
||||||
{ icon: 'laptop', name: 'macOS', ver: 'macOS 12+' },
|
{ icon: 'laptop', name: 'macOS', ver: 'macOS 12+', href: SITE.downloads.macos },
|
||||||
{ icon: 'monitor', name: 'Windows', ver: 'Win 10/11', href: SITE.downloads.windows },
|
{ icon: 'monitor', name: 'Windows', ver: 'Win 10/11', href: SITE.downloads.windows },
|
||||||
{ icon: 'terminal', name: 'Linux', ver: 'deb / rpm' },
|
{ icon: 'terminal', name: 'Linux', ver: 'deb / rpm' },
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -27,10 +27,12 @@ export const SITE = {
|
|||||||
* 客户端安装包直链。控制面 pangolin-server 通过 Cloudflare Tunnel 对外暴露
|
* 客户端安装包直链。控制面 pangolin-server 通过 Cloudflare Tunnel 对外暴露
|
||||||
* /downloads/<file>(origin = 127.0.0.1:8080),文件由
|
* /downloads/<file>(origin = 127.0.0.1:8080),文件由
|
||||||
* scripts/ci/deploy-client.sh 每次构建 scp 覆盖到 pangolin1:/var/lib/pangolin/downloads/,
|
* scripts/ci/deploy-client.sh 每次构建 scp 覆盖到 pangolin1:/var/lib/pangolin/downloads/,
|
||||||
* 每平台固定文件名、只保留最新一份。iOS / macOS / Linux 本轮未接入下载按钮。
|
* 每平台固定文件名、只保留最新一份。macOS 自 client-v1.0.59 起接入;
|
||||||
|
* iOS 走 TestFlight(无直接下载文件)、Linux 本轮未接入下载按钮。
|
||||||
*/
|
*/
|
||||||
downloads: {
|
downloads: {
|
||||||
android: 'https://api.yanmeiai.com/downloads/pangolin-android.apk',
|
android: 'https://api.yanmeiai.com/downloads/pangolin-android.apk',
|
||||||
windows: 'https://api.yanmeiai.com/downloads/pangolin-windows-x64-setup.exe',
|
windows: 'https://api.yanmeiai.com/downloads/pangolin-windows-x64-setup.exe',
|
||||||
|
macos: 'https://api.yanmeiai.com/downloads/pangolin-macos-x64.zip',
|
||||||
},
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|||||||
Reference in New Issue
Block a user