本期概要

  • 话题:WWDC 进行时
  • 面试模块:iOS 中关键字符串该如何混淆加密?
  • 优秀博客:酷炫动画框架推荐
  • 学习资料:Exploring Swift Memory Layout(视频讲座)
  • 开发工具:Mac-CLI 一款面向开发人员的 macOS 命令行工具

本期话题

WWDC 进行时

@zhangferry:WWDC 进行时持续 5 天的 WWDC22 已经快到尾声了,作为科技圈最负盛名的开发者大会,它不仅吸引到众多 Apple 生态的开发者,还有大半个科技圈在跟进报道,Apple 的影响力可见一斑。WWDC 的意义对于 Apple 来说不只是发布新产品、新功能,它还体现了 Apple 想与开发者之间打造的一种紧密联系。

为了加强这种联系 ,苹果在 Apple Park 对面建了全新的 Developer Center,以便于开发者和Apple工程师之间交流沟通;为了让 Apple 对开发者的支持范围更广,从去年秋天开始,还推出了各种线上 Tech Talks,除了宣讲各种最新技术,开发者还可以和 Apple 工程师直接交流;Apple 还在全球建立了 17 所 Academy,用于教授相关的开发技术。基于苹果的各种支持和完善的生态,目前全球已有3400 万相关开发者。这众多开发者跟 Apple 的关系又是互相成就的,可以看出 Apple 把生态这个事真是玩的明明白白。

如果去考究 WWDC 的历史,结果可能会更令人惊讶,首届大会竟然早在 1983 年就举办了。1983 年是什么概念呢,那个时候微软才发布了第一个桌面操作系统 Microsoft Windows,这也是 Windows 这个名字第一次出现的时间。同年晚于 Winddows 三个月苹果发布了第一款搭载图形用户界面的个人电脑 Apple Lisa。乔布斯当年还对此耿耿于怀,图形化界面是苹果的首创却被 Windows 抢先发布。电影史蒂夫·乔布斯 Steve Jobs 就是以这场发布会为开头展开的。

WWDC 发展至今,举办地、演讲者、产品内容、形式都多次变化,但 Apple 还是当年的 Apple,它依然是那个被模仿的存在。这些年间诞生过了很多经典时刻,我找到了一份网友整理的从 2006 年到 2021 年的Apple 苹果发布会合集,如果想考考古可以前往观看。

说到形式的变化 WWDC 因为疫情的原因演讲形式从幻灯片变成视频,感觉这更凸显了 Apple 的设计能力。视频内容相比幻灯片有更大的发挥空间,镜头间流畅的转场切换,贴近视频主题的录制场景,一些三维效果的渲染,以及精良的音效,都让整个视频内容更具趣味性和观赏性。Apple 这几年的片头动画也成了很多设计师争相效仿的对象。

WWDC 被称为 Apple 开发者的「春晚」真的很贴切,WWDC 进行时,大家好好体验剩下的发布会内容吧。

面试解析

整理编辑:JY

iOS 中关键字符串该如何混淆加密?

很多开发的同学在项目中遇到AppKey以及一些密钥SecretKey的时候通常都会定义成宏,方便使用查看,但是这样做,是会有一定的风险,我们来看看有什么风险?

```

define kWxAppID @"krystal69d7xxxxxx"

  • (void)configureForWXSDK {   [WXApi registerApp:kWxAppID universalLink:@"123123"]; } ```

利用 Hopper 打开 MachO 就可以看到:

