_________ ___ ___ _ _____ _________ ___ ___
/ / \ \ / / |_| ( ___ \ \__ __/ \ \ / /
/ _____/ \ \ /\ / / | | | ( \/ ) ( \ \/ /
\_____ \ \ \/ \/ / | | | (_ | | \ /
/ \ \ ____ / | | | _) | | ) (
/_______ / \/ \/ |_| | ( | | | |
\/ | ) )_( |__|
|/
_____ ______ ________ ________ ______ __ __ _____ ______ _________
/ \ ( ____\ / / / / ( ____\ | \ | | / \ ( ____\ \______ \
/ \ | ( / ____/ / ____/ | ( | |\ | | / ____\ | ( | \
/ /\ /\ \ | (__ \_____ \ \_____ \ | (__ | | \ | | / /__/ | | (__ | |____\
/ / Y \ \ | __) / \ / \ | __) | | \ | | \______ / | __) | \\
/ / \ \ | ( /_______/ /_______/ | ( | | \| | _____/ / | ( | | \\
|_/ |__| | (___/\ \/ \/ | (___/\ |__| |__| |_______/ | (___/\ |____| |_|
(______/ (______/ (______/
用于在 iOS 应用和扩展之间传递消息的 Swift 工具包。 它在容器应用和 iOS 扩展之间创建桥梁。 SwiftyMessenger 将消息归档到写入应用程序共享 App Group 的文件中。 SwiftyMessenger 类似于应用程序和扩展之间没有进程间通信的进程间通信。
它还支持 CFNotificationCenter Darwin 通知,以支持实时更改通知。 当消息传递时,感兴趣方可以监听并在双方(几乎是即时)收到这些更改的通知。
SwiftyMessenger 版本 | 最低 iOS 目标版本 | 最低 watchOS 目标版本 | Swift 版本 |
---|---|---|---|
0.4.0 | iOS 10 | watchOS 3.0 | Swift 5.x |
0.2 | iOS 9 | watchOS 2.0 | Swift 4.2 |
0.1 | iOS 9 | watchOS 2.0 | Swift 4.1 |
SwiftyMessenger 只能与 App Group 标识符和 Entitlements 配合使用。
CocoaPods 是 Cocoa 项目的依赖项管理器。 您可以使用以下命令安装它
$ gem install cocoapods
要使用 CocoaPods 将 SwiftyMessenger 集成到您的 Xcode 项目中,请在您的 Podfile 中指定它
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!
target '<Your Target Name>' do
pod 'SwiftyMessenger', '~>0.4.0'
end
Carthage 是一个去中心化的依赖项管理器,它可以构建您的依赖项并为您提供二进制框架。
您可以使用 Homebrew 使用以下命令安装 Carthage
brew update
brew install carthage
要使用 Carthage 将 SwiftyMessenger 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它
github "abdullahselek/SwiftyMessenger" ~> 0.4.0
修改您的 Package.swift 文件以包含以下依赖项
.package(url: "https://github.com/abdullahselek/SwiftyMessenger.git", from: "0.4.0")
XCFrameworks 需要 Xcode 11 或更高版本,并且集成方式与 .framework 格式的集成非常相似。 请使用脚本 scripts/build-framework.sh 生成二进制 SwiftyMessenger.xcframework 存档,您可以在 Xcode 中将其用作依赖项。
SwiftyMessenger.xcframework 是一个 Release (优化) 二进制文件,可提供最佳的 Swift 代码性能。
初始化
messenger = Messenger(withApplicationGroupIdentifier: "group.com.abdullahselek.swiftymessenger", directory: "messenger")
传递消息
messenger.passMessage(message: ["selectedCell": title], identifier: "selection")
读取消息
if let message = messenger.messageForIdentifier(identifier: "button") as? [String: Any] {
let buttonTitle = message["buttonTitle"] as? String
}
使用标识符监听消息更改
messenger.listenForMessage(withIdentifier: "button") { message in
guard let message = message as? [String: Any] else {
return
}
let buttonTitle = message["buttonTitle"] as? String
}
SwiftyMessenger 支持 Apple 在 watchOS 扩展上提供的 WatchConnectivity。
如果您想在应用程序中使用 WatchConnectivity 支持,这里有两个小提示需要了解
MessengerSession
是一个单例子类,支持监听 WatchConnectivity 消息。 它可用于监听您期望从 WatchConnectivity 框架接收的 Messenger
消息。 确保在设置好侦听器后激活会话,以便您可以开始接收消息通知。
您可以在创建 Messenger 时使用 MessengerSessionContextTransiting
,但它可能会通过一次发送过多消息来轻易地使管道过载。
您可以在 TransitingType 下找到 5 种可用类型。
file
(通过对写入和读取到文件的消息进行存档和取消存档来传输消息)coordinatedFile
(使用 FileCoordinator)sessionContext
(支持 WatchConnectivity 框架的应用程序上下文)sessionMessage
(支持 WatchConnectivity 框架的实时消息传递能力)sessionFile
(支持 WatchConnectivity 框架的文件传输能力)SwiftyMessenger 在 MIT 许可证下发布。 有关详细信息,请参见 LICENSE。
受 MutualMobile 的启发。 在新的编程语言 Swift 中改进和完全编码。