当前位置: 首页 > 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 万小时的…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...