解决办法

  • 在方法中返回这个字符串,示例如下:

    ```

    define KRYSTALENCRYPTKEY @"krystal_key"

    @implementation ViewController

    • (void)viewDidLoad {   [super viewDidLoad];    //使用函数代替字符串   [self uploadDataWithKey:AES_KEY()];   }
    • (void)uploadDataWithKey:(NSString *)key{    NSLog(@"%@",key); }     static NSString * AESKEY(){    unsigned char key[] = {        'k','r','y','s','t','a','l','','k','e','y','\0',   };    return [NSString stringWithUTF8String:(const char *)key]; } @end ```

    这样做能够简单的防护,但是如果逆向以后直接静态分析找到需要返回key的函数,也是能够很轻易的破解掉

  • 通过异或的方式(字符串正常会进入常量区,但是通过异或的方式编译器会直接换算成异步结果)

    ```

    define STRINGENCRYPTKEY @"demoAESkey"

    define ENCRYPT_KEY 0xAC

    @interface ViewController () @end     @implementation ViewController

    • (void)viewDidLoad {   [super viewDidLoad]; //   [self uploadDataWithKey:STRINGENCRYPTKEY]; //使用宏/常量字符串   [self uploadDataWithKey:AES_KEY()]; //使用函数代替字符串 }
    • (void)uploadDataWithKey:(NSString )key{    NSLog(@"%@",key); }     static NSString * AES_KEY(){    unsigned char key[] = {       (ENCRYPT_KEY ^ 'd'),       (ENCRYPT_KEY ^ 'e'),       (ENCRYPT_KEY ^ 'm'),       (ENCRYPT_KEY ^ 'o'),       (ENCRYPT_KEY ^ '_'),       (ENCRYPT_KEY ^ 'A'),       (ENCRYPT_KEY ^ 'E'),       (ENCRYPT_KEY ^ 'S'),       (ENCRYPT_KEY ^ '_'),       (ENCRYPT_KEY ^ '\0'),   };    unsigned char * p = key;    while (((p) ^= ENCRYPT_KEY) != '\0') {        p++;   }    return [NSString stringWithUTF8String:(const char *)key]; } @end ```

    可以看到 通过Hopper打开直接是异或的结果:

优秀博客

本期优秀博客的主题为:酷炫动画框架推荐。

开发过程中,如果需要比较复杂的动画,一般都是由设计师来处理,前端负责展示。设计师会给我们提供gif、webp、apng等格式的资源,然而因为资源体积或者效果的原因,我们需要一些特殊的实现方式,本期就推荐几个跨平台的酷炫动画框架:Lottie、SVGA、VAP、PAG。

1、Lottie -- 来自Github:Airbnb

@我是熊大:Lottie 是Airbnb开源的一套成熟的跨平台动画框架。

优势:

    1. 因为动画文件通常是 图片+json描述文件,所以我们可以对动画进行解析和调整
    1. 官方提供了非常多的免费动画,社区是这几个当中比较完善的
    1. 多端效果能保持一致

缺点:

    1. 效果一般,有特效限制
    1. 文件提交在动画比较复杂时依旧会达到数兆

2、SVGA -- 来自博客:SVGA

@我是熊大:SVGA 是一种跨平台的开源动画格式,同时兼容 iOS / Android / Web。SVGA 除了使用简单,性能卓越,同时让动画开发分工明确,各自专注各自的领域,大大减少动画交互的沟通成本,提升开发效率。

3、VAP -- 来自Github:VAP

@我是熊大:VAP是企鹅电竞开发,用于播放特效动画的实现方案。具有高压缩率、硬件解码等优点。同时支持 iOS,Android,Web 平台。

4、PAG -- 来自博客:PAG

@我是熊大:PAG 是一套完整的动画工作流解决方案。提供从 AE (Adobe After Effects) 导出插件,到桌面预览工具,再到覆盖 iOS,Android,macOS,Windows,Linux 和 Web 等各平台的渲染 SDK。PAG 方案目前已经接入了腾讯系 40 余款应用,包括微信,手机QQ,王者荣耀,腾讯视频,QQ音乐等头部产品。

见闻

这一周阅读/浏览到的有趣的资讯。

1、最新研究显示 App Store 助力中国小型开发团队在全球市场斩获成功 -- 来自 Apple Newsroom

@远恒之义:小型开发团队如何才能在 App Store 上获得成功?来自中国的三个独立开发团队有着不同的答案。

