iOS 摸鱼周报 #66 | Shazam 迎来问世 20 周年

本期概要

  • 本期话题:Shazam 迎来问世 20 周年
  • 本周学习:将 NSImage 转换为 PNG的方法;在 macOS 中找到以前最前沿的应用程序
  • 内容推荐:iOS 基础应用和优化内容推荐
  • 摸一下鱼:微软开源表情符大全,软件快捷键速查资源,以及可以制作猫咪插画的网站资源

本期话题

Shazam 迎来问世 20 周年

@远恒之义:Shazam 是一款歌曲识别 App,适用于所有的 Apple 设备上。你可以使用 Shazam 快速查找几乎任何歌曲,识别 App 中播放或者通过耳机播放的音乐,也能通过快捷指令和控制中心使用 Shazam 识别歌曲,同时可以在 Apple Music 中打开已识别的歌曲,更多实用技巧可查看 Shazam 使用手册

控制中心使用 Shazam 识别歌曲

2018 年 9 月 Shazam 加入了 Apple 家庭,在 WWDC21 中 Apple 推出了 ShazamKit。借助 ShazamKit,可以为你的 App 增加音频识别功能。将音乐与 Shazam 庞大乐库中的数百万首歌曲进行匹配,或者使用视频和播客等来源中的音频创建你自己的自定义乐库,帮助用户轻松识别任何预录制的音频。

以下是 Shazam 20 年来历史上的重要时刻与里程碑事件。

  • 2002 年 8 月:Shazam 作为一项短信服务在英国推出。当时,用户需要在电话上拨打“2580”,然后将听筒对准音源。不久后,他们会收到一条短信,获悉歌曲名称与艺人姓名。
  • 2008 年 7 月:Shazam app 在全新的 App Store 上发布。2008 年 10 月,Shazam 发布 Android 版本。
  • 2015 年 4 月:Shazam app 在第一代 Apple Watch 上发布。
  • 2018 年 9 月:Shazam 加入 Apple 家庭。
  • 2021 年 6 月:Shazam 月度识别次数首次超过 10 亿次。
  • 2022 年 5 月:Shazam app 总安装次数超过 20 亿次。
  • 2022 年 8 月:Shazam 庆祝 20 年音乐发现之旅,且突破 700 亿次歌曲识别。

App 和 app 内购买项目即将实行税率和价格调整

@远恒之义:从本周开始,加纳和土耳其 App Store 的 App 及 App 内购买项目 (自动续期订阅除外) 的价格将有所提高。加纳的价格提升将包含 12.5% 的新增值税和 6% 的附加税。此外,如果你在 App Store Connect 中选择了适当的税收类别,爱沙尼亚的电子出版物的收益会进行调整,增值税从 9% 下调至 5%。

本周学习

整理编辑:FBY 展菲

如何将 NSImage 转换为 PNG

首先创建 NSBitmapImageRep 尺寸,并在上面绘制 NSImageNSBitmapImageRep 需要专门构建,不是直接使用 NSBitmapImageRep(data:) 初始化,NSBitmapImageRep(cgImage:) 可以避免一些分辨率问题。

extension NSImage {
    func pngData(
        size: CGSize,
        imageInterpolation: NSImageInterpolation = .high
    ) -> Data? {
        guard let bitmap = NSBitmapImageRep(
            bitmapDataPlanes: nil,
            pixelsWide: Int(size.width),
            pixelsHigh: Int(size.height),
            bitsPerSample: 8,
            samplesPerPixel: 4,
            hasAlpha: true,
            isPlanar: false,
            colorSpaceName: .deviceRGB,
            bitmapFormat: [],
            bytesPerRow: 0,
            bitsPerPixel: 0
        ) else {
            return nil
        }

        bitmap.size = size
        NSGraphicsContext.saveGraphicsState()
        NSGraphicsContext.current = NSGraphicsContext(bitmapImageRep: bitmap)
        NSGraphicsContext.current?.imageInterpolation = imageInterpolation
        draw(
            in: NSRect(origin: .zero, size: size),
            from: .zero,
            operation: .copy,
            fraction: 1.0
        )
        NSGraphicsContext.restoreGraphicsState()

        return bitmap.representation(using: .png, properties: [:])
    }
}

来源:如何将 NSImage 转换为 PNG - Swift 社区

如何在 macOS 中找到以前最前沿的应用程序

监听 didActivateApplicationNotification 并过滤结果获取希望找到的应用程序。

