iOS项目生成通用Windows应用
WinObjc - 使用iOS项目生成通用Windows应用
Github上一周年的WinObjc项目最近发布了预览版本,终于等到了这一天。WinObjc项目就是Build 2015大会上微软宣布的Project IslandWood项目,致力于将iOS应用快速移植成UWP应用。废话不多说,让我们来看看WinObjc项目到底如何使用。
开始之前
开始转制iOS项目前我们要先部署好WinObjc工具,工具链如下:
- 一台安装了Visual Studio的Windows 10 PC,2015社区版可以直接下载:免费下载
 - 安装转制iOS应用的WinObjc Bridge工具,直接下载:Github
 - 准备一些可以使用的iOS项目,github上有不少开源项目
 
注意:确定你已经安装了Windows 10 SDK, 不然无法生成使用UWP项目。
此外,还可以直接使用微软已经配置好的评估版Windows 10开发环境虚机。虚机里已经配置好了最新的满足需求的开发环境,方便你快速在Mac或PC上使用评估最新工具。针对不同虚机的下载地址如下:
- VMware https://aka.ms/windev_vm_vmware
 - Hyper-V https://aka.ms/windev_VM_hyperv
 - VirtualBox https://aka.ms/windev_VM_virtualbox
 - Parallels https://aka.ms/windev_VM_parallels
 
使用方法
在将下载后的Winobjc.zip文件解压到本地文件中后,我们就有了可以直接使用的iOS Bridge工具了。这里我使用的是iOS著名HUD框架MBProgressHUD的示例项目做测试,下载地址如下:https://github.com/jdg/MBProgressHUD
其中我们主要使用vsimporter工具,使用步骤如下:
- 打开命令行,并定位到iOS项目所在的目录中。 cd C:\Users\changwei\Desktop\iOS\MBProgressHUD-master\Demo
 - 从命令行中运行vsimporter工具。 C:\Users\changwei\Desktop\winobjc\bin\vsimporter.exe
 - vsiimporter自动排除了目前还不支持的测试项目和tvOS项目,生成了一个UWP项目,结果如下:
 

4.可以看到已经生成了sln解决方案文件,直接打开即可

5.Winobjc文件夹bin目录下有个Objective-C语言高亮插件objc-syntax-highlighting.vsix,大家别忘了安装哦。当前解决方案sln文件双击打开后就是一个标准的UWP项目,直接Ctrl+F5运行此项目。

第一次编译生成要较长时间,然而最蛋疼的是编译失败了,拜拜(果然还是大坑)。

之后又尝试了很多iOS项目包括Apple开发者中心下载的一些示例项目。大部分都会编译错误,少部分能运行的很多UI界面和功能都不对,目前除了官方自带的Winojc示例项目外还没有能正常运行的。
我们来看看官方能运行的示例项目实际运行效果是什么样子的,如下:
    
列表视图 UITableView

集合视图 UICollectionView

图片视图 UIImageView
我试着写入了一段Objective-C代码到项目中,会在当前窗口添加一个橘黄色的视图,如下:
UIView *testView = [[UIView alloc] initWithFrame:CGRectMake(0,0,200,200)];
testView.backgroundColor = [UIColor orangeColor];
[self.view addSubview:testView];
编译运行后,确实执行也没有问题,功能也是正常运行的,如下:

总结
Winobjc项目看着很美,但目前还是一张不堪使用的大饼。搞了一年,总归比开始进步多了,重写支持了大多数的iOS基础库,UIKit之类的基本framework完成度都挺高的,AutoLayout、Storyboard和XIB也都支持了,但是未来还有很长的路要走。目前大家还是可以尝尝鲜的,其实在我看来与其照搬重写iOS framework,倒不如开发一套支持Objective-C的Windows开发框架,想比也比现在好多了,不至于被iOS牵着鼻子,问题不断。
iOS项目生成通用Windows应用的更多相关文章
- WinObjc - 使用iOS项目生成通用Windows应用
		
Github上一周年的WinObjc项目最近发布了预览版本,终于等到了这一天.WinObjc项目就是Build 2015大会上微软宣布的Project IslandWood项目,致力于将iOS应用快速 ...
 - ios项目生成ipa文件方法
		
