Windows 开发者使用支持

把 Windows 上的工程,接到 Mac 上继续做

大多数使用问题,都能沿着浏览器远程桌面与 SSH 两条路径自助排查。需要图形操作就进桌面,需要检查构建输出就用命令行;先确认连接,再处理工具链、签名与文件。

已经开通机器:登录后从实例详情取得连接信息。本文不提供通用主机地址或通用密码。

先连上,再配置

从实例详情进入工作环境

浏览器桌面不需要安装远程桌面客户端。Windows 的 SSH 则是备选入口:桌面显示异常时,也可以用它判断机器是否仍可连接。两种方式都以控制台当前显示的地址、端口和账户为准。

  1. 01

    确认实例状态

    登录控制台,找到已开通的订单与实例。核对机型、节点、到期时间和当前状态;支付完成但仍在开通时,先查看页面反馈,不要重复购买同一份配置。

  2. 02

    打开浏览器桌面

    在实例详情中使用远程桌面操作入口。等待 macOS 画面出现后,再点击桌面区域输入。不要把连接页面地址、密码或截图中的敏感信息转发给他人。

  3. 03

    核对基本操作

    依次测试鼠标点击、普通英文输入和窗口切换。打开访达确认文件可见,再打开终端检查工具链。中文输入不正常时,先区分本地输入法与远端输入源,不要直接重装系统。

  4. 04

    保留 SSH 备选

    在 Windows PowerShell 中运行下方命令,按提示输入实例详情提供的用户名、主机与端口。首次连接应核验主机指纹;密码输入不回显属于正常行为。

在 Windows PowerShell 中逐项输入连接参数。这里的变量从你自己的输入取得,不是可直接使用的连接凭据。

$MacUser = Read-Host "输入实例用户名"
$MacHost = Read-Host "输入实例主机"
$MacPort = Read-Host "输入 SSH 端口"
ssh -p $MacPort "$MacUser@$MacHost"

出现超时,先核对网络、主机与端口;出现认证失败,先核对用户名与认证方式。主机指纹发生变化时,先确认是否重装过系统,不要未经核实就删除旧记录。

保留可复现的输出

用一段归档记录确认执行到了哪一步

SSH 连通不等于工程已经配置完成。先检查 Xcode 路径和版本,再进入工程目录归档;上传步骤依赖你已配置好的 fastlane lane、签名材料与分发权限。

先读命令,再看最后一行

右侧为工作流示意,不是机器性能实测,也不代表任何项目都能原样运行。主机名称为示意名称;实际连接请使用上一节的交互命令。

App 是示例 scheme。先用工程自己的 workspace、project 和 scheme 替换对应参数,再执行归档。依赖尚未安装时,优先处理依赖错误。

fastlane beta 仅适用于已有 beta lane 的工程。看到归档成功后,再确认分发端的实际处理状态,不能把命令启动当成上传完成。

osxmesh — ssh
$ ssh developer@your-mac-host
$ xcode-select -p
/Applications/Xcode.app/Contents/Developer
$ xcodebuild -version
$ cd ~/Projects/App
$ xcodebuild -scheme App archive
** ARCHIVE SUCCEEDED **
$ fastlane beta
Successfully uploaded package to TestFlight

保留完整执行命令、首条错误与末尾错误摘要。只截取“构建失败”四个字,通常不足以定位问题。

工具链与签名

让 Xcode 识别工程需要的材料

macOS 图形界面与命令行完整可用。首次打开工程时,先检查工具链,再配置签名。系统中有哪些 Xcode 版本、当前选中了哪个版本,应以实例内实际检查结果为准。

检查版本与依赖

运行 xcodebuild -version 与 xcode-select -p。在 Xcode 的设置中核对命令行工具选择,确认工程所需 SDK 与目标系统范围。

如果工程使用 CocoaPods、Swift Package Manager 或其他依赖管理方式,先按项目说明恢复依赖。不要在报错后同时升级所有工具。

导入签名证书

通过受控传输方式把证书送到实例,在“钥匙串访问”中导入需要的证书与私钥。受密码保护的文件应通过不同渠道保管密码。

只有证书、没有对应私钥时,不能完成需要该身份的签名。不要将私钥、证书密码写进仓库、命令历史或公开工单附件。

匹配描述文件

导入项目需要的描述文件,检查 Bundle Identifier、团队标识、有效期和分发类型是否与目标一致,再核对各 target 的签名设置。

首次尝试建议在图形界面完成一次可复现归档。确认配置后,再把相同参数迁入脚本或 CI,减少图形界面与命令行配置差异。

先处理明确的配置缺口,再重试归档
报错或现象优先检查下一步操作
No signing certificate当前钥匙串是否包含所需签名身份,以及证书关联的私钥。重新核对导入材料与有效期;不要仅反复下载同一张证书。
No profiles for…描述文件的应用标识、团队与分发类型是否对应当前 target。导入匹配的描述文件,并检查工程的签名选择。
User interaction is not allowed执行构建的用户、钥匙串锁定状态,以及签名工具访问权限。在桌面中核对解锁与访问授权,再用相同用户重试。
SDK 或目标版本不匹配选中的 Xcode 路径、已安装 SDK 与工程部署目标。选择兼容工具链;升级前先核对项目依赖,不盲目覆盖环境。
工程进去,产物取回

让传输路径与构建目录保持明确

源码、签名材料和构建产物分开存放。先在远端创建工程目录,再传文件;取回 IPA 后核对文件大小与校验值,不要只凭文件名判断传输完成。

把工程送到云端 Mac

