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 Environment

Submission ID: xxxx
Review date: January 13, xxx
Version reviewed: 1.0.0

Guideline 2.1 - Information Needed

We 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 Steps

Please 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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/955431.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mockito+PowerMock+Junit单元测试

一、单元测试用途 1、日常开发团队要求规范&#xff0c;需要对开发需求代码进行单元测试并要求行覆盖率达到要求&#xff0c;DevOps流水线也会开设相关门禁阀值阻断代码提交&#xff0c;一般新增代码行覆盖率80%左右。 二、Mock测试介绍 1、Mock是为了解决不同的单元之间由于…

candb++ windows11运行报错,找不到mfc140.dll

解决问题记录 mfc140.dll下载 注意&#xff1a;放置位置别搞错了

【Spring Boot】Spring AOP 快速上手指南:开启面向切面编程新旅程

前言 ???本期讲解关于spring aop的入门介绍~~~ ??感兴趣的小伙伴看一看小编主页&#xff1a;-CSDN博客 ?? 你的点赞就是小编不断更新的最大动力 ??那么废话不多说直接开整吧~~ 目录 ???1.AOP概述 1.1什么是AOP ?1.2什么是Spring AOP ???2.Spring AOP入…

(01)STM32—GPIO

1. GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出端口。可配置为8种输入输出模式。引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V。输出模式下可控制端口输出高低电平&#xff0c;用以驱动LED、控制蜂鸣器、模拟通信协议输出时…

python实现pdf转word和excel

一、引言   在办公中&#xff0c;我们经常遇收到pdf文件格式&#xff0c;因为pdf格式文件不易修改&#xff0c;当我们需要编辑这些pdf文件时&#xff0c;经常需要开通会员或收费功能才能使用编辑功能。今天&#xff0c;我要和大家分享的&#xff0c;是如何使用python编程实现…

基于 Python 的深度学习的车俩特征分析系统,附源码

博主介绍&#xff1a;✌stormjun、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

C#实现字符串反转的4种方法

见过不少人、经过不少事、也吃过不少苦&#xff0c;感悟世事无常、人心多变&#xff0c;靠着回忆将往事串珠成链&#xff0c;聊聊感情、谈谈发展&#xff0c;我慢慢写、你一点一点看...... 1、string.Reverse 方法 string content "Hello World";string reverseStri…

LabVIEW串口通信调试与数据接收问题

在使用LabVIEW进行串口通信时&#xff0c;常常会遇到无法接收数据的情况。这可能与串口设置、连接、设备响应等多方面因素相关。本文将详细讨论如何使用LabVIEW进行串口通信&#xff0c;并提供常见问题的排查与解决方法&#xff0c;帮助用户更高效地进行数据接收调试。通过调整…

单元测试与unittest框架

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 单元测试的定义 1. 什么是单元测试&#xff1f; 单元测试是指&#xff0c;对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&am…

LuaJIT Garbage Collector Algorithms

Explain 本篇文章是对Make Pall发表wili内容《LuaJIT 3.0 new Garbage Collector》的翻译和扩展&#xff0c;因为原文是对LuaJIT 2.x GC重要功能的简介和对LuaJIT 3.0 new GC的工作计划&#xff0c;所以它并不是系统性介绍GC的文章。希望以后能有精力系统性的对LuaJIT 2.x GC做…

1.17组会汇报

STRUC-BENCH: Are Large Language Models Good at Generating Complex Structured Tabular Data? STRUC-BENCH&#xff1a;大型语言模型擅长生成复杂的结构化表格数据吗&#xff1f;23年arXiv.org 1概括 这篇论文旨在评估大型语言模型&#xff08;LLMs&#xff09;在生成结构…

EF Core全局查询筛选器

目录 概述 用法 添加全局查询筛选器 禁用全局查询筛选器 概述 全局查询筛选器&#xff1a;EF Core 会自动将这个查询筛选器应用于涉及这个实体类型的所有 LINQ 查询。 场景&#xff1a;软删除、多租户。 什么是软删除&#xff1f; 逻辑删除&#xff0c;并不是真正地从数…

俄语画外音的特点

随着全球媒体消费的增加&#xff0c;语音服务呈指数级增长。作为视听翻译和本地化的一个关键方面&#xff0c;画外音在确保来自不同语言和文化背景的观众能够以一种真实和可访问的方式参与内容方面发挥着重要作用。说到俄语&#xff0c;画外音有其独特的特点、挑战和复杂性&…

怎么用CRM系统实现客户数据的集中管理?

一、为什么我们需要关注客户数据&#xff1f; 嘿&#xff0c;大家好&#xff01;你有没有过这样的经历&#xff0c;在与一家公司打交道时&#xff0c;突然发现对方对你的需求了如指掌&#xff0c;并且总能提供恰到好处的服务&#xff1f;这可不是巧合哦&#xff0c;背后很可能…

学习threejs,使用OrbitControls相机控制器

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.OrbitControls 相机控…

Vue2+OpenLayers实现点位拖拽功能(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、代码实现 3.1、初始化变量 3.2、创建一个点 3.3、将点添加到地图上 3.4、实现点位拖拽 3.5、完整代码 四、Gitee源码 一、案例截图 可以随意拖拽点位到你想要的位置 二、安装OpenLayers库 npm install ol 三、代码实现…

【Spring】获取Cookie和Session(@CookieValue()和@SessionAttribute())

文章目录 获取 Cookie 传统获取 Cookie简洁获取 Cookie&#xff08;注解&#xff09; 获取 Session Session 存储和获取简洁获取 Session (1)简洁获取 Session (2) 获取 Cookie 传统获取 Cookie 这是没有 Spring 的时候&#xff0c;用 Servlet 来获取&#xff08;获取所有的…

Linux第二课:LinuxC高级 学习记录day03

4、解压和压缩 1、gzip 和 gunzip 特点&#xff1a; 1&#xff09;只能对单个普通文件进行压缩或解压 2&#xff09;不能进行归档&#xff0c;压缩后或解压缩后源文件不存在 3&#xff09;压缩生成压缩格式为.gz 命令&#xff1a; 压缩&#xff1a;gzip 文件名.c // …

OpenCV实现多尺度细节提升算法

1、算法原理 多尺度细节提升算法来源于论文*《DARK IMAGE ENHANCEMENT BASED ON PAIRWISE TARGET CONTRAST AND MULTI-SCALE DETAIL BOOSTING》*&#xff0c;算法主要是解决细节增强算法中噪声和细节的平衡问题。 常规的非锐化掩蔽&#xff08;USM&#xff09;算法在提升细节…

查看APK的公钥,MD5信息

查看md5 sha1 sha256的等信息 keytool -list -printcert -jarfile apk的路径地址 查看公钥私钥信息 keytool -list -rfc --keystore keystore文件的路径地址 | openssl x509 -inform pem -pubkey 把里面的keystore文件的路径地址替换成你的本地文件就可以了 如果报以上错误 就…