qt vs ios开发应用环境搭建和上架商店的记录
qt
下载链接如下
https://download.qt.io/new_archive/qt/5.14/5.14.2/qt-opensource-mac-x64-5.14.2.dmg
安装选项全勾选就行,这里特别说明下qt5.14.2/qml
- qt5.14.2对qml支持还算成熟,但很多特性还得qt6才行,这里用qt5.14.2主要是考虑到服务器是租赁的,为了稳定考虑
- 吐槽下qt5.14.2/qml
- TextField不支持添加close button
- RowLayout和Qt widget的是相反的,添加边距页不是那么友好
- Button远没有Rectange+MouseArea好用
- 自带的日历页没法用,需要重写
- 要熟练使用Loader这个很关键,涉及大量自定义控件都可以用Loader
- 对NetWork支持不够,windows只能配合mvsc使用,mac基本没戏,很多js的 图表没法用,基本只能用Charts
- 项目开发的文件目录如下,可以作为参考
- 动画支持很好,滑动效果页不错
- 多语言基本和qt widget的一样
- qml对jsData支持很特别,可以好好研究下
- 使用inputMethodHints可以指定弹出键盘的类型,如数字键盘、适配邮箱的键盘、密码键盘等,会有些bug要慢慢试
- qt的作用是生成xcodeproj文件,后续模拟器之类的在xcode里进行就行
- 这里用IOS Simulator来编译
xcode
- mac上必须安装xcode,先判断系统的版本号,在appstore里找到对应的xcode版本,直接下载一般是没用的
- 在下面链接找到对应的xcode
https://developer.apple.com/download/more/ - 解压到/Applications里
- 设置环境变量
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
- 安装python3
brew install python
- 编译项目会遇到无法识别python的时候
ios/mkspecs/features/uikit/devices.py: /usr/bin/python: bad interpreter: No such file or directory
按下面方法来
gedit /Users/mac/Qt5.14.2/5.14.2/ios/mkspecs/features/uikit/devices.py
#!/usr/bin/python 改为#!/usr/bin/python3
- xcode编译失败错误如下
The following build commands failed:CompileC
/Users/mac/Qt5.14.2/Examples/Qt-5.14.2/gui/build-analogclock-Qt_5_14_2_for_iOS_Simulator-Release/analogclock.build/Release-iphonesimulator/analogclock.build/Objects-normal/x86_64/moc_rasterwindow.o
/Users/mac/Qt5.14.2/Examples/Qt-5.14.2/gui/build-analogclock-Qt_5_14_2_for_iOS_Simulator-Release/moc_rasterwindow.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'analogclock' from project 'analogclock')
(1 failure)
make: *** [xcodebuild-release-simulator] Error 65
08:31:32: 进程"/usr/bin/make"退出,退出代码 2 。
Error while building/deploying project analogclock (kit: Qt 5.14.2 for iOS Simulator)
按下面方法来
感谢csdn article/details/122301192
pro加
LIBS += -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks -framework VideoToolbox
LIBS += -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks -framework CoreMedia
LIBS += -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks -framework CoreVideo
- xcode发布时需要开发者账号688一年,用自己的appid就行,appstore下载Developer,在Developer里完成购买,注意别填自己的名字,填团队的名字,然后需要第二个账号用于团队管理,加入后才能后续开发,这些都要在xcode里预先配置好
- 若之前配置好的账号出现问题如下图,清除所有账号信息,重启xcode可以解决
info.list
-
qt的发布全部在info.list完成,不要动xcode的任何设置
参考了项目c2gQtWS_x -
ios文件夹的目录结构
要注意图片分辨率,MyLaunchScreen.xib是app启动前的画面,这里只是居中文字显示了,简单些
-
Images.xcassets文件夹只有下面一个文件夹
-
AppIcon.appiconset文件夹下包含app图标
-
共23个文件,要注意图片分辨率,其他照抄就行
-
ios的部分图片是不支持透明通道的,一般ITunes之类的图标不行,自己改或通过makeappicon生成也行
-
info.plist内容如下,特别注意CFBundleShortVersionString,这个是正儿八经的版本号,后期软件更新递增就行,如1.0.0-》1.0.1,其他照抄
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict><key>CFBundleDisplayName</key><string>${PRODUCT_NAME}</string><key>CFBundleExecutable</key><string>${EXECUTABLE_NAME}</string><key>CFBundleGetInfoString</key><string>Created by Qt/QMake</string><key>CFBundleIdentifier</key><string>$(PRODUCT_BUNDLE_IDENTIFIER)</string><key>CFBundleName</key><string>${PRODUCT_NAME}</string><key>CFBundlePackageType</key><string>APPL</string><key>CFBundleShortVersionString</key><string>1.0.0</string><key>CFBundleSignature</key><string>${QMAKE_PKGINFO_TYPEINFO}</string><key>CFBundleVersion</key><string>${QMAKE_FULL_VERSION}</string><key>ITSAppUsesNonExemptEncryption</key><false/><key>LSRequiresIPhoneOS</key><true/><key>NOTE</key><string>This file was generated by Qt/QMake.</string><key>NSPhotoLibraryUsageDescription</key><string>$(PRODUCT_NAME) uses photos</string><key>UILaunchStoryboardName</key><string>LaunchScreen</string><key>UISupportedInterfaceOrientations</key><array><string>UIInterfaceOrientationPortrait</string><string>UIInterfaceOrientationPortraitUpsideDown</string><string>UIInterfaceOrientationLandscapeLeft</string><string>UIInterfaceOrientationLandscapeRight</string></array>
</dict>
</plist>
appstoreconnect
TestFlight
好了,一些准备就绪就开始上传项目,这里先传TestFlight,好好测试App
- 添加内测人员
这里会发送邮件,内含兑换码,打开TestFlight,输入兑换码即可下载并测试
发布
内测可以正式发布了,发布时要传"如何登录的视频"和App的介绍,可以用中文,要尽量简洁方便理解,这个切记
- App Review
一般第一次审核时会被驳回,如Guideline 2.1 - Information Needed
除了要考虑下面这条,其他如实填写
Are the enterprise services in your app sold to single users, consumers, or for family use?
A: No, our app is provided to employees who have joined xxx.
记住真诚是最大的必杀技,要清晰明了的表达自己的意见,并附带视频、截图等
最后大功告成
附审核的问答
Hello,Thank you for your resubmission, but we need additional information before we can continue our review.Please reply to this message in App Store Connect with detailed answers to the questions below.Review EnvironmentSubmission ID: xxxx
Review date: January 13, xxx
Version reviewed: 1.0.0Guideline 2.1 - Information NeededWe have started our review, but we need additional information to continue. Specifically, it appears your app may access or include paid digital content or services, and we want to understand your business model before completing our review.Next StepsPlease review the following questions and provide as much detailed information about your business model as you can.1. Who are the users that will use the paid features and services in the app?
2. Where can users purchase the subscriptions that can be accessed in the app?
3. What specific types of previously purchased services can a user access in the app?
4. What paid content, subscriptions, or features are unlocked within your app that do not use in-app purchase?
5. Are the enterprise services in your app sold to single users, consumers, or for family use?Support- Reply to this message in your preferred language if you need assistance. If you need additional support, use the Contact Us module.
- Consult with fellow developers and Apple engineers on the Apple Developer Forums.
- Provide feedback on this message and your review experience by completing a short survey.
Dear Apple Review Team:Thank you for your patient review. Firstly, let's introduce the xxx. It is a company that xxx, yyy, and more. Its homepage is "https://www.xxx.com".
The xxx is one of the brands of the xxx.
Regarding the 5 questions you mentioned, our response is as follows:1. Who are the users that will use the paid features and services in the app?
A: Companies such as xxx, zzz and yyy will use the paid features and services.2. Where can users purchase the subscriptions that can be accessed in the app?
A: Fisrtly, open webpage "https://www.xxxx.net/register" and fill in the relevant information and complete the registration to obtain the account. Secondary, open webpage "https://www.xxxx.net/xxxx/xxxx", user can purchase the subscriptions in the "Billing&subscriptions" section.Please see the attachment "How do users obtain an account. png", "Introduce of subscriptions.png" and "How do users purchase the subscriptions.png" for details.3. What specific types of previously purchased services can a user access in the app?
A: User can access "xxx", "zzz", "yyyy", "vvv" and "www" in xxx app.4. What paid content, subscriptions, or features are unlocked within your app that do not use in-app purchase?
A: All function are used after subscriptions, Employees can access the application during the trial period, but if exceeds, employees must subscribe to the service.5. Are the enterprise services in your app sold to single users, consumers, or for family use?
A: No, our app is provided to employees who have joined xxx.
相关文章:

qt vs ios开发应用环境搭建和上架商店的记录
qt 下载链接如下 https://download.qt.io/new_archive/qt/5.14/5.14.2/qt-opensource-mac-x64-5.14.2.dmg 安装选项全勾选就行,这里特别说明下qt5.14.2/qml qt5.14.2对qml支持还算成熟,但很多特性还得qt6才行,这里用qt5.14.2主要是考虑到服…...
[cg] glDrawBuffers MRT的应用
glDrawBuffers 是 OpenGL 中的一个函数,用于指定渲染结果输出到哪些颜色缓冲区。它通常在多渲染目标(MRT, Multiple Render Targets)中使用,允许一个渲染操作同时将结果输出到多个颜色缓冲区,而不是默认情况下的单个颜…...

IO模型与NIO基础二
抽象基类之二 FilterInputStream FilterInputStream 的作用是用来“封装其它的输入流,并为它们提供额外的功能”。 它的常用的子类有BufferedInputStream和DataInputStream。 (1) BufferedInputStream的作用就是为“输入流提供缓冲功能,以及mark()和res…...

【设计模式】 单例模式(单例模式哪几种实现,如何保证线程安全,反射破坏单例模式)
单例模式 作用:单例模式的核心是保证一个类只有一个实例,并且提供一个访问实例的全局访问点。 实现方式优缺点饿汉式线程安全,调用效率高 ,但是不能延迟加载懒汉式线程安全,调用效率不高,能延迟加载双重检…...
T-SQL语言的数据库交互
T-SQL语言的数据库交互 引言 随着信息技术的不断发展,数据库在各个行业中扮演着越来越重要的角色。数据库的有效管理和优化对于企业的数据安全、效率提升和决策支持至关重要。T-SQL(Transact-SQL)作为微软SQL Server的重要扩展语言…...

