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 ...
随机推荐
- SQL查询表字段、字段说明、类型、长度、主键
SELECT 表名=d.name,case when a.colorder=1 then d.name else '' end, 字段序号=a.colorder, 字段名=a.name, 标识=ca ...
- 在birt中解决引用了不存在的绑定出现的问题
在birt中常出现这个错误,xxx引用了不存在的绑定. 当你选中整个表,然后在下方属性编辑器旁边的绑定中可以看到绑定的字段.不需要的就可以删掉.也可以进行编辑. 想对查出来的数据加条件.可以选中数据明 ...
- 【C#学习笔记】二、面向对象编程
2.1 抽象类与接口 1)概念 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类 ...
- 使用Scanner来解析文件
前面的流是全部流进来再处理,空间换取时间 我们用Scanner来解析文件,先处理再输入数据,时间换取空间 两种方法 Scanner scanner1=new Scanner(file1); for(; ...
- Qt 数据库创建表失败原因之数据库关键字
本人数据库新手,在创建表时出现问题,最后经查证,找出问题所在.下面的程序是部分节选,在创建数据库表的时候,起先使用的L24的CreateDB,经测试,一直输出 Create testResult Fa ...
- 托盘图标、气泡以及任务栏崩溃后的自动添加——Shell_NotifyIcon
托盘图标使用函数 Shell_NotifyIcon 创建.修改和删除,参数主要使用 NOTIFYICONDATA 结构. 任务栏启动时会给所有顶层窗口发送 TaskbarCreated 消息,由于不同 ...
- 学习OpenSeadragon之二 (界面缩放与平移规则设置)
OpenSeadragon入门了解请看第一篇:http://www.cnblogs.com/yingjiehit/p/4362377.html OpenSeadragon给我们提供了很多的可选界面元素 ...
- R2:获取一个event_base
原文链接:http://www.wangafu.net/~nickm/libevent-book/Ref2_eventbase.html 创建一个event_base 在你使用任何有意思的Libeve ...
- jquery mobile将页面内容当成弹框进行显示
注:必须使用相对应版本的jquery mobile css.不然无法正常显示 <div data-role="page" id="pageone"> ...
- windows编辑文本和unix编辑文本的回车符问题
我们的开发环境一般都使用windows操作系统,而测试环境和线上环境一般使用linux.windows下编辑的shell脚本,上传到windows下会发生错误.出现两种情况: 1.BOM头问题,前面有 ...