50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

在 Visual Studio 中将 Objective-C 编译为 C++

  • 2015-05-08
  • 本文字数:1138 字

    阅读完需:约 4 分钟

曾有人谣传微软 Windows 10 平台将支持运行 Android 程序,没有人会预料到 iOS 应用也将得到同样的支持。目前,微软正结合 C2 和 Clang 使之变为可能。

编译器支持

谷歌和苹果都使用 Clang 作为他们的 C++ 前端,微软将 Clang 与 Visual C++ 编译器的后端 C2 结合,以此来支持在 Windows 上运行 Android 和 iOS 程序。

苹果的 Objective-C 同样使用 Clang 作为前端,所以一旦 Clang 与 C2 整合完成,他们也将获得解析并编译 Objective-C 的能力。

IDE 支持

Visual Studio 中的 Objective-C 支持语法高亮、代码补全、和代码调试功能。C++ 和 C#文件可以被引入到相同的项目中,允许程序直接跨边界调用。编译器将处理所有封送工作,所以开发者只会看到普通的函数调用。

大多数 Objective-C 项目都以建立 XCode 项目开始,所以 Visual Studio 将支持导入 XCode 项目,VS 和 XCode 项目文件可在混合模式项目中共存,因此可以在两种 IDE 中同时开发这个项目。

混合模式项目

Windows 为 Objective-C 应用提供了新的 API,例如:动态磁贴。为了确保可以继续在平台间共享代码,微软允许你在调用 Windows API 前通过运行时检查它们是否可用。或者, 你可以使用预处理器指令显式地隔离平台特定代码与共享代码。

运行时行为

Windows 的 Objective-C 运行时默认通过检测应用原始平台来决定具体行为。举个例子:如果你移植某个 iPhone 应用,那么它将默认运行在一个小窗口中,而从 iPad 移植的应用将默认运行在常规大小的窗口中。

所有这样的行为可以在需要时被应用覆盖。

iOS API 兼容性

Windows 10 支持 iOS API 的一个“合理子集”,它不会对应于 iOS 的某个版本,而是通过查看指标来寻找最常用的 API。在第一个版本中,微软将关注以下 API:

  • 游戏:对 OpenGL、OpenAL 和传感器提供良好的支持
  • UI:UIKit、核心动画、核心图形、核心文字、触控
  • Objective-C:自动引用计数、代码块、Foundation 框架

对于像分享、消息提示、存储组件这样的功能,开发者需要选择是继续使用 iOS API,还是切换到 Windows 替代解决方案。如果你选择继续使用 iOS API,Windows 将提供一个兼容层来支持 API 正常运行;当然,微软更希望你使用他们提供的解决方案,这样你就可以访问高级 Windows 特性。

Swift

对于 Swift,微软官方的立场是“暂不评论”。而在私下交流中,他们透露出支持 Swift 的意愿,但由于要在秋天到来前忙于准备 Objective-C,以致于没有资源可以提供给 Swift。

查看英文原文: Compiling Objective-C into C++ with Visual Studio


感谢邵思华对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者)。

2015-05-08 02:433408
用户头像

发布了 63 篇内容, 共 136.8 次阅读, 收获喜欢 38 次。

关注

评论

发布
暂无评论
发现更多内容

python接口测试unittest使用详解

与风逐梦

Python 软件测试 接口测试

ShardingSphere 知识库更新 | 官方样例集助你快速上手

SphereEx

数据库 开源

【ShardingSphere技术专题】「ShardingJDBC」SpringBoot之整合ShardingJDBC实现分库分表(JavaConfig方式)

码界西柚

ShardingJDBC ShardingSphere ShardingSphere-Proxy 8月日更

结合scipy.linalg在Python中使用线性系统

华为云开发者联盟

Python 矩阵 Numpy 线性系统 向量

百度推出 “汽车机器人”,AI体验官金晨直呼“太豪横了”

百度开发者中心

产品 最佳实践 企业动态 Apollo 无人车

Redis主从握手流程,你真的了解了吗?

博文视点Broadview

神策 Android 全埋点插件介绍

神策技术社区

程序员 数据采集 埋点 行为数据

AI 场景的存储优化之路(二)

焱融科技

人工智能 云计算 AI 高性能 分布式存储

JVM调优(一)

彭阿三

神策分析 Android SDK 网络模块解析

神策技术社区

程序员 代码 信息 神策数据

引领异构时代,英特尔发布重大架构创新

科技新消息

神策分析 iOS SDK 代码埋点解析

神策技术社区

程序员 数据采集 埋点

imtoken钱包搭建,区块链去中心化钱包搭建

币安智能链智能合约DAPP开发|智能合约DAPP源码搭建

量化系统19942438797

dapp 币安智能链

Python对系统数据进行采集监控——psutil

Python研究者

8月日更

gopher成长之路(三):出差小记

非晓为骁

个人成长 蜕变

学完阿里P8推荐的实时流计算系统设计与实现PDF,终入淘宝

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

人类高质量 Java 学习路线【一条龙版】

程序员鱼皮

Java 数据库 后端 求职 编程学习

安装ApiPost-接口工具 发送HTTP请求

CodeNongXiaoW

大前端 测试 后端 接口测试 接口管理工具

MySQL 系列教程之(九)MySQL 必修:事务

若尘

MySQL 数据库 8月日更

谷歌高级架构师十年心血终成Kubernetes微服务实战文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

NDK 编译代码(一)

Changing Lin

8月日更

字节跳动《实时音视频通讯技术》学习笔记之服务器端开发入门

Regan Yue

git 字节跳动 Go 语言 8月日更

神策分析 iOS SDK 全埋点解析之启动与退出

神策技术社区

程序员 大前端 后端 代码 神策数据

手把手教你写 Gradle 插件 | 数据采集

神策技术社区

android 程序员 Gradle 神策数据

Docker

彭阿三

【Vue2.x 源码学习】第四十一篇 - 组件部分 - 生成组件的真实节点

Brave

源码 vue2 8月日更

解决参数依赖,接口之间传递数据——apipost

Proud lion

大前端 后端 Postman 开发工具 接口文档

全链路压测实践

超凡生

多种云资源管理用什么软件好?你知道吗?

行云管家

云计算 云服务 云资源

币安智能链智能合约DAPP开发

Geek_23f0c3

智能合约 DAPP智能合约交易系统开发 DAPP系统开发 币安智能链

在Visual Studio中将Objective-C编译为C++_Android/iOS_Jonathan Allen_InfoQ精选文章