Sora 2: A Great Model, but Not Necessarily a Great Business
A week ago, OpenAI released the Sora 2 model along with a new Sora app that carries distinct social-platform features. For now, users can generate videos with Sora 2 only through its iOS app. In terms of visual detail, character rendering, environmental texture, and audio-visual synchronization, Sora 2 represents a substantial improvement over earlier versions. Within days, social media feeds were flooded with short clips created using the model.
The launch of the Sora app marks OpenAI’s attempt to pursue a new business direction — transforming itself from a foundational-model provider into a platform for video creation, sharing, and aggregation, in hopes of expanding its revenue streams. Yet this transition is bound to be challenging. Initially, OpenAI adopted an opt-out policy that allowed users to generate content involving copyrighted material unless rights holders explicitly withdrew their works. Following widespread backlash, however, Sam Altman announced just three days later that OpenAI would be shifting toward an “opt-in-like” system, promising finer-grained control for copyright owners and exploring a potential revenue-sharing model.
Even with mature copyright-management systems like YouTube’s Content ID, it will be extremely difficult for OpenAI to replicate such a framework within Sora and gain rights-holder approval. YouTube can build an opt-in system based on precise fingerprint matching because it deals with concrete, identifiable works; Sora, by contrast, generates outputs that are only statistically similar to existing materials rather than direct copies. In other words, YouTube addresses the question “Has an existing work been used?”, whereas Sora faces the far trickier question “Is a generated video too similar to a particular work?” — a challenge that is both technically and legally far more complex.
Even if OpenAI manages to navigate the copyright issue, Sora 2’s business model remains constrained by its costly structure. Altman has admitted that user-generated video volume has far exceeded expectations, with each ten-second clip consuming significant computational resources while serving only a small audience. Introducing a “copyright-aware model” during generation could mitigate infringement risks but would inevitably constrain creative freedom; performing similarity detection after generation, on the other hand, would substantially increase operational costs.
This dilemma exposes a peculiar reality in today’s AI industry: hardware companies like NVIDIA are reaping huge profits, while device manufacturers like Apple have created clear value-addition paths by deeply integrating AI capabilities on-device and reinforcing their ecosystem lock-in, yet the model builders themselves are still struggling to justify their lofty valuations.
Sora 2 is, without doubt, an experiment worth watching—both technologically and commercially. It may well become a milestone in generative video, but if its user experience and business returns fall short, it will only further magnify the underlying paradox of the AI economy—forcing companies and investors to reconsider where the true value of AI services lies: in capability, in content, or in the context in which they are applied.
Previous Issue|Newsletter Archive
If you appreciate my work and want to promote your product to the Swift and iOS developer community, sponsoring my blog & newsletter could be an excellent opportunity for you.
Recent Recommendations
Waiting for an Async Result in a Synchronous Function
Developers sometimes face the need for synchronous functions to wait for async results. Apple DTS engineer Quinn “The Eskimo!” states clearly in this article: there’s no good way on Apple platforms for a synchronous function to wait on an asynchronous function’s result. Common DispatchSemaphore
-based implementations have serious flaws:
Priority Inversion: The system cannot identify thread dependencies, potentially causing UI freezes
Thread Pool Exhaustion: Can lead to thread explosion or deadlock
Quinn’s recommended solution is using Swift async/await or refactoring the architecture to avoid synchronous waiting. This reflects Swift Concurrency’s design philosophy—fundamentally changing asynchronous programming patterns rather than patching flawed synchronous blocking approaches.
AsyncSequence for Real-Time APIs: From Legacy Polling to Swift 6 Elegance
Wesley Matlock explores with humor and clarity how to modernize traditional polling APIs using Swift 6’s AsyncStream. By comparing three approaches to real-time data updates (traditional Timer, Combine, and AsyncStream), the article demonstrates AsyncStream’s advantages: elegant cancellation, structured concurrency support, improved testability, and composability. AsyncStream not only makes polling code concise and robust but also provides a smooth migration path to true real-time solutions like WebSocket.
Adopting Liquid Glass: Experiences and Pitfalls
Clearly, many developers have encountered issues when adopting Liquid Glass, even Apple’s native apps aren’t exempt. JuniperPhoton (Weichao Deng) shares five practical problems and solutions from his adoption experience, including: rotation animation anomalies (requiring UIKit bridging), Menu morphing animation glitches, SF Symbols variant tips, performance optimization through GlassEffectContainer (reducing offscreen rendering), and button hit area corrections.
Notably, using GlassEffectContainer
can merge multiple glass effects into a single CALayer, significantly reducing offscreen rendering passes while achieving smoother morphing animations.
The File Importer in SwiftUI
While SwiftUI’s fileImporter
allows developers to easily build file import functionality, the import process may not work as smoothly as expected in practice. Gabriel Theodoropoulos not only covers basic fileImporter
usage but emphasizes the critical technical point—security-scoped access: Since imported files reside outside the app sandbox, you must request temporary access permission via startAccessingSecurityScopedResource()
and release it with stopAccessingSecurityScopedResource()
when done. Gabriel recommends using defer
statements to ensure permissions are always properly released, avoiding omissions due to early returns in complex code.
Foundation Models Profiling with Xcode Instruments
Xcode 26 adds Instrument support for the Foundation Models framework, helping developers analyze and optimize model performance. Artem Novichkov demonstrates its usage, covering: performance monitoring, Tool Calling optimization, session prewarming, and optimization comparisons. Note that token counting currently only works on physical devices. Additionally, Artem provides the TranscriptDebugMenu open-source library for debugging and inspecting language model session transcripts.
Testing Private Members in Swift with @_private
While the private
keyword creates richer encapsulation layers, a practical frustration is the inability to effectively unit test private code. Kyle Ye introduces a testing technique in this article: using the @_private(sourceFile:)
attribute to bypass access control, allowing test code to verify private member state without breaking encapsulation.
This technique is practical but requires caution. For projects needing deep internal state testing, it provides a balance between maintaining encapsulation and test coverage.
Tools
Swift Configuration - Unified Configuration Management
In real projects, we might encounter scenarios where JSON provides default settings, but users can override via environment variables, while configurations might also be modified remotely. Managing this configuration fragmentation is clearly challenging. Apple released the Swift Configuration library to address this pain point.
The library’s highlight is its hierarchical configuration system: combining multiple configuration sources (environment variables, command-line arguments, JSON/YAML files, etc.) with clear priority override mechanisms. Key features include:
Unified configuration reading API usable by both applications and libraries
Hot reload support for configuration updates without restarts
Built-in access logging and sensitive data redaction
Support for synchronous, asynchronous, and reactive access patterns
AsyncItemProvider - Timing-Safe Async Loading
In iOS’s UIDropInteraction
, if you don’t synchronously start loading content before performDrop
returns, the system may terminate the drop session, causing silent load failures. With concurrent programming increasingly popular, this frustrates many developers. Harlan Haskins developed AsyncItemProvider to elegantly solve this using Swift 6.2’s Task.immediate
API (backward compatible to iOS 17 via Task.startOnMainActor
). The library’s returned ItemLoadTask
object contains: an actively loading Task (awaitable) and an observable Progress object for tracking progress.
The library offers practical value, and its implementation provides guidance for similar scenarios. This represents a practical application of the async/await refactoring approach Quinn recommends in “Waiting for an Async Result in a Synchronous Function”—though it solves a more specialized timing issue.
Sora 2:好模型,但未必是好生意
一周前,OpenAI 发布了 Sora 2 模型,并同步推出了带有社交平台属性的 Sora 应用。目前,用户仅能通过 iOS 应用使用该模型生成视频。无论在视觉细节、人物形象、环境纹理,还是声画同步方面,Sora 2 相较早期版本都有显著提升。一时间,社交媒体上充斥着各类由 Sora 2 生成的短片。
Sora 应用的推出,标志着 OpenAI 正尝试进入一种全新的商业路径——从基础模型提供商转型为视频内容的创建、分享与聚合平台,以此拓展收入来源。然而,这种转型注定充满挑战。发布初期,OpenAI 采用 opt-out 机制,默认允许用户使用受版权保护的内容,除非版权方主动退出。但在各方强烈反对下,仅过三天,Sam Altman 便宣布将调整为“类似 opt-in”的机制,承诺提供更细粒度的控制权,并探索收益分成方案。
即便市场上已有 YouTube Content ID 这样成熟的版权管理机制,OpenAI 也难以在 Sora 中复制这一模式并获得版权方的认可。YouTube 之所以能建立基于 opt-in 的匹配体系,是因为它处理的是确切的、可比对的作品;而 Sora 生成的只是统计意义上的相似结果,并非对原始素材的复制。换言之,YouTube 解决的是“发现已存在的作品是否被使用”,而 Sora 面临的却是“判断生成内容是否过于接近某个作品”的问题——后者在技术与法律上都要复杂得多。
即便能妥善处理版权问题,Sora 2 的商业化仍受制于高昂的成本结构。Altman 承认,用户生成的视频数量远超预期,而每个 10 秒视频都需消耗大量计算资源,却往往只服务于极小的受众群体。若在生成阶段引入“版权感知模型”,虽可部分缓解侵权风险,却势必压缩创作自由;若在生成后执行相似度检测,又会显著提升运营成本。
这种两难局面揭示了当下 AI 产业的奇特现象:以英伟达为代表的硬件厂商赚得盆满钵满,而以苹果为代表的终端厂商,则通过在设备端深度整合 AI 能力、强化生态闭环,为自有产品创造了清晰的增值路径,反而是那些构建模型本身的企业,仍在为如何兑现估值而苦苦探索。产业链两端盈利可观,中游路径却愈发模糊。
Sora 2 无疑是一次值得关注的技术与商业实验。它或许能成为生成式视频的重要里程碑,但若最终用户体验和商业回报均不尽如人意,也将进一步放大这一行业症结——迫使厂商与投资者重新思考,AI 服务的真正价值,究竟该体现在能力、内容,还是场景之上。
如果您发现这份周报或我的博客对您有所帮助,可以考虑通过 爱发电,Buy Me a Coffee 支持我的创作。
近期推荐
同步函数等待异步结果的困境 (Waiting for an Async Result in a Synchronous Function)
有时开发者会遇到同步函数等待异步函数结果的需求,苹果的 DTS 工程师 Quinn “The Eskimo!” 在这篇文章中明确指出:在苹果平台上,没有好的方法让同步函数等待异步函数的结果。常见的基于 DispatchSemaphore
的实现存在严重缺陷:
优先级反转:系统无法识别线程依赖关系,可能导致 UI 卡顿
线程池耗尽:可能造成线程爆炸或死锁
Quinn 建议的解决方案是使用 Swift async/await,或重构整体架构避免同步等待。这也体现了 Swift Concurrency 的设计理念——从根本上改变异步编程模式,而非修补有缺陷的同步阻塞方案。
AsyncStream 改造轮询 API 实践 (AsyncSequence for Real-Time APIs: From Legacy Polling to Swift 6 Elegance)
Wesley Matlock 用轻松幽默的风格探讨了如何使用 Swift 6 的 AsyncStream 来改造传统的轮询 API。通过对比三种实现实时数据更新的方式(传统 Timer、Combine 以及 AsyncStream),文章展示了 AsyncStream 的诸多优势:更优雅的取消机制、结构化并发支持、更好的可测试性以及可组合性。AsyncStream 不仅让轮询代码变得简洁而健壮,同时为将来迁移到 WebSocket 等真正的实时方案提供了平滑的过渡路径。
Liquid Glass 适配经验与陷阱 (Adopting Liquid Glass: Experiences and Pitfalls)
很显然,不少开发者在适配 Liquid Glass 时都碰到了一些问题,即便苹果原生的应用也不例外。JuniperPhoton(Weichao Deng)分享了他在适配过程中遇到的五个实际问题及解决方案,包括:旋转动画异常(需桥接 UIKit)、Menu 变形动画故障、SF Symbols 变体使用技巧、通过 GlassEffectContainer 优化性能(减少离屏渲染)以及按钮点击区域修正等。
特别值得注意的是,使用 GlassEffectContainer
可以将多个玻璃效果合并到单个 CALayer,显著减少离屏渲染次数,同时获得更流畅的变形动画。
SwiftUI 文件导入器详解 (The File Importer in SwiftUI)
在 SwiftUI 中,开发者可以通过 fileImporter
轻松构建文件导入功能,但在实践中可能会发现导入过程并没有如预期般顺利。Gabriel Theodoropoulos 在本文中不仅介绍了 fileImporter
的基本用法,还特别强调了最关键的技术要点——安全作用域访问:由于导入的文件位于应用沙盒外,必须通过 startAccessingSecurityScopedResource()
请求临时访问权限,处理完成后调用 stopAccessingSecurityScopedResource()
释放权限。Gabriel 建议使用 defer
语句确保权限总是被正确释放,避免在复杂代码中因提前返回而遗漏。
Foundation Models 性能分析 (Foundation Models Profiling with Xcode Instruments)
Xcode 26 新增了针对 Foundation Models 框架的 Instrument 工具,帮助开发者分析和优化模型性能。Artem Novichkov 在本文中展示了其使用方法,包括:性能监控、Tool Calling 优化、会话预热以及优化效果对比。需要注意的是,目前 token 计数功能仅在真机上有效。另外,Artem 还提供了 TranscriptDebugMenu 开源库,用于调试和检查语言模型会话记录。
如何测试私有成员 (Testing Private Members in Swift with @_private)
尽管 private
关键字可以创建更丰富的封装层次,但它的一个实际困扰是无法对私有代码进行有效的单元测试。在本文中,Kyle Ye 介绍了一个测试技巧:使用 @_private(sourceFile:)
属性可以绕过访问控制,让测试代码能够验证私有成员的状态,而无需破坏封装性。
这个技巧很实用,但确实需要谨慎对待。对于需要深度测试内部状态的项目来说,这提供了一个在保持封装性和测试覆盖率之间的平衡方案。
工具
Swift Configuration - 统一配置管理方案
在实际项目中我们可能会碰到这样的场景:通过 JSON 为应用提供了默认设置,但又允许用户通过环境变量来进行覆盖,同时又可能从远程对配置进行修改。显然处理这种配置管理碎片化并不轻松。为此,苹果发布了 Swift Configuration 库以解决这个痛点。
该库最大的亮点是层级配置系统:可以组合多个配置源(环境变量、命令行参数、JSON/YAML 文件等)并建立清晰的优先级覆盖机制。主要特性包括:
统一的配置读取 API,应用和库都可使用
热重载支持,无需重启即可更新配置
内置访问日志和敏感信息脱敏
支持同步、异步和响应式访问模式
AsyncItemProvider - 确保时序的异步加载
在 iOS 的 UIDropInteraction
中,如果你不在 performDrop
返回之前同步开始加载内容,系统可能会终止拖放会话,导致加载静默失败。在并发编程越来越流行的今天,这会给很多开发者带来困扰。Harlan Haskins 开发的 AsyncItemProvider 通过 Swift 6.2 的 Task.immediate
API(通过 Task.startOnMainActor
向后兼容至 iOS 17)巧妙解决了这个问题。该库返回的 ItemLoadTask
对象包含:正在加载内容的 Task(可 await)以及可观察的 Progress 对象用于跟踪进度。
该库不仅具备实用价值,其代码实现对很多类似场景也有指导意义。这也是 Quinn 在 “Waiting for an Async Result in a Synchronous Function” 一文中推荐的 async/await 重构方案的一个实际应用——虽然它解决的是一个更特殊的时序问题。