谜底科技的柳毅和梁逸伦夫妇,分工明确,一个掌舵,一个编程,成功推出了 10 款 app,其中包括广受好评的 OffScreen。创新对他们而言,就是坚持将最新的 Apple 技术和开发工具应用到他 app 中,把用户体验做到极致。OffScreen 支持“同播共享”功能,可以和朋友连线进入专注模式;OffScreen 和谜底时钟都支持 iOS 15 的时效性通知,降低实时通知的优先等级,在用户完成专注任务后再显示通知内容。

王维东零基础学习编程,专注的他,自学市场交易和数字货币的知识,开发出了拥有专业性的貔貅记账。貔貅记账是一款完全运用 Swift 和 Apple 原生框架开发的 app,也是 Apple 平台上的独占应用。王维东的目标是只在 Apple 生态 iOS、iPad 和 Apple Watch 上开发貔貅记账,专注做一款 app,且只做一款。

独立游戏制作人陈虹曲,有自己的艺术追求,坚持亲手绘制游戏里每一张场景图、人物和用户界面,他的作品灵感都来源于生活。他的团队善用 Apple 开发工具,使用 SpriteKit 来开发高性能省电的 2D 游戏,常用 TestFlight 邀请用户进行版本测试。

通过 Apple 企业家培训营,谜底科技学会了思考如何将 app 的价值传递到用户手中。王维东和陈虹曲的成功,源于加入了 App Store 小型企业计划,当然,也少不了 App Store 编辑的推广帮助。

2、Apple 设计大奖获奖者名单公布 -- 来自 Apple News

@远恒之义:2022 年是 Apple 设计大奖的第三年,苹果表彰在兼容并蓄、乐趣横生、优越互动、社会影响、视觉图,以及创新思维等六个类别,总共 12 款表现出色的 App 和游戏。中国区有多款应用作品入围提名,一起来了解这些获奖 App 和它们背后极具才华的开发者们吧。

3、苹果用 M2 芯片,把 Mac 的「护城河」拓宽成「护城海」 -- 来自公众号:APPSO

@远恒之义:随着苹果 M1 芯片的出现,iOS 开发者们再也不抱怨 Xcode 编译又卡又慢,视频博主们剪辑片子也更加丝滑,高性能和长续航的 Mac,大幅度提高了人们的生产力。时隔两年,按照苹果的节奏,M2 芯片的出现意味着「过渡期」已过,Mac 们已经与 x86 架构彻底告别,正式踏入 Arm 架构时代。最新的系统 iPadOS 16 与 macOS Ventura,在搭载 M1 芯片的 iPad Pro 与 iPad Air 上,部分界面和功能开始逐步打通,苹果的「个人电脑」的定义也将会发生改变:通指搭载 M 芯片的设备。

4、你的手机电池,还撑得住一天吗?他们找到了给电池“延寿”的新方法 -- 来自公众号:环球科学