已有代码仓库时,在实例内按团队的认证方式拉取工程,不把访问令牌写入共享脚本。只有本地目录时,可用 Windows OpenSSH 的 scp,或支持 SFTP 的工具上传。

先在远端终端执行 mkdir -p ~/Projects。下方 PowerShell 命令沿用首次连接时输入的三个变量,并要求你输入本地工程路径。

$ProjectPath = Read-Host "输入本地工程目录"
scp -P $MacPort -r "$ProjectPath" "${MacUser}@${MacHost}:~/Projects/"

注意:ssh 指定端口用小写 -p,scp 用大写 -P。上传前确认目标目录,避免把旧依赖与新工程混在一起。

把 IPA 下载到 Windows

Archive 与导出的 IPA 不是同一个文件。先完成项目需要的导出流程,再在 macOS 终端中用 ls -lh 确认 IPA 的实际路径。

在下方命令中输入远端 IPA 的绝对路径,以及本地已存在的保存目录。路径包含空格时保留引号,下载完成后再检查文件。

$IpaPath = Read-Host "输入远端 IPA 绝对路径"
$SavePath = Read-Host "输入本地保存目录"
scp -P $MacPort "${MacUser}@${MacHost}:$IpaPath" "$SavePath"

需要校验时,在 Mac 上运行 shasum -a 256,在 Windows 上运行 Get-FileHash -Algorithm SHA256,对同一文件比较结果。

按现象逐项处理

先做不破坏环境的检查

先记录问题出现时正在做什么,再尝试可撤回的操作。黑屏、输入错位与空间不足不等于需要重装;重装会影响现有环境,不能当作第一步排查。

浏览器桌面黑屏或长时间没有画面

先确认实例处于可连接状态,再关闭旧连接标签,从实例详情重新进入。检查本地网络是否限制长连接;可以换一个网络或浏览器会话交叉确认。

若 SSH 可以连接,记录桌面异常但命令行正常这一事实;先保存正在执行的任务,不要连续触发重启。若两条路径都失败,附上实例状态、错误文字与发生时间提交工单。

键盘符号错位、快捷键没有作用

先点击远端可输入区域,切换到英文输入,测试字母、数字与标点。核对 macOS 输入源与 Windows 键盘布局;本地输入法拦截与远端布局错误需要分开判断。

Windows 与 macOS 的修饰键习惯不同,部分组合也会被本地浏览器截获。先使用应用菜单完成同一操作,再检查按键映射;不要在不确认焦点时输入密码。

归档报磁盘空间不足

在 macOS 终端运行 df -h,先确认哪个卷空间不足。检查旧 Archive、导出产物、模拟器数据与项目缓存;清理前先确认不再需要,不能把证书、源码或唯一备份当作缓存删除。

确实需要更多容量时,可查看 +1TB SSD 或 +2TB SSD 附加项。扩展是否已经挂载、挂载在哪里,以及工程是否使用了新增位置,都要在操作后确认;不能仅看到加购记录就假定当前卷已变大。

SSH 能到达主机,但认证失败

逐项核对实例用户名、端口与当前认证方式,确认没有复制额外空格。使用密钥时,核对指定的私钥文件及权限;不要把私钥内容贴到工单正文。

重装后连接信息可能变化,应重新查看实例详情。记录原始错误文字;认证失败与连接超时不是同一种故障,不要在工单中只写“SSH 不通”。

把环境保留到任务结束

续期看订单,重装先备份

节点全年 365 天正常运行,租用权限仍以订单周期为准。长任务启动前,先核对控制台显示的到期时间,不要等到最后一次构建开始后才处理续期。

查清到期时间

登录控制台,在订单或实例详情中核对当前租期与到期时间。跨时区工作时,按页面显示的时间和时区核对,不自行把到账时间当作到期时间。

源码、签名材料、环境配置和产物应有独立备份。不要把到期后的机器当成长期文件存储。

查看我的订单

选择后续周期

支持日、周、月、季四种计费周期,一律美元结算。先在控制台核对当前订单可用的续期操作与报价,再按任务长度选择。

支付仅支持 USDT-TRC20 与 Visa / Mastercard / Amex(经 Stripe),实际可用网关以后端接口返回为准。

核对全部价格

重装前列出备份

重装是重新准备环境,不是保留现有文件的修复操作。先停止构建,取回工程、证书与产物,再记录工具版本、依赖和启动脚本。

从实例详情检查当前可用的系统操作。确认目标实例与风险提示后再继续;执行后重新核对连接资料和工具链。

管理我的实例
把已检查的结果一起交接

一份能继续排查的工单

已下单的技术问题优先登录控制台提交工单,让问题关联到对应实例。售前、账单或无法登录的情况,可通过 support@osxmesh.com 联系;不要发送密码、私钥、完整卡号或证书口令。

  1. 01

    标明目标实例

    附上订单号或实例标识、机型和节点。节点目录为新加坡、东京、首尔、香港;机型为 Mesh M4 或 Mesh M4 Pro。不要只写“我的 Mac”。

  2. 02

    描述发生经过

    写明发生时间与时区、预期结果、实际结果,以及最近一次正常操作。附上可重复的最短步骤,区分一直失败与偶发失败。

  3. 03

    附上诊断材料

    连接问题附浏览器与系统版本、报错截图,以及 SSH 是否可用;构建问题附工具版本、执行命令与首条错误。截图与日志上传前先遮盖敏感信息。

让下一次排查从已有结果继续

把实例、现象与已试过的步骤放在同一条工单里。联系页说明售前、账单与技术问题分别需要准备什么。