• [问题求助] 小白求解生成iOS APP之迷茫
    不知道指的是哪个网站,我也没有苹果手机。
  • [技术干货] 10天学会flutter DAY10 flutter 玩转 动画与打包[转载]
    动画​ Flutter中的动画系统基于Animation对象的,和之前的手势不同,它不是一个Widget,这是因为Animation对象本身和UI渲染没有任何关系。Animation是一个抽象类,就相当于一个定时器,它用于保存动画的插值和状态,并执行数值的变化。widget可以在build函数中读取Animation对象的当前值, 并且可以监听动画的状态改变。AnimationController​ AnimationController用于控制动画,它包含动画的启动forward()、停止stop() 、反向播放 reverse()等方法。AnimationController会在动画的每一帧,就会生成一个新的值。默认情况下,AnimationController在给定的时间段内线性的生成从0.0到1.0(默认区间)的数字。AnimationController controller = AnimationController(  duration: const Duration(milliseconds: 2000), //动画时间 lowerBound: 10.0,    //生成数字的区间  upperBound: 20.0,    //10.0 - 20.0 vsync: this  //TickerProvider 动画驱动器提供者);Ticker​ Ticker的作用是添加屏幕刷新回调,每次屏幕刷新都会调用TickerCallback。使用Ticker来驱动动画会防止屏幕外动画(动画的UI不在当前屏幕时,如锁屏时)消耗不必要的资源。因为Flutter中屏幕刷新时会通知Ticker,锁屏后屏幕会停止刷新,所以Ticker就不会再触发。最简单的做法为将SingleTickerProviderStateMixin添加到State的定义中。import 'package:flutter/material.dart';void main() => runApp(AnimationApp());class AnimationApp extends StatelessWidget {  @override  Widget build(BuildContext context) {    return MaterialApp(      title: "animation",      home: Scaffold(        appBar: AppBar(          title: Text('animation'),        ),        body: AnimWidget(),      ),    );  }}// 动画是有状态的class AnimWidget extends StatefulWidget {  @override  State<StatefulWidget> createState() {    return _AnimWidgetState();  }}class _AnimWidgetState extends State<AnimWidget>    with SingleTickerProviderStateMixin {  AnimationController controller;  bool forward = true;  @override  void initState() {    super.initState();    controller = AnimationController(      // 动画的时长      duration: Duration(milliseconds: 2000),      lowerBound: 10.0,      upperBound: 100.0,      // 提供 vsync 最简单的方式,就是直接混入 SingleTickerProviderStateMixin      // 如果有多个AnimationController,则使用TickerProviderStateMixin。      vsync: this,    );       //状态修改监听    controller      ..addStatusListener((AnimationStatus status) {        debugPrint("状态:$status");      })      ..addListener(() {        setState(() => {});      });    debugPrint("controller.value:${controller.value}");  }  @override  Widget build(BuildContext context) {    return Column(      children: <Widget>[        Container(          width: controller.value,          height: controller.value,          color: Colors.blue,        ),        RaisedButton(          child: Text("播放"),          onPressed: () {            if (forward) {              controller.forward();            } else {              controller.reverse();            }            forward = !forward;          },        ),        RaisedButton(          child: Text("停止"),          onPressed: () {            controller.stop();          },        )      ],    );  }}动画状态监听:在forword结束之后状态为completed。在reverse结束之后状态为dismissedTween​ 默认情况下,AnimationController对象值为:double类型,范围是0.0到1.0 。如果我们需要不同的范围或不同的数据类型,则可以使用Tween来配置动画以生成不同的范围或数据类型的值。要使用Tween对象,需要调用其animate()方法,然后传入一个控制器对象,同时动画过程中产生的数值由Tween的lerp方法决定。import 'package:flutter/material.dart';void main() => runApp(AnimationApp());class AnimationApp extends StatelessWidget {  @override  Widget build(BuildContext context) {    return MaterialApp(      title: "animation",      home: Scaffold(        appBar: AppBar(          title: Text('animation'),        ),        body: AnimWidget(),      ),    );  }}// 动画是有状态的class AnimWidget extends StatefulWidget {  @override  State<StatefulWidget> createState() {    return _AnimWidgetState();  }}class _AnimWidgetState extends State<AnimWidget>    with SingleTickerProviderStateMixin {  AnimationController controller;  bool forward = true;  Tween<Color> tween;  @override  void initState() {    super.initState();    controller = AnimationController(      // 动画的时长      duration: Duration(milliseconds: 2000),      // 提供 vsync 最简单的方式,就是直接继承 SingleTickerProviderStateMixin      vsync: this,    );    //使用Color    tween = ColorTween(begin: Colors.blue, end: Colors.yellow);    //添加动画值修改监听    tween.animate(controller)..addListener(() => setState(() {}));  }  @override  Widget build(BuildContext context) {    return Column(      children: <Widget>[        Container(          width: 100,          height: 100,          //获取动画当前值          color: tween.evaluate(controller),        ),        RaisedButton(          child: Text("播放"),          onPressed: () {            if (forward) {              controller.forward();            } else {              controller.reverse();            }            forward = !forward;          },        ),        RaisedButton(          child: Text("停止"),          onPressed: () {            controller.stop();          },        )      ],    );  }}Curve​ 动画过程默认是线性的(匀速),如果需要非线形的,比如:加速的或者先加速后减速等。Flutter中可以通过Curve(曲线)来描述动画过程。import 'package:flutter/material.dart';void main() => runApp(AnimationApp());class AnimationApp extends StatelessWidget {  @override  Widget build(BuildContext context) {    return MaterialApp(      title: "animation",      home: Scaffold(        appBar: AppBar(          title: Text('animation'),        ),        body: AnimWidget(),      ),    );  }}// 动画是有状态的class AnimWidget extends StatefulWidget {  @override  State<StatefulWidget> createState() {    return _AnimWidgetState();  }}class _AnimWidgetState extends State<AnimWidget>    with SingleTickerProviderStateMixin {  AnimationController controller;  Animation<double> animation;  bool forward = true;  @override  void initState() {    super.initState();    controller = AnimationController(      // 动画的时长      duration: Duration(milliseconds: 2000),      // 提供 vsync 最简单的方式,就是直接继承 SingleTickerProviderStateMixin      vsync: this,    );    //弹性    animation = CurvedAnimation(parent: controller, curve: Curves.bounceIn);    //使用Color    animation = Tween(begin: 10.0, end: 100.0).animate(animation)      ..addListener(() {        setState(() => {});      });  }  @override  Widget build(BuildContext context) {    return Column(      children: <Widget>[        Container(          //不需要转换          width: animation.value,          height: animation.value,          //获取动画当前值          color: Colors.blue,        ),        RaisedButton(          child: Text("播放"),          onPressed: () {            if (forward) {              controller.forward();            } else {              controller.reverse();            }            forward = !forward;          },        ),        RaisedButton(          child: Text("停止"),          onPressed: () {            controller.stop();          },        )      ],    );  }}AnimatedWidget​ 通过上面的学习我们能够感受到Animation对象本身和UI渲染没有任何关系。而通过addListener()和setState() 来更新UI这一步其实是通用的,如果每个动画中都加这么一句是比较繁琐的。AnimatedWidget类封装了调用setState()的细节,简单来说就是自动调用setState()。​ Flutter中已经封装了很多动画,比如对widget进行缩放,可以直接使用ScaleTransitionimport 'package:flutter/material.dart';void main() => runApp(AnimationApp());class AnimationApp extends StatelessWidget {  @override  Widget build(BuildContext context) {    return MaterialApp(      title: "animation",      home: Scaffold(        appBar: AppBar(          title: Text('animation'),        ),        body: AnimWidget(),      ),    );  }}// 动画是有状态的class AnimWidget extends StatefulWidget {  @override  State<StatefulWidget> createState() {    return _AnimWidgetState();  }}class _AnimWidgetState extends State<AnimWidget>    with SingleTickerProviderStateMixin {  AnimationController controller;  Animation<double> animation;  bool forward = true;  @override  void initState() {    super.initState();    controller = AnimationController(      // 动画的时长      duration: Duration(milliseconds: 2000),      // 提供 vsync 最简单的方式,就是直接继承 SingleTickerProviderStateMixin      vsync: this,    );    //弹性    animation = CurvedAnimation(parent: controller, curve: Curves.bounceIn);    //使用Color    animation = Tween(begin: 10.0, end: 100.0).animate(animation);  }  @override  Widget build(BuildContext context) {    return Column(      children: <Widget>[        ScaleTransition(          child:  Container(            width: 100,            height: 100,            color: Colors.blue,          ),          scale: controller,        ),        RaisedButton(          child: Text("播放"),          onPressed: () {            if (forward) {              controller.forward();            } else {              controller.reverse();            }            forward = !forward;          },        ),        RaisedButton(          child: Text("停止"),          onPressed: () {            controller.stop();          },        )      ],    );  }}Hero动画​ Hero动画就是在路由切换时,有一个共享的Widget可以在新旧路由间切换,由于共享的Widget在新旧路由页面上的位置、外观可能有所差异,所以在路由切换时会逐渐过渡,这样就会产生一个Hero动画。import 'package:flutter/material.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget {  @override  Widget build(BuildContext context) {    return new MaterialApp(      title: 'Flutter Demo',      home: Scaffold(          appBar: AppBar(            title: Text("主页"),          ),          body: Route1()),    );  }}// 路由Aclass Route1 extends StatelessWidget {  @override  Widget build(BuildContext context) {    return Container(      alignment: Alignment.topCenter,      child: InkWell(        child: Hero(          tag: "avatar", //唯一标记,前后两个路由页Hero的tag必须相同          child: CircleAvatar(            backgroundImage: AssetImage(              "assets/banner.jpeg",            ),          ),        ),        onTap: () {          Navigator.push(context, MaterialPageRoute(builder: (_) {            return Route2();          }));        },      ),    );  }}class Route2 extends StatelessWidget {  @override  Widget build(BuildContext context) {    return Center(      child: Hero(          tag: "avatar", //唯一标记,前后两个路由页Hero的tag必须相同          child: Image.asset("assets/banner.jpeg")),    );  }}组合动画有些时候我们可能会需要执行一个动画序列执行一些复杂的动画。import 'package:flutter/material.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget {  @override  Widget build(BuildContext context) {    return new MaterialApp(      title: 'Flutter Demo',      home: Route(),    );  }}class Route extends StatefulWidget {  @override  State<StatefulWidget> createState() {    return RouteState();  }}class RouteState extends State<Route> with SingleTickerProviderStateMixin {  Animation<Color> color;  Animation<double> width;  AnimationController controller;  @override  void initState() {    super.initState();    controller = AnimationController(      // 动画的时长      duration: Duration(milliseconds: 2000),      // 提供 vsync 最简单的方式,就是直接继承 SingleTickerProviderStateMixin      vsync: this,    );    //高度动画    width = Tween<double>(      begin: 100.0,      end: 300.0,    ).animate(      CurvedAnimation(        parent: controller,        curve: Interval(          //间隔,前60%的动画时间 1200ms执行高度变化          0.0, 0.6,        ),      ),    );    color = ColorTween(      begin: Colors.green,      end: Colors.red,    ).animate(      CurvedAnimation(        parent: controller,        curve: Interval(          0.6, 1.0, //高度变化完成后 800ms 执行颜色编码        ),      ),    );  }  @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(        title: Text("主页"),      ),      body: InkWell(        ///1、不用显式的去添加帧监听器,再调用setState()        ///2、缩小动画构建的范围,如果没有builder,setState()将会在父widget上下文调用,导致父widget的build方法重新调用,现在只会导致动画widget的build重新调用        child: AnimatedBuilder(            animation: controller,            builder: (context, child) {              return Container(                color: color.value,                width: width.value,                height: 100.0,              );            }),        onTap: () {          controller.forward().whenCompleteOrCancel(() => controller.reverse());        },      ),    );  }}打包​ Flutter在打Release包时候回使用AOT,因此在对一个Flutter测试时候务必使用Release来进行测试。打包命令:flutter build apk 。当然我们需要打包时,还需要配置一些比如签名的内容。配置这些内容和普通Android工程没有区别,都是在build.gradle中进行,只是Flutter工程AS没有提供GUI。​ 在Flutter工程的android/app下面的build.gradle可以修改包名、版本等信息,这就不用多说了。获得签名文件之后,将它复制到flutter的android目录:​ 然后在app的build.gradle中配置:signingConfigs {        release {            keyAlias 'enjoy'            keyPassword '123456'            // 因为是放到父级的根目录,使用rootProject            // 如果放在这个build.gradle的同级,直接使用file            storeFile rootProject.file('enjoy.jks')            storePassword '123456'        }    }    buildTypes {        release {            // TODO: Add your own signing config for the release build.            // Signing with the debug keys for now, so `flutter run --release` works.            signingConfig signingConfigs.release        }    }饼图https://github.com/google/chartsStack布局中的fit属性与Image的fit类似,表示内容的扩充情况。默认为StackFit.loose表示Stack与内容一样大。如果设置为StackFit.passthrough则表示Stack父Widget的约束会传给Stack内部非Positioned的子Widget。效果如代码中的StackFit.dart原文链接:https://blog.csdn.net/u010755471/article/details/124691809
  • [版本公告] 华为云会议V8.5.5版本新特性:Mac客户端隐藏非视频与会者、iOS客户端麦克风浮窗等功能来啦~
    华为云会议V8.5.5版本新特性本月优化内容:PC端:1. Windows客户端1080P功能优化2. 网络研讨会Windows客户端虚拟背景性能优化3. Windows客户端麦克风异常提示优化4. Mac客户端支持开启原始声音5. Mac客户端支持隐藏非视频与会者6. 支持用户加入体验改进计划7. 华为云会议管理平台预约会议可添加直播地址移动端:1. iOS客户端支持会中麦克风浮窗2. iOS客户端支持画廊3*3画面3. 支持用户加入体验改进计划一、Windows客户端1080P功能优化适用场景:当企业开通了1080P功能,在硬件设备满足的情况下,Windows客户端企业用户入会后将收到设置提醒,可前往开启高清画质,让视频会议更清晰生动。二、网络研讨会Windows客户端虚拟背景性能优化适用场景:网络研讨会场景,Windows客户端开启虚拟背景时将减少CPU占用,提升会议体验。三、Windows客户端麦克风异常提示优化适用场景:Windows客户端与会者的麦克风缺失或异常时,进入会议、被主持人解除静音将收到麦克风异常提示,可前往检测或调试麦克风,更快恢复会议音视频状态。四、Mac客户端支持开启原始声音适用场景:Mac客户端支持开启原始声音,启用原始声音后,啸叫抑制和音频降噪等声音增加能力将被自动关闭。五、Mac客户端支持隐藏非视频与会者适用场景:当参会人数较多,想要保持会议中展示画面的美观和一致性时,可选择隐藏未开启视频画面与会者。六、支持用户加入体验改进计划适用场景:手机号码注册、微信注册、创建企业时,支持勾选《用户体验改进计划》。适用场景(桌面端):已注册用户登录客户端后,可选择加入或退出《用户体验改进计划》。适用场景(移动端):已注册用户登录客户端后,可选择加入或退出《用户体验改进计划》。七、华为云会议管理平台预约会议可添加直播地址适用场景:在华为云会议管理平台预约会议时,可添加并设置临时直播间,开启会议直播更便捷。八、iOS客户端支持会中麦克风浮窗适用场景:iOS客户端可开启会中麦克风浮窗,当与会者发言时,麦克风浮窗将显示当前会中音频状态,调整麦克风更方便。九、iOS客户端支持画廊3*3画面适用场景:iOS客户端多人入会时,支持画廊3*3画面,会中画面显示更加美观。(iPhone 7及以上设备支持)
  • [行业资讯] 谷歌遭重大挫折,疑似鸿蒙夺走不小份额,安卓系统领导地位或崩塌
    调研公司StockApps公布的数据指,近两年来安卓系统占有的市场份额快速下跌,已跌去近一成,跌穿七成份额,苹果iOS系统的市场份额显著上涨,中间的差额可能被鸿蒙系统占去。调研公司StockApps公布的数据显示,今年1月安卓系统占有全球智能手机市场的份额为69.74%,较2018年的77.32%显著下滑了7.58个百分点或9.8%,显示出安卓系统遭受了重大挫败。与此同时,苹果iOS全球市场份额则增长了6个百分点或31.4%,从2018年的19.4%提高到了25.49%,苹果并未全数夺取安卓系统让出的市场份额,而这两者合计占有的份额为95.23%,中间的差额部分或为鸿蒙系统占有。这几年全球市场除安卓系统和iOS系统之外,其他手机操作系统大多都已被边缘化,iOS系统和安卓系统一度占有全球智能手机市场99%的市场份额,而2020年以来出现的操作系统无疑就是鸿蒙系统。华为的鸿蒙系统在2020年Q3应用于华为电视产品上,一年后的2021年6月正式向手机用户推送,在时间上恰好位于安卓系统市场份额急跌的阶段,故此可以认为安卓系统丢失的市场份额除了被iOS系统夺走之外,另外部分市场份额就是被鸿蒙系统占有。华为推出鸿蒙系统的原因之一就在于谷歌在2019年Q4暂停给华为授权谷歌GMS服务,华为随即推出HMS服务替代谷歌GMS服务,随后双方的合作遭受了更多困难,于是华为在2020年推出了鸿蒙系统。鸿蒙系统在2021年6月上线后,短短半年时间就获得了2亿多手机用户的支持,同时通过与美的等家电厂商的合作以及自己的生态链业务带来1亿多用户,由此鸿蒙系统总计获得了3.4亿多的用户,成为全球发展最快的移动操作系统。其实安卓手机企业对谷歌也颇为不满,近几年谷歌对安卓手机企业的控制日益加强,限制安卓手机企业对安卓系统开发差异化功能,甚至禁止安卓手机企业开发自己的手势操作,导致安卓手机日益同质化而陷入价格战之中;同时谷歌又要求安卓手机企业搭载越来越多的谷歌应用,导致安卓系统日益臃肿,卡顿严重。由此安卓手机企业都对谷歌颇为愤怒,不过目前来说由于谷歌的诸多应用在全球市场占据优势地位,海外消费者对谷歌的应用属于刚需,安卓手机企业只能敢怒不敢言,唯有华为手机敢于表示不同意见,而谷歌也对华为手机采取了措施。面对安卓系统在智能手机市场的挫败,不知如今的谷歌有没有后悔呢?安卓系统在智能手机市场的地位被削弱,可能会导致更多手机操作系统出现,谷歌在移动操作系统市场的领导地位或许就此崩解。       原文标题 : 谷歌遭重大挫折,疑似鸿蒙夺走不小份额,安卓系统领导地位或崩塌
  • [行业资讯] 果粉许愿:iPhone NFC功能,早日全面放开吧!
    iOS系统的封闭一直以来都毁誉参半,支持的人认为这是iOS系统安全稳定的基础,正是由于封闭,才有了iOS系统相对良好的体验,反对的人则认为这会导致一些安卓手机有的功能无法在iPhone上无法使用或体验较差,虽然可以通过系统越狱方式来绕过限制,但这并非主流方法,且对于玩机经验较差的iPhone用户来说,该方法可能会导致一些不可预知的问题出现,所以果粉们都希望苹果官方来放开某些限制。对于可能会被苹果官方逐步放开的限制,NFC功能算得上一个,实际上从iPhone 6开始就已经支持NFC功能,然而时至今日,NFC功能在iPhone上依然只是部分开放,这让很多用户不满,凭什么在安卓手机上体验良好的功能,到了iPhone上就要被阉割的不成样子呢?虽然iPhone上的NFC功能对第三方支持度不高,但对自家iOS系统中apple pay却有相当完美的支持,这使得很多人质疑苹果在NFC功能方面有垄断嫌疑,否则为什么不一视同仁公平对待呢?正是因为这个原因,苹果又被欧盟盯上了,近日欧盟指控苹果对第三方使用iPhone上NFC功能进行了限制,却对自家功能一路开绿灯放行,PayPal(国际支付平台)就在指控苹果方面非常积极,希望能在iPhone上让PayPal有更多基于NFC功能的访问权限,而苹果对此却一口回绝,声称apple pay并非欧洲用户唯一支付可选项,言下之意就是想放开限制,门都没有。欧盟打算对苹果这种行为进行反垄断诉讼,由于苹果目前没有任何放松迹象,如果双方僵持不下,这又将是一场旷日持久的反垄断官司,但就之前交锋经历来看,欧盟胜算似乎更大一些。苹果对于iPhone上NFC功能开放速度确实足够缓慢,iPhone 6就已经有的功能,到了iOS11才被允许开发者访问部分功能,可这也是最让人不满的,但迄今为止能使用相关功能API接口的应用程序少的可怜。直到iOS13,苹果才允许iPhone支持后台自动化读取NFC标签功能,但却限定iPhone XR及后续机型才能使用(可iPhone 6就已经支持NFC功能),反正就百般限制。实际上,苹果想要全面放开NFC功能,并没有任何技术上的障碍,而对于NFC功能在使用体验上的提升,苹果心里也是清楚的,但就是进展缓慢,更多可能是利益上的考虑。在座各位,你们觉得什么时候才会在iPhone上全面开放NFC功能呢?       原文标题 : 果粉许愿:iPhone NFC功能,早日全面放开吧!
  • [行业资讯] 华为鸿蒙系统,相比谷歌安卓、苹果iOS,优势和劣势是什么?
    截止至目前,华为鸿蒙系统已经覆盖了手机用户2.4亿,而搭载鸿蒙的生态设备发货量超过1.5亿台,合计超过了3.9亿了。更重要的是,鸿蒙的开源项目OpenHarmony,在全球下载量高达6300万次,已经有44款产品已经获得了OpenHarmony 生态产品兼容性证书,80余款软硬件产品正在通过兼容性测评,还有11款芯片支持OpenHarmony,另外35款芯片在适配中……可以说,鸿蒙已经是当前第三大生态体系了,不说PC端的的windows、MacOS的话,鸿蒙已经只比安卓、iOS这两大生态体系稍逊色一点,但已经形成了鼎立之势了。那么问题就来了,华为鸿蒙系统,与谷歌安卓、苹果iOS相比,优势和劣势是什么?首先对比苹果iOS,最重要的就是鸿蒙是一个开放的系统,鸿蒙的开源版所有人都可以用,苹果的iOS是闭源的,这个算是优点之一。另外鸿蒙系统是一个大一统的系统,就可以搞定手机、手表、平板、、汽车智能座舱等产品,苹果则是不同产品不同的系统。大一统的好处是,各大系统之间可以进行信息流转,比如华为的超级终端等,在iOS系统中就无法实现。此外,在测试中,大家发现鸿蒙系统在功耗上,比iOS控制得更好,更加省电。接着对比安卓,相比于安卓,由于鸿蒙采用微内核,同样也是一个大一统的系统,所以可以搞定手机、手表、物联网等各种各样的设备,这一点比安卓强,这也是谷歌要推FuchsiaOS的原因,因为FuchsiaOS也是一个大一统的系统,但如今进展缓慢。另外同样的,也因为鸿蒙是微内核,大一统,所以可以实现设备之间的信息无缝流转、切换,比如超级终端功能,谁用谁知道。另外鸿蒙相比于安卓,更为流畅、省电,这对于移动设备,特别是手机而言,特别重要。当然,最最重要的是,鸿蒙系统是属于我们自己的,而安卓、iOS是别人的,别人的东西再好也是别人的,自己的东西再不好也是自己的,有了它就不怕被断供,这个意义重大。不过,相比于安卓、iOS,鸿蒙最大的缺点就是生态,鸿蒙当前还是借助于安卓生态,自己的生态不够完善,专用APP非常少,还得靠安卓APP来实现自己的生态,这一点是鸿蒙最大的劣势。       原文标题 : 华为鸿蒙系统,相比谷歌安卓、苹果iOS,优势和劣势是什么?
  • [行业资讯] 苹果官宣iPhone 14,大家不用再猜了!
    最近一段时间,网上对于iPhone 14系列机型的讨论猜测那是相当热烈,相关消息上热搜简直不要太轻松,就在前天,iPhone 14有望实现息屏显示功能还上了热搜榜第一名,这项苹果“极为先进”的功能,果粉应该是期待已久了。对于这么一个在安卓手机上已经烂大街,甚至更早的诺基亚手机上就已经存在的功能,苹果在2022年才有可能推出,简直让人无语到了极点,虽然还只是猜测,可但凡苹果还要点脸面,息屏显示功能就不应该再拖延了。不管之前之前对于iPhone 14系列机型爆料到了什么程度,始终都处在猜测阶段,只有等到苹果官方自己放消息,某些信息才能算是得到正式确认,近日,苹果泰国官方放出了一则时长15秒的apple pay宣传视频,其中透露了一项很重要的内容,iPhone 14 Pro/Max的感叹号屏被实锤了。小智查了下账号简介,确实是以Apple Inc.结尾,确认是苹果官方账号没什么问题,苹果通过影响力较小的泰国媒体渠道来放风,这也符合苹果一贯以来的做事风格,一些新消息不会第一时间交给大媒体,总是将影响力控制在一定范围内,通过普通用户转发来将消息进行有限的传播,即达到目的,又不过分张扬。这应该算是自刘海屏首次在iPhone X上出现后,苹果手机的最大改变了,和刘海屏相比,这一大一小两个挖孔确实占比面积要小一些,但多出的屏幕空间似乎也难以得到有效利用,要是苹果没有像当年强制要求适配刘海屏一样要求APP开发者适配双挖孔屏,那基本能肯定这就是一种过渡性设计风格,为的就是在将镜头全部放入屏下之前做技术过渡。还有另一个细节问题值得思考,在这则苹果泰国官方宣传视频中,只出现感叹号屏的iPhone 14 Pro和apple watch,两款标准版并未现身,个人猜测应该是和去年一样,没必要拿出来说。外观不用再猜,接下来更多考虑应该是功能配置,有消息称iPhone 14 Pro/Max上的高配屏刷新率可被控制在1Hz-120Hz之间(上一代是10Hz-120Hz),以便更精确控制电量使用,而标准版依然无缘120Hz刷新率。至于丑不丑的问题,也没得算了,双挖孔实锤,不喜欢的就只能去买标准版了。       原文标题 : 苹果官宣iPhone 14,大家不用再猜了!
  • [行业资讯] 苹果发布紫色iPhone12:网友称绿色版不香了
    21日凌晨一点举办的苹果春季发布会,大家都看了吗?除了iPad Pro、iMac和Apple TV产品以外,一直受到人们关注的AirTag智能硬件也出现在本次发布会上。某种意义上来说,本次春季发布会弥补了去年秋季发布会的不足,带来的新品也比上次“含金量”高了不少。值得一提的是,这次发布会依然是录播,延续苹果公司的一贯水准,整场发布会的运镜和制作十分精美。回归正题,我们还是先来回顾下本次发布会的重点内容。(本文图片截图自苹果发布会视频)紫色iPhone吸睛iPhone又迎来一款全新配色!苹果宣布推出采用紫色配色的iPhone12,将在本周五接受预定。当然,除了全新配色以外iPhone就暂时没有其他的亮点升级了。不过很多网友表示,看到了紫色版本的iPhone,好后悔此前买了绿色款的iPhone,真是欲哭无泪。AirTags终于来了AirTags终于现身,原来是这么一枚硬币大小的智能硬件。如此前猜测的一样,它可以帮助你寻找自己的物品,通过精确查找技术搭配U1芯片、iPhone陀螺仪和距离传感器技术等等,以后再也不怕东西弄丢了。AirTags通过纽扣电池供电,最长续航时间据说长达一年。可通过蓝牙及UWB超宽频技术跟手机连接,放在钥匙,书包甚至宠物身上,起到定位查找的效果。当然还有人们最关注的隐私问题,AirTag主要是追踪人,能够检测位置AirTag和更换物品提醒。苹果还对其设置了一系列的功能,假如你身边被人放了个AirTag,手机也会提醒告知你。不过这么一枚小东西也不便宜,售价29美元,打包四枚售价99美元。全新改款的iMac,七种配色新一代iMac终于来了,这次不仅仅升级了M1芯片,还在外形上实现了新的设计突破。新一代iMac的边框也不再如以往那般圆润,而是更加方正。窄边框带来的另一个变化是,屏幕尺寸提升到了24英寸,5K分辨率。新款的iMac只比iPhone 12的7.4毫米厚了4.1毫米,很难想象这是一款一体机的造型。更重要的是,新iMac去掉了上代尾部的凸出部分,机身变成了一块完完整整平板。相比上代产品,新iMac整体体积减少了 50%,全部重量不到5kg,轻了将近一半。最有竞争力的还是自研M1芯片的植入,其超低功耗和发热让产品性能瞬间拉满。以前可能没有人会想到,M1芯片出现在iMac上竟然会带来如此大的改变吧。最后要聊聊iMac的配色设计了,这次竟然带来了蓝、绿、粉、银、黄、橙、紫 7 种颜色,差不多可以召唤一道彩虹了。新iMac的配件也有所变化,比如带有触控ID指纹识别的妙控键盘等。新iMac还在电源适配器中加入了以太网口,用户可以直接使用电源线来传输网络数据,避免了绕线混乱和桌面摆放的问题。24英寸新款iMac起价9499元,将于5月中下旬发售。
  • [问题求助] iOS集成OBS调用报错
    按照文档一步一步集成OBS SDK,运行时报错:terminating with uncaught exception of type NSException代码如下: OBSStaticCredentialProvider *provider = [[OBSSTSCredentialProvider alloc] initWithAccessKey:@"xxxx" secretKey:@"xxx" stsToken:@"xxxx"]; provider.securityToken = @"xxxxx"; OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURL:@"https://obs.cn-east-3.myhuaweicloud.com" credentialProvider:provider]; OBSClient *client = [[OBSClient alloc] initWithConfiguration:conf]; OBSPutObjectWithDataRequest *request = [[OBSPutObjectWithDataRequest alloc] initWithBucketName:@"isong" objectKey:@"test/ios.txt" uploadData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding]]; request.uploadProgressBlock = ^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { NSLog(@"%0.1f%%",(float)floor(totalBytesSent*10000/totalBytesExpectedToSend)/100); }; [client putObject:request completionHandler:^(OBSPutObjectResponse *response, NSError *error) { }];Swift 集成也是报同样的错误
  • [问题求助] IOS上传图片成功后没有返回上传成功图片的URL地址
  • [技术干货] 使用Cloud DB构建APP 快速入门 - iOS篇
    概述此示例应用演示了如何快速的使用Cloud DB构建简单的图书管理服务。通过快速入门和示例应用,您将会了解到如下信息:如何使用Cloud DB进行应用开发。应用数据如何写入到Cloud DB。如何实现数据的查询。实时侦听数据的更改。体验端云数据同步等功能。开发准备使用Cloud DB构建应用服务,需要完成以下准备工作:您已经在开发者联盟官网注册帐号并通过实名认证,详细请参见帐号注册认证。您已经在AppGallery Connect控制台上创建项目和应用,详细请参见创建项目。示例应用使用了认证用户的相关权限,需要开通AppGallery Connect认证服务中“匿名帐号”服务,详细请参见认证服务。您已经获取到示例代码,请从示例代码获取。您已在本地安装Xcode。启用服务使用Cloud DB服务前,您需要先启用服务。登录AppGallery Connect网站,选择“我的项目”。在项目列表页面中选择项目,单击项目下需要启用云数据库服务的应用。在导航树上选择“构建 > 云数据库”。单击“立即开通”,开通云数据库服务。            (可选)如您还未选择数据处理位置,需要您先设置数据处理位置,具体操作请参见设置数据处理位置。服务初始化成功后,即启用云数据库服务成功。新增和导出对象类型您需要基于AppGallery Connect控制台创建对象类型,请您遵循操作步骤创建示例中涉及的对象类型,并导出Objective-C格式的对象类型文件。不允许修改导出的Objective-C格式文件,否则会导致数据同步功能异常。登录AppGallery Connect网站,选择“我的项目”。在项目列表页面中选择项目,单击项目下需要创建对象类型的应用。在导航树上选择“构建 > 云数据库”。单击“新增”,进入创建对象类型页面。            输入对象类型名为“BookInfo”后,单击“下一步”。单击 +新增字段,新增如下字段后,单击“下一步”。表1 字段定义表字段名称类型主键非空加密默认值idInteger√√––bookNameString––––authorString––––priceDouble––––publisherString––––publishTimeDate––––shadowFlagBoolean–––true单击 +新增索引 ,设置索引名为“bookName”,索引字段为“bookName”后,单击“下一步”。按照如下要求设置各角色权限后,单击“下一步”。单击“确定”。创建完成后返回对象类型列表中,可以查看已创建的对象类型。单击“导出”。                                                        选择导出文件格式,选择“Objective-C格式”。单击“导出”。文件将会导出至本地,其内包含该版本中所有的对象类型。导出的Objective-C格式文件在后续步骤用于添加至本地开发环境。新增存储区可基于AppGallery Connect控制台在云侧创建数据存储区,请您遵循操作步骤创建一个存储区名称为“CloudDBDemo”的存储区。登录AppGallery Connect网站,选择“我的项目”。在项目列表页面中选择项目,单击项目下需要创建存储区的应用。在导航树上选择“构建 > 云数据库”。选择“存储区”页签。单击“新增”,进入创建存储区页面。输入存储区名称为“CloudDBDemo”。单击“确定”。创建完成后返回存储区列表中,可以查看已创建的存储区。配置开发环境使用CocoaPods集成SDK。集成AGC SDK,详细请参见集成AGC SDK。在podfile文件中添加Cloud DB SDK依赖。pod 'AGConnectDatabase', '~>1.0.4.300'执行pod install,然后打开.xcworkspace文件查看该项目。pod install注意:使用SQLCipher默认生成的文件权限为0644,建议将文件权限修改为0640,保证文件在使用过程中的安全性。每次pod install后,在pod工程中的“TARGETS > SQLCipher > Build Settings > Other C Flags”文件中添加“-DSQLITE_DEFAULT_FILE_PERMISSIONS=0640”。Cloud DB iOS SDK依赖SQLCipher,而SQLCipher是基于SQLite开发的开源组件,由于iOS SDK并没有直接集成SQLCipher源码,所有我们无法提供已修复漏洞的SQLCipher版本。但是,我们会持续关注SQLite上的漏洞信息,当发现新的漏洞时,我们会及时分析和验证,确认漏洞可以修复时,会更新至漏洞补丁表中,您可以根据应用需要选择是否修复该漏洞,详细请参见SQLite漏洞修复。添加对象类型文件在开发应用时,可直接将AppGallery Connect控制台上导出的Objective-C格式文件添加至本地开发环境,并通过AGConnectCloudDB类中的createObjectType方法实现对象类型的定义和创建。在进行本地应用开发时,无需再次创建对象类型。将已在AppGallery Connect控制台上导出的全部Objective-C格式文件添加至本地开发环境。初始化Cloud DB,通过AGConnectCloudDB类中的createObjectType方法实现对象类型的定义和创建,详细请参见初始化。初始化在配置完开发环境后,就可以使用云数据库进行应用开发。开发应用时,需要先执行初始化操作,初始化AGConnectCloudDB、创建Cloud DB zone和对象类型。通过initEnvironment方法初始化AGConnectCloudDB。NSError *error = nil;[AGConnectCloudDB initEnvironment:&error];通过shareInstance方法获取AGConnectCloudDB实例,并使用createObjectType方法创建对象类型。self.agcConnectCloudDB = [AGConnectCloudDB shareInstance];NSError *createError= nil;[self.agcConnectCloudDB createObjectType:[AGCCloudDBObjectTypeInfoHelper obtainObjectTypeInfo] error:&createError];创建Cloud DB zone配置对象,并打开该Cloud DB zone(以Cloud DB zone的同步属性为缓存模式、访问属性为公共存储区为例),详细请参考AGCCloudDBZoneConfig。AGCCloudDBZoneConfig *zoneConfig = [[AGCCloudDBZoneConfig alloc] initWithZoneName:zoneName syncMode:AGCCloudDBZoneSyncModeCloudCache accessMode:AGCCloudDBZoneAccessModePublic];__weak typeof(self) weakSelf = self;[self.agcConnectCloudDB openCloudDBZone2:zoneConfig allowCreate:YES callback:^(AGCCloudDBZone * _Nullable zone, NSError * _Nullable error) { weakSelf.dbZone = zone;}];写入数据在本节主要介绍如何在应用程序中进行数据写入操作,以便您了解如何使用Cloud DB SDK实现数据的写入。在应用界面中,增加了“添加”按钮,用于用户新增数据,并在代码中通过executeUpsert实现数据的写入。- (void)executeUpsertWithBooks:(NSArray <BookInfo *> *__nonnull)books complete:(void(^)(BOOL success, NSError *error))complete { if (books.count == 0) { return; } [self.dbZone executeUpsert:books onCompleted:^(NSInteger count, NSError * _Nullable error) { if (error) { if (complete) { complete(NO, error); } } else { if (complete) { complete(YES, nil); } } }];}查看数据获取数据变化用户在应用界面中新增的数据,将会被存储在云侧。在端侧注册数据变化侦听器,当云侧数据发生变化时,端侧能够感知数据变化,及时刷新本地应用数据。通过查询条件与subscribeSnapshotWithQuery方法组合使用,可以指定侦听对象,当侦听对象的数据发生变化时,端侧会收到通知,根据快照获取变化的数据信息,从云侧同步数据至端侧应用。- (void)subscribeSnapshotComplete:(void(^)(NSArray *bookList, NSError *error))complete { AGCCloudDBQuery *query = [AGCCloudDBQuery where:]; [query equalTo:@YES forField:@"showFlag"]; [self.dbZone subscribeSnapshotWithQuery:query policy:AGCCloudDBQueryPolicyCloud listener:^(AGCCloudDBSnapshot * _Nullable snapshot, NSError * _Nullable error) { if (snapshot != nil) { NSArray *bookList = snapshot.snapshotObjects; if (complete) { complete(bookList, nil); } } else { if (complete) { complete(nil, error); } } }];}数据查询和排序在应用界面中,增加了“查询”按钮和排序功能,通过executeQuery实现异步方式查询数据。- (void)queryAllBooksWithResults:(void(^)(NSArray * bookList, NSError *error))results { AGCCloudDBQuery *query = [AGCCloudDBQuery where:]; [self.dbZone executeQuery:query policy:AGCCloudDBQueryPolicyCloud onCompleted:^(AGCCloudDBSnapshot *_Nullable snapshot, NSError *_Nullable error) { if (error) { if (results) { results(nil, error); } } else { NSArray *bookList = snapshot.snapshotObjects; if (results) { results(bookList, nil); } } }];}通过查询与limit方法组合,实现限制查询数据显示条数的功能;与orderByAsc方法或者orderByDesc方法组合来实现数据的排序功能。- (void)fuzzyQueryAGCDataWithBookInfo:(nonnull BMQueryBookDataModel *)bookInfo results:(void(^)(NSArray * bookList, NSError *error))results { AGCCloudDBQuery *query = [AGCCloudDBQuery where:]; //contains [query contains:bookInfo.bookName forField:@"bookName"]; //greaterThanOrEqualTo [query greaterThanOrEqualTo:bookInfo.minBookPrice forField:@"price"]; //lessThanOrEqualTo [query lessThanOrEqualTo:bookInfo.maxBookPrice forField:@"price"]; //limit [query limit:(int)bookInfo.count]; //orderByAsc [query orderByAsc:@"bookName"]; [self.dbZone executeQuery:query policy:AGCCloudDBQueryPolicyCloud onCompleted:^(AGCCloudDBSnapshot *_Nullable snapshot, NSError *_Nullable error) { if (error) { if (results) { results(nil, error); } } else { NSArray *bookList = snapshot.snapshotObjects; if (results) { results(bookList, nil); } } }];}应用编译运行到此,您已经了解了示例应用的开发流程。您可以编译并在iPhone手机或模拟器上运行示例应用。如需体验示例应用,您可以在A手机或A模拟器上打开应用,并新增数据;然后您可以在B手机或B模拟器上打开应用,查看在A手机或A模拟器上写入的数据。
  • [技术干货] Cisco操作系统IOS简介
    一、Cisco操作系统IOS简介此IOS非彼ios,Cisco lnternetwork Operating System (IOS)是为Cisco设备配备的系统软件。它是Cisco的一项核心技术,应用于路由器、局域网交换机、小型无线接入点、具有几十个接口的大型路由器以及许多其它设备。Cisco lOS可为设备提供下列网络服务∶基本的路由和交换功能安全可靠地访问网络资源网络可伸缩性不同于Windows的图形化窗口界面,动动鼠标就能完成很多操作。IOS更像是Linux,通过访问命令行界面(CLI)敲入命令来完成操作。一般访问CLI的方式有:
  • [行业资讯] 现在的荣耀,像极了曾经的华为
    导语:Magic 3 系列冲进“明星安卓旗舰”卡位战。8 月 12 日,荣耀再次召开产品发布会,这也是荣耀继 6 月以来的第三场发布会。尽管在预告阶段荣耀就早已对新产品有过多次剧透,但对于时隔三年再次发布的 Magic 系列,还存在许多的未知性。更为重要的是,作为荣耀的旗舰系列,无论从产品本身还是对荣耀手机业务而言,Magic 3 系列可以说带着十分重要的使命登场。一方面,作为荣耀独立后的首发旗舰,Magic 3 需要彰显出足够的技术实力;另一方面,对于荣耀待兴的手机业务以及冲击高端的目标,Magic 3 在其中极为重要。Magic 3 系列,很像华为 Mate 40 Pro下午 19:30 ,发布会如期召开。在进入发布环节之前,赵明依旧先分享了荣耀的近况。他表示,荣耀 50 系列拿下 2021 年 7 月 2000 ~ 4000 元价位销量第一。此外,荣耀手机周销份额回升到 14.6%,重回国内第三。接着,本次发布会的重头戏——荣耀 Magic 3,登场。据赵明介绍,荣耀 Magic3 采用 89° 超曲屏,拥有 94.86% 屏占比与 10bit 真 10.7 亿色,支持 120Hz 刷新率与 1920Hz 高频 PWM 调光。配置上,荣耀 Magic3 系列全系采用骁龙 888+,同时搭配 OS Turbo X 系统引擎,包含超低时延引擎、抗老化引擎和智慧内存引擎。此外,荣耀自研 GPU Turbo X 和 LINK Turbo X 技术也首次移植到骁龙 8 系列平台上。充电方面,荣耀 Magic3 系列内置 4600mAh 电池,配备超导六方晶石墨烯材质。其中,荣耀 Magic3 支持 66W 有线超级快充;荣耀 Magic3 Pro 支持 66W 有线和 50W 无线双超级快充。在发布会上,赵明尤其强调了 Magic 3 的影像功能,其背部圆环形的影像模块同样是机身设计的一大亮点,分别来看:荣耀 Magic3 搭载 5000 万像素大底主摄,6400 万像素黑白摄像头以及 1300 万广角微距镜头,支持激光对焦。荣耀 Magic3 Pro 则搭载了 5000 万像素大底主摄,6400 万黑白摄像头、6400 万潜望式长焦摄像头以及 1300 万广角微距镜头,同时支持 8*8 dToF 激光对焦系统。另外,荣耀还推出全新自研 HONOR Image Engine 图像引擎,可异构不同芯片平台,插件化整合芯片能力。售价方面,荣耀 Magic3 系列的售价覆盖 4599-6799 元,另外,荣耀Magic3 至臻版12GB+512GB 售价 7999 元。截至荣耀 Magic 3 系列发布,赵明此前在微博预告发布的旗舰和高端两款产品就已悉数登场完毕。从六月发布的荣耀 50,再到今日的 Magic 3,不难看出荣耀在完全独立之后的迅猛发力,同时。荣耀手机业务的表现也伴随着接踵而至的新品而逐渐起势。手机业务回温赵明此前表示,今年 4 月,荣耀手机业务达到了最为黑暗的时刻,彼时的市场份额仅剩 3%。其中的原因也不难得知,当时独立仅半年的荣耀尚未做好充分的准备,未从被制裁的阴影中脱离,芯片供应掣肘问题依然存在。即使推出了荣耀 V40,但由于存量货消耗殆尽,新的供货不足,导致出货量难以跟上。不过,在荣耀 50 发布会上,赵明就已表示渡过了黑暗,手机业务占比已开始触底反弹,截至五月底,市场份额已经回到了 9.5%。尽管距离荣耀品牌手机高峰时期 16.7% 的市场份额还有些距离,但其上涨的势头,还在继续。自荣耀 50 推出后,荣耀手机业务的市场份额正一点点往回吞噬——7 月 26 日,据荣耀内部消息,荣耀市场周份额回升至 14.6%。另外,关于全球供货以及部署问题,赵明表示荣耀已经在全球 50 多个国家恢复了业务,今年海外市场将以恢复为主。如今,Magic 3 的发布,让这一手机市场格局又多了一个变量。在不到半年的时间里,荣耀将达到冰点 3% 的市场份额快速拉升至 9.5%,在其背后,是多方面的因素加持,包括品牌势能、研发实力以及独有的渠道商优势。品牌势能自不必多言,尽管与华为彻底分割,但曾经的荣耀在华为护荫之下早已不断积累品牌势能,即便荣耀独立之后成为一个新主体,但荣耀,依旧是被大众熟知的手机厂商之一。也就是说,荣耀是新公司,但并非新品牌。另外,在团队组建上,雷锋网了解到,荣耀目前拥有 8000 多名员工,其中绝大多数是从华为体系中分拆出来,涵盖了研发、销售、营销、采购、制造、服务、财经等端到端的完整体系。在这之中,研发人员占了半数,由原华为终端北京、西安等四个研发基地的人员整建制地进入荣耀,包括影像、芯片、软件研发、架构设计等团队。据荣耀产品线总裁方飞透露,研发团队中有一部分人曾参与了华为最早的芯片的孵化,对芯片底层有所了解,而此次荣耀 Magic 3 搭载的高通 888+ 也是研发团队实现调试整合之后才应用在产品之中。和其它手机厂商相比,除了继承了华为大部分技术团队,荣耀另外一个独有的优势便是其强大的渠道商资源。雷锋网(公众号:雷锋网)了解到,荣耀的股东囊括了中国市场主要的电子产品经销商,有 30 余家渠道商和荣耀进行深度绑定,这保证了荣耀的产品可以分销至线下渠道,进入中国最大的细分市场。有了“后援部队”的支持,荣耀在「全渠道」的规划布局下也在同步发力线下门店。据赵明透露,目前全国已有上千家门店同时在建。不难看出,荣耀既承袭了华为的部分内功,也具备独有的渠道外力相助,荣耀手机业务的回温,便不难理解。谁能成为国内“明星安卓旗舰”?事实上,距离上一次荣耀发布手机,仅仅过去了两个月——在三个月里连发两款高端机型,这在手机行业里是极为少见的。值得一提的是,荣耀的老对手小米在本周也发布了 Mix 4,无论是售价或者定位,荣耀 Magic 3 与小米 Mix 4 都存在多维度的较量;而战场,自然是各家手机产商都想吃下的高端市场。事实上,在荣耀官宣独立之时,包括小米 OV 在内的国内手机厂商早已暗流涌动——小米接连推出了小米 11、小米 11 Pro、小米 11 Ultra;vivo 发布了 vivoX60 pro+;OPPO 则是凭借 FindX3 Pro 入场……雷锋网了解到,华为空出的高端市场份额,绝大部分是被苹果、三星收割,而国内厂商,则多是处于中高端阶层。据旭日大数据发布的 2021 年 Q1 全球畅销手机市场分析报告,800 美元以上的机型中,除了华为,国内厂商仅有一加、OPPO 各 1 款上榜,但排名相对靠后;600-800 美元畅销机型中,尽管 OV 均有上榜,但从销量来看,苹果和三星遥遥领先,其它手机品牌则是混战模式。“由于明星安卓旗舰的缺位,今年下半年的时间窗口对于各大厂商来说至关重要”,Canalys 分析师刘艺璇向雷锋网表示。这场国内“明星安卓旗舰”的卡位之战,并未结束。雷锋网注意到,在发布会上,荣耀在部分参数的介绍时多次对标苹果 iPhone 12 Pro,类似的“对标友商”操作,在华为此前的发布会上也时有出现。另外,发布会结束后,有网友指出荣耀 Magic 3 在 slogan、外观等多个方面与华为 Mate 40 十分接近。尽管赵明在发布会结束后的采访中进行了澄清,称二者没有关系,但荣耀身上,不难窥见曾经华为的影子。从表象来看,现在的荣耀,像极了曾经的华为。但赶超,则还需在内里上多下功夫。来源 |“雷锋网”作者 | 肖漫原文链接 |  https://www.leiphone.com/category/weiwu/bblR6ptCkpzA3zXz.html
  • [交流吐槽] 在华为做测试员是一种什么体验?带你深入了解华为
    对于许多测试员而言,进入大厂是他们的终极目标,而华为更是大厂中优佳的选择。在确立一个目标或是进入一家公司之前,首先我们需要对这个公司进行全面了解,这样才能确定公司的运营模式与理念是否和自己的习性相符。本期,笔者便带大家来探一探,开启万物互联的鸿蒙时代——华为公司。01鸿蒙系统不久前,华为上线了鸿蒙系统,与预料的劲爆场面不同,整个市场表现得非常沉默,媒体的宣传力度也没有以往苹果上新那么大,那么为什么会出现这种状况呢?作为一个在国际通信领域上与三星,苹果等巨头平分秋色的企业,却频繁被国人所诟病。这与之前的民族主义有关,甚至出现相关的标语“不买华为不是中国人”。笔者找遍全网发现,华为成为国货代名词是出现在p9上市那年,当时的微博官号也出现“让我们荣耀的新国货”等标语,更早之前的荣耀系列也早有绑定民族产品的端倪,14年发布了荣耀6plus的时候,就有“树立国货精品形象”的标语。其实作为国货品牌,将产品与民族对标问题并不大,尤其是今天,华为作为国货精品的概念深入人民内部。其实其他手机品牌也有类似的宣传,但只有华为作为典型企业被攻击得比较惨。说回鸿蒙系统,相对于安卓与ios不同,他是一个面向未来的产品,它既不是安卓和ios等系统的替代品,也不该成为寄托民族大义的希望,鸿蒙背后的分布式系统思路,是符合更自然,更高效的人机交互演变方向。而这个特点需要在各大用户和厂商的配合下才能发挥最大的效果,目前来说,鸿蒙可以在旧的手机上更新,当然如此急迫推出鸿蒙的背后,也是在经历美国多重制裁之下的反击。02华为的企业模式成立于87年的华为,在国内已经算得上是老牌企业,他们的企业文化中,最出名的要数狼性文化,这一文化标准,也被国内各大中小型企业效仿,也被大众熟知且吐槽。有网友评论说,狼的寿命只有十几年,那入职十多年后经历了黄金阶段就可以退休了。当然这么想是在做梦,哈哈。但不得不说,华为的狼性文化中,员工的福利也是挺不错的。虽然华为这几年推崇奋斗和996工作,35岁平庸和40岁平庸,让码农非常反感,但是华为对待员工真的很大方,比如离职这一块,在华为工作没有满8年的员工,员工主动离职,华为也会给N+1补偿。如果满了8年,华为除了会给N+4补偿,还会给10万股票的分红,据某只被优化掉的员工透露,公司在劝退后给予了10万股票,提前退休,每年可领25万元分红。其实华为的福利很简单,就是给钱,双十一准备20亿员工瓜分,还多发一个月工资,餐补是吃多少报销一半。员工吃饱了,自然会有更大的动力。目前华为的上班时间也没有传言中的可怕,以研发的弹性工作时间为例,核心时间9:00-17:30,12:00-1:30和17:30-18:00算休息时间,不计入工作时长,也就是说,9:00上班的话,19:00下班就可以满足基本工作时间8小时。也可以8:00上班17:30下班。而目前学习狼性文化的其他企业,无法承担华为能给到的薪资福利,但是在工作时长和强度上一味模仿甚至超越,导致大家对于狼性文化怨声载道,也不太符合目前发展中的社会需求。合理让利的华为在招聘时对研发人员的投入则下了更大的成本。03招聘情况【华为的人才需求】华为为什么能在芯片断供后拿出来备用方案,就是因为在前期研发投入了巨大的成本,这一点从招聘就可以看出端倪,所以说技术人员入职华为非常有优势。目前,华为对于技术岗位中的工程师需求比较大,我们可以看到岗位要求有5G无线射频硬件的开发,那必然也需要相应的测试岗位,由于研发投入大,所以工程师待遇占比很高,那么适合应届毕业生的岗位有哪些呢?目前华为对于实习生的需求也有很多,除了对专业的限制之外,需要实习生有着过硬的技术,但是可以说实习工资是市场上公司中的佼佼者了。能给到500-1000一天这样的实习工资,当然对于实习生的要求也非常高,除了要是对应的研究方向的专业之外,对核心技术也有要求,只是照本宣科的技术不能胜任。重视技术,确实是目前国内招聘市场的主风向,各大企业招聘,总是会优先考虑那些处于第一线的技术工程师。所以即使华为在面临巨大打击的同时,对于技术岗位的培养仍然是不遗余力。以上就是我们今天关于华为的分享,万物互联的时代总会到来,即使今天的鸿蒙不是由你来完成,那未来的鸿蒙可以是由你来创造。————————————————版权声明:本文为CSDN博主「小码哥说测试」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/jiangjunsss/article/details/119967489
  • [行业资讯] 国内首款专门为鸿蒙系统开发的省级政务服务 App
    8 月 20 日,省级政务公共服务移动平台——“码上办事”App 鸿蒙版在华为应用商店正式上线,成为国内首款专门为鸿蒙系统开发的省级政务服务 App。“码上办事”是海南省级政务公共服务移动平台,已为 2470 多万名注册用户提供社保、教育、医疗等领域政务事项掌上办理服务。截至目前,已实现对 iOS、安卓、鸿蒙三个操作系统的全覆盖。此次推出的“码上办事”App 鸿蒙版的体积大小仅为 6M,为 iOS、安卓版的十分之一,方便用户快速下载使用。“码上办事”App 鸿蒙版保留了 iOS、安卓版的大部分功能,延续了“首页”“办事”“一码通”“生活”“我的”5 个导航标签。下一步,海南还将推出码上办事 App 鸿蒙版特有的跨设备流转及万能卡片功能,帮助用户可以快速唤起码上办事 APP;并将对接高德鸿蒙版软件开发工具包,完善定位功能,紧跟鸿蒙系统迭代研发,不断丰富码上办事 App 鸿蒙版的应用,满足鸿蒙系统用户需求。鸿蒙 OS 自 6 月广泛应用以来,越来越多的手机,平板,电脑,显示器,智慧屏,等设备适配了鸿蒙 OS,用户人数飞速增长,发展势头迅速。根据央视 8 月初的报道,用户数量已经突破了 5000 万大关。鸿蒙对于老款机型的适配进度,也远超 HarmonyOS 2 发布会上公布的百机,根据鸿蒙官方公布的升级进度,已有 78 款手机可升级鸿蒙系统。除了在构建万物互联的同时,在手机本身的体验层面,应该是许多人感受是最直观明显的。无论是系统桌面滑动切换、还是 APP 应用启动速度、过渡动画、以及大型游戏加载方面,相对于之前的华为 EMUI 系统均能够感受到肉眼可见的提升。而小横条万能卡片加持适配,更是点睛之笔。 目前华为应用市场 HarmonyOS 专区应用已经有 50 多个,鸿蒙开发者也超过了 120 多万,越来越多的开发者和硬件品牌正在加入鸿蒙生态。前几日,华为轮值董事长郭平表示:相信消费者业务能活下来,不会放弃手机业务;华为不造车,帮车厂造好车;华为不会去开发房地产,但全屋智能能把家里所有东西万物互联,通过鸿蒙系统全部连接起来。华为在手机领域会继续保持存在,期待随着造芯能力不断增强,手机王座也终将归来!希望华为能快速渡过难关!转载鸿蒙技术社区
总条数:50 到第
上滑加载中