首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

将 iOS 应用体积缩小一半的秘籍:妥善运用动态框架

使用 SwiftPM 创建动态框架 默认情况下,Xcode 允许开发者选择以静态还是动态方式链接 Swift 。而在实际操作,它总是会直接将捆绑为静态库。...大家可以将的库类型指定为.dynamic 来要求 Xcode 动态接入 Swift : // EmergeUI/Package.swift let package = Package( name...我的这门资产标准化秘方包含四个步骤: 创建一个新的 Xcode Framework 并将共享资源转移过去。 使用二进制目标创建一个新的 Swift 。...作为一个打包器,它的架构非常简单: // EmergeAssetsSPM/Package.swift let package = Package( name: "EmergeAssetsSPM...导入我们的资产框架 最后,我们的 EmergeUI 模块可以导入 SwiftPM 打包的框架以作为常规本地依赖项。

11210

Xcode 常见 CLI 工具

Command Line Tool本质是一个命令行工具,内部有很多有用的工具,Apple LLVM compiler、Make等等。...显示当前指定的工具所在 Xcode 路径 xcode-select -s : 切换默认工具所在 Xcode 路径 xcode-select -r: 重置工具所在 Xcode 路径 xcode-select...当然这套工具有些命令不在/usr/bin路径下,我们就需要在命令前加上xcrun了,swift-demangle,如果我们直接使用swift-demangle就会出现命令找不到的错误,使用xcrun...dsymutil 作用:可以使用 dsymutil 从 二进制 中提取 dSYM 文件以及对 dSYM 文件进行一些操作;使用场景:当dSYM文件丢失后,可以将其作为找回dSYM文件的一种方式;路径:...的 LSP;其的存在允许我们使用其他 IDE 开发 Swift VSCode; 路径:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain

3.2K21

Swift 的 MainActor 使用和主线程调度