@远恒之义:你有手机电量焦虑吗?我很早就开启了手机的“优化电池充电”选项,但也架不住时间的推移,电池最大容量的持续降低。上个月,我把用了三年的 iPhone 更换了官方电池,手机瞬间满血复活,又能再战两年(

iOS 摸鱼周报 #56 | WWDC 进行时相关推荐

  1. iOS摸鱼周报 第四十四期

    本期概要 话题:Apple 将推出 Tap to Pay 功能 Tips:解决 iOS 15 上 APP 莫名其妙地退出登录 面试模块:Dealloc 使用注意事项及解析 优秀博客:ARM64 汇编入 ...

  2. iOS 摸鱼周报 #54 | Apple 辅助功能持续创新

    本期概要 话题:Apple 在辅助功能上持续创新:IAP 自动续订提价通知更新 面试模块:学习 OOMDetector 中的 CRC64 应用实践 优秀博客:iOS 内存 学习资料:一份英语进阶指南 ...

  3. iOS摸鱼周报 第八期

    iOS摸鱼周报,主要分享大家开发过程遇到的经验教训及学习内容.虽说是周报,但当前内容的贡献途径还未稳定下来,如果后续的内容不足一期,可能会拖更到下一周再发.所以希望大家可以多分享自己学到的开发小技巧和 ...

  4. iOS摸鱼周报 第二十四期

    本期概要 话题:跟一位同学聊一下最近的面试感受. Tips:设计 OC 版本的 defer 功能,使用现有证书创建 Fastlane match 格式加密文件. 面试模块:离屏渲染相关知识点. 优秀博 ...

  5. iOS摸鱼周报 51 | 游戏版号恢复发放

    本期概要 话题:游戏版号恢复发放,45 款游戏获版号 面试模块:简述 mmap 应用 优秀博客:iOS 内购主题 学习资料:一本刚翻译的 <iOS 高性能 App 架构>小书 开发工具:Q ...

  6. iOS摸鱼周报 第二十五期

    本期概要 话题:本期跟竹立交流一下关于求职和学习方法的话题. Tips:如何清除启动图的缓存:如何优化 SwiftLint 流程. 面试模块:本期解析一道 GCD 死锁题. 优秀博客:整理了 Swif ...

  7. iOS摸鱼周报 第二期

    主题列表:juejin, github, smartblue, cyanosis, channing-cyan, fancy, hydrogen, condensed-night-purple, gr ...

  8. iOS摸鱼周报 第二十八期

    本期概要 话题:跟 yuriko 聊一下职业选择和如何保持学习热情. Tips:介绍缓动函数相关的一些内容. 面试模块:Objective-C 的消息机制(上). 优秀博客:整理了几篇 Swift 协 ...

  9. iOS 摸鱼周报 #53 | 远程办公正在成为趋势

    本期概要 话题:远程工作正在成为趋势 面试模块:CRC 实践应用:理论推导 优秀博客:App Extension 学习资料:一个大学生的学习计划 开发工具:一款由开源mpv 提供支持,适用于 macO ...

最新文章

  1. oracle ddl会被什么阻塞,MySQL Online DDL与DML并发阻塞关系总结
  2. window.location.reload() 刷新页面时,如何不弹出提示框
  3. [转]NYOJ-511-移动小球
  4. ViewPager两种方式实现无限轮播
  5. P5934-[清华集训2012]最小生成树【最小割】
  6. zoj 3811 untrusted patrol
  7. /dev/socket/vold exploit 本地提权漏洞
  8. where,having与 group by连用的区别
  9. IDC:“互联网+流通”将进一步释放活力
  10. HTML九宫格拼图游戏代码,js实现九宫格拼图小游戏
  11. 2018山西中考计算机软件名称,2018年山西省中考试题
  12. 18. C语言 -- 指针数组和数组指针
  13. 基于mina框架的GPS设备与服务器之间的交互
  14. 一般学校计算机密码是什么,学校电脑密码忘了怎么解?
  15. mysqllinux操作,万字解析!
  16. AI写小说!ChatGPT创作福尔摩斯小说,3分钟狂写856字,就问人类慌不慌?
  17. 【N32G457】基于RT-Thread和N32G457的可控电流源
  18. 华为如何在开发者选项观察错误日志_爬虫scrapy框架--log日志输出配置及使用
  19. 麦克风阵列声音定位简介
  20. 如何让绩效管理公平公正的进行

热门文章

  1. php hhvm nginx并发,php – HHVM fastcgi Nginx性能波动
  2. 如何去自律(时刻警醒!!!!!!)
  3. liteide 没有代码提示没有函数跳转 的解决方法
  4. 一次难忘的ubuntu20.04 双系统装机踩坑实录
  5. 代码整洁之道------它山之玉可以重构:身份证号码解析、验证工具(第一天)
  6. js获取url中的参数
  7. 【案例】天津滨海农商行“滨海·微银行”互联网金融业务平台
  8. hive sql 保留两位小数
  9. 跑步健身蓝牙耳机哪款好用?适合女孩子佩戴舒适挂脖式蓝牙耳机推荐
  10. LInux:vim的使用以及用户账号的管理