☰
WinObjC(Windows Bridge for iOS)入门指南:环境搭建、Xcode 工程导入与 Sample 运行
2026/10/7 2:13:12 网站建设 项目流程
  • 跨平台
  • 移动开发
  • 开发工具

【免费下载链接】WinObjC

Objective-C for Windows

项目地址:https://gitcode.com/gh_mirrors/wi/WinObjC
点击查看免费下载

本文以仓库根目录 README.md 为主体骨架,结合 vsimporter 源码 与 WOCCatalog 示例工程 等仓库内容,系统讲解如何在 Windows 10 + Visual Studio 2017 环境下安装 WinObjC(Windows Bridge for iOS),把既有 Xcode 工程(.xcodeproj / .xcworkspace)导入为 UWP(Universal Windows Platform,通用 Windows 平台)解决方案,并通过构建与运行 SDK 自带的 WOCCatalog 示例掌握桥梁的完整工作流。读完本文,你将能够:① 按要求完成 Visual Studio 组件与 winobjc-tools 的安装;② 使用 vsimporter.exe 一键生成 Visual Studio 解决方案并理解其各命令行选项;③ 独立构建运行示例应用,并以此为模板评估自身工程的可移植性。

项目定位:Objective-C for Windows

WinObjC 是微软开源的“iOS 的 Windows 桥梁”(Windows Bridge for iOS)。它并非一个简单的代码翻译器,而是一整套面向 Visual Studio 的 Objective-C 开发环境 + iOS API 支持层:你可以在 Visual Studio 中直接编写/复用 Objective-C 代码与 iOS API,构建出能运行在大量 Windows 设备上的 UWP 应用,同时还能把 Windows 10 原生能力(如 Cortana、Windows Notifications)与既有 iOS 代码混合使用。

从仓库结构看,这一“支持层”的具体形态是一套完整的 iOS 框架源码与头文件,位于 Frameworks(实现)与 include(公开头文件与 modulemap)两大目录中,覆盖 UIKit、Foundation、CoreGraphics、CoreAnimation、AVFoundation、CoreLocation、Metal、MapKit 等数十个框架。其工程组织为:

  • Frameworks/:各框架的 Objective-C++(.mm / .cpp)实现源码;
  • include/ /:与实现一一对应的公开头文件及 modulemap;
  • tools/vsimporter/:核心导入工具 vsimporter 的 C++ 源码(tools/vsimporter/src/vsimporter.cpp);
  • samples/:可开箱运行的示例工程,其中 samples/WOCCatalog 是官方推荐的首个示例。

构建与发布状态

WinObjC 采用master(稳定)/ develop(预发布)双分支管理,对应的产物形态与发布渠道如下表(以仓库 README.md 记录为准):

交付物稳定版(master)预发布版(develop)
GitHub Release(源码包)✅ 提供—
winobjc-tools(Chocolatey 命令行工具)✅ 提供✅ 提供(带--pre安装)
WinObjC.Language(NuGet,语言工具链)✅ 提供✅ 提供
WinObjC.Frameworks(NuGet,框架二进制)✅ 提供✅ 提供

仓库根目录的 GitVersion.yml 印证了这一分支策略:master分支不携带预发布标签(tag 为空)、develop分支 tag 为dev、其余分支(如 PR)tag 为pr。因此,日常使用应优先选择 master 稳定版;若需体验最新特性,可切换到 develop 并安装对应的 pre 包。

环境要求与安装

基础环境:Windows 10 + Visual Studio 2017

使用桥梁前需满足两项硬性条件:

  1. Windows 10,内部版本号10586 或更高(即 Windows 10 1511 及以上),可在系统“关于”页验证版本号。
  2. Visual Studio 2017,且需勾选 Windows 开发者工具。Visual Studio 2017 Community 提供免费版本。

Visual Studio 2017 必需组件清单

安装 VS 2017 时,勾选Universal Windows Platform(UWP)开发工作负载可覆盖下列大部分组件,但官方明确要求逐个确认以下项目均已安装(部分为 UWP 负载之外的内容):

  • Visual Studio Core Editor(核心编辑器)
  • NuGet Package Manager(NuGet 包管理器)
  • C# and Visual Basic Roslyn compilers(C# / VB Roslyn 编译器)
  • Static analysis tools(静态分析工具)
  • Windows 10 SDK (10.0.14393.0)
  • Visual Studio C++ core features(C++ 核心功能)
  • VC++ 2017 v141 toolset (x86, x64)
  • Visual C++ compilers and libraries for ARM(ARM 编译器与库)
  • Visual C++ runtime for UWP(UWP 运行时)
  • Windows 10 SDK (10.0.10240.0)
  • Windows 10 SDK (10.0.10586.0)
  • MSBuild
  • Windows Universal CRT SDK
  • Standard Library Modules(标准库模块)
  • VC++ 2015.3 v140 toolset (x86,x64)
  • Windows Universal C Runtime

