本次开发采用的Flutter
技术进行开发,没想到会这么快,昨天提交的,今天便已上架appstroe,所以这次来做一次总结,总结从开发完毕app之后上架的全部过程
,本文全程采用上图下文的讲解过程方式。
如果准备工作中,没有和您APP相匹配的功能点,可以跳过这一段
)( 1 ) 多语言申请权限问题
因为我的app是涉及到多语言以及自定义申请权限内容,所以在申请权限方面,虽然Flutter拥有申请权限的插件:permission_handler,但还是不能自定义文字内容,所以我们需要在xcode中进行操作一下,这里因为本人不是ios开发人员,所以也是在网上搜索的内容,感谢此篇文章帮我解决:3分钟实现iOS语言本地化/国际化。
( 2 ) flutter使用permission_handler需要注意的点。
在跟随这篇文章建立了特定的申请权限本地化文字之后,那么你的app现在就会跟随你所写的文件来展示文字了。当然这里有一个坑,也是我没有经验所犯的错误,本以为写了本地文字文件之后,就可以了,info.plist
中的申请权限描述
并不需要写真实的内容,只需要让他自己找就可以了,如下图
但其实不然,如果是这样的话,你在上传appstore但时候,苹果方面是不允许这样的,会给您的开发者邮箱发送一封邮件,主要内容是: Missing Purpose String in Info.plist
ITMS-90683: Missing Purpose String in Info.plist - Your app’s code references one or more APIs that
access sensitive user data. The app’s Info.plist file should contain a NSContactsUsageDescription key
with a user-facing purpose string explaining clearly and completely why your app needs the data.
Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a
purpose string. If you’re using external libraries or SDKs, they may reference APIs that require a purpose
string. While your app might not use these APIs, a purpose string is still required. You can contact the
developer of the library or SDK and request they release a version of their code that doesn’t contain the
APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/
protecting_the_user_s_privacy).
这么一段报错,主要原因还是告诉开发者,没有对申请权限进行描述,这在app当中是不被允许的。
那么这个问题是怎么导致的呢?这里感谢这篇文章帮我解决了问题:提交AppStore机器审核被拒以及解决方案 Missing Purpose String in Info.plist
具体原因
机器审查检测到你的info.plist
文件没有对通讯录、日历、媒体库、运动轨迹、等等你没有用到的一些权限进行申请描述,所以就会报错,那么,为什么我们没有用到这些权限也会报错呢?这就是permission_handler
这个flutter插件库的问题,虽然我们没有用到这些权限,但是我们一旦在项目中引用了该插件,所有的权限都会被打包到ipa文件当中。这就导致了没有用到,也没有对他进行描述。
解决办法
其实在permission_handler
插件中也有对这个问题进行描述解决了,只不过当时只关注了如何使用,并没有特意去了解。
我们要在Podfile
文件当中将我们使用不到的权限进行标注出来(如果您的代码内容和下方不同,可能会多一个flutter的内容,建议请替换掉。
):
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
## dart: PermissionGroup.calendar:日历
'PERMISSION_EVENTS=0',
## dart: PermissionGroup.camera:相机
'PERMISSION_CAMERA=0',
## dart: PermissionGroup.contacts:联系人
'PERMISSION_CONTACTS=0',
## dart: PermissionGroup.phone:手机
'PERMISSION_PHONE=0',
## dart: PermissionGroup.photos:相册
'PERMISSION_PHOTOS=0',
## dart: PermissionGroup.reminders:提醒
'PERMISSION_REMINDERS=0',
## dart: PermissionGroup.speech:语音识别
'PERMISSION_SPEECH_RECOGNIZER=0',
## dart: PermissionGroup.mediaLibrary:多媒体
'PERMISSION_MEDIA_LIBRARY=0',
## dart: PermissionGroup.sensors:传感器
'PERMISSION_SENSORS=0'
]
end
end
end
上面包含了大部分我没有使用到的权限,没有写的还有几个,因为我这边使用到了,分别是定位和语音。如果想要增加的话,可以在你使用Permission的地方点击进去直接查看源码,里面有所有对应的权限代号。当然有的权限只有在ios中才有,android是没有的,要注意这个点,不要多写!!
我们在接着解决一开始提到的点,其实只要将
里面填上内容就可以解决掉这个苹果机器检测报错:Missing Purpose String in Info.plist
问题了。
填写在版权时候使用
)属于你的可以访问的网址
)填写在描述中使用
)如果你不想上架ipad,可以在xcode中进行取消选择ipad
)2048x2732
尺寸大小的宣传图
随后选择创建,创建完毕之后,他会从新进入上一步都页面,这个时候时候,就可以看到你所创建都app了,点击进入,在其中填写之前准备都所有信息就可以了。
这里就是需要你进行上传app的操作了,上传成功后,他会自动填补app信息。
这里是在你选择完你上传的app版本之后出现的,后面可能还有一个会询问你是否符合法律规定,也选择是就好。
万事俱备,只欠东风,我们所有准备都已经准备好了,现在开始上传appstroe
打包前的准备:将您的手机运行选择any ios device
适用于多个手机
1、构建文件包
注意:这时候有人就注意到了,为什么图中我选中的部分也就是蓝色框中的build为什么是1.4.2了? 这里是你打包的版本数,是可以自定义的,主要原因是因为之前打包之后提交appstore时,出现了错误,没有提交成功,但是苹果服务器上已经有这个build版本了,所以我们需要进行更改,只要和上次不一样并且可以区分就好
2、等待构建完毕之后,便会展示过往所有打包的记录,这时候我们需要点击右边栏目中的Distribute App
进行选择需要构建什么类型的包
因为要上架appstroe,我们选择第一个来进行打包
选择next,进行上传操作
选择next,进行下一步
选择next,进行下一步
这个时候,便打包完成了,我们点击upload便可以上传appstore了,这里需要等一会。
如果出现任何问题,大家可以复制一下错误信息,直接去网上搜索就可以解决,我只出现了build版本重复的问题,所以就没办法给大家列举出来一些其他但坑了。同时,如果您上传成功了,需要等个10-20分钟,才能在appstore平台上刷出来您提交的版本
现在我们已经将项目上传到了appstore平台当中进行准备提交了,在appstore平台中点击提交审核时,如果你有什么问题,都会提示您,的具体都会描述的很清楚,大家可以按照描述去解决这个问题。接下来就是提交审核就好了。祝大家都能够一次审核通过哦~
有什么问题请给我留言~