Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑

Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑

本次开发采用的Flutter技术进行开发,没想到会这么快,昨天提交的,今天便已上架appstroe,所以这次来做一次总结,总结从开发完毕app之后上架的全部过程

一、准备工作(如果准备工作中,没有和您APP相匹配的功能点,可以跳过这一段)

( 1 ) 多语言申请权限问题
因为我的app是涉及到多语言以及自定义申请权限内容,所以在申请权限方面,虽然Flutter拥有申请权限的插件:permission_handler,但还是不能自定义文字内容,所以我们需要在xcode中进行操作一下,这里因为本人不是ios开发人员,所以也是在网上搜索的内容,感谢此篇文章帮我解决:3分钟实现iOS语言本地化/国际化

( 2 ) flutter使用permission_handler需要注意的点。
在跟随这篇文章建立了特定的申请权限本地化文字之后,那么你的app现在就会跟随你所写的文件来展示文字了。当然这里有一个坑,也是我没有经验所犯的错误,本以为写了本地文字文件之后,就可以了,info.plist中的申请权限描述<string><string>并不需要写真实的内容,只需要让他自己找就可以了,如下图
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
但其实不然,如果是这样的话,你在上传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插件中也有对这个问题进行描述解决了,只不过当时只关注了如何使用,并没有特意去了解。
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
我们要在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是没有的,要注意这个点,不要多写!!

我们在接着解决一开始提到的点,其实只要将<string><string>里面填上内容就可以解决掉这个苹果机器检测报错:Missing Purpose String in Info.plist问题了。

二、上架appstroe需要准备的东西
  • App名称
  • 公司名称(填写在版权时候使用
  • 副标题
  • 关键词
  • 技术支持网址(属于你的可以访问的网址
  • app说明(填写在描述中使用)
  • 宣传文本
  • 6.5英寸下app宣传图(以下尺寸都可以)
    Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
  • 5.5英寸下app宣传图(以下尺寸都可以)
    Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
  • ipad下的宣传图(如果你不想上架ipad,可以在xcode中进行取消选择ipad
    Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
    如果你需要上架ipad的话,需要准备2048x2732尺寸大小的宣传图
三、苹果开发者平台进行创建你的app项目

Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑

Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑

Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
随后选择创建,创建完毕之后,他会从新进入上一步都页面,这个时候时候,就可以看到你所创建都app了,点击进入,在其中填写之前准备都所有信息就可以了。

Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
这里就是需要你进行上传app的操作了,上传成功后,他会自动填补app信息。
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑

这里是在你选择完你上传的app版本之后出现的,后面可能还有一个会询问你是否符合法律规定,也选择是就好。

Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑选择您的app的用户隐私策略

Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
记得选择你app的年龄分级

四、使用xcode进行打包以及上传appstore

万事俱备,只欠东风,我们所有准备都已经准备好了,现在开始上传appstroe

打包前的准备:将您的手机运行选择any ios device 适用于多个手机
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑

Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑

1、构建文件包
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
注意:这时候有人就注意到了,为什么图中我选中的部分也就是蓝色框中的build为什么是1.4.2了? 这里是你打包的版本数,是可以自定义的,主要原因是因为之前打包之后提交appstore时,出现了错误,没有提交成功,但是苹果服务器上已经有这个build版本了,所以我们需要进行更改,只要和上次不一样并且可以区分就好

2、等待构建完毕之后,便会展示过往所有打包的记录,这时候我们需要点击右边栏目中的Distribute App进行选择需要构建什么类型的包
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑

因为要上架appstroe,我们选择第一个来进行打包
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
选择next,进行上传操作
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
选择next,进行下一步
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
选择next,进行下一步
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
这个时候,便打包完成了,我们点击upload便可以上传appstore了,这里需要等一会。
Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑
如果出现任何问题,大家可以复制一下错误信息,直接去网上搜索就可以解决,我只出现了build版本重复的问题,所以就没办法给大家列举出来一些其他但坑了。

五、完结

现在我们已经将项目上传到了appstore平台当中进行准备提交了,在appstore平台中点击提交审核时,如果你有什么问题,都会提示您,的具体都会描述的很清楚,大家可以按照描述去解决这个问题。接下来就是提交审核就好了。祝大家都能够一次审核通过哦~

有什么问题请给我留言~

Flutter开发IOS,上架AppStore的全部流程以及常遇到的坑

上一篇:Flutter的第一次摸索


下一篇:How to Become a Better Learner