当前位置: 首页 > news >正文

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 安装选项全勾选就行&#xff0c;这里特别说明下qt5.14.2/qml qt5.14.2对qml支持还算成熟&#xff0c;但很多特性还得qt6才行&#xff0c;这里用qt5.14.2主要是考虑到服…...

[cg] glDrawBuffers MRT的应用

glDrawBuffers 是 OpenGL 中的一个函数&#xff0c;用于指定渲染结果输出到哪些颜色缓冲区。它通常在多渲染目标&#xff08;MRT, Multiple Render Targets&#xff09;中使用&#xff0c;允许一个渲染操作同时将结果输出到多个颜色缓冲区&#xff0c;而不是默认情况下的单个颜…...

IO模型与NIO基础二

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

【设计模式】 单例模式(单例模式哪几种实现,如何保证线程安全,反射破坏单例模式)

单例模式 作用&#xff1a;单例模式的核心是保证一个类只有一个实例&#xff0c;并且提供一个访问实例的全局访问点。 实现方式优缺点饿汉式线程安全&#xff0c;调用效率高 &#xff0c;但是不能延迟加载懒汉式线程安全&#xff0c;调用效率不高&#xff0c;能延迟加载双重检…...

T-SQL语言的数据库交互

T-SQL语言的数据库交互 引言 随着信息技术的不断发展&#xff0c;数据库在各个行业中扮演着越来越重要的角色。数据库的有效管理和优化对于企业的数据安全、效率提升和决策支持至关重要。T-SQL&#xff08;Transact-SQL&#xff09;作为微软SQL Server的重要扩展语言&#xf…...

【Linux系统】Ext系列磁盘文件系统二:引入文件系统(续篇)

inode 和 block 的映射 该博文中有详细解释&#xff1a;【Linux系统】inode 和 block 的映射原理 目录与文件名 这里有几个问题&#xff1a; 问题一&#xff1a; 我们访问文件&#xff0c;都是用的文件名&#xff0c;没用过 inode 号啊&#xff1f; 之前总是说可以通过一个…...

慧集通(DataLinkX)iPaaS集成平台-业务建模之域

通过左侧导航菜单〖业务建模〗→〖域〗&#xff0c;进入该界面&#xff1b;在该界面可以查看到系统中已存在的域列表。 新建域 在慧集通平台中进入【业务建模】的【域】页面&#xff0c;点击【新建】按钮进入新建页面&#xff1b;输入编码&#xff0c;名称、模块以及对应数据类…...

【机器学习实战】kaggle 欺诈检测---使用生成对抗网络(GAN)解决欺诈数据中正负样本极度不平衡问题

【机器学习实战】kaggle 欺诈检测---如何解决欺诈数据中正负样本极度不平衡问题https://blog.csdn.net/2302_79308082/article/details/145177242 本篇文章是基于上次文章中提到的对抗生成网络&#xff0c;通过对抗生成网络生成少数类样本&#xff0c;平衡欺诈数据中正类样本极…...

android wifi framework与wpa_supplicant的交互

android frmework直接与wpa_supplicant进行交互&#xff0c;使用aidl或者hidl 二、事件 framework注册事件的地方&#xff1a; packages/modules/Wifi/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java class SupplicantStaIfaceCallbackImpl exte…...

初学stm32 --- flash模仿eeprom

目录 STM32内部FLASH简介 内部FLASH构成&#xff08;F1&#xff09; FLASH读写过程&#xff08;F1&#xff09; 闪存的读取 闪存的写入 内部FLASH构成&#xff08;F4 / F7 / H7&#xff09; FLASH读写过程&#xff08;F4 / F7 / H7&#xff09; 闪存的读取 闪存的写入 …...

使用C语言实现栈的插入、删除和排序操作

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

C语言程序环境和预处理详解

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

基于机器学习随机森林算法的个人职业预测研究

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

三种文本相似计算方法:规则、向量与大模型裁判

文本相似计算 项目背景 目前有众多工作需要评估字符串之间的相似(相关)程度&#xff1a;  比如&#xff0c;RAG 智能问答系统文本召回阶段需要计算用户文本与文本库内文本的相似分数&#xff0c;返回前TopK个候选文本。  在评估大模型生成的文本阶段&#xff0c;也需要评估…...

Python语言的计算机基础

Python语言的计算机基础 绪论 在当今信息技术飞速发展的时代&#xff0c;编程已经成为了一种必备技能。Python凭借其简洁、易读和强大的功能&#xff0c;逐渐成为初学者学习编程的首选语言。本文将以Python语言为基础&#xff0c;探讨计算机科学的基本概念&#xff0c;并帮助…...

Dify应用-工作流

目录 DIFY 工作流参考 DIFY 工作流 2025-1-15 老规矩感谢参考文章的作者,避免走弯路。 2025-1-15 方便容易上手 在dify的一个桌面上,添加多个节点来完成一个任务。 每个工作流必须有一个开始和结束节点。 节点之间用线连接即可。 每个节点可以有输入和输出 输出类型有,字符串,…...

02.02、返回倒数第 k 个节点

02.02、[简单] 返回倒数第 k 个节点 1、题目描述 实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 2、题解思路 本题的关键在于使用双指针法&#xff0c;通过两个指针&#xff08;fast 和 slow&#xff09;&#xff0c;让 fast 指针比 slow 指针…...

Linux手写FrameBuffer任意引脚驱动spi屏幕

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

怎么修复损坏的U盘?而且不用格式化的方式!

当你插入U盘时&#xff0c;若电脑弹出“需要格式化才能使用”提示&#xff0c;且无法打开或读取其中的数据&#xff0c;说明U盘极有可能已经损坏。除此之外&#xff0c;若电脑在连接U盘后显示以下信息&#xff0c;也可能意味着U盘出现问题&#xff0c;需要修复损坏的U盘&#x…...

语音技术在播客领域的应用(2)

播客是以语音为主&#xff0c;各种基于AI 的语音技术在播客领域十分重要。 语音转文本 Whisper Whisper 是OpenAI 推出的开源语音辨识工具&#xff0c;可以把音档转成文字&#xff0c;支援超过50 种语言。这款工具是基于68 万小时的训练资料&#xff0c;其中包含11.7 万小时的…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...