【Linux系统】Ext系列磁盘文件系统二:引入文件系统(续篇)
inode 和 block 的映射 该博文中有详细解释:【Linux系统】inode 和 block 的映射原理 目录与文件名 这里有几个问题: 问题一: 我们访问文件,都是用的文件名,没用过 inode 号啊? 之前总是说可以通过一个…...

慧集通(DataLinkX)iPaaS集成平台-业务建模之域
通过左侧导航菜单〖业务建模〗→〖域〗,进入该界面;在该界面可以查看到系统中已存在的域列表。 新建域 在慧集通平台中进入【业务建模】的【域】页面,点击【新建】按钮进入新建页面;输入编码,名称、模块以及对应数据类…...
【机器学习实战】kaggle 欺诈检测---使用生成对抗网络(GAN)解决欺诈数据中正负样本极度不平衡问题
【机器学习实战】kaggle 欺诈检测---如何解决欺诈数据中正负样本极度不平衡问题https://blog.csdn.net/2302_79308082/article/details/145177242 本篇文章是基于上次文章中提到的对抗生成网络,通过对抗生成网络生成少数类样本,平衡欺诈数据中正类样本极…...
android wifi framework与wpa_supplicant的交互
android frmework直接与wpa_supplicant进行交互,使用aidl或者hidl 二、事件 framework注册事件的地方: packages/modules/Wifi/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java class SupplicantStaIfaceCallbackImpl exte…...

