跳到主要内容

35 篇博文 含有标签「iOS」

查看所有标签

FFmpeg 在 iOS 短视频剪辑软件开发中的应用与设计考量

· 阅读需 18 分钟

近几年,短视频应用的迅猛发展和普及为 iOS 开发者带来了前所未有的挑战,尤其是高效、专业的音视频处理成为 iOS 开发中不可或缺的一环。

根据中国互联网络信息中心(CNNIC)发布第 53 次《中国互联网络发展状况统计报告》,截至 2023 年 12 月,我国网络视频用户规模达 10.67 亿人,占网民整体的 97.7%。其中短视频用户规模达 10.53 亿人,较 2022 年 12 月增长 4145 万人,占网民整体的 96.4%。中国短视频用户规模持续增长,且占整体网民比例逐年提高,显示出短视频已经成为中国网民日常娱乐和信息获取的重要方式。我国短视频用户规模占比最大的是第一梯队的抖音、快手、视频号,占比为 70.04;其次是第二梯队微博、小红书、西瓜视频、B 站等,占比为 25.86%。海外市场中,TikTok 占据 40%的短视频平台市场份额,YouTube Shorts 和 Instagram Reels 各占 20%。

在众多音视频处理工具中,FFmpeg 以其开源、跨平台的特性脱颖而出。它支持几乎所有主流编解码器(如 H.264、H.265),拥有强大的滤镜系统,特别适合 iOS 平台上的短视频剪辑应用开发。本文将从开发需求出发,深入探讨 FFmpeg 在 iOS 平台上的应用,结合实际场景和代码示例,展示其如何助力开发者应对各种挑战。

iOS Combine 框架使用

· 阅读需 7 分钟

Combine 框架是 Apple 提供的一种用于处理异步事件的强大工具。它允许我们以声明式的方式编写功能性反应式代码,简化了异步编程的复杂性。本文将深入探讨 Combine 框架中的常用操作符,帮助开发者更好地理解和应用这一框架。

让iOS 13支持UIKit 的

· 阅读需 6 分钟

2023 年 7 月 5 日,Apple 发布了 Xcode 15 Beta 3。为了尝鲜,我立马安装了一下,然后在 Release Notes 的 Previews 章节看到有这么一句话:

The #Preview can now be used in projects with deployment targets prior to iOS 17 and macOS 14. Usages of #Preview for SwiftUI can also be previewed on OS versions earlier than iOS 17 and macOS 14 by adding @available(iOS 16.0, macOS 13.0, *) to the #Preview (or whichever version you’d like to preview). Usages of #Preview for UIKit & AppKit views and view controllers, and for widgets can’t be previewed on OS versions prior to iOS 17 and macOS 14. (110676526)

意思很简单,#Preview 支持 iOS 17 之前的 SwiftUI,但是不支持 iOS 17 之前的 UIKit 的 view 和 view controller 预览。刚高兴了一秒钟,立马被打回原型。

【WWDC 2023】Xcode 15 更新内容

· 阅读需 28 分钟

WWDC 2023 这几天陆续放出各个主题的视频,挑了几个我认为值得看看的,学习一下并做个笔记。当然目前大部分系统、软件都是 Beta 版本,正式版本可能还会更改,但整体更新内容是不会大变的。

我挑的第一个视频是 What's new in Xcode 15,工欲善其事,必先利其器。

下面将根据视频的播放顺序,分析并实践各个段落部分。

2023 年 6 月 9 日,测试 Xcode 15 Beta 版本。

SwiftUI 的 Environment 变量

· 阅读需 5 分钟

在 SwiftUI 中,环境变量是一种强大的机制,允许我们在视图层次结构中传递数据,而无需通过每个视图的参数进行显式传递。这种机制使得我们可以轻松地管理全局状态和配置。本文将深入探讨 SwiftUI 的环境变量,包括如何定义、使用和扩展它们。

Swift 5.7 的 some 和 any 关键词

· 阅读需 8 分钟

此篇文章由 AI 辅助生成,本人对内容进行校对格式化,并添加参考文章。

概念定义

在 Swift 5.7 中,anysome 关键词具有不同的用途。any 关键词用于创建存在类型(existential type),它表示一个遵循特定协议的任意类型。在 Swift 5.7 中,创建存在类型时,必须使用 any 关键词,否则会出现编译错误。

与之相反,some 关键词用于创建不透明类型(opaque type),它表示一个遵循特定协议的具体类型,但该类型在编译时是未知的。some 关键词在 Swift 5.1 中引入,对于 SwiftUI 的 View 协议至关重要,因为 View 协议定义了关联类型,不能直接用作类型。简而言之,any 关键词表示一个遵循特定协议的任意类型,而 some 关键词表示一个遵循特定协议的具体但未知类型。这两个关键词都应用于协议,但它们在泛型和协议处理方面有着不同的作用。

iOS 让手机振动的解决方案

· 阅读需 2 分钟

最近有一个需求,点击按钮时增加振动效果。

方案一

import UIKit
import AudioToolbox

class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 这句话会使iPhone产生震动效果,可以加在按钮里面。
let soundID = SystemSoundID(kSystemSoundID_Vibrate)
AudioServicesPlayAlertSoundWithCompletion(soundID) { }
}
}

iOS 单元测试框架 XCTest (四)性能测试

· 阅读需 4 分钟

XCTest 框架提供了性能测试的功能,可以用于测试代码的运行时间、内存使用情况等性能指标。在性能测试中,我们通常会运行代码多次,并计算平均值和标准差,以便更准确地评估其性能。

在 XCTest 中,我们可以使用 XCTMeasureBlock 函数来执行性能测试。该函数接受一个闭包作为参数,闭包中包含我们要测试的代码。例如:

func testPerformanceExample() {
measure {
// Code to measure performance
}
}

iOS 单元测试框架 XCTest (三)Async 测试

· 阅读需 9 分钟

异步测试和 Expectation 是现代软件测试中的常见要求。异步测试是指涉及某种形式的异步行为的测试,例如网络请求或 UI 更新,这些行为不能由测试代码预测或控制。异步 Expectation 是对异步操作结果的断言,通常需要在一定的延迟或特定条件满足后进行。

在 XCTest 中,有几种处理异步测试和 Expectation 的方法。

使用 XCTestExpectation

XCTestExpectation 是 XCTest 提供的一个处理异步 Expectation 的类。您可以创建一个 Expectation 对象,并使用 waitForExpectations(timeout:handler:) 方法等待它被满足。例如:

func testAsyncOperation() {
let expectation = XCTestExpectation(description: "Async operation completed")

// 执行一些异步操作
DispatchQueue.main.async {
// 当异步操作完成时,标记Expectation已完成
expectation.fulfill()
}

// 等待Expectation被满足
wait(for: [expectation], timeout: 5.0)
}

iOS 单元测试框架 XCTest (二)Assert

· 阅读需 4 分钟

在 iOS 开发中,单元测试是一种验证代码正确性的重要手段。XCTest 是 Apple 提供的官方单元测试框架,它提供了一系列的断言(Assert)方法来帮助我们验证测试用例的预期结果。本文将详细介绍 XCTest 中的断言(Assert)使用方法。