- 跨平台
- 移动开发
- 开发工具
【免费下载链接】WinObjC
Objective-C for Windows
本文以仓库根目录 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
使用桥梁前需满足两项硬性条件:
- Windows 10,内部版本号10586 或更高(即 Windows 10 1511 及以上),可在系统“关于”页验证版本号。
- 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 项:
- C# and Visual Basic
- Visual Studio SDK
- .NET Framework 4.6 targeting pack
- C++ Profiling Tools(C++ 性能分析工具)
并且必须在克隆仓库前安装Git LFS(仓库中二进制资产以 LFS 方式存储)。仓库根目录的 init.cmd(其内部调用 init.ps1)即用于初始化本仓库所需的工具链与目录结构。
快速开始:导入你的 Xcode 工程
官方推荐的首次上手路径是“现有 Xcode 工程 → Visual Studio 解决方案”,核心工具是vsimporter.exe。
三步导入流程
打开 Windows PowerShell(在开始菜单输入
powershell即可找到),用cd进入你的 Xcode 工程目录——注意必须是包含.workspace或.xcodeproj文件夹的那一层:C:\> cd C:\MyProject运行 vsimporter 工具,生成 Visual Studio 解决方案:
C:\MyProject> vsimporter.exe打开生成的解决方案:
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),是观察“导入前后工程形态”的最佳对照样本。
运行步骤
- 克隆本仓库(注意:需先按上文安装 Git LFS,且不要使用 GitHub 页面 “Clone or download” 的 Download ZIP 方式,见下文已知问题);
- 进入 SDK 的samples/WOCCatalog目录;
- 双击 WOCCatalog-WinStore10.sln在 Visual Studio 中打开解决方案;
- 在 Visual Studio 中右键点击 “WOCCatalog (Universal Windows)” 工程;
- 选择Set as StartUp project(设为启动项目);
- 按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,而是把它当作工程元数据的重要来源之一。
学习资源与文档导航
官方为上手提供了以下资源(均可在仓库对应目录找到本地实体):
- Wiki:文档与教程的汇总入口(包含快速入门教程、vsimporter 用法、FAQ、路线图、贡献指南等页面);
- Development Roadmap:按里程碑(milestone)展示的开发优先级与未来方向,仓库根目录的 GitVersion.yml 亦从版本分支角度记录了发布策略;
- Windows Dev Center 的 iOS 桥梁主页:提供评估用虚拟机镜像;
- Quick Start Challenge / Quick Start Tutorial:面向零基础的手把手上手教程;
- FAQ:常见问题与已知问题汇总;
- 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
相关推荐
AI-For-Beginners 课程入门与运行指南:从自学规划到 Notebook 执行环境搭建
AI For Beginners 课程入门与运行指南:从自学规划到 Notebook 执行环境搭建 AI For Beginners 是一套为期 12 周、包含
教程人工智能机器学习深度学习从单体到微服务:advanced-java 微服务架构迁移的三种渐进式策略详解
从单体到微服务:advanced java 微服务架构迁移的三种渐进式策略详解 本文基于本仓库 微服务架构 https://link.gitcode.com/i
跨平台移动开发开发工具深入解读 WinObjC(Windows Bridge for iOS)CoreFoundation 移植设计:Toll-Free Bridging 与源码级实现剖析
深入解读 WinObjC(Windows Bridge for iOS)CoreFoundation 移植设计:Toll Free Bridging 与源码级实
跨平台移动开发开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考