Windows Bridge for iOS: Let’s open this up
(原文翻译过来的,原文链接http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/)
这里我带大家深入了解一下Windows bridge for iOS(以前叫Project Islandwood)是什么、它如何使iOS开发者在Windows下使用他们现成的代码和功能以及我们决定将这个项目做成开源的原因。
正如Kevin Gallo所说,我们目前只是发布了一个简单版本,最后版本将会在今年秋天发布。这个开发工作还在进行中,我们在4月份的Build大会上展示的一些元素还没有准备好或者说还在初始阶段。目前的发布版本支持在x86和x64的Windows10和Windows8.1,到秋天的时候我们会将更多的功能发布出来。
对于那些刚刚加入我们的朋友来说,Windows bridge for iOS目的是让iOS开发者能够使用现成的OC代码和功能来创建Windows应用。为了实现这个目的,bridge包括4个部分:
Objective-C编译器:为了承载更多的功能,VS将包括一个懂得如何将OC代码编译成UWP应用的编译器。当前我们在GitHub上提供了这个编译器的早期版本,但是并不提供开源代码。这个编译器最终会在今年秋天更新到VS2015上面。
Objective-C runtime: 除了编译器,我们的OC runtime将给开发者提供一些语言特性,比如消息派发、代理授权以及自动引用计数。
iOS API头文件/库:依赖于OC API,我们提供大量的iOS API的兼容性。当你开始使用bridge并且发现某个API还不支持或者有提升空间的可能,我们欢迎你的贡献和评论
VS IDE集成:最后,我们提供工具,让开发者将他们的Xcode项目导入Windows开发者工具(VS2015)和SDK中。
在build大会上,我们操作了一下bridge,让开发者第一次见到bridge的神奇之处。现在,我很愿意向大家展示一下目前GitHub中发布的版本中拥有的新的特征。
为什么这个bridge不是一个端口?
我们的目标不是简单的让iOS应用运行在Windows平台上。相反,我们的目标是帮助开发者尽可能使用他们现成的代码和知识来创建好的Windows应用。我们当然会继续努力提升iOS的兼容性,但是更重要的是你可以利用bridge做更多的事情。
为了实现这个目的,有三个准则来决定这个bridge的结构和设计:
所有Windows API的接入:使得在OC代码中使用Windows API更容易
iOS兼容性:驱动开发者尽可能重复利用现成的iOS代码
没有沙箱:iOS和Windows API在一起工作
我们第一个准则尤其重要,这是因为Windows有很丰富的功能API集合,而且集合持续扩大和完善。如果当前发布的版本不支持你需要的特定的功能,我们不会让你在下次更新时感觉受阻,相反地,我们更愿意让你轻松地使用相应的Windows API并无缝集成到你的代码中。
第三个和第一个准则是相互的——如果API集合各自处于沙箱中,调用所有Windows API的能力会受到严重影响,这也会严重限制开发者使用OC创建好的Windows应用。让我们一起来近距离看看我们如何保证这些没有问题,无论是在代码级别还是UI级别。
当Windows和OC API相遇
正如Build大会上介绍的那样,这个bridge使用了一个定制的编译器(clang+cl)来编译OC源代码,生成的目标文件通过微软的链接器链接到一起。这个方法可以很好的让OC以及C++/CX更好的运行在一起。他们可以在一个项目中共存,并且使用C或者C++接口调用另外一种代码函数。
这个方法很有效,但是有点复杂。由于clang不能理解CX的扩展,而后者将被用来调用Windows API,那么为了你可以使用所有的UWP API集,你就需要创建.cpp文件,然后手动将OC和C++/CX连接起来。尽管这个可以很好的实现,但是我们相信我们可以做的更好,于是我们就想出了映射的概念。
对于那些不熟悉映射的开发者们来说,Miguel de lcaza在他的博客里面详细讲述了相关内容。简而言之,映射就是微软将一个Windows API映射到一个新的编程语言。我们采纳这种方式,并且成功让开发者可以从OC中直接使用Windows的API。目前,bridge已经可以使用一些API,我们的目标是拓展到全部的API。
作为一个例子,我们来测试一下如何在应用中异步使用一个浏览器。使用该bridge,你可以使用两种方法实现它:
选项1 (在C++/CX代码中使用)
auto uri = ref new Windows::Foundation::Uri("http://www.example.com");
concurrency::task<bool> launchUriOperation(Windows::System::Launcher::LaunchUriAsync(uri));
launchUriOperation.then([](bool success)
{
if (success)
{
// URI launched
}
else
{
// URI launch failed
}
});
选项2 (在OC代码中使用同一个API)
[WSLauncher launchUriAsync:[WFUri createUri:@“http://www.example.com/”] success:nil failure:nil];
(
OC
代码有可能提供处理异步调用成功或者失败的情况)
在这个例子中,我们不仅使用了多个类,比如 Windows::System(“Launcher”)和Windows::Foundation(“Uri”),而且我们传递了一个NSString类型的值,而映射系统神奇的将它当成HSTRING类型传递给下面的runtime。其他的如IVectors和IVectorViews会被分别当成NSMutableArrays和NSArrays,其他对于iterators, enumerators, maps的相似匹配会陆续发布。无论在UWP或者OC内,对象的生存时间通过开发者早已习惯的同一个自动引用计数语义来管理。
还有很多内容等待发布,我再重申一遍,还有许多功能正在开发。同时,看看我们在GitHub上提供的一些例子,从实际和细节中了解更多关于bridge的内容。
XAML和UIKit:最后还是在一起了
既然你可以在OC中调用Windows API,我们不想限制你使用API集合。对于iOS/UIKit元素来说,整个应用都使用XAML进行排版,而不是分别使用排版器。几乎在iOS应用的每一个View中都使用的CALayers会被绑定到相应的XAML元素。
所以假如你的应用想要播放一些视频,但是目前iOS bridge不支持MPMoviePlayerController。利用这个机制,你可以创建一个XAML MediaElement,打包进一个CALayer,然后打包这层进到一个视图中,并把这个视图放到你的其他UIView中。非常简单,而且你所有的动画和变化仍然可以对这个元素正常工作,就像对其他元素一样。
// WXCMediaElement is the Objective-C projection of // Windows::UI::Xaml::MediaElement WXCMediaElement *mediaElement = [WXCMediaElement create]; mediaElement.autoPlay = YES; CALayer *mediaElementLayer = [CALayer layer]; [mediaElementLayer setFrame:CGRectMake(10, 10, 320, 240)]; [mediaElementLayer setContentsElement: mediaElement]; mediaElement.source = [WFUri createUri: @"ms-appx:///myvideo.mp4"]; // Now we just add the layer to be part of a UIView [[containingView layer] addSublayer: mediaElementLayer];
我们长期的目标是在SDK中包含大多数常见类。我们欢迎开发者的贡献。同时,我们会让开发者更容易使用XAML控制,尤其在UIKit等效元素目前还不支持或者XAML控制在Windows环境下仍然显示比较“简单”的情况下。
展望
Bridge源代码已经放在了http://www.github.com/Microsoft/WinObjC/上。我们的旅程才刚刚开始。我们会和开发者一起提升iOS bridge,帮助iOS开发者将他们的代码导入UWP上。目前,我们分享了SDK的预览版,该预览版适用于x86和x64架构的Windows 10 和Windows 8.1平台。在这个夏天,我们会添加编译优化和对ARM(也就是对手机)的支持。
我们欢迎所有的反馈、建议、问题以及评论。如果你也想为这个项目出力,我们邀请你提交你的代码到GitHub上。你也可以通过以下多种方式找到我们开发团队:
Tweet @WindowsDev 并用#winobjc标记你的问题
在Stack Overflow上发布你的问题并打上winobjc标签
在IRC上访问#winobjc频道
我们期待你的参与,同时我们非常期待看到开发者创建的好的应用。
Windows Bridge for iOS: Let’s open this up的更多相关文章
- 最详细在Windows安装Xamarin.iOS教程
最详细在Windows安装Xamarin.iOS教程 来源:http://www.cnblogs.com/llyfe2006/articles/3098280.html 本文展示了如何设立Xamari ...
- Unity3D 4.3在Windows下打包iOS资源
想当年,想弄iOS的版本必须弄台mac机器,虽然一开始要弄iOS的时候觉得在mac上开发感觉挺高富帅的,但是做多了之后就觉得在mac上开发各种不方便.现在好了,Unity3D 4.3开始支持在Wind ...
- Windows下搭建IOS开发环境(一)
原文:http://blog.csdn.net/shangyuan21/article/details/18153605 我们都知道开发iPhone等ios平台的移动应用时需要使用Mac本,但是Mac ...
- Windows/Linux 生成iOS证书及p12文件
操作步骤 生成csr文件(通过OpenSSL命令) 生成mobileprovision文件(通过Apple开发者后台) 生成cer文件(通过Apple开发者后台) 生成P12文件(通过OpenSSL命 ...
- Windows环境下IOS APP打包上传AppStore详细流程
我们知道在上架苹果应用过程中,申请发布证书需要用到钥匙串,上传ipa需要用到xcode或Application loader提交构建版本,这都需要Mac苹果机. 本文介绍如何在Windows环境下申请 ...
- 在WINDOWS上开发IOS应用的方法
1,虚拟机上安装MAC系统,里面装XCODE 2,WINDOWS上安装code blocks,这个IDE可以直接在WIN上编译XCODE工程: 最新的IOS在windows环境下编译环境搭建记录
- 7步学会在Windows下上架iOS APP流程
之前用跨平台开发工具做了一个应用,平台可以同时生成安卓版和苹果版,想着也把这应用上架到App Store试试,于是找同学借了个苹果开发者账号,但没那么简单,还要用到Mac电脑的钥匙串申请发布证书和上传 ...
- Windows下生成IOS证书并发布APP安装到IPhone
目录: 一:生成证书 二:安装到IPhone 准备环境: 1.Appuploader(需要安装Java环境) 2.爱思助手 一.生成证书 1.1.打开appuploader后登陆开发者账号 1.2.点 ...
- Cheatsheet: 2015 08.01 ~ 08.31
Java Beginner's Guide to MVC with Spring Framework Exploring the Spring Web MVC for Web Application ...
随机推荐
- 【转】深入理解Java内存模型(六)——final
与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问.对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象 ...
- 武汉科技大学ACM:1010: 电话号码
Problem Description LXD打算换个手机号码,但是他去营业厅选号码的时候却把移动的客服小姐烦得不行,因为他太挑三捡四啦.对于一个手机号的后六位数字(前面五位他就无所谓了),LXD有很 ...
- [欢度国庆]为什么我们今天还要学习和使用C++?(转载)
在各种新的开发语言层出不穷的今天,在Java和C#大行其道今天,我们为什么还要学习和使用C++?现在学习C++将来有用吗?学习C++要花费那么多时间和精力,这一切都值得吗?现在学习C++有钱途吗? 这 ...
- html5中的一些小知识点(CSS)
1.点击a标签周围区域就可以进入超链接: a标签 的css样式中的 display属性设置为block 就可以了 2.文字左右居中: text-align 属性值为 center 3.文字上下居中: ...
- IE9的BUG?jQuery的BUG?
本文转载自http://big-student.iteye.com/blog/1898213 在IE9和IE10中,当对一个html的样式初始了一个很大的left或者top时,使用jQuery的off ...
- Thinkphp 框架基础
ThinkPHP 一.php框架介绍 真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项 ...
- Python自动化运维之3、函数、lambda、递归
一.函数 函数的基础概念: 函数是python为了代码最大程度地重用和最小化代码冗余而提供的基本结构 函数是一种设计工具,它能让程序员将复杂的系统分解为可管理的部件 函数用于将相关功能打包并参数化 在 ...
- 学习python的记录
今天买了本head first pyhton,目的用于更加方便的学习自动化,希望可以坚持下来,没看完一张,在博客园里做出笔记 环境:公司或家中的windows7 python3.6版本 书籍:hea ...
- 无线通信技术协议-Zigbee 3.0
物联网的无线通信技术有:短距离的无线局域网通信技术和长距离的无线广域网通信技术. 短距离局域网通信技术有Zigbee.Wi-Fi.Bluetooth.Z-wave.6LoWPAN等. 长距离广域网通信 ...
- 关于tcc、tlink的编译链接机制的研究
1.学习过程 在c:\下建立文件夹c,并将编译器tcc.exe.连接器tlink.exe.相关文件c0s.obj.cs.lib.emu.lib.maths.lib放入文件夹中. 要搭建一个简单的C语言 ...