初学stm32 --- flash模仿eeprom
目录 STM32内部FLASH简介 内部FLASH构成(F1) FLASH读写过程(F1) 闪存的读取 闪存的写入 内部FLASH构成(F4 / F7 / H7) FLASH读写过程(F4 / F7 / H7) 闪存的读取 闪存的写入 …...

使用C语言实现栈的插入、删除和排序操作
栈是一种后进先出(LIFO, Last In First Out)的数据结构,这意味着最后插入的元素最先被删除。在C语言中,我们可以通过数组或链表来实现栈。本文将使用数组来实现一个简单的栈,并提供插入(push)、删除(pop)以及排序(这里采用一种简单的排序方法,例如冒泡排序)的操作示…...

C语言程序环境和预处理详解
本章重点: 程序的翻译环境 程序的执行环境 详解:C语言程序的编译链接 预定义符号介绍 预处理指令 #define 宏和函数的对比 预处理操作符#和##的介绍 命令定义 预处理指令 #include 预处理指令 #undef 条件编译 程序的翻译环境和执行环…...

基于机器学习随机森林算法的个人职业预测研究
1.背景调研 随着信息技术的飞速发展,特别是大数据和云计算技术的广泛应用,各行各业都积累了大量的数据。这些数据中蕴含着丰富的信息和模式,为利用机器学习进行职业预测提供了可能。机器学习算法的不断进步,如深度学习、强化学习等…...

三种文本相似计算方法:规则、向量与大模型裁判
文本相似计算 项目背景 目前有众多工作需要评估字符串之间的相似(相关)程度: 比如,RAG 智能问答系统文本召回阶段需要计算用户文本与文本库内文本的相似分数,返回前TopK个候选文本。 在评估大模型生成的文本阶段,也需要评估…...
Python语言的计算机基础
Python语言的计算机基础 绪论 在当今信息技术飞速发展的时代,编程已经成为了一种必备技能。Python凭借其简洁、易读和强大的功能,逐渐成为初学者学习编程的首选语言。本文将以Python语言为基础,探讨计算机科学的基本概念,并帮助…...

Dify应用-工作流
目录 DIFY 工作流参考 DIFY 工作流 2025-1-15 老规矩感谢参考文章的作者,避免走弯路。 2025-1-15 方便容易上手 在dify的一个桌面上,添加多个节点来完成一个任务。 每个工作流必须有一个开始和结束节点。 节点之间用线连接即可。 每个节点可以有输入和输出 输出类型有,字符串,…...
02.02、返回倒数第 k 个节点
02.02、[简单] 返回倒数第 k 个节点 1、题目描述 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 2、题解思路 本题的关键在于使用双指针法,通过两个指针(fast 和 slow),让 fast 指针比 slow 指针…...

Linux手写FrameBuffer任意引脚驱动spi屏幕
一、硬件设备 开发板:香橙派 5Plus,cpu:RK3588,带有 40pin 外接引脚。 屏幕:SPI 协议 0.96 寸 OLED。 二、需求 主要是想给板子增加一个可视化的监视器,并且主页面可调。 平时跑个模型或者服务,…...

怎么修复损坏的U盘?而且不用格式化的方式!
当你插入U盘时,若电脑弹出“需要格式化才能使用”提示,且无法打开或读取其中的数据,说明U盘极有可能已经损坏。除此之外,若电脑在连接U盘后显示以下信息,也可能意味着U盘出现问题,需要修复损坏的U盘&#x…...
语音技术在播客领域的应用(2)
播客是以语音为主,各种基于AI 的语音技术在播客领域十分重要。 语音转文本 Whisper Whisper 是OpenAI 推出的开源语音辨识工具,可以把音档转成文字,支援超过50 种语言。这款工具是基于68 万小时的训练资料,其中包含11.7 万小时的…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...