如果您不熟悉 Swift 的 Actors,我建议您阅读我的文章Swift的Actors 使用以如何及防止数据竞争,全局Actors的行为类似于Actors,我不会在这篇文章详细介绍Actors的工作方式...它应该被用于属性、方法、实例和闭,以在主线程上执行任务。提案SE-0316 全局Actor 引入了 MainActor,作为其全局 Actor 的一个例子,它继承了GlobalActor协议。...您可以通过在 Xcode 的构建设置中将以下值添加到“Other Swift Flags”来实现: -Xfrontend -enable-experimental-concurrency 我们可以定义我们自己的全局...例如,我们可以将 MainActor属性添加到视图模型,以使其在主线程上执行所有任务: @MainActor final class HomeViewModel { // .. } 使用nonisolated...是对Swift的Actor的一个很好的补充。

2.7K10

从预编译的角度理解Swift与Objective-C及混编机制

但很明显的是,我们会发现这些被依赖组件也有自己的依赖关系,在它们的这些依赖关系,极有可能会存在重复的引用。 ?...等于任意一个文件,在整个编译过程,只有 1 次被作为生产 .o 产物的输入,其余时间会被作为接口文件反复解析。 ? 不过在 Xcode 10 以后,Apple 对这种编译流程进行了优化。...但对于 Framework 类型的 Target 而言,Swift 自动生成的头文件只会包含 Public 类型的 API,因为这个头文件会被作为构建产物对外使用,所以像 internal 类型的 API...在 Swiftinterface 文件,有以下点需要注意: 文件会包含一些元信息,例如文件格式版本,编译器信息,和 Swift 编译器将其作为模块导入所需的命令行子集。...这就意味着,只提供相应的 .h 文件和 .modulemap 文件就可以完成 Swift 二进制产物的构建,而不再依赖 Framework 的实体。

2.1K31

iOS之深入解析Xcode 13正式版发布的40个新特性

,并为所有支持的平台定位依赖项; 当发生构建失败时,xcodebuild 现在会在构建日志末尾的摘要显示每个失败命令的目标和项目名称; 当脚本阶段或自定义构建规则声明不属于构建输入的一部分,且未声明为构建中任何其他任务的输出依赖项的输入依赖项时...; 可以通过选择 Edit > Copy Location 以 : 的形式将所选内容的当前位置复制到剪贴板; 在 Swift 中将占位符扩展为闭时,代码完成使用闭的参数名称而不是 ;...二十五、Swift Packages 根和基于分支的依赖项现在可以在其目标设置中使用 unsafeFlags; Swift 现在可以声明 Mac Catalyst 的部署目标,并且现在可以在构建条件中将...作为平台; 当尝试导入本地尚不可用的模块时,Xcode 现在会建议添加的集合; 现在可以在 Add Packages 表添加精选的集合; 单元测试现在可以直接测试可执行目标。...二十八、App Store StoreKit 2 引入了一个现代的基于 Swift 的 API,它利用了新的语言功能, Swift 并发性。

8.6K40

玩转 Xcode Playground(上)

创建与设置 .playground vs .playgroundbook 在 Xcode 创建的 Playground 项目被保存为以.playground为后缀的(可以通过显示内容查看其中的文件....playgroundbook是 Swift Playgrounds 特有的格式,相较.playground,它包含了很多独有的功能,这些功能主要用于改善 Swift Playgrounds 在教育和娱乐方面的体验...image-20211223164000220 Xcode 可以打开 Playground 项目,也可以将 Playground 项目添加到 Project 或 Workspace (有助于测试 SPM...在 Swift Playgrounds 创建 Playground 项目 在 Swift Playgrounds 4 可以直接创建与 Xcode 兼容的 Playground 项目(.playground...如何获得异步执行的结果(Swift Playgrounds Only) 在老版本的 XcodeXcode 12、Xcode 13 已经解决了这个问题)以及 Swift Playgrounds ,如果不经过特别的设定

3.9K20

Xcode 添加 Swift package 依赖

Xcode带有内置的依赖项管理器,称为 Swift Package Manager(SPM)。您可以告诉 Xcode 在线存储的某些代码的URL,然后它将为您下载。...无论如何,第一步是将添加到我们的项目中:转到 File 菜单,然后选择 Swift Packages > Add Package Dependency。...Xcode将获取该软件,读取其配置,并向您显示一个新屏幕,询问您要使用哪个版本。...无论如何,我们已经完成了打包工作,因此请单击“完成”以使Xcode将其添加到项目中。您应该看到它出现在项目导航器的“Swift Package Dependencies”下。...要尝试,请打开 ContentView.swift 并将此导入添加到顶部: import SamplePackage 是的,外部依赖关系现在是一个模块,我们可以在需要的任何地方导入它。

6.2K10

现今 Swift 的二进制目标

文章目录 理解二进制在 Swift 的演变 命令行工具相关 结论 在 iOS 和 macOS 开发Swift 现在变得越来越重要。...Apple 已经努力推动桥接那些缝隙,并且修复那些阻碍开发者的问题,例如阻碍开发者将他们的库和依赖由其他诸如 Carthage[1] 或 CocoaPods[2] 依赖管理工具迁移到 Swift 依赖管理工具的问题...,然后将它们作为变体添加到 info.json 文件。...与 XCFrameworks 类似,工件也可以通过使用 binaryTarget 包含在 Swift 。...结论 简而言之,我们可以总结 2022 年如何在 Swift 中使用二进制文件的最佳实践,如下所示: 如果你需要为你的 iOS/macOS 项目添加预编译库或可执行文件,您应该使用 XCFramework

1.8K20

CocoaPods对三方库的管理探究

这是因为Moya依赖了它,Moya里定义了一个subspec叫Core,这是Moya/Core写法的由来。...Pods-Demo Framework 先看这个Demo的Framework,它会被用于工程项目的引用依赖 ? 这个库不会被打进里,因为Do Not Embed代表并不是包含的关系。...三方库的Framework 各个三方库也都有一些配置文件,他们文件格式基本一致,文件作用跟上面介绍的类似,下图是Moya的配置文件,XcodePods > Pods > Moya > Support...Bundle、plist、png等资源 其他类的资源是会走到switch语句最后出口,进行资源路径赋值给$RESOURCES_TO_COPY,在后面的代码通过rsync命令,将资源同步到构建的目录。...函数,将framework内容同步到构建里。

2.7K20

了解 Swift 调度器

前言 iOS 应用开发中最常见的错误之一是线程错误,当开发者试图从一个闭更新用户界面时,会出现这种错误。...在本教程,我们将学习什么是调度器,以及我们如何在iOS应用开发中使用它们来管理队列和循环。之前对 Swift、Combine 框架和 iOS 开发的知识是必要的。 让我们开始吧! 什么是调度器?...一旦你把一个操作添加到队列,该操作将保持在其队列,直到它完成执行其命令。 一个 OperationQueue,可以以串行或并行的方式执行任务,这取决于任务本身。...如果你在 Xcode 11 中使用 DispatchQueue 作为调度器,它必须是串行的,以遵守 Combine 的操作符的契约。...我们还谈到了 Combine 框架以及它是如何影响 Swift 调度器的使用。 我们学习了如何在 Swift 中使用 receive(on) 和 subscribe(on) 方法来切换调度器。

2.5K10

在多项目中统一管理资源

SPM 本身提供了对各类资源( 包括本地化资源 )的管理能力,但主要局限于在本中使用这些资源,难以将资源进行共享。在有多个 Target 均需调用同一资源的情况下,原有的方式很难应对。...开发者通常会为一个 Feature 创建一个独立的或在一个统一的( 拥有众多的 Target )创建一个单独的 Target。...之所以强调任何状态,是因为,Swift 会视项目的编译需求而将 Bundle 放置在不同的目录层级上( 例如单独编译 SPM Target 、在 SPM 中进行 Preview、在 Xcode 工程引入...实践本节,我们将通过一个具体案例来演示如何在一个拥有多个Xcode 项目中统一管理资源。可以在 此处[4]获得项目代码。...创建 Swift 的过程迫使您采取良好和健康的步骤来最终改进您的项目,例如测试、API 设计、依赖注入、文档编写等等。

1.4K20
领券