每次将Flutter应用打包iOS上传到App Store Connect之后,都会收到以下电子邮件警告,但不影响正常构建版本。但是烦躁,解决如下:
赛罕网站建设公司成都创新互联公司,赛罕网站设计制作,有大型网站制作公司丰富经验。已为赛罕千余家提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的赛罕做网站的公司定做!
大意就是 缺少推送相关的配置信息,其实在开发者网站配置证书的时候一般都进行 ‘推送功能’ APNs 勾选,但是项目中暂未设置推送配置,所以警告。
思路两个方向:
1.keychain 钥匙串访问
2.申请开发证书
3.注册Bundle ID
4.配置开发证书 (生成.mobileprovision文件)
5.安装证书
6.打包ipa
7.开发团队如何公用证书
进入以下程序
此文件保存到你想保存的地方,后面生成证书有用。
1.打开 苹果开发者中心 ( )
2.按照以下图片步骤走:
上面省略的步骤,按照具体需要选择,基本是“傻瓜式点击
到这bundle id就OK了
.mobileprovision文件格式的配置文件是让开发者的项目(APP)能有真机调试,发布的权限。
配置开发证书,就会需要你设置,在这个项目中添加哪些设备作为真机调试的设备
1.Xcode打开以下文件夹
2.三个必填项
4.选择发布平台:
1.本地安装完.cer证书文件
输入密码之后点击好,即可生成.p12文件
Xcode编译经常遇到各种问题,处理起来费时费力,挺打击学习积极性的。记录下这些问题,方便自己也帮助后来人。
编译的时候遇到:
网上有很多解决方法,我是用这个方法解决的:
编译的时候遇到:
解决办法:
Project - User-Defined - FLUTTER_ROOT 改成本地 flutter SDK路径
感谢 issues 上的小哥,给你个????
在项目目录下执行 flutter run 可以正常运行到手机,但是在Xcode build 还是有问题。
这时需要手动添加 FLUTTER_ROOT 到 User-Defined :
添加之后:
就可以正常在Xcode build 安装到手机了。
flutter build ios 后出现:
pod install 后出现:
解决办法:
这是因为terminal没有走代理的流量,
使用 git config --global http.proxy "localhost:port" ,设置代理。
port是端口号,根据不同的vpn不一样,我的端口是10080。
执行 git config --global http.proxy "localhost:10080"
Xcode build 的时候出现:
解决办法:打开 ios/Podflie 文件:
关于 bitcode 的问题,我检查了下用到的第三方SDK,应该是百度地图的问题,我引入了个第三方插件(吐槽下没官方插件),百度地图有支持和不支持 bitcode 的两个SDK,我取消这个插件就没有报这个错了,奇怪的是,再次引入同一个插件,也可以正常打包,所以说这个问题还没有完全解决。
大家可以试下这个处理方法:
TARGETS - Build Seettings 搜 arm ,试一下把其他删除,只留下armv7跟armv7s或者只留下armv7
解决办法:
我是clean Xcode之后就可以了
解决办法:
用的是P12证书,改成手动签名:
Flutter Dio源码分析(一)--Dio介绍
Flutter Dio源码分析(二)--HttpClient、Http、Dio对比
Flutter Dio源码分析(三)--深度剖析
Flutter Dio源码分析(四)--封装
Flutter Dio源码分析(一)--Dio介绍视频教程
Flutter Dio源码分析(二)--HttpClient、Http、Dio对比视频教程
Flutter Dio源码分析(三)--深度剖析视频教程
Flutter Dio源码分析(四)--封装视频教程
github仓库地址
本文会手把手教你该怎么去封装一个类库,平时在我们的工作中都是拿着别人的造好的轮子在使用,这篇文章将带你怎么去自己造轮子,以后再碰到别的类库需要对其进行封装的时候提供一个的思路和方法。
在前面的文章中,我们对 Dio 的基本使用、请求库对比、源码分析,我们知道 Dio 的使用非常的简单,那为什么还需要进行封装呢?有两点如下:
当组件库方法发生重要改变需要迁移的时候如果有多处地方用到,那么需要对使用到的每个文件都进行修改,非常的繁琐而且很容易出问题。
当不需要 Dio 库的时候,我们可以随时方便切换到别的网络请求库,当然 Dio 目前内置支持使用第三方库的适配器。
因为一个应用程序基本都是统一的配置方式,所以我们可以针对 拦截器 、 转换器 、 缓存 、 统一处理错误 、 代理配置 、 证书校验 等多个配置进行统一管理。
因为我们的应用程序在每个页面中都会用到网络请求,那么如果我们每次请求的时候都去实例化一个 Dio ,无非是增加了系统不必要的开销,而使用单例模式对象一旦创建每次访问都是同一个对象,不需要再次实例化该类的对象。
这是通过静态变量的私有构造器来创建的单例模式
我们对 超时时间 、 响应时间 、 BaseUrl 进行统一设置
因为不管是 get() 还是 post() 请求, Dio 内部最终都会调用 request 方法,只是传入的 method 不一样,所以我们这里定义一个枚举类型在一个方法中进行处理
我们已经把 Restful API 风格简化成了一个方法,通过 DioMethod 来标明不同的请求方式。在我们平时开发的过程中,需要在请求前、响应前、错误时对某一些接口做特殊的处理,那我们就需要用到拦截器。 Dio 为我们提供了自定义拦截器功能,很容易轻松的实现对请求、响应、错误时进行拦截
我们发现虽然 Dio 框架已经封装了一个 DioError 类库,但如果需要对返回的错误进行统一弹窗处理或者路由跳转等就只能自定义了
在我们发送请求的时候会碰到几种情况,比如需要对非open开头的接口自动加上一些特定的参数,获取需要在请求头增加统一的 token
在我们请求接口前可以对响应数据进行一些基础的处理,比如对响应的结果进行自定义封装,还可以针对单独的 url 做特殊处理等。
我们看了转换器的介绍,发现和拦截器的功能差不多,那为什么还要存在转换器,有两点:
执行流程: 请求拦截器 请求转换器 发起请求 响应转换器 响应拦截器 最终结果 。
只会被用于 'PUT'、 'POST'、 'PATCH'方法,因为只有这些方法才可以携带请求体(request body)
会被用于所有请求方法的返回数据。
在开发过程中,客户端和服务器打交道的时候,往往会用一个 token 来做校验,因为每个公司处理刷新token的逻辑都不一样,我这里举一个简单的例子
为什么我们需要有取消请求的功能,如果当我们的页面在发送请求时,用户主动退出当前界面或者app应用程序退出的时候数据还没有响应,那我们就需要取消该网络请求,防止不必要的错误。
由 服务器生成 的 一小段文本信息 ,发送给浏览器,浏览器把 cookie 以kv形式保存到本地 某个目录下的文本文件内,下一次请求同一网站时会把该 cookie 发送给服务器。
cookie 的使用需要用到两个第三方组件 dio_cookie_manager 和 cookie_jar
因为在我们平时的开发过程中,会碰到一种情况,在进行网络请求时,我们希望能正常访问到上次的数据,对于用户的体验比较好,而不是展示一个空白的页面,该缓存主要是 《Flutter实战》网络接口缓存 提供参考。
我们在程序退出后内存缓存将会消失,所以我们用 shared_preferences 进行磁盘缓存数据。
在我们用flutter进行抓包的时候需要配置 Dio 代理。由 DefaultHttpClientAdapter 提供了一个 onHttpClientCreate 回调来设置底层 HttpClient 的代理。
用于验证正在访问的网站是否真实。提供安全性,因为证书和域名绑定,并且由根证书机构签名确认。
日志打印主要是帮助我们开发时进行辅助排错
ITMS-90338: Non-public API usage - The app references non-public symbols in Frameworks/Flutter.framework/Flutter: _ptrace.
原因: 使用了 Flutter 的debug 版产物 打成 iPa 包
就是Frameworks/Flutter.framework 是debug 版的产物
Debug 版的 Flutter 产物 ,SDK 内部使用了 苹果内部私有的API , 会被苹果审核监测到,存在安全性隐患. 导致拒绝上传到苹果后台.
产生的原因: 因为开发过程中,直接使用了debug 模式进行开发, 在打包的时候,直接打开 iOS 文件夹下面的工程,在Xcode 里设置 release 模式时,此时,Flutter 的产物还是 debug 模式下的产物. 没有删除替换成 release 产物
1.先 将工程 清理一遍,清理之前debug模式下 的Flutter 产物
2.然后 打开Xcode 工程,配置好相关 版本号,证书,release 模式
3. 使用命令行 打包 release ,这样Flutter.framework就会生成 release 产物
4.最后 在Xcode 工程内,按照正常 打包上传 包过程就可以了
1.进入 Flutter 工程 命令行操作
flutter clean
2 .清理之前debug 模式下的 残留产物 (或者手动进入文件夹删除)
rm -rf ios/Flutter/Flutter.framework
3. 获取 Flutter 的第三方依赖库
flutter pub get
4.编译 release 打包 产物
flutter build ios --release
(此时这里可以打包出 app 了, 为了安全起见,最好再次进入Xcode 清理一遍,直接打包上传,)
上面这一步,主要目的是生成 Flutter.framework 的release 版本产物
5.进入Xcode 工程,clean 一遍,检查相关证书配置,版本号等
6.直接 Xcode Archive 打包IPA 上传 苹果后台
最后上传成功:
思路: 通过检查Flutter.framework 它的CPU 架构支持
如果: 该产物 支持模拟器 x86_arm64 这样的架构的话,说明该产物就是 Debug 版的 产物
因为release 版的 产物是 不支持 模拟器CPU架构的.
输入终端命令: lipo -info 产物的物理路径
比如: lipo -info /Users/zzc/Documents/rce_flutter/ios/Flutter/Flutter.framework/Flutter
1. keystore 的生成
=
2.安卓工程配置 keystore
1. key.properties 内容
2. app build.gradle