你的位置:首页 > 操作系统

[操作系统]MacOS中使用QT开发iOS应用


因为项目合同中规定一部分业务内容要在手机端实现,包括安卓机和苹果机,因此选择了QT作为开发工具。程序在Win10和安卓系统上已经完美运行,这几天开始搭建iOS的编译和发布环境,因为以前没有使用过macOS,不熟悉,这一路下来可是一步一个坑😭应了最近的网络流行语,蓝瘦,香菇。
好了,步入正题,填坑过程记录如下
开发环境
物理机:Windows Server 2012
虚拟机:VMware® Workstation 12 Pro 12.5.0 build-4352439
MacOS 10.12
QT 5.7 
 

Xcode 8.1

1、物理机上还开着微软的虚拟机Hyper-V,在VMware中创建新的虚拟机的时候会报错。首先关掉所有的Hyper-V相关服务,然后卸载Hyper-V就可以正常使用VMware了。
安装过程可以参考:
http://www.th7.cn/Program/IOS/201407/231980.shtml

2、在VMware中安装好macOS,从应用商店中安装xCode,一开始用的10.9的系统,下载时提示升级系统,于是安装了最新的MacOS,当然也可以从网上下载低版本的xCode。
3、QT5.7从QT官方网站下载安装,安装完毕之后启动QT项目,编译时提示如下错误
error: Xcode not set up properly. You may need to confirm the license agreement by running /usr/bin/xcodebuild.
解决办法:
http://blog.csdn.net/l241002209/article/details/52891070?locationNum=2&fps=1
4、从xCode7开始可以免证书真机调试,无需开发者账号,配置过程参考下面的文章,在这个过程中,要保证手机一直插在电脑上。
http://www.jianshu.com/p/62c5393022ca
5、我在虚拟机的macOS系统中始终找不到苹果手机,参考下面的文章将USB兼容性改为了“USB 2.0”,从而解决了这个问题
http://blog.csdn.net/yagerfgcs/article/details/51406741
6、继续编译QT代码,又提示如下错误:
Project ERROR:Current iphoneos SDK version(10.1) is too old. Please upgrade Xcode.

按照这片文章(http://blog.csdn.net/willib/article/details/52829317)删除文件(Qt_install_folder/5.7/ios/mkspecs/macx-ios-clang/features/sdk.prf)的两行代码

  1. lessThan(QMAKE_MAC_SDK_VERSION, "8.0"): \  
  2. error("Current ##QMAKE_MAC_SDK SDK version (##QMAKE_MAC_SDK_VERSION) is too old. Please upgrade Xcode.") 

7、QT代码生成iOS应用,首先是编译QT源代码,生成xCode工程,然后直接运行这个xCode工程,部署到苹果手机或者虚拟设备就可以了。
http://blog.csdn.net/wsj18808050/article/details/42298409
8、紧接着使用xCode编译时又遇到了下面的问题:
=== BUILD TARGET farmer OF PROJECT farmer WITH CONFIGURATION Debug ===

Check dependencies

Signing for "farmer" requires a development team. Select a development team in the project editor.
Code signing is required for product type 'Application' in SDK 'iOS 10.1'
** BUILD FAILED **

The following build commands failed:

Check dependencies
(1 failure)
make: *** [xcodebuild-debug-iphoneos] Error 65
16:42:06: 进程"/usr/bin/make"退出,退出代码 2 。
Error while building/deploying project farmer (kit: iphoneos-clang Qt 5.7.0 for iOS)
When executing step "Make"
16:42:06: Elapsed time: 00:24.


这是我因为我没有把iPhone6S插到电脑上的缘故。
9、又发现我的源代码在QT中就直接报错了,这时候我已经有砸掉电脑的冲动了
Arguments: -nonrelocatable QtQuick 2.7 /Users/wang/Qt5.7.0/5.7/ios/qml
This plugin does not support createPlatformOpenGLContext!
QQmlComponent: Component is not ready
file:///Users/wang/Qt5.7.0/5.7/ios/qml/loaddependencies.qml:2:1: module "QtQuick" plugin "qtquick2plugin" not found

QT中的错误提示:
module "QtQuick.Controls.Styles" is not installed 

从网上搜了老长时间,原因竟是QML2不支持iOS开发,这是逗我玩吗,不是号称全平台都可以吗。
http://qtcn.org/bbs/simple/?t55713.html
还是老老实实的使用QML1进行开发吧。
听,慕容晓晓在唱“最后知道真相的我眼泪掉下来”。
10、还有一点要注意,我一开始只给虚拟机分配了15G的空间,然后增加到了30G,还不够,然后又增加到50G,最后增加到了70G。这里提醒至少预留50G以上的空间。
 
附  扩展空间的方法(http://www.cnblogs.com/atree/p/MacOSX_diskutil_xcode.html):
1、首先在VMware中扩展;
2、然后进入虚拟机的macOS操作系统使用diskutil命令

(1).打开终端,输入diskutil list

(2).从显示的列表中找到你需要扩展的分区,如上图。我的磁盘有107.4G,但系统分区为42.1GB。(分区的ID一般为diskXsX,我的ID是disk0s2);

(3).然后输入 diskutil resizeVolume disk0s2 100GB,其中disk0s2为对应分区的ID,100GB为目标大小(这里的目标大小不能超过这个磁盘的总额);回车,等待完成就可以使用了。


 
折腾了三天,总结一下:用QT开发跨平台应用,若条件允许,最好在macOS环境下开发,可以保证能同时调试安卓和iOS。
 
于2016年11月7日济南至洛阳火车上
大风起兮云飞扬++
 



来自为知笔记(Wiz)