NSWorkspace.shared.notificationCenter
    .publisher(for: NSWorkspace.didActivateApplicationNotification)
    .sink(receiveValue: { [weak self] note in
        guard
            let app = note.userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication,
            app.bundleIdentifier != Bundle.main.bundleIdentifier
        else { return }
        
        self?.frontMostApp = app
    })
    .store(in: &bag)

来源:如何在 macOS 中找到以前最前沿的应用程序 - Swift 社区

内容推荐

整理编辑:Mim0sa

1、从响应式编程到 Combine 实践 -- 来自:字节跳动技术团队

@Mim0sa:来自字节跳动技术团队的 Combine 实践记录,文章从浅到深讲解了响应式编程的特点、选择 Combine 的理由以及具体实践。也介绍了 Combine 中的三个关键概念,事件发布/操作变形/订阅使用,也提及了一些常见错误等,很适合不是特别了解响应式编程的同学。

2、不改一行业务代码,飞书 iOS 低端机启动优化实践 -- 来自:字节跳动技术团队

@Mim0sa:低端机启动优化实践,文章讨论了在低端机的情况下,会在启动时有哪些特点,介绍了在 GCD queue 上发现的问题和优化方案。

3、RunLoop的实际使用 -- 来自:搜狐技术产品

@Mim0sa:来自搜狐技术产品的一篇比较基础的 RunLoop 文章,从线程保活开始介绍了 RunLoop 在实际开发中的使用,然后介绍了卡顿监测和 Crash 防护中的高阶使用。

4、iOS下锁的独白 -- 来自:搜狐技术产品

@Mim0sa:来自搜狐技术产品的一篇关于锁的文章,介绍了 iOS 中的锁有哪一些,以及如何使用。文章中的代码和注释清晰明了,归纳的也很全。

5、Avoiding race conditions in Swift -- 来自:Mostafa Abdellateef

@Mim0sa:一篇关于如何避免竞争的文章,文章内容比较简单,但是观点很深入,探讨了在软件的设计中去避免资源的竞争,靠的不是一味的使用各种锁、栅栏,而是精良的设计。文中举的例子生动易懂且随文的图片制作精良。

6、How do 3D transforms of iOS views work under the hood? -- 来自:Alex Lee

@Mim0sa:本文主要介绍了 3D transforms 的各种变化是怎么得来的,配有手绘介绍图,但需要一点点数学知识才可以读懂。

摸一下鱼

整理编辑:东坡肘子

  1. 微软开源表情符 —— Fluent Emoji:微软开源了 1800 多个表情符(持续增加中),在 Github 和 Figma 社区中均可获取。表情符提供了多种样式( 3D、彩色、平面、高度比 )和六种肤色。新表情符已经被用于 Teams 的最新版本之中了。
微软开源表情符
  1. Shortcuts.design - 快捷键大全:汇总整理了一些热门的设计、开发、效率工具的快捷键。提供了查询功能,对于跨平台产品分别提供了 Mac 和 Windows 的不同键位清单。
快捷键大全
  1. Evil.js:不知道上周是否有小伙伴因它而影响了摸鱼的时间。目前 Github 和 NPM 均已对其进行了删除。此次事件已经引发了有关投毒与反投毒的热烈讨论。
Evil.js
  1. 猫咪插画制作:东京一家设计公司推出的网站,通过捏脸的方式制作个性猫咪插画。目前可用的选项不多,仍无法做到准确传神。可以持续关注它的后续演变。
猫咪插画制作
  1. 将微信删除了,为什么还占用大量的空间:微信的删除操作只是不向你显示标记删除的记录了,记录仍然保存在你的设备中。B 站 up 主玄离199 通过视频告诉你微信中不能清理的“其他空间到底存了什么”。up 主还制作了另一条视频探讨关于微信在手机上存了什么,要怎么清理。
将微信删除了,为什么还占用大量的空间

关于我们

iOS 摸鱼周报,主要分享开发过程中遇到的经验教训、优质的博客、高质量的学习资料、实用的开发工具等。周报仓库在这里:https://github.com/zhangferry/iOSWeeklyLearning ,如果你有好的的内容推荐可以通过 issue 的方式进行提交。另外也可以申请成为我们的常驻编辑,一起维护这份周报。另可关注公众号:iOS成长之路,后台点击进群交流,联系我们,获取更多内容。

往期推荐

iOS 摸鱼周报 #65 | 什么是精准测试

iOS 摸鱼周报 #64 | 与 App Store 专家会面交流

iOS 摸鱼周报 #63 | Apple 企业家培训营已开放申请

iOS 摸鱼周报 #62 | Live Activity 上线 Beta 版

iOS 摸鱼周报 #67 | Xcode Cloud 已支持订阅iOS 摸鱼周报 #65 | App Accelerator 分享会