⚠️特别提示:除 UWP 工作负载外,官方还要求额外安装“使用 .NET 的移动开发”(Xamarin Tools)工作负载——这是因为 Nugetizer 存在缺陷(对应 NuGet/Home Issue 5026),缺少它会拖慢甚至阻塞 NuGet 相关构建步骤。

导入既有 Xcode 工程所需的额外工具

如果你要导入已有的 Xcode 工程,还需准备:

  • Chocolatey(Windows 包管理器),用于安装官方 CLI 工具;
  • winobjc-tools(vsimporter 等命令行工具的打包产物)。

在PowerShell(管理员)中执行以下命令安装/升级到最新稳定版:

choco upgrade winobjc-tools

若想使用 develop 预发布包,在命令后追加--pre:

choco upgrade winobjc-tools --pre

贡献者/从源码构建的高级安装

对需要从源码构建桥梁本身的贡献者,除了上面全部组件,还需在 Visual Studio 安装中补选以下 4 项:

  1. C# and Visual Basic
  2. Visual Studio SDK
  3. .NET Framework 4.6 targeting pack
  4. C++ Profiling Tools(C++ 性能分析工具)

并且必须在克隆仓库前安装Git LFS(仓库中二进制资产以 LFS 方式存储)。仓库根目录的 init.cmd(其内部调用 init.ps1)即用于初始化本仓库所需的工具链与目录结构。

快速开始:导入你的 Xcode 工程

官方推荐的首次上手路径是“现有 Xcode 工程 → Visual Studio 解决方案”,核心工具是vsimporter.exe。

三步导入流程

  1. 打开 Windows PowerShell(在开始菜单输入powershell即可找到),用cd进入你的 Xcode 工程目录——注意必须是包含.workspace或.xcodeproj文件夹的那一层:

    C:\> cd C:\MyProject
  2. 运行 vsimporter 工具,生成 Visual Studio 解决方案:

    C:\MyProject> vsimporter.exe
  3. 打开生成的解决方案:

    C:\MyProject> MyProject.sln

vsimporter 的实际执行逻辑(源码级解读)

直接运行vsimporter.exe之所以可行,是因为工具内置了当前目录自动探测逻辑。查看 tools/vsimporter/src/vsimporter.cpp 可以看到:当没有通过-project或-workspace显式指定工程时,工具会在当前目录递归查找*.xcodeproj与*.xcworkspace:

  • 若目录中恰好只有一个 workspace,则自动使用该 workspace;
  • 否则若恰好只有一个 project,则自动使用该 project;
  • 若同时存在多个工程或 workspace,工具会报错并提示你用-workspace/-project显式指定;
  • 若一个都没有,则直接报错 “The current directory does not contain a project or workspace.”。

这也是为什么步骤 1 要求进入包含.xcodeproj/.xcworkspace的目录——它是无参数运行的先决条件。

