iOS 应用开发登陆 Windows 平台惹争议

  • Jeff Martin
  • 谈浩

2015 年 8 月 15 日

话题:移动WindowsC++iOS语言 & 开发

现在,开发者可以在 Windows 10 上用 Visual Studio 2015 来开发 iOS 应用了。这项技术之前曾在微软内部的 Islandwood 项目中被提及过,现在官方公布了正式名称:Windows Bridge for iOS。这个项目基于 MIT 开源许可证书,通过 GitHub 开源代码。

代码

Windows Bridge for iOS 为使用 Visual Studio 的开发者提供了功能丰富的 Objective-C 开发环境,为了更好地支持种语言,它还包含了 iOS API 层。

当前,Windows Bridge 支持 x86 和 x64 硬件架构的 Windows 8.1 和 Windows 10 操作系统,而微软的 Kevin Gallo 则暗示将来会支持基于 ARM 的移动设备。此外,微软的项目群经理 Salmaan Ahmed 提供了一些关于 Windows Bridge 的细节,其中包括以下 4 个主要组件,Objective-C 编译器,Objective-C 运行环境,iOS API 头文件 / 库,还有和 Visual Studio 的集成的开发环境。

有趣的是,该项目在 GitHub 上包含了编译器二进制文件,却没有公开编译器的源代码。预计今年晚些时候,这个编译器的最终版本将被集成在 VS2015 的一项更新中一同发布。还有,这个编译器是基于 Clang——根据该项目在 GitHub 代码库的信息,应该是LLVM 3.6。目前从官方公布的信息来看,微软已经实现了让 Objective-C 和 C++/CX 代码在该项目中共存。

细心的读者会发现,上面列举的 4 个组件并未包括模拟器或者 iOS 运行环境。对此,Ahmed 解释说,在这个项目中,微软的目标是提供完整的 Windows API 调用,重用现有的 iOS 代码,并且使构建的应用能毫无限制地从这两套 API(iOS & Windows)中受益。至于说提供一个能够让 iOS 应用无需转换,便能在 Windows 上运行的模拟器(这种方案对 Android 应用是可行的),就不是该项目的目标了。

争议

在公开发布 Windows Bridge 项目之后,有几个开发者,包括Peter SteinbergerChristopher J.W. Lloyd,发现自己开源的代码被该项目引用,却没有保留原作者的署名。虽然这些疏忽已经被更正,但是这几位开发者却对自己开源的代码被微软以这样的形式使用而感到不快。提及此事,微软回应道:

“在最初的 Islandwood 预览版本里,漏掉了几位开源作者的署名,从开源社区得知后我们就立即进行了更正。非常感谢大家的反馈,我们对这样的疏忽深感抱歉。”

从该项目公开的源代码中,也暴露了某些潜在的安全问题,微软应该认真考虑如何应对由此带来的风险和危害。比如 Landon Fuller发现该项目用 rand() 这个缺少优化的函数来替代arc4random() 函数。 这样做会让开发者以为正在使用的是优化过的 arc4random() 函数,但其实不是。当被问及此事,微软的回答是:

此次首发预览版的目的,是期望能得到开源社区对该项目核心架构的反馈,为以后的发展构建稳定的基础。 迄今为止,我们收到的反馈如编译器集成和 Windows 的互操作等很有建设性。通过预览版的发布,让我们知道开源社区正积极地帮助我们发现自己技术和流程上的不足之处,而我们也积极的修复了这些不足,就像这次遗漏了署名信息事件一样。我们的团队备受开源社区对该项目的热情和建设性建议所鼓舞,Islandwood 预览版将会继续保持和开源社区的沟通,推动项目不断完善。

参考:Matt Thompson 曾写了个简要说明,解释为什么 arc4random() 是更好的选择(请看章节“Why Should I Use arc4random(3) instead of rand(3) or random(3)?”)

查看英文原文:iOS App Development Comes to Windows With Some Controversy


感谢张龙对本文的审校。

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

移动WindowsC++iOS语言 & 开发