做这些的前提是你配置好了所有的证书,如果还没先去配置证书吧. 1.打开需要生成ipa的ios项目.2.在运行按钮的后面选择ios Device3.点击Product 按钮,选择第五个Archive4. ...
 - 使用 Visual Studio 生成通用的 XAML 应用程序 (Windows Phone 和 Windows 通用程序)
		
在Build会议上,我们发布了新的版本---Windows Phone 8.1. Windows 8.1 平台.作为开发人员,这意味着您现在可以生成 XAML 和 HTML 的通用程序,并通过分享大量 ...
 - Mac下安装ionic和cordova,并生成iOS项目
		
为了开发HTML5,除了最新使用React Native等之外,目前首选的为稳定的ionic+Angularjs来开发iOS和android. Ionic(ionicframework一款接近原生的H ...
 - 解决VS2008 开发Windows Mobile 项目生成速度慢的问题(转)
		
最近用VS2008开发Windows Mobile程序,使用C#..NET Compact Framework,发现项目生成速度比较慢.用VS2008打开项目后,开始一段时间生成速度还能忍受,时间一长 ...
 - 解决VS2008 开发Windows Mobile 项目生成速度慢的问题
		
最近用VS2008开发Windows Mobile程序,使用C#..NET Compact Framework,发现项目生成速度比较慢.用VS2008打开项目后,开始一段时间生成速度还能忍受,时间一长 ...
 - [转]解决VS2008 开发Windows Mobile 项目生成速度慢的问题
		
最近用VS2008开发Windows Mobile程序,使用C#..NET Compact Framework,发现项目生成速度比较慢.用VS2008打开项目后,开始一段时间生成速度还能忍受,时间一长 ...
 - Java项目生成可执行jar包、exe文件以及在Windows下的安装文件
		
1.如何通过eclipse将Java项目生成可执行jar包 首先把在eclipse下的java项目导出jar file 下一步 下一步 下一步 最后点击完成,便生成了可执行的jar文件.可以在刚刚选择 ...
 - MAUI与Blazor共享一套UI,媲美Flutter,实现Windows、macOS、Android、iOS、Web通用UI
		
1. 前言 距离上次发<MAUI初体验:爽>一文已经过去2个月了,本计划是下半年或者明年再研究MAUI的,现在计划提前啦,因为我觉得MAUI Blazor挺有意思的:在Android.iO ...
 
随机推荐
- [转]MySQL 5.6 全局事务 ID(GTID)实现原理(一)
			
原文作者:淘长源 原文连接:http://qing.blog.sina.com.cn/1757661907/68c3cad333002qhe.html 转载注明以上信息 MySQL 5.6 的新特 ...
 - 转:nginx location匹配规则
			
location匹配命令 ~ #波浪线表示执行一个正则匹配,区分大小写~* #表示执行一个正则匹配,不区分大小写^~ #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配 ...
 - 用lsb_release  -a 查看linux版本
			
1.要通过yum 安装上这个命令的软件包 yum -y install redhat-lsb 2.lsb_release -a 查看linux版本信息
 - Window 点击“X”关闭之后无法show
			
将Window的属性closeAction设置为hide就可以了. var panel1 = Ext.create('Ext.panel.Panel', { title: 'this is panel ...
 - Android 中常用代码片段
			
一:AsyncTask 的使用 (1)activity_main.xml <TextView android:id="@+id/tvInfo" android:layout_ ...
 - windbg命令详解
			
DLL 该扩展仅在内核模式下使用,即使它是在Ext.dll中的. Windows NT 4.0 Ext.dll Windows 2000 Ext.dll Windows XP和之后 Ext.dll ...
 - redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
			
超时 Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: jav ...
 - SDL显示内存中的图像
			
<textarea readonly="readonly" name="code" class="c++"> #include ...
 - poj 1020 Anniversary Cake(切正方形蛋糕+搜索)
			
...
 - HINTERNET 句柄
			
这篇文章的内容能够简单总结例如以下: WinINet函数创建和使用类型为HINTERNET的句柄 HINTERNET句柄不能与其它类型的句柄互换使用 用InternetCloseHandle关闭HIN ...