此外,从同一源文件可见几条与导入行为强相关的实现事实:

  • 输出格式固定:工具会设置全局变量VSIMPORTER_OUTPUT_FORMAT = "WinStore10"(vsimporter.cpp#L232-L233),即生成面向 Windows 10 商店应用的解决方案;
  • 架构固定为 msvc:ARCHS与CURRENT_ARCH被设置为msvc(vsimporter.cpp#L271-L274);
  • 工程/workspace 互斥:同时指定-project和-workspace会被拒绝;schemes 与 targets 也不能混用(vsimporter.cpp#L276-L283);
  • templates 校验:工具启动时会校验VSIMPORTER_TEMPLATES_DIR指向的 vsimporter 模板目录是否真实存在(checkTemplatesRoot,vsimporter.cpp#L32-L36),默认根据二进制所在位置推算,也可用-templates覆盖;
  • 交互模式:-interactive会设置VSIMPORTER_INTERACTIVE=YES,供模板生成过程按需询问(vsimporter.cpp#L298)。

vsimporter 完整命令行参考

除无参数用法外,vsimporter 还支持以下完整选项(依据 vsimporter.cpp#L42-L103 的 usage 输出整理,可用vsimporter.exe -help随时查看):

使用形式(Usage):

vsimporter.exe [-project projectname] [-target targetname ...] [-configuration configurationname] [-interactive] [setting=value ...] vsimporter.exe [-project projectname] -scheme schemename [-configuration configurationname] [-interactive] [setting=value ...] vsimporter.exe -workspace workspacename -scheme schemename [-configuration configurationname] [-interactive] [setting=value ...] vsimporter.exe -list [-project projectname | -workspace workspacename] vsimporter.exe [-genprojections] [-genpackaging[=0|1]]

Program Options(完整选项说明):

选项说明
-alltargets处理工程中的全部 target
-allschemes处理工程中的全部 scheme
-configuration NAME指定要使用的构建配置(如 Debug / Release)
-genpackaging=[0\|1]生成可打包解决方案的工程;默认开启(1),传-genpackaging=0可关闭
-genprojections生成 WinRT 投影(projections)工程
-help打印完整 usage 帮助信息
-interactive启用交互模式
-list列出工程/workspace 中的 target 与配置(不生成解决方案)
-loglevel LEVEL日志级别:debug/info/warning/error(默认warning)
-project PATH指定要处理的 .xcodeproj 工程
-scheme NAME指定要处理的 scheme
-target NAME指定要处理的 target(可重复指定多个)
-templates PATH指定 vsimporter-templates 目录(默认按二进制位置推算)
-usage打印简版 usage 信息
-version打印工具版本
-workspace PATH指定要处理的 .xcworkspace 工作区
-xcconfig FILE应用 FILE 中定义的构建设置作为覆盖项

另外还支持setting=value形式的全局设置覆盖(如ARCHS=x86),以及/?参数同样会打印完整帮助。

关于-loglevel的取值,源码 vsimporter.cpp#L236-L248 明确了合法值为debug、info、warning、error四档,传入其他值会直接报错退出。

构建与运行 SDK 示例:WOCCatalog

为什么从 WOCCatalog 开始

WOCCatalog(位于 samples/WOCCatalog)是官方推荐的首个示例:它演示了一批 iOS 与 XAML UI 控件的混用效果,几乎覆盖桥梁的主要能力面。从仓库中的源码文件可以看到其覆盖面之广:

  • UIKit 控件:Alerts、Controls、Gestures、SearchBar、Segments、Toolbars、Popover、Pickers、WebViewController 等(samples/WOCCatalog/WOCCatalog 下的各 ViewController);
  • 多框架调用:CoreLocation(CoreLocationViewController.mm)、CoreMotion(CoreMotionViewController.mm)、AudioToolbox(AudioToolboxViewController.mm)、Accelerate、GLKit/OpenGLES(GLKitExampleController.mm、OpenGLES20Controller.m);
  • XAML 混用:XamlViewController.m 展示了在 Objective-C 代码中嵌入 XAML 的能力;
  • XIB/Storyboard:XIBTest.storyboard、BezierViewController.xib 验证了 Interface Builder 资源的导入与加载。

WOCCatalog 同时自带 Xcode 工程(samples/WOCCatalog/WOCCatalog.xcodeproj)与经 vsimporter 生成后检入仓库的 VS 工程目录(samples/WOCCatalog/WOCCatalog.vsimporter),是观察“导入前后工程形态”的最佳对照样本。

运行步骤

  1. 克隆本仓库(注意:需先按上文安装 Git LFS,且不要使用 GitHub 页面 “Clone or download” 的 Download ZIP 方式,见下文已知问题);
  2. 进入 SDK 的samples/WOCCatalog目录;
  3. 双击 WOCCatalog-WinStore10.sln在 Visual Studio 中打开解决方案;
  4. 在 Visual Studio 中右键点击 “WOCCatalog (Universal Windows)” 工程;
  5. 选择Set as StartUp project(设为启动项目);
  6. 按Ctrl-F5构建并运行应用。

从 WOCCatalog-WinStore10.sln 可以看到该解决方案的构成:主工程指向WOCCatalog.vsimporter\WOCCatalog-WinStore10\WOCCatalog.vcxproj(即 vsimporter 生成物),并引用了仓库根common下的 NugetRestore.msbuildproj 负责 NuGet 还原;解决方案同时提供Debug/Release × Win32/ARM/Any CPU平台组合,其中 ARM 平台对应 UWP 在 ARM 设备上的部署(见 sln 中的Debug|ARM、Release|ARM配置)。

WOCCatalog 的工程信息面面观

该示例的 Info.plist 展示了桥梁工程对 plist 的利用方式:CFBundleIdentifier使用MSFT.$(PRODUCT_NAME:rfc1034identifier)形式,构建变量(如$(PRODUCT_NAME)、$(EXECUTABLE_NAME))在导入时被 vsimporter 展开替换;UILaunchStoryboardName(LaunchScreen)、UISupportedInterfaceOrientations等键则被用于生成 UWP 侧的启动与方向配置。也就是说,vsimporter 并不是简单地忽略 plist,而是把它当作工程元数据的重要来源之一。

学习资源与文档导航

官方为上手提供了以下资源(均可在仓库对应目录找到本地实体):

  1. Wiki:文档与教程的汇总入口(包含快速入门教程、vsimporter 用法、FAQ、路线图、贡献指南等页面);
  2. Development Roadmap:按里程碑(milestone)展示的开发优先级与未来方向,仓库根目录的 GitVersion.yml 亦从版本分支角度记录了发布策略;
  3. Windows Dev Center 的 iOS 桥梁主页:提供评估用虚拟机镜像;
  4. Quick Start Challenge / Quick Start Tutorial:面向零基础的手把手上手教程;
  5. FAQ:常见问题与已知问题汇总;
  6. iOS Bridge Samples 仓库(WinObjC-Samples):更多使用桥梁的示例应用与代码。

此外,仓库内的 docs 目录还提供了 Foundation、CoreFoundation、CoreGraphics、CoreText、UIKit、CoreAnimation、AddressBook 等框架的本地文档(含 Markdown 与 Word 文档),可作为深入某一框架实现细节的补充阅读材料。

贡献指南与沟通渠道

项目欢迎以多种方式参与贡献:

  • 提交 bug 与 issue,并帮助验证已合入的修复;
  • 审查源码变更;
  • 通过 pull request 提交 bug 修复或新功能实现;
  • 在社交平台关注项目动态,使用#WinObjC话题参与讨论;
  • 在 Stack Overflow 上提问并给问题打上 WinObjC 标签。

详细的贡献指引见 Wiki 的 How-to-Contribute 页面。本项目遵循Microsoft Open Source Code of Conduct(微软开源行为准则),相关疑问可向项目维护团队反馈。

已知问题与注意事项

官方明确列出的已知问题包括:

  • 不要使用仓库页面 “Clone or download” 按钮的 Download ZIP 选项:通过该方式下载的 zip 包无法构建桥梁本身。原因在于仓库使用了 Git LFS 与子模块等机制,只有完整克隆才能获得全部构建资产。若克隆后构建报错,可参考 FAQ 中对应条目排查;
  • 安装阶段需注意 Nugetizer 相关缺陷(见上文“特别提示”),务必安装 “Mobile development with .NET” 工作负载;
  • 从源码构建前必须安装 Git LFS(见“贡献者高级安装”);
  • 导入多工程目录时,vsimporter 会因无法自动判断而报错,需显式使用-project/-workspace指定(见 vsimporter 执行逻辑一节)。

小结:从“会导入”到“能诊断”

回顾整条上手链路:环境(Windows 10 + VS 2017 + 组件清单)→ 工具(Chocolatey + winobjc-tools)→ 导入(vsimporter 三步流程 + 命令行选项)→ 验证(WOCCatalog 构建运行)→ 排障(Known Issues)。在实操过程中,建议同时对照本文引用的仓库源码路径(尤其是 tools/vsimporter/src/vsimporter.cpp 与 samples/WOCCatalog 目录)进行阅读——理解 vsimporter 的自动探测、输出格式、架构与日志级别等实现细节后,遇到“目录中多工程”“scheme 与 target 混用”等报错时就能第一时间定位原因,而不再停留在“照着敲命令”的阶段。

  • 跨平台
  • 移动开发
  • 开发工具

【免费下载链接】WinObjC

Objective-C for Windows

项目地址:https://gitcode.com/gh_mirrors/wi/WinObjC
点击查看免费下载

相关推荐

上一篇:Convex 函数开发实战:从 query/mutation 基础写法到免登录会话(sessions)追踪方案
下一篇:TheHive:构建企业级安全事件协同响应平台的5大关键策略

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询